Merged revisions 83589 via svnmerge from
authorSteve Murphy <murf@digium.com>
Sat, 22 Sep 2007 19:54:10 +0000 (19:54 +0000)
committerSteve Murphy <murf@digium.com>
Sat, 22 Sep 2007 19:54:10 +0000 (19:54 +0000)
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
r83589 | murf | 2007-09-22 13:39:16 -0600 (Sat, 22 Sep 2007) | 1 line

This closes issue #10788 -- The exact same fixes are made here for the first arg in the for(arg1; arg2; arg3) {} statement, as were done for the 3rd arg. It can now be an assignment that will embedded in a Set() app, or a macro call, or an app call.
........

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@83590 65c4cc65-6c06-0410-ace0-fbb531ad65f3

res/ael/pval.c

index ca4dfc1..360df8e 100644 (file)
@@ -3137,16 +3137,51 @@ static void gen_prios(struct ael_extension *exten, char *label, pval *statement,
                        strcpy(buf2,p->u1.for_init);
                        remove_spaces_before_equals(buf2);
                        strp = strchr(buf2, '=');
-                       strp2 = strchr(p->u1.for_init, '=');
                        if (strp) {
+                               strp2 = strchr(p->u1.for_init, '=');
                                *(strp+1) = 0;
                                strcat(buf2,"$[");
                                strncat(buf2,strp2+1, sizeof(buf2)-strlen(strp2+1)-2);
                                strcat(buf2,"]");
                                for_init->appargs = strdup(buf2);
-                       } else
-                               for_init->appargs = strdup(p->u1.for_init);
+                               for_init->app = strdup("Set");
+                       } else {
+                               strp2 = p->u1.for_init;
+                               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 = '|';
+                                       }
+                                       while ((strp3=strchr(buf2,','))) {
+                                               *strp3 = '|';
+                                       }
+                                       strp3 = strrchr(buf2, ')');
+                                       if (strp3)
+                                               *strp3 = 0; /* remove the closing paren */
+
+                                       for_init->appargs = strdup(buf2);
 
+                                       for_init->app = strdup("Macro");
+                               } else {  /* must be a regular app call */
+                                       char *strp3;
+                                       strcpy(buf2, strp2);
+                                       strp3 = strchr(buf2,'(');
+                                       if (strp3) {
+                                               *strp3 = 0;
+                                               for_init->app = strdup(buf2);
+                                               for_init->appargs = strdup(strp3+1);
+                                               strp3 = strrchr(for_init->appargs, ')');
+                                               if (strp3)
+                                                       *strp3 = 0; /* remove the closing paren */
+                                       }
+                               }
+                       }
 
                        strcpy(buf2,p->u3.for_inc);
                        remove_spaces_before_equals(buf2);