diff options
-rw-r--r-- | pbx/ael/ael-test/ael-ntest23/extensions.ael | 7 | ||||
-rw-r--r-- | pbx/ael/ael-test/ael-ntest23/qq.ael | 6 | ||||
-rw-r--r-- | pbx/ael/ael-test/ael-ntest23/t1/a.ael | 4 | ||||
-rw-r--r-- | pbx/ael/ael-test/ael-ntest23/t1/b.ael | 6 | ||||
-rw-r--r-- | pbx/ael/ael-test/ael-ntest23/t1/c.ael | 13 | ||||
-rw-r--r-- | pbx/ael/ael-test/ael-ntest23/t2/d.ael | 4 | ||||
-rw-r--r-- | pbx/ael/ael-test/ael-ntest23/t2/e.ael | 6 | ||||
-rw-r--r-- | pbx/ael/ael-test/ael-ntest23/t2/f.ael | 9 | ||||
-rw-r--r-- | pbx/ael/ael-test/ael-ntest23/t3/g.ael | 4 | ||||
-rw-r--r-- | pbx/ael/ael-test/ael-ntest23/t3/h.ael | 6 | ||||
-rw-r--r-- | pbx/ael/ael-test/ael-ntest23/t3/i.ael | 4 | ||||
-rw-r--r-- | pbx/ael/ael-test/ael-ntest23/t3/j.ael | 6 | ||||
-rw-r--r-- | pbx/ael/ael-test/ref.ael-ntest23 | 24 | ||||
-rw-r--r-- | res/ael/ael.flex | 20 | ||||
-rw-r--r-- | res/ael/ael_lex.c | 21 |
15 files changed, 122 insertions, 18 deletions
diff --git a/pbx/ael/ael-test/ael-ntest23/extensions.ael b/pbx/ael/ael-test/ael-ntest23/extensions.ael new file mode 100644 index 000000000..7128258ed --- /dev/null +++ b/pbx/ael/ael-test/ael-ntest23/extensions.ael @@ -0,0 +1,7 @@ +#include "t1/*.ael" + +context z () +{ + 123 => NoOp(hi there, z); + 124 => NoOp(hi there, z); +} diff --git a/pbx/ael/ael-test/ael-ntest23/qq.ael b/pbx/ael/ael-test/ael-ntest23/qq.ael new file mode 100644 index 000000000..c446f53fc --- /dev/null +++ b/pbx/ael/ael-test/ael-ntest23/qq.ael @@ -0,0 +1,6 @@ + + +context qq +{ + 567 => NoOp(hi there, qq); +} diff --git a/pbx/ael/ael-test/ael-ntest23/t1/a.ael b/pbx/ael/ael-test/ael-ntest23/t1/a.ael new file mode 100644 index 000000000..62e3fc588 --- /dev/null +++ b/pbx/ael/ael-test/ael-ntest23/t1/a.ael @@ -0,0 +1,4 @@ +context a +{ + 134 => NoOp(hi there, a); +} diff --git a/pbx/ael/ael-test/ael-ntest23/t1/b.ael b/pbx/ael/ael-test/ael-ntest23/t1/b.ael new file mode 100644 index 000000000..29d8d1ff4 --- /dev/null +++ b/pbx/ael/ael-test/ael-ntest23/t1/b.ael @@ -0,0 +1,6 @@ + + +context b +{ + 456 => NoOp(hithere, b); +} diff --git a/pbx/ael/ael-test/ael-ntest23/t1/c.ael b/pbx/ael/ael-test/ael-ntest23/t1/c.ael new file mode 100644 index 000000000..d18eb7677 --- /dev/null +++ b/pbx/ael/ael-test/ael-ntest23/t1/c.ael @@ -0,0 +1,13 @@ + + +context c() +{ + 567 => NoOp(hi there, c); +} + +#include "t2/*.ael" + +context w() +{ + 890 => NoOp(hi there, w); +} diff --git a/pbx/ael/ael-test/ael-ntest23/t2/d.ael b/pbx/ael/ael-test/ael-ntest23/t2/d.ael new file mode 100644 index 000000000..6362278f7 --- /dev/null +++ b/pbx/ael/ael-test/ael-ntest23/t2/d.ael @@ -0,0 +1,4 @@ +context d +{ + 134 => NoOp(hi there, d); +} diff --git a/pbx/ael/ael-test/ael-ntest23/t2/e.ael b/pbx/ael/ael-test/ael-ntest23/t2/e.ael new file mode 100644 index 000000000..9465c8b4e --- /dev/null +++ b/pbx/ael/ael-test/ael-ntest23/t2/e.ael @@ -0,0 +1,6 @@ + + +context e +{ + 456 => NoOp(hithere, e); +} diff --git a/pbx/ael/ael-test/ael-ntest23/t2/f.ael b/pbx/ael/ael-test/ael-ntest23/t2/f.ael new file mode 100644 index 000000000..ba15a6389 --- /dev/null +++ b/pbx/ael/ael-test/ael-ntest23/t2/f.ael @@ -0,0 +1,9 @@ +#include "qq.ael" + +context f +{ + 567 => NoOp(hi there, f); +} + +#include "t3/*.ael" + diff --git a/pbx/ael/ael-test/ael-ntest23/t3/g.ael b/pbx/ael/ael-test/ael-ntest23/t3/g.ael new file mode 100644 index 000000000..0f1ecc805 --- /dev/null +++ b/pbx/ael/ael-test/ael-ntest23/t3/g.ael @@ -0,0 +1,4 @@ +context g +{ + 134 => NoOp(hi there, g); +} diff --git a/pbx/ael/ael-test/ael-ntest23/t3/h.ael b/pbx/ael/ael-test/ael-ntest23/t3/h.ael new file mode 100644 index 000000000..f9e3ca89f --- /dev/null +++ b/pbx/ael/ael-test/ael-ntest23/t3/h.ael @@ -0,0 +1,6 @@ + + +context h +{ + 456 => NoOp(hithere, h); +} diff --git a/pbx/ael/ael-test/ael-ntest23/t3/i.ael b/pbx/ael/ael-test/ael-ntest23/t3/i.ael new file mode 100644 index 000000000..5639a1e98 --- /dev/null +++ b/pbx/ael/ael-test/ael-ntest23/t3/i.ael @@ -0,0 +1,4 @@ +context i +{ + 134 => NoOp(hi there, i); +} diff --git a/pbx/ael/ael-test/ael-ntest23/t3/j.ael b/pbx/ael/ael-test/ael-ntest23/t3/j.ael new file mode 100644 index 000000000..8dfc6c05f --- /dev/null +++ b/pbx/ael/ael-test/ael-ntest23/t3/j.ael @@ -0,0 +1,6 @@ + + +context j +{ + 567 => NoOp(hi there, j); +} diff --git a/pbx/ael/ael-test/ref.ael-ntest23 b/pbx/ael/ael-test/ref.ael-ntest23 new file mode 100644 index 000000000..b7b4852ec --- /dev/null +++ b/pbx/ael/ael-test/ref.ael-ntest23 @@ -0,0 +1,24 @@ + +(If you find progress and other non-error messages irritating, you can use -q to suppress them) + +(You can use the -n option if you aren't interested in seeing all the instructions generated by the compiler) + + +(You can use the -w option to dump extensions.conf format to extensions.conf.aeldump) +LOG: lev:2 file:pbx_ael.c line:116 func: pbx_load_module Starting AEL load process. +LOG: lev:2 file:ael.flex line:672 func: setup_filestack --Read in included file ././t1/a.ael, 41 chars +LOG: lev:2 file:ael.flex line:672 func: setup_filestack --Read in included file ././t1/b.ael, 42 chars +LOG: lev:2 file:ael.flex line:672 func: setup_filestack --Read in included file ././t1/c.ael, 110 chars +LOG: lev:4 file:ael.y line:774 func: ael_yyerror ==== File: ././t1/c.ael, Line 3, Cols: 10-10: Error: syntax error, unexpected '(', expecting '{' +LOG: lev:2 file:ael.flex line:672 func: setup_filestack --Read in included file ././t2/d.ael, 41 chars +LOG: lev:2 file:ael.flex line:672 func: setup_filestack --Read in included file ././t2/e.ael, 42 chars +LOG: lev:2 file:ael.flex line:672 func: setup_filestack --Read in included file ././t2/f.ael, 82 chars +LOG: lev:2 file:ael.flex line:672 func: setup_filestack --Read in included file ././qq.ael, 45 chars +LOG: lev:2 file:ael.flex line:672 func: setup_filestack --Read in included file ././t3/g.ael, 41 chars +LOG: lev:2 file:ael.flex line:672 func: setup_filestack --Read in included file ././t3/h.ael, 42 chars +LOG: lev:2 file:ael.flex line:672 func: setup_filestack --Read in included file ././t3/i.ael, 41 chars +LOG: lev:2 file:ael.flex line:672 func: setup_filestack --Read in included file ././t3/j.ael, 43 chars +LOG: lev:4 file:ael.y line:774 func: ael_yyerror ==== File: ././t1/c.ael, Line 10, Cols: 10-10: Error: syntax error, unexpected '(', expecting '{' +LOG: lev:2 file:pbx_ael.c line:129 func: pbx_load_module AEL load process: parsed config file name './extensions.ael'. +LOG: lev:4 file:pbx_ael.c line:145 func: pbx_load_module Sorry, but 2 syntax errors and 0 semantic errors were detected. It doesn't make sense to compile. +LOG: lev:4 file:ael2_parse line:544 func: main 0 contexts, 0 extensions, 0 priorities diff --git a/res/ael/ael.flex b/res/ael/ael.flex index cf2d36a2c..35ca126aa 100644 --- a/res/ael/ael.flex +++ b/res/ael/ael.flex @@ -445,8 +445,6 @@ includes { STORE_POS; return KW_INCLUDES;} <<EOF>> { char fnamebuf[2048]; if (include_stack_index > 0 && include_stack[include_stack_index-1].globbuf_pos < include_stack[include_stack_index-1].globbuf.gl_pathc-1) { - free(my_file); - my_file = 0; yy_delete_buffer( YY_CURRENT_BUFFER, yyscanner ); include_stack[include_stack_index-1].globbuf_pos++; setup_filestack(fnamebuf, sizeof(fnamebuf), &include_stack[include_stack_index-1].globbuf, include_stack[include_stack_index-1].globbuf_pos, yyscanner, 0); @@ -457,13 +455,13 @@ includes { STORE_POS; return KW_INCLUDES;} free(include_stack[include_stack_index].fname); include_stack[include_stack_index].fname = 0; } + if (my_file) { + free(my_file); + my_file = 0; + } if ( --include_stack_index < 0 ) { yyterminate(); } else { - if (my_file) { - free(my_file); - my_file = 0; - } globfree(&include_stack[include_stack_index].globbuf); include_stack[include_stack_index].globbuf_pos = -1; @@ -670,12 +668,16 @@ static void setup_filestack(char *fnamebuf2, int fnamebuf_siz, glob_t *globbuf, buffer[stats.st_size] = 0; ast_log(LOG_NOTICE," --Read in included file %s, %d chars\n",fnamebuf2, (int)stats.st_size); fclose(in1); - if (my_file) - free(my_file); - my_file = strdup(fnamebuf2); + if (include_stack[include_stack_index].fname) { + free(include_stack[include_stack_index].fname); + include_stack[include_stack_index].fname = 0; + } include_stack[include_stack_index].fname = strdup(my_file); include_stack[include_stack_index].lineno = my_lineno; include_stack[include_stack_index].colno = my_col+yyleng; + if (my_file) + free(my_file); + my_file = strdup(fnamebuf2); if (create) include_stack[include_stack_index].globbuf = *globbuf; diff --git a/res/ael/ael_lex.c b/res/ael/ael_lex.c index 26206af5d..1f96e3377 100644 --- a/res/ael/ael_lex.c +++ b/res/ael/ael_lex.c @@ -793,6 +793,7 @@ static yyconst flex_int16_t yy_chk[1035] = * bison-locations is probably not needed. */ #line 63 "ael.flex" +#include "asterisk.h" ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include <sys/types.h> @@ -1745,8 +1746,6 @@ case YY_STATE_EOF(comment): { char fnamebuf[2048]; if (include_stack_index > 0 && include_stack[include_stack_index-1].globbuf_pos < include_stack[include_stack_index-1].globbuf.gl_pathc-1) { - free(my_file); - my_file = 0; ael_yy_delete_buffer(YY_CURRENT_BUFFER,yyscanner ); include_stack[include_stack_index-1].globbuf_pos++; setup_filestack(fnamebuf, sizeof(fnamebuf), &include_stack[include_stack_index-1].globbuf, include_stack[include_stack_index-1].globbuf_pos, yyscanner, 0); @@ -1757,13 +1756,13 @@ case YY_STATE_EOF(comment): free(include_stack[include_stack_index].fname); include_stack[include_stack_index].fname = 0; } + if (my_file) { + free(my_file); + my_file = 0; + } if ( --include_stack_index < 0 ) { yyterminate(); } else { - if (my_file) { - free(my_file); - my_file = 0; - } globfree(&include_stack[include_stack_index].globbuf); include_stack[include_stack_index].globbuf_pos = -1; @@ -3102,12 +3101,16 @@ static void setup_filestack(char *fnamebuf2, int fnamebuf_siz, glob_t *globbuf, buffer[stats.st_size] = 0; ast_log(LOG_NOTICE," --Read in included file %s, %d chars\n",fnamebuf2, (int)stats.st_size); fclose(in1); - if (my_file) - free(my_file); - my_file = strdup(fnamebuf2); + if (include_stack[include_stack_index].fname) { + free(include_stack[include_stack_index].fname); + include_stack[include_stack_index].fname = 0; + } include_stack[include_stack_index].fname = strdup(my_file); include_stack[include_stack_index].lineno = my_lineno; include_stack[include_stack_index].colno = my_col+yyleng; + if (my_file) + free(my_file); + my_file = strdup(fnamebuf2); if (create) include_stack[include_stack_index].globbuf = *globbuf; |