diff options
author | murf <murf@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-09-22 17:39:37 +0000 |
---|---|---|
committer | murf <murf@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-09-22 17:39:37 +0000 |
commit | 2451fd1ebfd2d4b6077038e52b2dfdde78d9c83c (patch) | |
tree | 5e2b505317d913665049866850d7717f5ac9656b /res/ael | |
parent | fbcb44ca7cdb2e3f1a0524717340ae46e7e7f77c (diff) |
Merged revisions 83558 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r83558 | murf | 2007-09-22 10:41:43 -0600 (Sat, 22 Sep 2007) | 1 line
This closes issue #10788 -- the 3rd arg in the for statement is now wrapped in Set() only if there's an '=' in that string. Otherwise, if it begins with '&', then a Macro call is generated; otherwise it is made into an app call. A bit more accomodating, keeps the new guys happy, and the guys with ael-1 code should be happy, too
........
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@83575 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'res/ael')
-rw-r--r-- | res/ael/pval.c | 42 |
1 files changed, 37 insertions, 5 deletions
diff --git a/res/ael/pval.c b/res/ael/pval.c index 3ff806b8b..ca4dfc17f 100644 --- a/res/ael/pval.c +++ b/res/ael/pval.c @@ -3147,20 +3147,52 @@ static void gen_prios(struct ael_extension *exten, char *label, pval *statement, } else for_init->appargs = strdup(p->u1.for_init); - for_inc->app = strdup("Set"); strcpy(buf2,p->u3.for_inc); remove_spaces_before_equals(buf2); strp = strchr(buf2, '='); - strp2 = strchr(p->u3.for_inc, '='); - if (strp) { + if (strp) { /* there's an = in this part; that means an assignment. set it up */ + strp2 = strchr(p->u3.for_inc, '='); *(strp+1) = 0; strcat(buf2,"$["); strncat(buf2,strp2+1, sizeof(buf2)-strlen(strp2+1)-2); strcat(buf2,"]"); for_inc->appargs = strdup(buf2); - } else - for_inc->appargs = strdup(p->u3.for_inc); + for_inc->app = strdup("Set"); + } else { + strp2 = p->u3.for_inc; + while (*strp2 && isspace(*strp2)) + strp2++; + if (*strp2 == '&') { /* itsa macro call */ + char *strp3 = strp2+1; + while (*strp3 && isspace(*strp3)) + strp3++; + strcpy(buf2, strp3); + strp3 = strchr(buf2,'('); + if (strp3) { + *strp3 = ','; + } + strp3 = strrchr(buf2, ')'); + if (strp3) + *strp3 = 0; /* remove the closing paren */ + + for_inc->appargs = strdup(buf2); + + for_inc->app = strdup("Macro"); + } else { /* must be a regular app call */ + char *strp3; + strcpy(buf2, strp2); + strp3 = strchr(buf2,'('); + if (strp3) { + *strp3 = 0; + for_inc->app = strdup(buf2); + for_inc->appargs = strdup(strp3+1); + strp3 = strrchr(for_inc->appargs, ')'); + if (strp3) + *strp3 = 0; /* remove the closing paren */ + } + } + } snprintf(buf1,sizeof(buf1),"$[%s]",p->u2.for_test); for_test->app = 0; for_test->appargs = strdup(buf1); |