diff --git a/pbx/ael/ael-test/ael-ntest12/extensions.ael b/pbx/ael/ael-test/ael-ntest12/extensions.ael new file mode 100644 index 0000000000000000000000000000000000000000..1e3183358637c3e0af2ce8345639a23cb4b4f536 --- /dev/null +++ b/pbx/ael/ael-test/ael-ntest12/extensions.ael @@ -0,0 +1,13 @@ +context test1 +{ + 771 => { + for( i=0; + ${i} <= 3; + i = ${i} + 1 ) + NoOp(i is '${i}'); + } + 772 => { + for(i=0; ${i} <= 3;i= ${i} + 1 ) + NoOp(i is '${i}'); + } +} diff --git a/pbx/ael/ael-test/ref.ael-ntest12 b/pbx/ael/ael-test/ref.ael-ntest12 new file mode 100644 index 0000000000000000000000000000000000000000..8f797d096e822106a58c10fbb511c3aec87812b3 --- /dev/null +++ b/pbx/ael/ael-test/ref.ael-ntest12 @@ -0,0 +1,36 @@ +Executed ast_register_file_version(); +Executed ast_register_file_version(); +Executed ast_register_file_version(); +Executed ast_register_file_version(); + +(You can use the -n option if you aren't interested in seeing all the instructions generated by the compiler) + +Executed ast_cli_register_multiple(); +LOG: lev:2 file:../pbx/pbx_ael.c line:3480 func: pbx_load_module Starting AEL load process. +LOG: lev:2 file:../pbx/pbx_ael.c line:3487 func: pbx_load_module AEL load process: calculated config file name './extensions.ael'. +LOG: lev:2 file:../pbx/pbx_ael.c line:3490 func: pbx_load_module AEL load process: parsed config file name './extensions.ael'. +LOG: lev:2 file:../pbx/pbx_ael.c line:3493 func: pbx_load_module AEL load process: checked config file name './extensions.ael'. +Executed ast_context_create(conts, name=test1, registrar=pbx_ael); +Executed ast_add_extension2(con, rep=0, exten=771, priority=1, label=(null), callerid=(null), appl=Set, data=i=$[0], FREE, registrar=pbx_ael); +Executed ast_add_extension2(con, rep=0, exten=771, priority=2, label=(null), callerid=(null), appl=GotoIf, data=$[ + ${i} <= 3]?3:6, FREE, registrar=pbx_ael); +Executed ast_add_extension2(con, rep=0, exten=771, priority=3, label=(null), callerid=(null), appl=NoOp, data=i is '${i}', FREE, registrar=pbx_ael); +Executed ast_add_extension2(con, rep=0, exten=771, priority=4, label=(null), callerid=(null), appl=Set, data=i=$[ ${i} + 1 ], FREE, registrar=pbx_ael); +Executed ast_add_extension2(con, rep=0, exten=771, priority=5, label=(null), callerid=(null), appl=Goto, data=2, FREE, registrar=pbx_ael); +Executed ast_add_extension2(con, rep=0, exten=771, priority=6, label=(null), callerid=(null), appl=NoOp, data=Finish for-test1-1, FREE, registrar=pbx_ael); +Executed ast_add_extension2(con, rep=0, exten=772, priority=1, label=(null), callerid=(null), appl=Set, data=i=$[0], FREE, registrar=pbx_ael); +Executed ast_add_extension2(con, rep=0, exten=772, priority=2, label=(null), callerid=(null), appl=GotoIf, data=$[ ${i} <= 3]?3:6, FREE, registrar=pbx_ael); +Executed ast_add_extension2(con, rep=0, exten=772, priority=3, label=(null), callerid=(null), appl=NoOp, data=i is '${i}', FREE, registrar=pbx_ael); +Executed ast_add_extension2(con, rep=0, exten=772, priority=4, label=(null), callerid=(null), appl=Set, data=i=$[ ${i} + 1 ], FREE, registrar=pbx_ael); +Executed ast_add_extension2(con, rep=0, exten=772, priority=5, label=(null), callerid=(null), appl=Goto, data=2, FREE, registrar=pbx_ael); +Executed ast_add_extension2(con, rep=0, exten=772, priority=6, label=(null), callerid=(null), appl=NoOp, data=Finish for-test1-2, FREE, registrar=pbx_ael); +LOG: lev:2 file:../pbx/pbx_ael.c line:3495 func: pbx_load_module AEL load process: compiled config file name './extensions.ael'. +Executed ast_merge_contexts_and_delete(); +LOG: lev:2 file:../pbx/pbx_ael.c line:3498 func: pbx_load_module AEL load process: merged config file name './extensions.ael'. +Executed ast_walk_contexts(); +LOG: lev:2 file:../pbx/pbx_ael.c line:3501 func: pbx_load_module AEL load process: verified config file name './extensions.ael'. +LOG: lev:4 file:ael2_parse line:253 func: main 1 contexts, 2 extensions, 12 priorities +Executed ast_unregister_file_version(); +Executed ast_unregister_file_version(); +Executed ast_unregister_file_version(); +Executed ast_unregister_file_version(); diff --git a/pbx/pbx_ael.c b/pbx/pbx_ael.c index 2d40b7152223e6186d65814bf33ccbb37330c5c4..680d3d855df8ed344aefd2af1f691d29810247da 100644 --- a/pbx/pbx_ael.c +++ b/pbx/pbx_ael.c @@ -149,6 +149,8 @@ static void print_pval_list(FILE *fin, pval *item, int depth); static struct pval *find_label_in_current_extension(const char *label); static struct pval *find_label_in_current_db(const char *context, const char *exten, const char *label); +static void remove_spaces_before_equals(char *str); + /* PRETTY PRINTER FOR AEL: ============================================================================= */ @@ -2526,6 +2528,25 @@ void linkexten(struct ael_extension *exten, struct ael_extension *add) exten->next_exten = add; } +static void remove_spaces_before_equals(char *str) +{ + char *p; + while( str && *str && *str != '=' ) + { + if( *str == ' ' || *str == '\n' || *str == '\r' || *str == '\t' ) + { + p = str; + while( *p ) + { + *p = *(p+1); + p++; + } + } + else + str++; + } +} + void gen_prios(struct ael_extension *exten, char *label, pval *statement, struct ael_extension *mother_exten ) { pval *p,*p2,*p3; @@ -2554,6 +2575,7 @@ void gen_prios(struct ael_extension *exten, char *label, pval *statement, struct pr->type = AEL_APPCALL; snprintf(buf1,sizeof(buf1),"%s=$[%s]", p->u1.str, p->u2.val); pr->app = strdup("Set"); + remove_spaces_before_equals(buf1); pr->appargs = strdup(buf1); pr->origin = p; linkprio(exten, pr); @@ -2612,6 +2634,7 @@ void gen_prios(struct ael_extension *exten, char *label, pval *statement, struct for_init->app = strdup("Set"); strcpy(buf2,p->u1.for_init); + remove_spaces_before_equals(buf2); strp = strchr(buf2, '='); strp2 = strchr(p->u1.for_init, '='); if (strp) { @@ -2626,6 +2649,7 @@ void gen_prios(struct ael_extension *exten, char *label, pval *statement, struct 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) { @@ -3308,6 +3332,7 @@ void ast_compile_ael2(struct ast_context **local_contexts, struct pval *root) np2->type = AEL_APPCALL; np2->app = strdup("Set"); snprintf(buf,sizeof(buf),"%s=${ARG%d}", lp->u1.str, argc++); + remove_spaces_before_equals(buf); np2->appargs = strdup(buf); linkprio(exten, np2); }