aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/asterisk/pval.h3
-rw-r--r--pbx/ael/ael-test/ref.ael-test1619
-rw-r--r--pbx/ael/ael-test/ref.ael-test194
-rw-r--r--pbx/pbx_ael.c794
-rw-r--r--res/ael/ael.flex1
-rw-r--r--res/ael/ael.tab.c1378
-rw-r--r--res/ael/ael.tab.h80
-rw-r--r--res/ael/ael.y21
-rw-r--r--res/ael/ael_lex.c698
-rw-r--r--res/ael/pval.c6
-rw-r--r--utils/ael_main.c16
-rw-r--r--utils/conf2ael.c7
12 files changed, 1138 insertions, 1889 deletions
diff --git a/include/asterisk/pval.h b/include/asterisk/pval.h
index 11d672db2..edfd647b3 100644
--- a/include/asterisk/pval.h
+++ b/include/asterisk/pval.h
@@ -77,10 +77,11 @@ struct pval
char *for_inc; /* used in FOR */
struct pval *else_statements; /* used in IF */
struct pval *macro_statements; /* used in MACRO */
- int abstract; /* used for context */
+ int abstract; /* used for context 1=abstract; 2=extend; 3=both */
char *hints; /* used in EXTENSION */
int goto_target_in_case; /* used in GOTO */
struct ael_extension *compiled_label;
+ struct pval *extend; /* to link extended contexts to the 'original' */
} u3;
union
diff --git a/pbx/ael/ael-test/ref.ael-test16 b/pbx/ael/ael-test/ref.ael-test16
index ffa926009..9bbca8bee 100644
--- a/pbx/ael/ael-test/ref.ael-test16
+++ b/pbx/ael/ael-test/ref.ael-test16
@@ -2,13 +2,12 @@
(If you find progress and other non-error messages irritating, you can use -q to suppress them)
(You can use the -w option to dump extensions.conf format to extensions.conf.aeldump)
-LOG: lev:2 file:pbx_ael.c line:113 func: pbx_load_module Starting AEL load process.
-LOG: lev:2 file:pbx_ael.c line:120 func: pbx_load_module AEL load process: calculated config file name './extensions.ael'.
-LOG: lev:3 file:ael.y line:205 func: ael_yyparse ==== File: ./extensions.ael, Line 1, Cols: 19-19: Warning! The empty context real-small will be IGNORED!
-LOG: lev:2 file:pbx_ael.c line:128 func: pbx_load_module AEL load process: parsed config file name './extensions.ael'.
-LOG: lev:2 file:pbx_ael.c line:131 func: pbx_load_module AEL load process: checked config file name './extensions.ael'.
-LOG: lev:3 file:pval.c line:3633 func: add_extensions This file is Empty!
-LOG: lev:2 file:pbx_ael.c line:133 func: pbx_load_module AEL load process: compiled config file name './extensions.ael'.
-LOG: lev:2 file:pbx_ael.c line:136 func: pbx_load_module AEL load process: merged config file name './extensions.ael'.
-LOG: lev:2 file:pbx_ael.c line:139 func: pbx_load_module AEL load process: verified config file name './extensions.ael'.
-LOG: lev:4 file:ael2_parse line:499 func: main 0 contexts, 0 extensions, 0 priorities
+LOG: lev:2 file:pbx_ael.c line:913 func: pbx_load_module Starting AEL load process.
+LOG: lev:2 file:pbx_ael.c line:920 func: pbx_load_module AEL load process: calculated config file name './extensions.ael'.
+LOG: lev:2 file:pbx_ael.c line:928 func: pbx_load_module AEL load process: parsed config file name './extensions.ael'.
+LOG: lev:2 file:pbx_ael.c line:931 func: pbx_load_module AEL load process: checked config file name './extensions.ael'.
+LOG: lev:3 file:pval.c line:3784 func: add_extensions This file is Empty!
+LOG: lev:2 file:pbx_ael.c line:933 func: pbx_load_module AEL load process: compiled config file name './extensions.ael'.
+LOG: lev:2 file:pbx_ael.c line:936 func: pbx_load_module AEL load process: merged config file name './extensions.ael'.
+LOG: lev:2 file:pbx_ael.c line:939 func: pbx_load_module AEL load process: verified config file name './extensions.ael'.
+LOG: lev:4 file:ael2_parse line:543 func: main 1 contexts, 0 extensions, 0 priorities
diff --git a/pbx/ael/ael-test/ref.ael-test19 b/pbx/ael/ael-test/ref.ael-test19
index 27a322b75..f0ab66717 100644
--- a/pbx/ael/ael-test/ref.ael-test19
+++ b/pbx/ael/ael-test/ref.ael-test19
@@ -5,7 +5,7 @@
LOG: lev:2 file:pbx_ael.c line:913 func: pbx_load_module Starting AEL load process.
LOG: lev:2 file:pbx_ael.c line:920 func: pbx_load_module AEL load process: calculated config file name './extensions.ael'.
LOG: lev:2 file:pbx_ael.c line:928 func: pbx_load_module AEL load process: parsed config file name './extensions.ael'.
-LOG: lev:3 file:pval.c line:2298 func: check_context_names Warning: file ./extensions.ael, line 49-62: The context name (incoming) is also declared in file ./extensions.ael, line 62-69!
+LOG: lev:3 file:pval.c line:2298 func: check_context_names Warning: file ./extensions.ael, line 49-62: The context name (incoming) is also declared in file ./extensions.ael, line 62-69! (and neither is marked 'extend')
LOG: lev:3 file:pval.c line:670 func: check_macro_returns Warning: file ./extensions.ael, line 71-175: The macro std-priv-exten does not end with a return; I will insert one.
LOG: lev:3 file:pval.c line:2282 func: check_switch_expr Warning: file ./extensions.ael, line 245-246: A default case was automatically added to the switch.
LOG: lev:3 file:pval.c line:2424 func: check_pval_item Warning: file ./extensions.ael, line 312-312: macro call to non-existent funcA! (Not even in the extensions.conf stuff!)
@@ -16,4 +16,4 @@ LOG: lev:2 file:pbx_ael.c line:931 func: pbx_load_module AEL load process: che
LOG: lev:2 file:pbx_ael.c line:933 func: pbx_load_module AEL load process: compiled config file name './extensions.ael'.
LOG: lev:2 file:pbx_ael.c line:936 func: pbx_load_module AEL load process: merged config file name './extensions.ael'.
LOG: lev:2 file:pbx_ael.c line:939 func: pbx_load_module AEL load process: verified config file name './extensions.ael'.
-LOG: lev:4 file:ael2_parse line:527 func: main 13 contexts, 57 extensions, 188 priorities
+LOG: lev:4 file:ael2_parse line:543 func: main 13 contexts, 57 extensions, 188 priorities
diff --git a/pbx/pbx_ael.c b/pbx/pbx_ael.c
index 506c75184..521d13ada 100644
--- a/pbx/pbx_ael.c
+++ b/pbx/pbx_ael.c
@@ -63,8 +63,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
static char *config = "extensions.ael";
static char *registrar = "pbx_ael";
static int pbx_load_module(void);
-static int warns, errs;
-static struct pval *current_db;
#ifndef AAL_ARGCHECK
/* for the time being, short circuit all the AAL related structures
@@ -103,799 +101,7 @@ int is_float(char *arg );
int is_int(char *arg );
int is_empty(char *arg);
-static const char *match_context;
-static const char *match_exten;
-static const char *match_label;
-static int count_labels; /* true, put matcher in label counting mode */
-static int return_on_context_match;
-struct pval *match_pval(pval *item);
-static void check_goto(pval *item);
-static void find_pval_goto_item(pval *item, int lev);
-static void find_pval_gotos(pval *item, int lev);
-
-static struct pval *find_label_in_current_context(char *exten, char *label, pval *curr_cont);
-static struct pval *find_first_label_in_current_context(char *label, pval *curr_cont);
-static void print_pval_list(FILE *fin, pval *item, int depth);
-
-static struct pval *find_label_in_current_extension(const char *label, pval *curr_ext);
-static struct pval *find_label_in_current_db(const char *context, const char *exten, const char *label);
-static pval *get_extension_or_contxt(pval *p);
-static pval *get_contxt(pval *p);
/* static void substitute_commas(char *str); */
-#ifdef NOMORE
-/*! \brief I am adding this code to substitute commas with vertbars in the args to apps */
-static void substitute_commas(char *str)
-{
- char *p = str;
-
- while (p && *p)
- {
- if (*p == ',' && ((p != str && *(p-1) != '\\')
- || p == str))
- *p = '|';
- if (*p == '\\' && *(p+1) == ',') { /* learning experience: the '\,' is turned into just ',' by pbx_config; So we need to do the same */
- char *q = p;
- while (*q) { /* move the ',' and everything after it up 1 char */
- *q = *(q+1);
- q++;
- }
- }
- p++;
- }
-}
-#endif
-
-/* PRETTY PRINTER FOR AEL: ============================================================================= */
-
-static void print_pval(FILE *fin, pval *item, int depth)
-{
- int i;
- pval *lp;
-
- for (i=0; i<depth; i++) {
- fprintf(fin, "\t"); /* depth == indentation */
- }
-
- switch ( item->type ) {
- case PV_WORD:
- fprintf(fin,"%s;\n", item->u1.str); /* usually, words are encapsulated in something else */
- break;
-
- case PV_MACRO:
- fprintf(fin,"macro %s(", item->u1.str);
- for (lp=item->u2.arglist; lp; lp=lp->next) {
- if (lp != item->u2.arglist )
- fprintf(fin,", ");
- fprintf(fin,"%s", lp->u1.str);
- }
- fprintf(fin,") {\n");
- print_pval_list(fin,item->u3.macro_statements,depth+1);
- for (i=0; i<depth; i++) {
- fprintf(fin,"\t"); /* depth == indentation */
- }
- fprintf(fin,"};\n\n");
- break;
-
- case PV_CONTEXT:
- if ( item->u3.abstract )
- fprintf(fin,"abstract context %s {\n", item->u1.str);
- else
- fprintf(fin,"context %s {\n", item->u1.str);
- print_pval_list(fin,item->u2.statements,depth+1);
- for (i=0; i<depth; i++) {
- fprintf(fin,"\t"); /* depth == indentation */
- }
- fprintf(fin,"};\n\n");
- break;
-
- case PV_MACRO_CALL:
- fprintf(fin,"&%s(", item->u1.str);
- for (lp=item->u2.arglist; lp; lp=lp->next) {
- if ( lp != item->u2.arglist )
- fprintf(fin,", ");
- fprintf(fin,"%s", lp->u1.str);
- }
- fprintf(fin,");\n");
- break;
-
- case PV_APPLICATION_CALL:
- fprintf(fin,"%s(", item->u1.str);
- for (lp=item->u2.arglist; lp; lp=lp->next) {
- if ( lp != item->u2.arglist )
- fprintf(fin,",");
- fprintf(fin,"%s", lp->u1.str);
- }
- fprintf(fin,");\n");
- break;
-
- case PV_CASE:
- fprintf(fin,"case %s:\n", item->u1.str);
- print_pval_list(fin,item->u2.statements, depth+1);
- break;
-
- case PV_PATTERN:
- fprintf(fin,"pattern %s:\n", item->u1.str);
- print_pval_list(fin,item->u2.statements, depth+1);
- break;
-
- case PV_DEFAULT:
- fprintf(fin,"default:\n");
- print_pval_list(fin,item->u2.statements, depth+1);
- break;
-
- case PV_CATCH:
- fprintf(fin,"catch %s {\n", item->u1.str);
- print_pval_list(fin,item->u2.statements, depth+1);
- for (i=0; i<depth; i++) {
- fprintf(fin,"\t"); /* depth == indentation */
- }
- fprintf(fin,"};\n");
- break;
-
- case PV_SWITCHES:
- fprintf(fin,"switches {\n");
- print_pval_list(fin,item->u1.list,depth+1);
- for (i=0; i<depth; i++) {
- fprintf(fin,"\t"); /* depth == indentation */
- }
- fprintf(fin,"};\n");
- break;
-
- case PV_ESWITCHES:
- fprintf(fin,"eswitches {\n");
- print_pval_list(fin,item->u1.list,depth+1);
- for (i=0; i<depth; i++) {
- fprintf(fin,"\t"); /* depth == indentation */
- }
- fprintf(fin,"};\n");
- break;
-
- case PV_INCLUDES:
- fprintf(fin,"includes {\n");
- for (lp=item->u1.list; lp; lp=lp->next) {
- for (i=0; i<depth+1; i++) {
- fprintf(fin,"\t"); /* depth == indentation */
- }
- fprintf(fin,"%s", lp->u1.str); /* usually, words are encapsulated in something else */
- if ( lp->u2.arglist )
- fprintf(fin,"|%s|%s|%s|%s",
- lp->u2.arglist->u1.str,
- lp->u2.arglist->next->u1.str,
- lp->u2.arglist->next->next->u1.str,
- lp->u2.arglist->next->next->next->u1.str
- );
- fprintf(fin,";\n"); /* usually, words are encapsulated in something else */
- }
-
- print_pval_list(fin,item->u1.list,depth+1);
- for (i=0; i<depth; i++) {
- fprintf(fin,"\t"); /* depth == indentation */
- }
- fprintf(fin,"};\n");
- break;
-
- case PV_STATEMENTBLOCK:
- fprintf(fin,"{\n");
- print_pval_list(fin,item->u1.list, depth+1);
- for (i=0; i<depth; i++) {
- fprintf(fin,"\t"); /* depth == indentation */
- }
- fprintf(fin,"};\n");
- break;
-
- case PV_VARDEC:
- fprintf(fin,"%s=%s;\n", item->u1.str, item->u2.val);
- break;
-
- case PV_LOCALVARDEC:
- fprintf(fin,"local %s=%s;\n", item->u1.str, item->u2.val);
- break;
-
- case PV_GOTO:
- fprintf(fin,"goto %s", item->u1.list->u1.str);
- if ( item->u1.list->next )
- fprintf(fin,",%s", item->u1.list->next->u1.str);
- if ( item->u1.list->next && item->u1.list->next->next )
- fprintf(fin,",%s", item->u1.list->next->next->u1.str);
- fprintf(fin,"\n");
- break;
-
- case PV_LABEL:
- fprintf(fin,"%s:\n", item->u1.str);
- break;
-
- case PV_FOR:
- fprintf(fin,"for (%s; %s; %s)\n", item->u1.for_init, item->u2.for_test, item->u3.for_inc);
- print_pval_list(fin,item->u4.for_statements,depth+1);
- break;
-
- case PV_WHILE:
- fprintf(fin,"while (%s)\n", item->u1.str);
- print_pval_list(fin,item->u2.statements,depth+1);
- break;
-
- case PV_BREAK:
- fprintf(fin,"break;\n");
- break;
-
- case PV_RETURN:
- fprintf(fin,"return;\n");
- break;
-
- case PV_CONTINUE:
- fprintf(fin,"continue;\n");
- break;
-
- case PV_RANDOM:
- case PV_IFTIME:
- case PV_IF:
- if ( item->type == PV_IFTIME ) {
-
- fprintf(fin,"ifTime ( %s|%s|%s|%s )\n",
- item->u1.list->u1.str,
- item->u1.list->next->u1.str,
- item->u1.list->next->next->u1.str,
- item->u1.list->next->next->next->u1.str
- );
- } else if ( item->type == PV_RANDOM ) {
- fprintf(fin,"random ( %s )\n", item->u1.str );
- } else
- fprintf(fin,"if ( %s )\n", item->u1.str);
- if ( item->u2.statements && item->u2.statements->next ) {
- for (i=0; i<depth; i++) {
- fprintf(fin,"\t"); /* depth == indentation */
- }
- fprintf(fin,"{\n");
- print_pval_list(fin,item->u2.statements,depth+1);
- for (i=0; i<depth; i++) {
- fprintf(fin,"\t"); /* depth == indentation */
- }
- if ( item->u3.else_statements )
- fprintf(fin,"}\n");
- else
- fprintf(fin,"};\n");
- } else if (item->u2.statements ) {
- print_pval_list(fin,item->u2.statements,depth+1);
- } else {
- if (item->u3.else_statements )
- fprintf(fin, " {} ");
- else
- fprintf(fin, " {}; ");
- }
- if ( item->u3.else_statements ) {
- for (i=0; i<depth; i++) {
- fprintf(fin,"\t"); /* depth == indentation */
- }
- fprintf(fin,"else\n");
- print_pval_list(fin,item->u3.else_statements, depth);
- }
- break;
-
- case PV_SWITCH:
- fprintf(fin,"switch( %s ) {\n", item->u1.str);
- print_pval_list(fin,item->u2.statements,depth+1);
- for (i=0; i<depth; i++) {
- fprintf(fin,"\t"); /* depth == indentation */
- }
- fprintf(fin,"}\n");
- break;
-
- case PV_EXTENSION:
- if ( item->u4.regexten )
- fprintf(fin, "regexten ");
- if ( item->u3.hints )
- fprintf(fin,"hints(%s) ", item->u3.hints);
-
- fprintf(fin,"%s => \n", item->u1.str);
- print_pval_list(fin,item->u2.statements,depth+1);
- break;
-
- case PV_IGNOREPAT:
- fprintf(fin,"ignorepat => %s\n", item->u1.str);
- break;
-
- case PV_GLOBALS:
- fprintf(fin,"globals {\n");
- print_pval_list(fin,item->u1.statements,depth+1);
- for (i=0; i<depth; i++) {
- fprintf(fin,"\t"); /* depth == indentation */
- }
- fprintf(fin,"}\n");
- break;
- }
-}
-
-static void print_pval_list(FILE *fin, pval *item, int depth)
-{
- pval *i;
-
- for (i=item; i; i=i->next) {
- print_pval(fin, i, depth);
- }
-}
-
-#if 0
-static void ael2_print(char *fname, pval *tree)
-{
- FILE *fin = fopen(fname,"w");
- if ( !fin ) {
- ast_log(LOG_ERROR, "Couldn't open %s for writing.\n", fname);
- return;
- }
- print_pval_list(fin, tree, 0);
- fclose(fin);
-}
-#endif
-
-
-
-/* SEMANTIC CHECKING FOR AEL: ============================================================================= */
-
-/* (not all that is syntactically legal is good! */
-
-
-static struct pval *in_macro(pval *item)
-{
- struct pval *curr;
- curr = item;
- while( curr ) {
- if( curr->type == PV_MACRO ) {
- return curr;
- }
- curr = curr->dad;
- }
- return 0;
-}
-
-static struct pval *in_context(pval *item)
-{
- struct pval *curr;
- curr = item;
- while( curr ) {
- if( curr->type == PV_MACRO || curr->type == PV_CONTEXT ) {
- return curr;
- }
- curr = curr->dad;
- }
- return 0;
-}
-
-
-static void check_goto(pval *item)
-{
- /* check for the target of the goto-- does it exist? */
- if ( !(item->u1.list)->next && !(item->u1.list)->u1.str ) {
- ast_log(LOG_ERROR,"Error: file %s, line %d-%d: goto: empty label reference found!\n",
- item->filename, item->startline, item->endline);
- errs++;
- }
-
- /* just one item-- the label should be in the current extension */
-
- if (item->u1.list && !item->u1.list->next && !strstr((item->u1.list)->u1.str,"${")) {
- struct pval *z = get_extension_or_contxt(item);
- struct pval *x = 0;
- if (z)
- x = find_label_in_current_extension((char*)((item->u1.list)->u1.str), z); /* if in macro, use current context instead */
- /* printf("Called find_label_in_current_extension with arg %s; current_extension is %x: %d\n",
- (char*)((item->u1.list)->u1.str), current_extension?current_extension:current_context, current_extension?current_extension->type:current_context->type); */
- if (!x) {
- ast_log(LOG_ERROR,"Error: file %s, line %d-%d: goto: no label %s exists in the current extension!\n",
- item->filename, item->startline, item->endline, item->u1.list->u1.str);
- errs++;
- }
- else
- return;
- }
-
- /* TWO items */
- if (item->u1.list->next && !item->u1.list->next->next) {
- /* two items */
- /* printf("Calling find_label_in_current_context with args %s, %s\n",
- (char*)((item->u1.list)->u1.str), (char *)item->u1.list->next->u1.str); */
- if (!strstr((item->u1.list)->u1.str,"${")
- && !strstr(item->u1.list->next->u1.str,"${") ) /* Don't try to match variables */ {
- struct pval *z = get_contxt(item);
- struct pval *x = 0;
-
- if (z)
- x = find_label_in_current_context((char *)item->u1.list->u1.str, (char *)item->u1.list->next->u1.str, z);
-
- if (!x) {
- ast_log(LOG_ERROR,"Error: file %s, line %d-%d: goto: no label %s|%s exists in the current context, or any of its inclusions!\n",
- item->filename, item->startline, item->endline, item->u1.list->u1.str, item->u1.list->next->u1.str );
- errs++;
- }
- else
- return;
- }
- }
-
- /* All 3 items! */
- if (item->u1.list->next && item->u1.list->next->next) {
- /* all three */
- pval *first = item->u1.list;
- pval *second = item->u1.list->next;
- pval *third = item->u1.list->next->next;
-
- /* printf("Calling find_label_in_current_db with args %s, %s, %s\n",
- (char*)first->u1.str, (char*)second->u1.str, (char*)third->u1.str); */
- if (!strstr((item->u1.list)->u1.str,"${")
- && !strstr(item->u1.list->next->u1.str,"${")
- && !strstr(item->u1.list->next->next->u1.str,"${")) /* Don't try to match variables */ {
- struct pval *x = find_label_in_current_db((char*)first->u1.str, (char*)second->u1.str, (char*)third->u1.str);
- if (!x) {
- struct pval *p3;
- struct pval *found = 0;
- struct pval *that_context = find_context(item->u1.list->u1.str);
-
- /* the target of the goto could be in an included context!! Fancy that!! */
- /* look for includes in the current context */
- if (that_context) {
- for (p3=that_context->u2.statements; p3; p3=p3->next) {
- if (p3->type == PV_INCLUDES) {
- struct pval *p4;
- for (p4=p3->u1.list; p4; p4=p4->next) {
- /* for each context pointed to, find it, then find a context/label that matches the
- target here! */
- char *incl_context = p4->u1.str;
- /* find a matching context name */
- struct pval *that_other_context = find_context(incl_context);
- if (that_other_context) {
- struct pval *x3;
- x3 = find_label_in_current_context((char *)item->u1.list->next->u1.str, (char *)item->u1.list->next->next->u1.str, that_other_context);
- if (x3) {
- found = x3;
- break;
- }
- }
- }
- }
- }
- if (!found) {
- ast_log(LOG_ERROR,"Error: file %s, line %d-%d: goto: no label %s|%s exists in the context %s or its inclusions!\n",
- item->filename, item->startline, item->endline, item->u1.list->next->u1.str, item->u1.list->next->next->u1.str, item->u1.list->u1.str );
- errs++;
- } else {
- struct pval *mac = in_macro(item); /* is this goto inside a macro? */
- if( mac ) { /* yes! */
- struct pval *targ = in_context(found);
- if( mac != targ )
- {
- ast_log(LOG_WARNING, "Warning: file %s, line %d-%d: It's bad form to have a goto in a macro to a target outside the macro!\n",
- item->filename, item->startline, item->endline);
- warns++;
- }
- }
- }
- } else {
- /* here is where code would go to check for target existence in extensions.conf files */
- ast_log(LOG_WARNING,"Warning: file %s, line %d-%d: goto: no context %s could be found that matches the goto target!\n",
- item->filename, item->startline, item->endline, item->u1.list->u1.str);
- warns++; /* this is just a warning, because this context could be in extensions.conf or somewhere */
- }
- } else {
- struct pval *mac = in_macro(item); /* is this goto inside a macro? */
- if( mac ) { /* yes! */
- struct pval *targ = in_context(x);
- if( mac != targ )
- {
- ast_log(LOG_WARNING, "Warning: file %s, line %d-%d: It's bad form to have a goto in a macro to a target outside the macro!\n",
- item->filename, item->startline, item->endline);
- warns++;
- }
- }
- }
- }
- }
-}
-
-
-static void find_pval_goto_item(pval *item, int lev)
-{
- struct pval *p4;
- if (lev>100) {
- ast_log(LOG_ERROR,"find_pval_goto in infinite loop!\n\n");
- return;
- }
-
- switch ( item->type ) {
- case PV_MACRO:
- /* fields: item->u1.str == name of macro
- item->u2.arglist == pval list of PV_WORD arguments of macro, as given by user
- item->u2.arglist->u1.str == argument
- item->u2.arglist->next == next arg
-
- item->u3.macro_statements == pval list of statements in macro body.
- */
-
- /* printf("Descending into matching macro %s\n", match_context); */
- find_pval_gotos(item->u3.macro_statements,lev+1); /* if we're just searching for a context, don't bother descending into them */
-
- break;
-
- case PV_CONTEXT:
- /* fields: item->u1.str == name of context
- item->u2.statements == pval list of statements in context body
- item->u3.abstract == int 1 if an abstract keyword were present
- */
- break;
-
- case PV_CASE:
- /* fields: item->u1.str == value of case
- item->u2.statements == pval list of statements under the case
- */
- find_pval_gotos(item->u2.statements,lev+1);
- break;
-
- case PV_PATTERN:
- /* fields: item->u1.str == value of case
- item->u2.statements == pval list of statements under the case
- */
- find_pval_gotos(item->u2.statements,lev+1);
- break;
-
- case PV_DEFAULT:
- /* fields:
- item->u2.statements == pval list of statements under the case
- */
- find_pval_gotos(item->u2.statements,lev+1);
- break;
-
- case PV_CATCH:
- /* fields: item->u1.str == name of extension to catch
- item->u2.statements == pval list of statements in context body
- */
- find_pval_gotos(item->u2.statements,lev+1);
- break;
-
- case PV_STATEMENTBLOCK:
- /* fields: item->u1.list == pval list of statements in block, one per entry in the list
- */
- find_pval_gotos(item->u1.list,lev+1);
- break;
-
- case PV_GOTO:
- /* fields: item->u1.list == pval list of PV_WORD target names, up to 3, in order as given by user.
- item->u1.list->u1.str == where the data on a PV_WORD will always be.
- */
- check_goto(item); /* THE WHOLE FUNCTION OF THIS ENTIRE ROUTINE!!!! */
- break;
-
- case PV_INCLUDES:
- /* fields: item->u1.list == pval list of PV_WORD elements, one per entry in the list
- */
- for (p4=item->u1.list; p4; p4=p4->next) {
- /* for each context pointed to, find it, then find a context/label that matches the
- target here! */
- char *incl_context = p4->u1.str;
- /* find a matching context name */
- struct pval *that_context = find_context(incl_context);
- if (that_context) {
- find_pval_gotos(that_context,lev+1); /* keep working up the includes */
- }
- }
- break;
-
- case PV_FOR:
- /* fields: item->u1.for_init == a string containing the initalizer
- item->u2.for_test == a string containing the loop test
- item->u3.for_inc == a string containing the loop increment
-
- item->u4.for_statements == a pval list of statements in the for ()
- */
- find_pval_gotos(item->u4.for_statements,lev+1);
- break;
-
- case PV_WHILE:
- /* fields: item->u1.str == the while conditional, as supplied by user
-
- item->u2.statements == a pval list of statements in the while ()
- */
- find_pval_gotos(item->u2.statements,lev+1);
- break;
-
- case PV_RANDOM:
- /* fields: item->u1.str == the random number expression, as supplied by user
-
- item->u2.statements == a pval list of statements in the if ()
- item->u3.else_statements == a pval list of statements in the else
- (could be zero)
- fall thru to PV_IF */
-
- case PV_IFTIME:
- /* fields: item->u1.list == the time values, 4 of them, as PV_WORD structs in a list
-
- item->u2.statements == a pval list of statements in the if ()
- item->u3.else_statements == a pval list of statements in the else
- (could be zero)
- fall thru to PV_IF*/
- case PV_IF:
- /* fields: item->u1.str == the if conditional, as supplied by user
-
- item->u2.statements == a pval list of statements in the if ()
- item->u3.else_statements == a pval list of statements in the else
- (could be zero)
- */
- find_pval_gotos(item->u2.statements,lev+1);
-
- if (item->u3.else_statements) {
- find_pval_gotos(item->u3.else_statements,lev+1);
- }
- break;
-
- case PV_SWITCH:
- /* fields: item->u1.str == the switch expression
-
- item->u2.statements == a pval list of statements in the switch,
- (will be case statements, most likely!)
- */
- find_pval_gotos(item->u3.else_statements,lev+1);
- break;
-
- case PV_EXTENSION:
- /* fields: item->u1.str == the extension name, label, whatever it's called
-
- item->u2.statements == a pval list of statements in the extension
- item->u3.hints == a char * hint argument
- item->u4.regexten == an int boolean. non-zero says that regexten was specified
- */
-
- find_pval_gotos(item->u2.statements,lev+1);
- break;
-
- default:
- break;
- }
-}
-
-static void find_pval_gotos(pval *item,int lev)
-{
- pval *i;
-
- for (i=item; i; i=i->next) {
-
- find_pval_goto_item(i, lev);
- }
-}
-
-
-
-struct pval *find_first_label_in_current_context(char *label, pval *curr_cont)
-{
- /* printf(" --- Got args %s, %s\n", exten, label); */
- struct pval *ret;
- struct pval *p3;
- struct pval *startpt = ((curr_cont->type==PV_MACRO)?curr_cont->u3.macro_statements: curr_cont->u2.statements);
-
- count_labels = 0;
- return_on_context_match = 0;
- match_context = "*";
- match_exten = "*";
- match_label = label;
-
- ret = match_pval(curr_cont);
- if (ret)
- return ret;
-
- /* the target of the goto could be in an included context!! Fancy that!! */
- /* look for includes in the current context */
- for (p3=startpt; p3; p3=p3->next) {
- if (p3->type == PV_INCLUDES) {
- struct pval *p4;
- for (p4=p3->u1.list; p4; p4=p4->next) {
- /* for each context pointed to, find it, then find a context/label that matches the
- target here! */
- char *incl_context = p4->u1.str;
- /* find a matching context name */
- struct pval *that_context = find_context(incl_context);
- if (that_context) {
- struct pval *x3;
- x3 = find_first_label_in_current_context(label, that_context);
- if (x3) {
- return x3;
- }
- }
- }
- }
- }
- return 0;
-}
-
-struct pval *find_label_in_current_context(char *exten, char *label, pval *curr_cont)
-{
- /* printf(" --- Got args %s, %s\n", exten, label); */
- struct pval *ret;
- struct pval *p3;
- struct pval *startpt;
-
- count_labels = 0;
- return_on_context_match = 0;
- match_context = "*";
- match_exten = exten;
- match_label = label;
- if (curr_cont->type == PV_MACRO)
- startpt = curr_cont->u3.macro_statements;
- else
- startpt = curr_cont->u2.statements;
-
- ret = match_pval(startpt);
- if (ret)
- return ret;
-
- /* the target of the goto could be in an included context!! Fancy that!! */
- /* look for includes in the current context */
- for (p3=startpt; p3; p3=p3->next) {
- if (p3->type == PV_INCLUDES) {
- struct pval *p4;
- for (p4=p3->u1.list; p4; p4=p4->next) {
- /* for each context pointed to, find it, then find a context/label that matches the
- target here! */
- char *incl_context = p4->u1.str;
- /* find a matching context name */
- struct pval *that_context = find_context(incl_context);
- if (that_context) {
- struct pval *x3;
- x3 = find_label_in_current_context(exten, label, that_context);
- if (x3) {
- return x3;
- }
- }
- }
- }
- }
- return 0;
-}
-
-static struct pval *find_label_in_current_extension(const char *label, pval *curr_ext)
-{
- /* printf(" --- Got args %s\n", label); */
- count_labels = 0;
- return_on_context_match = 0;
- match_context = "*";
- match_exten = "*";
- match_label = label;
- return match_pval(curr_ext);
-}
-
-static struct pval *find_label_in_current_db(const char *context, const char *exten, const char *label)
-{
- /* printf(" --- Got args %s, %s, %s\n", context, exten, label); */
- count_labels = 0;
- return_on_context_match = 0;
-
- match_context = context;
- match_exten = exten;
- match_label = label;
-
- return match_pval(current_db);
-}
-
-
-
-/* =============================================================================================== */
-/* "CODE" GENERATOR -- Convert the AEL representation to asterisk extension language */
-/* =============================================================================================== */
-
-static pval *get_extension_or_contxt(pval *p)
-{
- while( p && p->type != PV_EXTENSION && p->type != PV_CONTEXT && p->type != PV_MACRO ) {
-
- p = p->dad;
- }
-
- return p;
-}
-
-static pval *get_contxt(pval *p)
-{
- while( p && p->type != PV_CONTEXT && p->type != PV_MACRO ) {
-
- p = p->dad;
- }
-
- return p;
-}
static int aeldebug = 0;
diff --git a/res/ael/ael.flex b/res/ael/ael.flex
index 5adaff1eb..b67309a46 100644
--- a/res/ael/ael.flex
+++ b/res/ael/ael.flex
@@ -195,6 +195,7 @@ NOSEMIC ([^;()\{\}\[\]]|\\[;()\[\]\{\}])*
\/\/[^\n]* {/*comment*/}
context { STORE_POS; return KW_CONTEXT;}
abstract { STORE_POS; return KW_ABSTRACT;}
+extend { STORE_POS; return KW_EXTEND;}
macro { STORE_POS; return KW_MACRO;};
globals { STORE_POS; return KW_GLOBALS;}
local { STORE_POS; return KW_LOCAL;}
diff --git a/res/ael/ael.tab.c b/res/ael/ael.tab.c
index 995032238..ccd8fa4e8 100644
--- a/res/ael/ael.tab.c
+++ b/res/ael/ael.tab.c
@@ -85,25 +85,26 @@
KW_ELSE = 276,
KW_RANDOM = 277,
KW_ABSTRACT = 278,
- EXTENMARK = 279,
- KW_GOTO = 280,
- KW_JUMP = 281,
- KW_RETURN = 282,
- KW_BREAK = 283,
- KW_CONTINUE = 284,
- KW_REGEXTEN = 285,
- KW_HINT = 286,
- KW_FOR = 287,
- KW_WHILE = 288,
- KW_CASE = 289,
- KW_PATTERN = 290,
- KW_DEFAULT = 291,
- KW_CATCH = 292,
- KW_SWITCHES = 293,
- KW_ESWITCHES = 294,
- KW_INCLUDES = 295,
- KW_LOCAL = 296,
- word = 297
+ KW_EXTEND = 279,
+ EXTENMARK = 280,
+ KW_GOTO = 281,
+ KW_JUMP = 282,
+ KW_RETURN = 283,
+ KW_BREAK = 284,
+ KW_CONTINUE = 285,
+ KW_REGEXTEN = 286,
+ KW_HINT = 287,
+ KW_FOR = 288,
+ KW_WHILE = 289,
+ KW_CASE = 290,
+ KW_PATTERN = 291,
+ KW_DEFAULT = 292,
+ KW_CATCH = 293,
+ KW_SWITCHES = 294,
+ KW_ESWITCHES = 295,
+ KW_INCLUDES = 296,
+ KW_LOCAL = 297,
+ word = 298
};
#endif
/* Tokens. */
@@ -128,25 +129,26 @@
#define KW_ELSE 276
#define KW_RANDOM 277
#define KW_ABSTRACT 278
-#define EXTENMARK 279
-#define KW_GOTO 280
-#define KW_JUMP 281
-#define KW_RETURN 282
-#define KW_BREAK 283
-#define KW_CONTINUE 284
-#define KW_REGEXTEN 285
-#define KW_HINT 286
-#define KW_FOR 287
-#define KW_WHILE 288
-#define KW_CASE 289
-#define KW_PATTERN 290
-#define KW_DEFAULT 291
-#define KW_CATCH 292
-#define KW_SWITCHES 293
-#define KW_ESWITCHES 294
-#define KW_INCLUDES 295
-#define KW_LOCAL 296
-#define word 297
+#define KW_EXTEND 279
+#define EXTENMARK 280
+#define KW_GOTO 281
+#define KW_JUMP 282
+#define KW_RETURN 283
+#define KW_BREAK 284
+#define KW_CONTINUE 285
+#define KW_REGEXTEN 286
+#define KW_HINT 287
+#define KW_FOR 288
+#define KW_WHILE 289
+#define KW_CASE 290
+#define KW_PATTERN 291
+#define KW_DEFAULT 292
+#define KW_CATCH 293
+#define KW_SWITCHES 294
+#define KW_ESWITCHES 295
+#define KW_INCLUDES 296
+#define KW_LOCAL 297
+#define word 298
@@ -232,7 +234,7 @@ typedef union YYSTYPE
struct pval *pval; /* full objects */
}
/* Line 198 of yacc.c. */
-#line 236 "ael.tab.c"
+#line 238 "ael.tab.c"
YYSTYPE;
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
@@ -277,7 +279,7 @@ static pval *update_last(pval *, YYLTYPE *);
/* Line 221 of yacc.c. */
-#line 281 "ael.tab.c"
+#line 283 "ael.tab.c"
#ifdef short
# undef short
@@ -490,22 +492,22 @@ union yyalloc
#endif
/* YYFINAL -- State number of the termination state. */
-#define YYFINAL 14
+#define YYFINAL 17
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 331
+#define YYLAST 321
/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 43
+#define YYNTOKENS 44
/* YYNNTS -- Number of nonterminals. */
#define YYNNTS 56
/* YYNRULES -- Number of rules. */
-#define YYNRULES 138
+#define YYNRULES 141
/* YYNRULES -- Number of states. */
-#define YYNSTATES 281
+#define YYNSTATES 284
/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
#define YYUNDEFTOK 2
-#define YYMAXUTOK 297
+#define YYMAXUTOK 298
#define YYTRANSLATE(YYX) \
((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -542,7 +544,7 @@ static const yytype_uint8 yytranslate[] =
5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
- 35, 36, 37, 38, 39, 40, 41, 42
+ 35, 36, 37, 38, 39, 40, 41, 42, 43
};
#if YYDEBUG
@@ -551,89 +553,92 @@ static const yytype_uint8 yytranslate[] =
static const yytype_uint16 yyprhs[] =
{
0, 0, 3, 5, 7, 10, 13, 15, 17, 19,
- 21, 23, 25, 32, 34, 35, 44, 49, 50, 53,
- 56, 57, 63, 64, 71, 72, 74, 78, 81, 82,
- 85, 88, 90, 92, 94, 96, 98, 100, 102, 105,
- 107, 112, 116, 121, 129, 138, 139, 142, 145, 151,
- 153, 161, 162, 167, 170, 173, 178, 180, 183, 185,
- 188, 192, 196, 198, 201, 205, 207, 210, 214, 220,
- 224, 226, 228, 232, 236, 239, 240, 241, 242, 255,
- 259, 261, 265, 268, 271, 272, 278, 281, 284, 287,
- 291, 293, 296, 297, 299, 303, 307, 313, 319, 325,
- 331, 332, 335, 338, 343, 344, 350, 354, 355, 359,
- 363, 366, 368, 369, 371, 372, 376, 377, 380, 385,
- 389, 394, 395, 398, 400, 402, 408, 413, 418, 419,
- 423, 429, 432, 434, 438, 441, 445, 448, 453
+ 21, 23, 25, 32, 34, 35, 37, 40, 43, 52,
+ 57, 58, 61, 64, 65, 71, 72, 79, 80, 82,
+ 86, 89, 90, 93, 96, 98, 100, 102, 104, 106,
+ 108, 110, 113, 115, 120, 124, 129, 137, 146, 147,
+ 150, 153, 159, 161, 169, 170, 175, 178, 181, 186,
+ 188, 191, 193, 196, 200, 204, 206, 209, 213, 215,
+ 218, 222, 228, 232, 234, 236, 240, 244, 247, 248,
+ 249, 250, 263, 267, 269, 273, 276, 279, 280, 286,
+ 289, 292, 295, 299, 301, 304, 305, 307, 311, 315,
+ 321, 327, 333, 339, 340, 343, 346, 351, 352, 358,
+ 362, 363, 367, 371, 374, 376, 377, 379, 380, 384,
+ 385, 388, 393, 397, 402, 403, 406, 408, 410, 416,
+ 421, 426, 427, 431, 437, 440, 442, 446, 449, 453,
+ 456, 461
};
/* YYRHS -- A `-1'-separated list of the rules' RHS. */
static const yytype_int8 yyrhs[] =
{
- 44, 0, -1, 45, -1, 46, -1, 45, 46, -1,
- 45, 1, -1, 48, -1, 50, -1, 51, -1, 8,
- -1, 42, -1, 36, -1, 49, 3, 47, 4, 58,
- 5, -1, 23, -1, -1, 15, 42, 6, 57, 7,
- 4, 91, 5, -1, 16, 4, 52, 5, -1, -1,
- 53, 52, -1, 1, 52, -1, -1, 42, 9, 54,
- 42, 8, -1, -1, 41, 42, 9, 56, 42, 8,
- -1, -1, 42, -1, 57, 10, 42, -1, 57, 1,
- -1, -1, 59, 58, -1, 1, 58, -1, 61, -1,
- 98, -1, 93, -1, 94, -1, 60, -1, 53, -1,
- 55, -1, 42, 1, -1, 8, -1, 17, 24, 42,
- 8, -1, 42, 24, 73, -1, 30, 42, 24, 73,
- -1, 31, 6, 69, 7, 42, 24, 73, -1, 30,
- 31, 6, 69, 7, 42, 24, 73, -1, -1, 73,
- 62, -1, 1, 62, -1, 70, 11, 70, 11, 70,
- -1, 42, -1, 63, 13, 70, 13, 70, 13, 70,
- -1, -1, 6, 66, 68, 7, -1, 19, 65, -1,
- 22, 65, -1, 20, 6, 64, 7, -1, 42, -1,
- 42, 42, -1, 42, -1, 69, 42, -1, 69, 11,
- 42, -1, 69, 12, 42, -1, 42, -1, 42, 42,
- -1, 42, 42, 42, -1, 42, -1, 42, 42, -1,
- 71, 11, 42, -1, 18, 65, 4, 89, 5, -1,
- 4, 62, 5, -1, 53, -1, 55, -1, 25, 79,
- 8, -1, 26, 81, 8, -1, 42, 11, -1, -1,
- -1, -1, 32, 6, 74, 42, 8, 75, 42, 8,
- 76, 42, 7, 73, -1, 33, 65, 73, -1, 72,
- -1, 12, 82, 8, -1, 86, 8, -1, 42, 8,
- -1, -1, 86, 9, 77, 42, 8, -1, 28, 8,
- -1, 27, 8, -1, 29, 8, -1, 67, 73, 78,
- -1, 8, -1, 21, 73, -1, -1, 71, -1, 71,
- 13, 71, -1, 71, 10, 71, -1, 71, 13, 71,
- 13, 71, -1, 71, 10, 71, 10, 71, -1, 36,
- 13, 71, 13, 71, -1, 36, 10, 71, 10, 71,
- -1, -1, 10, 42, -1, 71, 80, -1, 71, 80,
- 14, 47, -1, -1, 42, 6, 83, 88, 7, -1,
- 42, 6, 7, -1, -1, 42, 6, 85, -1, 84,
- 88, 7, -1, 84, 7, -1, 42, -1, -1, 68,
- -1, -1, 88, 10, 87, -1, -1, 90, 89, -1,
- 34, 42, 11, 62, -1, 36, 11, 62, -1, 35,
- 42, 11, 62, -1, -1, 92, 91, -1, 73, -1,
- 98, -1, 37, 42, 4, 62, 5, -1, 38, 4,
- 95, 5, -1, 39, 4, 95, 5, -1, -1, 42,
- 8, 95, -1, 42, 14, 42, 8, 95, -1, 1,
- 95, -1, 47, -1, 47, 13, 64, -1, 96, 8,
- -1, 97, 96, 8, -1, 97, 1, -1, 40, 4,
- 97, 5, -1, 40, 4, 5, -1
+ 45, 0, -1, 46, -1, 47, -1, 46, 47, -1,
+ 46, 1, -1, 49, -1, 51, -1, 52, -1, 8,
+ -1, 43, -1, 37, -1, 50, 3, 48, 4, 59,
+ 5, -1, 23, -1, -1, 24, -1, 24, 23, -1,
+ 23, 24, -1, 15, 43, 6, 58, 7, 4, 92,
+ 5, -1, 16, 4, 53, 5, -1, -1, 54, 53,
+ -1, 1, 53, -1, -1, 43, 9, 55, 43, 8,
+ -1, -1, 42, 43, 9, 57, 43, 8, -1, -1,
+ 43, -1, 58, 10, 43, -1, 58, 1, -1, -1,
+ 60, 59, -1, 1, 59, -1, 62, -1, 99, -1,
+ 94, -1, 95, -1, 61, -1, 54, -1, 56, -1,
+ 43, 1, -1, 8, -1, 17, 25, 43, 8, -1,
+ 43, 25, 74, -1, 31, 43, 25, 74, -1, 32,
+ 6, 70, 7, 43, 25, 74, -1, 31, 32, 6,
+ 70, 7, 43, 25, 74, -1, -1, 74, 63, -1,
+ 1, 63, -1, 71, 11, 71, 11, 71, -1, 43,
+ -1, 64, 13, 71, 13, 71, 13, 71, -1, -1,
+ 6, 67, 69, 7, -1, 19, 66, -1, 22, 66,
+ -1, 20, 6, 65, 7, -1, 43, -1, 43, 43,
+ -1, 43, -1, 70, 43, -1, 70, 11, 43, -1,
+ 70, 12, 43, -1, 43, -1, 43, 43, -1, 43,
+ 43, 43, -1, 43, -1, 43, 43, -1, 72, 11,
+ 43, -1, 18, 66, 4, 90, 5, -1, 4, 63,
+ 5, -1, 54, -1, 56, -1, 26, 80, 8, -1,
+ 27, 82, 8, -1, 43, 11, -1, -1, -1, -1,
+ 33, 6, 75, 43, 8, 76, 43, 8, 77, 43,
+ 7, 74, -1, 34, 66, 74, -1, 73, -1, 12,
+ 83, 8, -1, 87, 8, -1, 43, 8, -1, -1,
+ 87, 9, 78, 43, 8, -1, 29, 8, -1, 28,
+ 8, -1, 30, 8, -1, 68, 74, 79, -1, 8,
+ -1, 21, 74, -1, -1, 72, -1, 72, 13, 72,
+ -1, 72, 10, 72, -1, 72, 13, 72, 13, 72,
+ -1, 72, 10, 72, 10, 72, -1, 37, 13, 72,
+ 13, 72, -1, 37, 10, 72, 10, 72, -1, -1,
+ 10, 43, -1, 72, 81, -1, 72, 81, 14, 48,
+ -1, -1, 43, 6, 84, 89, 7, -1, 43, 6,
+ 7, -1, -1, 43, 6, 86, -1, 85, 89, 7,
+ -1, 85, 7, -1, 43, -1, -1, 69, -1, -1,
+ 89, 10, 88, -1, -1, 91, 90, -1, 35, 43,
+ 11, 63, -1, 37, 11, 63, -1, 36, 43, 11,
+ 63, -1, -1, 93, 92, -1, 74, -1, 99, -1,
+ 38, 43, 4, 63, 5, -1, 39, 4, 96, 5,
+ -1, 40, 4, 96, 5, -1, -1, 43, 8, 96,
+ -1, 43, 14, 43, 8, 96, -1, 1, 96, -1,
+ 48, -1, 48, 13, 65, -1, 97, 8, -1, 98,
+ 97, 8, -1, 98, 1, -1, 41, 4, 98, 5,
+ -1, 41, 4, 5, -1
};
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
static const yytype_uint16 yyrline[] =
{
0, 186, 186, 189, 190, 191, 194, 195, 196, 197,
- 200, 201, 204, 219, 220, 223, 229, 235, 236, 237,
- 240, 240, 246, 246, 253, 254, 255, 256, 259, 260,
- 261, 264, 265, 266, 267, 268, 269, 270, 271, 272,
- 275, 280, 284, 289, 294, 304, 305, 306, 312, 317,
- 321, 329, 329, 333, 336, 339, 350, 351, 358, 359,
- 363, 367, 373, 374, 379, 387, 388, 392, 398, 407,
- 410, 411, 412, 415, 418, 421, 422, 423, 421, 429,
- 433, 434, 435, 436, 439, 439, 472, 473, 474, 475,
- 479, 482, 483, 486, 487, 490, 493, 497, 501, 505,
- 511, 512, 516, 519, 525, 525, 530, 538, 538, 549,
- 556, 559, 560, 563, 564, 567, 570, 571, 574, 578,
- 582, 588, 589, 592, 593, 594, 600, 605, 610, 611,
- 612, 614, 617, 618, 625, 626, 627, 630, 633
+ 200, 201, 204, 213, 214, 215, 216, 217, 220, 226,
+ 232, 233, 234, 237, 237, 243, 243, 250, 251, 252,
+ 253, 256, 257, 258, 261, 262, 263, 264, 265, 266,
+ 267, 268, 269, 272, 277, 281, 286, 291, 301, 302,
+ 303, 309, 314, 318, 326, 326, 330, 333, 336, 347,
+ 348, 355, 356, 360, 364, 370, 371, 376, 384, 385,
+ 389, 395, 404, 407, 408, 409, 412, 415, 418, 419,
+ 420, 418, 426, 430, 431, 432, 433, 436, 436, 469,
+ 470, 471, 472, 476, 479, 480, 483, 484, 487, 490,
+ 494, 498, 502, 508, 509, 513, 516, 522, 522, 527,
+ 535, 535, 546, 553, 556, 557, 560, 561, 564, 567,
+ 568, 571, 575, 579, 585, 586, 589, 590, 591, 597,
+ 602, 607, 608, 609, 611, 614, 615, 622, 623, 624,
+ 627, 630
};
#endif
@@ -645,21 +650,21 @@ static const char *const yytname[] =
"$end", "error", "$undefined", "KW_CONTEXT", "LC", "RC", "LP", "RP",
"SEMI", "EQ", "COMMA", "COLON", "AMPER", "BAR", "AT", "KW_MACRO",
"KW_GLOBALS", "KW_IGNOREPAT", "KW_SWITCH", "KW_IF", "KW_IFTIME",
- "KW_ELSE", "KW_RANDOM", "KW_ABSTRACT", "EXTENMARK", "KW_GOTO", "KW_JUMP",
- "KW_RETURN", "KW_BREAK", "KW_CONTINUE", "KW_REGEXTEN", "KW_HINT",
- "KW_FOR", "KW_WHILE", "KW_CASE", "KW_PATTERN", "KW_DEFAULT", "KW_CATCH",
- "KW_SWITCHES", "KW_ESWITCHES", "KW_INCLUDES", "KW_LOCAL", "word",
- "$accept", "file", "objects", "object", "context_name", "context",
- "opt_abstract", "macro", "globals", "global_statements", "assignment",
- "@1", "local_assignment", "@2", "arglist", "elements", "element",
- "ignorepat", "extension", "statements", "timerange", "timespec",
- "test_expr", "@3", "if_like_head", "word_list", "hint_word",
- "word3_list", "goto_word", "switch_statement", "statement", "@4", "@5",
- "@6", "@7", "opt_else", "target", "opt_pri", "jumptarget", "macro_call",
- "@8", "application_call_head", "@9", "application_call", "opt_word",
- "eval_arglist", "case_statements", "case_statement", "macro_statements",
- "macro_statement", "switches", "eswitches", "switchlist",
- "included_entry", "includeslist", "includes", 0
+ "KW_ELSE", "KW_RANDOM", "KW_ABSTRACT", "KW_EXTEND", "EXTENMARK",
+ "KW_GOTO", "KW_JUMP", "KW_RETURN", "KW_BREAK", "KW_CONTINUE",
+ "KW_REGEXTEN", "KW_HINT", "KW_FOR", "KW_WHILE", "KW_CASE", "KW_PATTERN",
+ "KW_DEFAULT", "KW_CATCH", "KW_SWITCHES", "KW_ESWITCHES", "KW_INCLUDES",
+ "KW_LOCAL", "word", "$accept", "file", "objects", "object",
+ "context_name", "context", "opt_abstract", "macro", "globals",
+ "global_statements", "assignment", "@1", "local_assignment", "@2",
+ "arglist", "elements", "element", "ignorepat", "extension", "statements",
+ "timerange", "timespec", "test_expr", "@3", "if_like_head", "word_list",
+ "hint_word", "word3_list", "goto_word", "switch_statement", "statement",
+ "@4", "@5", "@6", "@7", "opt_else", "target", "opt_pri", "jumptarget",
+ "macro_call", "@8", "application_call_head", "@9", "application_call",
+ "opt_word", "eval_arglist", "case_statements", "case_statement",
+ "macro_statements", "macro_statement", "switches", "eswitches",
+ "switchlist", "included_entry", "includeslist", "includes", 0
};
#endif
@@ -672,46 +677,48 @@ static const yytype_uint16 yytoknum[] =
265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
- 295, 296, 297
+ 295, 296, 297, 298
};
# endif
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
static const yytype_uint8 yyr1[] =
{
- 0, 43, 44, 45, 45, 45, 46, 46, 46, 46,
- 47, 47, 48, 49, 49, 50, 51, 52, 52, 52,
- 54, 53, 56, 55, 57, 57, 57, 57, 58, 58,
- 58, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 60, 61, 61, 61, 61, 62, 62, 62, 63, 63,
- 64, 66, 65, 67, 67, 67, 68, 68, 69, 69,
- 69, 69, 70, 70, 70, 71, 71, 71, 72, 73,
- 73, 73, 73, 73, 73, 74, 75, 76, 73, 73,
- 73, 73, 73, 73, 77, 73, 73, 73, 73, 73,
- 73, 78, 78, 79, 79, 79, 79, 79, 79, 79,
- 80, 80, 81, 81, 83, 82, 82, 85, 84, 86,
- 86, 87, 87, 88, 88, 88, 89, 89, 90, 90,
- 90, 91, 91, 92, 92, 92, 93, 94, 95, 95,
- 95, 95, 96, 96, 97, 97, 97, 98, 98
+ 0, 44, 45, 46, 46, 46, 47, 47, 47, 47,
+ 48, 48, 49, 50, 50, 50, 50, 50, 51, 52,
+ 53, 53, 53, 55, 54, 57, 56, 58, 58, 58,
+ 58, 59, 59, 59, 60, 60, 60, 60, 60, 60,
+ 60, 60, 60, 61, 62, 62, 62, 62, 63, 63,
+ 63, 64, 64, 65, 67, 66, 68, 68, 68, 69,
+ 69, 70, 70, 70, 70, 71, 71, 71, 72, 72,
+ 72, 73, 74, 74, 74, 74, 74, 74, 75, 76,
+ 77, 74, 74, 74, 74, 74, 74, 78, 74, 74,
+ 74, 74, 74, 74, 79, 79, 80, 80, 80, 80,
+ 80, 80, 80, 81, 81, 82, 82, 84, 83, 83,
+ 86, 85, 87, 87, 88, 88, 89, 89, 89, 90,
+ 90, 91, 91, 91, 92, 92, 93, 93, 93, 94,
+ 95, 96, 96, 96, 96, 97, 97, 98, 98, 98,
+ 99, 99
};
/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
static const yytype_uint8 yyr2[] =
{
0, 2, 1, 1, 2, 2, 1, 1, 1, 1,
- 1, 1, 6, 1, 0, 8, 4, 0, 2, 2,
- 0, 5, 0, 6, 0, 1, 3, 2, 0, 2,
- 2, 1, 1, 1, 1, 1, 1, 1, 2, 1,
- 4, 3, 4, 7, 8, 0, 2, 2, 5, 1,
- 7, 0, 4, 2, 2, 4, 1, 2, 1, 2,
- 3, 3, 1, 2, 3, 1, 2, 3, 5, 3,
- 1, 1, 3, 3, 2, 0, 0, 0, 12, 3,
- 1, 3, 2, 2, 0, 5, 2, 2, 2, 3,
- 1, 2, 0, 1, 3, 3, 5, 5, 5, 5,
- 0, 2, 2, 4, 0, 5, 3, 0, 3, 3,
- 2, 1, 0, 1, 0, 3, 0, 2, 4, 3,
- 4, 0, 2, 1, 1, 5, 4, 4, 0, 3,
- 5, 2, 1, 3, 2, 3, 2, 4, 3
+ 1, 1, 6, 1, 0, 1, 2, 2, 8, 4,
+ 0, 2, 2, 0, 5, 0, 6, 0, 1, 3,
+ 2, 0, 2, 2, 1, 1, 1, 1, 1, 1,
+ 1, 2, 1, 4, 3, 4, 7, 8, 0, 2,
+ 2, 5, 1, 7, 0, 4, 2, 2, 4, 1,
+ 2, 1, 2, 3, 3, 1, 2, 3, 1, 2,
+ 3, 5, 3, 1, 1, 3, 3, 2, 0, 0,
+ 0, 12, 3, 1, 3, 2, 2, 0, 5, 2,
+ 2, 2, 3, 1, 2, 0, 1, 3, 3, 5,
+ 5, 5, 5, 0, 2, 2, 4, 0, 5, 3,
+ 0, 3, 3, 2, 1, 0, 1, 0, 3, 0,
+ 2, 4, 3, 4, 0, 2, 1, 1, 5, 4,
+ 4, 0, 3, 5, 2, 1, 3, 2, 3, 2,
+ 4, 3
};
/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -719,209 +726,207 @@ static const yytype_uint8 yyr2[] =
means the default is an error. */
static const yytype_uint8 yydefact[] =
{
- 14, 9, 0, 0, 13, 0, 0, 3, 6, 0,
- 7, 8, 0, 0, 1, 5, 4, 0, 24, 0,
- 0, 0, 0, 11, 10, 0, 25, 0, 19, 20,
- 16, 18, 0, 27, 0, 0, 0, 0, 39, 0,
- 0, 0, 0, 0, 0, 0, 0, 36, 37, 0,
- 0, 35, 31, 33, 34, 32, 121, 26, 0, 30,
- 0, 0, 0, 0, 0, 0, 0, 0, 38, 0,
- 12, 29, 0, 90, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 70, 71,
- 0, 80, 123, 114, 0, 0, 121, 124, 21, 0,
- 0, 0, 58, 0, 0, 0, 0, 0, 138, 132,
- 0, 0, 22, 41, 0, 0, 0, 0, 0, 51,
- 0, 53, 0, 54, 0, 65, 93, 0, 100, 0,
- 87, 86, 88, 75, 0, 0, 107, 83, 74, 92,
- 110, 56, 113, 0, 82, 84, 15, 122, 40, 0,
- 42, 0, 0, 0, 59, 131, 0, 0, 126, 127,
- 0, 134, 136, 137, 0, 0, 47, 69, 46, 104,
- 81, 0, 116, 49, 0, 0, 0, 0, 0, 66,
- 0, 0, 0, 72, 0, 102, 73, 0, 79, 0,
- 108, 0, 89, 57, 109, 112, 0, 0, 0, 60,
- 61, 129, 0, 133, 135, 0, 106, 114, 0, 0,
- 0, 0, 0, 116, 63, 0, 55, 0, 0, 0,
- 95, 67, 94, 101, 0, 0, 0, 91, 111, 115,
- 0, 0, 0, 0, 23, 0, 52, 0, 0, 0,
- 68, 117, 64, 62, 0, 0, 0, 0, 0, 0,
- 103, 76, 125, 85, 0, 43, 130, 105, 0, 0,
- 119, 0, 0, 99, 98, 97, 96, 0, 44, 118,
- 120, 0, 48, 0, 0, 77, 50, 0, 0, 0,
- 78
+ 14, 9, 0, 0, 13, 15, 0, 0, 3, 6,
+ 0, 7, 8, 0, 0, 17, 16, 1, 5, 4,
+ 0, 27, 0, 0, 0, 0, 11, 10, 0, 28,
+ 0, 22, 23, 19, 21, 0, 30, 0, 0, 0,
+ 0, 42, 0, 0, 0, 0, 0, 0, 0, 0,
+ 39, 40, 0, 0, 38, 34, 36, 37, 35, 124,
+ 29, 0, 33, 0, 0, 0, 0, 0, 0, 0,
+ 0, 41, 0, 12, 32, 0, 93, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 73, 74, 0, 83, 126, 117, 0, 0, 124,
+ 127, 24, 0, 0, 0, 61, 0, 0, 0, 0,
+ 0, 141, 135, 0, 0, 25, 44, 0, 0, 0,
+ 0, 0, 54, 0, 56, 0, 57, 0, 68, 96,
+ 0, 103, 0, 90, 89, 91, 78, 0, 0, 110,
+ 86, 77, 95, 113, 59, 116, 0, 85, 87, 18,
+ 125, 43, 0, 45, 0, 0, 0, 62, 134, 0,
+ 0, 129, 130, 0, 137, 139, 140, 0, 0, 50,
+ 72, 49, 107, 84, 0, 119, 52, 0, 0, 0,
+ 0, 0, 69, 0, 0, 0, 75, 0, 105, 76,
+ 0, 82, 0, 111, 0, 92, 60, 112, 115, 0,
+ 0, 0, 63, 64, 132, 0, 136, 138, 0, 109,
+ 117, 0, 0, 0, 0, 0, 119, 66, 0, 58,
+ 0, 0, 0, 98, 70, 97, 104, 0, 0, 0,
+ 94, 114, 118, 0, 0, 0, 0, 26, 0, 55,
+ 0, 0, 0, 71, 120, 67, 65, 0, 0, 0,
+ 0, 0, 0, 106, 79, 128, 88, 0, 46, 133,
+ 108, 0, 0, 122, 0, 0, 102, 101, 100, 99,
+ 0, 47, 121, 123, 0, 51, 0, 0, 80, 53,
+ 0, 0, 0, 81
};
/* YYDEFGOTO[NTERM-NUM]. */
static const yytype_int16 yydefgoto[] =
{
- -1, 5, 6, 7, 109, 8, 9, 10, 11, 21,
- 88, 36, 89, 165, 27, 49, 50, 51, 52, 115,
- 174, 175, 120, 171, 90, 142, 103, 176, 126, 91,
- 116, 187, 267, 277, 196, 192, 127, 185, 129, 118,
- 207, 93, 190, 94, 229, 143, 212, 213, 95, 96,
- 53, 54, 106, 110, 111, 55
+ -1, 6, 7, 8, 112, 9, 10, 11, 12, 24,
+ 91, 39, 92, 168, 30, 52, 53, 54, 55, 118,
+ 177, 178, 123, 174, 93, 145, 106, 179, 129, 94,
+ 119, 190, 270, 280, 199, 195, 130, 188, 132, 121,
+ 210, 96, 193, 97, 232, 146, 215, 216, 98, 99,
+ 56, 57, 109, 113, 114, 58
};
/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
STATE-NUM. */
-#define YYPACT_NINF -210
+#define YYPACT_NINF -213
static const yytype_int16 yypact[] =
{
- 66, -210, -26, 64, -210, 88, 110, -210, -210, 93,
- -210, -210, 95, 9, -210, -210, -210, 72, 30, 9,
- 96, 137, 9, -210, -210, 124, -210, 102, -210, -210,
- -210, -210, 16, -210, 154, 120, 144, 16, -210, 169,
- 33, 208, 197, 212, 216, 187, 62, -210, -210, 225,
- 16, -210, -210, -210, -210, -210, 155, -210, 226, -210,
- 191, 229, 213, 194, 17, 17, 6, 230, -210, 199,
- -210, -210, 65, -210, 196, 236, 236, 237, 236, 79,
- 202, 238, 239, 240, 243, 236, 203, 204, -210, -210,
- 199, -210, -210, -4, 148, 245, 155, -210, -210, 244,
- 194, 199, -210, 8, 17, 108, 246, 248, -210, 241,
- 247, 25, -210, -210, 119, 251, 119, 252, 249, -210,
- 255, -210, 218, -210, 26, 219, 189, 254, 168, 256,
- -210, -210, -210, -210, 199, 259, -210, -210, -210, 250,
- -210, 223, -210, 69, -210, -210, -210, -210, -210, 20,
- -210, 224, 227, 228, -210, -210, 17, 231, -210, -210,
- 218, -210, -210, -210, 260, 232, -210, -210, -210, 265,
- -210, 233, 130, 18, 263, 270, 267, 202, 202, -210,
- 202, 242, 202, -210, 253, 266, -210, 257, -210, 65,
- -210, 199, -210, -210, -210, 258, 261, 262, 264, -210,
- -210, -210, 271, -210, -210, 273, -210, 233, 275, 268,
- 269, 272, 280, 130, 274, 276, -210, 276, 179, 106,
- 195, -210, 123, -210, 72, 278, 282, -210, -210, -210,
- 281, 277, 199, 17, -210, 122, -210, 279, 283, 119,
- -210, -210, -210, 284, 285, 286, 202, 202, 202, 202,
- -210, -210, -210, -210, 199, -210, -210, -210, 119, 119,
- -210, 276, 276, 291, 291, 291, 291, 287, -210, -210,
- -210, 292, -210, 288, 276, -210, -210, 289, 299, 199,
- -210
+ 130, -213, -22, 32, 20, 28, 72, 93, -213, -213,
+ 73, -213, -213, 118, 14, -213, -213, -213, -213, -213,
+ -5, 88, 14, 146, 134, 14, -213, -213, 184, -213,
+ 104, -213, -213, -213, -213, 120, -213, 186, 115, 151,
+ 120, -213, 171, -15, 191, 200, 201, 205, 167, 22,
+ -213, -213, 207, 120, -213, -213, -213, -213, -213, 173,
+ -213, 210, -213, 176, 214, 197, 181, 19, 19, -2,
+ 216, -213, 209, -213, -213, 114, -213, 183, 224, 224,
+ 226, 224, -4, 202, 232, 238, 239, 228, 224, 206,
+ 178, -213, -213, 209, -213, -213, 3, 78, 243, 173,
+ -213, -213, 242, 181, 209, -213, 15, 19, 56, 248,
+ 250, -213, 244, 252, 11, -213, -213, 55, 251, 55,
+ 255, 254, -213, 259, -213, 215, -213, 1, 221, 58,
+ 257, 102, 258, -213, -213, -213, -213, 209, 263, -213,
+ -213, -213, 247, -213, 227, -213, 96, -213, -213, -213,
+ -213, -213, 18, -213, 230, 231, 233, -213, -213, 19,
+ 234, -213, -213, 215, -213, -213, -213, 261, 235, -213,
+ -213, -213, 264, -213, 236, 143, 7, 262, 273, 270,
+ 202, 202, -213, 202, 240, 202, -213, 241, 268, -213,
+ 245, -213, 114, -213, 209, -213, -213, -213, 246, 249,
+ 253, 260, -213, -213, -213, 278, -213, -213, 279, -213,
+ 236, 283, 256, 265, 280, 288, 143, 266, 267, -213,
+ 267, 164, 116, 172, -213, 154, -213, -5, 286, 290,
+ -213, -213, -213, 289, 275, 209, 19, -213, 100, -213,
+ 287, 291, 55, -213, -213, -213, 269, 292, 293, 202,
+ 202, 202, 202, -213, -213, -213, -213, 209, -213, -213,
+ -213, 55, 55, -213, 267, 267, 295, 295, 295, 295,
+ 271, -213, -213, -213, 294, -213, 303, 267, -213, -213,
+ 272, 296, 209, -213
};
/* YYPGOTO[NTERM-NUM]. */
static const yytype_int16 yypgoto[] =
{
- -210, -210, -210, 301, -16, -210, -210, -210, -210, 121,
- 172, -210, -9, -210, -210, -25, -210, -210, -210, -109,
- -210, 107, -41, -210, -210, 138, 192, -209, -78, -210,
- -56, -210, -210, -210, -210, -210, -210, -210, -210, -210,
- -210, -210, -210, -210, -210, 84, 80, -210, 217, -210,
- -210, -210, -61, 201, -210, -47
+ -213, -213, -213, 306, -19, -213, -213, -213, -213, 98,
+ 219, -213, 2, -213, -213, 26, -213, -213, -213, -112,
+ -213, 138, 85, -213, -213, 142, 217, -212, -81, -213,
+ -59, -213, -213, -213, -213, -213, -213, -213, -213, -213,
+ -213, -213, -213, -213, -213, 107, 103, -213, 222, -213,
+ -213, -213, -64, 204, -213, -50
};
/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
positive, shift that token. If negative, reduce the rule which
number is the opposite. If zero, do what YYDEFACT says.
If YYTABLE_NINF, syntax error. */
-#define YYTABLE_NINF -129
+#define YYTABLE_NINF -132
static const yytype_int16 yytable[] =
{
- 92, 25, 128, 140, 107, 166, 244, 168, 245, 97,
- 19, 108, 59, 113, -17, 151, 12, 37, 104, 152,
- 153, -28, -128, 48, 38, 71, 162, 197, 48, -62,
- 163, 152, 153, 39, 139, 121, 177, 123, 141, 178,
- 92, 48, 23, 155, 134, 150, 40, 41, 24, 97,
- 154, 20, 271, 272, 42, 43, 44, 45, 46, 105,
- 214, 23, 154, 68, 61, 276, 114, 24, 13, 72,
- -45, 29, 26, 73, 1, 62, 194, 74, 188, 195,
- 226, 2, 3, 75, 76, 77, 69, 78, 14, 4,
- 79, 80, 81, 82, 83, 201, 17, 84, 85, 218,
- 219, 18, 220, 33, 222, 29, 45, 87, 23, 34,
- -2, 15, 35, -14, 24, 124, 156, 181, 1, 247,
- 114, 125, 157, 72, -45, 2, 3, 73, 32, 257,
- 260, 74, 195, 4, 181, 227, 249, 75, 76, 77,
- 28, 78, 30, 31, 79, 80, 81, 82, 83, 269,
- 270, 84, 85, -45, -45, -45, 144, 145, 56, 72,
- 45, 87, 57, 73, 209, 210, 211, 74, 263, 264,
- 265, 266, 256, 75, 76, 77, 255, 78, 184, 181,
- 79, 80, 81, 82, 83, 22, 58, 84, 85, 246,
- 181, 22, 86, 60, 22, 44, 45, 87, 268, 180,
- 181, 64, 182, 72, 47, 248, 181, 73, 250, 47,
- 136, 74, 137, 29, 63, 138, 65, 75, 76, 77,
- 66, 78, 47, 280, 79, 80, 81, 82, 83, 67,
- 70, 84, 85, 99, 98, 100, 102, 101, 117, 112,
- 45, 87, 119, 122, 125, 135, 130, 131, 132, 133,
- 146, 158, 148, 159, 160, 161, 167, 170, 169, 172,
- 173, 179, 183, 189, 186, 193, 198, 203, 204, 199,
- 200, 191, 206, 202, 205, 141, 215, 216, 217, 233,
- 224, 234, 236, 239, 221, 240, 251, 252, 232, 253,
- 258, 235, 149, 241, 259, 223, 275, 262, 261, 225,
- 228, 254, 181, 230, 231, 274, 279, 16, 0, 208,
- 237, 238, 164, 147, 0, 0, 242, 0, 243, 0,
- 0, 0, 0, 0, 0, 0, 214, 0, 0, 273,
- 0, 278
+ 95, 28, 131, 111, 110, 169, 247, 171, 248, 100,
+ 143, 180, 165, 116, 181, 22, 166, 64, -65, -20,
+ 107, 13, 154, 71, -131, 200, 155, 156, 65, 155,
+ 156, 32, 26, 127, 142, 26, 14, 51, 27, 128,
+ 95, 27, 51, 158, 15, 153, 144, 72, 26, 100,
+ 217, 16, 274, 275, 27, 51, 117, 23, 157, 75,
+ -48, 157, 108, 76, 159, 279, 62, 77, 183, 184,
+ 160, 185, 17, 78, 79, 80, 20, 81, 191, 74,
+ 229, 82, 83, 84, 85, 86, 147, 148, 87, 88,
+ -48, -48, -48, -2, 18, 204, -14, 48, 90, 221,
+ 222, 1, 223, 197, 225, 36, 198, 260, 2, 3,
+ 198, 37, 187, 184, 38, 117, 4, 5, 75, -48,
+ 31, 40, 76, 34, 21, -31, 77, 184, 41, 250,
+ 263, 29, 78, 79, 80, 230, 81, 42, 1, 33,
+ 82, 83, 84, 85, 86, 2, 3, 87, 88, 272,
+ 273, 43, 44, 4, 5, 32, 48, 90, 60, 45,
+ 46, 47, 48, 49, 124, 184, 126, 252, 266, 267,
+ 268, 269, 259, 137, 249, 184, 258, 75, 212, 213,
+ 214, 76, 251, 184, 139, 77, 140, 32, 35, 141,
+ 59, 78, 79, 80, 61, 81, 63, 66, 271, 82,
+ 83, 84, 85, 86, 67, 68, 87, 88, 253, 69,
+ 70, 89, 73, 75, 47, 48, 90, 76, 101, 102,
+ 103, 77, 104, 283, 105, 115, 120, 78, 79, 80,
+ 122, 81, 125, 25, 136, 82, 83, 84, 85, 86,
+ 133, 25, 87, 88, 25, 128, 134, 135, 149, 138,
+ 151, 48, 90, 161, 50, 162, 170, 163, 176, 50,
+ 164, 172, 173, 175, 182, 186, 189, 192, 194, 207,
+ 196, 209, 50, 201, 202, 218, 203, 205, 208, 144,
+ 219, 220, 227, 224, 226, 235, 236, 237, 228, 231,
+ 239, 242, 233, 243, 254, 255, 234, 256, 261, 240,
+ 257, 206, 262, 282, 265, 264, 184, 277, 241, 245,
+ 246, 278, 217, 19, 276, 281, 211, 238, 167, 244,
+ 152, 150
};
-static const yytype_int16 yycheck[] =
+static const yytype_uint16 yycheck[] =
{
- 56, 17, 80, 7, 65, 114, 215, 116, 217, 56,
- 1, 5, 37, 69, 5, 7, 42, 1, 1, 11,
- 12, 5, 5, 32, 8, 50, 1, 7, 37, 11,
- 5, 11, 12, 17, 90, 76, 10, 78, 42, 13,
- 96, 50, 36, 104, 85, 101, 30, 31, 42, 96,
- 42, 42, 261, 262, 38, 39, 40, 41, 42, 42,
- 42, 36, 42, 1, 31, 274, 1, 42, 4, 4,
- 5, 9, 42, 8, 8, 42, 7, 12, 134, 10,
- 189, 15, 16, 18, 19, 20, 24, 22, 0, 23,
- 25, 26, 27, 28, 29, 156, 3, 32, 33, 177,
- 178, 6, 180, 1, 182, 9, 41, 42, 36, 7,
- 0, 1, 10, 3, 42, 36, 8, 11, 8, 13,
- 1, 42, 14, 4, 5, 15, 16, 8, 4, 7,
- 239, 12, 10, 23, 11, 191, 13, 18, 19, 20,
- 19, 22, 5, 22, 25, 26, 27, 28, 29, 258,
- 259, 32, 33, 34, 35, 36, 8, 9, 4, 4,
- 41, 42, 42, 8, 34, 35, 36, 12, 246, 247,
- 248, 249, 233, 18, 19, 20, 232, 22, 10, 11,
- 25, 26, 27, 28, 29, 13, 42, 32, 33, 10,
- 11, 19, 37, 24, 22, 40, 41, 42, 254, 10,
- 11, 4, 13, 4, 32, 10, 11, 8, 224, 37,
- 6, 12, 8, 9, 6, 11, 4, 18, 19, 20,
- 4, 22, 50, 279, 25, 26, 27, 28, 29, 42,
- 5, 32, 33, 42, 8, 6, 42, 24, 42, 9,
- 41, 42, 6, 6, 42, 42, 8, 8, 8, 6,
- 5, 5, 8, 5, 13, 8, 5, 8, 6, 4,
- 42, 42, 8, 4, 8, 42, 42, 160, 8, 42,
- 42, 21, 7, 42, 42, 42, 13, 7, 11, 8,
- 14, 8, 7, 11, 42, 5, 8, 5, 24, 8,
- 11, 207, 100, 213, 11, 42, 8, 11, 13, 42,
- 42, 24, 11, 42, 42, 13, 7, 6, -1, 171,
- 42, 42, 111, 96, -1, -1, 42, -1, 42, -1,
- -1, -1, -1, -1, -1, -1, 42, -1, -1, 42,
- -1, 42
+ 59, 20, 83, 5, 68, 117, 218, 119, 220, 59,
+ 7, 10, 1, 72, 13, 1, 5, 32, 11, 5,
+ 1, 43, 7, 1, 5, 7, 11, 12, 43, 11,
+ 12, 9, 37, 37, 93, 37, 4, 35, 43, 43,
+ 99, 43, 40, 107, 24, 104, 43, 25, 37, 99,
+ 43, 23, 264, 265, 43, 53, 1, 43, 43, 4,
+ 5, 43, 43, 8, 8, 277, 40, 12, 10, 11,
+ 14, 13, 0, 18, 19, 20, 3, 22, 137, 53,
+ 192, 26, 27, 28, 29, 30, 8, 9, 33, 34,
+ 35, 36, 37, 0, 1, 159, 3, 42, 43, 180,
+ 181, 8, 183, 7, 185, 1, 10, 7, 15, 16,
+ 10, 7, 10, 11, 10, 1, 23, 24, 4, 5,
+ 22, 1, 8, 25, 6, 5, 12, 11, 8, 13,
+ 242, 43, 18, 19, 20, 194, 22, 17, 8, 5,
+ 26, 27, 28, 29, 30, 15, 16, 33, 34, 261,
+ 262, 31, 32, 23, 24, 9, 42, 43, 43, 39,
+ 40, 41, 42, 43, 79, 11, 81, 13, 249, 250,
+ 251, 252, 236, 88, 10, 11, 235, 4, 35, 36,
+ 37, 8, 10, 11, 6, 12, 8, 9, 4, 11,
+ 4, 18, 19, 20, 43, 22, 25, 6, 257, 26,
+ 27, 28, 29, 30, 4, 4, 33, 34, 227, 4,
+ 43, 38, 5, 4, 41, 42, 43, 8, 8, 43,
+ 6, 12, 25, 282, 43, 9, 43, 18, 19, 20,
+ 6, 22, 6, 14, 6, 26, 27, 28, 29, 30,
+ 8, 22, 33, 34, 25, 43, 8, 8, 5, 43,
+ 8, 42, 43, 5, 35, 5, 5, 13, 43, 40,
+ 8, 6, 8, 4, 43, 8, 8, 4, 21, 8,
+ 43, 7, 53, 43, 43, 13, 43, 43, 43, 43,
+ 7, 11, 14, 43, 43, 25, 8, 8, 43, 43,
+ 7, 11, 43, 5, 8, 5, 43, 8, 11, 43,
+ 25, 163, 11, 7, 11, 13, 11, 13, 43, 43,
+ 43, 8, 43, 7, 43, 43, 174, 210, 114, 216,
+ 103, 99
};
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
symbol of state STATE-NUM. */
static const yytype_uint8 yystos[] =
{
- 0, 8, 15, 16, 23, 44, 45, 46, 48, 49,
- 50, 51, 42, 4, 0, 1, 46, 3, 6, 1,
- 42, 52, 53, 36, 42, 47, 42, 57, 52, 9,
- 5, 52, 4, 1, 7, 10, 54, 1, 8, 17,
- 30, 31, 38, 39, 40, 41, 42, 53, 55, 58,
- 59, 60, 61, 93, 94, 98, 4, 42, 42, 58,
- 24, 31, 42, 6, 4, 4, 4, 42, 1, 24,
- 5, 58, 4, 8, 12, 18, 19, 20, 22, 25,
- 26, 27, 28, 29, 32, 33, 37, 42, 53, 55,
- 67, 72, 73, 84, 86, 91, 92, 98, 8, 42,
- 6, 24, 42, 69, 1, 42, 95, 95, 5, 47,
- 96, 97, 9, 73, 1, 62, 73, 42, 82, 6,
- 65, 65, 6, 65, 36, 42, 71, 79, 71, 81,
- 8, 8, 8, 6, 65, 42, 6, 8, 11, 73,
- 7, 42, 68, 88, 8, 9, 5, 91, 8, 69,
- 73, 7, 11, 12, 42, 95, 8, 14, 5, 5,
- 13, 8, 1, 5, 96, 56, 62, 5, 62, 6,
- 8, 66, 4, 42, 63, 64, 70, 10, 13, 42,
- 10, 11, 13, 8, 10, 80, 8, 74, 73, 4,
- 85, 21, 78, 42, 7, 10, 77, 7, 42, 42,
- 42, 95, 42, 64, 8, 42, 7, 83, 68, 34,
- 35, 36, 89, 90, 42, 13, 7, 11, 71, 71,
- 71, 42, 71, 42, 14, 42, 62, 73, 42, 87,
- 42, 42, 24, 8, 8, 88, 7, 42, 42, 11,
- 5, 89, 42, 42, 70, 70, 10, 13, 10, 13,
- 47, 8, 5, 8, 24, 73, 95, 7, 11, 11,
- 62, 13, 11, 71, 71, 71, 71, 75, 73, 62,
- 62, 70, 70, 42, 13, 8, 70, 76, 42, 7,
- 73
+ 0, 8, 15, 16, 23, 24, 45, 46, 47, 49,
+ 50, 51, 52, 43, 4, 24, 23, 0, 1, 47,
+ 3, 6, 1, 43, 53, 54, 37, 43, 48, 43,
+ 58, 53, 9, 5, 53, 4, 1, 7, 10, 55,
+ 1, 8, 17, 31, 32, 39, 40, 41, 42, 43,
+ 54, 56, 59, 60, 61, 62, 94, 95, 99, 4,
+ 43, 43, 59, 25, 32, 43, 6, 4, 4, 4,
+ 43, 1, 25, 5, 59, 4, 8, 12, 18, 19,
+ 20, 22, 26, 27, 28, 29, 30, 33, 34, 38,
+ 43, 54, 56, 68, 73, 74, 85, 87, 92, 93,
+ 99, 8, 43, 6, 25, 43, 70, 1, 43, 96,
+ 96, 5, 48, 97, 98, 9, 74, 1, 63, 74,
+ 43, 83, 6, 66, 66, 6, 66, 37, 43, 72,
+ 80, 72, 82, 8, 8, 8, 6, 66, 43, 6,
+ 8, 11, 74, 7, 43, 69, 89, 8, 9, 5,
+ 92, 8, 70, 74, 7, 11, 12, 43, 96, 8,
+ 14, 5, 5, 13, 8, 1, 5, 97, 57, 63,
+ 5, 63, 6, 8, 67, 4, 43, 64, 65, 71,
+ 10, 13, 43, 10, 11, 13, 8, 10, 81, 8,
+ 75, 74, 4, 86, 21, 79, 43, 7, 10, 78,
+ 7, 43, 43, 43, 96, 43, 65, 8, 43, 7,
+ 84, 69, 35, 36, 37, 90, 91, 43, 13, 7,
+ 11, 72, 72, 72, 43, 72, 43, 14, 43, 63,
+ 74, 43, 88, 43, 43, 25, 8, 8, 89, 7,
+ 43, 43, 11, 5, 90, 43, 43, 71, 71, 10,
+ 13, 10, 13, 48, 8, 5, 8, 25, 74, 96,
+ 7, 11, 11, 63, 13, 11, 72, 72, 72, 72,
+ 76, 74, 63, 63, 71, 71, 43, 13, 8, 71,
+ 77, 43, 7, 74
};
#define yyerrok (yyerrstatus = 0)
@@ -1443,330 +1448,330 @@ yydestruct (yymsg, yytype, yyvaluep, yylocationp, parseio)
switch (yytype)
{
- case 42: /* "word" */
+ case 43: /* "word" */
#line 178 "ael.y"
{ free((yyvaluep->str));};
-#line 1450 "ael.tab.c"
+#line 1455 "ael.tab.c"
break;
- case 45: /* "objects" */
+ case 46: /* "objects" */
#line 165 "ael.y"
{
destroy_pval((yyvaluep->pval));
prev_word=0;
};
-#line 1458 "ael.tab.c"
+#line 1463 "ael.tab.c"
break;
- case 46: /* "object" */
+ case 47: /* "object" */
#line 165 "ael.y"
{
destroy_pval((yyvaluep->pval));
prev_word=0;
};
-#line 1466 "ael.tab.c"
+#line 1471 "ael.tab.c"
break;
- case 47: /* "context_name" */
+ case 48: /* "context_name" */
#line 178 "ael.y"
{ free((yyvaluep->str));};
-#line 1471 "ael.tab.c"
+#line 1476 "ael.tab.c"
break;
- case 48: /* "context" */
+ case 49: /* "context" */
#line 165 "ael.y"
{
destroy_pval((yyvaluep->pval));
prev_word=0;
};
-#line 1479 "ael.tab.c"
+#line 1484 "ael.tab.c"
break;
- case 50: /* "macro" */
+ case 51: /* "macro" */
#line 165 "ael.y"
{
destroy_pval((yyvaluep->pval));
prev_word=0;
};
-#line 1487 "ael.tab.c"
+#line 1492 "ael.tab.c"
break;
- case 51: /* "globals" */
+ case 52: /* "globals" */
#line 165 "ael.y"
{
destroy_pval((yyvaluep->pval));
prev_word=0;
};
-#line 1495 "ael.tab.c"
+#line 1500 "ael.tab.c"
break;
- case 52: /* "global_statements" */
+ case 53: /* "global_statements" */
#line 165 "ael.y"
{
destroy_pval((yyvaluep->pval));
prev_word=0;
};
-#line 1503 "ael.tab.c"
+#line 1508 "ael.tab.c"
break;
- case 53: /* "assignment" */
+ case 54: /* "assignment" */
#line 165 "ael.y"
{
destroy_pval((yyvaluep->pval));
prev_word=0;
};
-#line 1511 "ael.tab.c"
+#line 1516 "ael.tab.c"
break;
- case 55: /* "local_assignment" */
+ case 56: /* "local_assignment" */
#line 165 "ael.y"
{
destroy_pval((yyvaluep->pval));
prev_word=0;
};
-#line 1519 "ael.tab.c"
+#line 1524 "ael.tab.c"
break;
- case 57: /* "arglist" */
+ case 58: /* "arglist" */
#line 165 "ael.y"
{
destroy_pval((yyvaluep->pval));
prev_word=0;
};
-#line 1527 "ael.tab.c"
+#line 1532 "ael.tab.c"
break;
- case 58: /* "elements" */
+ case 59: /* "elements" */
#line 165 "ael.y"
{
destroy_pval((yyvaluep->pval));
prev_word=0;
};
-#line 1535 "ael.tab.c"
+#line 1540 "ael.tab.c"
break;
- case 59: /* "element" */
+ case 60: /* "element" */
#line 165 "ael.y"
{
destroy_pval((yyvaluep->pval));
prev_word=0;
};
-#line 1543 "ael.tab.c"
+#line 1548 "ael.tab.c"
break;
- case 60: /* "ignorepat" */
+ case 61: /* "ignorepat" */
#line 165 "ael.y"
{
destroy_pval((yyvaluep->pval));
prev_word=0;
};
-#line 1551 "ael.tab.c"
+#line 1556 "ael.tab.c"
break;
- case 61: /* "extension" */
+ case 62: /* "extension" */
#line 165 "ael.y"
{
destroy_pval((yyvaluep->pval));
prev_word=0;
};
-#line 1559 "ael.tab.c"
+#line 1564 "ael.tab.c"
break;
- case 62: /* "statements" */
+ case 63: /* "statements" */
#line 165 "ael.y"
{
destroy_pval((yyvaluep->pval));
prev_word=0;
};
-#line 1567 "ael.tab.c"
+#line 1572 "ael.tab.c"
break;
- case 63: /* "timerange" */
+ case 64: /* "timerange" */
#line 178 "ael.y"
{ free((yyvaluep->str));};
-#line 1572 "ael.tab.c"
+#line 1577 "ael.tab.c"
break;
- case 64: /* "timespec" */
+ case 65: /* "timespec" */
#line 165 "ael.y"
{
destroy_pval((yyvaluep->pval));
prev_word=0;
};
-#line 1580 "ael.tab.c"
+#line 1585 "ael.tab.c"
break;
- case 65: /* "test_expr" */
+ case 66: /* "test_expr" */
#line 178 "ael.y"
{ free((yyvaluep->str));};
-#line 1585 "ael.tab.c"
+#line 1590 "ael.tab.c"
break;
- case 67: /* "if_like_head" */
+ case 68: /* "if_like_head" */
#line 165 "ael.y"
{
destroy_pval((yyvaluep->pval));
prev_word=0;
};
-#line 1593 "ael.tab.c"
- break;
- case 68: /* "word_list" */
-#line 178 "ael.y"
- { free((yyvaluep->str));};
#line 1598 "ael.tab.c"
break;
- case 70: /* "word3_list" */
+ case 69: /* "word_list" */
#line 178 "ael.y"
{ free((yyvaluep->str));};
#line 1603 "ael.tab.c"
break;
- case 71: /* "goto_word" */
+ case 71: /* "word3_list" */
#line 178 "ael.y"
{ free((yyvaluep->str));};
#line 1608 "ael.tab.c"
break;
- case 72: /* "switch_statement" */
+ case 72: /* "goto_word" */
+#line 178 "ael.y"
+ { free((yyvaluep->str));};
+#line 1613 "ael.tab.c"
+ break;
+ case 73: /* "switch_statement" */
#line 165 "ael.y"
{
destroy_pval((yyvaluep->pval));
prev_word=0;
};
-#line 1616 "ael.tab.c"
+#line 1621 "ael.tab.c"
break;
- case 73: /* "statement" */
+ case 74: /* "statement" */
#line 165 "ael.y"
{
destroy_pval((yyvaluep->pval));
prev_word=0;
};
-#line 1624 "ael.tab.c"
+#line 1629 "ael.tab.c"
break;
- case 78: /* "opt_else" */
+ case 79: /* "opt_else" */
#line 165 "ael.y"
{
destroy_pval((yyvaluep->pval));
prev_word=0;
};
-#line 1632 "ael.tab.c"
+#line 1637 "ael.tab.c"
break;
- case 79: /* "target" */
+ case 80: /* "target" */
#line 165 "ael.y"
{
destroy_pval((yyvaluep->pval));
prev_word=0;
};
-#line 1640 "ael.tab.c"
+#line 1645 "ael.tab.c"
break;
- case 80: /* "opt_pri" */
+ case 81: /* "opt_pri" */
#line 178 "ael.y"
{ free((yyvaluep->str));};
-#line 1645 "ael.tab.c"
+#line 1650 "ael.tab.c"
break;
- case 81: /* "jumptarget" */
+ case 82: /* "jumptarget" */
#line 165 "ael.y"
{
destroy_pval((yyvaluep->pval));
prev_word=0;
};
-#line 1653 "ael.tab.c"
+#line 1658 "ael.tab.c"
break;
- case 82: /* "macro_call" */
+ case 83: /* "macro_call" */
#line 165 "ael.y"
{
destroy_pval((yyvaluep->pval));
prev_word=0;
};
-#line 1661 "ael.tab.c"
+#line 1666 "ael.tab.c"
break;
- case 84: /* "application_call_head" */
+ case 85: /* "application_call_head" */
#line 165 "ael.y"
{
destroy_pval((yyvaluep->pval));
prev_word=0;
};
-#line 1669 "ael.tab.c"
+#line 1674 "ael.tab.c"
break;
- case 86: /* "application_call" */
+ case 87: /* "application_call" */
#line 165 "ael.y"
{
destroy_pval((yyvaluep->pval));
prev_word=0;
};
-#line 1677 "ael.tab.c"
+#line 1682 "ael.tab.c"
break;
- case 87: /* "opt_word" */
+ case 88: /* "opt_word" */
#line 178 "ael.y"
{ free((yyvaluep->str));};
-#line 1682 "ael.tab.c"
+#line 1687 "ael.tab.c"
break;
- case 88: /* "eval_arglist" */
+ case 89: /* "eval_arglist" */
#line 165 "ael.y"
{
destroy_pval((yyvaluep->pval));
prev_word=0;
};
-#line 1690 "ael.tab.c"
+#line 1695 "ael.tab.c"
break;
- case 89: /* "case_statements" */
+ case 90: /* "case_statements" */
#line 165 "ael.y"
{
destroy_pval((yyvaluep->pval));
prev_word=0;
};
-#line 1698 "ael.tab.c"
+#line 1703 "ael.tab.c"
break;
- case 90: /* "case_statement" */
+ case 91: /* "case_statement" */
#line 165 "ael.y"
{
destroy_pval((yyvaluep->pval));
prev_word=0;
};
-#line 1706 "ael.tab.c"
+#line 1711 "ael.tab.c"
break;
- case 91: /* "macro_statements" */
+ case 92: /* "macro_statements" */
#line 165 "ael.y"
{
destroy_pval((yyvaluep->pval));
prev_word=0;
};
-#line 1714 "ael.tab.c"
+#line 1719 "ael.tab.c"
break;
- case 92: /* "macro_statement" */
+ case 93: /* "macro_statement" */
#line 165 "ael.y"
{
destroy_pval((yyvaluep->pval));
prev_word=0;
};
-#line 1722 "ael.tab.c"
+#line 1727 "ael.tab.c"
break;
- case 93: /* "switches" */
+ case 94: /* "switches" */
#line 165 "ael.y"
{
destroy_pval((yyvaluep->pval));
prev_word=0;
};
-#line 1730 "ael.tab.c"
+#line 1735 "ael.tab.c"
break;
- case 94: /* "eswitches" */
+ case 95: /* "eswitches" */
#line 165 "ael.y"
{
destroy_pval((yyvaluep->pval));
prev_word=0;
};
-#line 1738 "ael.tab.c"
+#line 1743 "ael.tab.c"
break;
- case 95: /* "switchlist" */
+ case 96: /* "switchlist" */
#line 165 "ael.y"
{
destroy_pval((yyvaluep->pval));
prev_word=0;
};
-#line 1746 "ael.tab.c"
+#line 1751 "ael.tab.c"
break;
- case 96: /* "included_entry" */
+ case 97: /* "included_entry" */
#line 165 "ael.y"
{
destroy_pval((yyvaluep->pval));
prev_word=0;
};
-#line 1754 "ael.tab.c"
+#line 1759 "ael.tab.c"
break;
- case 97: /* "includeslist" */
+ case 98: /* "includeslist" */
#line 165 "ael.y"
{
destroy_pval((yyvaluep->pval));
prev_word=0;
};
-#line 1762 "ael.tab.c"
+#line 1767 "ael.tab.c"
break;
- case 98: /* "includes" */
+ case 99: /* "includes" */
#line 165 "ael.y"
{
destroy_pval((yyvaluep->pval));
prev_word=0;
};
-#line 1770 "ael.tab.c"
+#line 1775 "ael.tab.c"
break;
default:
@@ -2141,183 +2146,192 @@ yyreduce:
case 12:
#line 204 "ael.y"
{
- if (!(yyvsp[(5) - (6)].pval)) {
- ast_log(LOG_WARNING, "==== File: %s, Line %d, Cols: %d-%d: Warning! The empty context %s will be IGNORED!\n",
- my_file, (yylsp[(4) - (6)]).first_line, (yylsp[(4) - (6)]).first_column, (yylsp[(4) - (6)]).last_column, (yyvsp[(3) - (6)].str) );
- (yyval.pval) = 0;
- free((yyvsp[(3) - (6)].str));
- } else {
- (yyval.pval) = npval2(PV_CONTEXT, &(yylsp[(1) - (6)]), &(yylsp[(6) - (6)]));
- (yyval.pval)->u1.str = (yyvsp[(3) - (6)].str);
- (yyval.pval)->u2.statements = (yyvsp[(5) - (6)].pval);
- set_dads((yyval.pval),(yyvsp[(5) - (6)].pval));
- (yyval.pval)->u3.abstract = (yyvsp[(1) - (6)].intval);} ;}
+ (yyval.pval) = npval2(PV_CONTEXT, &(yylsp[(1) - (6)]), &(yylsp[(6) - (6)]));
+ (yyval.pval)->u1.str = (yyvsp[(3) - (6)].str);
+ (yyval.pval)->u2.statements = (yyvsp[(5) - (6)].pval);
+ set_dads((yyval.pval),(yyvsp[(5) - (6)].pval));
+ (yyval.pval)->u3.abstract = (yyvsp[(1) - (6)].intval);;}
break;
case 13:
-#line 219 "ael.y"
+#line 213 "ael.y"
{ (yyval.intval) = 1; ;}
break;
case 14:
-#line 220 "ael.y"
+#line 214 "ael.y"
{ (yyval.intval) = 0; ;}
break;
case 15:
-#line 223 "ael.y"
+#line 215 "ael.y"
+ { (yyval.intval) = 2; ;}
+ break;
+
+ case 16:
+#line 216 "ael.y"
+ { (yyval.intval)=3; ;}
+ break;
+
+ case 17:
+#line 217 "ael.y"
+ { (yyval.intval)=3; ;}
+ break;
+
+ case 18:
+#line 220 "ael.y"
{
(yyval.pval) = npval2(PV_MACRO, &(yylsp[(1) - (8)]), &(yylsp[(8) - (8)]));
(yyval.pval)->u1.str = (yyvsp[(2) - (8)].str); (yyval.pval)->u2.arglist = (yyvsp[(4) - (8)].pval); (yyval.pval)->u3.macro_statements = (yyvsp[(7) - (8)].pval);
set_dads((yyval.pval),(yyvsp[(7) - (8)].pval));;}
break;
- case 16:
-#line 229 "ael.y"
+ case 19:
+#line 226 "ael.y"
{
(yyval.pval) = npval2(PV_GLOBALS, &(yylsp[(1) - (4)]), &(yylsp[(4) - (4)]));
(yyval.pval)->u1.statements = (yyvsp[(3) - (4)].pval);
set_dads((yyval.pval),(yyvsp[(3) - (4)].pval));;}
break;
- case 17:
-#line 235 "ael.y"
+ case 20:
+#line 232 "ael.y"
{ (yyval.pval) = NULL; ;}
break;
- case 18:
-#line 236 "ael.y"
+ case 21:
+#line 233 "ael.y"
{(yyval.pval) = linku1((yyvsp[(1) - (2)].pval), (yyvsp[(2) - (2)].pval)); ;}
break;
- case 19:
-#line 237 "ael.y"
+ case 22:
+#line 234 "ael.y"
{(yyval.pval)=(yyvsp[(2) - (2)].pval);;}
break;
- case 20:
-#line 240 "ael.y"
+ case 23:
+#line 237 "ael.y"
{ reset_semicount(parseio->scanner); ;}
break;
- case 21:
-#line 240 "ael.y"
+ case 24:
+#line 237 "ael.y"
{
(yyval.pval) = npval2(PV_VARDEC, &(yylsp[(1) - (5)]), &(yylsp[(5) - (5)]));
(yyval.pval)->u1.str = (yyvsp[(1) - (5)].str);
(yyval.pval)->u2.val = (yyvsp[(4) - (5)].str); ;}
break;
- case 22:
-#line 246 "ael.y"
+ case 25:
+#line 243 "ael.y"
{ reset_semicount(parseio->scanner); ;}
break;
- case 23:
-#line 246 "ael.y"
+ case 26:
+#line 243 "ael.y"
{
(yyval.pval) = npval2(PV_LOCALVARDEC, &(yylsp[(1) - (6)]), &(yylsp[(6) - (6)]));
(yyval.pval)->u1.str = (yyvsp[(2) - (6)].str);
(yyval.pval)->u2.val = (yyvsp[(5) - (6)].str); ;}
break;
- case 24:
-#line 253 "ael.y"
+ case 27:
+#line 250 "ael.y"
{ (yyval.pval) = NULL; ;}
break;
- case 25:
-#line 254 "ael.y"
+ case 28:
+#line 251 "ael.y"
{ (yyval.pval) = nword((yyvsp[(1) - (1)].str), &(yylsp[(1) - (1)])); ;}
break;
- case 26:
-#line 255 "ael.y"
+ case 29:
+#line 252 "ael.y"
{ (yyval.pval) = linku1((yyvsp[(1) - (3)].pval), nword((yyvsp[(3) - (3)].str), &(yylsp[(3) - (3)]))); ;}
break;
- case 27:
-#line 256 "ael.y"
+ case 30:
+#line 253 "ael.y"
{(yyval.pval)=(yyvsp[(1) - (2)].pval);;}
break;
- case 28:
-#line 259 "ael.y"
+ case 31:
+#line 256 "ael.y"
{(yyval.pval)=0;;}
break;
- case 29:
-#line 260 "ael.y"
+ case 32:
+#line 257 "ael.y"
{ (yyval.pval) = linku1((yyvsp[(1) - (2)].pval), (yyvsp[(2) - (2)].pval)); ;}
break;
- case 30:
-#line 261 "ael.y"
+ case 33:
+#line 258 "ael.y"
{ (yyval.pval)=(yyvsp[(2) - (2)].pval);;}
break;
- case 31:
-#line 264 "ael.y"
+ case 34:
+#line 261 "ael.y"
{(yyval.pval)=(yyvsp[(1) - (1)].pval);;}
break;
- case 32:
-#line 265 "ael.y"
+ case 35:
+#line 262 "ael.y"
{(yyval.pval)=(yyvsp[(1) - (1)].pval);;}
break;
- case 33:
-#line 266 "ael.y"
+ case 36:
+#line 263 "ael.y"
{(yyval.pval)=(yyvsp[(1) - (1)].pval);;}
break;
- case 34:
-#line 267 "ael.y"
+ case 37:
+#line 264 "ael.y"
{(yyval.pval)=(yyvsp[(1) - (1)].pval);;}
break;
- case 35:
-#line 268 "ael.y"
+ case 38:
+#line 265 "ael.y"
{(yyval.pval)=(yyvsp[(1) - (1)].pval);;}
break;
- case 36:
-#line 269 "ael.y"
+ case 39:
+#line 266 "ael.y"
{(yyval.pval)=(yyvsp[(1) - (1)].pval);;}
break;
- case 37:
-#line 270 "ael.y"
+ case 40:
+#line 267 "ael.y"
{(yyval.pval)=(yyvsp[(1) - (1)].pval);;}
break;
- case 38:
-#line 271 "ael.y"
+ case 41:
+#line 268 "ael.y"
{free((yyvsp[(1) - (2)].str)); (yyval.pval)=0;;}
break;
- case 39:
-#line 272 "ael.y"
+ case 42:
+#line 269 "ael.y"
{(yyval.pval)=0;/* allow older docs to be read */;}
break;
- case 40:
-#line 275 "ael.y"
+ case 43:
+#line 272 "ael.y"
{
(yyval.pval) = npval2(PV_IGNOREPAT, &(yylsp[(1) - (4)]), &(yylsp[(4) - (4)]));
(yyval.pval)->u1.str = (yyvsp[(3) - (4)].str);;}
break;
- case 41:
-#line 280 "ael.y"
+ case 44:
+#line 277 "ael.y"
{
(yyval.pval) = npval2(PV_EXTENSION, &(yylsp[(1) - (3)]), &(yylsp[(3) - (3)]));
(yyval.pval)->u1.str = (yyvsp[(1) - (3)].str);
(yyval.pval)->u2.statements = (yyvsp[(3) - (3)].pval); set_dads((yyval.pval),(yyvsp[(3) - (3)].pval));;}
break;
- case 42:
-#line 284 "ael.y"
+ case 45:
+#line 281 "ael.y"
{
(yyval.pval) = npval2(PV_EXTENSION, &(yylsp[(1) - (4)]), &(yylsp[(4) - (4)]));
(yyval.pval)->u1.str = (yyvsp[(2) - (4)].str);
@@ -2325,8 +2339,8 @@ yyreduce:
(yyval.pval)->u4.regexten=1;;}
break;
- case 43:
-#line 289 "ael.y"
+ case 46:
+#line 286 "ael.y"
{
(yyval.pval) = npval2(PV_EXTENSION, &(yylsp[(1) - (7)]), &(yylsp[(7) - (7)]));
(yyval.pval)->u1.str = (yyvsp[(5) - (7)].str);
@@ -2334,8 +2348,8 @@ yyreduce:
(yyval.pval)->u3.hints = (yyvsp[(3) - (7)].str);;}
break;
- case 44:
-#line 294 "ael.y"
+ case 47:
+#line 291 "ael.y"
{
(yyval.pval) = npval2(PV_EXTENSION, &(yylsp[(1) - (8)]), &(yylsp[(8) - (8)]));
(yyval.pval)->u1.str = (yyvsp[(6) - (8)].str);
@@ -2344,23 +2358,23 @@ yyreduce:
(yyval.pval)->u3.hints = (yyvsp[(4) - (8)].str);;}
break;
- case 45:
-#line 304 "ael.y"
+ case 48:
+#line 301 "ael.y"
{ (yyval.pval) = NULL; ;}
break;
- case 46:
-#line 305 "ael.y"
+ case 49:
+#line 302 "ael.y"
{ (yyval.pval) = linku1((yyvsp[(1) - (2)].pval), (yyvsp[(2) - (2)].pval)); ;}
break;
- case 47:
-#line 306 "ael.y"
+ case 50:
+#line 303 "ael.y"
{(yyval.pval)=(yyvsp[(2) - (2)].pval);;}
break;
- case 48:
-#line 312 "ael.y"
+ case 51:
+#line 309 "ael.y"
{
asprintf(&(yyval.str), "%s:%s:%s", (yyvsp[(1) - (5)].str), (yyvsp[(3) - (5)].str), (yyvsp[(5) - (5)].str));
free((yyvsp[(1) - (5)].str));
@@ -2368,13 +2382,13 @@ yyreduce:
free((yyvsp[(5) - (5)].str)); ;}
break;
- case 49:
-#line 317 "ael.y"
+ case 52:
+#line 314 "ael.y"
{ (yyval.str) = (yyvsp[(1) - (1)].str); ;}
break;
- case 50:
-#line 321 "ael.y"
+ case 53:
+#line 318 "ael.y"
{
(yyval.pval) = nword((yyvsp[(1) - (7)].str), &(yylsp[(1) - (7)]));
(yyval.pval)->next = nword((yyvsp[(3) - (7)].str), &(yylsp[(3) - (7)]));
@@ -2382,45 +2396,45 @@ yyreduce:
(yyval.pval)->next->next->next = nword((yyvsp[(7) - (7)].str), &(yylsp[(7) - (7)])); ;}
break;
- case 51:
-#line 329 "ael.y"
+ case 54:
+#line 326 "ael.y"
{ reset_parencount(parseio->scanner); ;}
break;
- case 52:
-#line 329 "ael.y"
+ case 55:
+#line 326 "ael.y"
{ (yyval.str) = (yyvsp[(3) - (4)].str); ;}
break;
- case 53:
-#line 333 "ael.y"
+ case 56:
+#line 330 "ael.y"
{
(yyval.pval)= npval2(PV_IF, &(yylsp[(1) - (2)]), &(yylsp[(2) - (2)]));
(yyval.pval)->u1.str = (yyvsp[(2) - (2)].str); ;}
break;
- case 54:
-#line 336 "ael.y"
+ case 57:
+#line 333 "ael.y"
{
(yyval.pval) = npval2(PV_RANDOM, &(yylsp[(1) - (2)]), &(yylsp[(2) - (2)]));
(yyval.pval)->u1.str=(yyvsp[(2) - (2)].str);;}
break;
- case 55:
-#line 339 "ael.y"
+ case 58:
+#line 336 "ael.y"
{
(yyval.pval) = npval2(PV_IFTIME, &(yylsp[(1) - (4)]), &(yylsp[(4) - (4)]));
(yyval.pval)->u1.list = (yyvsp[(3) - (4)].pval);
prev_word = 0; ;}
break;
- case 56:
-#line 350 "ael.y"
+ case 59:
+#line 347 "ael.y"
{ (yyval.str) = (yyvsp[(1) - (1)].str);;}
break;
- case 57:
-#line 351 "ael.y"
+ case 60:
+#line 348 "ael.y"
{
asprintf(&((yyval.str)), "%s%s", (yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].str));
free((yyvsp[(1) - (2)].str));
@@ -2428,42 +2442,42 @@ yyreduce:
prev_word = (yyval.str);;}
break;
- case 58:
-#line 358 "ael.y"
+ case 61:
+#line 355 "ael.y"
{ (yyval.str) = (yyvsp[(1) - (1)].str); ;}
break;
- case 59:
-#line 359 "ael.y"
+ case 62:
+#line 356 "ael.y"
{
asprintf(&((yyval.str)), "%s %s", (yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].str));
free((yyvsp[(1) - (2)].str));
free((yyvsp[(2) - (2)].str)); ;}
break;
- case 60:
-#line 363 "ael.y"
+ case 63:
+#line 360 "ael.y"
{
asprintf(&((yyval.str)), "%s:%s", (yyvsp[(1) - (3)].str), (yyvsp[(3) - (3)].str));
free((yyvsp[(1) - (3)].str));
free((yyvsp[(3) - (3)].str)); ;}
break;
- case 61:
-#line 367 "ael.y"
+ case 64:
+#line 364 "ael.y"
{ /* there are often '&' in hints */
asprintf(&((yyval.str)), "%s&%s", (yyvsp[(1) - (3)].str), (yyvsp[(3) - (3)].str));
free((yyvsp[(1) - (3)].str));
free((yyvsp[(3) - (3)].str));;}
break;
- case 62:
-#line 373 "ael.y"
+ case 65:
+#line 370 "ael.y"
{ (yyval.str) = (yyvsp[(1) - (1)].str);;}
break;
- case 63:
-#line 374 "ael.y"
+ case 66:
+#line 371 "ael.y"
{
asprintf(&((yyval.str)), "%s%s", (yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].str));
free((yyvsp[(1) - (2)].str));
@@ -2471,8 +2485,8 @@ yyreduce:
prev_word = (yyval.str);;}
break;
- case 64:
-#line 379 "ael.y"
+ case 67:
+#line 376 "ael.y"
{
asprintf(&((yyval.str)), "%s%s%s", (yyvsp[(1) - (3)].str), (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str));
free((yyvsp[(1) - (3)].str));
@@ -2481,90 +2495,90 @@ yyreduce:
prev_word=(yyval.str);;}
break;
- case 65:
-#line 387 "ael.y"
+ case 68:
+#line 384 "ael.y"
{ (yyval.str) = (yyvsp[(1) - (1)].str);;}
break;
- case 66:
-#line 388 "ael.y"
+ case 69:
+#line 385 "ael.y"
{
asprintf(&((yyval.str)), "%s%s", (yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].str));
free((yyvsp[(1) - (2)].str));
free((yyvsp[(2) - (2)].str));;}
break;
- case 67:
-#line 392 "ael.y"
+ case 70:
+#line 389 "ael.y"
{
asprintf(&((yyval.str)), "%s:%s", (yyvsp[(1) - (3)].str), (yyvsp[(3) - (3)].str));
free((yyvsp[(1) - (3)].str));
free((yyvsp[(3) - (3)].str));;}
break;
- case 68:
-#line 398 "ael.y"
+ case 71:
+#line 395 "ael.y"
{
(yyval.pval) = npval2(PV_SWITCH, &(yylsp[(1) - (5)]), &(yylsp[(5) - (5)]));
(yyval.pval)->u1.str = (yyvsp[(2) - (5)].str);
(yyval.pval)->u2.statements = (yyvsp[(4) - (5)].pval); set_dads((yyval.pval),(yyvsp[(4) - (5)].pval));;}
break;
- case 69:
-#line 407 "ael.y"
+ case 72:
+#line 404 "ael.y"
{
(yyval.pval) = npval2(PV_STATEMENTBLOCK, &(yylsp[(1) - (3)]), &(yylsp[(3) - (3)]));
(yyval.pval)->u1.list = (yyvsp[(2) - (3)].pval); set_dads((yyval.pval),(yyvsp[(2) - (3)].pval));;}
break;
- case 70:
-#line 410 "ael.y"
+ case 73:
+#line 407 "ael.y"
{ (yyval.pval) = (yyvsp[(1) - (1)].pval); ;}
break;
- case 71:
-#line 411 "ael.y"
+ case 74:
+#line 408 "ael.y"
{ (yyval.pval) = (yyvsp[(1) - (1)].pval); ;}
break;
- case 72:
-#line 412 "ael.y"
+ case 75:
+#line 409 "ael.y"
{
(yyval.pval) = npval2(PV_GOTO, &(yylsp[(1) - (3)]), &(yylsp[(3) - (3)]));
(yyval.pval)->u1.list = (yyvsp[(2) - (3)].pval);;}
break;
- case 73:
-#line 415 "ael.y"
+ case 76:
+#line 412 "ael.y"
{
(yyval.pval) = npval2(PV_GOTO, &(yylsp[(1) - (3)]), &(yylsp[(3) - (3)]));
(yyval.pval)->u1.list = (yyvsp[(2) - (3)].pval);;}
break;
- case 74:
-#line 418 "ael.y"
+ case 77:
+#line 415 "ael.y"
{
(yyval.pval) = npval2(PV_LABEL, &(yylsp[(1) - (2)]), &(yylsp[(2) - (2)]));
(yyval.pval)->u1.str = (yyvsp[(1) - (2)].str); ;}
break;
- case 75:
-#line 421 "ael.y"
+ case 78:
+#line 418 "ael.y"
{reset_semicount(parseio->scanner);;}
break;
- case 76:
-#line 422 "ael.y"
+ case 79:
+#line 419 "ael.y"
{reset_semicount(parseio->scanner);;}
break;
- case 77:
-#line 423 "ael.y"
+ case 80:
+#line 420 "ael.y"
{reset_parencount(parseio->scanner);;}
break;
- case 78:
-#line 423 "ael.y"
+ case 81:
+#line 420 "ael.y"
{ /* XXX word_list maybe ? */
(yyval.pval) = npval2(PV_FOR, &(yylsp[(1) - (12)]), &(yylsp[(12) - (12)]));
(yyval.pval)->u1.for_init = (yyvsp[(4) - (12)].str);
@@ -2573,43 +2587,43 @@ yyreduce:
(yyval.pval)->u4.for_statements = (yyvsp[(12) - (12)].pval); set_dads((yyval.pval),(yyvsp[(12) - (12)].pval));;}
break;
- case 79:
-#line 429 "ael.y"
+ case 82:
+#line 426 "ael.y"
{
(yyval.pval) = npval2(PV_WHILE, &(yylsp[(1) - (3)]), &(yylsp[(3) - (3)]));
(yyval.pval)->u1.str = (yyvsp[(2) - (3)].str);
(yyval.pval)->u2.statements = (yyvsp[(3) - (3)].pval); set_dads((yyval.pval),(yyvsp[(3) - (3)].pval));;}
break;
- case 80:
-#line 433 "ael.y"
+ case 83:
+#line 430 "ael.y"
{ (yyval.pval) = (yyvsp[(1) - (1)].pval); ;}
break;
- case 81:
-#line 434 "ael.y"
+ case 84:
+#line 431 "ael.y"
{ (yyval.pval) = update_last((yyvsp[(2) - (3)].pval), &(yylsp[(2) - (3)])); ;}
break;
- case 82:
-#line 435 "ael.y"
+ case 85:
+#line 432 "ael.y"
{ (yyval.pval) = update_last((yyvsp[(1) - (2)].pval), &(yylsp[(2) - (2)])); ;}
break;
- case 83:
-#line 436 "ael.y"
+ case 86:
+#line 433 "ael.y"
{
(yyval.pval)= npval2(PV_APPLICATION_CALL, &(yylsp[(1) - (2)]), &(yylsp[(2) - (2)]));
(yyval.pval)->u1.str = (yyvsp[(1) - (2)].str);;}
break;
- case 84:
-#line 439 "ael.y"
+ case 87:
+#line 436 "ael.y"
{reset_semicount(parseio->scanner);;}
break;
- case 85:
-#line 439 "ael.y"
+ case 88:
+#line 436 "ael.y"
{
char *bufx;
int tot=0;
@@ -2645,127 +2659,127 @@ yyreduce:
;}
break;
- case 86:
-#line 472 "ael.y"
+ case 89:
+#line 469 "ael.y"
{ (yyval.pval) = npval2(PV_BREAK, &(yylsp[(1) - (2)]), &(yylsp[(2) - (2)])); ;}
break;
- case 87:
-#line 473 "ael.y"
+ case 90:
+#line 470 "ael.y"
{ (yyval.pval) = npval2(PV_RETURN, &(yylsp[(1) - (2)]), &(yylsp[(2) - (2)])); ;}
break;
- case 88:
-#line 474 "ael.y"
+ case 91:
+#line 471 "ael.y"
{ (yyval.pval) = npval2(PV_CONTINUE, &(yylsp[(1) - (2)]), &(yylsp[(2) - (2)])); ;}
break;
- case 89:
-#line 475 "ael.y"
+ case 92:
+#line 472 "ael.y"
{
(yyval.pval) = update_last((yyvsp[(1) - (3)].pval), &(yylsp[(2) - (3)]));
(yyval.pval)->u2.statements = (yyvsp[(2) - (3)].pval); set_dads((yyval.pval),(yyvsp[(2) - (3)].pval));
(yyval.pval)->u3.else_statements = (yyvsp[(3) - (3)].pval);set_dads((yyval.pval),(yyvsp[(3) - (3)].pval));;}
break;
- case 90:
-#line 479 "ael.y"
+ case 93:
+#line 476 "ael.y"
{ (yyval.pval)=0; ;}
break;
- case 91:
-#line 482 "ael.y"
+ case 94:
+#line 479 "ael.y"
{ (yyval.pval) = (yyvsp[(2) - (2)].pval); ;}
break;
- case 92:
-#line 483 "ael.y"
+ case 95:
+#line 480 "ael.y"
{ (yyval.pval) = NULL ; ;}
break;
- case 93:
-#line 486 "ael.y"
+ case 96:
+#line 483 "ael.y"
{ (yyval.pval) = nword((yyvsp[(1) - (1)].str), &(yylsp[(1) - (1)])); ;}
break;
- case 94:
-#line 487 "ael.y"
+ case 97:
+#line 484 "ael.y"
{
(yyval.pval) = nword((yyvsp[(1) - (3)].str), &(yylsp[(1) - (3)]));
(yyval.pval)->next = nword((yyvsp[(3) - (3)].str), &(yylsp[(3) - (3)])); ;}
break;
- case 95:
-#line 490 "ael.y"
+ case 98:
+#line 487 "ael.y"
{
(yyval.pval) = nword((yyvsp[(1) - (3)].str), &(yylsp[(1) - (3)]));
(yyval.pval)->next = nword((yyvsp[(3) - (3)].str), &(yylsp[(3) - (3)])); ;}
break;
- case 96:
-#line 493 "ael.y"
+ case 99:
+#line 490 "ael.y"
{
(yyval.pval) = nword((yyvsp[(1) - (5)].str), &(yylsp[(1) - (5)]));
(yyval.pval)->next = nword((yyvsp[(3) - (5)].str), &(yylsp[(3) - (5)]));
(yyval.pval)->next->next = nword((yyvsp[(5) - (5)].str), &(yylsp[(5) - (5)])); ;}
break;
- case 97:
-#line 497 "ael.y"
+ case 100:
+#line 494 "ael.y"
{
(yyval.pval) = nword((yyvsp[(1) - (5)].str), &(yylsp[(1) - (5)]));
(yyval.pval)->next = nword((yyvsp[(3) - (5)].str), &(yylsp[(3) - (5)]));
(yyval.pval)->next->next = nword((yyvsp[(5) - (5)].str), &(yylsp[(5) - (5)])); ;}
break;
- case 98:
-#line 501 "ael.y"
+ case 101:
+#line 498 "ael.y"
{
(yyval.pval) = nword(strdup("default"), &(yylsp[(1) - (5)]));
(yyval.pval)->next = nword((yyvsp[(3) - (5)].str), &(yylsp[(3) - (5)]));
(yyval.pval)->next->next = nword((yyvsp[(5) - (5)].str), &(yylsp[(5) - (5)])); ;}
break;
- case 99:
-#line 505 "ael.y"
+ case 102:
+#line 502 "ael.y"
{
(yyval.pval) = nword(strdup("default"), &(yylsp[(1) - (5)]));
(yyval.pval)->next = nword((yyvsp[(3) - (5)].str), &(yylsp[(3) - (5)]));
(yyval.pval)->next->next = nword((yyvsp[(5) - (5)].str), &(yylsp[(5) - (5)])); ;}
break;
- case 100:
-#line 511 "ael.y"
+ case 103:
+#line 508 "ael.y"
{ (yyval.str) = strdup("1"); ;}
break;
- case 101:
-#line 512 "ael.y"
+ case 104:
+#line 509 "ael.y"
{ (yyval.str) = (yyvsp[(2) - (2)].str); ;}
break;
- case 102:
-#line 516 "ael.y"
+ case 105:
+#line 513 "ael.y"
{ /* ext[, pri] default 1 */
(yyval.pval) = nword((yyvsp[(1) - (2)].str), &(yylsp[(1) - (2)]));
(yyval.pval)->next = nword((yyvsp[(2) - (2)].str), &(yylsp[(2) - (2)])); ;}
break;
- case 103:
-#line 519 "ael.y"
+ case 106:
+#line 516 "ael.y"
{ /* context, ext, pri */
(yyval.pval) = nword((yyvsp[(4) - (4)].str), &(yylsp[(4) - (4)]));
(yyval.pval)->next = nword((yyvsp[(1) - (4)].str), &(yylsp[(1) - (4)]));
(yyval.pval)->next->next = nword((yyvsp[(2) - (4)].str), &(yylsp[(2) - (4)])); ;}
break;
- case 104:
-#line 525 "ael.y"
+ case 107:
+#line 522 "ael.y"
{reset_argcount(parseio->scanner);;}
break;
- case 105:
-#line 525 "ael.y"
+ case 108:
+#line 522 "ael.y"
{
/* XXX original code had @2 but i think we need @5 */
(yyval.pval) = npval2(PV_MACRO_CALL, &(yylsp[(1) - (5)]), &(yylsp[(5) - (5)]));
@@ -2773,20 +2787,20 @@ yyreduce:
(yyval.pval)->u2.arglist = (yyvsp[(4) - (5)].pval);;}
break;
- case 106:
-#line 530 "ael.y"
+ case 109:
+#line 527 "ael.y"
{
(yyval.pval)= npval2(PV_MACRO_CALL, &(yylsp[(1) - (3)]), &(yylsp[(3) - (3)]));
(yyval.pval)->u1.str = (yyvsp[(1) - (3)].str); ;}
break;
- case 107:
-#line 538 "ael.y"
+ case 110:
+#line 535 "ael.y"
{reset_argcount(parseio->scanner);;}
break;
- case 108:
-#line 538 "ael.y"
+ case 111:
+#line 535 "ael.y"
{
if (strcasecmp((yyvsp[(1) - (3)].str),"goto") == 0) {
(yyval.pval) = npval2(PV_GOTO, &(yylsp[(1) - (3)]), &(yylsp[(2) - (3)]));
@@ -2798,8 +2812,8 @@ yyreduce:
} ;}
break;
- case 109:
-#line 549 "ael.y"
+ case 112:
+#line 546 "ael.y"
{
(yyval.pval) = update_last((yyvsp[(1) - (3)].pval), &(yylsp[(3) - (3)]));
if( (yyval.pval)->type == PV_GOTO )
@@ -2809,179 +2823,179 @@ yyreduce:
;}
break;
- case 110:
-#line 556 "ael.y"
+ case 113:
+#line 553 "ael.y"
{ (yyval.pval) = update_last((yyvsp[(1) - (2)].pval), &(yylsp[(2) - (2)])); ;}
break;
- case 111:
-#line 559 "ael.y"
+ case 114:
+#line 556 "ael.y"
{ (yyval.str) = (yyvsp[(1) - (1)].str) ;}
break;
- case 112:
-#line 560 "ael.y"
+ case 115:
+#line 557 "ael.y"
{ (yyval.str) = strdup(""); ;}
break;
- case 113:
-#line 563 "ael.y"
+ case 116:
+#line 560 "ael.y"
{ (yyval.pval) = nword((yyvsp[(1) - (1)].str), &(yylsp[(1) - (1)])); ;}
break;
- case 114:
-#line 564 "ael.y"
+ case 117:
+#line 561 "ael.y"
{
(yyval.pval)= npval(PV_WORD,0/*@1.first_line*/,0/*@1.last_line*/,0/* @1.first_column*/, 0/*@1.last_column*/);
(yyval.pval)->u1.str = strdup(""); ;}
break;
- case 115:
-#line 567 "ael.y"
+ case 118:
+#line 564 "ael.y"
{ (yyval.pval) = linku1((yyvsp[(1) - (3)].pval), nword((yyvsp[(3) - (3)].str), &(yylsp[(3) - (3)]))); ;}
break;
- case 116:
-#line 570 "ael.y"
+ case 119:
+#line 567 "ael.y"
{ (yyval.pval) = NULL; ;}
break;
- case 117:
-#line 571 "ael.y"
+ case 120:
+#line 568 "ael.y"
{ (yyval.pval) = linku1((yyvsp[(1) - (2)].pval), (yyvsp[(2) - (2)].pval)); ;}
break;
- case 118:
-#line 574 "ael.y"
+ case 121:
+#line 571 "ael.y"
{
(yyval.pval) = npval2(PV_CASE, &(yylsp[(1) - (4)]), &(yylsp[(3) - (4)])); /* XXX 3 or 4 ? */
(yyval.pval)->u1.str = (yyvsp[(2) - (4)].str);
(yyval.pval)->u2.statements = (yyvsp[(4) - (4)].pval); set_dads((yyval.pval),(yyvsp[(4) - (4)].pval));;}
break;
- case 119:
-#line 578 "ael.y"
+ case 122:
+#line 575 "ael.y"
{
(yyval.pval) = npval2(PV_DEFAULT, &(yylsp[(1) - (3)]), &(yylsp[(3) - (3)]));
(yyval.pval)->u1.str = NULL;
(yyval.pval)->u2.statements = (yyvsp[(3) - (3)].pval);set_dads((yyval.pval),(yyvsp[(3) - (3)].pval));;}
break;
- case 120:
-#line 582 "ael.y"
+ case 123:
+#line 579 "ael.y"
{
(yyval.pval) = npval2(PV_PATTERN, &(yylsp[(1) - (4)]), &(yylsp[(4) - (4)])); /* XXX@3 or @4 ? */
(yyval.pval)->u1.str = (yyvsp[(2) - (4)].str);
(yyval.pval)->u2.statements = (yyvsp[(4) - (4)].pval);set_dads((yyval.pval),(yyvsp[(4) - (4)].pval));;}
break;
- case 121:
-#line 588 "ael.y"
+ case 124:
+#line 585 "ael.y"
{ (yyval.pval) = NULL; ;}
break;
- case 122:
-#line 589 "ael.y"
+ case 125:
+#line 586 "ael.y"
{ (yyval.pval) = linku1((yyvsp[(1) - (2)].pval), (yyvsp[(2) - (2)].pval)); ;}
break;
- case 123:
-#line 592 "ael.y"
+ case 126:
+#line 589 "ael.y"
{(yyval.pval)=(yyvsp[(1) - (1)].pval);;}
break;
- case 124:
-#line 593 "ael.y"
+ case 127:
+#line 590 "ael.y"
{ (yyval.pval)=(yyvsp[(1) - (1)].pval);;}
break;
- case 125:
-#line 594 "ael.y"
+ case 128:
+#line 591 "ael.y"
{
(yyval.pval) = npval2(PV_CATCH, &(yylsp[(1) - (5)]), &(yylsp[(5) - (5)]));
(yyval.pval)->u1.str = (yyvsp[(2) - (5)].str);
(yyval.pval)->u2.statements = (yyvsp[(4) - (5)].pval); set_dads((yyval.pval),(yyvsp[(4) - (5)].pval));;}
break;
- case 126:
-#line 600 "ael.y"
+ case 129:
+#line 597 "ael.y"
{
(yyval.pval) = npval2(PV_SWITCHES, &(yylsp[(1) - (4)]), &(yylsp[(2) - (4)]));
(yyval.pval)->u1.list = (yyvsp[(3) - (4)].pval); set_dads((yyval.pval),(yyvsp[(3) - (4)].pval));;}
break;
- case 127:
-#line 605 "ael.y"
+ case 130:
+#line 602 "ael.y"
{
(yyval.pval) = npval2(PV_ESWITCHES, &(yylsp[(1) - (4)]), &(yylsp[(2) - (4)]));
(yyval.pval)->u1.list = (yyvsp[(3) - (4)].pval); set_dads((yyval.pval),(yyvsp[(3) - (4)].pval));;}
break;
- case 128:
-#line 610 "ael.y"
+ case 131:
+#line 607 "ael.y"
{ (yyval.pval) = NULL; ;}
break;
- case 129:
-#line 611 "ael.y"
+ case 132:
+#line 608 "ael.y"
{ (yyval.pval) = linku1(nword((yyvsp[(1) - (3)].str), &(yylsp[(1) - (3)])), (yyvsp[(3) - (3)].pval)); ;}
break;
- case 130:
-#line 612 "ael.y"
+ case 133:
+#line 609 "ael.y"
{ char *x; asprintf(&x,"%s@%s", (yyvsp[(1) - (5)].str),(yyvsp[(3) - (5)].str)); free((yyvsp[(1) - (5)].str)); free((yyvsp[(3) - (5)].str));
(yyval.pval) = linku1(nword(x, &(yylsp[(1) - (5)])), (yyvsp[(5) - (5)].pval));;}
break;
- case 131:
-#line 614 "ael.y"
+ case 134:
+#line 611 "ael.y"
{(yyval.pval)=(yyvsp[(2) - (2)].pval);;}
break;
- case 132:
-#line 617 "ael.y"
+ case 135:
+#line 614 "ael.y"
{ (yyval.pval) = nword((yyvsp[(1) - (1)].str), &(yylsp[(1) - (1)])); ;}
break;
- case 133:
-#line 618 "ael.y"
+ case 136:
+#line 615 "ael.y"
{
(yyval.pval) = nword((yyvsp[(1) - (3)].str), &(yylsp[(1) - (3)]));
(yyval.pval)->u2.arglist = (yyvsp[(3) - (3)].pval);
prev_word=0; /* XXX sure ? */ ;}
break;
- case 134:
-#line 625 "ael.y"
+ case 137:
+#line 622 "ael.y"
{ (yyval.pval) = (yyvsp[(1) - (2)].pval); ;}
break;
- case 135:
-#line 626 "ael.y"
+ case 138:
+#line 623 "ael.y"
{ (yyval.pval) = linku1((yyvsp[(1) - (3)].pval), (yyvsp[(2) - (3)].pval)); ;}
break;
- case 136:
-#line 627 "ael.y"
+ case 139:
+#line 624 "ael.y"
{(yyval.pval)=(yyvsp[(1) - (2)].pval);;}
break;
- case 137:
-#line 630 "ael.y"
+ case 140:
+#line 627 "ael.y"
{
(yyval.pval) = npval2(PV_INCLUDES, &(yylsp[(1) - (4)]), &(yylsp[(4) - (4)]));
(yyval.pval)->u1.list = (yyvsp[(3) - (4)].pval);set_dads((yyval.pval),(yyvsp[(3) - (4)].pval));;}
break;
- case 138:
-#line 633 "ael.y"
+ case 141:
+#line 630 "ael.y"
{
(yyval.pval) = npval2(PV_INCLUDES, &(yylsp[(1) - (3)]), &(yylsp[(3) - (3)]));;}
break;
/* Line 1270 of yacc.c. */
-#line 2985 "ael.tab.c"
+#line 2999 "ael.tab.c"
default: break;
}
YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -3200,7 +3214,7 @@ yyreturn:
}
-#line 638 "ael.y"
+#line 635 "ael.y"
static char *token_equivs1[] =
diff --git a/res/ael/ael.tab.h b/res/ael/ael.tab.h
index 4036c07f7..95b011852 100644
--- a/res/ael/ael.tab.h
+++ b/res/ael/ael.tab.h
@@ -50,25 +50,26 @@
KW_ELSE = 276,
KW_RANDOM = 277,
KW_ABSTRACT = 278,
- EXTENMARK = 279,
- KW_GOTO = 280,
- KW_JUMP = 281,
- KW_RETURN = 282,
- KW_BREAK = 283,
- KW_CONTINUE = 284,
- KW_REGEXTEN = 285,
- KW_HINT = 286,
- KW_FOR = 287,
- KW_WHILE = 288,
- KW_CASE = 289,
- KW_PATTERN = 290,
- KW_DEFAULT = 291,
- KW_CATCH = 292,
- KW_SWITCHES = 293,
- KW_ESWITCHES = 294,
- KW_INCLUDES = 295,
- KW_LOCAL = 296,
- word = 297
+ KW_EXTEND = 279,
+ EXTENMARK = 280,
+ KW_GOTO = 281,
+ KW_JUMP = 282,
+ KW_RETURN = 283,
+ KW_BREAK = 284,
+ KW_CONTINUE = 285,
+ KW_REGEXTEN = 286,
+ KW_HINT = 287,
+ KW_FOR = 288,
+ KW_WHILE = 289,
+ KW_CASE = 290,
+ KW_PATTERN = 291,
+ KW_DEFAULT = 292,
+ KW_CATCH = 293,
+ KW_SWITCHES = 294,
+ KW_ESWITCHES = 295,
+ KW_INCLUDES = 296,
+ KW_LOCAL = 297,
+ word = 298
};
#endif
/* Tokens. */
@@ -93,25 +94,26 @@
#define KW_ELSE 276
#define KW_RANDOM 277
#define KW_ABSTRACT 278
-#define EXTENMARK 279
-#define KW_GOTO 280
-#define KW_JUMP 281
-#define KW_RETURN 282
-#define KW_BREAK 283
-#define KW_CONTINUE 284
-#define KW_REGEXTEN 285
-#define KW_HINT 286
-#define KW_FOR 287
-#define KW_WHILE 288
-#define KW_CASE 289
-#define KW_PATTERN 290
-#define KW_DEFAULT 291
-#define KW_CATCH 292
-#define KW_SWITCHES 293
-#define KW_ESWITCHES 294
-#define KW_INCLUDES 295
-#define KW_LOCAL 296
-#define word 297
+#define KW_EXTEND 279
+#define EXTENMARK 280
+#define KW_GOTO 281
+#define KW_JUMP 282
+#define KW_RETURN 283
+#define KW_BREAK 284
+#define KW_CONTINUE 285
+#define KW_REGEXTEN 286
+#define KW_HINT 287
+#define KW_FOR 288
+#define KW_WHILE 289
+#define KW_CASE 290
+#define KW_PATTERN 291
+#define KW_DEFAULT 292
+#define KW_CATCH 293
+#define KW_SWITCHES 294
+#define KW_ESWITCHES 295
+#define KW_INCLUDES 296
+#define KW_LOCAL 297
+#define word 298
@@ -125,7 +127,7 @@ typedef union YYSTYPE
struct pval *pval; /* full objects */
}
/* Line 1536 of yacc.c. */
-#line 129 "ael.tab.h"
+#line 131 "ael.tab.h"
YYSTYPE;
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
diff --git a/res/ael/ael.y b/res/ael/ael.y
index dc5309005..cac4a4266 100644
--- a/res/ael/ael.y
+++ b/res/ael/ael.y
@@ -80,7 +80,7 @@ static pval *update_last(pval *, YYLTYPE *);
%token KW_CONTEXT LC RC LP RP SEMI EQ COMMA COLON AMPER BAR AT
-%token KW_MACRO KW_GLOBALS KW_IGNOREPAT KW_SWITCH KW_IF KW_IFTIME KW_ELSE KW_RANDOM KW_ABSTRACT
+%token KW_MACRO KW_GLOBALS KW_IGNOREPAT KW_SWITCH KW_IF KW_IFTIME KW_ELSE KW_RANDOM KW_ABSTRACT KW_EXTEND
%token EXTENMARK KW_GOTO KW_JUMP KW_RETURN KW_BREAK KW_CONTINUE KW_REGEXTEN KW_HINT
%token KW_FOR KW_WHILE KW_CASE KW_PATTERN KW_DEFAULT KW_CATCH KW_SWITCHES KW_ESWITCHES
%token KW_INCLUDES KW_LOCAL
@@ -202,22 +202,19 @@ context_name : word { $$ = $1; }
;
context : opt_abstract KW_CONTEXT context_name LC elements RC {
- if (!$5) {
- ast_log(LOG_WARNING, "==== File: %s, Line %d, Cols: %d-%d: Warning! The empty context %s will be IGNORED!\n",
- my_file, @4.first_line, @4.first_column, @4.last_column, $3 );
- $$ = 0;
- free($3);
- } else {
- $$ = npval2(PV_CONTEXT, &@1, &@6);
- $$->u1.str = $3;
- $$->u2.statements = $5;
- set_dads($$,$5);
- $$->u3.abstract = $1;} }
+ $$ = npval2(PV_CONTEXT, &@1, &@6);
+ $$->u1.str = $3;
+ $$->u2.statements = $5;
+ set_dads($$,$5);
+ $$->u3.abstract = $1;}
;
/* optional "abstract" keyword XXX there is no regression test for this */
opt_abstract: KW_ABSTRACT { $$ = 1; }
| /* nothing */ { $$ = 0; }
+ | KW_EXTEND { $$ = 2; }
+ | KW_EXTEND KW_ABSTRACT { $$=3; }
+ | KW_ABSTRACT KW_EXTEND { $$=3; }
;
macro : KW_MACRO word LP arglist RP LC macro_statements RC {
diff --git a/res/ael/ael_lex.c b/res/ael/ael_lex.c
index d6f4f46d9..0ae6a7754 100644
--- a/res/ael/ael_lex.c
+++ b/res/ael/ael_lex.c
@@ -345,8 +345,8 @@ static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
*yy_cp = '\0'; \
yyg->yy_c_buf_p = yy_cp;
-#define YY_NUM_RULES 62
-#define YY_END_OF_BUFFER 63
+#define YY_NUM_RULES 63
+#define YY_END_OF_BUFFER 64
/* This struct is not used in this scanner,
but its presence is necessary. */
struct yy_trans_info
@@ -354,34 +354,35 @@ struct yy_trans_info
flex_int32_t yy_verify;
flex_int32_t yy_nxt;
};
-static yyconst flex_int16_t yy_accept[239] =
+static yyconst flex_int16_t yy_accept[244] =
{ 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 42, 42,
- 63, 62, 49, 47, 48, 50, 50, 9, 3, 4,
- 7, 50, 8, 5, 6, 12, 50, 50, 50, 50,
- 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
- 50, 50, 1, 10, 2, 62, 52, 51, 62, 53,
- 62, 58, 59, 60, 62, 62, 54, 55, 56, 62,
- 57, 42, 43, 44, 49, 48, 50, 50, 41, 13,
- 11, 50, 50, 50, 50, 50, 50, 50, 50, 50,
- 50, 50, 21, 50, 50, 50, 50, 50, 50, 50,
- 50, 50, 50, 0, 52, 51, 0, 53, 52, 51,
-
- 53, 0, 58, 59, 60, 0, 58, 59, 60, 0,
- 54, 55, 56, 0, 57, 54, 55, 56, 57, 42,
- 43, 44, 45, 44, 46, 50, 13, 13, 50, 50,
- 50, 50, 50, 50, 50, 50, 32, 50, 50, 50,
- 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
- 50, 50, 50, 50, 50, 34, 50, 50, 50, 26,
- 50, 50, 27, 25, 50, 50, 50, 28, 50, 50,
- 50, 50, 50, 50, 50, 50, 50, 50, 30, 37,
- 50, 50, 50, 50, 50, 50, 50, 50, 18, 16,
- 50, 50, 50, 50, 50, 33, 50, 50, 50, 50,
-
- 50, 50, 50, 22, 50, 50, 50, 23, 50, 29,
- 20, 50, 50, 14, 50, 35, 50, 17, 50, 50,
- 36, 50, 50, 50, 15, 31, 50, 50, 40, 24,
- 38, 0, 39, 19, 0, 0, 61, 0
+ 0, 0, 0, 0, 0, 0, 0, 0, 43, 43,
+ 64, 63, 50, 48, 49, 51, 51, 9, 3, 4,
+ 7, 51, 8, 5, 6, 12, 51, 51, 51, 51,
+ 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+ 51, 51, 1, 10, 2, 63, 53, 52, 63, 54,
+ 63, 59, 60, 61, 63, 63, 55, 56, 57, 63,
+ 58, 43, 44, 45, 50, 49, 51, 51, 42, 13,
+ 11, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+ 51, 51, 51, 22, 51, 51, 51, 51, 51, 51,
+ 51, 51, 51, 51, 0, 53, 52, 0, 54, 53,
+
+ 52, 54, 0, 59, 60, 61, 0, 59, 60, 61,
+ 0, 55, 56, 57, 0, 58, 55, 56, 57, 58,
+ 43, 44, 45, 46, 45, 47, 51, 13, 13, 51,
+ 51, 51, 51, 51, 51, 51, 51, 51, 33, 51,
+ 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+ 51, 51, 51, 51, 51, 51, 51, 35, 51, 51,
+ 51, 27, 51, 51, 51, 28, 26, 51, 51, 51,
+ 29, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+ 51, 31, 38, 51, 51, 51, 51, 51, 51, 51,
+ 51, 51, 19, 17, 51, 51, 51, 51, 51, 34,
+
+ 51, 51, 51, 51, 51, 51, 16, 51, 23, 51,
+ 51, 51, 24, 51, 30, 21, 51, 51, 14, 51,
+ 36, 51, 18, 51, 51, 37, 51, 51, 51, 15,
+ 32, 51, 51, 41, 25, 39, 0, 40, 20, 0,
+ 0, 62, 0
} ;
static yyconst flex_int32_t yy_ec[256] =
@@ -425,186 +426,186 @@ static yyconst flex_int32_t yy_meta[48] =
3, 3, 3, 3, 3, 1, 3
} ;
-static yyconst flex_int16_t yy_base[252] =
+static yyconst flex_int16_t yy_base[257] =
{ 0,
0, 0, 39, 42, 81, 120, 159, 198, 47, 54,
- 314, 985, 311, 985, 308, 0, 280, 985, 985, 985,
- 985, 42, 985, 985, 293, 985, 285, 269, 31, 280,
- 32, 269, 33, 274, 45, 262, 266, 279, 278, 48,
- 257, 269, 985, 985, 985, 73, 985, 985, 89, 985,
+ 319, 985, 316, 985, 313, 0, 285, 985, 985, 985,
+ 985, 42, 985, 985, 298, 985, 290, 274, 31, 285,
+ 32, 274, 33, 279, 45, 267, 271, 284, 283, 48,
+ 262, 274, 985, 985, 985, 73, 985, 985, 89, 985,
237, 985, 985, 985, 276, 315, 985, 985, 985, 354,
- 985, 292, 985, 66, 292, 289, 0, 256, 0, 401,
- 985, 250, 262, 64, 252, 259, 243, 238, 241, 242,
- 237, 241, 257, 239, 249, 238, 247, 246, 229, 233,
- 47, 237, 236, 103, 985, 985, 137, 985, 142, 176,
-
- 181, 439, 985, 985, 985, 478, 517, 556, 595, 634,
- 985, 985, 985, 673, 985, 712, 751, 790, 829, 263,
- 985, 103, 985, 104, 985, 240, 0, 876, 223, 240,
- 235, 236, 219, 233, 228, 223, 0, 229, 214, 209,
- 218, 211, 210, 204, 218, 201, 198, 212, 210, 194,
- 194, 200, 199, 193, 198, 0, 200, 100, 187, 0,
- 186, 202, 0, 0, 189, 183, 175, 0, 182, 178,
- 187, 176, 168, 172, 184, 178, 158, 176, 0, 0,
- 151, 158, 159, 167, 154, 156, 151, 151, 0, 0,
- 137, 140, 132, 130, 131, 0, 134, 131, 114, 112,
-
- 112, 119, 105, 0, 106, 116, 103, 0, 111, 0,
- 110, 106, 91, 0, 95, 0, 94, 0, 96, 68,
- 0, 64, 57, 76, 0, 0, 52, 44, 0, 0,
- 0, 168, 0, 0, 0, 50, 985, 985, 922, 927,
- 932, 937, 940, 945, 950, 955, 960, 964, 969, 974,
- 979
+ 985, 300, 985, 66, 300, 297, 0, 264, 0, 401,
+ 985, 259, 268, 64, 258, 265, 252, 247, 248, 249,
+ 250, 242, 245, 261, 243, 253, 242, 251, 250, 233,
+ 237, 51, 241, 240, 103, 985, 985, 137, 985, 142,
+
+ 176, 181, 439, 985, 985, 985, 478, 517, 556, 595,
+ 634, 985, 985, 985, 673, 985, 712, 751, 790, 829,
+ 267, 985, 103, 985, 104, 985, 244, 0, 876, 227,
+ 244, 239, 240, 223, 240, 235, 230, 233, 0, 232,
+ 218, 213, 222, 214, 216, 211, 225, 205, 201, 215,
+ 213, 197, 197, 203, 202, 196, 201, 0, 203, 100,
+ 190, 0, 190, 194, 206, 0, 0, 192, 186, 182,
+ 0, 188, 180, 189, 178, 170, 174, 187, 184, 167,
+ 182, 0, 0, 156, 163, 161, 169, 167, 158, 161,
+ 156, 152, 0, 0, 138, 141, 134, 137, 136, 0,
+
+ 135, 135, 115, 113, 113, 123, 0, 109, 0, 107,
+ 117, 107, 0, 112, 0, 111, 110, 92, 0, 105,
+ 0, 95, 0, 85, 60, 0, 61, 48, 117, 0,
+ 0, 45, 37, 0, 0, 0, 168, 0, 0, 0,
+ 50, 985, 985, 922, 927, 932, 937, 940, 945, 950,
+ 955, 960, 964, 969, 974, 979
} ;
-static yyconst flex_int16_t yy_def[252] =
+static yyconst flex_int16_t yy_def[257] =
{ 0,
- 238, 1, 239, 239, 240, 240, 241, 241, 242, 242,
- 238, 238, 238, 238, 238, 243, 243, 238, 238, 238,
- 238, 243, 238, 238, 238, 238, 243, 243, 243, 243,
+ 243, 1, 244, 244, 245, 245, 246, 246, 247, 247,
+ 243, 243, 243, 243, 243, 248, 248, 243, 243, 243,
+ 243, 248, 243, 243, 243, 243, 248, 248, 248, 248,
+ 248, 248, 248, 248, 248, 248, 248, 248, 248, 248,
+ 248, 248, 243, 243, 243, 249, 243, 243, 249, 243,
+ 250, 243, 243, 243, 250, 251, 243, 243, 243, 251,
+ 243, 252, 243, 253, 243, 243, 248, 248, 248, 254,
+ 243, 248, 248, 248, 248, 248, 248, 248, 248, 248,
+ 248, 248, 248, 248, 248, 248, 248, 248, 248, 248,
+ 248, 248, 248, 248, 249, 243, 243, 249, 243, 249,
+
+ 249, 249, 250, 243, 243, 243, 250, 250, 250, 250,
+ 251, 243, 243, 243, 251, 243, 251, 251, 251, 251,
+ 252, 243, 253, 243, 253, 243, 248, 255, 254, 248,
+ 248, 248, 248, 248, 248, 248, 248, 248, 248, 248,
+ 248, 248, 248, 248, 248, 248, 248, 248, 248, 248,
+ 248, 248, 248, 248, 248, 248, 248, 248, 248, 248,
+ 248, 248, 248, 248, 248, 248, 248, 248, 248, 248,
+ 248, 248, 248, 248, 248, 248, 248, 248, 248, 248,
+ 248, 248, 248, 248, 248, 248, 248, 248, 248, 248,
+ 248, 248, 248, 248, 248, 248, 248, 248, 248, 248,
+
+ 248, 248, 248, 248, 248, 248, 248, 248, 248, 248,
+ 248, 248, 248, 248, 248, 248, 248, 248, 248, 248,
+ 248, 248, 248, 248, 248, 248, 248, 248, 248, 248,
+ 248, 248, 248, 248, 248, 248, 243, 248, 248, 256,
+ 256, 243, 0, 243, 243, 243, 243, 243, 243, 243,
+ 243, 243, 243, 243, 243, 243
+ } ;
+
+static yyconst flex_int16_t yy_nxt[1033] =
+ { 0,
+ 12, 13, 14, 15, 16, 16, 17, 18, 19, 20,
+ 16, 21, 22, 23, 24, 25, 16, 26, 16, 16,
+ 12, 16, 27, 28, 29, 30, 31, 32, 33, 34,
+ 35, 36, 16, 37, 38, 16, 16, 39, 40, 41,
+ 16, 16, 42, 16, 43, 44, 45, 47, 48, 63,
+ 47, 48, 69, 74, 70, 242, 63, 64, 47, 49,
+ 50, 47, 49, 50, 64, 77, 81, 75, 124, 82,
+ 91, 78, 84, 85, 92, 79, 125, 239, 126, 151,
+ 86, 96, 97, 47, 238, 50, 47, 236, 50, 52,
+ 53, 152, 96, 98, 99, 54, 235, 100, 101, 234,
+
+ 52, 55, 53, 132, 133, 124, 124, 233, 100, 98,
+ 102, 96, 97, 243, 125, 243, 243, 96, 237, 99,
+ 237, 232, 96, 98, 99, 52, 184, 53, 52, 53,
+ 185, 231, 230, 100, 54, 102, 229, 228, 227, 52,
+ 55, 53, 226, 225, 224, 100, 101, 96, 223, 99,
+ 96, 97, 222, 221, 220, 219, 100, 98, 102, 218,
+ 217, 96, 98, 99, 52, 216, 53, 57, 58, 237,
+ 59, 237, 215, 240, 214, 213, 212, 211, 57, 60,
+ 61, 100, 210, 102, 96, 97, 96, 209, 99, 96,
+ 97, 208, 207, 206, 205, 96, 98, 99, 204, 203,
+
+ 96, 98, 99, 57, 202, 61, 57, 58, 201, 59,
+ 200, 199, 198, 197, 196, 195, 194, 57, 60, 61,
+ 96, 193, 99, 192, 191, 96, 190, 99, 189, 188,
+ 187, 186, 183, 182, 181, 180, 179, 178, 177, 176,
+ 175, 174, 57, 173, 61, 104, 105, 172, 171, 170,
+ 169, 106, 168, 167, 166, 165, 104, 107, 105, 164,
+ 163, 162, 161, 160, 159, 158, 157, 156, 155, 122,
+ 154, 153, 150, 149, 148, 147, 146, 145, 144, 143,
+ 142, 104, 141, 105, 108, 109, 140, 139, 138, 137,
+ 110, 136, 135, 134, 131, 108, 107, 109, 130, 127,
+
+ 66, 65, 122, 94, 93, 90, 89, 88, 87, 83,
+ 80, 76, 73, 72, 71, 68, 66, 65, 243, 243,
+ 108, 243, 109, 112, 113, 243, 114, 243, 243, 243,
+ 243, 243, 243, 243, 112, 115, 116, 243, 243, 243,
243, 243, 243, 243, 243, 243, 243, 243, 243, 243,
- 243, 243, 238, 238, 238, 244, 238, 238, 244, 238,
- 245, 238, 238, 238, 245, 246, 238, 238, 238, 246,
- 238, 247, 238, 248, 238, 238, 243, 243, 243, 249,
- 238, 243, 243, 243, 243, 243, 243, 243, 243, 243,
+ 243, 243, 243, 243, 243, 243, 243, 243, 243, 112,
+ 243, 116, 117, 118, 243, 119, 243, 243, 243, 243,
+ 243, 243, 243, 117, 115, 120, 243, 243, 243, 243,
243, 243, 243, 243, 243, 243, 243, 243, 243, 243,
- 243, 243, 243, 244, 238, 238, 244, 238, 244, 244,
+ 243, 243, 243, 243, 243, 243, 243, 243, 117, 243,
- 244, 245, 238, 238, 238, 245, 245, 245, 245, 246,
- 238, 238, 238, 246, 238, 246, 246, 246, 246, 247,
- 238, 248, 238, 248, 238, 243, 250, 249, 243, 243,
+ 120, 128, 128, 243, 128, 243, 243, 243, 128, 128,
+ 128, 243, 128, 243, 128, 128, 128, 243, 128, 243,
+ 243, 128, 243, 243, 243, 243, 243, 243, 243, 243,
243, 243, 243, 243, 243, 243, 243, 243, 243, 243,
+ 243, 243, 243, 243, 243, 243, 128, 104, 105, 243,
+ 243, 243, 243, 106, 243, 243, 243, 243, 104, 107,
+ 105, 243, 243, 243, 243, 243, 243, 243, 243, 243,
243, 243, 243, 243, 243, 243, 243, 243, 243, 243,
+ 243, 243, 243, 104, 243, 105, 108, 109, 243, 243,
+ 243, 243, 110, 243, 243, 243, 243, 108, 107, 109,
+
243, 243, 243, 243, 243, 243, 243, 243, 243, 243,
243, 243, 243, 243, 243, 243, 243, 243, 243, 243,
+ 243, 243, 108, 243, 109, 104, 105, 243, 243, 243,
+ 243, 106, 243, 243, 243, 243, 104, 107, 105, 243,
243, 243, 243, 243, 243, 243, 243, 243, 243, 243,
243, 243, 243, 243, 243, 243, 243, 243, 243, 243,
+ 243, 104, 243, 105, 104, 105, 243, 243, 243, 243,
+ 106, 243, 243, 243, 243, 104, 107, 105, 243, 243,
+ 243, 243, 243, 243, 243, 243, 243, 243, 243, 243,
243, 243, 243, 243, 243, 243, 243, 243, 243, 243,
+ 104, 243, 105, 104, 105, 243, 243, 243, 243, 106,
+ 243, 243, 243, 243, 104, 107, 105, 243, 243, 243,
243, 243, 243, 243, 243, 243, 243, 243, 243, 243,
+ 243, 243, 243, 243, 243, 243, 243, 243, 243, 104,
+ 243, 105, 112, 113, 243, 114, 243, 243, 243, 243,
+ 243, 243, 243, 112, 115, 116, 243, 243, 243, 243,
243, 243, 243, 243, 243, 243, 243, 243, 243, 243,
+ 243, 243, 243, 243, 243, 243, 243, 243, 112, 243,
+ 116, 117, 118, 243, 119, 243, 243, 243, 243, 243,
+ 243, 243, 117, 115, 120, 243, 243, 243, 243, 243,
+
243, 243, 243, 243, 243, 243, 243, 243, 243, 243,
- 243, 238, 243, 243, 251, 251, 238, 0, 238, 238,
- 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
- 238
- } ;
+ 243, 243, 243, 243, 243, 243, 243, 117, 243, 120,
+ 112, 113, 243, 114, 243, 243, 243, 243, 243, 243,
+ 243, 112, 115, 116, 243, 243, 243, 243, 243, 243,
+ 243, 243, 243, 243, 243, 243, 243, 243, 243, 243,
+ 243, 243, 243, 243, 243, 243, 112, 243, 116, 112,
+ 113, 243, 114, 243, 243, 243, 243, 243, 243, 243,
+ 112, 115, 116, 243, 243, 243, 243, 243, 243, 243,
+ 243, 243, 243, 243, 243, 243, 243, 243, 243, 243,
+ 243, 243, 243, 243, 243, 112, 243, 116, 112, 113,
-static yyconst flex_int16_t yy_nxt[1033] =
- { 0,
- 12, 13, 14, 15, 16, 16, 17, 18, 19, 20,
- 16, 21, 22, 23, 24, 25, 16, 26, 16, 16,
- 12, 16, 27, 28, 29, 30, 31, 32, 33, 34,
- 35, 36, 16, 37, 38, 16, 16, 39, 40, 41,
- 16, 16, 42, 16, 43, 44, 45, 47, 48, 63,
- 47, 48, 69, 74, 70, 237, 63, 64, 47, 49,
- 50, 47, 49, 50, 64, 77, 80, 75, 123, 81,
- 90, 78, 83, 84, 91, 149, 124, 232, 125, 232,
- 85, 95, 96, 47, 234, 50, 47, 150, 50, 52,
- 53, 233, 95, 97, 98, 54, 231, 99, 100, 230,
-
- 52, 55, 53, 131, 132, 123, 123, 229, 99, 97,
- 101, 95, 96, 238, 124, 238, 238, 95, 228, 98,
- 227, 226, 95, 97, 98, 52, 181, 53, 52, 53,
- 182, 225, 224, 99, 54, 101, 223, 222, 221, 52,
- 55, 53, 220, 219, 218, 99, 100, 95, 217, 98,
- 95, 96, 216, 215, 214, 213, 99, 97, 101, 212,
- 211, 95, 97, 98, 52, 210, 53, 57, 58, 232,
- 59, 232, 209, 235, 208, 207, 206, 205, 57, 60,
- 61, 99, 204, 101, 95, 96, 95, 203, 98, 95,
- 96, 202, 201, 200, 199, 95, 97, 98, 198, 197,
-
- 95, 97, 98, 57, 196, 61, 57, 58, 195, 59,
- 194, 193, 192, 191, 190, 189, 188, 57, 60, 61,
- 95, 187, 98, 186, 185, 95, 184, 98, 183, 180,
- 179, 178, 177, 176, 175, 174, 173, 172, 171, 170,
- 169, 168, 57, 167, 61, 103, 104, 166, 165, 164,
- 163, 105, 162, 161, 160, 159, 103, 106, 104, 158,
- 157, 156, 155, 154, 153, 121, 152, 151, 148, 147,
- 146, 145, 144, 143, 142, 141, 140, 139, 138, 137,
- 136, 103, 135, 104, 107, 108, 134, 133, 130, 129,
- 109, 126, 66, 65, 121, 107, 106, 108, 93, 92,
-
- 89, 88, 87, 86, 82, 79, 76, 73, 72, 71,
- 68, 66, 65, 238, 238, 238, 238, 238, 238, 238,
- 107, 238, 108, 111, 112, 238, 113, 238, 238, 238,
- 238, 238, 238, 238, 111, 114, 115, 238, 238, 238,
- 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
- 238, 238, 238, 238, 238, 238, 238, 238, 238, 111,
- 238, 115, 116, 117, 238, 118, 238, 238, 238, 238,
- 238, 238, 238, 116, 114, 119, 238, 238, 238, 238,
- 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
- 238, 238, 238, 238, 238, 238, 238, 238, 116, 238,
-
- 119, 127, 127, 238, 127, 238, 238, 238, 127, 127,
- 127, 238, 127, 238, 127, 127, 127, 238, 127, 238,
- 238, 127, 238, 238, 238, 238, 238, 238, 238, 238,
- 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
- 238, 238, 238, 238, 238, 238, 127, 103, 104, 238,
- 238, 238, 238, 105, 238, 238, 238, 238, 103, 106,
- 104, 238, 238, 238, 238, 238, 238, 238, 238, 238,
- 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
- 238, 238, 238, 103, 238, 104, 107, 108, 238, 238,
- 238, 238, 109, 238, 238, 238, 238, 107, 106, 108,
-
- 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
- 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
- 238, 238, 107, 238, 108, 103, 104, 238, 238, 238,
- 238, 105, 238, 238, 238, 238, 103, 106, 104, 238,
- 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
- 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
- 238, 103, 238, 104, 103, 104, 238, 238, 238, 238,
- 105, 238, 238, 238, 238, 103, 106, 104, 238, 238,
- 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
- 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
-
- 103, 238, 104, 103, 104, 238, 238, 238, 238, 105,
- 238, 238, 238, 238, 103, 106, 104, 238, 238, 238,
- 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
- 238, 238, 238, 238, 238, 238, 238, 238, 238, 103,
- 238, 104, 111, 112, 238, 113, 238, 238, 238, 238,
- 238, 238, 238, 111, 114, 115, 238, 238, 238, 238,
- 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
- 238, 238, 238, 238, 238, 238, 238, 238, 111, 238,
- 115, 116, 117, 238, 118, 238, 238, 238, 238, 238,
- 238, 238, 116, 114, 119, 238, 238, 238, 238, 238,
-
- 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
- 238, 238, 238, 238, 238, 238, 238, 116, 238, 119,
- 111, 112, 238, 113, 238, 238, 238, 238, 238, 238,
- 238, 111, 114, 115, 238, 238, 238, 238, 238, 238,
- 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
- 238, 238, 238, 238, 238, 238, 111, 238, 115, 111,
- 112, 238, 113, 238, 238, 238, 238, 238, 238, 238,
- 111, 114, 115, 238, 238, 238, 238, 238, 238, 238,
- 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
- 238, 238, 238, 238, 238, 111, 238, 115, 111, 112,
-
- 238, 113, 238, 238, 238, 238, 238, 238, 238, 111,
- 114, 115, 238, 238, 238, 238, 238, 238, 238, 238,
- 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
- 238, 238, 238, 238, 111, 238, 115, 111, 112, 238,
- 113, 238, 238, 238, 238, 238, 238, 238, 111, 114,
- 115, 238, 238, 238, 238, 238, 238, 238, 238, 238,
- 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
- 238, 238, 238, 111, 238, 115, 127, 127, 238, 127,
- 238, 238, 238, 127, 127, 127, 238, 127, 238, 127,
- 127, 127, 238, 127, 238, 238, 127, 238, 238, 238,
-
- 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
- 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
- 238, 127, 46, 46, 46, 46, 46, 51, 51, 51,
+ 243, 114, 243, 243, 243, 243, 243, 243, 243, 112,
+ 115, 116, 243, 243, 243, 243, 243, 243, 243, 243,
+ 243, 243, 243, 243, 243, 243, 243, 243, 243, 243,
+ 243, 243, 243, 243, 112, 243, 116, 112, 113, 243,
+ 114, 243, 243, 243, 243, 243, 243, 243, 112, 115,
+ 116, 243, 243, 243, 243, 243, 243, 243, 243, 243,
+ 243, 243, 243, 243, 243, 243, 243, 243, 243, 243,
+ 243, 243, 243, 112, 243, 116, 128, 128, 243, 128,
+ 243, 243, 243, 128, 128, 128, 243, 128, 243, 128,
+ 128, 128, 243, 128, 243, 243, 128, 243, 243, 243,
+
+ 243, 243, 243, 243, 243, 243, 243, 243, 243, 243,
+ 243, 243, 243, 243, 243, 243, 243, 243, 243, 243,
+ 243, 128, 46, 46, 46, 46, 46, 51, 51, 51,
51, 51, 56, 56, 56, 56, 56, 62, 62, 62,
- 62, 62, 67, 67, 67, 94, 94, 94, 94, 94,
- 102, 102, 102, 102, 102, 110, 110, 110, 110, 110,
- 120, 120, 120, 120, 122, 122, 122, 122, 122, 128,
- 238, 128, 128, 128, 127, 238, 127, 127, 127, 236,
- 236, 236, 238, 236, 11, 238, 238, 238, 238, 238,
- 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
-
- 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
- 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
- 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
- 238, 238
+ 62, 62, 67, 67, 67, 95, 95, 95, 95, 95,
+ 103, 103, 103, 103, 103, 111, 111, 111, 111, 111,
+ 121, 121, 121, 121, 123, 123, 123, 123, 123, 129,
+ 243, 129, 129, 129, 128, 243, 128, 128, 128, 241,
+ 241, 241, 243, 241, 11, 243, 243, 243, 243, 243,
+ 243, 243, 243, 243, 243, 243, 243, 243, 243, 243,
+
+ 243, 243, 243, 243, 243, 243, 243, 243, 243, 243,
+ 243, 243, 243, 243, 243, 243, 243, 243, 243, 243,
+ 243, 243, 243, 243, 243, 243, 243, 243, 243, 243,
+ 243, 243
} ;
static yyconst flex_int16_t yy_chk[1033] =
@@ -614,36 +615,36 @@ static yyconst flex_int16_t yy_chk[1033] =
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 3, 3, 9,
- 4, 4, 22, 29, 22, 236, 10, 9, 3, 3,
+ 4, 4, 22, 29, 22, 241, 10, 9, 3, 3,
3, 4, 4, 4, 10, 31, 33, 29, 64, 33,
- 40, 31, 35, 35, 40, 91, 64, 224, 64, 224,
- 35, 46, 46, 3, 228, 3, 4, 91, 4, 5,
- 5, 227, 46, 46, 46, 5, 223, 49, 49, 222,
-
- 5, 5, 5, 74, 74, 122, 124, 220, 49, 49,
- 49, 94, 94, 122, 124, 122, 124, 46, 219, 46,
- 217, 215, 94, 94, 94, 5, 158, 5, 6, 6,
- 158, 213, 212, 49, 6, 49, 211, 209, 207, 6,
- 6, 6, 206, 205, 203, 97, 97, 94, 202, 94,
- 99, 99, 201, 200, 199, 198, 97, 97, 97, 197,
- 195, 99, 99, 99, 6, 194, 6, 7, 7, 232,
- 7, 232, 193, 232, 192, 191, 188, 187, 7, 7,
- 7, 97, 186, 97, 100, 100, 99, 185, 99, 101,
- 101, 184, 183, 182, 181, 100, 100, 100, 178, 177,
-
- 101, 101, 101, 7, 176, 7, 8, 8, 175, 8,
- 174, 173, 172, 171, 170, 169, 167, 8, 8, 8,
- 100, 166, 100, 165, 162, 101, 161, 101, 159, 157,
- 155, 154, 153, 152, 151, 150, 149, 148, 147, 146,
- 145, 144, 8, 143, 8, 51, 51, 142, 141, 140,
- 139, 51, 138, 136, 135, 134, 51, 51, 51, 133,
- 132, 131, 130, 129, 126, 120, 93, 92, 90, 89,
- 88, 87, 86, 85, 84, 83, 82, 81, 80, 79,
- 78, 51, 77, 51, 55, 55, 76, 75, 73, 72,
- 55, 68, 66, 65, 62, 55, 55, 55, 42, 41,
-
- 39, 38, 37, 36, 34, 32, 30, 28, 27, 25,
- 17, 15, 13, 11, 0, 0, 0, 0, 0, 0,
+ 40, 31, 35, 35, 40, 31, 64, 233, 64, 92,
+ 35, 46, 46, 3, 232, 3, 4, 228, 4, 5,
+ 5, 92, 46, 46, 46, 5, 227, 49, 49, 225,
+
+ 5, 5, 5, 74, 74, 123, 125, 224, 49, 49,
+ 49, 95, 95, 123, 125, 123, 125, 46, 229, 46,
+ 229, 222, 95, 95, 95, 5, 160, 5, 6, 6,
+ 160, 220, 218, 49, 6, 49, 217, 216, 214, 6,
+ 6, 6, 212, 211, 210, 98, 98, 95, 208, 95,
+ 100, 100, 206, 205, 204, 203, 98, 98, 98, 202,
+ 201, 100, 100, 100, 6, 199, 6, 7, 7, 237,
+ 7, 237, 198, 237, 197, 196, 195, 192, 7, 7,
+ 7, 98, 191, 98, 101, 101, 100, 190, 100, 102,
+ 102, 189, 188, 187, 186, 101, 101, 101, 185, 184,
+
+ 102, 102, 102, 7, 181, 7, 8, 8, 180, 8,
+ 179, 178, 177, 176, 175, 174, 173, 8, 8, 8,
+ 101, 172, 101, 170, 169, 102, 168, 102, 165, 164,
+ 163, 161, 159, 157, 156, 155, 154, 153, 152, 151,
+ 150, 149, 8, 148, 8, 51, 51, 147, 146, 145,
+ 144, 51, 143, 142, 141, 140, 51, 51, 51, 138,
+ 137, 136, 135, 134, 133, 132, 131, 130, 127, 121,
+ 94, 93, 91, 90, 89, 88, 87, 86, 85, 84,
+ 83, 51, 82, 51, 55, 55, 81, 80, 79, 78,
+ 55, 77, 76, 75, 73, 55, 55, 55, 72, 68,
+
+ 66, 65, 62, 42, 41, 39, 38, 37, 36, 34,
+ 32, 30, 28, 27, 25, 17, 15, 13, 11, 0,
55, 0, 55, 56, 56, 0, 56, 0, 0, 0,
0, 0, 0, 0, 56, 56, 56, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -657,72 +658,72 @@ static yyconst flex_int16_t yy_chk[1033] =
70, 0, 70, 0, 70, 70, 70, 0, 70, 0,
0, 70, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 70, 102, 102, 0,
- 0, 0, 0, 102, 0, 0, 0, 0, 102, 102,
- 102, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 70, 103, 103, 0,
+ 0, 0, 0, 103, 0, 0, 0, 0, 103, 103,
+ 103, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 102, 0, 102, 106, 106, 0, 0,
- 0, 0, 106, 0, 0, 0, 0, 106, 106, 106,
+ 0, 0, 0, 103, 0, 103, 107, 107, 0, 0,
+ 0, 0, 107, 0, 0, 0, 0, 107, 107, 107,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 106, 0, 106, 107, 107, 0, 0, 0,
- 0, 107, 0, 0, 0, 0, 107, 107, 107, 0,
+ 0, 0, 107, 0, 107, 108, 108, 0, 0, 0,
+ 0, 108, 0, 0, 0, 0, 108, 108, 108, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 107, 0, 107, 108, 108, 0, 0, 0, 0,
- 108, 0, 0, 0, 0, 108, 108, 108, 0, 0,
+ 0, 108, 0, 108, 109, 109, 0, 0, 0, 0,
+ 109, 0, 0, 0, 0, 109, 109, 109, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 108, 0, 108, 109, 109, 0, 0, 0, 0, 109,
- 0, 0, 0, 0, 109, 109, 109, 0, 0, 0,
+ 109, 0, 109, 110, 110, 0, 0, 0, 0, 110,
+ 0, 0, 0, 0, 110, 110, 110, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 109,
- 0, 109, 110, 110, 0, 110, 0, 0, 0, 0,
- 0, 0, 0, 110, 110, 110, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 110,
+ 0, 110, 111, 111, 0, 111, 0, 0, 0, 0,
+ 0, 0, 0, 111, 111, 111, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 110, 0,
- 110, 114, 114, 0, 114, 0, 0, 0, 0, 0,
- 0, 0, 114, 114, 114, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 111, 0,
+ 111, 115, 115, 0, 115, 0, 0, 0, 0, 0,
+ 0, 0, 115, 115, 115, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 114, 0, 114,
- 116, 116, 0, 116, 0, 0, 0, 0, 0, 0,
- 0, 116, 116, 116, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 115, 0, 115,
+ 117, 117, 0, 117, 0, 0, 0, 0, 0, 0,
+ 0, 117, 117, 117, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 116, 0, 116, 117,
- 117, 0, 117, 0, 0, 0, 0, 0, 0, 0,
- 117, 117, 117, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 117, 0, 117, 118,
+ 118, 0, 118, 0, 0, 0, 0, 0, 0, 0,
+ 118, 118, 118, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 117, 0, 117, 118, 118,
+ 0, 0, 0, 0, 0, 118, 0, 118, 119, 119,
- 0, 118, 0, 0, 0, 0, 0, 0, 0, 118,
- 118, 118, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 119, 0, 0, 0, 0, 0, 0, 0, 119,
+ 119, 119, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 118, 0, 118, 119, 119, 0,
- 119, 0, 0, 0, 0, 0, 0, 0, 119, 119,
- 119, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 119, 0, 119, 120, 120, 0,
+ 120, 0, 0, 0, 0, 0, 0, 0, 120, 120,
+ 120, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 119, 0, 119, 128, 128, 0, 128,
- 0, 0, 0, 128, 128, 128, 0, 128, 0, 128,
- 128, 128, 0, 128, 0, 0, 128, 0, 0, 0,
+ 0, 0, 0, 120, 0, 120, 129, 129, 0, 129,
+ 0, 0, 0, 129, 129, 129, 0, 129, 0, 129,
+ 129, 129, 0, 129, 0, 0, 129, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 128, 239, 239, 239, 239, 239, 240, 240, 240,
- 240, 240, 241, 241, 241, 241, 241, 242, 242, 242,
- 242, 242, 243, 243, 243, 244, 244, 244, 244, 244,
- 245, 245, 245, 245, 245, 246, 246, 246, 246, 246,
- 247, 247, 247, 247, 248, 248, 248, 248, 248, 249,
- 0, 249, 249, 249, 250, 0, 250, 250, 250, 251,
- 251, 251, 0, 251, 238, 238, 238, 238, 238, 238,
- 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
-
- 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
- 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
- 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
- 238, 238
+ 0, 129, 244, 244, 244, 244, 244, 245, 245, 245,
+ 245, 245, 246, 246, 246, 246, 246, 247, 247, 247,
+ 247, 247, 248, 248, 248, 249, 249, 249, 249, 249,
+ 250, 250, 250, 250, 250, 251, 251, 251, 251, 251,
+ 252, 252, 252, 252, 253, 253, 253, 253, 253, 254,
+ 0, 254, 254, 254, 255, 0, 255, 255, 255, 256,
+ 256, 256, 0, 256, 243, 243, 243, 243, 243, 243,
+ 243, 243, 243, 243, 243, 243, 243, 243, 243, 243,
+
+ 243, 243, 243, 243, 243, 243, 243, 243, 243, 243,
+ 243, 243, 243, 243, 243, 243, 243, 243, 243, 243,
+ 243, 243, 243, 243, 243, 243, 243, 243, 243, 243,
+ 243, 243
} ;
/* The intent behind this definition is that it'll catch
@@ -891,7 +892,7 @@ static void pbcwhere(const char *text, int *line, int *col )
#define STORE_POS
#define STORE_LOC
#endif
-#line 894 "ael_lex.c"
+#line 895 "ael_lex.c"
#define INITIAL 0
#define paren 1
@@ -1135,7 +1136,7 @@ YY_DECL
#line 181 "ael.flex"
-#line 1138 "ael_lex.c"
+#line 1139 "ael_lex.c"
yylval = yylval_param;
@@ -1198,13 +1199,13 @@ yy_match:
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 239 )
+ if ( yy_current_state >= 244 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
++yy_cp;
}
- while ( yy_current_state != 238 );
+ while ( yy_current_state != 243 );
yy_cp = yyg->yy_last_accepting_cpos;
yy_current_state = yyg->yy_last_accepting_state;
@@ -1302,179 +1303,184 @@ YY_RULE_SETUP
case 16:
YY_RULE_SETUP
#line 198 "ael.flex"
-{ STORE_POS; return KW_MACRO;};
+{ STORE_POS; return KW_EXTEND;}
YY_BREAK
case 17:
YY_RULE_SETUP
#line 199 "ael.flex"
-{ STORE_POS; return KW_GLOBALS;}
+{ STORE_POS; return KW_MACRO;};
YY_BREAK
case 18:
YY_RULE_SETUP
#line 200 "ael.flex"
-{ STORE_POS; return KW_LOCAL;}
+{ STORE_POS; return KW_GLOBALS;}
YY_BREAK
case 19:
YY_RULE_SETUP
#line 201 "ael.flex"
-{ STORE_POS; return KW_IGNOREPAT;}
+{ STORE_POS; return KW_LOCAL;}
YY_BREAK
case 20:
YY_RULE_SETUP
#line 202 "ael.flex"
-{ STORE_POS; return KW_SWITCH;}
+{ STORE_POS; return KW_IGNOREPAT;}
YY_BREAK
case 21:
YY_RULE_SETUP
#line 203 "ael.flex"
-{ STORE_POS; return KW_IF;}
+{ STORE_POS; return KW_SWITCH;}
YY_BREAK
case 22:
YY_RULE_SETUP
#line 204 "ael.flex"
-{ STORE_POS; return KW_IFTIME;}
+{ STORE_POS; return KW_IF;}
YY_BREAK
case 23:
YY_RULE_SETUP
#line 205 "ael.flex"
-{ STORE_POS; return KW_RANDOM;}
+{ STORE_POS; return KW_IFTIME;}
YY_BREAK
case 24:
YY_RULE_SETUP
#line 206 "ael.flex"
-{ STORE_POS; return KW_REGEXTEN;}
+{ STORE_POS; return KW_RANDOM;}
YY_BREAK
case 25:
YY_RULE_SETUP
#line 207 "ael.flex"
-{ STORE_POS; return KW_HINT;}
+{ STORE_POS; return KW_REGEXTEN;}
YY_BREAK
case 26:
YY_RULE_SETUP
#line 208 "ael.flex"
-{ STORE_POS; return KW_ELSE;}
+{ STORE_POS; return KW_HINT;}
YY_BREAK
case 27:
YY_RULE_SETUP
#line 209 "ael.flex"
-{ STORE_POS; return KW_GOTO;}
+{ STORE_POS; return KW_ELSE;}
YY_BREAK
case 28:
YY_RULE_SETUP
#line 210 "ael.flex"
-{ STORE_POS; return KW_JUMP;}
+{ STORE_POS; return KW_GOTO;}
YY_BREAK
case 29:
YY_RULE_SETUP
#line 211 "ael.flex"
-{ STORE_POS; return KW_RETURN;}
+{ STORE_POS; return KW_JUMP;}
YY_BREAK
case 30:
YY_RULE_SETUP
#line 212 "ael.flex"
-{ STORE_POS; return KW_BREAK;}
+{ STORE_POS; return KW_RETURN;}
YY_BREAK
case 31:
YY_RULE_SETUP
#line 213 "ael.flex"
-{ STORE_POS; return KW_CONTINUE;}
+{ STORE_POS; return KW_BREAK;}
YY_BREAK
case 32:
YY_RULE_SETUP
#line 214 "ael.flex"
-{ STORE_POS; return KW_FOR;}
+{ STORE_POS; return KW_CONTINUE;}
YY_BREAK
case 33:
YY_RULE_SETUP
#line 215 "ael.flex"
-{ STORE_POS; return KW_WHILE;}
+{ STORE_POS; return KW_FOR;}
YY_BREAK
case 34:
YY_RULE_SETUP
#line 216 "ael.flex"
-{ STORE_POS; return KW_CASE;}
+{ STORE_POS; return KW_WHILE;}
YY_BREAK
case 35:
YY_RULE_SETUP
#line 217 "ael.flex"
-{ STORE_POS; return KW_DEFAULT;}
+{ STORE_POS; return KW_CASE;}
YY_BREAK
case 36:
YY_RULE_SETUP
#line 218 "ael.flex"
-{ STORE_POS; return KW_PATTERN;}
+{ STORE_POS; return KW_DEFAULT;}
YY_BREAK
case 37:
YY_RULE_SETUP
#line 219 "ael.flex"
-{ STORE_POS; return KW_CATCH;}
+{ STORE_POS; return KW_PATTERN;}
YY_BREAK
case 38:
YY_RULE_SETUP
#line 220 "ael.flex"
-{ STORE_POS; return KW_SWITCHES;}
+{ STORE_POS; return KW_CATCH;}
YY_BREAK
case 39:
YY_RULE_SETUP
#line 221 "ael.flex"
-{ STORE_POS; return KW_ESWITCHES;}
+{ STORE_POS; return KW_SWITCHES;}
YY_BREAK
case 40:
YY_RULE_SETUP
#line 222 "ael.flex"
-{ STORE_POS; return KW_INCLUDES;}
+{ STORE_POS; return KW_ESWITCHES;}
YY_BREAK
case 41:
YY_RULE_SETUP
#line 223 "ael.flex"
-{ BEGIN(comment); my_col += 2; }
+{ STORE_POS; return KW_INCLUDES;}
YY_BREAK
case 42:
YY_RULE_SETUP
-#line 225 "ael.flex"
-{ my_col += yyleng; }
+#line 224 "ael.flex"
+{ BEGIN(comment); my_col += 2; }
YY_BREAK
case 43:
-/* rule 43 can match eol */
YY_RULE_SETUP
#line 226 "ael.flex"
-{ ++my_lineno; my_col=1;}
+{ my_col += yyleng; }
YY_BREAK
case 44:
+/* rule 44 can match eol */
YY_RULE_SETUP
#line 227 "ael.flex"
-{ my_col += yyleng; }
+{ ++my_lineno; my_col=1;}
YY_BREAK
case 45:
-/* rule 45 can match eol */
YY_RULE_SETUP
#line 228 "ael.flex"
-{ ++my_lineno; my_col=1;}
+{ my_col += yyleng; }
YY_BREAK
case 46:
+/* rule 46 can match eol */
YY_RULE_SETUP
#line 229 "ael.flex"
-{ my_col += 2; BEGIN(INITIAL); }
+{ ++my_lineno; my_col=1;}
YY_BREAK
case 47:
-/* rule 47 can match eol */
YY_RULE_SETUP
-#line 231 "ael.flex"
-{ my_lineno++; my_col = 1; }
+#line 230 "ael.flex"
+{ my_col += 2; BEGIN(INITIAL); }
YY_BREAK
case 48:
+/* rule 48 can match eol */
YY_RULE_SETUP
#line 232 "ael.flex"
-{ my_col += yyleng; }
+{ my_lineno++; my_col = 1; }
YY_BREAK
case 49:
YY_RULE_SETUP
#line 233 "ael.flex"
-{ my_col += (yyleng*8)-(my_col%8); }
+{ my_col += yyleng; }
YY_BREAK
case 50:
YY_RULE_SETUP
-#line 235 "ael.flex"
+#line 234 "ael.flex"
+{ my_col += (yyleng*8)-(my_col%8); }
+ YY_BREAK
+case 51:
+YY_RULE_SETUP
+#line 236 "ael.flex"
{
STORE_POS;
yylval->str = strdup(yytext);
@@ -1489,10 +1495,10 @@ YY_RULE_SETUP
* A comma at the top level is valid here, unlike in argg where it
* is an argument separator so it must be returned as a token.
*/
-case 51:
-/* rule 51 can match eol */
+case 52:
+/* rule 52 can match eol */
YY_RULE_SETUP
-#line 251 "ael.flex"
+#line 252 "ael.flex"
{
if ( pbcpop(')') ) { /* error */
STORE_LOC;
@@ -1515,10 +1521,10 @@ YY_RULE_SETUP
}
}
YY_BREAK
-case 52:
-/* rule 52 can match eol */
+case 53:
+/* rule 53 can match eol */
YY_RULE_SETUP
-#line 273 "ael.flex"
+#line 274 "ael.flex"
{
char c = yytext[yyleng-1];
if (c == '(')
@@ -1527,10 +1533,10 @@ YY_RULE_SETUP
yymore();
}
YY_BREAK
-case 53:
-/* rule 53 can match eol */
+case 54:
+/* rule 54 can match eol */
YY_RULE_SETUP
-#line 281 "ael.flex"
+#line 282 "ael.flex"
{
char c = yytext[yyleng-1];
if ( pbcpop(c)) { /* error */
@@ -1552,10 +1558,10 @@ YY_RULE_SETUP
* of the (external) call, which happens when parencount == 0
* before the decrement.
*/
-case 54:
-/* rule 54 can match eol */
+case 55:
+/* rule 55 can match eol */
YY_RULE_SETUP
-#line 303 "ael.flex"
+#line 304 "ael.flex"
{
char c = yytext[yyleng-1];
if (c == '(')
@@ -1564,10 +1570,10 @@ YY_RULE_SETUP
yymore();
}
YY_BREAK
-case 55:
-/* rule 55 can match eol */
+case 56:
+/* rule 56 can match eol */
YY_RULE_SETUP
-#line 311 "ael.flex"
+#line 312 "ael.flex"
{
if ( pbcpop(')') ) { /* error */
STORE_LOC;
@@ -1592,10 +1598,10 @@ YY_RULE_SETUP
}
}
YY_BREAK
-case 56:
-/* rule 56 can match eol */
+case 57:
+/* rule 57 can match eol */
YY_RULE_SETUP
-#line 335 "ael.flex"
+#line 336 "ael.flex"
{
if( parencount != 0) { /* printf("Folding in a comma!\n"); */
yymore();
@@ -1610,10 +1616,10 @@ YY_RULE_SETUP
}
}
YY_BREAK
-case 57:
-/* rule 57 can match eol */
+case 58:
+/* rule 58 can match eol */
YY_RULE_SETUP
-#line 349 "ael.flex"
+#line 350 "ael.flex"
{
char c = yytext[yyleng-1];
if ( pbcpop(c) ) { /* error */
@@ -1631,20 +1637,20 @@ YY_RULE_SETUP
* or in the first and second operand of a 'for'. As above, match
* commas and use ';' as a separator (hence return it as a separate token).
*/
-case 58:
-/* rule 58 can match eol */
+case 59:
+/* rule 59 can match eol */
YY_RULE_SETUP
-#line 366 "ael.flex"
+#line 367 "ael.flex"
{
char c = yytext[yyleng-1];
yymore();
pbcpush(c);
}
YY_BREAK
-case 59:
-/* rule 59 can match eol */
+case 60:
+/* rule 60 can match eol */
YY_RULE_SETUP
-#line 372 "ael.flex"
+#line 373 "ael.flex"
{
char c = yytext[yyleng-1];
if ( pbcpop(c) ) { /* error */
@@ -1657,10 +1663,10 @@ YY_RULE_SETUP
yymore();
}
YY_BREAK
-case 60:
-/* rule 60 can match eol */
+case 61:
+/* rule 61 can match eol */
YY_RULE_SETUP
-#line 384 "ael.flex"
+#line 385 "ael.flex"
{
STORE_LOC;
yylval->str = strdup(yytext);
@@ -1670,10 +1676,10 @@ YY_RULE_SETUP
return word;
}
YY_BREAK
-case 61:
-/* rule 61 can match eol */
+case 62:
+/* rule 62 can match eol */
YY_RULE_SETUP
-#line 393 "ael.flex"
+#line 394 "ael.flex"
{
char fnamebuf[1024],*p1,*p2;
int glob_ret;
@@ -1723,7 +1729,7 @@ case YY_STATE_EOF(paren):
case YY_STATE_EOF(semic):
case YY_STATE_EOF(argg):
case YY_STATE_EOF(comment):
-#line 438 "ael.flex"
+#line 439 "ael.flex"
{
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) {
@@ -1758,12 +1764,12 @@ case YY_STATE_EOF(comment):
}
}
YY_BREAK
-case 62:
+case 63:
YY_RULE_SETUP
-#line 472 "ael.flex"
+#line 473 "ael.flex"
ECHO;
YY_BREAK
-#line 1766 "ael_lex.c"
+#line 1772 "ael_lex.c"
case YY_END_OF_BUFFER:
{
@@ -2048,7 +2054,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 239 )
+ if ( yy_current_state >= 244 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -2077,11 +2083,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 239 )
+ if ( yy_current_state >= 244 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
- yy_is_jam = (yy_current_state == 238);
+ yy_is_jam = (yy_current_state == 243);
return yy_is_jam ? 0 : yy_current_state;
}
@@ -2899,7 +2905,7 @@ void ael_yyfree (void * ptr , yyscan_t yyscanner)
#undef YY_DECL_IS_OURS
#undef YY_DECL
#endif
-#line 472 "ael.flex"
+#line 473 "ael.flex"
diff --git a/res/ael/pval.c b/res/ael/pval.c
index b53f9fef9..184560f75 100644
--- a/res/ael/pval.c
+++ b/res/ael/pval.c
@@ -2293,9 +2293,9 @@ static void check_context_names(void)
if (i->type == PV_CONTEXT || i->type == PV_MACRO) {
for (j=i->next; j; j=j->next) {
if ( j->type == PV_CONTEXT || j->type == PV_MACRO ) {
- if ( !strcmp(i->u1.str, j->u1.str) )
+ if ( !strcmp(i->u1.str, j->u1.str) && !(i->u3.abstract&2) && !(j->u3.abstract&2) )
{
- ast_log(LOG_WARNING,"Warning: file %s, line %d-%d: The context name (%s) is also declared in file %s, line %d-%d!\n",
+ ast_log(LOG_WARNING,"Warning: file %s, line %d-%d: The context name (%s) is also declared in file %s, line %d-%d! (and neither is marked 'extend')\n",
i->filename, i->startline, i->endline, i->u1.str, j->filename, j->startline, j->endline);
warns++;
}
@@ -4031,7 +4031,7 @@ void ast_compile_ael2(struct ast_context **local_contexts, struct pval *root)
break;
case PV_CONTEXT:
- context = ast_context_create(local_contexts, p->u1.str, registrar);
+ context = ast_context_find_or_create(local_contexts, p->u1.str, registrar);
/* contexts contain: ignorepat, includes, switches, eswitches, extensions, */
for (p2=p->u2.statements; p2; p2=p2->next) {
diff --git a/utils/ael_main.c b/utils/ael_main.c
index 58939f9a0..8955aa045 100644
--- a/utils/ael_main.c
+++ b/utils/ael_main.c
@@ -91,6 +91,7 @@ int ast_add_extension2(struct ast_context *con,
const char *registrar);
void pbx_builtin_setvar(void *chan, void *data);
struct ast_context * ast_context_create(void **extcontexts, const char *name, const char *registrar);
+struct ast_context * ast_context_find_or_create(void **extcontexts, const char *name, const char *registrar);
void ast_context_add_ignorepat2(struct ast_context *con, const char *value, const char *registrar);
void ast_context_add_include2(struct ast_context *con, const char *value, const char *registrar);
void ast_context_add_switch2(struct ast_context *con, const char *value, const char *data, int eval, const char *registrar);
@@ -359,6 +360,21 @@ struct ast_context * ast_context_create(void **extcontexts, const char *name, co
return x;
}
+struct ast_context * ast_context_find_or_create(void **extcontexts, const char *name, const char *registrar)
+{
+ struct ast_context *x = calloc(1, sizeof(*x));
+ if (!x)
+ return NULL;
+ x->next = context_list;
+ context_list = x;
+ if (!no_comp)
+ printf("Executed ast_context_find_or_create(conts, name=%s, registrar=%s);\n", name, registrar);
+ conts++;
+ strncpy(x->name, name, sizeof(x->name) - 1);
+ strncpy(x->registrar, registrar, sizeof(x->registrar) - 1);
+ return x;
+}
+
void ast_context_add_ignorepat2(struct ast_context *con, const char *value, const char *registrar)
{
if(!no_comp)
diff --git a/utils/conf2ael.c b/utils/conf2ael.c
index 312ed700f..02e78297e 100644
--- a/utils/conf2ael.c
+++ b/utils/conf2ael.c
@@ -630,6 +630,13 @@ struct ast_context *ast_context_create(struct ast_context **extcontexts, const c
return localized_context_create(extcontexts, name, registrar);
}
+struct ast_context *ast_context_find_or_create(struct ast_context **extcontexts, const char *name, const char *registrar)
+{
+ printf("find/Creating context %s, registrar=%s\n", name, registrar);
+
+ return localized_context_create(extcontexts, name, registrar);
+}
+
void ast_cli_register_multiple(void);
void ast_cli_register_multiple(void)