Merged revisions 177225 via svnmerge from
[asterisk/asterisk.git] / res / ael / ael.tab.c
index 3a478c5..34900ac 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,
-     KW_LOCAL = 296,
-     word = 297
+     KW_EXTEND = 279,
+     EXTENMARK = 280,
+     KW_GOTO = 281,
+     KW_JUMP = 282,
+     KW_RETURN = 283,
+     KW_BREAK = 284,
+     KW_CONTINUE = 285,
+     KW_REGEXTEN = 286,
+     KW_HINT = 287,
+     KW_FOR = 288,
+     KW_WHILE = 289,
+     KW_CASE = 290,
+     KW_PATTERN = 291,
+     KW_DEFAULT = 292,
+     KW_CATCH = 293,
+     KW_SWITCHES = 294,
+     KW_ESWITCHES = 295,
+     KW_INCLUDES = 296,
+     KW_LOCAL = 297,
+     word = 298
    };
 #endif
 /* Tokens.  */
 #define KW_ELSE 276
 #define KW_RANDOM 277
 #define KW_ABSTRACT 278
-#define EXTENMARK 279
-#define KW_GOTO 280
-#define KW_JUMP 281
-#define KW_RETURN 282
-#define KW_BREAK 283
-#define KW_CONTINUE 284
-#define KW_REGEXTEN 285
-#define KW_HINT 286
-#define KW_FOR 287
-#define KW_WHILE 288
-#define KW_CASE 289
-#define KW_PATTERN 290
-#define KW_DEFAULT 291
-#define KW_CATCH 292
-#define KW_SWITCHES 293
-#define KW_ESWITCHES 294
-#define KW_INCLUDES 295
-#define KW_LOCAL 296
-#define word 297
+#define KW_EXTEND 279
+#define EXTENMARK 280
+#define KW_GOTO 281
+#define KW_JUMP 282
+#define KW_RETURN 283
+#define KW_BREAK 284
+#define KW_CONTINUE 285
+#define KW_REGEXTEN 286
+#define KW_HINT 287
+#define KW_FOR 288
+#define KW_WHILE 289
+#define KW_CASE 290
+#define KW_PATTERN 291
+#define KW_DEFAULT 292
+#define KW_CATCH 293
+#define KW_SWITCHES 294
+#define KW_ESWITCHES 295
+#define KW_INCLUDES 296
+#define KW_LOCAL 297
+#define word 298
 
 
 
@@ -196,7 +198,12 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 #include <string.h>
 
 #include "asterisk/logger.h"
+#include "asterisk/lock.h"
+#include "asterisk/hashtab.h"
 #include "asterisk/ael_structs.h"
+#include "asterisk/utils.h"
+
+extern struct ast_flags ast_compat;
 
 pval * linku1(pval *head, pval *tail);
 static void set_dads(pval *dad, pval *child_list);
@@ -211,7 +218,7 @@ extern char *my_file;
 #ifdef AAL_ARGCHECK
 int ael_is_funcname(char *name);
 #endif
-static char *ael_token_subst(char *mess);
+static char *ael_token_subst(const char *mess);
 
 
 
@@ -235,14 +242,14 @@ static char *ael_token_subst(char *mess);
 
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 typedef union YYSTYPE
-#line 54 "ael.y"
+#line 59 "ael.y"
 {
        int     intval;         /* integer value, typically flags */
        char    *str;           /* strings */
        struct pval *pval;      /* full objects */
 }
 /* Line 187 of yacc.c.  */
-#line 246 "ael.tab.c"
+#line 253 "ael.tab.c"
        YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
@@ -264,7 +271,7 @@ typedef struct YYLTYPE
 
 
 /* Copy the second part of user declarations.  */
-#line 60 "ael.y"
+#line 65 "ael.y"
 
        /* declaring these AFTER the union makes things a lot simpler! */
 void yyerror(YYLTYPE *locp, struct parse_io *parseio, char const *s);
@@ -287,7 +294,7 @@ static pval *update_last(pval *, YYLTYPE *);
 
 
 /* Line 216 of yacc.c.  */
-#line 291 "ael.tab.c"
+#line 298 "ael.tab.c"
 
 #ifdef short
 # undef short
@@ -502,22 +509,22 @@ union yyalloc
 #endif
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  14
+#define YYFINAL  17
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   300
+#define YYLAST   373
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  43
+#define YYNTOKENS  44
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  56
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  137
+#define YYNRULES  142
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  275
+#define YYNSTATES  281
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   297
+#define YYMAXUTOK   298
 
 #define YYTRANSLATE(YYX)                                               \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -554,7 +561,7 @@ static const yytype_uint8 yytranslate[] =
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42
+      35,    36,    37,    38,    39,    40,    41,    42,    43
 };
 
 #if YYDEBUG
@@ -563,89 +570,93 @@ static const yytype_uint8 yytranslate[] =
 static const yytype_uint16 yyprhs[] =
 {
        0,     0,     3,     5,     7,    10,    13,    15,    17,    19,
-      21,    23,    25,    32,    34,    35,    44,    49,    50,    53,
-      56,    57,    63,    64,    71,    72,    74,    78,    81,    82,
-      85,    88,    90,    92,    94,    96,    98,   100,   102,   105,
-     107,   112,   116,   121,   129,   138,   139,   142,   145,   151,
-     153,   161,   162,   167,   170,   173,   178,   180,   183,   185,
-     188,   192,   194,   197,   201,   203,   206,   210,   216,   220,
-     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
+      21,    23,    25,    32,    34,    35,    37,    40,    43,    52,
+      57,    58,    61,    64,    65,    71,    72,    79,    80,    82,
+      86,    89,    90,    93,    96,    98,   100,   102,   104,   106,
+     108,   110,   113,   115,   120,   124,   130,   135,   143,   152,
+     153,   156,   159,   165,   167,   175,   176,   181,   184,   187,
+     192,   194,   197,   199,   202,   206,   210,   212,   215,   219,
+     221,   224,   228,   234,   238,   240,   242,   246,   250,   253,
+     254,   255,   256,   269,   273,   275,   279,   282,   285,   286,
+     292,   295,   298,   301,   305,   307,   310,   311,   313,   317,
+     321,   327,   333,   339,   345,   346,   349,   352,   357,   358,
+     364,   368,   369,   373,   377,   380,   382,   383,   385,   386,
+     390,   391,   394,   399,   403,   408,   409,   412,   414,   416,
+     422,   427,   432,   433,   437,   443,   446,   448,   452,   455,
+     459,   462,   467
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int8 yyrhs[] =
 {
-      44,     0,    -1,    45,    -1,    46,    -1,    45,    46,    -1,
-      45,     1,    -1,    48,    -1,    50,    -1,    51,    -1,     8,
-      -1,    42,    -1,    36,    -1,    49,     3,    47,     4,    58,
-       5,    -1,    23,    -1,    -1,    15,    42,     6,    57,     7,
-       4,    91,     5,    -1,    16,     4,    52,     5,    -1,    -1,
-      53,    52,    -1,    52,     1,    -1,    -1,    42,     9,    54,
-      42,     8,    -1,    -1,    41,    42,     9,    56,    42,     8,
-      -1,    -1,    42,    -1,    57,    10,    42,    -1,    57,     1,
-      -1,    -1,    59,    58,    -1,    58,     1,    -1,    61,    -1,
-      98,    -1,    93,    -1,    94,    -1,    60,    -1,    53,    -1,
-      55,    -1,    42,     1,    -1,     8,    -1,    17,    24,    42,
-       8,    -1,    42,    24,    73,    -1,    30,    42,    24,    73,
-      -1,    31,     6,    69,     7,    42,    24,    73,    -1,    30,
-      31,     6,    69,     7,    42,    24,    73,    -1,    -1,    73,
-      62,    -1,    62,     1,    -1,    70,    11,    70,    11,    70,
-      -1,    42,    -1,    63,    13,    70,    13,    70,    13,    70,
-      -1,    -1,     6,    66,    68,     7,    -1,    19,    65,    -1,
-      22,    65,    -1,    20,     6,    64,     7,    -1,    42,    -1,
-      42,    42,    -1,    42,    -1,    69,    42,    -1,    69,    12,
-      42,    -1,    42,    -1,    42,    42,    -1,    42,    42,    42,
-      -1,    42,    -1,    42,    42,    -1,    71,    11,    42,    -1,
-      18,    65,     4,    89,     5,    -1,     4,    62,     5,    -1,
-      53,    -1,    55,    -1,    25,    79,     8,    -1,    26,    81,
-       8,    -1,    42,    11,    -1,    -1,    -1,    -1,    32,     6,
-      74,    42,     8,    75,    42,     8,    76,    42,     7,    73,
-      -1,    33,    65,    73,    -1,    72,    -1,    12,    82,     8,
-      -1,    86,     8,    -1,    42,     8,    -1,    -1,    86,     9,
-      77,    42,     8,    -1,    28,     8,    -1,    27,     8,    -1,
-      29,     8,    -1,    67,    73,    78,    -1,     8,    -1,    21,
-      73,    -1,    -1,    71,    -1,    71,    13,    71,    -1,    71,
-      10,    71,    -1,    71,    13,    71,    13,    71,    -1,    71,
-      10,    71,    10,    71,    -1,    36,    13,    71,    13,    71,
-      -1,    36,    10,    71,    10,    71,    -1,    -1,    10,    42,
-      -1,    71,    80,    -1,    71,    80,    14,    47,    -1,    -1,
-      42,     6,    83,    88,     7,    -1,    42,     6,     7,    -1,
-      -1,    42,     6,    85,    -1,    84,    88,     7,    -1,    84,
-       7,    -1,    42,    -1,    -1,    68,    -1,    -1,    88,    10,
-      87,    -1,    -1,    90,    89,    -1,    34,    42,    11,    62,
-      -1,    36,    11,    62,    -1,    35,    42,    11,    62,    -1,
-      -1,    92,    91,    -1,    73,    -1,    98,    -1,    37,    42,
-       4,    62,     5,    -1,    38,     4,    95,     5,    -1,    39,
-       4,    95,     5,    -1,    -1,    42,     8,    95,    -1,    42,
-      14,    42,     8,    95,    -1,    95,     1,    -1,    47,    -1,
-      47,    13,    64,    -1,    96,     8,    -1,    97,    96,     8,
-      -1,    97,     1,    -1,    40,     4,    97,     5,    -1,    40,
-       4,     5,    -1
+      45,     0,    -1,    46,    -1,    47,    -1,    46,    47,    -1,
+      46,     1,    -1,    49,    -1,    51,    -1,    52,    -1,     8,
+      -1,    43,    -1,    37,    -1,    50,     3,    48,     4,    59,
+       5,    -1,    23,    -1,    -1,    24,    -1,    24,    23,    -1,
+      23,    24,    -1,    15,    43,     6,    58,     7,     4,    92,
+       5,    -1,    16,     4,    53,     5,    -1,    -1,    53,    54,
+      -1,     1,    53,    -1,    -1,    43,     9,    55,    43,     8,
+      -1,    -1,    42,    43,     9,    57,    43,     8,    -1,    -1,
+      43,    -1,    58,    10,    43,    -1,    58,     1,    -1,    -1,
+      59,    60,    -1,     1,    59,    -1,    62,    -1,    99,    -1,
+      94,    -1,    95,    -1,    61,    -1,    54,    -1,    56,    -1,
+      43,     1,    -1,     8,    -1,    17,    25,    43,     8,    -1,
+      43,    25,    74,    -1,    43,    14,    43,    25,    74,    -1,
+      31,    43,    25,    74,    -1,    32,     6,    70,     7,    43,
+      25,    74,    -1,    31,    32,     6,    70,     7,    43,    25,
+      74,    -1,    -1,    63,    74,    -1,     1,    63,    -1,    71,
+      11,    71,    11,    71,    -1,    43,    -1,    64,    13,    71,
+      13,    71,    13,    71,    -1,    -1,     6,    67,    69,     7,
+      -1,    19,    66,    -1,    22,    66,    -1,    20,     6,    65,
+       7,    -1,    43,    -1,    43,    43,    -1,    43,    -1,    70,
+      43,    -1,    70,    11,    43,    -1,    70,    12,    43,    -1,
+      43,    -1,    43,    43,    -1,    43,    43,    43,    -1,    43,
+      -1,    43,    43,    -1,    72,    11,    43,    -1,    18,    66,
+       4,    90,     5,    -1,     4,    63,     5,    -1,    54,    -1,
+      56,    -1,    26,    80,     8,    -1,    27,    82,     8,    -1,
+      43,    11,    -1,    -1,    -1,    -1,    33,     6,    75,    43,
+       8,    76,    43,     8,    77,    43,     7,    74,    -1,    34,
+      66,    74,    -1,    73,    -1,    12,    83,     8,    -1,    87,
+       8,    -1,    43,     8,    -1,    -1,    87,     9,    78,    43,
+       8,    -1,    29,     8,    -1,    28,     8,    -1,    30,     8,
+      -1,    68,    74,    79,    -1,     8,    -1,    21,    74,    -1,
+      -1,    72,    -1,    72,    13,    72,    -1,    72,    10,    72,
+      -1,    72,    13,    72,    13,    72,    -1,    72,    10,    72,
+      10,    72,    -1,    37,    13,    72,    13,    72,    -1,    37,
+      10,    72,    10,    72,    -1,    -1,    10,    43,    -1,    72,
+      81,    -1,    72,    81,    14,    48,    -1,    -1,    43,     6,
+      84,    89,     7,    -1,    43,     6,     7,    -1,    -1,    43,
+       6,    86,    -1,    85,    89,     7,    -1,    85,     7,    -1,
+      43,    -1,    -1,    69,    -1,    -1,    89,    10,    88,    -1,
+      -1,    90,    91,    -1,    35,    43,    11,    63,    -1,    37,
+      11,    63,    -1,    36,    43,    11,    63,    -1,    -1,    92,
+      93,    -1,    74,    -1,    99,    -1,    38,    43,     4,    63,
+       5,    -1,    39,     4,    96,     5,    -1,    40,     4,    96,
+       5,    -1,    -1,    96,    43,     8,    -1,    96,    43,    14,
+      43,     8,    -1,     1,    96,    -1,    48,    -1,    48,    13,
+      65,    -1,    97,     8,    -1,    98,    97,     8,    -1,    98,
+       1,    -1,    41,     4,    98,     5,    -1,    41,     4,     5,
+      -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   186,   186,   189,   190,   191,   194,   195,   196,   197,
-     200,   201,   204,   219,   220,   223,   229,   235,   236,   237,
-     240,   240,   246,   246,   253,   254,   255,   256,   259,   260,
-     261,   264,   265,   266,   267,   268,   269,   270,   271,   272,
-     275,   280,   284,   289,   294,   304,   305,   306,   312,   317,
-     321,   329,   329,   333,   336,   339,   350,   351,   358,   359,
-     363,   369,   370,   375,   383,   384,   388,   394,   403,   406,
-     407,   408,   411,   414,   417,   418,   419,   417,   425,   429,
-     430,   431,   432,   435,   435,   468,   469,   470,   471,   475,
-     478,   479,   482,   483,   486,   489,   493,   497,   501,   507,
-     508,   512,   515,   521,   521,   526,   534,   534,   545,   552,
-     555,   556,   559,   560,   563,   566,   567,   570,   574,   578,
-     584,   585,   588,   589,   590,   596,   601,   606,   607,   608,
-     610,   613,   614,   621,   622,   623,   626,   629
+       0,   191,   191,   194,   195,   196,   199,   200,   201,   202,
+     205,   206,   209,   218,   219,   220,   221,   222,   225,   231,
+     237,   238,   239,   242,   242,   248,   248,   255,   256,   257,
+     258,   261,   262,   263,   266,   267,   268,   269,   270,   271,
+     272,   273,   274,   277,   282,   286,   294,   299,   304,   313,
+     314,   315,   321,   331,   335,   343,   343,   347,   350,   353,
+     364,   365,   377,   378,   387,   396,   407,   408,   418,   431,
+     432,   441,   452,   461,   464,   465,   466,   469,   472,   475,
+     476,   477,   475,   483,   487,   488,   489,   490,   493,   493,
+     526,   527,   528,   529,   533,   536,   537,   540,   541,   544,
+     547,   551,   555,   559,   565,   566,   570,   573,   579,   579,
+     584,   592,   592,   603,   610,   613,   614,   617,   618,   621,
+     624,   625,   628,   632,   636,   642,   643,   646,   647,   648,
+     654,   659,   664,   665,   666,   677,   680,   681,   688,   689,
+     690,   693,   696
 };
 #endif
 
@@ -657,21 +668,21 @@ static const char *const yytname[] =
   "$end", "error", "$undefined", "KW_CONTEXT", "LC", "RC", "LP", "RP",
   "SEMI", "EQ", "COMMA", "COLON", "AMPER", "BAR", "AT", "KW_MACRO",
   "KW_GLOBALS", "KW_IGNOREPAT", "KW_SWITCH", "KW_IF", "KW_IFTIME",
-  "KW_ELSE", "KW_RANDOM", "KW_ABSTRACT", "EXTENMARK", "KW_GOTO", "KW_JUMP",
-  "KW_RETURN", "KW_BREAK", "KW_CONTINUE", "KW_REGEXTEN", "KW_HINT",
-  "KW_FOR", "KW_WHILE", "KW_CASE", "KW_PATTERN", "KW_DEFAULT", "KW_CATCH",
-  "KW_SWITCHES", "KW_ESWITCHES", "KW_INCLUDES", "KW_LOCAL", "word",
-  "$accept", "file", "objects", "object", "context_name", "context",
-  "opt_abstract", "macro", "globals", "global_statements", "assignment",
-  "@1", "local_assignment", "@2", "arglist", "elements", "element",
-  "ignorepat", "extension", "statements", "timerange", "timespec",
-  "test_expr", "@3", "if_like_head", "word_list", "hint_word",
-  "word3_list", "goto_word", "switch_statement", "statement", "@4", "@5",
-  "@6", "@7", "opt_else", "target", "opt_pri", "jumptarget", "macro_call",
-  "@8", "application_call_head", "@9", "application_call", "opt_word",
-  "eval_arglist", "case_statements", "case_statement", "macro_statements",
-  "macro_statement", "switches", "eswitches", "switchlist",
-  "included_entry", "includeslist", "includes", 0
+  "KW_ELSE", "KW_RANDOM", "KW_ABSTRACT", "KW_EXTEND", "EXTENMARK",
+  "KW_GOTO", "KW_JUMP", "KW_RETURN", "KW_BREAK", "KW_CONTINUE",
+  "KW_REGEXTEN", "KW_HINT", "KW_FOR", "KW_WHILE", "KW_CASE", "KW_PATTERN",
+  "KW_DEFAULT", "KW_CATCH", "KW_SWITCHES", "KW_ESWITCHES", "KW_INCLUDES",
+  "KW_LOCAL", "word", "$accept", "file", "objects", "object",
+  "context_name", "context", "opt_abstract", "macro", "globals",
+  "global_statements", "assignment", "@1", "local_assignment", "@2",
+  "arglist", "elements", "element", "ignorepat", "extension", "statements",
+  "timerange", "timespec", "test_expr", "@3", "if_like_head", "word_list",
+  "hint_word", "word3_list", "goto_word", "switch_statement", "statement",
+  "@4", "@5", "@6", "@7", "opt_else", "target", "opt_pri", "jumptarget",
+  "macro_call", "@8", "application_call_head", "@9", "application_call",
+  "opt_word", "eval_arglist", "case_statements", "case_statement",
+  "macro_statements", "macro_statement", "switches", "eswitches",
+  "switchlist", "included_entry", "includeslist", "includes", 0
 };
 #endif
 
@@ -684,46 +695,48 @@ static const yytype_uint16 yytoknum[] =
      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
      275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
-     295,   296,   297
+     295,   296,   297,   298
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,    43,    44,    45,    45,    45,    46,    46,    46,    46,
-      47,    47,    48,    49,    49,    50,    51,    52,    52,    52,
-      54,    53,    56,    55,    57,    57,    57,    57,    58,    58,
-      58,    59,    59,    59,    59,    59,    59,    59,    59,    59,
-      60,    61,    61,    61,    61,    62,    62,    62,    63,    63,
-      64,    66,    65,    67,    67,    67,    68,    68,    69,    69,
-      69,    70,    70,    70,    71,    71,    71,    72,    73,    73,
-      73,    73,    73,    73,    74,    75,    76,    73,    73,    73,
-      73,    73,    73,    77,    73,    73,    73,    73,    73,    73,
-      78,    78,    79,    79,    79,    79,    79,    79,    79,    80,
-      80,    81,    81,    83,    82,    82,    85,    84,    86,    86,
-      87,    87,    88,    88,    88,    89,    89,    90,    90,    90,
-      91,    91,    92,    92,    92,    93,    94,    95,    95,    95,
-      95,    96,    96,    97,    97,    97,    98,    98
+       0,    44,    45,    46,    46,    46,    47,    47,    47,    47,
+      48,    48,    49,    50,    50,    50,    50,    50,    51,    52,
+      53,    53,    53,    55,    54,    57,    56,    58,    58,    58,
+      58,    59,    59,    59,    60,    60,    60,    60,    60,    60,
+      60,    60,    60,    61,    62,    62,    62,    62,    62,    63,
+      63,    63,    64,    64,    65,    67,    66,    68,    68,    68,
+      69,    69,    70,    70,    70,    70,    71,    71,    71,    72,
+      72,    72,    73,    74,    74,    74,    74,    74,    74,    75,
+      76,    77,    74,    74,    74,    74,    74,    74,    78,    74,
+      74,    74,    74,    74,    74,    79,    79,    80,    80,    80,
+      80,    80,    80,    80,    81,    81,    82,    82,    84,    83,
+      83,    86,    85,    87,    87,    88,    88,    89,    89,    89,
+      90,    90,    91,    91,    91,    92,    92,    93,    93,    93,
+      94,    95,    96,    96,    96,    96,    97,    97,    98,    98,
+      98,    99,    99
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
 static const yytype_uint8 yyr2[] =
 {
        0,     2,     1,     1,     2,     2,     1,     1,     1,     1,
-       1,     1,     6,     1,     0,     8,     4,     0,     2,     2,
-       0,     5,     0,     6,     0,     1,     3,     2,     0,     2,
-       2,     1,     1,     1,     1,     1,     1,     1,     2,     1,
-       4,     3,     4,     7,     8,     0,     2,     2,     5,     1,
-       7,     0,     4,     2,     2,     4,     1,     2,     1,     2,
-       3,     1,     2,     3,     1,     2,     3,     5,     3,     1,
-       1,     3,     3,     2,     0,     0,     0,    12,     3,     1,
-       3,     2,     2,     0,     5,     2,     2,     2,     3,     1,
-       2,     0,     1,     3,     3,     5,     5,     5,     5,     0,
-       2,     2,     4,     0,     5,     3,     0,     3,     3,     2,
-       1,     0,     1,     0,     3,     0,     2,     4,     3,     4,
-       0,     2,     1,     1,     5,     4,     4,     0,     3,     5,
-       2,     1,     3,     2,     3,     2,     4,     3
+       1,     1,     6,     1,     0,     1,     2,     2,     8,     4,
+       0,     2,     2,     0,     5,     0,     6,     0,     1,     3,
+       2,     0,     2,     2,     1,     1,     1,     1,     1,     1,
+       1,     2,     1,     4,     3,     5,     4,     7,     8,     0,
+       2,     2,     5,     1,     7,     0,     4,     2,     2,     4,
+       1,     2,     1,     2,     3,     3,     1,     2,     3,     1,
+       2,     3,     5,     3,     1,     1,     3,     3,     2,     0,
+       0,     0,    12,     3,     1,     3,     2,     2,     0,     5,
+       2,     2,     2,     3,     1,     2,     0,     1,     3,     3,
+       5,     5,     5,     5,     0,     2,     2,     4,     0,     5,
+       3,     0,     3,     3,     2,     1,     0,     1,     0,     3,
+       0,     2,     4,     3,     4,     0,     2,     1,     1,     5,
+       4,     4,     0,     3,     5,     2,     1,     3,     2,     3,
+       2,     4,     3
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -731,200 +744,217 @@ 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,    17,     1,     5,     4,     0,    24,     0,
-       0,    17,    11,    10,     0,    25,     0,    20,    19,    16,
-       0,    28,    27,     0,     0,     0,    39,     0,     0,     0,
-       0,     0,     0,     0,     0,    36,    37,     0,    28,    35,
-      31,    33,    34,    32,   120,    26,     0,     0,     0,     0,
-       0,   127,   127,     0,     0,    38,     0,    30,    12,     0,
-      45,    89,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    69,    70,     0,    79,
-     122,   113,     0,     0,   120,   123,    21,     0,     0,     0,
-      58,     0,     0,     0,     0,   137,   131,     0,     0,    22,
-      41,     0,    45,     0,     0,    51,     0,    53,     0,    54,
-       0,    64,    92,     0,    99,     0,    86,    85,    87,    74,
-       0,     0,   106,    82,    73,    91,   109,    56,   112,     0,
-      81,    83,    15,   121,    40,     0,    42,     0,     0,    59,
-     127,     0,   130,   125,   126,     0,   133,   135,   136,     0,
-       0,    47,    68,     0,   103,    80,     0,   115,    49,     0,
-       0,     0,     0,     0,    65,     0,     0,     0,    71,     0,
-     101,    72,     0,    78,    45,   107,     0,    88,    57,   108,
-     111,     0,     0,     0,    60,     0,     0,   132,   134,     0,
-     105,   113,     0,     0,     0,     0,     0,   115,    62,     0,
-      55,     0,     0,     0,    94,    66,    93,   100,     0,     0,
-       0,    90,   110,   114,     0,     0,     0,   127,    23,     0,
-      52,     0,     0,    45,    67,   116,    63,    61,     0,     0,
-       0,     0,     0,     0,   102,    75,   124,    84,     0,    43,
-       0,   104,    45,    45,     0,     0,     0,    98,    97,    96,
-      95,     0,    44,     0,     0,     0,    48,     0,     0,    76,
-      50,     0,     0,     0,    77
+      14,     9,     0,     0,    13,    15,     0,     0,     3,     6,
+       0,     7,     8,     0,     0,    17,    16,     1,     5,     4,
+       0,    27,     0,     0,    11,    10,     0,    28,     0,    22,
+      19,     0,    21,     0,    30,     0,     0,    23,     0,     0,
+     125,    29,     0,    33,    12,    42,     0,     0,     0,     0,
+       0,     0,     0,     0,    39,    40,    32,    38,    34,    36,
+      37,    35,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    41,     0,     0,     0,    18,    94,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    74,    75,     0,    84,   127,   118,     0,   126,
+     128,    24,     0,     0,     0,    62,     0,     0,     0,     0,
+     142,   136,     0,     0,    25,     0,    44,     0,     0,     0,
+       0,    55,     0,    57,     0,    58,     0,    69,    97,     0,
+     104,     0,    91,    90,    92,    79,     0,     0,   111,    87,
+      78,    96,   114,    60,   117,     0,    86,    88,    43,     0,
+      46,     0,     0,     0,    63,   135,   130,     0,   131,     0,
+     138,   140,   141,     0,     0,     0,    51,    73,    50,   108,
+      85,     0,   120,    53,     0,     0,     0,     0,     0,    70,
+       0,     0,     0,    76,     0,   106,    77,     0,    83,     0,
+     112,     0,    93,    61,   113,   116,     0,     0,     0,    64,
+      65,   133,     0,   137,   139,     0,    45,   110,   118,     0,
+       0,    67,     0,    59,     0,     0,     0,    99,    71,    98,
+     105,     0,     0,     0,    95,   115,   119,     0,     0,     0,
+       0,    26,     0,    56,    72,     0,     0,     0,   121,    68,
+      66,     0,     0,     0,     0,     0,     0,   107,    80,   129,
+      89,     0,    47,   134,   109,     0,     0,     0,     0,     0,
+     103,   102,   101,   100,     0,    48,     0,     0,   123,     0,
+      52,     0,   122,   124,     0,    81,    54,     0,     0,     0,
+      82
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,     5,     6,     7,   106,     8,     9,    10,    11,    20,
-      86,    35,    87,   160,    26,    47,    48,    49,    50,   111,
-     169,   170,   116,   166,    88,   138,   101,   171,   122,    89,
-     112,   182,   261,   271,   191,   187,   123,   180,   125,   114,
-     201,    91,   185,    92,   223,   139,   206,   207,    93,    94,
-      51,    52,   103,   107,   108,    53
+      -1,     6,     7,     8,   111,     9,    10,    11,    12,    23,
+      92,    42,    93,   164,    28,    39,    56,    57,    58,   118,
+     174,   175,   122,   171,    94,   144,   106,   176,   128,    95,
+     168,   187,   264,   277,   196,   192,   129,   185,   131,   120,
+     208,    97,   190,    98,   226,   145,   210,   238,    62,    99,
+      59,    60,   108,   112,   113,    61
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -206
+#define YYPACT_NINF -209
 static const yytype_int16 yypact[] =
 {
-     139,  -206,    -4,    42,  -206,    56,   170,  -206,  -206,    66,
-    -206,  -206,   137,    46,  -206,  -206,  -206,    -6,    60,    65,
-      17,    46,  -206,  -206,   107,  -206,    14,  -206,  -206,  -206,
-      34,   119,  -206,   159,   127,   133,  -206,   166,   -14,   191,
-     197,   208,   209,   172,   111,  -206,  -206,    82,   119,  -206,
-    -206,  -206,  -206,  -206,    53,  -206,   207,   174,   211,   194,
-     180,   181,   181,     5,   212,  -206,    96,  -206,  -206,   102,
-      96,  -206,   183,   214,   214,   218,   214,    28,   184,   219,
-     220,   221,   224,   214,   190,   168,  -206,  -206,    96,  -206,
-    -206,    13,   173,   226,    53,  -206,  -206,   225,   180,    96,
-    -206,    20,    84,   104,   112,  -206,   222,   228,     6,  -206,
-    -206,   129,    96,   231,   230,  -206,   235,  -206,   192,  -206,
-     143,   199,   178,   232,   196,   234,  -206,  -206,  -206,  -206,
-      96,   239,  -206,  -206,  -206,   223,  -206,   203,  -206,   185,
-    -206,  -206,  -206,  -206,  -206,    77,  -206,   204,   205,  -206,
-     181,   206,  -206,  -206,  -206,   192,  -206,  -206,  -206,   241,
-     210,  -206,  -206,    18,   243,  -206,   213,   169,     2,   238,
-     246,   245,   184,   184,  -206,   184,   215,   184,  -206,   216,
-     240,  -206,   217,  -206,    96,  -206,    96,  -206,  -206,  -206,
-     227,   229,   233,   236,  -206,   147,   253,  -206,  -206,   254,
-    -206,   213,   256,   237,   242,   255,   259,   169,   244,   247,
-    -206,   247,   198,   120,   200,  -206,   187,  -206,    -6,   257,
-     179,  -206,  -206,  -206,   260,   248,    96,   181,  -206,   189,
-    -206,   262,   263,    96,  -206,  -206,  -206,   249,   264,   265,
-     184,   184,   184,   184,  -206,  -206,  -206,  -206,    96,  -206,
-     182,  -206,    96,    96,    24,   247,   247,   267,   267,   267,
-     267,   250,  -206,    32,   105,   268,  -206,   272,   247,  -206,
-    -206,   251,   275,    96,  -206
+     262,  -209,   -32,    21,     5,    13,    69,   296,  -209,  -209,
+     112,  -209,  -209,   115,    14,  -209,  -209,  -209,  -209,  -209,
+     -29,    85,    14,     0,  -209,  -209,   129,  -209,   116,    92,
+    -209,   140,  -209,   105,  -209,   147,   125,  -209,   105,    99,
+    -209,  -209,   132,   252,  -209,  -209,   163,   -25,   159,   182,
+     186,   197,   162,   242,  -209,  -209,  -209,  -209,  -209,  -209,
+    -209,  -209,   165,   201,   170,   222,   204,   187,    16,    16,
+      68,   223,  -209,   190,   246,    59,  -209,  -209,   193,   234,
+     234,   236,   234,   -27,   212,   249,   251,   255,   238,   234,
+     228,   292,  -209,  -209,   246,  -209,  -209,    15,   146,  -209,
+    -209,  -209,   273,   187,   246,  -209,   107,    16,    25,    29,
+    -209,   269,   279,    39,  -209,   265,  -209,    19,   192,   299,
+     294,  -209,   302,  -209,   264,  -209,    70,   266,   161,   300,
+     168,   305,  -209,  -209,  -209,  -209,   246,   306,  -209,  -209,
+    -209,   293,  -209,   272,  -209,    84,  -209,  -209,  -209,   113,
+    -209,   274,   275,   278,  -209,   280,  -209,    76,  -209,   264,
+    -209,  -209,  -209,   308,   281,   246,   246,  -209,  -209,   315,
+    -209,   282,  -209,    22,   313,   320,   317,   212,   212,  -209,
+     212,   286,   212,  -209,   287,   318,  -209,   288,  -209,    59,
+    -209,   246,  -209,  -209,  -209,   290,   291,   295,   310,  -209,
+    -209,  -209,   297,  -209,  -209,   328,  -209,  -209,   282,   330,
+     122,   298,   301,  -209,   301,   171,    86,   205,  -209,   121,
+    -209,   -29,   331,   219,  -209,  -209,  -209,   334,   321,   246,
+     335,  -209,   102,  -209,  -209,   304,   307,   337,  -209,  -209,
+     309,   332,   338,   212,   212,   212,   212,  -209,  -209,  -209,
+    -209,   246,  -209,  -209,  -209,   340,   342,    19,   301,   301,
+     343,   343,   343,   343,   312,  -209,    19,    19,   246,   344,
+    -209,   348,   246,   246,   301,  -209,  -209,   316,   351,   246,
+    -209
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -206,  -206,  -206,   261,   -16,  -206,  -206,  -206,  -206,   266,
-      -5,  -206,   -17,  -206,  -206,   252,  -206,  -206,  -206,  -107,
-    -206,   115,    68,  -206,  -206,   117,   201,  -205,   -76,  -206,
-     -54,  -206,  -206,  -206,  -206,  -206,  -206,  -206,  -206,  -206,
-    -206,  -206,  -206,  -206,  -206,    87,    78,  -206,   202,  -206,
-    -206,  -206,   -59,   186,  -206,   -45
+    -209,  -209,  -209,   353,   -19,  -209,  -209,  -209,  -209,   339,
+     137,  -209,   -30,  -209,  -209,   324,  -209,  -209,  -209,  -114,
+    -209,   206,   -54,  -209,  -209,   195,   260,  -208,   -82,  -209,
+     -62,  -209,  -209,  -209,  -209,  -209,  -209,  -209,  -209,  -209,
+    -209,  -209,  -209,  -209,  -209,   156,  -209,  -209,  -209,  -209,
+    -209,  -209,     1,   254,  -209,   311
 };
 
 /* 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 -130
+#define YYTABLE_NINF -133
 static const yytype_int16 yytable[] =
 {
-      90,    24,   124,   104,   238,   163,   239,   157,    21,    95,
-     105,   158,   110,   -61,    46,    32,    21,    58,    28,   161,
-     136,    33,    29,   -46,    34,   161,    45,   147,    59,  -118,
-      22,    46,   148,   161,   135,    28,    23,  -117,    12,   -18,
-      90,    22,    22,    45,   208,   146,    13,    23,    23,    95,
-     265,   266,   -46,   -46,   -46,   137,    14,    70,  -118,  -118,
-    -118,    71,   149,   270,   120,    72,  -117,  -117,  -117,    17,
-     121,    73,    74,    75,    27,    76,   183,   220,    77,    78,
-      79,    80,    81,    67,   192,    82,    83,    68,    19,   148,
-      84,   195,   150,    42,    43,    85,   212,   213,   151,   214,
-      70,   216,    25,    67,    71,   152,   161,   -29,    72,   153,
-    -119,    31,    65,   152,    73,    74,    75,   154,    76,   149,
-      27,    77,    78,    79,    80,    81,   254,    36,    82,    83,
-     161,   176,   221,   241,   162,    66,    37,    43,    85,  -119,
-    -119,  -119,   117,    18,   119,   263,   264,     1,   152,    38,
-      39,   130,  -128,   172,     2,     3,   173,    40,    41,    42,
-      43,    44,     4,    54,   257,   258,   259,   260,   250,    55,
-      -2,    15,   249,   -14,   132,    56,   133,    27,     1,   134,
-     161,   140,   141,   152,   246,     2,     3,  -129,   175,   176,
-      57,   177,   189,     4,   262,   190,   251,    60,   176,   190,
-     243,    61,   244,   203,   204,   205,   179,   176,   240,   176,
-     242,   176,    62,    63,    64,    96,    97,    98,    99,   274,
-     115,   109,   100,   102,   118,   113,   121,   126,   127,   128,
-     129,   142,   131,   144,   168,   155,   156,   164,   165,   167,
-     178,   174,   181,   184,   186,   188,   193,   194,   196,   198,
-     200,   209,   199,   210,   218,   137,   211,   215,   217,   219,
-     226,   227,   228,   230,   234,   245,   233,    16,   247,   222,
-     197,   224,   248,   252,   253,   225,   256,   255,   176,   231,
-     269,   268,   273,   202,   232,   235,   236,    30,   229,   237,
-       0,   208,   267,   272,   159,     0,   143,     0,     0,   145,
-      69
+      96,    26,   130,   166,   241,    30,   242,    65,    24,    55,
+     126,    13,   116,    55,    25,    22,   127,   107,    66,   -20,
+     117,  -132,   142,   -49,   -49,    14,   123,   -49,   125,    15,
+     156,   -49,   141,   -66,   158,   136,    16,   -49,   -49,   -49,
+     161,   -49,   150,    31,   162,   -49,   -49,   -49,   -49,   -49,
+     269,   270,   -49,   -49,   -49,   -49,   -49,   -20,   143,  -132,
+     117,   -49,   -49,   -49,   -49,   211,   276,   -49,   157,    17,
+     109,   -49,   157,   110,   188,   223,    24,   -49,   -49,   -49,
+     177,   -49,    25,   178,   201,   -49,   -49,   -49,   -49,   -49,
+     202,   194,   -49,   -49,   195,   215,   216,   181,   217,   244,
+     219,   -49,   -49,   206,    44,    24,    38,    45,   155,   254,
+     -31,    25,   195,   -31,   151,    20,    46,    34,   152,   153,
+     197,    21,   -31,    35,   152,   153,    36,   234,    27,   224,
+      47,    48,   181,    33,   246,    31,   -31,   -31,    49,    50,
+      51,    52,    53,   268,   -31,   -31,   -31,   -31,   -31,    37,
+     154,    40,   272,   273,   146,   147,   154,   235,   236,   237,
+      32,   260,   261,   262,   263,    67,    32,   252,    41,    75,
+      76,   180,   181,    77,   182,    63,    54,    78,   184,   181,
+      54,   243,   181,    79,    80,    81,    68,    82,    64,   265,
+      69,    83,    84,    85,    86,    87,    75,   167,    88,    89,
+      77,    70,   247,    90,    78,    71,    51,    52,    91,   101,
+      79,    80,    81,   102,    82,   245,   181,   280,    83,    84,
+      85,    86,    87,    75,   249,    88,    89,    77,   103,   104,
+     105,    78,   114,   115,    52,    91,   119,    79,    80,    81,
+     121,    82,   124,    72,   135,    83,    84,    85,    86,    87,
+      75,    37,    88,    89,    77,   127,    73,   132,    78,   133,
+      45,    52,    91,   134,    79,    80,    81,    74,    82,    46,
+       1,   137,    83,    84,    85,    86,    87,     2,     3,    88,
+      89,   148,   159,    47,    48,     4,     5,   160,    52,    91,
+     165,    49,    50,    51,    52,    53,    -2,    18,   138,   -14,
+     139,    37,   170,   140,     1,   169,   172,   173,   183,   179,
+     189,     2,     3,   186,   191,   193,   204,   198,   199,     4,
+       5,   200,   207,   157,   205,   143,   212,   213,   214,   218,
+     220,   222,   221,   225,   227,   229,   231,   233,   228,   248,
+     230,   239,   250,   253,   240,   258,   251,   255,   257,   259,
+     256,   266,   211,   267,   181,   271,   275,   274,   279,   278,
+      19,    29,    43,   149,   232,   203,   209,   163,     0,     0,
+       0,     0,     0,   100
 };
 
 static const yytype_int16 yycheck[] =
 {
-      54,    17,    78,    62,   209,   112,   211,     1,    13,    54,
-       5,     5,    66,    11,    31,     1,    21,    31,     1,     1,
-       7,     7,     5,     5,    10,     1,    31,     7,    42,     5,
-      36,    48,    12,     1,    88,     1,    42,     5,    42,     5,
-      94,    36,    36,    48,    42,    99,     4,    42,    42,    94,
-     255,   256,    34,    35,    36,    42,     0,     4,    34,    35,
-      36,     8,    42,   268,    36,    12,    34,    35,    36,     3,
-      42,    18,    19,    20,     9,    22,   130,   184,    25,    26,
-      27,    28,    29,     1,     7,    32,    33,     5,    42,    12,
-      37,   150,     8,    40,    41,    42,   172,   173,    14,   175,
-       4,   177,    42,     1,     8,     1,     1,     5,    12,     5,
-       5,     4,     1,     1,    18,    19,    20,     5,    22,    42,
-       9,    25,    26,    27,    28,    29,   233,     8,    32,    33,
-       1,    11,   186,    13,     5,    24,    17,    41,    42,    34,
-      35,    36,    74,     6,    76,   252,   253,     8,     1,    30,
-      31,    83,     5,    10,    15,    16,    13,    38,    39,    40,
-      41,    42,    23,     4,   240,   241,   242,   243,   227,    42,
-       0,     1,   226,     3,     6,    42,     8,     9,     8,    11,
-       1,     8,     9,     1,     5,    15,    16,     5,    10,    11,
-      24,    13,     7,    23,   248,    10,     7,     6,    11,    10,
-      13,     4,   218,    34,    35,    36,    10,    11,    10,    11,
-      10,    11,     4,     4,    42,     8,    42,     6,    24,   273,
-       6,     9,    42,    42,     6,    42,    42,     8,     8,     8,
-       6,     5,    42,     8,    42,    13,     8,     6,     8,     4,
-       8,    42,     8,     4,    21,    42,    42,    42,    42,     8,
-       7,    13,    42,     7,    14,    42,    11,    42,    42,    42,
-      24,     8,     8,     7,     5,     8,    11,     6,     8,    42,
-     155,    42,    24,    11,    11,    42,    11,    13,    11,    42,
-       8,    13,     7,   166,    42,   207,    42,    21,   201,    42,
-      -1,    42,    42,    42,   108,    -1,    94,    -1,    -1,    98,
-      48
+      62,    20,    84,   117,   212,     5,   214,    32,    37,    39,
+      37,    43,    74,    43,    43,     1,    43,     1,    43,     5,
+       1,     5,     7,     4,     5,     4,    80,     8,    82,    24,
+       5,    12,    94,    11,     5,    89,    23,    18,    19,    20,
+       1,    22,   104,    43,     5,    26,    27,    28,    29,    30,
+     258,   259,    33,    34,    35,    36,    37,    43,    43,    43,
+       1,    42,    43,     4,     5,    43,   274,     8,    43,     0,
+      69,    12,    43,     5,   136,   189,    37,    18,    19,    20,
+      10,    22,    43,    13,     8,    26,    27,    28,    29,    30,
+      14,     7,    33,    34,    10,   177,   178,    11,   180,    13,
+     182,    42,    43,   165,     5,    37,     1,     8,   107,     7,
+       5,    43,    10,     8,     7,     3,    17,     1,    11,    12,
+       7,     6,    17,     7,    11,    12,    10,     5,    43,   191,
+      31,    32,    11,     4,    13,    43,    31,    32,    39,    40,
+      41,    42,    43,   257,    39,    40,    41,    42,    43,     9,
+      43,     4,   266,   267,     8,     9,    43,    35,    36,    37,
+      23,   243,   244,   245,   246,     6,    29,   229,    43,     4,
+       5,    10,    11,     8,    13,    43,    39,    12,    10,    11,
+      43,    10,    11,    18,    19,    20,     4,    22,    25,   251,
+       4,    26,    27,    28,    29,    30,     4,     5,    33,    34,
+       8,     4,   221,    38,    12,    43,    41,    42,    43,     8,
+      18,    19,    20,    43,    22,    10,    11,   279,    26,    27,
+      28,    29,    30,     4,     5,    33,    34,     8,     6,    25,
+      43,    12,     9,    43,    42,    43,    43,    18,    19,    20,
+       6,    22,     6,     1,     6,    26,    27,    28,    29,    30,
+       4,     9,    33,    34,     8,    43,    14,     8,    12,     8,
+       8,    42,    43,     8,    18,    19,    20,    25,    22,    17,
+       8,    43,    26,    27,    28,    29,    30,    15,    16,    33,
+      34,     8,    13,    31,    32,    23,    24,     8,    42,    43,
+      25,    39,    40,    41,    42,    43,     0,     1,     6,     3,
+       8,     9,     8,    11,     8,     6,     4,    43,     8,    43,
+       4,    15,    16,     8,    21,    43,     8,    43,    43,    23,
+      24,    43,     7,    43,    43,    43,    13,     7,    11,    43,
+      43,    43,    14,    43,    43,    25,     8,     7,    43,     8,
+      43,    43,     8,     8,    43,    13,    25,    43,    11,    11,
+      43,    11,    43,    11,    11,    43,     8,    13,     7,    43,
+       7,    22,    38,   103,   208,   159,   171,   113,    -1,    -1,
+      -1,    -1,    -1,    62
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    symbol of state STATE-NUM.  */
 static const yytype_uint8 yystos[] =
 {
-       0,     8,    15,    16,    23,    44,    45,    46,    48,    49,
-      50,    51,    42,     4,     0,     1,    46,     3,     6,    42,
-      52,    53,    36,    42,    47,    42,    57,     9,     1,     5,
-      52,     4,     1,     7,    10,    54,     8,    17,    30,    31,
-      38,    39,    40,    41,    42,    53,    55,    58,    59,    60,
-      61,    93,    94,    98,     4,    42,    42,    24,    31,    42,
-       6,     4,     4,     4,    42,     1,    24,     1,     5,    58,
-       4,     8,    12,    18,    19,    20,    22,    25,    26,    27,
-      28,    29,    32,    33,    37,    42,    53,    55,    67,    72,
-      73,    84,    86,    91,    92,    98,     8,    42,     6,    24,
-      42,    69,    42,    95,    95,     5,    47,    96,    97,     9,
-      73,    62,    73,    42,    82,     6,    65,    65,     6,    65,
-      36,    42,    71,    79,    71,    81,     8,     8,     8,     6,
-      65,    42,     6,     8,    11,    73,     7,    42,    68,    88,
-       8,     9,     5,    91,     8,    69,    73,     7,    12,    42,
-       8,    14,     1,     5,     5,    13,     8,     1,     5,    96,
-      56,     1,     5,    62,     6,     8,    66,     4,    42,    63,
-      64,    70,    10,    13,    42,    10,    11,    13,     8,    10,
-      80,     8,    74,    73,     4,    85,    21,    78,    42,     7,
-      10,    77,     7,    42,    42,    95,    42,    64,     8,    42,
-       7,    83,    68,    34,    35,    36,    89,    90,    42,    13,
-       7,    11,    71,    71,    71,    42,    71,    42,    14,    42,
-      62,    73,    42,    87,    42,    42,    24,     8,     8,    88,
-       7,    42,    42,    11,     5,    89,    42,    42,    70,    70,
-      10,    13,    10,    13,    47,     8,     5,     8,    24,    73,
-      95,     7,    11,    11,    62,    13,    11,    71,    71,    71,
-      71,    75,    73,    62,    62,    70,    70,    42,    13,     8,
-      70,    76,    42,     7,    73
+       0,     8,    15,    16,    23,    24,    45,    46,    47,    49,
+      50,    51,    52,    43,     4,    24,    23,     0,     1,    47,
+       3,     6,     1,    53,    37,    43,    48,    43,    58,    53,
+       5,    43,    54,     4,     1,     7,    10,     9,     1,    59,
+       4,    43,    55,    59,     5,     8,    17,    31,    32,    39,
+      40,    41,    42,    43,    54,    56,    60,    61,    62,    94,
+      95,    99,    92,    43,    25,    32,    43,     6,     4,     4,
+       4,    43,     1,    14,    25,     4,     5,     8,    12,    18,
+      19,    20,    22,    26,    27,    28,    29,    30,    33,    34,
+      38,    43,    54,    56,    68,    73,    74,    85,    87,    93,
+      99,     8,    43,     6,    25,    43,    70,     1,    96,    96,
+       5,    48,    97,    98,     9,    43,    74,     1,    63,    43,
+      83,     6,    66,    66,     6,    66,    37,    43,    72,    80,
+      72,    82,     8,     8,     8,     6,    66,    43,     6,     8,
+      11,    74,     7,    43,    69,    89,     8,     9,     8,    70,
+      74,     7,    11,    12,    43,    96,     5,    43,     5,    13,
+       8,     1,     5,    97,    57,    25,    63,     5,    74,     6,
+       8,    67,     4,    43,    64,    65,    71,    10,    13,    43,
+      10,    11,    13,     8,    10,    81,     8,    75,    74,     4,
+      86,    21,    79,    43,     7,    10,    78,     7,    43,    43,
+      43,     8,    14,    65,     8,    43,    74,     7,    84,    69,
+      90,    43,    13,     7,    11,    72,    72,    72,    43,    72,
+      43,    14,    43,    63,    74,    43,    88,    43,    43,    25,
+      43,     8,    89,     7,     5,    35,    36,    37,    91,    43,
+      43,    71,    71,    10,    13,    10,    13,    48,     8,     5,
+       8,    25,    74,     8,     7,    43,    43,    11,    13,    11,
+      72,    72,    72,    72,    76,    74,    11,    11,    63,    71,
+      71,    43,    63,    63,    13,     8,    71,    77,    43,     7,
+      74
 };
 
 #define yyerrok                (yyerrstatus = 0)
@@ -1446,330 +1476,330 @@ yydestruct (yymsg, yytype, yyvaluep, yylocationp, parseio)
 
   switch (yytype)
     {
-      case 42: /* "word" */
-#line 178 "ael.y"
+      case 43: /* "word" */
+#line 183 "ael.y"
        { free((yyvaluep->str));};
-#line 1453 "ael.tab.c"
+#line 1483 "ael.tab.c"
        break;
-      case 45: /* "objects" */
-#line 165 "ael.y"
+      case 46: /* "objects" */
+#line 170 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1461 "ael.tab.c"
+#line 1491 "ael.tab.c"
        break;
-      case 46: /* "object" */
-#line 165 "ael.y"
+      case 47: /* "object" */
+#line 170 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1469 "ael.tab.c"
+#line 1499 "ael.tab.c"
        break;
-      case 47: /* "context_name" */
-#line 178 "ael.y"
+      case 48: /* "context_name" */
+#line 183 "ael.y"
        { free((yyvaluep->str));};
-#line 1474 "ael.tab.c"
+#line 1504 "ael.tab.c"
        break;
-      case 48: /* "context" */
-#line 165 "ael.y"
+      case 49: /* "context" */
+#line 170 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1482 "ael.tab.c"
+#line 1512 "ael.tab.c"
        break;
-      case 50: /* "macro" */
-#line 165 "ael.y"
+      case 51: /* "macro" */
+#line 170 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1490 "ael.tab.c"
+#line 1520 "ael.tab.c"
        break;
-      case 51: /* "globals" */
-#line 165 "ael.y"
+      case 52: /* "globals" */
+#line 170 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1498 "ael.tab.c"
+#line 1528 "ael.tab.c"
        break;
-      case 52: /* "global_statements" */
-#line 165 "ael.y"
+      case 53: /* "global_statements" */
+#line 170 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1506 "ael.tab.c"
+#line 1536 "ael.tab.c"
        break;
-      case 53: /* "assignment" */
-#line 165 "ael.y"
+      case 54: /* "assignment" */
+#line 170 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1514 "ael.tab.c"
+#line 1544 "ael.tab.c"
        break;
-      case 55: /* "local_assignment" */
-#line 165 "ael.y"
+      case 56: /* "local_assignment" */
+#line 170 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1522 "ael.tab.c"
+#line 1552 "ael.tab.c"
        break;
-      case 57: /* "arglist" */
-#line 165 "ael.y"
+      case 58: /* "arglist" */
+#line 170 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1530 "ael.tab.c"
+#line 1560 "ael.tab.c"
        break;
-      case 58: /* "elements" */
-#line 165 "ael.y"
+      case 59: /* "elements" */
+#line 170 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1538 "ael.tab.c"
+#line 1568 "ael.tab.c"
        break;
-      case 59: /* "element" */
-#line 165 "ael.y"
+      case 60: /* "element" */
+#line 170 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1546 "ael.tab.c"
+#line 1576 "ael.tab.c"
        break;
-      case 60: /* "ignorepat" */
-#line 165 "ael.y"
+      case 61: /* "ignorepat" */
+#line 170 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1554 "ael.tab.c"
+#line 1584 "ael.tab.c"
        break;
-      case 61: /* "extension" */
-#line 165 "ael.y"
+      case 62: /* "extension" */
+#line 170 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1562 "ael.tab.c"
+#line 1592 "ael.tab.c"
        break;
-      case 62: /* "statements" */
-#line 165 "ael.y"
+      case 63: /* "statements" */
+#line 170 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1570 "ael.tab.c"
+#line 1600 "ael.tab.c"
        break;
-      case 63: /* "timerange" */
-#line 178 "ael.y"
+      case 64: /* "timerange" */
+#line 183 "ael.y"
        { free((yyvaluep->str));};
-#line 1575 "ael.tab.c"
+#line 1605 "ael.tab.c"
        break;
-      case 64: /* "timespec" */
-#line 165 "ael.y"
+      case 65: /* "timespec" */
+#line 170 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1583 "ael.tab.c"
+#line 1613 "ael.tab.c"
        break;
-      case 65: /* "test_expr" */
-#line 178 "ael.y"
+      case 66: /* "test_expr" */
+#line 183 "ael.y"
        { free((yyvaluep->str));};
-#line 1588 "ael.tab.c"
+#line 1618 "ael.tab.c"
        break;
-      case 67: /* "if_like_head" */
-#line 165 "ael.y"
+      case 68: /* "if_like_head" */
+#line 170 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1596 "ael.tab.c"
+#line 1626 "ael.tab.c"
        break;
-      case 68: /* "word_list" */
-#line 178 "ael.y"
+      case 69: /* "word_list" */
+#line 183 "ael.y"
        { free((yyvaluep->str));};
-#line 1601 "ael.tab.c"
+#line 1631 "ael.tab.c"
        break;
-      case 70: /* "word3_list" */
-#line 178 "ael.y"
+      case 71: /* "word3_list" */
+#line 183 "ael.y"
        { free((yyvaluep->str));};
-#line 1606 "ael.tab.c"
+#line 1636 "ael.tab.c"
        break;
-      case 71: /* "goto_word" */
-#line 178 "ael.y"
+      case 72: /* "goto_word" */
+#line 183 "ael.y"
        { free((yyvaluep->str));};
-#line 1611 "ael.tab.c"
+#line 1641 "ael.tab.c"
        break;
-      case 72: /* "switch_statement" */
-#line 165 "ael.y"
+      case 73: /* "switch_statement" */
+#line 170 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1619 "ael.tab.c"
+#line 1649 "ael.tab.c"
        break;
-      case 73: /* "statement" */
-#line 165 "ael.y"
+      case 74: /* "statement" */
+#line 170 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1627 "ael.tab.c"
+#line 1657 "ael.tab.c"
        break;
-      case 78: /* "opt_else" */
-#line 165 "ael.y"
+      case 79: /* "opt_else" */
+#line 170 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1635 "ael.tab.c"
+#line 1665 "ael.tab.c"
        break;
-      case 79: /* "target" */
-#line 165 "ael.y"
+      case 80: /* "target" */
+#line 170 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1643 "ael.tab.c"
+#line 1673 "ael.tab.c"
        break;
-      case 80: /* "opt_pri" */
-#line 178 "ael.y"
+      case 81: /* "opt_pri" */
+#line 183 "ael.y"
        { free((yyvaluep->str));};
-#line 1648 "ael.tab.c"
+#line 1678 "ael.tab.c"
        break;
-      case 81: /* "jumptarget" */
-#line 165 "ael.y"
+      case 82: /* "jumptarget" */
+#line 170 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1656 "ael.tab.c"
+#line 1686 "ael.tab.c"
        break;
-      case 82: /* "macro_call" */
-#line 165 "ael.y"
+      case 83: /* "macro_call" */
+#line 170 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1664 "ael.tab.c"
+#line 1694 "ael.tab.c"
        break;
-      case 84: /* "application_call_head" */
-#line 165 "ael.y"
+      case 85: /* "application_call_head" */
+#line 170 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1672 "ael.tab.c"
+#line 1702 "ael.tab.c"
        break;
-      case 86: /* "application_call" */
-#line 165 "ael.y"
+      case 87: /* "application_call" */
+#line 170 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1680 "ael.tab.c"
+#line 1710 "ael.tab.c"
        break;
-      case 87: /* "opt_word" */
-#line 178 "ael.y"
+      case 88: /* "opt_word" */
+#line 183 "ael.y"
        { free((yyvaluep->str));};
-#line 1685 "ael.tab.c"
+#line 1715 "ael.tab.c"
        break;
-      case 88: /* "eval_arglist" */
-#line 165 "ael.y"
+      case 89: /* "eval_arglist" */
+#line 170 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1693 "ael.tab.c"
+#line 1723 "ael.tab.c"
        break;
-      case 89: /* "case_statements" */
-#line 165 "ael.y"
+      case 90: /* "case_statements" */
+#line 170 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1701 "ael.tab.c"
+#line 1731 "ael.tab.c"
        break;
-      case 90: /* "case_statement" */
-#line 165 "ael.y"
+      case 91: /* "case_statement" */
+#line 170 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1709 "ael.tab.c"
+#line 1739 "ael.tab.c"
        break;
-      case 91: /* "macro_statements" */
-#line 165 "ael.y"
+      case 92: /* "macro_statements" */
+#line 170 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1717 "ael.tab.c"
+#line 1747 "ael.tab.c"
        break;
-      case 92: /* "macro_statement" */
-#line 165 "ael.y"
+      case 93: /* "macro_statement" */
+#line 170 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1725 "ael.tab.c"
+#line 1755 "ael.tab.c"
        break;
-      case 93: /* "switches" */
-#line 165 "ael.y"
+      case 94: /* "switches" */
+#line 170 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1733 "ael.tab.c"
+#line 1763 "ael.tab.c"
        break;
-      case 94: /* "eswitches" */
-#line 165 "ael.y"
+      case 95: /* "eswitches" */
+#line 170 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1741 "ael.tab.c"
+#line 1771 "ael.tab.c"
        break;
-      case 95: /* "switchlist" */
-#line 165 "ael.y"
+      case 96: /* "switchlist" */
+#line 170 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1749 "ael.tab.c"
+#line 1779 "ael.tab.c"
        break;
-      case 96: /* "included_entry" */
-#line 165 "ael.y"
+      case 97: /* "included_entry" */
+#line 170 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1757 "ael.tab.c"
+#line 1787 "ael.tab.c"
        break;
-      case 97: /* "includeslist" */
-#line 165 "ael.y"
+      case 98: /* "includeslist" */
+#line 170 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1765 "ael.tab.c"
+#line 1795 "ael.tab.c"
        break;
-      case 98: /* "includes" */
-#line 165 "ael.y"
+      case 99: /* "includes" */
+#line 170 "ael.y"
        {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1773 "ael.tab.c"
+#line 1803 "ael.tab.c"
        break;
 
       default:
@@ -2092,235 +2122,256 @@ yyreduce:
   switch (yyn)
     {
         case 2:
-#line 186 "ael.y"
+#line 191 "ael.y"
     { (yyval.pval) = parseio->pval = (yyvsp[(1) - (1)].pval); ;}
     break;
 
   case 3:
-#line 189 "ael.y"
+#line 194 "ael.y"
     {(yyval.pval)=(yyvsp[(1) - (1)].pval);;}
     break;
 
   case 4:
-#line 190 "ael.y"
+#line 195 "ael.y"
     { (yyval.pval) = linku1((yyvsp[(1) - (2)].pval), (yyvsp[(2) - (2)].pval)); ;}
     break;
 
   case 5:
-#line 191 "ael.y"
+#line 196 "ael.y"
     {(yyval.pval)=(yyvsp[(1) - (2)].pval);;}
     break;
 
   case 6:
-#line 194 "ael.y"
+#line 199 "ael.y"
     {(yyval.pval)=(yyvsp[(1) - (1)].pval);;}
     break;
 
   case 7:
-#line 195 "ael.y"
+#line 200 "ael.y"
     {(yyval.pval)=(yyvsp[(1) - (1)].pval);;}
     break;
 
   case 8:
-#line 196 "ael.y"
+#line 201 "ael.y"
     {(yyval.pval)=(yyvsp[(1) - (1)].pval);;}
     break;
 
   case 9:
-#line 197 "ael.y"
+#line 202 "ael.y"
     {(yyval.pval)=0;/* allow older docs to be read */;}
     break;
 
   case 10:
-#line 200 "ael.y"
+#line 205 "ael.y"
     { (yyval.str) = (yyvsp[(1) - (1)].str); ;}
     break;
 
   case 11:
-#line 201 "ael.y"
+#line 206 "ael.y"
     { (yyval.str) = strdup("default"); ;}
     break;
 
   case 12:
-#line 204 "ael.y"
+#line 209 "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) );
-                       free((yyvsp[(3) - (6)].str));
-
-               } else {
-                       (yyval.pval) = npval2(PV_CONTEXT, &(yylsp[(1) - (6)]), &(yylsp[(6) - (6)]));
-                       (yyval.pval)->u1.str = (yyvsp[(3) - (6)].str);
-                       (yyval.pval)->u2.statements = (yyvsp[(5) - (6)].pval);
-                       set_dads((yyval.pval),(yyvsp[(5) - (6)].pval));
-                       (yyval.pval)->u3.abstract = (yyvsp[(1) - (6)].intval);} ;}
+               (yyval.pval) = npval2(PV_CONTEXT, &(yylsp[(1) - (6)]), &(yylsp[(6) - (6)]));
+               (yyval.pval)->u1.str = (yyvsp[(3) - (6)].str);
+               (yyval.pval)->u2.statements = (yyvsp[(5) - (6)].pval);
+               set_dads((yyval.pval),(yyvsp[(5) - (6)].pval));
+               (yyval.pval)->u3.abstract = (yyvsp[(1) - (6)].intval);;}
     break;
 
   case 13:
-#line 219 "ael.y"
+#line 218 "ael.y"
     { (yyval.intval) = 1; ;}
     break;
 
   case 14:
-#line 220 "ael.y"
+#line 219 "ael.y"
     { (yyval.intval) = 0; ;}
     break;
 
   case 15:
-#line 223 "ael.y"
+#line 220 "ael.y"
+    { (yyval.intval) = 2; ;}
+    break;
+
+  case 16:
+#line 221 "ael.y"
+    { (yyval.intval)=3; ;}
+    break;
+
+  case 17:
+#line 222 "ael.y"
+    { (yyval.intval)=3; ;}
+    break;
+
+  case 18:
+#line 225 "ael.y"
     {
                (yyval.pval) = npval2(PV_MACRO, &(yylsp[(1) - (8)]), &(yylsp[(8) - (8)]));
                (yyval.pval)->u1.str = (yyvsp[(2) - (8)].str); (yyval.pval)->u2.arglist = (yyvsp[(4) - (8)].pval); (yyval.pval)->u3.macro_statements = (yyvsp[(7) - (8)].pval);
         set_dads((yyval.pval),(yyvsp[(7) - (8)].pval));;}
     break;
 
-  case 16:
-#line 229 "ael.y"
+  case 19:
+#line 231 "ael.y"
     {
                (yyval.pval) = npval2(PV_GLOBALS, &(yylsp[(1) - (4)]), &(yylsp[(4) - (4)]));
                (yyval.pval)->u1.statements = (yyvsp[(3) - (4)].pval);
         set_dads((yyval.pval),(yyvsp[(3) - (4)].pval));;}
     break;
 
-  case 17:
-#line 235 "ael.y"
+  case 20:
+#line 237 "ael.y"
     { (yyval.pval) = NULL; ;}
     break;
 
-  case 18:
-#line 236 "ael.y"
+  case 21:
+#line 238 "ael.y"
     {(yyval.pval) = linku1((yyvsp[(1) - (2)].pval), (yyvsp[(2) - (2)].pval)); ;}
     break;
 
-  case 19:
-#line 237 "ael.y"
-    {(yyval.pval)=(yyvsp[(1) - (2)].pval);;}
+  case 22:
+#line 239 "ael.y"
+    {(yyval.pval)=(yyvsp[(2) - (2)].pval);;}
     break;
 
-  case 20:
-#line 240 "ael.y"
+  case 23:
+#line 242 "ael.y"
     { reset_semicount(parseio->scanner); ;}
     break;
 
-  case 21:
-#line 240 "ael.y"
+  case 24:
+#line 242 "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 248 "ael.y"
     { reset_semicount(parseio->scanner); ;}
     break;
 
-  case 23:
-#line 246 "ael.y"
+  case 26:
+#line 248 "ael.y"
     {
                (yyval.pval) = npval2(PV_LOCALVARDEC, &(yylsp[(1) - (6)]), &(yylsp[(6) - (6)]));
                (yyval.pval)->u1.str = (yyvsp[(2) - (6)].str);
                (yyval.pval)->u2.val = (yyvsp[(5) - (6)].str); ;}
     break;
 
-  case 24:
-#line 253 "ael.y"
+  case 27:
+#line 255 "ael.y"
     { (yyval.pval) = NULL; ;}
     break;
 
-  case 25:
-#line 254 "ael.y"
+  case 28:
+#line 256 "ael.y"
     { (yyval.pval) = nword((yyvsp[(1) - (1)].str), &(yylsp[(1) - (1)])); ;}
     break;
 
-  case 26:
-#line 255 "ael.y"
+  case 29:
+#line 257 "ael.y"
     { (yyval.pval) = linku1((yyvsp[(1) - (3)].pval), nword((yyvsp[(3) - (3)].str), &(yylsp[(3) - (3)]))); ;}
     break;
 
-  case 27:
-#line 256 "ael.y"
+  case 30:
+#line 258 "ael.y"
     {(yyval.pval)=(yyvsp[(1) - (2)].pval);;}
     break;
 
-  case 28:
-#line 259 "ael.y"
+  case 31:
+#line 261 "ael.y"
     {(yyval.pval)=0;;}
     break;
 
-  case 29:
-#line 260 "ael.y"
+  case 32:
+#line 262 "ael.y"
     { (yyval.pval) = linku1((yyvsp[(1) - (2)].pval), (yyvsp[(2) - (2)].pval)); ;}
     break;
 
-  case 30:
-#line 261 "ael.y"
-    { (yyval.pval)=(yyvsp[(1) - (2)].pval);;}
-    break;
-
-  case 31:
-#line 264 "ael.y"
-    {(yyval.pval)=(yyvsp[(1) - (1)].pval);;}
-    break;
-
-  case 32:
-#line 265 "ael.y"
-    {(yyval.pval)=(yyvsp[(1) - (1)].pval);;}
+  case 33:
+#line 263 "ael.y"
+    { (yyval.pval)=(yyvsp[(2) - (2)].pval);;}
     break;
 
-  case 33:
+  case 34:
 #line 266 "ael.y"
     {(yyval.pval)=(yyvsp[(1) - (1)].pval);;}
     break;
 
-  case 34:
+  case 35:
 #line 267 "ael.y"
     {(yyval.pval)=(yyvsp[(1) - (1)].pval);;}
     break;
 
-  case 35:
+  case 36:
 #line 268 "ael.y"
     {(yyval.pval)=(yyvsp[(1) - (1)].pval);;}
     break;
 
-  case 36:
+  case 37:
 #line 269 "ael.y"
     {(yyval.pval)=(yyvsp[(1) - (1)].pval);;}
     break;
 
-  case 37:
+  case 38:
 #line 270 "ael.y"
     {(yyval.pval)=(yyvsp[(1) - (1)].pval);;}
     break;
 
-  case 38:
+  case 39:
 #line 271 "ael.y"
-    {free((yyvsp[(1) - (2)].str)); (yyval.pval)=0;;}
+    {(yyval.pval)=(yyvsp[(1) - (1)].pval);;}
     break;
 
-  case 39:
+  case 40:
 #line 272 "ael.y"
+    {(yyval.pval)=(yyvsp[(1) - (1)].pval);;}
+    break;
+
+  case 41:
+#line 273 "ael.y"
+    {free((yyvsp[(1) - (2)].str)); (yyval.pval)=0;;}
+    break;
+
+  case 42:
+#line 274 "ael.y"
     {(yyval.pval)=0;/* allow older docs to be read */;}
     break;
 
-  case 40:
-#line 275 "ael.y"
+  case 43:
+#line 277 "ael.y"
     {
                (yyval.pval) = npval2(PV_IGNOREPAT, &(yylsp[(1) - (4)]), &(yylsp[(4) - (4)]));
                (yyval.pval)->u1.str = (yyvsp[(3) - (4)].str);;}
     break;
 
-  case 41:
-#line 280 "ael.y"
+  case 44:
+#line 282 "ael.y"
     {
                (yyval.pval) = npval2(PV_EXTENSION, &(yylsp[(1) - (3)]), &(yylsp[(3) - (3)]));
                (yyval.pval)->u1.str = (yyvsp[(1) - (3)].str);
                (yyval.pval)->u2.statements = (yyvsp[(3) - (3)].pval); set_dads((yyval.pval),(yyvsp[(3) - (3)].pval));;}
     break;
 
-  case 42:
-#line 284 "ael.y"
+  case 45:
+#line 286 "ael.y"
+    {
+               (yyval.pval) = npval2(PV_EXTENSION, &(yylsp[(1) - (5)]), &(yylsp[(3) - (5)]));
+               (yyval.pval)->u1.str = malloc(strlen((yyvsp[(1) - (5)].str))+strlen((yyvsp[(3) - (5)].str))+2);
+               strcpy((yyval.pval)->u1.str,(yyvsp[(1) - (5)].str));
+               strcat((yyval.pval)->u1.str,"@");
+               strcat((yyval.pval)->u1.str,(yyvsp[(3) - (5)].str));
+               free((yyvsp[(1) - (5)].str));
+               (yyval.pval)->u2.statements = (yyvsp[(5) - (5)].pval); set_dads((yyval.pval),(yyvsp[(5) - (5)].pval));;}
+    break;
+
+  case 46:
+#line 294 "ael.y"
     {
                (yyval.pval) = npval2(PV_EXTENSION, &(yylsp[(1) - (4)]), &(yylsp[(4) - (4)]));
                (yyval.pval)->u1.str = (yyvsp[(2) - (4)].str);
@@ -2328,8 +2379,8 @@ yyreduce:
                (yyval.pval)->u4.regexten=1;;}
     break;
 
-  case 43:
-#line 289 "ael.y"
+  case 47:
+#line 299 "ael.y"
     {
                (yyval.pval) = npval2(PV_EXTENSION, &(yylsp[(1) - (7)]), &(yylsp[(7) - (7)]));
                (yyval.pval)->u1.str = (yyvsp[(5) - (7)].str);
@@ -2337,8 +2388,8 @@ yyreduce:
                (yyval.pval)->u3.hints = (yyvsp[(3) - (7)].str);;}
     break;
 
-  case 44:
-#line 294 "ael.y"
+  case 48:
+#line 304 "ael.y"
     {
                (yyval.pval) = npval2(PV_EXTENSION, &(yylsp[(1) - (8)]), &(yylsp[(8) - (8)]));
                (yyval.pval)->u1.str = (yyvsp[(6) - (8)].str);
@@ -2347,37 +2398,42 @@ yyreduce:
                (yyval.pval)->u3.hints = (yyvsp[(4) - (8)].str);;}
     break;
 
-  case 45:
-#line 304 "ael.y"
+  case 49:
+#line 313 "ael.y"
     { (yyval.pval) = NULL; ;}
     break;
 
-  case 46:
-#line 305 "ael.y"
+  case 50:
+#line 314 "ael.y"
     { (yyval.pval) = linku1((yyvsp[(1) - (2)].pval), (yyvsp[(2) - (2)].pval)); ;}
     break;
 
-  case 47:
-#line 306 "ael.y"
-    {(yyval.pval)=(yyvsp[(1) - (2)].pval);;}
+  case 51:
+#line 315 "ael.y"
+    {(yyval.pval)=(yyvsp[(2) - (2)].pval);;}
     break;
 
-  case 48:
-#line 312 "ael.y"
+  case 52:
+#line 321 "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));
-               free((yyvsp[(3) - (5)].str));
-               free((yyvsp[(5) - (5)].str)); ;}
+               if (asprintf(&(yyval.str), "%s:%s:%s", (yyvsp[(1) - (5)].str), (yyvsp[(3) - (5)].str), (yyvsp[(5) - (5)].str)) < 0) {
+                       ast_log(LOG_WARNING, "asprintf() failed\n");
+                       (yyval.str) = NULL;
+               } else {
+                       free((yyvsp[(1) - (5)].str));
+                       free((yyvsp[(3) - (5)].str));
+                       free((yyvsp[(5) - (5)].str));
+               }
+       ;}
     break;
 
-  case 49:
-#line 317 "ael.y"
+  case 53:
+#line 331 "ael.y"
     { (yyval.str) = (yyvsp[(1) - (1)].str); ;}
     break;
 
-  case 50:
-#line 321 "ael.y"
+  case 54:
+#line 335 "ael.y"
     {
                (yyval.pval) = nword((yyvsp[(1) - (7)].str), &(yylsp[(1) - (7)]));
                (yyval.pval)->next = nword((yyvsp[(3) - (7)].str), &(yylsp[(3) - (7)]));
@@ -2385,181 +2441,229 @@ yyreduce:
                (yyval.pval)->next->next->next = nword((yyvsp[(7) - (7)].str), &(yylsp[(7) - (7)])); ;}
     break;
 
-  case 51:
-#line 329 "ael.y"
+  case 55:
+#line 343 "ael.y"
     { reset_parencount(parseio->scanner); ;}
     break;
 
-  case 52:
-#line 329 "ael.y"
+  case 56:
+#line 343 "ael.y"
     { (yyval.str) = (yyvsp[(3) - (4)].str); ;}
     break;
 
-  case 53:
-#line 333 "ael.y"
+  case 57:
+#line 347 "ael.y"
     {
                (yyval.pval)= npval2(PV_IF, &(yylsp[(1) - (2)]), &(yylsp[(2) - (2)]));
                (yyval.pval)->u1.str = (yyvsp[(2) - (2)].str); ;}
     break;
 
-  case 54:
-#line 336 "ael.y"
+  case 58:
+#line 350 "ael.y"
     {
                (yyval.pval) = npval2(PV_RANDOM, &(yylsp[(1) - (2)]), &(yylsp[(2) - (2)]));
                (yyval.pval)->u1.str=(yyvsp[(2) - (2)].str);;}
     break;
 
-  case 55:
-#line 339 "ael.y"
+  case 59:
+#line 353 "ael.y"
     {
                (yyval.pval) = npval2(PV_IFTIME, &(yylsp[(1) - (4)]), &(yylsp[(4) - (4)]));
                (yyval.pval)->u1.list = (yyvsp[(3) - (4)].pval);
                prev_word = 0; ;}
     break;
 
-  case 56:
-#line 350 "ael.y"
+  case 60:
+#line 364 "ael.y"
     { (yyval.str) = (yyvsp[(1) - (1)].str);;}
     break;
 
-  case 57:
-#line 351 "ael.y"
+  case 61:
+#line 365 "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));
-               prev_word = (yyval.str);;}
+               if (asprintf(&((yyval.str)), "%s%s", (yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].str)) < 0) {
+                       ast_log(LOG_WARNING, "asprintf() failed\n");
+                       (yyval.str) = NULL;
+               } else {
+                       free((yyvsp[(1) - (2)].str));
+                       free((yyvsp[(2) - (2)].str));
+                       prev_word = (yyval.str);
+               }
+       ;}
     break;
 
-  case 58:
-#line 358 "ael.y"
+  case 62:
+#line 377 "ael.y"
     { (yyval.str) = (yyvsp[(1) - (1)].str); ;}
     break;
 
-  case 59:
-#line 359 "ael.y"
+  case 63:
+#line 378 "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)); ;}
+               if (asprintf(&((yyval.str)), "%s %s", (yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].str)) < 0) {
+                       ast_log(LOG_WARNING, "asprintf() failed\n");
+                       (yyval.str) = NULL;
+               } else {
+                       free((yyvsp[(1) - (2)].str));
+                       free((yyvsp[(2) - (2)].str));
+               }
+       ;}
     break;
 
-  case 60:
-#line 363 "ael.y"
+  case 64:
+#line 387 "ael.y"
+    {
+               if (asprintf(&((yyval.str)), "%s:%s", (yyvsp[(1) - (3)].str), (yyvsp[(3) - (3)].str)) < 0) {
+                       ast_log(LOG_WARNING, "asprintf() failed\n");
+                       (yyval.str) = NULL;
+               } else {
+                       free((yyvsp[(1) - (3)].str));
+                       free((yyvsp[(3) - (3)].str));
+               }
+       ;}
+    break;
+
+  case 65:
+#line 396 "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));;}
+               if (asprintf(&((yyval.str)), "%s&%s", (yyvsp[(1) - (3)].str), (yyvsp[(3) - (3)].str)) < 0) {
+                       ast_log(LOG_WARNING, "asprintf() failed\n");
+                       (yyval.str) = NULL;
+               } else {
+                       free((yyvsp[(1) - (3)].str));
+                       free((yyvsp[(3) - (3)].str));
+               }
+       ;}
     break;
 
-  case 61:
-#line 369 "ael.y"
+  case 66:
+#line 407 "ael.y"
     { (yyval.str) = (yyvsp[(1) - (1)].str);;}
     break;
 
-  case 62:
-#line 370 "ael.y"
+  case 67:
+#line 408 "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));
-               prev_word = (yyval.str);;}
+               if (asprintf(&((yyval.str)), "%s%s", (yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].str)) < 0) {
+                       ast_log(LOG_WARNING, "asprintf() failed\n");
+                       (yyval.str) = NULL;
+               } else {
+                       free((yyvsp[(1) - (2)].str));
+                       free((yyvsp[(2) - (2)].str));
+                       prev_word = (yyval.str);
+               }                       
+       ;}
     break;
 
-  case 63:
-#line 375 "ael.y"
+  case 68:
+#line 418 "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));
-               free((yyvsp[(2) - (3)].str));
-               free((yyvsp[(3) - (3)].str));
-               prev_word=(yyval.str);;}
+               if (asprintf(&((yyval.str)), "%s%s%s", (yyvsp[(1) - (3)].str), (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str)) < 0) {
+                       ast_log(LOG_WARNING, "asprintf() failed\n");
+                       (yyval.str) = NULL;
+               } else {
+                       free((yyvsp[(1) - (3)].str));
+                       free((yyvsp[(2) - (3)].str));
+                       free((yyvsp[(3) - (3)].str));
+                       prev_word=(yyval.str);
+               }
+       ;}
     break;
 
-  case 64:
-#line 383 "ael.y"
+  case 69:
+#line 431 "ael.y"
     { (yyval.str) = (yyvsp[(1) - (1)].str);;}
     break;
 
-  case 65:
-#line 384 "ael.y"
+  case 70:
+#line 432 "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));;}
+               if (asprintf(&((yyval.str)), "%s%s", (yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].str)) < 0) {
+                       ast_log(LOG_WARNING, "asprintf() failed\n");
+                       (yyval.str) = NULL;
+               } else {
+                       free((yyvsp[(1) - (2)].str));
+                       free((yyvsp[(2) - (2)].str));
+               }
+       ;}
     break;
 
-  case 66:
-#line 388 "ael.y"
+  case 71:
+#line 441 "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));;}
+               if (asprintf(&((yyval.str)), "%s:%s", (yyvsp[(1) - (3)].str), (yyvsp[(3) - (3)].str)) < 0) {
+                       ast_log(LOG_WARNING, "asprintf() failed\n");
+                       (yyval.str) = NULL;
+               } else {
+                       free((yyvsp[(1) - (3)].str));
+                       free((yyvsp[(3) - (3)].str));
+               }
+       ;}
     break;
 
-  case 67:
-#line 394 "ael.y"
+  case 72:
+#line 452 "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 68:
-#line 403 "ael.y"
+  case 73:
+#line 461 "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 69:
-#line 406 "ael.y"
+  case 74:
+#line 464 "ael.y"
     { (yyval.pval) = (yyvsp[(1) - (1)].pval); ;}
     break;
 
-  case 70:
-#line 407 "ael.y"
+  case 75:
+#line 465 "ael.y"
     { (yyval.pval) = (yyvsp[(1) - (1)].pval); ;}
     break;
 
-  case 71:
-#line 408 "ael.y"
+  case 76:
+#line 466 "ael.y"
     {
                (yyval.pval) = npval2(PV_GOTO, &(yylsp[(1) - (3)]), &(yylsp[(3) - (3)]));
                (yyval.pval)->u1.list = (yyvsp[(2) - (3)].pval);;}
     break;
 
-  case 72:
-#line 411 "ael.y"
+  case 77:
+#line 469 "ael.y"
     {
                (yyval.pval) = npval2(PV_GOTO, &(yylsp[(1) - (3)]), &(yylsp[(3) - (3)]));
                (yyval.pval)->u1.list = (yyvsp[(2) - (3)].pval);;}
     break;
 
-  case 73:
-#line 414 "ael.y"
+  case 78:
+#line 472 "ael.y"
     {
                (yyval.pval) = npval2(PV_LABEL, &(yylsp[(1) - (2)]), &(yylsp[(2) - (2)]));
                (yyval.pval)->u1.str = (yyvsp[(1) - (2)].str); ;}
     break;
 
-  case 74:
-#line 417 "ael.y"
+  case 79:
+#line 475 "ael.y"
     {reset_semicount(parseio->scanner);;}
     break;
 
-  case 75:
-#line 418 "ael.y"
+  case 80:
+#line 476 "ael.y"
     {reset_semicount(parseio->scanner);;}
     break;
 
-  case 76:
-#line 419 "ael.y"
+  case 81:
+#line 477 "ael.y"
     {reset_parencount(parseio->scanner);;}
     break;
 
-  case 77:
-#line 419 "ael.y"
+  case 82:
+#line 477 "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);
@@ -2568,43 +2672,43 @@ yyreduce:
                (yyval.pval)->u4.for_statements = (yyvsp[(12) - (12)].pval); set_dads((yyval.pval),(yyvsp[(12) - (12)].pval));;}
     break;
 
-  case 78:
-#line 425 "ael.y"
+  case 83:
+#line 483 "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 79:
-#line 429 "ael.y"
+  case 84:
+#line 487 "ael.y"
     { (yyval.pval) = (yyvsp[(1) - (1)].pval); ;}
     break;
 
-  case 80:
-#line 430 "ael.y"
+  case 85:
+#line 488 "ael.y"
     { (yyval.pval) = update_last((yyvsp[(2) - (3)].pval), &(yylsp[(2) - (3)])); ;}
     break;
 
-  case 81:
-#line 431 "ael.y"
+  case 86:
+#line 489 "ael.y"
     { (yyval.pval) = update_last((yyvsp[(1) - (2)].pval), &(yylsp[(2) - (2)])); ;}
     break;
 
-  case 82:
-#line 432 "ael.y"
+  case 87:
+#line 490 "ael.y"
     {
                (yyval.pval)= npval2(PV_APPLICATION_CALL, &(yylsp[(1) - (2)]), &(yylsp[(2) - (2)]));
                (yyval.pval)->u1.str = (yyvsp[(1) - (2)].str);;}
     break;
 
-  case 83:
-#line 435 "ael.y"
+  case 88:
+#line 493 "ael.y"
     {reset_semicount(parseio->scanner);;}
     break;
 
-  case 84:
-#line 435 "ael.y"
+  case 89:
+#line 493 "ael.y"
     {
                char *bufx;
                int tot=0;
@@ -2640,127 +2744,127 @@ yyreduce:
        ;}
     break;
 
-  case 85:
-#line 468 "ael.y"
+  case 90:
+#line 526 "ael.y"
     { (yyval.pval) = npval2(PV_BREAK, &(yylsp[(1) - (2)]), &(yylsp[(2) - (2)])); ;}
     break;
 
-  case 86:
-#line 469 "ael.y"
+  case 91:
+#line 527 "ael.y"
     { (yyval.pval) = npval2(PV_RETURN, &(yylsp[(1) - (2)]), &(yylsp[(2) - (2)])); ;}
     break;
 
-  case 87:
-#line 470 "ael.y"
+  case 92:
+#line 528 "ael.y"
     { (yyval.pval) = npval2(PV_CONTINUE, &(yylsp[(1) - (2)]), &(yylsp[(2) - (2)])); ;}
     break;
 
-  case 88:
-#line 471 "ael.y"
+  case 93:
+#line 529 "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 89:
-#line 475 "ael.y"
+  case 94:
+#line 533 "ael.y"
     { (yyval.pval)=0; ;}
     break;
 
-  case 90:
-#line 478 "ael.y"
+  case 95:
+#line 536 "ael.y"
     { (yyval.pval) = (yyvsp[(2) - (2)].pval); ;}
     break;
 
-  case 91:
-#line 479 "ael.y"
+  case 96:
+#line 537 "ael.y"
     { (yyval.pval) = NULL ; ;}
     break;
 
-  case 92:
-#line 482 "ael.y"
+  case 97:
+#line 540 "ael.y"
     { (yyval.pval) = nword((yyvsp[(1) - (1)].str), &(yylsp[(1) - (1)])); ;}
     break;
 
-  case 93:
-#line 483 "ael.y"
+  case 98:
+#line 541 "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 94:
-#line 486 "ael.y"
+  case 99:
+#line 544 "ael.y"
     {
                (yyval.pval) = nword((yyvsp[(1) - (3)].str), &(yylsp[(1) - (3)]));
                (yyval.pval)->next = nword((yyvsp[(3) - (3)].str), &(yylsp[(3) - (3)])); ;}
     break;
 
-  case 95:
-#line 489 "ael.y"
+  case 100:
+#line 547 "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 96:
-#line 493 "ael.y"
+  case 101:
+#line 551 "ael.y"
     {
                (yyval.pval) = nword((yyvsp[(1) - (5)].str), &(yylsp[(1) - (5)]));
                (yyval.pval)->next = nword((yyvsp[(3) - (5)].str), &(yylsp[(3) - (5)]));
                (yyval.pval)->next->next = nword((yyvsp[(5) - (5)].str), &(yylsp[(5) - (5)])); ;}
     break;
 
-  case 97:
-#line 497 "ael.y"
+  case 102:
+#line 555 "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 98:
-#line 501 "ael.y"
+  case 103:
+#line 559 "ael.y"
     {
                (yyval.pval) = nword(strdup("default"), &(yylsp[(1) - (5)]));
                (yyval.pval)->next = nword((yyvsp[(3) - (5)].str), &(yylsp[(3) - (5)]));
                (yyval.pval)->next->next = nword((yyvsp[(5) - (5)].str), &(yylsp[(5) - (5)])); ;}
     break;
 
-  case 99:
-#line 507 "ael.y"
+  case 104:
+#line 565 "ael.y"
     { (yyval.str) = strdup("1"); ;}
     break;
 
-  case 100:
-#line 508 "ael.y"
+  case 105:
+#line 566 "ael.y"
     { (yyval.str) = (yyvsp[(2) - (2)].str); ;}
     break;
 
-  case 101:
-#line 512 "ael.y"
+  case 106:
+#line 570 "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 102:
-#line 515 "ael.y"
+  case 107:
+#line 573 "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 103:
-#line 521 "ael.y"
+  case 108:
+#line 579 "ael.y"
     {reset_argcount(parseio->scanner);;}
     break;
 
-  case 104:
-#line 521 "ael.y"
+  case 109:
+#line 579 "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)]));
@@ -2768,20 +2872,20 @@ yyreduce:
                (yyval.pval)->u2.arglist = (yyvsp[(4) - (5)].pval);;}
     break;
 
-  case 105:
-#line 526 "ael.y"
+  case 110:
+#line 584 "ael.y"
     {
                (yyval.pval)= npval2(PV_MACRO_CALL, &(yylsp[(1) - (3)]), &(yylsp[(3) - (3)]));
                (yyval.pval)->u1.str = (yyvsp[(1) - (3)].str); ;}
     break;
 
-  case 106:
-#line 534 "ael.y"
+  case 111:
+#line 592 "ael.y"
     {reset_argcount(parseio->scanner);;}
     break;
 
-  case 107:
-#line 534 "ael.y"
+  case 112:
+#line 592 "ael.y"
     {
                if (strcasecmp((yyvsp[(1) - (3)].str),"goto") == 0) {
                        (yyval.pval) = npval2(PV_GOTO, &(yylsp[(1) - (3)]), &(yylsp[(2) - (3)]));
@@ -2793,8 +2897,8 @@ yyreduce:
                } ;}
     break;
 
-  case 108:
-#line 545 "ael.y"
+  case 113:
+#line 603 "ael.y"
     {
                (yyval.pval) = update_last((yyvsp[(1) - (3)].pval), &(yylsp[(3) - (3)]));
                if( (yyval.pval)->type == PV_GOTO )
@@ -2804,179 +2908,188 @@ yyreduce:
        ;}
     break;
 
-  case 109:
-#line 552 "ael.y"
+  case 114:
+#line 610 "ael.y"
     { (yyval.pval) = update_last((yyvsp[(1) - (2)].pval), &(yylsp[(2) - (2)])); ;}
     break;
 
-  case 110:
-#line 555 "ael.y"
+  case 115:
+#line 613 "ael.y"
     { (yyval.str) = (yyvsp[(1) - (1)].str) ;}
     break;
 
-  case 111:
-#line 556 "ael.y"
+  case 116:
+#line 614 "ael.y"
     { (yyval.str) = strdup(""); ;}
     break;
 
-  case 112:
-#line 559 "ael.y"
+  case 117:
+#line 617 "ael.y"
     { (yyval.pval) = nword((yyvsp[(1) - (1)].str), &(yylsp[(1) - (1)])); ;}
     break;
 
-  case 113:
-#line 560 "ael.y"
+  case 118:
+#line 618 "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 114:
-#line 563 "ael.y"
+  case 119:
+#line 621 "ael.y"
     { (yyval.pval) = linku1((yyvsp[(1) - (3)].pval), nword((yyvsp[(3) - (3)].str), &(yylsp[(3) - (3)]))); ;}
     break;
 
-  case 115:
-#line 566 "ael.y"
+  case 120:
+#line 624 "ael.y"
     { (yyval.pval) = NULL; ;}
     break;
 
-  case 116:
-#line 567 "ael.y"
+  case 121:
+#line 625 "ael.y"
     { (yyval.pval) = linku1((yyvsp[(1) - (2)].pval), (yyvsp[(2) - (2)].pval)); ;}
     break;
 
-  case 117:
-#line 570 "ael.y"
+  case 122:
+#line 628 "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 118:
-#line 574 "ael.y"
+  case 123:
+#line 632 "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 119:
-#line 578 "ael.y"
+  case 124:
+#line 636 "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 120:
-#line 584 "ael.y"
+  case 125:
+#line 642 "ael.y"
     { (yyval.pval) = NULL; ;}
     break;
 
-  case 121:
-#line 585 "ael.y"
+  case 126:
+#line 643 "ael.y"
     { (yyval.pval) = linku1((yyvsp[(1) - (2)].pval), (yyvsp[(2) - (2)].pval)); ;}
     break;
 
-  case 122:
-#line 588 "ael.y"
+  case 127:
+#line 646 "ael.y"
     {(yyval.pval)=(yyvsp[(1) - (1)].pval);;}
     break;
 
-  case 123:
-#line 589 "ael.y"
+  case 128:
+#line 647 "ael.y"
     { (yyval.pval)=(yyvsp[(1) - (1)].pval);;}
     break;
 
-  case 124:
-#line 590 "ael.y"
+  case 129:
+#line 648 "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 125:
-#line 596 "ael.y"
+  case 130:
+#line 654 "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 126:
-#line 601 "ael.y"
+  case 131:
+#line 659 "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 127:
-#line 606 "ael.y"
+  case 132:
+#line 664 "ael.y"
     { (yyval.pval) = NULL; ;}
     break;
 
-  case 128:
-#line 607 "ael.y"
-    { (yyval.pval) = linku1(nword((yyvsp[(1) - (3)].str), &(yylsp[(1) - (3)])), (yyvsp[(3) - (3)].pval)); ;}
+  case 133:
+#line 665 "ael.y"
+    { (yyval.pval) = linku1((yyvsp[(1) - (3)].pval),nword((yyvsp[(2) - (3)].str), &(yylsp[(2) - (3)]))); ;}
     break;
 
-  case 129:
-#line 608 "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));;}
+  case 134:
+#line 666 "ael.y"
+    {
+         char *x;
+         if (asprintf(&x,"%s@%s", (yyvsp[(2) - (5)].str), (yyvsp[(4) - (5)].str)) < 0) {
+               ast_log(LOG_WARNING, "asprintf() failed\n");
+               (yyval.pval) = NULL;
+         } else {
+               free((yyvsp[(2) - (5)].str));
+               free((yyvsp[(4) - (5)].str));
+               (yyval.pval) = linku1((yyvsp[(1) - (5)].pval),nword(x, &(yylsp[(2) - (5)])));
+         }
+       ;}
     break;
 
-  case 130:
-#line 610 "ael.y"
-    {(yyval.pval)=(yyvsp[(1) - (2)].pval);;}
+  case 135:
+#line 677 "ael.y"
+    {(yyval.pval)=(yyvsp[(2) - (2)].pval);;}
     break;
 
-  case 131:
-#line 613 "ael.y"
+  case 136:
+#line 680 "ael.y"
     { (yyval.pval) = nword((yyvsp[(1) - (1)].str), &(yylsp[(1) - (1)])); ;}
     break;
 
-  case 132:
-#line 614 "ael.y"
+  case 137:
+#line 681 "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 133:
-#line 621 "ael.y"
+  case 138:
+#line 688 "ael.y"
     { (yyval.pval) = (yyvsp[(1) - (2)].pval); ;}
     break;
 
-  case 134:
-#line 622 "ael.y"
+  case 139:
+#line 689 "ael.y"
     { (yyval.pval) = linku1((yyvsp[(1) - (3)].pval), (yyvsp[(2) - (3)].pval)); ;}
     break;
 
-  case 135:
-#line 623 "ael.y"
+  case 140:
+#line 690 "ael.y"
     {(yyval.pval)=(yyvsp[(1) - (2)].pval);;}
     break;
 
-  case 136:
-#line 626 "ael.y"
+  case 141:
+#line 693 "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 137:
-#line 629 "ael.y"
+  case 142:
+#line 696 "ael.y"
     {
                (yyval.pval) = npval2(PV_INCLUDES, &(yylsp[(1) - (3)]), &(yylsp[(3) - (3)]));;}
     break;
 
 
 /* Line 1267 of yacc.c.  */
-#line 2980 "ael.tab.c"
+#line 3093 "ael.tab.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -3196,7 +3309,7 @@ yyreturn:
 }
 
 
-#line 634 "ael.y"
+#line 701 "ael.y"
 
 
 static char *token_equivs1[] =
@@ -3280,11 +3393,11 @@ static char *token_equivs2[] =
 };
 
 
-static char *ael_token_subst(char *mess)
+static char *ael_token_subst(const char *mess)
 {
        /* calc a length, malloc, fill, and return; yyerror had better free it! */
        int len=0,i;
-       char *p;
+       const char *p;
        char *res, *s,*t;
        int token_equivs_entries = sizeof(token_equivs1)/sizeof(char*);