]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
closes issue #11086 where a user complains that references to following contexts...
authorSteve Murphy <murf@digium.com>
Fri, 26 Oct 2007 16:34:02 +0000 (16:34 +0000)
committerSteve Murphy <murf@digium.com>
Fri, 26 Oct 2007 16:34:02 +0000 (16:34 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@87168 65c4cc65-6c06-0410-ace0-fbb531ad65f3

include/asterisk/ael_structs.h
pbx/ael/ael-test/ref.ael-test16
pbx/ael/ael-test/ref.ael-test19
pbx/ael/ael.flex
pbx/ael/ael.tab.c
pbx/ael/ael.tab.h
pbx/ael/ael.y
pbx/ael/ael_lex.c
pbx/pbx_ael.c
utils/ael_main.c

index 9b5581d6c5631a2802433cec5d131bd7c84d80f7..8b428d33f747e61b1996484f5962a563025efdf6 100644 (file)
@@ -97,10 +97,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
index 323a726c4ebf4ea247ccfdb55e2652cea41066db..3113b0d6c484bbb02e7288a17c55a5df5cf5b1b2 100644 (file)
@@ -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:3914 func: pbx_load_module  Starting AEL load process.
-LOG: lev:2 file:pbx_ael.c  line:3921 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:3929 func: pbx_load_module  AEL load process: parsed config file name './extensions.ael'.
-LOG: lev:2 file:pbx_ael.c  line:3932 func: pbx_load_module  AEL load process: checked config file name './extensions.ael'.
-LOG: lev:3 file:pbx_ael.c  line:3545 func: add_extensions  This file is Empty!
-LOG: lev:2 file:pbx_ael.c  line:3934 func: pbx_load_module  AEL load process: compiled config file name './extensions.ael'.
-LOG: lev:2 file:pbx_ael.c  line:3937 func: pbx_load_module  AEL load process: merged config file name './extensions.ael'.
-LOG: lev:2 file:pbx_ael.c  line:3940 func: pbx_load_module  AEL load process: verified config file name './extensions.ael'.
-LOG: lev:4 file:ael2_parse  line:479 func: main  0 contexts, 0 extensions, 0 priorities
+LOG: lev:2 file:pbx_ael.c  line:4090 func: pbx_load_module  Starting AEL load process.
+LOG: lev:2 file:pbx_ael.c  line:4097 func: pbx_load_module  AEL load process: calculated config file name './extensions.ael'.
+LOG: lev:2 file:pbx_ael.c  line:4105 func: pbx_load_module  AEL load process: parsed config file name './extensions.ael'.
+LOG: lev:2 file:pbx_ael.c  line:4108 func: pbx_load_module  AEL load process: checked config file name './extensions.ael'.
+LOG: lev:3 file:pbx_ael.c  line:3685 func: add_extensions  This file is Empty!
+LOG: lev:2 file:pbx_ael.c  line:4110 func: pbx_load_module  AEL load process: compiled config file name './extensions.ael'.
+LOG: lev:2 file:pbx_ael.c  line:4113 func: pbx_load_module  AEL load process: merged config file name './extensions.ael'.
+LOG: lev:2 file:pbx_ael.c  line:4116 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
index f193751aad7a9cb7f5ce71766536a234171a7f79..c67dbe7c145748df74392898e15242279438b4a5 100644 (file)
@@ -2,13 +2,13 @@
 (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:3978 func: pbx_load_module  Starting AEL load process.
-LOG: lev:2 file:pbx_ael.c  line:3985 func: pbx_load_module  AEL load process: calculated config file name './extensions.ael'.
-LOG: lev:2 file:pbx_ael.c  line:3993 func: pbx_load_module  AEL load process: parsed config file name './extensions.ael'.
-LOG: lev:4 file:pbx_ael.c  line:2250 func: check_context_names  Error: file ./extensions.ael, line 49-62: The context name (incoming) is also declared in file ./extensions.ael, line 62-69!
+LOG: lev:2 file:pbx_ael.c  line:4090 func: pbx_load_module  Starting AEL load process.
+LOG: lev:2 file:pbx_ael.c  line:4097 func: pbx_load_module  AEL load process: calculated config file name './extensions.ael'.
+LOG: lev:2 file:pbx_ael.c  line:4105 func: pbx_load_module  AEL load process: parsed config file name './extensions.ael'.
+LOG: lev:4 file:pbx_ael.c  line:2250 func: check_context_names  Error: 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:pbx_ael.c  line:2234 func: check_switch_expr  Warning: file ./extensions.ael, line 245-246: A default case was automatically added to the switch.
 LOG: lev:3 file:pbx_ael.c  line:2347 func: check_pval_item  Warning: file ./extensions.ael, line 312-312: macro call to non-existent funcA ! Hopefully it is present in extensions.conf! 
 LOG: lev:3 file:pbx_ael.c  line:2347 func: check_pval_item  Warning: file ./extensions.ael, line 313-313: macro call to non-existent funcD ! Hopefully it is present in extensions.conf! 
 LOG: lev:3 file:pbx_ael.c  line:1287 func: check_goto  Warning: file ./extensions.ael, line 319-319: goto:  no context test5 could be found that matches the goto target!
-LOG: lev:4 file:pbx_ael.c  line:4006 func: pbx_load_module  Sorry, but 0 syntax errors and 1 semantic errors were detected. It doesn't make sense to compile.
-LOG: lev:4 file:ael2_parse  line:523 func: main  0 contexts, 0 extensions, 0 priorities
+LOG: lev:4 file:pbx_ael.c  line:4118 func: pbx_load_module  Sorry, but 0 syntax errors and 1 semantic errors were detected. It doesn't make sense to compile.
+LOG: lev:4 file:ael2_parse  line:543 func: main  0 contexts, 0 extensions, 0 priorities
index 80dbb53a29f4e699ed560006535bd6901b9cd1b4..5d2649689e92db6c7fe8c2fa2ac891757891d43b 100644 (file)
@@ -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;}
 ignorepat      { STORE_POS; return KW_IGNOREPAT;}
index 6b94b6ec1a5a01fce09ef4ac07989d3f59d88d87..78986ec09cc7f360defb6b7fc56139a5ef850fb0 100644 (file)
      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,
-     word = 296
+     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,
+     word = 297
    };
 #endif
 /* Tokens.  */
 #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 word 296
+#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 word 297
 
 
 
@@ -230,7 +232,7 @@ typedef union YYSTYPE
        struct pval *pval;      /* full objects */
 }
 /* Line 198 of yacc.c.  */
-#line 234 "ael.tab.c"
+#line 236 "ael.tab.c"
        YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
@@ -275,7 +277,7 @@ static pval *update_last(pval *, YYLTYPE *);
 
 
 /* Line 221 of yacc.c.  */
-#line 279 "ael.tab.c"
+#line 281 "ael.tab.c"
 
 #ifdef short
 # undef short
@@ -488,22 +490,22 @@ union yyalloc
 #endif
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  14
+#define YYFINAL  17
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   314
+#define YYLAST   311
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  42
+#define YYNTOKENS  43
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  54
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  134
+#define YYNRULES  137
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  273
+#define YYNSTATES  276
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   296
+#define YYMAXUTOK   297
 
 #define YYTRANSLATE(YYX)                                               \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -540,7 +542,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
+      35,    36,    37,    38,    39,    40,    41,    42
 };
 
 #if YYDEBUG
@@ -549,88 +551,89 @@ 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,    66,    70,    73,    74,    77,    80,
-      82,    84,    86,    88,    90,    92,    95,    97,   102,   106,
-     111,   119,   128,   129,   132,   135,   141,   143,   151,   152,
-     157,   160,   163,   168,   170,   173,   175,   178,   182,   186,
-     188,   191,   195,   197,   200,   204,   210,   214,   216,   220,
-     224,   227,   228,   229,   230,   243,   247,   249,   253,   256,
-     259,   260,   266,   269,   272,   275,   279,   281,   284,   285,
-     287,   291,   295,   301,   307,   313,   319,   320,   323,   326,
-     331,   332,   338,   342,   343,   347,   351,   354,   356,   357,
-     359,   360,   364,   365,   368,   373,   377,   382,   383,   386,
-     388,   390,   396,   401,   406,   407,   411,   417,   420,   422,
-     426,   429,   433,   436,   441
+      21,    23,    25,    32,    34,    35,    37,    40,    43,    52,
+      57,    58,    61,    64,    65,    71,    72,    74,    78,    81,
+      82,    85,    88,    90,    92,    94,    96,    98,   100,   103,
+     105,   110,   114,   119,   127,   136,   137,   140,   143,   149,
+     151,   159,   160,   165,   168,   171,   176,   178,   181,   183,
+     186,   190,   194,   196,   199,   203,   205,   208,   212,   218,
+     222,   224,   228,   232,   235,   236,   237,   238,   251,   255,
+     257,   261,   264,   267,   268,   274,   277,   280,   283,   287,
+     289,   292,   293,   295,   299,   303,   309,   315,   321,   327,
+     328,   331,   334,   339,   340,   346,   350,   351,   355,   359,
+     362,   364,   365,   367,   368,   372,   373,   376,   381,   385,
+     390,   391,   394,   396,   398,   404,   409,   414,   415,   419,
+     425,   428,   430,   434,   437,   441,   444,   449
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int8 yyrhs[] =
 {
-      43,     0,    -1,    44,    -1,    45,    -1,    44,    45,    -1,
-      44,     1,    -1,    47,    -1,    49,    -1,    50,    -1,     8,
-      -1,    41,    -1,    36,    -1,    48,     3,    46,     4,    55,
-       5,    -1,    23,    -1,    -1,    15,    41,     6,    54,     7,
-       4,    88,     5,    -1,    16,     4,    51,     5,    -1,    -1,
-      52,    51,    -1,     1,    51,    -1,    -1,    41,     9,    53,
-      41,     8,    -1,    -1,    41,    -1,    54,    10,    41,    -1,
-      54,     1,    -1,    -1,    56,    55,    -1,     1,    55,    -1,
-      58,    -1,    95,    -1,    90,    -1,    91,    -1,    57,    -1,
-      52,    -1,    41,     1,    -1,     8,    -1,    17,    24,    41,
-       8,    -1,    41,    24,    70,    -1,    30,    41,    24,    70,
-      -1,    31,     6,    66,     7,    41,    24,    70,    -1,    30,
-      31,     6,    66,     7,    41,    24,    70,    -1,    -1,    70,
-      59,    -1,     1,    59,    -1,    67,    11,    67,    11,    67,
-      -1,    41,    -1,    60,    13,    67,    13,    67,    13,    67,
-      -1,    -1,     6,    63,    65,     7,    -1,    19,    62,    -1,
-      22,    62,    -1,    20,     6,    61,     7,    -1,    41,    -1,
-      41,    41,    -1,    41,    -1,    66,    41,    -1,    66,    11,
-      41,    -1,    66,    12,    41,    -1,    41,    -1,    41,    41,
-      -1,    41,    41,    41,    -1,    41,    -1,    41,    41,    -1,
-      68,    11,    41,    -1,    18,    62,     4,    86,     5,    -1,
-       4,    59,     5,    -1,    52,    -1,    25,    76,     8,    -1,
-      26,    78,     8,    -1,    41,    11,    -1,    -1,    -1,    -1,
-      32,     6,    71,    41,     8,    72,    41,     8,    73,    41,
-       7,    70,    -1,    33,    62,    70,    -1,    69,    -1,    12,
-      79,     8,    -1,    83,     8,    -1,    41,     8,    -1,    -1,
-      83,     9,    74,    41,     8,    -1,    28,     8,    -1,    27,
-       8,    -1,    29,     8,    -1,    64,    70,    75,    -1,     8,
-      -1,    21,    70,    -1,    -1,    68,    -1,    68,    13,    68,
-      -1,    68,    10,    68,    -1,    68,    13,    68,    13,    68,
-      -1,    68,    10,    68,    10,    68,    -1,    36,    13,    68,
-      13,    68,    -1,    36,    10,    68,    10,    68,    -1,    -1,
-      10,    41,    -1,    68,    77,    -1,    68,    77,    14,    46,
-      -1,    -1,    41,     6,    80,    85,     7,    -1,    41,     6,
-       7,    -1,    -1,    41,     6,    82,    -1,    81,    85,     7,
-      -1,    81,     7,    -1,    41,    -1,    -1,    65,    -1,    -1,
-      85,    10,    84,    -1,    -1,    87,    86,    -1,    34,    41,
-      11,    59,    -1,    36,    11,    59,    -1,    35,    41,    11,
-      59,    -1,    -1,    89,    88,    -1,    70,    -1,    95,    -1,
-      37,    41,     4,    59,     5,    -1,    38,     4,    92,     5,
-      -1,    39,     4,    92,     5,    -1,    -1,    41,     8,    92,
-      -1,    41,    14,    41,     8,    92,    -1,     1,    92,    -1,
-      46,    -1,    46,    13,    61,    -1,    93,     8,    -1,    94,
-      93,     8,    -1,    94,     1,    -1,    40,     4,    94,     5,
-      -1,    40,     4,     5,    -1
+      44,     0,    -1,    45,    -1,    46,    -1,    45,    46,    -1,
+      45,     1,    -1,    48,    -1,    50,    -1,    51,    -1,     8,
+      -1,    42,    -1,    37,    -1,    49,     3,    47,     4,    56,
+       5,    -1,    23,    -1,    -1,    24,    -1,    24,    23,    -1,
+      23,    24,    -1,    15,    42,     6,    55,     7,     4,    89,
+       5,    -1,    16,     4,    52,     5,    -1,    -1,    53,    52,
+      -1,     1,    52,    -1,    -1,    42,     9,    54,    42,     8,
+      -1,    -1,    42,    -1,    55,    10,    42,    -1,    55,     1,
+      -1,    -1,    57,    56,    -1,     1,    56,    -1,    59,    -1,
+      96,    -1,    91,    -1,    92,    -1,    58,    -1,    53,    -1,
+      42,     1,    -1,     8,    -1,    17,    25,    42,     8,    -1,
+      42,    25,    71,    -1,    31,    42,    25,    71,    -1,    32,
+       6,    67,     7,    42,    25,    71,    -1,    31,    32,     6,
+      67,     7,    42,    25,    71,    -1,    -1,    71,    60,    -1,
+       1,    60,    -1,    68,    11,    68,    11,    68,    -1,    42,
+      -1,    61,    13,    68,    13,    68,    13,    68,    -1,    -1,
+       6,    64,    66,     7,    -1,    19,    63,    -1,    22,    63,
+      -1,    20,     6,    62,     7,    -1,    42,    -1,    42,    42,
+      -1,    42,    -1,    67,    42,    -1,    67,    11,    42,    -1,
+      67,    12,    42,    -1,    42,    -1,    42,    42,    -1,    42,
+      42,    42,    -1,    42,    -1,    42,    42,    -1,    69,    11,
+      42,    -1,    18,    63,     4,    87,     5,    -1,     4,    60,
+       5,    -1,    53,    -1,    26,    77,     8,    -1,    27,    79,
+       8,    -1,    42,    11,    -1,    -1,    -1,    -1,    33,     6,
+      72,    42,     8,    73,    42,     8,    74,    42,     7,    71,
+      -1,    34,    63,    71,    -1,    70,    -1,    12,    80,     8,
+      -1,    84,     8,    -1,    42,     8,    -1,    -1,    84,     9,
+      75,    42,     8,    -1,    29,     8,    -1,    28,     8,    -1,
+      30,     8,    -1,    65,    71,    76,    -1,     8,    -1,    21,
+      71,    -1,    -1,    69,    -1,    69,    13,    69,    -1,    69,
+      10,    69,    -1,    69,    13,    69,    13,    69,    -1,    69,
+      10,    69,    10,    69,    -1,    37,    13,    69,    13,    69,
+      -1,    37,    10,    69,    10,    69,    -1,    -1,    10,    42,
+      -1,    69,    78,    -1,    69,    78,    14,    47,    -1,    -1,
+      42,     6,    81,    86,     7,    -1,    42,     6,     7,    -1,
+      -1,    42,     6,    83,    -1,    82,    86,     7,    -1,    82,
+       7,    -1,    42,    -1,    -1,    66,    -1,    -1,    86,    10,
+      85,    -1,    -1,    88,    87,    -1,    35,    42,    11,    60,
+      -1,    37,    11,    60,    -1,    36,    42,    11,    60,    -1,
+      -1,    90,    89,    -1,    71,    -1,    96,    -1,    38,    42,
+       4,    60,     5,    -1,    39,     4,    93,     5,    -1,    40,
+       4,    93,     5,    -1,    -1,    42,     8,    93,    -1,    42,
+      14,    42,     8,    93,    -1,     1,    93,    -1,    47,    -1,
+      47,    13,    62,    -1,    94,     8,    -1,    95,    94,     8,
+      -1,    95,     1,    -1,    41,     4,    95,     5,    -1,    41,
+       4,     5,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
        0,   185,   185,   188,   189,   190,   193,   194,   195,   196,
-     199,   200,   203,   218,   219,   222,   228,   234,   235,   236,
-     239,   239,   246,   247,   248,   249,   252,   253,   254,   257,
-     258,   259,   260,   261,   262,   263,   264,   267,   272,   276,
-     281,   286,   296,   297,   298,   304,   309,   313,   321,   321,
-     325,   328,   331,   342,   343,   350,   351,   355,   359,   365,
-     366,   371,   379,   380,   384,   390,   399,   402,   403,   406,
-     409,   412,   413,   414,   412,   420,   424,   425,   426,   427,
-     430,   430,   463,   464,   465,   466,   470,   473,   474,   477,
-     478,   481,   484,   488,   492,   496,   502,   503,   507,   510,
-     516,   516,   521,   529,   529,   540,   547,   550,   551,   554,
-     555,   558,   561,   562,   565,   569,   573,   579,   580,   583,
-     584,   585,   591,   596,   601,   602,   603,   605,   608,   609,
-     616,   617,   618,   621,   624
+     199,   200,   203,   212,   213,   214,   215,   216,   219,   225,
+     231,   232,   233,   236,   236,   243,   244,   245,   246,   249,
+     250,   251,   254,   255,   256,   257,   258,   259,   260,   261,
+     264,   269,   273,   278,   283,   293,   294,   295,   301,   306,
+     310,   318,   318,   322,   325,   328,   339,   340,   347,   348,
+     352,   356,   362,   363,   368,   376,   377,   381,   387,   396,
+     399,   400,   403,   406,   409,   410,   411,   409,   417,   421,
+     422,   423,   424,   427,   427,   460,   461,   462,   463,   467,
+     470,   471,   474,   475,   478,   481,   485,   489,   493,   499,
+     500,   504,   507,   513,   513,   518,   526,   526,   537,   544,
+     547,   548,   551,   552,   555,   558,   559,   562,   566,   570,
+     576,   577,   580,   581,   582,   588,   593,   598,   599,   600,
+     602,   605,   606,   613,   614,   615,   618,   621
 };
 #endif
 
@@ -642,20 +645,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", "word", "$accept", "file",
-  "objects", "object", "context_name", "context", "opt_abstract", "macro",
-  "globals", "global_statements", "assignment", "@1", "arglist",
-  "elements", "element", "ignorepat", "extension", "statements",
-  "timerange", "timespec", "test_expr", "@2", "if_like_head", "word_list",
-  "hint_word", "word3_list", "goto_word", "switch_statement", "statement",
-  "@3", "@4", "@5", "@6", "opt_else", "target", "opt_pri", "jumptarget",
-  "macro_call", "@7", "application_call_head", "@8", "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",
+  "word", "$accept", "file", "objects", "object", "context_name",
+  "context", "opt_abstract", "macro", "globals", "global_statements",
+  "assignment", "@1", "arglist", "elements", "element", "ignorepat",
+  "extension", "statements", "timerange", "timespec", "test_expr", "@2",
+  "if_like_head", "word_list", "hint_word", "word3_list", "goto_word",
+  "switch_statement", "statement", "@3", "@4", "@5", "@6", "opt_else",
+  "target", "opt_pri", "jumptarget", "macro_call", "@7",
+  "application_call_head", "@8", "application_call", "opt_word",
+  "eval_arglist", "case_statements", "case_statement", "macro_statements",
+  "macro_statement", "switches", "eswitches", "switchlist",
+  "included_entry", "includeslist", "includes", 0
 };
 #endif
 
@@ -668,46 +672,46 @@ 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
+     295,   296,   297
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,    42,    43,    44,    44,    44,    45,    45,    45,    45,
-      46,    46,    47,    48,    48,    49,    50,    51,    51,    51,
-      53,    52,    54,    54,    54,    54,    55,    55,    55,    56,
-      56,    56,    56,    56,    56,    56,    56,    57,    58,    58,
-      58,    58,    59,    59,    59,    60,    60,    61,    63,    62,
-      64,    64,    64,    65,    65,    66,    66,    66,    66,    67,
-      67,    67,    68,    68,    68,    69,    70,    70,    70,    70,
-      70,    71,    72,    73,    70,    70,    70,    70,    70,    70,
-      74,    70,    70,    70,    70,    70,    70,    75,    75,    76,
-      76,    76,    76,    76,    76,    76,    77,    77,    78,    78,
-      80,    79,    79,    82,    81,    83,    83,    84,    84,    85,
-      85,    85,    86,    86,    87,    87,    87,    88,    88,    89,
-      89,    89,    90,    91,    92,    92,    92,    92,    93,    93,
-      94,    94,    94,    95,    95
+       0,    43,    44,    45,    45,    45,    46,    46,    46,    46,
+      47,    47,    48,    49,    49,    49,    49,    49,    50,    51,
+      52,    52,    52,    54,    53,    55,    55,    55,    55,    56,
+      56,    56,    57,    57,    57,    57,    57,    57,    57,    57,
+      58,    59,    59,    59,    59,    60,    60,    60,    61,    61,
+      62,    64,    63,    65,    65,    65,    66,    66,    67,    67,
+      67,    67,    68,    68,    68,    69,    69,    69,    70,    71,
+      71,    71,    71,    71,    72,    73,    74,    71,    71,    71,
+      71,    71,    71,    75,    71,    71,    71,    71,    71,    71,
+      76,    76,    77,    77,    77,    77,    77,    77,    77,    78,
+      78,    79,    79,    81,    80,    80,    83,    82,    84,    84,
+      85,    85,    86,    86,    86,    87,    87,    88,    88,    88,
+      89,    89,    90,    90,    90,    91,    92,    93,    93,    93,
+      93,    94,    94,    95,    95,    95,    96,    96
 };
 
 /* 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,     1,     3,     2,     0,     2,     2,     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,     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,     1,     3,     2,     0,
+       2,     2,     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,     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
@@ -715,202 +719,202 @@ 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,    22,     0,
-       0,     0,     0,    11,    10,     0,    23,     0,    19,    20,
-      16,    18,     0,    25,     0,     0,     0,     0,    36,     0,
-       0,     0,     0,     0,     0,     0,    34,     0,     0,    33,
-      29,    31,    32,    30,   117,    24,     0,    28,     0,     0,
-       0,     0,     0,     0,     0,    35,     0,    12,    27,     0,
-      86,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    67,     0,    76,   119,   110,
-       0,     0,   117,   120,    21,     0,     0,     0,    55,     0,
-       0,     0,     0,     0,   134,   128,     0,     0,    38,     0,
-       0,     0,     0,     0,    48,     0,    50,     0,    51,     0,
-      62,    89,     0,    96,     0,    83,    82,    84,    71,     0,
-       0,   103,    79,    70,    88,   106,    53,   109,     0,    78,
-      80,    15,   118,    37,     0,    39,     0,     0,     0,    56,
-     127,     0,     0,   122,   123,     0,   130,   132,   133,     0,
-      44,    66,    43,   100,    77,     0,   112,    46,     0,     0,
-       0,     0,     0,    63,     0,     0,     0,    68,     0,    98,
-      69,     0,    75,     0,   104,     0,    85,    54,   105,   108,
-       0,     0,     0,    57,    58,   125,     0,   129,   131,   102,
-     110,     0,     0,     0,     0,     0,   112,    60,     0,    52,
-       0,     0,     0,    91,    64,    90,    97,     0,     0,     0,
-      87,   107,   111,     0,     0,     0,     0,     0,    49,     0,
-       0,     0,    65,   113,    61,    59,     0,     0,     0,     0,
-       0,     0,    99,    72,   121,    81,     0,    40,   126,   101,
-       0,     0,   115,     0,     0,    95,    94,    93,    92,     0,
-      41,   114,   116,     0,    45,     0,     0,    73,    47,     0,
-       0,     0,    74
+      14,     9,     0,     0,    13,    15,     0,     0,     3,     6,
+       0,     7,     8,     0,     0,    17,    16,     1,     5,     4,
+       0,    25,     0,     0,     0,     0,    11,    10,     0,    26,
+       0,    22,    23,    19,    21,     0,    28,     0,     0,     0,
+       0,    39,     0,     0,     0,     0,     0,     0,     0,    37,
+       0,     0,    36,    32,    34,    35,    33,   120,    27,     0,
+      31,     0,     0,     0,     0,     0,     0,     0,    38,     0,
+      12,    30,     0,    89,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    70,     0,
+      79,   122,   113,     0,     0,   120,   123,    24,     0,     0,
+       0,    58,     0,     0,     0,     0,     0,   137,   131,     0,
+       0,    41,     0,     0,     0,     0,     0,    51,     0,    53,
+       0,    54,     0,    65,    92,     0,    99,     0,    86,    85,
+      87,    74,     0,     0,   106,    82,    73,    91,   109,    56,
+     112,     0,    81,    83,    18,   121,    40,     0,    42,     0,
+       0,     0,    59,   130,     0,     0,   125,   126,     0,   133,
+     135,   136,     0,    47,    69,    46,   103,    80,     0,   115,
+      49,     0,     0,     0,     0,     0,    66,     0,     0,     0,
+      71,     0,   101,    72,     0,    78,     0,   107,     0,    88,
+      57,   108,   111,     0,     0,     0,    60,    61,   128,     0,
+     132,   134,   105,   113,     0,     0,     0,     0,     0,   115,
+      63,     0,    55,     0,     0,     0,    94,    67,    93,   100,
+       0,     0,     0,    90,   110,   114,     0,     0,     0,     0,
+       0,    52,     0,     0,     0,    68,   116,    64,    62,     0,
+       0,     0,     0,     0,     0,   102,    75,   124,    84,     0,
+      43,   129,   104,     0,     0,   118,     0,     0,    98,    97,
+      96,    95,     0,    44,   117,   119,     0,    48,     0,     0,
+      76,    50,     0,     0,     0,    77
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,     5,     6,     7,   105,     8,     9,    10,    11,    21,
-      85,    36,    27,    47,    48,    49,    50,   110,   168,   169,
-     115,   165,    86,   137,    99,   170,   121,    87,   111,   181,
-     259,   269,   190,   186,   122,   179,   124,   113,   200,    89,
-     184,    90,   222,   138,   205,   206,    91,    92,    51,    52,
-     102,   106,   107,    53
+      -1,     6,     7,     8,   108,     9,    10,    11,    12,    24,
+      88,    39,    30,    50,    51,    52,    53,   113,   171,   172,
+     118,   168,    89,   140,   102,   173,   124,    90,   114,   184,
+     262,   272,   193,   189,   125,   182,   127,   116,   203,    92,
+     187,    93,   225,   141,   208,   209,    94,    95,    54,    55,
+     105,   109,   110,    56
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -203
+#define YYPACT_NINF -206
 static const yytype_int16 yypact[] =
 {
-      92,  -203,    -1,    66,  -203,    85,   220,  -203,  -203,    88,
-    -203,  -203,   142,    15,  -203,  -203,  -203,   -26,   110,    15,
-     144,   155,    15,  -203,  -203,   151,  -203,   131,  -203,  -203,
-    -203,  -203,     6,  -203,   157,   139,   143,     6,  -203,   162,
-      53,   182,   196,   204,   207,    41,  -203,   193,     6,  -203,
-    -203,  -203,  -203,  -203,   150,  -203,   206,  -203,   171,   209,
-     195,   181,    20,    20,    13,  -203,   177,  -203,  -203,   101,
-    -203,   184,   218,   218,   221,   218,    57,   188,   222,   224,
-     225,   228,   218,   197,   141,  -203,   177,  -203,  -203,    28,
-      95,   232,   150,  -203,  -203,   231,   181,   177,  -203,    19,
-      20,    14,   235,   236,  -203,   233,   237,    12,  -203,    54,
-     239,    54,   241,   240,  -203,   245,  -203,   210,  -203,    58,
-     211,   146,   242,   125,   246,  -203,  -203,  -203,  -203,   177,
-     249,  -203,  -203,  -203,   234,  -203,   215,  -203,    17,  -203,
-    -203,  -203,  -203,  -203,    22,  -203,   216,   217,   219,  -203,
-    -203,    20,   223,  -203,  -203,   210,  -203,  -203,  -203,   251,
-    -203,  -203,  -203,   254,  -203,   226,    82,    -2,   250,   255,
-     257,   188,   188,  -203,   188,   229,   188,  -203,   230,   252,
-    -203,   238,  -203,   101,  -203,   177,  -203,  -203,  -203,   243,
-     244,   247,   248,  -203,  -203,  -203,   261,  -203,  -203,  -203,
-     226,   258,   253,   256,   262,   269,    82,   259,   260,  -203,
-     260,   163,    99,   183,  -203,   111,  -203,   -26,   267,   271,
-    -203,  -203,  -203,   270,   263,   177,    20,   104,  -203,   266,
-     272,    54,  -203,  -203,  -203,   264,   268,   275,   188,   188,
-     188,   188,  -203,  -203,  -203,  -203,   177,  -203,  -203,  -203,
-      54,    54,  -203,   260,   260,   278,   278,   278,   278,   265,
-    -203,  -203,  -203,   277,  -203,   274,   260,  -203,  -203,   273,
-     284,   177,  -203
+      65,  -206,     2,    64,    -1,    70,    84,   231,  -206,  -206,
+     108,  -206,  -206,   120,    13,  -206,  -206,  -206,  -206,  -206,
+      29,    88,    13,   130,   163,    13,  -206,  -206,   165,  -206,
+      75,  -206,  -206,  -206,  -206,     8,  -206,   171,   134,   136,
+       8,  -206,   154,   -22,   178,   182,   186,   189,    61,  -206,
+     200,     8,  -206,  -206,  -206,  -206,  -206,   169,  -206,   198,
+    -206,   152,   203,   187,   177,    14,    14,    23,  -206,   196,
+    -206,  -206,   128,  -206,   179,   207,   207,   214,   207,    58,
+     185,   220,   225,   227,   230,   207,   195,   174,  -206,   196,
+    -206,  -206,    17,    94,   235,   169,  -206,  -206,   233,   177,
+     196,  -206,    19,    14,    55,   237,   238,  -206,   232,   236,
+      16,  -206,    86,   243,    86,   244,   241,  -206,   247,  -206,
+     210,  -206,    97,   211,    24,   248,   107,   249,  -206,  -206,
+    -206,  -206,   196,   254,  -206,  -206,  -206,   239,  -206,   217,
+    -206,   117,  -206,  -206,  -206,  -206,  -206,    67,  -206,   219,
+     221,   222,  -206,  -206,    14,   223,  -206,  -206,   210,  -206,
+    -206,  -206,   258,  -206,  -206,  -206,   255,  -206,   226,   106,
+       0,   256,   260,   259,   185,   185,  -206,   185,   229,   185,
+    -206,   234,   261,  -206,   240,  -206,   128,  -206,   196,  -206,
+    -206,  -206,   242,   245,   246,   252,  -206,  -206,  -206,   264,
+    -206,  -206,  -206,   226,   266,   250,   251,   263,   273,   106,
+     253,   257,  -206,   257,   142,   138,   149,  -206,   161,  -206,
+      29,   271,   275,  -206,  -206,  -206,   277,   265,   196,    14,
+     127,  -206,   270,   272,    86,  -206,  -206,  -206,   262,   276,
+     280,   185,   185,   185,   185,  -206,  -206,  -206,  -206,   196,
+    -206,  -206,  -206,    86,    86,  -206,   257,   257,   283,   283,
+     283,   283,   267,  -206,  -206,  -206,   284,  -206,   278,   257,
+    -206,  -206,   268,   289,   196,  -206
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -203,  -203,  -203,   286,   -16,  -203,  -203,  -203,  -203,   121,
-     194,  -203,  -203,    30,  -203,  -203,  -203,  -106,  -203,   138,
-      64,  -203,  -203,   115,   199,  -202,   -75,  -203,   -54,  -203,
-    -203,  -203,  -203,  -203,  -203,  -203,  -203,  -203,  -203,  -203,
-    -203,  -203,  -203,    96,    93,  -203,   212,  -203,  -203,  -203,
-     -59,   191,  -203,   -35
+    -206,  -206,  -206,   291,   -19,  -206,  -206,  -206,  -206,   113,
+      32,  -206,  -206,   -18,  -206,  -206,  -206,  -109,  -206,   143,
+     -49,  -206,  -206,   132,   204,  -205,   -78,  -206,   -57,  -206,
+    -206,  -206,  -206,  -206,  -206,  -206,  -206,  -206,  -206,  -206,
+    -206,  -206,  -206,    99,    96,  -206,   212,  -206,  -206,  -206,
+     -62,   201,  -206,   -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 -125
+#define YYTABLE_NINF -128
 static const yytype_int16 yytable[] =
 {
-      88,    25,   123,   160,   103,   162,   236,    37,   237,   -59,
-      23,   -26,   108,   157,    38,    24,    19,   158,   104,    93,
-     -17,   100,   151,    39,   188,  -124,   146,   189,   152,   191,
-     147,   148,   134,   147,   148,   135,    40,    41,    88,   207,
-      12,   150,    65,   145,    42,    43,    44,    45,    23,    23,
-      29,   263,   264,    24,    24,   109,    20,    93,    69,   -42,
-     149,   101,    70,   149,   268,    66,    71,    57,   171,   136,
-      13,   172,    72,    73,    74,   182,    75,   219,    68,    76,
-      77,    78,    79,    80,    59,    14,    81,    82,   -42,   -42,
-     -42,    17,   195,   119,    60,    84,   211,   212,   120,   213,
-       1,   215,   109,   139,   140,    69,   -42,     2,     3,    70,
-     175,   249,   239,    71,   189,     4,   202,   203,   204,    72,
-      73,    74,   175,    75,   241,   252,    76,    77,    78,    79,
-      80,   220,    33,    81,    82,   178,   175,   116,    34,   118,
-      28,    35,    84,    31,   261,   262,   129,   131,    18,   132,
-      29,    26,   133,    29,    69,    32,   174,   175,    70,   176,
-      30,    54,    71,   255,   256,   257,   258,   248,    72,    73,
-      74,   247,    75,   238,   175,    76,    77,    78,    79,    80,
-      55,    69,    81,    82,    56,    70,    58,    83,    61,    71,
-      44,    84,   260,   240,   175,    72,    73,    74,    67,    75,
-      62,   242,    76,    77,    78,    79,    80,    22,    63,    81,
-      82,    64,    95,    22,    94,    96,    22,   272,    84,    97,
-      -2,    15,    98,   -14,   114,   112,    46,   117,     1,   120,
-     125,    46,   126,   127,   128,     2,     3,   141,   130,   143,
-     153,   154,    46,     4,   161,   156,   155,   163,   164,   166,
-     177,   167,   173,   183,   180,   185,   187,   192,   193,   198,
-     194,   199,   209,   208,   196,   228,   217,   136,   210,   226,
-     214,   216,   225,   231,   232,   243,   244,   250,   245,   218,
-     201,   253,   267,   251,   221,   223,   254,   246,   224,   175,
-     266,   271,    16,   197,   229,   144,   227,   230,   159,   233,
-     234,   235,     0,     0,   142,   207,   265,     0,     0,     0,
-       0,     0,     0,     0,   270
+      91,    28,   126,   163,   106,   165,   239,    96,   240,    40,
+      62,   -62,   111,   -29,    22,   103,    41,   160,   -20,  -127,
+      63,   161,    60,    15,   138,    42,   149,   119,   107,   121,
+     150,   151,   137,    71,   177,   178,   132,   179,    91,    43,
+      44,   153,   210,   148,    13,    96,    25,    45,    46,    47,
+      48,   266,   267,    26,    25,    23,   104,    25,    27,   139,
+      26,   152,    68,   154,   271,    27,    26,    49,    14,   155,
+      32,    27,    49,     1,   194,   185,    36,   222,   150,   151,
+       2,     3,    37,    49,    17,    38,    69,   112,     4,     5,
+      72,   -45,   198,    16,    73,   122,   214,   215,    74,   216,
+     123,   218,   142,   143,    75,    76,    77,   174,    78,   152,
+     175,    20,    79,    80,    81,    82,    83,   181,   178,    84,
+      85,   -45,   -45,   -45,   191,   255,    21,   192,    87,   112,
+      29,   223,    72,   -45,   252,    31,    73,   192,    34,    32,
+      74,   205,   206,   207,   264,   265,    75,    76,    77,   178,
+      78,   242,   241,   178,    79,    80,    81,    82,    83,   243,
+     178,    84,    85,   258,   259,   260,   261,   251,    33,    35,
+      87,   250,   178,    72,   244,    57,    58,    73,    59,    61,
+     134,    74,   135,    32,    64,   136,    65,    75,    76,    77,
+      66,    78,   263,    67,    98,    79,    80,    81,    82,    83,
+      72,   245,    84,    85,    73,    70,    97,    86,    74,    99,
+      47,    87,   100,   117,    75,    76,    77,   275,    78,   101,
+     120,   115,    79,    80,    81,    82,    83,   123,   128,    84,
+      85,    -2,    18,   129,   -14,   130,   131,   133,    87,     1,
+     144,   146,   156,   157,   159,   158,     2,     3,   164,   167,
+     166,   169,   170,   176,     4,     5,   180,   183,   186,   190,
+     188,   195,   202,   196,   197,   199,   201,   212,   139,   211,
+     213,   217,   229,   231,   234,   220,   219,   228,   235,   246,
+     247,   253,   221,   254,   224,   248,   270,   226,   227,   256,
+     249,   257,   232,   233,   178,   237,   274,   269,    19,   238,
+     204,   200,   230,   147,   210,   236,     0,   145,     0,   268,
+     273,   162
 };
 
 static const yytype_int16 yycheck[] =
 {
-      54,    17,    77,   109,    63,   111,   208,     1,   210,    11,
-      36,     5,    66,     1,     8,    41,     1,     5,     5,    54,
-       5,     1,     8,    17,     7,     5,     7,    10,    14,     7,
-      11,    12,    86,    11,    12,     7,    30,    31,    92,    41,
-      41,   100,     1,    97,    38,    39,    40,    41,    36,    36,
-       9,   253,   254,    41,    41,     1,    41,    92,     4,     5,
-      41,    41,     8,    41,   266,    24,    12,    37,    10,    41,
-       4,    13,    18,    19,    20,   129,    22,   183,    48,    25,
-      26,    27,    28,    29,    31,     0,    32,    33,    34,    35,
-      36,     3,   151,    36,    41,    41,   171,   172,    41,   174,
-       8,   176,     1,     8,     9,     4,     5,    15,    16,     8,
-      11,     7,    13,    12,    10,    23,    34,    35,    36,    18,
-      19,    20,    11,    22,    13,   231,    25,    26,    27,    28,
-      29,   185,     1,    32,    33,    10,    11,    73,     7,    75,
-      19,    10,    41,    22,   250,   251,    82,     6,     6,     8,
-       9,    41,    11,     9,     4,     4,    10,    11,     8,    13,
-       5,     4,    12,   238,   239,   240,   241,   226,    18,    19,
-      20,   225,    22,    10,    11,    25,    26,    27,    28,    29,
-      41,     4,    32,    33,    41,     8,    24,    37,     6,    12,
-      40,    41,   246,    10,    11,    18,    19,    20,     5,    22,
-       4,   217,    25,    26,    27,    28,    29,    13,     4,    32,
-      33,     4,    41,    19,     8,     6,    22,   271,    41,    24,
-       0,     1,    41,     3,     6,    41,    32,     6,     8,    41,
-       8,    37,     8,     8,     6,    15,    16,     5,    41,     8,
-       5,     5,    48,    23,     5,     8,    13,     6,     8,     4,
-       8,    41,    41,     4,     8,    21,    41,    41,    41,     8,
-      41,     7,     7,    13,    41,     7,    14,    41,    11,     8,
-      41,    41,    24,    11,     5,     8,     5,    11,     8,    41,
-     165,    13,     8,    11,    41,    41,    11,    24,    41,    11,
-      13,     7,     6,   155,    41,    96,   200,    41,   107,   206,
-      41,    41,    -1,    -1,    92,    41,    41,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    41
+      57,    20,    80,   112,    66,   114,   211,    57,   213,     1,
+      32,    11,    69,     5,     1,     1,     8,     1,     5,     5,
+      42,     5,    40,    24,     7,    17,     7,    76,     5,    78,
+      11,    12,    89,    51,    10,    11,    85,    13,    95,    31,
+      32,   103,    42,   100,    42,    95,    14,    39,    40,    41,
+      42,   256,   257,    37,    22,    42,    42,    25,    42,    42,
+      37,    42,     1,     8,   269,    42,    37,    35,     4,    14,
+       9,    42,    40,     8,     7,   132,     1,   186,    11,    12,
+      15,    16,     7,    51,     0,    10,    25,     1,    23,    24,
+       4,     5,   154,    23,     8,    37,   174,   175,    12,   177,
+      42,   179,     8,     9,    18,    19,    20,    10,    22,    42,
+      13,     3,    26,    27,    28,    29,    30,    10,    11,    33,
+      34,    35,    36,    37,     7,   234,     6,    10,    42,     1,
+      42,   188,     4,     5,     7,    22,     8,    10,    25,     9,
+      12,    35,    36,    37,   253,   254,    18,    19,    20,    11,
+      22,    13,    10,    11,    26,    27,    28,    29,    30,    10,
+      11,    33,    34,   241,   242,   243,   244,   229,     5,     4,
+      42,   228,    11,     4,    13,     4,    42,     8,    42,    25,
+       6,    12,     8,     9,     6,    11,     4,    18,    19,    20,
+       4,    22,   249,     4,    42,    26,    27,    28,    29,    30,
+       4,   220,    33,    34,     8,     5,     8,    38,    12,     6,
+      41,    42,    25,     6,    18,    19,    20,   274,    22,    42,
+       6,    42,    26,    27,    28,    29,    30,    42,     8,    33,
+      34,     0,     1,     8,     3,     8,     6,    42,    42,     8,
+       5,     8,     5,     5,     8,    13,    15,    16,     5,     8,
+       6,     4,    42,    42,    23,    24,     8,     8,     4,    42,
+      21,    42,     7,    42,    42,    42,     8,     7,    42,    13,
+      11,    42,     8,     7,    11,    14,    42,    25,     5,     8,
+       5,    11,    42,    11,    42,     8,     8,    42,    42,    13,
+      25,    11,    42,    42,    11,    42,     7,    13,     7,    42,
+     168,   158,   203,    99,    42,   209,    -1,    95,    -1,    42,
+      42,   110
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    symbol of state STATE-NUM.  */
 static const yytype_uint8 yystos[] =
 {
-       0,     8,    15,    16,    23,    43,    44,    45,    47,    48,
-      49,    50,    41,     4,     0,     1,    45,     3,     6,     1,
-      41,    51,    52,    36,    41,    46,    41,    54,    51,     9,
-       5,    51,     4,     1,     7,    10,    53,     1,     8,    17,
-      30,    31,    38,    39,    40,    41,    52,    55,    56,    57,
-      58,    90,    91,    95,     4,    41,    41,    55,    24,    31,
-      41,     6,     4,     4,     4,     1,    24,     5,    55,     4,
-       8,    12,    18,    19,    20,    22,    25,    26,    27,    28,
-      29,    32,    33,    37,    41,    52,    64,    69,    70,    81,
-      83,    88,    89,    95,     8,    41,     6,    24,    41,    66,
-       1,    41,    92,    92,     5,    46,    93,    94,    70,     1,
-      59,    70,    41,    79,     6,    62,    62,     6,    62,    36,
-      41,    68,    76,    68,    78,     8,     8,     8,     6,    62,
-      41,     6,     8,    11,    70,     7,    41,    65,    85,     8,
-       9,     5,    88,     8,    66,    70,     7,    11,    12,    41,
-      92,     8,    14,     5,     5,    13,     8,     1,     5,    93,
-      59,     5,    59,     6,     8,    63,     4,    41,    60,    61,
-      67,    10,    13,    41,    10,    11,    13,     8,    10,    77,
-       8,    71,    70,     4,    82,    21,    75,    41,     7,    10,
-      74,     7,    41,    41,    41,    92,    41,    61,     8,     7,
-      80,    65,    34,    35,    36,    86,    87,    41,    13,     7,
-      11,    68,    68,    68,    41,    68,    41,    14,    41,    59,
-      70,    41,    84,    41,    41,    24,     8,    85,     7,    41,
-      41,    11,     5,    86,    41,    41,    67,    67,    10,    13,
-      10,    13,    46,     8,     5,     8,    24,    70,    92,     7,
-      11,    11,    59,    13,    11,    68,    68,    68,    68,    72,
-      70,    59,    59,    67,    67,    41,    13,     8,    67,    73,
-      41,     7,    70
+       0,     8,    15,    16,    23,    24,    44,    45,    46,    48,
+      49,    50,    51,    42,     4,    24,    23,     0,     1,    46,
+       3,     6,     1,    42,    52,    53,    37,    42,    47,    42,
+      55,    52,     9,     5,    52,     4,     1,     7,    10,    54,
+       1,     8,    17,    31,    32,    39,    40,    41,    42,    53,
+      56,    57,    58,    59,    91,    92,    96,     4,    42,    42,
+      56,    25,    32,    42,     6,     4,     4,     4,     1,    25,
+       5,    56,     4,     8,    12,    18,    19,    20,    22,    26,
+      27,    28,    29,    30,    33,    34,    38,    42,    53,    65,
+      70,    71,    82,    84,    89,    90,    96,     8,    42,     6,
+      25,    42,    67,     1,    42,    93,    93,     5,    47,    94,
+      95,    71,     1,    60,    71,    42,    80,     6,    63,    63,
+       6,    63,    37,    42,    69,    77,    69,    79,     8,     8,
+       8,     6,    63,    42,     6,     8,    11,    71,     7,    42,
+      66,    86,     8,     9,     5,    89,     8,    67,    71,     7,
+      11,    12,    42,    93,     8,    14,     5,     5,    13,     8,
+       1,     5,    94,    60,     5,    60,     6,     8,    64,     4,
+      42,    61,    62,    68,    10,    13,    42,    10,    11,    13,
+       8,    10,    78,     8,    72,    71,     4,    83,    21,    76,
+      42,     7,    10,    75,     7,    42,    42,    42,    93,    42,
+      62,     8,     7,    81,    66,    35,    36,    37,    87,    88,
+      42,    13,     7,    11,    69,    69,    69,    42,    69,    42,
+      14,    42,    60,    71,    42,    85,    42,    42,    25,     8,
+      86,     7,    42,    42,    11,     5,    87,    42,    42,    68,
+      68,    10,    13,    10,    13,    47,     8,     5,     8,    25,
+      71,    93,     7,    11,    11,    60,    13,    11,    69,    69,
+      69,    69,    73,    71,    60,    60,    68,    68,    42,    13,
+       8,    68,    74,    42,     7,    71
 };
 
 #define yyerrok                (yyerrstatus = 0)
@@ -1432,322 +1436,322 @@ yydestruct (yymsg, yytype, yyvaluep, yylocationp, parseio)
 
   switch (yytype)
     {
-      case 41: /* "word" */
+      case 42: /* "word" */
 #line 177 "ael.y"
        { free((yyvaluep->str));};
-#line 1439 "ael.tab.c"
+#line 1443 "ael.tab.c"
        break;
-      case 44: /* "objects" */
+      case 45: /* "objects" */
 #line 164 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1447 "ael.tab.c"
+#line 1451 "ael.tab.c"
        break;
-      case 45: /* "object" */
+      case 46: /* "object" */
 #line 164 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1455 "ael.tab.c"
+#line 1459 "ael.tab.c"
        break;
-      case 46: /* "context_name" */
+      case 47: /* "context_name" */
 #line 177 "ael.y"
        { free((yyvaluep->str));};
-#line 1460 "ael.tab.c"
+#line 1464 "ael.tab.c"
        break;
-      case 47: /* "context" */
+      case 48: /* "context" */
 #line 164 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1468 "ael.tab.c"
+#line 1472 "ael.tab.c"
        break;
-      case 49: /* "macro" */
+      case 50: /* "macro" */
 #line 164 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1476 "ael.tab.c"
+#line 1480 "ael.tab.c"
        break;
-      case 50: /* "globals" */
+      case 51: /* "globals" */
 #line 164 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1484 "ael.tab.c"
+#line 1488 "ael.tab.c"
        break;
-      case 51: /* "global_statements" */
+      case 52: /* "global_statements" */
 #line 164 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1492 "ael.tab.c"
+#line 1496 "ael.tab.c"
        break;
-      case 52: /* "assignment" */
+      case 53: /* "assignment" */
 #line 164 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1500 "ael.tab.c"
+#line 1504 "ael.tab.c"
        break;
-      case 54: /* "arglist" */
+      case 55: /* "arglist" */
 #line 164 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1508 "ael.tab.c"
+#line 1512 "ael.tab.c"
        break;
-      case 55: /* "elements" */
+      case 56: /* "elements" */
 #line 164 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1516 "ael.tab.c"
+#line 1520 "ael.tab.c"
        break;
-      case 56: /* "element" */
+      case 57: /* "element" */
 #line 164 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1524 "ael.tab.c"
+#line 1528 "ael.tab.c"
        break;
-      case 57: /* "ignorepat" */
+      case 58: /* "ignorepat" */
 #line 164 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1532 "ael.tab.c"
+#line 1536 "ael.tab.c"
        break;
-      case 58: /* "extension" */
+      case 59: /* "extension" */
 #line 164 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1540 "ael.tab.c"
+#line 1544 "ael.tab.c"
        break;
-      case 59: /* "statements" */
+      case 60: /* "statements" */
 #line 164 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1548 "ael.tab.c"
+#line 1552 "ael.tab.c"
        break;
-      case 60: /* "timerange" */
+      case 61: /* "timerange" */
 #line 177 "ael.y"
        { free((yyvaluep->str));};
-#line 1553 "ael.tab.c"
+#line 1557 "ael.tab.c"
        break;
-      case 61: /* "timespec" */
+      case 62: /* "timespec" */
 #line 164 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1561 "ael.tab.c"
+#line 1565 "ael.tab.c"
        break;
-      case 62: /* "test_expr" */
+      case 63: /* "test_expr" */
 #line 177 "ael.y"
        { free((yyvaluep->str));};
-#line 1566 "ael.tab.c"
+#line 1570 "ael.tab.c"
        break;
-      case 64: /* "if_like_head" */
+      case 65: /* "if_like_head" */
 #line 164 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1574 "ael.tab.c"
+#line 1578 "ael.tab.c"
        break;
-      case 65: /* "word_list" */
+      case 66: /* "word_list" */
 #line 177 "ael.y"
        { free((yyvaluep->str));};
-#line 1579 "ael.tab.c"
+#line 1583 "ael.tab.c"
        break;
-      case 67: /* "word3_list" */
+      case 68: /* "word3_list" */
 #line 177 "ael.y"
        { free((yyvaluep->str));};
-#line 1584 "ael.tab.c"
+#line 1588 "ael.tab.c"
        break;
-      case 68: /* "goto_word" */
+      case 69: /* "goto_word" */
 #line 177 "ael.y"
        { free((yyvaluep->str));};
-#line 1589 "ael.tab.c"
+#line 1593 "ael.tab.c"
        break;
-      case 69: /* "switch_statement" */
+      case 70: /* "switch_statement" */
 #line 164 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1597 "ael.tab.c"
+#line 1601 "ael.tab.c"
        break;
-      case 70: /* "statement" */
+      case 71: /* "statement" */
 #line 164 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1605 "ael.tab.c"
+#line 1609 "ael.tab.c"
        break;
-      case 75: /* "opt_else" */
+      case 76: /* "opt_else" */
 #line 164 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1613 "ael.tab.c"
+#line 1617 "ael.tab.c"
        break;
-      case 76: /* "target" */
+      case 77: /* "target" */
 #line 164 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1621 "ael.tab.c"
+#line 1625 "ael.tab.c"
        break;
-      case 77: /* "opt_pri" */
+      case 78: /* "opt_pri" */
 #line 177 "ael.y"
        { free((yyvaluep->str));};
-#line 1626 "ael.tab.c"
+#line 1630 "ael.tab.c"
        break;
-      case 78: /* "jumptarget" */
+      case 79: /* "jumptarget" */
 #line 164 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1634 "ael.tab.c"
+#line 1638 "ael.tab.c"
        break;
-      case 79: /* "macro_call" */
+      case 80: /* "macro_call" */
 #line 164 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1642 "ael.tab.c"
+#line 1646 "ael.tab.c"
        break;
-      case 81: /* "application_call_head" */
+      case 82: /* "application_call_head" */
 #line 164 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1650 "ael.tab.c"
+#line 1654 "ael.tab.c"
        break;
-      case 83: /* "application_call" */
+      case 84: /* "application_call" */
 #line 164 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1658 "ael.tab.c"
+#line 1662 "ael.tab.c"
        break;
-      case 84: /* "opt_word" */
+      case 85: /* "opt_word" */
 #line 177 "ael.y"
        { free((yyvaluep->str));};
-#line 1663 "ael.tab.c"
+#line 1667 "ael.tab.c"
        break;
-      case 85: /* "eval_arglist" */
+      case 86: /* "eval_arglist" */
 #line 164 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1671 "ael.tab.c"
+#line 1675 "ael.tab.c"
        break;
-      case 86: /* "case_statements" */
+      case 87: /* "case_statements" */
 #line 164 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1679 "ael.tab.c"
+#line 1683 "ael.tab.c"
        break;
-      case 87: /* "case_statement" */
+      case 88: /* "case_statement" */
 #line 164 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1687 "ael.tab.c"
+#line 1691 "ael.tab.c"
        break;
-      case 88: /* "macro_statements" */
+      case 89: /* "macro_statements" */
 #line 164 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1695 "ael.tab.c"
+#line 1699 "ael.tab.c"
        break;
-      case 89: /* "macro_statement" */
+      case 90: /* "macro_statement" */
 #line 164 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1703 "ael.tab.c"
+#line 1707 "ael.tab.c"
        break;
-      case 90: /* "switches" */
+      case 91: /* "switches" */
 #line 164 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1711 "ael.tab.c"
+#line 1715 "ael.tab.c"
        break;
-      case 91: /* "eswitches" */
+      case 92: /* "eswitches" */
 #line 164 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1719 "ael.tab.c"
+#line 1723 "ael.tab.c"
        break;
-      case 92: /* "switchlist" */
+      case 93: /* "switchlist" */
 #line 164 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1727 "ael.tab.c"
+#line 1731 "ael.tab.c"
        break;
-      case 93: /* "included_entry" */
+      case 94: /* "included_entry" */
 #line 164 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1735 "ael.tab.c"
+#line 1739 "ael.tab.c"
        break;
-      case 94: /* "includeslist" */
+      case 95: /* "includeslist" */
 #line 164 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1743 "ael.tab.c"
+#line 1747 "ael.tab.c"
        break;
-      case 95: /* "includes" */
+      case 96: /* "includes" */
 #line 164 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1751 "ael.tab.c"
+#line 1755 "ael.tab.c"
        break;
 
       default:
@@ -2122,165 +2126,174 @@ yyreduce:
   case 12:
 #line 203 "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 218 "ael.y"
+#line 212 "ael.y"
     { (yyval.intval) = 1; ;}
     break;
 
   case 14:
-#line 219 "ael.y"
+#line 213 "ael.y"
     { (yyval.intval) = 0; ;}
     break;
 
   case 15:
-#line 222 "ael.y"
+#line 214 "ael.y"
+    { (yyval.intval) = 2; ;}
+    break;
+
+  case 16:
+#line 215 "ael.y"
+    { (yyval.intval)=3; ;}
+    break;
+
+  case 17:
+#line 216 "ael.y"
+    { (yyval.intval)=3; ;}
+    break;
+
+  case 18:
+#line 219 "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 228 "ael.y"
+  case 19:
+#line 225 "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 234 "ael.y"
+  case 20:
+#line 231 "ael.y"
     { (yyval.pval) = NULL; ;}
     break;
 
-  case 18:
-#line 235 "ael.y"
+  case 21:
+#line 232 "ael.y"
     {(yyval.pval) = linku1((yyvsp[(1) - (2)].pval), (yyvsp[(2) - (2)].pval)); ;}
     break;
 
-  case 19:
-#line 236 "ael.y"
+  case 22:
+#line 233 "ael.y"
     {(yyval.pval)=(yyvsp[(2) - (2)].pval);;}
     break;
 
-  case 20:
-#line 239 "ael.y"
+  case 23:
+#line 236 "ael.y"
     { reset_semicount(parseio->scanner); ;}
     break;
 
-  case 21:
-#line 239 "ael.y"
+  case 24:
+#line 236 "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"
     { (yyval.pval) = NULL; ;}
     break;
 
-  case 23:
-#line 247 "ael.y"
+  case 26:
+#line 244 "ael.y"
     { (yyval.pval) = nword((yyvsp[(1) - (1)].str), &(yylsp[(1) - (1)])); ;}
     break;
 
-  case 24:
-#line 248 "ael.y"
+  case 27:
+#line 245 "ael.y"
     { (yyval.pval) = linku1((yyvsp[(1) - (3)].pval), nword((yyvsp[(3) - (3)].str), &(yylsp[(3) - (3)]))); ;}
     break;
 
-  case 25:
-#line 249 "ael.y"
+  case 28:
+#line 246 "ael.y"
     {(yyval.pval)=(yyvsp[(1) - (2)].pval);;}
     break;
 
-  case 26:
-#line 252 "ael.y"
+  case 29:
+#line 249 "ael.y"
     {(yyval.pval)=0;;}
     break;
 
-  case 27:
-#line 253 "ael.y"
+  case 30:
+#line 250 "ael.y"
     { (yyval.pval) = linku1((yyvsp[(1) - (2)].pval), (yyvsp[(2) - (2)].pval)); ;}
     break;
 
-  case 28:
-#line 254 "ael.y"
+  case 31:
+#line 251 "ael.y"
     { (yyval.pval)=(yyvsp[(2) - (2)].pval);;}
     break;
 
-  case 29:
-#line 257 "ael.y"
+  case 32:
+#line 254 "ael.y"
     {(yyval.pval)=(yyvsp[(1) - (1)].pval);;}
     break;
 
-  case 30:
-#line 258 "ael.y"
+  case 33:
+#line 255 "ael.y"
     {(yyval.pval)=(yyvsp[(1) - (1)].pval);;}
     break;
 
-  case 31:
-#line 259 "ael.y"
+  case 34:
+#line 256 "ael.y"
     {(yyval.pval)=(yyvsp[(1) - (1)].pval);;}
     break;
 
-  case 32:
-#line 260 "ael.y"
+  case 35:
+#line 257 "ael.y"
     {(yyval.pval)=(yyvsp[(1) - (1)].pval);;}
     break;
 
-  case 33:
-#line 261 "ael.y"
+  case 36:
+#line 258 "ael.y"
     {(yyval.pval)=(yyvsp[(1) - (1)].pval);;}
     break;
 
-  case 34:
-#line 262 "ael.y"
+  case 37:
+#line 259 "ael.y"
     {(yyval.pval)=(yyvsp[(1) - (1)].pval);;}
     break;
 
-  case 35:
-#line 263 "ael.y"
+  case 38:
+#line 260 "ael.y"
     {free((yyvsp[(1) - (2)].str)); (yyval.pval)=0;;}
     break;
 
-  case 36:
-#line 264 "ael.y"
+  case 39:
+#line 261 "ael.y"
     {(yyval.pval)=0;/* allow older docs to be read */;}
     break;
 
-  case 37:
-#line 267 "ael.y"
+  case 40:
+#line 264 "ael.y"
     {
                (yyval.pval) = npval2(PV_IGNOREPAT, &(yylsp[(1) - (4)]), &(yylsp[(4) - (4)]));
                (yyval.pval)->u1.str = (yyvsp[(3) - (4)].str);;}
     break;
 
-  case 38:
-#line 272 "ael.y"
+  case 41:
+#line 269 "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 39:
-#line 276 "ael.y"
+  case 42:
+#line 273 "ael.y"
     {
                (yyval.pval) = npval2(PV_EXTENSION, &(yylsp[(1) - (4)]), &(yylsp[(4) - (4)]));
                (yyval.pval)->u1.str = (yyvsp[(2) - (4)].str);
@@ -2288,8 +2301,8 @@ yyreduce:
                (yyval.pval)->u4.regexten=1;;}
     break;
 
-  case 40:
-#line 281 "ael.y"
+  case 43:
+#line 278 "ael.y"
     {
                (yyval.pval) = npval2(PV_EXTENSION, &(yylsp[(1) - (7)]), &(yylsp[(7) - (7)]));
                (yyval.pval)->u1.str = (yyvsp[(5) - (7)].str);
@@ -2297,8 +2310,8 @@ yyreduce:
                (yyval.pval)->u3.hints = (yyvsp[(3) - (7)].str);;}
     break;
 
-  case 41:
-#line 286 "ael.y"
+  case 44:
+#line 283 "ael.y"
     {
                (yyval.pval) = npval2(PV_EXTENSION, &(yylsp[(1) - (8)]), &(yylsp[(8) - (8)]));
                (yyval.pval)->u1.str = (yyvsp[(6) - (8)].str);
@@ -2307,23 +2320,23 @@ yyreduce:
                (yyval.pval)->u3.hints = (yyvsp[(4) - (8)].str);;}
     break;
 
-  case 42:
-#line 296 "ael.y"
+  case 45:
+#line 293 "ael.y"
     { (yyval.pval) = NULL; ;}
     break;
 
-  case 43:
-#line 297 "ael.y"
+  case 46:
+#line 294 "ael.y"
     { (yyval.pval) = linku1((yyvsp[(1) - (2)].pval), (yyvsp[(2) - (2)].pval)); ;}
     break;
 
-  case 44:
-#line 298 "ael.y"
+  case 47:
+#line 295 "ael.y"
     {(yyval.pval)=(yyvsp[(2) - (2)].pval);;}
     break;
 
-  case 45:
-#line 304 "ael.y"
+  case 48:
+#line 301 "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));
@@ -2331,13 +2344,13 @@ yyreduce:
                free((yyvsp[(5) - (5)].str)); ;}
     break;
 
-  case 46:
-#line 309 "ael.y"
+  case 49:
+#line 306 "ael.y"
     { (yyval.str) = (yyvsp[(1) - (1)].str); ;}
     break;
 
-  case 47:
-#line 313 "ael.y"
+  case 50:
+#line 310 "ael.y"
     {
                (yyval.pval) = nword((yyvsp[(1) - (7)].str), &(yylsp[(1) - (7)]));
                (yyval.pval)->next = nword((yyvsp[(3) - (7)].str), &(yylsp[(3) - (7)]));
@@ -2345,45 +2358,45 @@ yyreduce:
                (yyval.pval)->next->next->next = nword((yyvsp[(7) - (7)].str), &(yylsp[(7) - (7)])); ;}
     break;
 
-  case 48:
-#line 321 "ael.y"
+  case 51:
+#line 318 "ael.y"
     { reset_parencount(parseio->scanner); ;}
     break;
 
-  case 49:
-#line 321 "ael.y"
+  case 52:
+#line 318 "ael.y"
     { (yyval.str) = (yyvsp[(3) - (4)].str); ;}
     break;
 
-  case 50:
-#line 325 "ael.y"
+  case 53:
+#line 322 "ael.y"
     {
                (yyval.pval)= npval2(PV_IF, &(yylsp[(1) - (2)]), &(yylsp[(2) - (2)]));
                (yyval.pval)->u1.str = (yyvsp[(2) - (2)].str); ;}
     break;
 
-  case 51:
-#line 328 "ael.y"
+  case 54:
+#line 325 "ael.y"
     {
                (yyval.pval) = npval2(PV_RANDOM, &(yylsp[(1) - (2)]), &(yylsp[(2) - (2)]));
                (yyval.pval)->u1.str=(yyvsp[(2) - (2)].str);;}
     break;
 
-  case 52:
-#line 331 "ael.y"
+  case 55:
+#line 328 "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 53:
-#line 342 "ael.y"
+  case 56:
+#line 339 "ael.y"
     { (yyval.str) = (yyvsp[(1) - (1)].str);;}
     break;
 
-  case 54:
-#line 343 "ael.y"
+  case 57:
+#line 340 "ael.y"
     {
                asprintf(&((yyval.str)), "%s%s", (yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].str));
                free((yyvsp[(1) - (2)].str));
@@ -2391,42 +2404,42 @@ yyreduce:
                prev_word = (yyval.str);;}
     break;
 
-  case 55:
-#line 350 "ael.y"
+  case 58:
+#line 347 "ael.y"
     { (yyval.str) = (yyvsp[(1) - (1)].str); ;}
     break;
 
-  case 56:
-#line 351 "ael.y"
+  case 59:
+#line 348 "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 57:
-#line 355 "ael.y"
+  case 60:
+#line 352 "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 58:
-#line 359 "ael.y"
+  case 61:
+#line 356 "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 59:
-#line 365 "ael.y"
+  case 62:
+#line 362 "ael.y"
     { (yyval.str) = (yyvsp[(1) - (1)].str);;}
     break;
 
-  case 60:
-#line 366 "ael.y"
+  case 63:
+#line 363 "ael.y"
     {
                asprintf(&((yyval.str)), "%s%s", (yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].str));
                free((yyvsp[(1) - (2)].str));
@@ -2434,8 +2447,8 @@ yyreduce:
                prev_word = (yyval.str);;}
     break;
 
-  case 61:
-#line 371 "ael.y"
+  case 64:
+#line 368 "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));
@@ -2444,85 +2457,85 @@ yyreduce:
                prev_word=(yyval.str);;}
     break;
 
-  case 62:
-#line 379 "ael.y"
+  case 65:
+#line 376 "ael.y"
     { (yyval.str) = (yyvsp[(1) - (1)].str);;}
     break;
 
-  case 63:
-#line 380 "ael.y"
+  case 66:
+#line 377 "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 64:
-#line 384 "ael.y"
+  case 67:
+#line 381 "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 65:
-#line 390 "ael.y"
+  case 68:
+#line 387 "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 66:
-#line 399 "ael.y"
+  case 69:
+#line 396 "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 67:
-#line 402 "ael.y"
+  case 70:
+#line 399 "ael.y"
     { (yyval.pval) = (yyvsp[(1) - (1)].pval); ;}
     break;
 
-  case 68:
-#line 403 "ael.y"
+  case 71:
+#line 400 "ael.y"
     {
                (yyval.pval) = npval2(PV_GOTO, &(yylsp[(1) - (3)]), &(yylsp[(3) - (3)]));
                (yyval.pval)->u1.list = (yyvsp[(2) - (3)].pval);;}
     break;
 
-  case 69:
-#line 406 "ael.y"
+  case 72:
+#line 403 "ael.y"
     {
                (yyval.pval) = npval2(PV_GOTO, &(yylsp[(1) - (3)]), &(yylsp[(3) - (3)]));
                (yyval.pval)->u1.list = (yyvsp[(2) - (3)].pval);;}
     break;
 
-  case 70:
-#line 409 "ael.y"
+  case 73:
+#line 406 "ael.y"
     {
                (yyval.pval) = npval2(PV_LABEL, &(yylsp[(1) - (2)]), &(yylsp[(2) - (2)]));
                (yyval.pval)->u1.str = (yyvsp[(1) - (2)].str); ;}
     break;
 
-  case 71:
-#line 412 "ael.y"
+  case 74:
+#line 409 "ael.y"
     {reset_semicount(parseio->scanner);;}
     break;
 
-  case 72:
-#line 413 "ael.y"
+  case 75:
+#line 410 "ael.y"
     {reset_semicount(parseio->scanner);;}
     break;
 
-  case 73:
-#line 414 "ael.y"
+  case 76:
+#line 411 "ael.y"
     {reset_parencount(parseio->scanner);;}
     break;
 
-  case 74:
-#line 414 "ael.y"
+  case 77:
+#line 411 "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);
@@ -2531,43 +2544,43 @@ yyreduce:
                (yyval.pval)->u4.for_statements = (yyvsp[(12) - (12)].pval); set_dads((yyval.pval),(yyvsp[(12) - (12)].pval));;}
     break;
 
-  case 75:
-#line 420 "ael.y"
+  case 78:
+#line 417 "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 76:
-#line 424 "ael.y"
+  case 79:
+#line 421 "ael.y"
     { (yyval.pval) = (yyvsp[(1) - (1)].pval); ;}
     break;
 
-  case 77:
-#line 425 "ael.y"
+  case 80:
+#line 422 "ael.y"
     { (yyval.pval) = update_last((yyvsp[(2) - (3)].pval), &(yylsp[(2) - (3)])); ;}
     break;
 
-  case 78:
-#line 426 "ael.y"
+  case 81:
+#line 423 "ael.y"
     { (yyval.pval) = update_last((yyvsp[(1) - (2)].pval), &(yylsp[(2) - (2)])); ;}
     break;
 
-  case 79:
-#line 427 "ael.y"
+  case 82:
+#line 424 "ael.y"
     {
                (yyval.pval)= npval2(PV_APPLICATION_CALL, &(yylsp[(1) - (2)]), &(yylsp[(2) - (2)]));
                (yyval.pval)->u1.str = (yyvsp[(1) - (2)].str);;}
     break;
 
-  case 80:
-#line 430 "ael.y"
+  case 83:
+#line 427 "ael.y"
     {reset_semicount(parseio->scanner);;}
     break;
 
-  case 81:
-#line 430 "ael.y"
+  case 84:
+#line 427 "ael.y"
     {
                char *bufx;
                int tot=0;
@@ -2603,127 +2616,127 @@ yyreduce:
        ;}
     break;
 
-  case 82:
-#line 463 "ael.y"
+  case 85:
+#line 460 "ael.y"
     { (yyval.pval) = npval2(PV_BREAK, &(yylsp[(1) - (2)]), &(yylsp[(2) - (2)])); ;}
     break;
 
-  case 83:
-#line 464 "ael.y"
+  case 86:
+#line 461 "ael.y"
     { (yyval.pval) = npval2(PV_RETURN, &(yylsp[(1) - (2)]), &(yylsp[(2) - (2)])); ;}
     break;
 
-  case 84:
-#line 465 "ael.y"
+  case 87:
+#line 462 "ael.y"
     { (yyval.pval) = npval2(PV_CONTINUE, &(yylsp[(1) - (2)]), &(yylsp[(2) - (2)])); ;}
     break;
 
-  case 85:
-#line 466 "ael.y"
+  case 88:
+#line 463 "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 86:
-#line 470 "ael.y"
+  case 89:
+#line 467 "ael.y"
     { (yyval.pval)=0; ;}
     break;
 
-  case 87:
-#line 473 "ael.y"
+  case 90:
+#line 470 "ael.y"
     { (yyval.pval) = (yyvsp[(2) - (2)].pval); ;}
     break;
 
-  case 88:
-#line 474 "ael.y"
+  case 91:
+#line 471 "ael.y"
     { (yyval.pval) = NULL ; ;}
     break;
 
-  case 89:
-#line 477 "ael.y"
+  case 92:
+#line 474 "ael.y"
     { (yyval.pval) = nword((yyvsp[(1) - (1)].str), &(yylsp[(1) - (1)])); ;}
     break;
 
-  case 90:
-#line 478 "ael.y"
+  case 93:
+#line 475 "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 91:
-#line 481 "ael.y"
+  case 94:
+#line 478 "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 92:
-#line 484 "ael.y"
+  case 95:
+#line 481 "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 93:
-#line 488 "ael.y"
+  case 96:
+#line 485 "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 94:
-#line 492 "ael.y"
+  case 97:
+#line 489 "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 95:
-#line 496 "ael.y"
+  case 98:
+#line 493 "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 96:
-#line 502 "ael.y"
+  case 99:
+#line 499 "ael.y"
     { (yyval.str) = strdup("1"); ;}
     break;
 
-  case 97:
-#line 503 "ael.y"
+  case 100:
+#line 500 "ael.y"
     { (yyval.str) = (yyvsp[(2) - (2)].str); ;}
     break;
 
-  case 98:
-#line 507 "ael.y"
+  case 101:
+#line 504 "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 99:
-#line 510 "ael.y"
+  case 102:
+#line 507 "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 100:
-#line 516 "ael.y"
+  case 103:
+#line 513 "ael.y"
     {reset_argcount(parseio->scanner);;}
     break;
 
-  case 101:
-#line 516 "ael.y"
+  case 104:
+#line 513 "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)]));
@@ -2731,20 +2744,20 @@ yyreduce:
                (yyval.pval)->u2.arglist = (yyvsp[(4) - (5)].pval);;}
     break;
 
-  case 102:
-#line 521 "ael.y"
+  case 105:
+#line 518 "ael.y"
     {
                (yyval.pval)= npval2(PV_MACRO_CALL, &(yylsp[(1) - (3)]), &(yylsp[(3) - (3)]));
                (yyval.pval)->u1.str = (yyvsp[(1) - (3)].str); ;}
     break;
 
-  case 103:
-#line 529 "ael.y"
+  case 106:
+#line 526 "ael.y"
     {reset_argcount(parseio->scanner);;}
     break;
 
-  case 104:
-#line 529 "ael.y"
+  case 107:
+#line 526 "ael.y"
     {
                if (strcasecmp((yyvsp[(1) - (3)].str),"goto") == 0) {
                        (yyval.pval) = npval2(PV_GOTO, &(yylsp[(1) - (3)]), &(yylsp[(2) - (3)]));
@@ -2756,8 +2769,8 @@ yyreduce:
                } ;}
     break;
 
-  case 105:
-#line 540 "ael.y"
+  case 108:
+#line 537 "ael.y"
     {
                (yyval.pval) = update_last((yyvsp[(1) - (3)].pval), &(yylsp[(3) - (3)]));
                if( (yyval.pval)->type == PV_GOTO )
@@ -2767,179 +2780,179 @@ yyreduce:
        ;}
     break;
 
-  case 106:
-#line 547 "ael.y"
+  case 109:
+#line 544 "ael.y"
     { (yyval.pval) = update_last((yyvsp[(1) - (2)].pval), &(yylsp[(2) - (2)])); ;}
     break;
 
-  case 107:
-#line 550 "ael.y"
+  case 110:
+#line 547 "ael.y"
     { (yyval.str) = (yyvsp[(1) - (1)].str) ;}
     break;
 
-  case 108:
-#line 551 "ael.y"
+  case 111:
+#line 548 "ael.y"
     { (yyval.str) = strdup(""); ;}
     break;
 
-  case 109:
-#line 554 "ael.y"
+  case 112:
+#line 551 "ael.y"
     { (yyval.pval) = nword((yyvsp[(1) - (1)].str), &(yylsp[(1) - (1)])); ;}
     break;
 
-  case 110:
-#line 555 "ael.y"
+  case 113:
+#line 552 "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 111:
-#line 558 "ael.y"
+  case 114:
+#line 555 "ael.y"
     { (yyval.pval) = linku1((yyvsp[(1) - (3)].pval), nword((yyvsp[(3) - (3)].str), &(yylsp[(3) - (3)]))); ;}
     break;
 
-  case 112:
-#line 561 "ael.y"
+  case 115:
+#line 558 "ael.y"
     { (yyval.pval) = NULL; ;}
     break;
 
-  case 113:
-#line 562 "ael.y"
+  case 116:
+#line 559 "ael.y"
     { (yyval.pval) = linku1((yyvsp[(1) - (2)].pval), (yyvsp[(2) - (2)].pval)); ;}
     break;
 
-  case 114:
-#line 565 "ael.y"
+  case 117:
+#line 562 "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 115:
-#line 569 "ael.y"
+  case 118:
+#line 566 "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 116:
-#line 573 "ael.y"
+  case 119:
+#line 570 "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 117:
-#line 579 "ael.y"
+  case 120:
+#line 576 "ael.y"
     { (yyval.pval) = NULL; ;}
     break;
 
-  case 118:
-#line 580 "ael.y"
+  case 121:
+#line 577 "ael.y"
     { (yyval.pval) = linku1((yyvsp[(1) - (2)].pval), (yyvsp[(2) - (2)].pval)); ;}
     break;
 
-  case 119:
-#line 583 "ael.y"
+  case 122:
+#line 580 "ael.y"
     {(yyval.pval)=(yyvsp[(1) - (1)].pval);;}
     break;
 
-  case 120:
-#line 584 "ael.y"
+  case 123:
+#line 581 "ael.y"
     { (yyval.pval)=(yyvsp[(1) - (1)].pval);;}
     break;
 
-  case 121:
-#line 585 "ael.y"
+  case 124:
+#line 582 "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 122:
-#line 591 "ael.y"
+  case 125:
+#line 588 "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 123:
-#line 596 "ael.y"
+  case 126:
+#line 593 "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 124:
-#line 601 "ael.y"
+  case 127:
+#line 598 "ael.y"
     { (yyval.pval) = NULL; ;}
     break;
 
-  case 125:
-#line 602 "ael.y"
+  case 128:
+#line 599 "ael.y"
     { (yyval.pval) = linku1(nword((yyvsp[(1) - (3)].str), &(yylsp[(1) - (3)])), (yyvsp[(3) - (3)].pval)); ;}
     break;
 
-  case 126:
-#line 603 "ael.y"
+  case 129:
+#line 600 "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 127:
-#line 605 "ael.y"
+  case 130:
+#line 602 "ael.y"
     {(yyval.pval)=(yyvsp[(2) - (2)].pval);;}
     break;
 
-  case 128:
-#line 608 "ael.y"
+  case 131:
+#line 605 "ael.y"
     { (yyval.pval) = nword((yyvsp[(1) - (1)].str), &(yylsp[(1) - (1)])); ;}
     break;
 
-  case 129:
-#line 609 "ael.y"
+  case 132:
+#line 606 "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 130:
-#line 616 "ael.y"
+  case 133:
+#line 613 "ael.y"
     { (yyval.pval) = (yyvsp[(1) - (2)].pval); ;}
     break;
 
-  case 131:
-#line 617 "ael.y"
+  case 134:
+#line 614 "ael.y"
     { (yyval.pval) = linku1((yyvsp[(1) - (3)].pval), (yyvsp[(2) - (3)].pval)); ;}
     break;
 
-  case 132:
-#line 618 "ael.y"
+  case 135:
+#line 615 "ael.y"
     {(yyval.pval)=(yyvsp[(1) - (2)].pval);;}
     break;
 
-  case 133:
-#line 621 "ael.y"
+  case 136:
+#line 618 "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 134:
-#line 624 "ael.y"
+  case 137:
+#line 621 "ael.y"
     {
                (yyval.pval) = npval2(PV_INCLUDES, &(yylsp[(1) - (3)]), &(yylsp[(3) - (3)]));;}
     break;
 
 
 /* Line 1270 of yacc.c.  */
-#line 2943 "ael.tab.c"
+#line 2956 "ael.tab.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -3158,7 +3171,7 @@ yyreturn:
 }
 
 
-#line 629 "ael.y"
+#line 626 "ael.y"
 
 
 static char *token_equivs1[] =
index c908e027927f4ad870f757b73c758b87e2a92b37..92a201a70a4b0555ce77678dcdedb776828a7928 100644 (file)
      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,
-     word = 296
+     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,
+     word = 297
    };
 #endif
 /* Tokens.  */
 #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 word 296
+#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 word 297
 
 
 
@@ -123,7 +125,7 @@ typedef union YYSTYPE
        struct pval *pval;      /* full objects */
 }
 /* Line 1536 of yacc.c.  */
-#line 127 "ael.tab.h"
+#line 129 "ael.tab.h"
        YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
index d54dc01abb53588518f02ff9c9f2f6f6d7dd4d9f..3ddcee8f0177b9a4f7eff3c7a3d3a96aa5f06b71 100644 (file)
@@ -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
@@ -201,22 +201,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 {
index 6adf8ba9bd0f52908a09db6c2e80cf084d38095c..9a1a7bc6ce7724439d704bfe179ed87ca2e28d9f 100644 (file)
@@ -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 61
-#define YY_END_OF_BUFFER 62
+#define YY_NUM_RULES 62
+#define YY_END_OF_BUFFER 63
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -354,34 +354,34 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static yyconst flex_int16_t yy_accept[234] =
+static yyconst flex_int16_t yy_accept[239] =
     {   0,
-        0,    0,    0,    0,    0,    0,    0,    0,   41,   41,
-       62,   61,   48,   46,   47,   49,   49,    9,    3,    4,
-        7,   49,    8,    5,    6,   12,   49,   49,   49,   49,
-       49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
-       49,    1,   10,    2,   61,   51,   50,   61,   52,   61,
-       57,   58,   59,   61,   61,   53,   54,   55,   61,   56,
-       41,   42,   43,   48,   47,   49,   49,   40,   13,   11,
-       49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
-       49,   20,   49,   49,   49,   49,   49,   49,   49,   49,
-       49,    0,   51,   50,    0,   52,   51,   50,   52,    0,
-
-       57,   58,   59,    0,   57,   58,   59,    0,   53,   54,
-       55,    0,   56,   53,   54,   55,   56,   41,   42,   43,
-       44,   43,   45,   49,   13,   13,   49,   49,   49,   49,
-       49,   49,   49,   49,   31,   49,   49,   49,   49,   49,
-       49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
-       49,   49,   33,   49,   49,   49,   25,   49,   49,   26,
-       24,   49,   49,   49,   27,   49,   49,   49,   49,   49,
-       49,   49,   49,   49,   29,   36,   49,   49,   49,   49,
-       49,   49,   49,   49,   16,   49,   49,   49,   49,   49,
-       32,   49,   49,   49,   49,   49,   49,   49,   21,   49,
-
-       49,   49,   22,   49,   28,   19,   49,   49,   14,   49,
-       34,   49,   17,   49,   49,   35,   49,   49,   49,   15,
-       30,   49,   49,   39,   23,   37,    0,   38,   18,    0,
-        0,   60,    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,    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,   50,   21,   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,   50,   32,   50,   50,   50,
+       50,   50,   50,   50,   50,   50,   50,   50,   50,   50,
+       50,   50,   50,   50,   34,   50,   50,   50,   26,   50,
+       50,   50,   27,   25,   50,   50,   50,   28,   50,   50,
+       50,   50,   50,   50,   50,   50,   50,   30,   37,   50,
+       50,   50,   50,   50,   50,   50,   50,   50,   17,   50,
+       50,   50,   50,   50,   33,   50,   50,   50,   50,   50,
+
+       50,   16,   50,   22,   50,   50,   50,   23,   50,   29,
+       20,   50,   50,   14,   50,   35,   50,   18,   50,   50,
+       36,   50,   50,   50,   15,   31,   50,   50,   40,   24,
+       38,    0,   39,   19,    0,    0,   61,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -425,184 +425,186 @@ static yyconst flex_int32_t yy_meta[48] =
         3,    3,    3,    3,    3,    1,    3
     } ;
 
-static yyconst flex_int16_t yy_base[247] =
+static yyconst flex_int16_t yy_base[252] =
     {   0,
         0,    0,   39,   42,   81,  120,  159,  198,   47,   54,
-      310,  985,  307,  985,  304,    0,  276,  985,  985,  985,
-      985,   42,  985,  985,  289,  985,  281,  265,   31,  276,
-       32,  265,   33,  270,   45,  258,  276,  272,   48,  251,
-      263,  985,  985,  985,   73,  985,  985,   89,  985,  237,
+      315,  985,  312,  985,  309,    0,  281,  985,  985,  985,
+      985,   42,  985,  985,  294,  985,  286,  270,   31,  281,
+       32,  270,   33,  275,   45,  263,  281,  280,   48,  259,
+      271,  985,  985,  985,   73,  985,  985,   89,  985,  237,
       985,  985,  985,  276,  315,  985,  985,  985,  354,  985,
-      289,  985,   66,  288,  285,    0,  252,    0,  401,  985,
-      247,  256,   64,  245,  252,  239,  235,  238,  239,  234,
-      238,  254,  236,  246,  235,  244,  227,  231,   47,  235,
-      234,  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,  261,  985,  103,
-      985,  104,  985,  238,    0,  876,  221,  238,  233,  231,
-      214,  231,  226,  220,    0,  226,  212,  207,  213,  205,
-      207,  202,  200,  197,  211,  209,  193,  193,  199,  198,
-      192,  197,    0,  199,  100,  185,    0,  184,  201,    0,
-        0,  187,  178,  174,    0,  178,  187,  176,  168,  172,
-      184,  178,  158,  176,    0,    0,  151,  158,  159,  167,
-      154,  156,  151,  151,    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
+      297,  985,   66,  297,  291,    0,  258,    0,  401,  985,
+      253,  265,   64,  254,  261,  248,  244,  242,  242,  243,
+      238,  242,  258,  240,  250,  239,  248,  231,  235,   51,
+      239,  238,  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,  265,  985,
+      103,  985,  104,  985,  242,    0,  876,  225,  242,  237,
+      238,  221,  238,  233,  225,  228,    0,  230,  216,  210,
+      219,  212,  214,  206,  203,  200,  214,  212,  196,  196,
+      202,  201,  195,  200,    0,  202,  100,  189,    0,  189,
+      193,  204,    0,    0,  190,  185,  180,    0,  180,  189,
+      178,  170,  174,  187,  184,  167,  182,    0,    0,  156,
+      163,  161,  169,  167,  158,  161,  156,  152,    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[247] =
+static yyconst flex_int16_t yy_def[252] =
     {   0,
-      233,    1,  234,  234,  235,  235,  236,  236,  237,  237,
-      233,  233,  233,  233,  233,  238,  238,  233,  233,  233,
-      233,  238,  233,  233,  233,  233,  238,  238,  238,  238,
+      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,  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,  243,  243,
+      243,  243,  244,  238,  238,  244,  238,  244,  244,  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,  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,  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,  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,  233,  233,  233,  239,  233,  233,  239,  233,  240,
-      233,  233,  233,  240,  241,  233,  233,  233,  241,  233,
-      242,  233,  243,  233,  233,  238,  238,  238,  244,  233,
+      238
+    } ;
+
+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,   16,   37,   16,   16,   38,   39,   40,
+       16,   16,   41,   16,   42,   43,   44,   46,   47,   62,
+       46,   47,   68,   73,   69,  237,   62,   63,   46,   48,
+       49,   46,   48,   49,   63,   76,   80,   74,  122,   81,
+       89,   77,   83,   84,   90,   78,  123,  234,  124,  148,
+       85,   94,   95,   46,  233,   49,   46,  231,   49,   51,
+       52,  149,   94,   96,   97,   53,  230,   98,   99,  229,
+
+       51,   54,   52,  130,  131,  122,  122,  228,   98,   96,
+      100,   94,   95,  238,  123,  238,  238,   94,  232,   97,
+      232,  227,   94,   96,   97,   51,  180,   52,   51,   52,
+      181,  226,  225,   98,   53,  100,  224,  223,  222,   51,
+       54,   52,  221,  220,  219,   98,   99,   94,  218,   97,
+       94,   95,  217,  216,  215,  214,   98,   96,  100,  213,
+      212,   94,   96,   97,   51,  211,   52,   56,   57,  232,
+       58,  232,  210,  235,  209,  208,  207,  206,   56,   59,
+       60,   98,  205,  100,   94,   95,   94,  204,   97,   94,
+       95,  203,  202,  201,  200,   94,   96,   97,  199,  198,
+
+       94,   96,   97,   56,  197,   60,   56,   57,  196,   58,
+      195,  194,  193,  192,  191,  190,  189,   56,   59,   60,
+       94,  188,   97,  187,  186,   94,  185,   97,  184,  183,
+      182,  179,  178,  177,  176,  175,  174,  173,  172,  171,
+      170,  169,   56,  168,   60,  102,  103,  167,  166,  165,
+      164,  104,  163,  162,  161,  160,  102,  105,  103,  159,
+      158,  157,  156,  155,  154,  153,  152,  120,  151,  150,
+      147,  146,  145,  144,  143,  142,  141,  140,  139,  138,
+      137,  102,  136,  103,  106,  107,  135,  134,  133,  132,
+      108,  129,  128,  125,   65,  106,  105,  107,   64,  120,
+
+       92,   91,   88,   87,   86,   82,   79,   75,   72,   71,
+       70,   67,   65,   64,  238,  238,  238,  238,  238,  238,
+      106,  238,  107,  110,  111,  238,  112,  238,  238,  238,
+      238,  238,  238,  238,  110,  113,  114,  238,  238,  238,
       238,  238,  238,  238,  238,  238,  238,  238,  238,  238,
+      238,  238,  238,  238,  238,  238,  238,  238,  238,  110,
+      238,  114,  115,  116,  238,  117,  238,  238,  238,  238,
+      238,  238,  238,  115,  113,  118,  238,  238,  238,  238,
       238,  238,  238,  238,  238,  238,  238,  238,  238,  238,
-      238,  239,  233,  233,  239,  233,  239,  239,  239,  240,
+      238,  238,  238,  238,  238,  238,  238,  238,  115,  238,
 
-      233,  233,  233,  240,  240,  240,  240,  241,  233,  233,
-      233,  241,  233,  241,  241,  241,  241,  242,  233,  243,
-      233,  243,  233,  238,  245,  244,  238,  238,  238,  238,
+      118,  126,  126,  238,  126,  238,  238,  238,  126,  126,
+      126,  238,  126,  238,  126,  126,  126,  238,  126,  238,
+      238,  126,  238,  238,  238,  238,  238,  238,  238,  238,
       238,  238,  238,  238,  238,  238,  238,  238,  238,  238,
+      238,  238,  238,  238,  238,  238,  126,  102,  103,  238,
+      238,  238,  238,  104,  238,  238,  238,  238,  102,  105,
+      103,  238,  238,  238,  238,  238,  238,  238,  238,  238,
       238,  238,  238,  238,  238,  238,  238,  238,  238,  238,
+      238,  238,  238,  102,  238,  103,  106,  107,  238,  238,
+      238,  238,  108,  238,  238,  238,  238,  106,  105,  107,
+
       238,  238,  238,  238,  238,  238,  238,  238,  238,  238,
       238,  238,  238,  238,  238,  238,  238,  238,  238,  238,
+      238,  238,  106,  238,  107,  102,  103,  238,  238,  238,
+      238,  104,  238,  238,  238,  238,  102,  105,  103,  238,
       238,  238,  238,  238,  238,  238,  238,  238,  238,  238,
       238,  238,  238,  238,  238,  238,  238,  238,  238,  238,
+      238,  102,  238,  103,  102,  103,  238,  238,  238,  238,
+      104,  238,  238,  238,  238,  102,  105,  103,  238,  238,
+      238,  238,  238,  238,  238,  238,  238,  238,  238,  238,
       238,  238,  238,  238,  238,  238,  238,  238,  238,  238,
 
+      102,  238,  103,  102,  103,  238,  238,  238,  238,  104,
+      238,  238,  238,  238,  102,  105,  103,  238,  238,  238,
       238,  238,  238,  238,  238,  238,  238,  238,  238,  238,
+      238,  238,  238,  238,  238,  238,  238,  238,  238,  102,
+      238,  103,  110,  111,  238,  112,  238,  238,  238,  238,
+      238,  238,  238,  110,  113,  114,  238,  238,  238,  238,
       238,  238,  238,  238,  238,  238,  238,  238,  238,  238,
-      238,  238,  238,  238,  238,  238,  233,  238,  238,  246,
-      246,  233,    0,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233
-    } ;
+      238,  238,  238,  238,  238,  238,  238,  238,  110,  238,
+      114,  115,  116,  238,  117,  238,  238,  238,  238,  238,
+      238,  238,  115,  113,  118,  238,  238,  238,  238,  238,
 
-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,   16,   37,   16,   16,   38,   39,   40,
-       16,   16,   41,   16,   42,   43,   44,   46,   47,   62,
-       46,   47,   68,   73,   69,  232,   62,   63,   46,   48,
-       49,   46,   48,   49,   63,   76,   79,   74,  121,   80,
-       88,   77,   82,   83,   89,  146,  122,  227,  123,  227,
-       84,   93,   94,   46,  229,   49,   46,  147,   49,   51,
-       52,  228,   93,   95,   96,   53,  226,   97,   98,  225,
-
-       51,   54,   52,  129,  130,  121,  121,  224,   97,   95,
-       99,   93,   94,  233,  122,  233,  233,   93,  223,   96,
-      222,  221,   93,   95,   96,   51,  177,   52,   51,   52,
-      178,  220,  219,   97,   53,   99,  218,  217,  216,   51,
-       54,   52,  215,  214,  213,   97,   98,   93,  212,   96,
-       93,   94,  211,  210,  209,  208,   97,   95,   99,  207,
-      206,   93,   95,   96,   51,  205,   52,   56,   57,  227,
-       58,  227,  204,  230,  203,  202,  201,  200,   56,   59,
-       60,   97,  199,   99,   93,   94,   93,  198,   96,   93,
-       94,  197,  196,  195,  194,   93,   95,   96,  193,  192,
-
-       93,   95,   96,   56,  191,   60,   56,   57,  190,   58,
-      189,  188,  187,  186,  185,  184,  183,   56,   59,   60,
-       93,  182,   96,  181,  180,   93,  179,   96,  176,  175,
-      174,  173,  172,  171,  170,  169,  168,  167,  166,  165,
-      164,  163,   56,  162,   60,  101,  102,  161,  160,  159,
-      158,  103,  157,  156,  155,  154,  101,  104,  102,  153,
-      152,  151,  150,  119,  149,  148,  145,  144,  143,  142,
-      141,  140,  139,  138,  137,  136,  135,  134,  133,  132,
-      131,  101,  128,  102,  105,  106,  127,  124,   65,   64,
-      107,  119,   91,   90,   87,  105,  104,  106,   86,   85,
-
-       81,   78,   75,   72,   71,   70,   67,   65,   64,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      105,  233,  106,  109,  110,  233,  111,  233,  233,  233,
-      233,  233,  233,  233,  109,  112,  113,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  109,
-      233,  113,  114,  115,  233,  116,  233,  233,  233,  233,
-      233,  233,  233,  114,  112,  117,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  114,  233,
-
-      117,  125,  125,  233,  125,  233,  233,  233,  125,  125,
-      125,  233,  125,  233,  125,  125,  125,  233,  125,  233,
-      233,  125,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  125,  101,  102,  233,
-      233,  233,  233,  103,  233,  233,  233,  233,  101,  104,
-      102,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  101,  233,  102,  105,  106,  233,  233,
-      233,  233,  107,  233,  233,  233,  233,  105,  104,  106,
-
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  105,  233,  106,  101,  102,  233,  233,  233,
-      233,  103,  233,  233,  233,  233,  101,  104,  102,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  101,  233,  102,  101,  102,  233,  233,  233,  233,
-      103,  233,  233,  233,  233,  101,  104,  102,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-
-      101,  233,  102,  101,  102,  233,  233,  233,  233,  103,
-      233,  233,  233,  233,  101,  104,  102,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  101,
-      233,  102,  109,  110,  233,  111,  233,  233,  233,  233,
-      233,  233,  233,  109,  112,  113,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  109,  233,
-      113,  114,  115,  233,  116,  233,  233,  233,  233,  233,
-      233,  233,  114,  112,  117,  233,  233,  233,  233,  233,
-
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  114,  233,  117,
-      109,  110,  233,  111,  233,  233,  233,  233,  233,  233,
-      233,  109,  112,  113,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  109,  233,  113,  109,
-      110,  233,  111,  233,  233,  233,  233,  233,  233,  233,
-      109,  112,  113,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  109,  233,  113,  109,  110,
-
-      233,  111,  233,  233,  233,  233,  233,  233,  233,  109,
-      112,  113,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  109,  233,  113,  109,  110,  233,
-      111,  233,  233,  233,  233,  233,  233,  233,  109,  112,
-      113,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  109,  233,  113,  125,  125,  233,  125,
-      233,  233,  233,  125,  125,  125,  233,  125,  233,  125,
-      125,  125,  233,  125,  233,  233,  125,  233,  233,  233,
-
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  125,   45,   45,   45,   45,   45,   50,   50,   50,
+      238,  238,  238,  238,  238,  238,  238,  238,  238,  238,
+      238,  238,  238,  238,  238,  238,  238,  115,  238,  118,
+      110,  111,  238,  112,  238,  238,  238,  238,  238,  238,
+      238,  110,  113,  114,  238,  238,  238,  238,  238,  238,
+      238,  238,  238,  238,  238,  238,  238,  238,  238,  238,
+      238,  238,  238,  238,  238,  238,  110,  238,  114,  110,
+      111,  238,  112,  238,  238,  238,  238,  238,  238,  238,
+      110,  113,  114,  238,  238,  238,  238,  238,  238,  238,
+      238,  238,  238,  238,  238,  238,  238,  238,  238,  238,
+      238,  238,  238,  238,  238,  110,  238,  114,  110,  111,
+
+      238,  112,  238,  238,  238,  238,  238,  238,  238,  110,
+      113,  114,  238,  238,  238,  238,  238,  238,  238,  238,
+      238,  238,  238,  238,  238,  238,  238,  238,  238,  238,
+      238,  238,  238,  238,  110,  238,  114,  110,  111,  238,
+      112,  238,  238,  238,  238,  238,  238,  238,  110,  113,
+      114,  238,  238,  238,  238,  238,  238,  238,  238,  238,
+      238,  238,  238,  238,  238,  238,  238,  238,  238,  238,
+      238,  238,  238,  110,  238,  114,  126,  126,  238,  126,
+      238,  238,  238,  126,  126,  126,  238,  126,  238,  126,
+      126,  126,  238,  126,  238,  238,  126,  238,  238,  238,
+
+      238,  238,  238,  238,  238,  238,  238,  238,  238,  238,
+      238,  238,  238,  238,  238,  238,  238,  238,  238,  238,
+      238,  126,   45,   45,   45,   45,   45,   50,   50,   50,
        50,   50,   55,   55,   55,   55,   55,   61,   61,   61,
-       61,   61,   66,   66,   66,   92,   92,   92,   92,   92,
-      100,  100,  100,  100,  100,  108,  108,  108,  108,  108,
-      118,  118,  118,  118,  120,  120,  120,  120,  120,  126,
-      233,  126,  126,  126,  125,  233,  125,  125,  125,  231,
-      231,  231,  233,  231,   11,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233
+       61,   61,   66,   66,   66,   93,   93,   93,   93,   93,
+      101,  101,  101,  101,  101,  109,  109,  109,  109,  109,
+      119,  119,  119,  119,  121,  121,  121,  121,  121,  127,
+      238,  127,  127,  127,  126,  238,  126,  126,  126,  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
     } ;
 
 static yyconst flex_int16_t yy_chk[1033] =
@@ -612,36 +614,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,  231,   10,    9,    3,    3,
+        4,    4,   22,   29,   22,  236,   10,    9,    3,    3,
         3,    4,    4,    4,   10,   31,   33,   29,   63,   33,
-       39,   31,   35,   35,   39,   89,   63,  219,   63,  219,
-       35,   45,   45,    3,  223,    3,    4,   89,    4,    5,
-        5,  222,   45,   45,   45,    5,  218,   48,   48,  217,
-
-        5,    5,    5,   73,   73,  120,  122,  215,   48,   48,
-       48,   92,   92,  120,  122,  120,  122,   45,  214,   45,
-      212,  210,   92,   92,   92,    5,  155,    5,    6,    6,
-      155,  208,  207,   48,    6,   48,  206,  204,  202,    6,
-        6,    6,  201,  200,  198,   95,   95,   92,  197,   92,
-       97,   97,  196,  195,  194,  193,   95,   95,   95,  192,
-      190,   97,   97,   97,    6,  189,    6,    7,    7,  227,
-        7,  227,  188,  227,  187,  186,  184,  183,    7,    7,
-        7,   95,  182,   95,   98,   98,   97,  181,   97,   99,
-       99,  180,  179,  178,  177,   98,   98,   98,  174,  173,
-
-       99,   99,   99,    7,  172,    7,    8,    8,  171,    8,
-      170,  169,  168,  167,  166,  164,  163,    8,    8,    8,
-       98,  162,   98,  159,  158,   99,  156,   99,  154,  152,
-      151,  150,  149,  148,  147,  146,  145,  144,  143,  142,
-      141,  140,    8,  139,    8,   50,   50,  138,  137,  136,
-      134,   50,  133,  132,  131,  130,   50,   50,   50,  129,
-      128,  127,  124,  118,   91,   90,   88,   87,   86,   85,
-       84,   83,   82,   81,   80,   79,   78,   77,   76,   75,
-       74,   50,   72,   50,   54,   54,   71,   67,   65,   64,
-       54,   61,   41,   40,   38,   54,   54,   54,   37,   36,
-
-       34,   32,   30,   28,   27,   25,   17,   15,   13,   11,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+       39,   31,   35,   35,   39,   31,   63,  228,   63,   90,
+       35,   45,   45,    3,  227,    3,    4,  223,    4,    5,
+        5,   90,   45,   45,   45,    5,  222,   48,   48,  220,
+
+        5,    5,    5,   73,   73,  121,  123,  219,   48,   48,
+       48,   93,   93,  121,  123,  121,  123,   45,  224,   45,
+      224,  217,   93,   93,   93,    5,  157,    5,    6,    6,
+      157,  215,  213,   48,    6,   48,  212,  211,  209,    6,
+        6,    6,  207,  206,  205,   96,   96,   93,  203,   93,
+       98,   98,  201,  200,  199,  198,   96,   96,   96,  197,
+      196,   98,   98,   98,    6,  194,    6,    7,    7,  232,
+        7,  232,  193,  232,  192,  191,  190,  188,    7,    7,
+        7,   96,  187,   96,   99,   99,   98,  186,   98,  100,
+      100,  185,  184,  183,  182,   99,   99,   99,  181,  180,
+
+      100,  100,  100,    7,  177,    7,    8,    8,  176,    8,
+      175,  174,  173,  172,  171,  170,  169,    8,    8,    8,
+       99,  167,   99,  166,  165,  100,  162,  100,  161,  160,
+      158,  156,  154,  153,  152,  151,  150,  149,  148,  147,
+      146,  145,    8,  144,    8,   50,   50,  143,  142,  141,
+      140,   50,  139,  138,  136,  135,   50,   50,   50,  134,
+      133,  132,  131,  130,  129,  128,  125,  119,   92,   91,
+       89,   88,   87,   86,   85,   84,   83,   82,   81,   80,
+       79,   50,   78,   50,   54,   54,   77,   76,   75,   74,
+       54,   72,   71,   67,   65,   54,   54,   54,   64,   61,
+
+       41,   40,   38,   37,   36,   34,   32,   30,   28,   27,
+       25,   17,   15,   13,   11,    0,    0,    0,    0,    0,
        54,    0,   54,   55,   55,    0,   55,    0,    0,    0,
         0,    0,    0,    0,   55,   55,   55,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
@@ -655,72 +657,72 @@ static yyconst flex_int16_t yy_chk[1033] =
        69,    0,   69,    0,   69,   69,   69,    0,   69,    0,
         0,   69,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,   69,  100,  100,    0,
-        0,    0,    0,  100,    0,    0,    0,    0,  100,  100,
-      100,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,   69,  101,  101,    0,
+        0,    0,    0,  101,    0,    0,    0,    0,  101,  101,
+      101,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  100,    0,  100,  104,  104,    0,    0,
-        0,    0,  104,    0,    0,    0,    0,  104,  104,  104,
+        0,    0,    0,  101,    0,  101,  105,  105,    0,    0,
+        0,    0,  105,    0,    0,    0,    0,  105,  105,  105,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  104,    0,  104,  105,  105,    0,    0,    0,
-        0,  105,    0,    0,    0,    0,  105,  105,  105,    0,
+        0,    0,  105,    0,  105,  106,  106,    0,    0,    0,
+        0,  106,    0,    0,    0,    0,  106,  106,  106,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  105,    0,  105,  106,  106,    0,    0,    0,    0,
-      106,    0,    0,    0,    0,  106,  106,  106,    0,    0,
+        0,  106,    0,  106,  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,  108,    0,    0,    0,    0,
-        0,    0,    0,  108,  108,  108,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  108,
+        0,  108,  109,  109,    0,  109,    0,    0,    0,    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,  112,  112,    0,  112,    0,    0,    0,    0,    0,
-        0,    0,  112,  112,  112,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  109,    0,
+      109,  113,  113,    0,  113,    0,    0,    0,    0,    0,
+        0,    0,  113,  113,  113,    0,    0,    0,    0,    0,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  112,    0,  112,
-      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,  113,    0,  113,
+      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,  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,  115,    0,  115,  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,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  115,    0,  115,  116,  116,
+        0,    0,    0,    0,    0,  116,    0,  116,  117,  117,
 
-        0,  116,    0,    0,    0,    0,    0,    0,    0,  116,
-      116,  116,    0,    0,    0,    0,    0,    0,    0,    0,
+        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,  126,  126,    0,  126,
-        0,    0,    0,  126,  126,  126,    0,  126,    0,  126,
-      126,  126,    0,  126,    0,    0,  126,    0,    0,    0,
+        0,    0,    0,  118,    0,  118,  127,  127,    0,  127,
+        0,    0,    0,  127,  127,  127,    0,  127,    0,  127,
+      127,  127,    0,  127,    0,    0,  127,    0,    0,    0,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  126,  234,  234,  234,  234,  234,  235,  235,  235,
-      235,  235,  236,  236,  236,  236,  236,  237,  237,  237,
-      237,  237,  238,  238,  238,  239,  239,  239,  239,  239,
-      240,  240,  240,  240,  240,  241,  241,  241,  241,  241,
-      242,  242,  242,  242,  243,  243,  243,  243,  243,  244,
-        0,  244,  244,  244,  245,    0,  245,  245,  245,  246,
-      246,  246,    0,  246,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233
+        0,  127,  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
     } ;
 
 /* The intent behind this definition is that it'll catch
@@ -889,7 +891,7 @@ static void pbcwhere(const char *text, int *line, int *col )
 #define        STORE_POS
 #define        STORE_LOC
 #endif
-#line 892 "ael_lex.c"
+#line 894 "ael_lex.c"
 
 #define INITIAL 0
 #define paren 1
@@ -1133,7 +1135,7 @@ YY_DECL
 #line 181 "ael.flex"
 
 
-#line 1136 "ael_lex.c"
+#line 1138 "ael_lex.c"
 
     yylval = yylval_param;
 
@@ -1196,13 +1198,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 >= 234 )
+                               if ( yy_current_state >= 239 )
                                        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 != 233 );
+               while ( yy_current_state != 238 );
                yy_cp = yyg->yy_last_accepting_cpos;
                yy_current_state = yyg->yy_last_accepting_state;
 
@@ -1300,174 +1302,179 @@ 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_IGNOREPAT;}
+{ STORE_POS; return KW_GLOBALS;}
        YY_BREAK
 case 19:
 YY_RULE_SETUP
 #line 201 "ael.flex"
-{ STORE_POS; return KW_SWITCH;}
+{ STORE_POS; return KW_IGNOREPAT;}
        YY_BREAK
 case 20:
 YY_RULE_SETUP
 #line 202 "ael.flex"
-{ STORE_POS; return KW_IF;}
+{ STORE_POS; return KW_SWITCH;}
        YY_BREAK
 case 21:
 YY_RULE_SETUP
 #line 203 "ael.flex"
-{ STORE_POS; return KW_IFTIME;}
+{ STORE_POS; return KW_IF;}
        YY_BREAK
 case 22:
 YY_RULE_SETUP
 #line 204 "ael.flex"
-{ STORE_POS; return KW_RANDOM;}
+{ STORE_POS; return KW_IFTIME;}
        YY_BREAK
 case 23:
 YY_RULE_SETUP
 #line 205 "ael.flex"
-{ STORE_POS; return KW_REGEXTEN;}
+{ STORE_POS; return KW_RANDOM;}
        YY_BREAK
 case 24:
 YY_RULE_SETUP
 #line 206 "ael.flex"
-{ STORE_POS; return KW_HINT;}
+{ STORE_POS; return KW_REGEXTEN;}
        YY_BREAK
 case 25:
 YY_RULE_SETUP
 #line 207 "ael.flex"
-{ STORE_POS; return KW_ELSE;}
+{ STORE_POS; return KW_HINT;}
        YY_BREAK
 case 26:
 YY_RULE_SETUP
 #line 208 "ael.flex"
-{ STORE_POS; return KW_GOTO;}
+{ STORE_POS; return KW_ELSE;}
        YY_BREAK
 case 27:
 YY_RULE_SETUP
 #line 209 "ael.flex"
-{ STORE_POS; return KW_JUMP;}
+{ STORE_POS; return KW_GOTO;}
        YY_BREAK
 case 28:
 YY_RULE_SETUP
 #line 210 "ael.flex"
-{ STORE_POS; return KW_RETURN;}
+{ STORE_POS; return KW_JUMP;}
        YY_BREAK
 case 29:
 YY_RULE_SETUP
 #line 211 "ael.flex"
-{ STORE_POS; return KW_BREAK;}
+{ STORE_POS; return KW_RETURN;}
        YY_BREAK
 case 30:
 YY_RULE_SETUP
 #line 212 "ael.flex"
-{ STORE_POS; return KW_CONTINUE;}
+{ STORE_POS; return KW_BREAK;}
        YY_BREAK
 case 31:
 YY_RULE_SETUP
 #line 213 "ael.flex"
-{ STORE_POS; return KW_FOR;}
+{ STORE_POS; return KW_CONTINUE;}
        YY_BREAK
 case 32:
 YY_RULE_SETUP
 #line 214 "ael.flex"
-{ STORE_POS; return KW_WHILE;}
+{ STORE_POS; return KW_FOR;}
        YY_BREAK
 case 33:
 YY_RULE_SETUP
 #line 215 "ael.flex"
-{ STORE_POS; return KW_CASE;}
+{ STORE_POS; return KW_WHILE;}
        YY_BREAK
 case 34:
 YY_RULE_SETUP
 #line 216 "ael.flex"
-{ STORE_POS; return KW_DEFAULT;}
+{ STORE_POS; return KW_CASE;}
        YY_BREAK
 case 35:
 YY_RULE_SETUP
 #line 217 "ael.flex"
-{ STORE_POS; return KW_PATTERN;}
+{ STORE_POS; return KW_DEFAULT;}
        YY_BREAK
 case 36:
 YY_RULE_SETUP
 #line 218 "ael.flex"
-{ STORE_POS; return KW_CATCH;}
+{ STORE_POS; return KW_PATTERN;}
        YY_BREAK
 case 37:
 YY_RULE_SETUP
 #line 219 "ael.flex"
-{ STORE_POS; return KW_SWITCHES;}
+{ STORE_POS; return KW_CATCH;}
        YY_BREAK
 case 38:
 YY_RULE_SETUP
 #line 220 "ael.flex"
-{ STORE_POS; return KW_ESWITCHES;}
+{ STORE_POS; return KW_SWITCHES;}
        YY_BREAK
 case 39:
 YY_RULE_SETUP
 #line 221 "ael.flex"
-{ STORE_POS; return KW_INCLUDES;}
+{ STORE_POS; return KW_ESWITCHES;}
        YY_BREAK
 case 40:
 YY_RULE_SETUP
 #line 222 "ael.flex"
-{ BEGIN(comment); my_col += 2; }
+{ STORE_POS; return KW_INCLUDES;}
        YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 224 "ael.flex"
-{ my_col += yyleng; }
+#line 223 "ael.flex"
+{ BEGIN(comment); my_col += 2; }
        YY_BREAK
 case 42:
-/* rule 42 can match eol */
 YY_RULE_SETUP
 #line 225 "ael.flex"
-{ ++my_lineno; my_col=1;}
+{ my_col += yyleng; }
        YY_BREAK
 case 43:
+/* rule 43 can match eol */
 YY_RULE_SETUP
 #line 226 "ael.flex"
-{ my_col += yyleng; }
+{ ++my_lineno; my_col=1;}
        YY_BREAK
 case 44:
-/* rule 44 can match eol */
 YY_RULE_SETUP
 #line 227 "ael.flex"
-{ ++my_lineno; my_col=1;}
+{ my_col += yyleng; }
        YY_BREAK
 case 45:
+/* rule 45 can match eol */
 YY_RULE_SETUP
 #line 228 "ael.flex"
-{ my_col += 2; BEGIN(INITIAL); }
+{ ++my_lineno; my_col=1;}
        YY_BREAK
 case 46:
-/* rule 46 can match eol */
 YY_RULE_SETUP
-#line 230 "ael.flex"
-{ my_lineno++; my_col = 1; }
+#line 229 "ael.flex"
+{ my_col += 2; BEGIN(INITIAL); }
        YY_BREAK
 case 47:
+/* rule 47 can match eol */
 YY_RULE_SETUP
 #line 231 "ael.flex"
-{ my_col += yyleng; }
+{ my_lineno++; my_col = 1; }
        YY_BREAK
 case 48:
 YY_RULE_SETUP
 #line 232 "ael.flex"
-{ my_col += (yyleng*8)-(my_col%8); }
+{ my_col += yyleng; }
        YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 234 "ael.flex"
+#line 233 "ael.flex"
+{ my_col += (yyleng*8)-(my_col%8); }
+       YY_BREAK
+case 50:
+YY_RULE_SETUP
+#line 235 "ael.flex"
 {
                STORE_POS;
                yylval->str = strdup(yytext);
@@ -1482,10 +1489,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 50:
-/* rule 50 can match eol */
+case 51:
+/* rule 51 can match eol */
 YY_RULE_SETUP
-#line 250 "ael.flex"
+#line 251 "ael.flex"
 {
                if ( pbcpop(')') ) {    /* error */
                        STORE_LOC;
@@ -1508,10 +1515,10 @@ YY_RULE_SETUP
                }
        }
        YY_BREAK
-case 51:
-/* rule 51 can match eol */
+case 52:
+/* rule 52 can match eol */
 YY_RULE_SETUP
-#line 272 "ael.flex"
+#line 273 "ael.flex"
 {
                char c = yytext[yyleng-1];
                if (c == '(')
@@ -1520,10 +1527,10 @@ YY_RULE_SETUP
                yymore();
        }
        YY_BREAK
-case 52:
-/* rule 52 can match eol */
+case 53:
+/* rule 53 can match eol */
 YY_RULE_SETUP
-#line 280 "ael.flex"
+#line 281 "ael.flex"
 {
                char c = yytext[yyleng-1];
                if ( pbcpop(c))  { /* error */
@@ -1545,10 +1552,10 @@ YY_RULE_SETUP
         * of the (external) call, which happens when parencount == 0
         * before the decrement.
         */
-case 53:
-/* rule 53 can match eol */
+case 54:
+/* rule 54 can match eol */
 YY_RULE_SETUP
-#line 302 "ael.flex"
+#line 303 "ael.flex"
 {
                char c = yytext[yyleng-1];
                if (c == '(')
@@ -1557,10 +1564,10 @@ YY_RULE_SETUP
                yymore();
        }
        YY_BREAK
-case 54:
-/* rule 54 can match eol */
+case 55:
+/* rule 55 can match eol */
 YY_RULE_SETUP
-#line 310 "ael.flex"
+#line 311 "ael.flex"
 {
                if ( pbcpop(')') ) { /* error */
                        STORE_LOC;
@@ -1585,10 +1592,10 @@ YY_RULE_SETUP
                }
        }
        YY_BREAK
-case 55:
-/* rule 55 can match eol */
+case 56:
+/* rule 56 can match eol */
 YY_RULE_SETUP
-#line 334 "ael.flex"
+#line 335 "ael.flex"
 {
                if( parencount != 0) { /* printf("Folding in a comma!\n"); */
                        yymore();
@@ -1603,10 +1610,10 @@ YY_RULE_SETUP
                }
        }
        YY_BREAK
-case 56:
-/* rule 56 can match eol */
+case 57:
+/* rule 57 can match eol */
 YY_RULE_SETUP
-#line 348 "ael.flex"
+#line 349 "ael.flex"
 {
                char c = yytext[yyleng-1];
                if ( pbcpop(c) ) { /* error */
@@ -1624,20 +1631,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 57:
-/* rule 57 can match eol */
+case 58:
+/* rule 58 can match eol */
 YY_RULE_SETUP
-#line 365 "ael.flex"
+#line 366 "ael.flex"
 {
                char c = yytext[yyleng-1];
                yymore();
                pbcpush(c);
        }
        YY_BREAK
-case 58:
-/* rule 58 can match eol */
+case 59:
+/* rule 59 can match eol */
 YY_RULE_SETUP
-#line 371 "ael.flex"
+#line 372 "ael.flex"
 {
                char c = yytext[yyleng-1];
                if ( pbcpop(c) ) { /* error */
@@ -1650,10 +1657,10 @@ YY_RULE_SETUP
                yymore();
        }
        YY_BREAK
-case 59:
-/* rule 59 can match eol */
+case 60:
+/* rule 60 can match eol */
 YY_RULE_SETUP
-#line 383 "ael.flex"
+#line 384 "ael.flex"
 {
                STORE_LOC;
                yylval->str = strdup(yytext);
@@ -1663,10 +1670,10 @@ YY_RULE_SETUP
                return word;
        }
        YY_BREAK
-case 60:
-/* rule 60 can match eol */
+case 61:
+/* rule 61 can match eol */
 YY_RULE_SETUP
-#line 392 "ael.flex"
+#line 393 "ael.flex"
 {
                char fnamebuf[1024],*p1,*p2;
                int glob_ret;
@@ -1712,7 +1719,7 @@ case YY_STATE_EOF(paren):
 case YY_STATE_EOF(semic):
 case YY_STATE_EOF(argg):
 case YY_STATE_EOF(comment):
-#line 433 "ael.flex"
+#line 434 "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) {
@@ -1747,12 +1754,12 @@ case YY_STATE_EOF(comment):
                }
        }
        YY_BREAK
-case 61:
+case 62:
 YY_RULE_SETUP
-#line 467 "ael.flex"
+#line 468 "ael.flex"
 ECHO;
        YY_BREAK
-#line 1755 "ael_lex.c"
+#line 1762 "ael_lex.c"
 
        case YY_END_OF_BUFFER:
                {
@@ -2037,7 +2044,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 >= 234 )
+                       if ( yy_current_state >= 239 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -2066,11 +2073,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 >= 234 )
+               if ( yy_current_state >= 239 )
                        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 == 233);
+       yy_is_jam = (yy_current_state == 238);
 
        return yy_is_jam ? 0 : yy_current_state;
 }
@@ -2888,7 +2895,7 @@ void ael_yyfree (void * ptr , yyscan_t yyscanner)
 #undef YY_DECL_IS_OURS
 #undef YY_DECL
 #endif
-#line 467 "ael.flex"
+#line 468 "ael.flex"
 
 
 
index f4f85eca8e2b73db039d793a91bddaac9afc9730..96719fe54c1791fb45c9dad5e1d5d7030cb9f83b 100644 (file)
@@ -2245,9 +2245,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_ERROR,"Error: file %s, line %d-%d: The context name (%s) is also declared in file %s, line %d-%d!\n",
+                                               ast_log(LOG_ERROR,"Error: 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);
                                                errs++;
                                        }
@@ -3955,7 +3955,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) {
index 80d17af8d993875ba2b4d5382cccd8e2c1a08848..6c8f3d39055da1bd54f7a9ea76b63f24110ac072 100644 (file)
@@ -88,6 +88,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);
@@ -312,6 +313,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)