diff options
-rw-r--r-- | include/asterisk/pval.h | 3 | ||||
-rw-r--r-- | pbx/ael/ael-test/ref.ael-test16 | 19 | ||||
-rw-r--r-- | pbx/ael/ael-test/ref.ael-test19 | 4 | ||||
-rw-r--r-- | pbx/pbx_ael.c | 794 | ||||
-rw-r--r-- | res/ael/ael.flex | 1 | ||||
-rw-r--r-- | res/ael/ael.tab.c | 1378 | ||||
-rw-r--r-- | res/ael/ael.tab.h | 80 | ||||
-rw-r--r-- | res/ael/ael.y | 21 | ||||
-rw-r--r-- | res/ael/ael_lex.c | 698 | ||||
-rw-r--r-- | res/ael/pval.c | 6 | ||||
-rw-r--r-- | utils/ael_main.c | 16 | ||||
-rw-r--r-- | utils/conf2ael.c | 7 |
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) |