more merge of common blocks through intermediate rules.
authorLuigi Rizzo <rizzo@icir.org>
Sun, 30 Apr 2006 12:44:54 +0000 (12:44 +0000)
committerLuigi Rizzo <rizzo@icir.org>
Sun, 30 Apr 2006 12:44:54 +0000 (12:44 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@23614 65c4cc65-6c06-0410-ace0-fbb531ad65f3

pbx/ael/ael.tab.c
pbx/ael/ael.tab.h
pbx/ael/ael.y

index f0e5d78..1f9eb12 100644 (file)
@@ -223,11 +223,12 @@ static char *ael_token_subst(char *mess);
 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
 #line 53 "ael.y"
 typedef union YYSTYPE {
-       char *str;
-       struct pval *pval;
+       int     intval;         /* integer value, typically flags */
+       char    *str;           /* strings */
+       struct pval *pval;      /* full objects */
 } YYSTYPE;
 /* Line 196 of yacc.c.  */
-#line 231 "ael.tab.c"
+#line 232 "ael.tab.c"
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
 # define YYSTYPE_IS_TRIVIAL 1
@@ -248,7 +249,7 @@ typedef struct YYLTYPE
 
 
 /* Copy the second part of user declarations.  */
-#line 58 "ael.y"
+#line 59 "ael.y"
 
        /* declaring these AFTER the union makes things a lot simpler! */
 void yyerror(YYLTYPE *locp, struct parse_io *parseio, char const *s);
@@ -264,7 +265,7 @@ static pval *update_last(pval *, YYLTYPE *);
 
 
 /* Line 219 of yacc.c.  */
-#line 268 "ael.tab.c"
+#line 269 "ael.tab.c"
 
 #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
 # define YYSIZE_T __SIZE_TYPE__
@@ -415,18 +416,18 @@ union yyalloc
 #endif
 
 /* YYFINAL -- State number of the termination state. */
-#define YYFINAL  18
+#define YYFINAL  14
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   488
+#define YYLAST   489
 
 /* YYNTOKENS -- Number of terminals. */
 #define YYNTOKENS  42
 /* YYNNTS -- Number of nonterminals. */
-#define YYNNTS  56
+#define YYNNTS  58
 /* YYNRULES -- Number of rules. */
-#define YYNRULES  149
+#define YYNRULES  151
 /* YYNRULES -- Number of states. */
-#define YYNSTATES  344
+#define YYNSTATES  343
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -476,104 +477,106 @@ static const unsigned char yytranslate[] =
 static const unsigned short int yyprhs[] =
 {
        0,     0,     3,     5,     7,    10,    13,    15,    17,    19,
-      21,    23,    25,    29,    34,    43,    51,    59,    66,    71,
-      75,    77,    80,    83,    84,    90,    92,    96,    99,   102,
-     106,   108,   110,   113,   116,   118,   120,   122,   124,   126,
-     127,   133,   136,   138,   143,   147,   152,   160,   169,   171,
-     174,   177,   178,   184,   185,   191,   206,   217,   219,   222,
-     224,   227,   231,   233,   236,   240,   241,   248,   252,   253,
-     259,   263,   267,   270,   271,   272,   273,   286,   287,   294,
-     297,   301,   305,   308,   311,   312,   318,   321,   324,   327,
-     331,   335,   339,   341,   344,   345,   347,   351,   355,   361,
-     367,   373,   379,   381,   385,   391,   395,   401,   405,   406,
-     412,   416,   417,   421,   425,   428,   430,   431,   433,   434,
-     438,   440,   443,   448,   452,   457,   461,   464,   468,   470,
-     473,   475,   481,   486,   490,   495,   499,   502,   506,   509,
-     512,   527,   538,   542,   558,   570,   573,   575,   577,   582
+      21,    23,    25,    30,    32,    33,    42,    50,    58,    65,
+      70,    74,    76,    79,    82,    83,    89,    91,    95,    98,
+     101,   105,   107,   109,   112,   115,   117,   119,   121,   123,
+     125,   126,   132,   135,   137,   142,   146,   151,   159,   168,
+     170,   173,   176,   177,   183,   184,   190,   205,   216,   218,
+     221,   223,   226,   230,   232,   235,   239,   240,   247,   251,
+     252,   258,   262,   266,   269,   270,   271,   272,   285,   286,
+     293,   296,   300,   304,   307,   310,   311,   317,   320,   323,
+     326,   330,   334,   338,   340,   343,   344,   346,   350,   354,
+     360,   366,   372,   378,   380,   384,   390,   394,   400,   404,
+     405,   411,   415,   416,   420,   424,   427,   429,   430,   432,
+     433,   437,   439,   442,   447,   451,   456,   460,   463,   467,
+     469,   472,   474,   480,   485,   489,   492,   496,   499,   502,
+     506,   509,   512,   527,   538,   542,   558,   570,   573,   575,
+     577,   582
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS. */
 static const yysigned_char yyrhs[] =
 {
       43,     0,    -1,    44,    -1,    45,    -1,    44,    45,    -1,
-      44,     1,    -1,    47,    -1,    48,    -1,    49,    -1,     8,
-      -1,    41,    -1,    36,    -1,     3,    46,    54,    -1,    23,
-       3,    46,    54,    -1,    15,    41,     6,    53,     7,     4,
-      90,     5,    -1,    15,    41,     6,    53,     7,     4,     5,
-      -1,    15,    41,     6,     7,     4,    90,     5,    -1,    15,
-      41,     6,     7,     4,     5,    -1,    16,     4,    50,     5,
-      -1,    16,     4,     5,    -1,    51,    -1,    50,    51,    -1,
-      50,     1,    -1,    -1,    41,     9,    52,    41,     8,    -1,
-      41,    -1,    53,    10,    41,    -1,    53,     1,    -1,     4,
-       5,    -1,     4,    55,     5,    -1,    56,    -1,     1,    -1,
-      55,    56,    -1,    55,     1,    -1,    59,    -1,    97,    -1,
-      92,    -1,    93,    -1,    58,    -1,    -1,    41,     9,    57,
-      41,     8,    -1,    41,     1,    -1,     8,    -1,    17,    24,
-      41,     8,    -1,    41,    24,    71,    -1,    30,    41,    24,
-      71,    -1,    31,     6,    67,     7,    41,    24,    71,    -1,
-      30,    31,     6,    67,     7,    41,    24,    71,    -1,    71,
-      -1,    60,    71,    -1,    60,     1,    -1,    -1,    19,     6,
-      62,    66,     7,    -1,    -1,    22,     6,    64,    66,     7,
-      -1,    20,     6,    67,    11,    67,    11,    67,    13,    67,
-      13,    67,    13,    67,     7,    -1,    20,     6,    41,    13,
-      67,    13,    67,    13,    67,     7,    -1,    41,    -1,    41,
-      41,    -1,    41,    -1,    41,    41,    -1,    41,    41,    41,
-      -1,    41,    -1,    41,    41,    -1,    41,    11,    41,    -1,
-      -1,    18,     6,    70,    41,     7,     4,    -1,     4,    60,
-       5,    -1,    -1,    41,     9,    72,    41,     8,    -1,    25,
-      79,     8,    -1,    26,    80,     8,    -1,    41,    11,    -1,
-      -1,    -1,    -1,    32,     6,    73,    41,     8,    74,    41,
-       8,    75,    41,     7,    71,    -1,    -1,    33,     6,    76,
-      41,     7,    71,    -1,    69,     5,    -1,    69,    88,     5,
-      -1,    12,    81,     8,    -1,    85,     8,    -1,    41,     8,
-      -1,    -1,    85,     9,    77,    41,     8,    -1,    28,     8,
-      -1,    27,     8,    -1,    29,     8,    -1,    63,    71,    78,
-      -1,    61,    71,    78,    -1,    65,    71,    78,    -1,     8,
-      -1,    21,    71,    -1,    -1,    68,    -1,    68,    13,    68,
-      -1,    68,    10,    68,    -1,    68,    13,    68,    13,    68,
-      -1,    68,    10,    68,    10,    68,    -1,    36,    13,    68,
-      13,    68,    -1,    36,    10,    68,    10,    68,    -1,    68,
-      -1,    68,    10,    68,    -1,    68,    10,    41,    14,    41,
-      -1,    68,    14,    68,    -1,    68,    10,    41,    14,    36,
-      -1,    68,    14,    36,    -1,    -1,    41,     6,    82,    87,
-       7,    -1,    41,     6,     7,    -1,    -1,    41,    84,     6,
-      -1,    83,    87,     7,    -1,    83,     7,    -1,    41,    -1,
-      -1,    66,    -1,    -1,    87,    10,    86,    -1,    89,    -1,
-      88,    89,    -1,    34,    41,    11,    60,    -1,    36,    11,
-      60,    -1,    35,    41,    11,    60,    -1,    34,    41,    11,
-      -1,    36,    11,    -1,    35,    41,    11,    -1,    91,    -1,
-      90,    91,    -1,    71,    -1,    37,    41,     4,    60,     5,
-      -1,    38,     4,    94,     5,    -1,    38,     4,     5,    -1,
-      39,     4,    94,     5,    -1,    39,     4,     5,    -1,    41,
-       8,    -1,    94,    41,     8,    -1,    94,     1,    -1,    96,
-       8,    -1,    96,    13,    67,    11,    67,    11,    67,    13,
-      67,    13,    67,    13,    67,     8,    -1,    96,    13,    41,
-      13,    67,    13,    67,    13,    67,     8,    -1,    95,    96,
-       8,    -1,    95,    96,    13,    67,    11,    67,    11,    67,
-      13,    67,    13,    67,    13,    67,     8,    -1,    95,    96,
-      13,    41,    13,    67,    13,    67,    13,    67,     8,    -1,
-      95,     1,    -1,    41,    -1,    36,    -1,    40,     4,    95,
+      44,     1,    -1,    47,    -1,    49,    -1,    50,    -1,     8,
+      -1,    41,    -1,    36,    -1,    48,     3,    46,    55,    -1,
+      23,    -1,    -1,    15,    41,     6,    54,     7,     4,    91,
+       5,    -1,    15,    41,     6,    54,     7,     4,     5,    -1,
+      15,    41,     6,     7,     4,    91,     5,    -1,    15,    41,
+       6,     7,     4,     5,    -1,    16,     4,    51,     5,    -1,
+      16,     4,     5,    -1,    52,    -1,    51,    52,    -1,    51,
+       1,    -1,    -1,    41,     9,    53,    41,     8,    -1,    41,
+      -1,    54,    10,    41,    -1,    54,     1,    -1,     4,     5,
+      -1,     4,    56,     5,    -1,    57,    -1,     1,    -1,    56,
+      57,    -1,    56,     1,    -1,    60,    -1,    99,    -1,    93,
+      -1,    94,    -1,    59,    -1,    -1,    41,     9,    58,    41,
+       8,    -1,    41,     1,    -1,     8,    -1,    17,    24,    41,
+       8,    -1,    41,    24,    72,    -1,    30,    41,    24,    72,
+      -1,    31,     6,    68,     7,    41,    24,    72,    -1,    30,
+      31,     6,    68,     7,    41,    24,    72,    -1,    72,    -1,
+      61,    72,    -1,    61,     1,    -1,    -1,    19,     6,    63,
+      67,     7,    -1,    -1,    22,     6,    65,    67,     7,    -1,
+      20,     6,    68,    11,    68,    11,    68,    13,    68,    13,
+      68,    13,    68,     7,    -1,    20,     6,    41,    13,    68,
+      13,    68,    13,    68,     7,    -1,    41,    -1,    41,    41,
+      -1,    41,    -1,    41,    41,    -1,    41,    41,    41,    -1,
+      41,    -1,    41,    41,    -1,    41,    11,    41,    -1,    -1,
+      18,     6,    71,    41,     7,     4,    -1,     4,    61,     5,
+      -1,    -1,    41,     9,    73,    41,     8,    -1,    25,    80,
+       8,    -1,    26,    81,     8,    -1,    41,    11,    -1,    -1,
+      -1,    -1,    32,     6,    74,    41,     8,    75,    41,     8,
+      76,    41,     7,    72,    -1,    -1,    33,     6,    77,    41,
+       7,    72,    -1,    70,     5,    -1,    70,    89,     5,    -1,
+      12,    82,     8,    -1,    86,     8,    -1,    41,     8,    -1,
+      -1,    86,     9,    78,    41,     8,    -1,    28,     8,    -1,
+      27,     8,    -1,    29,     8,    -1,    64,    72,    79,    -1,
+      62,    72,    79,    -1,    66,    72,    79,    -1,     8,    -1,
+      21,    72,    -1,    -1,    69,    -1,    69,    13,    69,    -1,
+      69,    10,    69,    -1,    69,    13,    69,    13,    69,    -1,
+      69,    10,    69,    10,    69,    -1,    36,    13,    69,    13,
+      69,    -1,    36,    10,    69,    10,    69,    -1,    69,    -1,
+      69,    10,    69,    -1,    69,    10,    41,    14,    41,    -1,
+      69,    14,    69,    -1,    69,    10,    41,    14,    36,    -1,
+      69,    14,    36,    -1,    -1,    41,     6,    83,    88,     7,
+      -1,    41,     6,     7,    -1,    -1,    41,    85,     6,    -1,
+      84,    88,     7,    -1,    84,     7,    -1,    41,    -1,    -1,
+      67,    -1,    -1,    88,    10,    87,    -1,    90,    -1,    89,
+      90,    -1,    34,    41,    11,    61,    -1,    36,    11,    61,
+      -1,    35,    41,    11,    61,    -1,    34,    41,    11,    -1,
+      36,    11,    -1,    35,    41,    11,    -1,    92,    -1,    91,
+      92,    -1,    72,    -1,    37,    41,     4,    61,     5,    -1,
+      38,     4,    96,     5,    -1,    38,     4,     5,    -1,    39,
+      95,    -1,     4,    96,     5,    -1,     4,     5,    -1,    41,
+       8,    -1,    96,    41,     8,    -1,    96,     1,    -1,    98,
+       8,    -1,    98,    13,    68,    11,    68,    11,    68,    13,
+      68,    13,    68,    13,    68,     8,    -1,    98,    13,    41,
+      13,    68,    13,    68,    13,    68,     8,    -1,    97,    98,
+       8,    -1,    97,    98,    13,    68,    11,    68,    11,    68,
+      13,    68,    13,    68,    13,    68,     8,    -1,    97,    98,
+      13,    41,    13,    68,    13,    68,    13,    68,     8,    -1,
+      97,     1,    -1,    41,    -1,    36,    -1,    40,     4,    97,
        5,    -1,    40,     4,     5,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const unsigned short int yyrline[] =
 {
-       0,   170,   170,   173,   174,   185,   188,   189,   190,   191,
-     194,   195,   198,   202,   209,   212,   215,   219,   224,   227,
-     231,   232,   233,   236,   236,   242,   245,   249,   252,   253,
-     256,   257,   258,   261,   264,   265,   266,   267,   268,   269,
-     269,   273,   274,   277,   282,   286,   291,   296,   305,   306,
-     309,   312,   312,   317,   317,   322,   338,   358,   359,   366,
-     367,   372,   380,   381,   385,   391,   391,   399,   402,   402,
-     406,   409,   412,   415,   416,   417,   415,   423,   423,   427,
-     429,   432,   434,   436,   439,   439,   472,   473,   474,   475,
-     479,   483,   487,   490,   491,   496,   498,   503,   508,   515,
-     522,   529,   538,   543,   548,   555,   562,   569,   578,   578,
-     583,   588,   588,   598,   605,   608,   609,   612,   615,   618,
-     625,   626,   631,   635,   639,   643,   646,   649,   654,   655,
-     660,   661,   667,   670,   674,   677,   681,   684,   689,   692,
-     695,   712,   725,   730,   748,   763,   766,   767,   770,   773
+       0,   174,   174,   177,   178,   189,   192,   193,   194,   195,
+     198,   199,   202,   210,   211,   214,   217,   220,   224,   229,
+     232,   236,   237,   238,   241,   241,   247,   250,   254,   257,
+     258,   261,   262,   263,   266,   269,   270,   271,   272,   273,
+     274,   274,   278,   279,   282,   287,   291,   296,   301,   310,
+     311,   314,   317,   317,   322,   322,   327,   343,   363,   364,
+     371,   372,   377,   385,   386,   390,   396,   396,   404,   407,
+     407,   411,   414,   417,   420,   421,   422,   420,   428,   428,
+     432,   434,   437,   439,   441,   444,   444,   477,   478,   479,
+     480,   484,   488,   492,   495,   496,   501,   503,   508,   513,
+     520,   527,   534,   543,   548,   553,   560,   567,   574,   583,
+     583,   588,   593,   593,   603,   610,   613,   614,   617,   620,
+     623,   630,   631,   636,   640,   644,   648,   651,   654,   659,
+     660,   665,   666,   672,   675,   679,   684,   685,   688,   691,
+     696,   699,   702,   719,   732,   737,   755,   770,   773,   774,
+     777,   780
 };
 #endif
 
@@ -589,16 +592,17 @@ static const char *const yytname[] =
   "KW_RETURN", "KW_BREAK", "KW_CONTINUE", "KW_REGEXTEN", "KW_HINT",
   "KW_FOR", "KW_WHILE", "KW_CASE", "KW_PATTERN", "KW_DEFAULT", "KW_CATCH",
   "KW_SWITCHES", "KW_ESWITCHES", "KW_INCLUDES", "word", "$accept", "file",
-  "objects", "object", "word_or_default", "context", "macro", "globals",
-  "global_statements", "global_statement", "@1", "arglist",
-  "elements_block", "elements", "element", "@2", "ignorepat", "extension",
-  "statements", "if_head", "@3", "random_head", "@4", "iftime_head",
-  "word_list", "word3_list", "goto_word", "switch_head", "@5", "statement",
-  "@6", "@7", "@8", "@9", "@10", "@11", "opt_else", "target", "jumptarget",
-  "macro_call", "@12", "application_call_head", "@13", "application_call",
-  "opt_word", "eval_arglist", "case_statements", "case_statement",
-  "macro_statements", "macro_statement", "switches", "eswitches",
-  "switchlist", "includeslist", "includedname", "includes", 0
+  "objects", "object", "word_or_default", "context", "opt_abstract",
+  "macro", "globals", "global_statements", "global_statement", "@1",
+  "arglist", "elements_block", "elements", "element", "@2", "ignorepat",
+  "extension", "statements", "if_head", "@3", "random_head", "@4",
+  "iftime_head", "word_list", "word3_list", "goto_word", "switch_head",
+  "@5", "statement", "@6", "@7", "@8", "@9", "@10", "@11", "opt_else",
+  "target", "jumptarget", "macro_call", "@12", "application_call_head",
+  "@13", "application_call", "opt_word", "eval_arglist", "case_statements",
+  "case_statement", "macro_statements", "macro_statement", "switches",
+  "eswitches", "switchlist_block", "switchlist", "includeslist",
+  "includedname", "includes", 0
 };
 #endif
 
@@ -619,40 +623,42 @@ static const unsigned short int yytoknum[] =
 static const unsigned char yyr1[] =
 {
        0,    42,    43,    44,    44,    44,    45,    45,    45,    45,
-      46,    46,    47,    47,    48,    48,    48,    48,    49,    49,
-      50,    50,    50,    52,    51,    53,    53,    53,    54,    54,
-      55,    55,    55,    55,    56,    56,    56,    56,    56,    57,
-      56,    56,    56,    58,    59,    59,    59,    59,    60,    60,
-      60,    62,    61,    64,    63,    65,    65,    66,    66,    67,
-      67,    67,    68,    68,    68,    70,    69,    71,    72,    71,
-      71,    71,    71,    73,    74,    75,    71,    76,    71,    71,
-      71,    71,    71,    71,    77,    71,    71,    71,    71,    71,
-      71,    71,    71,    78,    78,    79,    79,    79,    79,    79,
-      79,    79,    80,    80,    80,    80,    80,    80,    82,    81,
-      81,    84,    83,    85,    85,    86,    86,    87,    87,    87,
-      88,    88,    89,    89,    89,    89,    89,    89,    90,    90,
-      91,    91,    92,    92,    93,    93,    94,    94,    94,    95,
-      95,    95,    95,    95,    95,    95,    96,    96,    97,    97
+      46,    46,    47,    48,    48,    49,    49,    49,    49,    50,
+      50,    51,    51,    51,    53,    52,    54,    54,    54,    55,
+      55,    56,    56,    56,    56,    57,    57,    57,    57,    57,
+      58,    57,    57,    57,    59,    60,    60,    60,    60,    61,
+      61,    61,    63,    62,    65,    64,    66,    66,    67,    67,
+      68,    68,    68,    69,    69,    69,    71,    70,    72,    73,
+      72,    72,    72,    72,    74,    75,    76,    72,    77,    72,
+      72,    72,    72,    72,    72,    78,    72,    72,    72,    72,
+      72,    72,    72,    72,    79,    79,    80,    80,    80,    80,
+      80,    80,    80,    81,    81,    81,    81,    81,    81,    83,
+      82,    82,    85,    84,    86,    86,    87,    87,    88,    88,
+      88,    89,    89,    90,    90,    90,    90,    90,    90,    91,
+      91,    92,    92,    93,    93,    94,    95,    95,    96,    96,
+      96,    97,    97,    97,    97,    97,    97,    97,    98,    98,
+      99,    99
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
 static const unsigned char yyr2[] =
 {
        0,     2,     1,     1,     2,     2,     1,     1,     1,     1,
-       1,     1,     3,     4,     8,     7,     7,     6,     4,     3,
-       1,     2,     2,     0,     5,     1,     3,     2,     2,     3,
-       1,     1,     2,     2,     1,     1,     1,     1,     1,     0,
-       5,     2,     1,     4,     3,     4,     7,     8,     1,     2,
-       2,     0,     5,     0,     5,    14,    10,     1,     2,     1,
-       2,     3,     1,     2,     3,     0,     6,     3,     0,     5,
-       3,     3,     2,     0,     0,     0,    12,     0,     6,     2,
-       3,     3,     2,     2,     0,     5,     2,     2,     2,     3,
-       3,     3,     1,     2,     0,     1,     3,     3,     5,     5,
-       5,     5,     1,     3,     5,     3,     5,     3,     0,     5,
-       3,     0,     3,     3,     2,     1,     0,     1,     0,     3,
-       1,     2,     4,     3,     4,     3,     2,     3,     1,     2,
-       1,     5,     4,     3,     4,     3,     2,     3,     2,     2,
-      14,    10,     3,    15,    11,     2,     1,     1,     4,     3
+       1,     1,     4,     1,     0,     8,     7,     7,     6,     4,
+       3,     1,     2,     2,     0,     5,     1,     3,     2,     2,
+       3,     1,     1,     2,     2,     1,     1,     1,     1,     1,
+       0,     5,     2,     1,     4,     3,     4,     7,     8,     1,
+       2,     2,     0,     5,     0,     5,    14,    10,     1,     2,
+       1,     2,     3,     1,     2,     3,     0,     6,     3,     0,
+       5,     3,     3,     2,     0,     0,     0,    12,     0,     6,
+       2,     3,     3,     2,     2,     0,     5,     2,     2,     2,
+       3,     3,     3,     1,     2,     0,     1,     3,     3,     5,
+       5,     5,     5,     1,     3,     5,     3,     5,     3,     0,
+       5,     3,     0,     3,     3,     2,     1,     0,     1,     0,
+       3,     1,     2,     4,     3,     4,     3,     2,     3,     1,
+       2,     1,     5,     4,     3,     2,     3,     2,     2,     3,
+       2,     2,    14,    10,     3,    15,    11,     2,     1,     1,
+       4,     3
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -660,257 +666,257 @@ static const unsigned char yyr2[] =
    means the default is an error.  */
 static const unsigned char yydefact[] =
 {
-       0,     0,     9,     0,     0,     0,     0,     0,     3,     6,
-       7,     8,    11,    10,     0,     0,     0,     0,     1,     5,
-       4,     0,    12,     0,    19,     0,     0,    20,     0,    31,
-      28,    42,     0,     0,     0,     0,     0,     0,     0,     0,
-      30,    38,    34,    36,    37,    35,     0,    25,     0,    23,
-      22,    18,    21,    13,     0,     0,     0,     0,     0,     0,
-       0,    41,    39,     0,    33,    29,    32,     0,    27,     0,
-       0,     0,     0,     0,     0,    59,     0,   133,     0,     0,
-     135,     0,   149,   147,   146,     0,     0,     0,     0,    92,
+      14,     9,     0,     0,    13,     0,     0,     3,     6,     0,
+       7,     8,     0,     0,     1,     5,     4,     0,     0,    20,
+       0,     0,    21,    11,    10,     0,     0,    26,     0,    24,
+      23,    19,    22,     0,    12,     0,    28,     0,     0,     0,
+      32,    29,    43,     0,     0,     0,     0,     0,     0,     0,
+       0,    31,    39,    35,    37,    38,    36,     0,    18,    93,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   111,     0,     0,     0,     0,    44,   118,     0,
-      17,     0,   130,     0,   128,     0,    26,     0,    43,     0,
-      45,    60,     0,   136,   138,   132,     0,   134,   145,   148,
-       0,   139,     0,     0,     0,    48,     0,     0,    65,    51,
-       0,    53,     0,    62,    95,     0,   102,     0,    87,    86,
-      88,    73,    77,    83,    68,    72,     0,    94,    94,    94,
-      79,     0,     0,     0,     0,   120,   114,    57,   117,     0,
-      82,    84,     0,    16,   129,    15,     0,    24,     0,    61,
-       0,   137,   142,     0,    59,     0,    40,    50,    67,    49,
-     108,    81,     0,     0,    59,     0,     0,     0,     0,     0,
-      63,     0,     0,    70,     0,     0,    71,     0,     0,     0,
-     112,     0,    90,    89,    91,     0,     0,   126,    80,   121,
-      58,   113,   116,     0,     0,    14,     0,     0,    59,     0,
-       0,     0,   110,   118,     0,     0,     0,     0,     0,     0,
-       0,    64,    97,    96,    62,   103,   107,   105,     0,     0,
-       0,    93,   125,   127,     0,   115,   119,     0,     0,     0,
-      46,     0,     0,     0,     0,     0,     0,    52,     0,     0,
-      54,     0,     0,     0,     0,     0,    74,     0,    69,     0,
-       0,    85,   131,    47,     0,     0,     0,     0,   109,    66,
-       0,     0,   101,   100,    99,    98,   106,   104,     0,    78,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    75,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   141,     0,    56,     0,     0,   144,     0,
-       0,     0,     0,     0,     0,     0,    76,     0,     0,     0,
-       0,   140,    55,   143
+       0,     0,     0,   112,     0,     0,     0,     0,   131,   119,
+       0,     0,   129,     0,    27,     0,     0,     0,     0,     0,
+       0,     0,   135,     0,    42,    40,     0,    34,    30,    33,
+       0,    49,     0,     0,    66,    52,     0,    54,     0,    63,
+      96,     0,   103,     0,    88,    87,    89,    74,    78,     0,
+      84,    69,    73,     0,    95,    95,    95,    80,     0,     0,
+       0,     0,   121,   115,    58,   118,     0,    83,    85,    17,
+     130,    16,     0,    25,     0,     0,     0,    60,     0,   134,
+       0,     0,   137,     0,   151,   149,   148,     0,     0,     0,
+      45,    51,    68,    50,   109,    82,     0,     0,    60,     0,
+       0,     0,     0,     0,    64,     0,     0,    71,     0,     0,
+      72,     0,     0,     0,     0,   113,     0,    91,    90,    92,
+       0,     0,   127,    81,   122,    59,   114,   117,     0,    15,
+      44,     0,    46,    61,     0,   138,   140,   133,     0,   136,
+     147,   150,     0,   141,     0,     0,   111,   119,     0,     0,
+       0,     0,     0,     0,     0,    65,    98,    97,    63,   104,
+     108,   106,     0,     0,     0,     0,    94,   126,   128,     0,
+     116,   120,     0,     0,    62,     0,   139,   144,     0,    60,
+       0,    41,     0,     0,    53,     0,     0,    55,     0,     0,
+       0,     0,     0,    75,     0,   132,    70,     0,     0,    86,
+       0,     0,    60,     0,     0,     0,   110,    67,     0,     0,
+     102,   101,   100,    99,   107,   105,     0,    79,     0,    47,
+       0,     0,     0,     0,     0,     0,     0,    48,     0,     0,
+       0,     0,     0,     0,    76,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    57,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   143,     0,     0,
+      77,   146,     0,     0,     0,     0,     0,    56,     0,     0,
+       0,   142,   145
 };
 
 /* YYDEFGOTO[NTERM-NUM]. */
 static const short int yydefgoto[] =
 {
-      -1,     6,     7,     8,    14,     9,    10,    11,    26,    27,
-      71,    48,    22,    39,    40,    87,    41,    42,   134,   103,
-     193,   104,   196,   105,   168,    76,   144,   106,   192,   135,
-     209,   207,   298,   320,   208,   223,   212,   145,   147,   137,
-     233,   108,   156,   109,   256,   169,   164,   165,   113,   114,
-      43,    44,    79,    85,    86,    45
+      -1,     5,     6,     7,    25,     8,     9,    10,    11,    21,
+      22,    39,    28,    34,    50,    51,   159,    52,    53,   100,
+      74,   167,    75,   170,    76,   135,   148,   110,    77,   166,
+     101,   184,   181,   286,   311,   182,   198,   187,   111,   113,
+     103,   217,    79,   123,    80,   241,   136,   131,   132,    81,
+      82,    54,    55,    92,   151,   157,   158,    56
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -192
+#define YYPACT_NINF -182
 static const short int yypact[] =
 {
-     178,    76,  -192,   -36,    21,    13,    18,   465,  -192,  -192,
-    -192,  -192,  -192,  -192,    43,    66,    52,    76,  -192,  -192,
-    -192,   144,  -192,     5,  -192,    61,    14,  -192,    43,  -192,
-    -192,  -192,    62,   113,    89,   143,   166,   176,   134,   201,
-    -192,  -192,  -192,  -192,  -192,  -192,   184,  -192,   152,  -192,
-    -192,  -192,  -192,  -192,   148,   213,   196,   149,    64,    93,
-       3,  -192,  -192,   431,  -192,  -192,  -192,   327,  -192,   225,
-     189,   192,   226,   149,   431,   194,   231,  -192,   235,    44,
-    -192,    53,  -192,  -192,  -192,    12,   138,   203,   431,  -192,
-     208,   246,   247,   248,   249,   124,   215,   250,   251,   253,
-     257,   258,   160,   431,   431,   431,   106,  -192,    25,    70,
-    -192,   216,  -192,   353,  -192,   379,  -192,   259,  -192,   261,
-    -192,   233,   236,  -192,  -192,  -192,   270,  -192,  -192,  -192,
-     179,  -192,   239,   273,   271,  -192,   260,   274,  -192,  -192,
-     243,  -192,   198,   109,   200,   277,   193,   278,  -192,  -192,
-    -192,  -192,  -192,  -192,  -192,  -192,   281,   267,   267,   267,
-    -192,   254,   266,   283,   121,  -192,  -192,   269,  -192,   205,
-    -192,  -192,   288,  -192,  -192,  -192,   405,  -192,   275,  -192,
-     284,  -192,  -192,   276,    10,   290,  -192,  -192,  -192,  -192,
-     304,  -192,   295,   296,    51,   303,   296,   215,   215,   297,
-    -192,   215,   215,  -192,   299,   163,  -192,   300,   302,   307,
-    -192,   431,  -192,  -192,  -192,   311,   313,   431,  -192,  -192,
-    -192,  -192,   309,   310,   431,  -192,   291,   431,    86,   314,
-     149,   149,  -192,   296,   337,   355,   149,   149,   356,   308,
-     354,  -192,   359,   357,   122,  -192,  -192,  -192,   358,   367,
-     368,  -192,   431,   431,     2,  -192,  -192,   369,   301,   431,
-    -192,   149,   149,   375,   378,   214,   388,  -192,   380,   384,
-    -192,   215,   215,   215,   215,   164,  -192,   431,  -192,    55,
-      96,  -192,  -192,  -192,   383,   389,   149,   149,  -192,  -192,
-     149,   149,  -192,  -192,  -192,  -192,  -192,  -192,   361,  -192,
-     149,   149,   390,   401,   402,   406,   410,   408,   409,   149,
-     149,   149,   149,  -192,   149,   149,   418,   415,   422,   423,
-     399,   433,   432,  -192,   149,  -192,   149,   437,  -192,   149,
-     434,   435,   431,   439,   149,   149,  -192,   149,   446,   448,
-     453,  -192,  -192,  -192
+     145,  -182,   -23,    22,  -182,    58,   187,  -182,  -182,    70,
+    -182,  -182,    92,    12,  -182,  -182,  -182,    82,     1,  -182,
+     105,    14,  -182,  -182,  -182,   117,   126,  -182,   112,  -182,
+    -182,  -182,  -182,   301,  -182,   344,  -182,   133,    74,   109,
+    -182,  -182,  -182,   122,    68,   152,   163,   171,   172,   107,
+     306,  -182,  -182,  -182,  -182,  -182,  -182,   448,  -182,  -182,
+     148,   194,   199,   207,   208,    98,   189,   185,   229,   231,
+     234,   235,   204,   183,   448,   448,   448,    40,  -182,    18,
+      -4,   370,  -182,   396,  -182,   240,   210,   243,   228,   214,
+      27,    28,  -182,    11,  -182,  -182,   448,  -182,  -182,  -182,
+     242,  -182,   250,   249,  -182,  -182,   218,  -182,   173,    71,
+     188,   255,   130,   257,  -182,  -182,  -182,  -182,  -182,   254,
+    -182,  -182,  -182,   260,   251,   251,   251,  -182,   237,   238,
+     270,    67,  -182,  -182,   241,  -182,   212,  -182,  -182,  -182,
+    -182,  -182,   422,  -182,   277,   214,   448,   245,   280,  -182,
+     285,    49,  -182,    65,  -182,  -182,  -182,     8,   135,   247,
+    -182,  -182,  -182,  -182,   288,  -182,   262,   267,    76,   299,
+     267,   189,   189,   271,  -182,   189,   189,  -182,   274,   111,
+    -182,   275,   276,   448,   278,  -182,   448,  -182,  -182,  -182,
+     309,   310,   448,  -182,  -182,  -182,  -182,   281,   283,  -182,
+    -182,   289,  -182,   284,   286,  -182,  -182,  -182,   318,  -182,
+    -182,  -182,   166,  -182,   287,   321,  -182,   267,   323,   326,
+     214,   214,   327,   325,   330,  -182,   328,   337,    69,  -182,
+    -182,  -182,   343,   346,   272,   347,  -182,   448,   448,     2,
+    -182,  -182,   349,   313,  -182,   334,  -182,  -182,   319,    83,
+     348,  -182,   217,   357,  -182,   352,   356,  -182,   189,   189,
+     189,   189,   141,  -182,   448,  -182,  -182,    59,   137,  -182,
+     355,   448,    84,   369,   214,   214,  -182,  -182,   214,   214,
+    -182,  -182,  -182,  -182,  -182,  -182,   342,  -182,   448,  -182,
+     214,   214,   371,   375,   374,   378,   360,  -182,   380,   383,
+     214,   214,   214,   214,  -182,   214,   214,   392,   393,   402,
+     397,   372,   399,   404,   214,   214,  -182,   214,   412,   214,
+     214,   423,   407,   419,   448,   427,   425,  -182,   214,   214,
+    -182,  -182,   214,   426,   429,   430,   214,  -182,   214,   437,
+     438,  -182,  -182
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const short int yypgoto[] =
 {
-    -192,  -192,  -192,   455,   450,  -192,  -192,  -192,  -192,   443,
-    -192,  -192,   442,  -192,   436,  -192,  -192,  -192,  -191,  -192,
-    -192,  -192,  -192,  -192,    32,   -64,   -95,  -192,  -192,   -63,
-    -192,  -192,  -192,  -192,  -192,  -192,   -20,  -192,  -192,  -192,
-    -192,  -192,  -192,  -192,  -192,   238,  -192,   312,   362,  -111,
-    -192,  -192,   419,  -192,   394,  -192
+    -182,  -182,  -182,   447,  -182,  -182,  -182,  -182,  -182,  -182,
+     436,  -182,  -182,  -182,  -182,   408,  -182,  -182,  -182,  -181,
+    -182,  -182,  -182,  -182,  -182,    61,   -94,   -43,  -182,  -182,
+     -35,  -182,  -182,  -182,  -182,  -182,  -182,   -21,  -182,  -182,
+    -182,  -182,  -182,  -182,  -182,  -182,   244,  -182,   331,   381,
+     -80,  -182,  -182,  -182,   387,  -182,   308,  -182
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
    positive, shift that token.  If negative, reduce the rule which
    number is the opposite.  If zero, do what YYDEFACT says.
    If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -125
+#define YYTABLE_NINF -126
 static const short int yytable[] =
 {
-     107,   146,   174,   187,   112,    15,    88,  -123,    82,   119,
-      89,   120,    46,   128,    90,    50,    17,   129,    18,    51,
-      91,    92,    93,   230,    94,    16,   254,    95,    96,    97,
-      98,    99,   166,   258,   100,   101,  -123,  -123,  -123,    83,
-     157,   158,   159,   102,    84,   124,    47,    21,    83,   125,
-     112,   121,   112,    84,   124,    25,   187,    24,   127,    88,
-    -122,   279,   280,    89,   236,   174,   167,    90,   185,    77,
-      49,   189,    23,    91,    92,    93,   195,    94,   170,   171,
-      95,    96,    97,    98,    99,   126,    54,   100,   101,  -122,
-    -122,  -122,   121,    25,   126,    57,   102,   187,    80,   261,
-      88,  -124,   239,   240,    89,    78,   242,   243,    90,   245,
-     247,   160,    12,   112,    91,    92,    93,    13,    94,   229,
-     199,    95,    96,    97,    98,    99,   218,   121,   100,   101,
-    -124,  -124,  -124,   199,    78,    61,   275,   102,   213,   214,
-     161,   162,   163,    62,    55,    29,   131,    58,   251,    30,
-     200,   132,    31,    68,    56,   161,   162,   163,    63,    69,
-     142,    32,    70,   200,   260,   143,   263,   264,   153,   154,
-      59,   155,   268,   269,    33,    34,   292,   293,   294,   295,
-      60,     1,    35,    36,    37,    38,     2,   182,    67,    72,
-      75,   189,   183,     3,     4,   189,   283,   284,   285,   246,
-     296,     5,    64,   204,   143,   297,    65,   205,   197,    31,
-     201,   198,   221,   202,   299,   222,   189,   189,    32,    73,
-      74,   288,   302,   303,   222,   235,   304,   305,   238,   115,
-     116,    33,    34,   117,   118,   121,   307,   308,   122,    35,
-      36,    37,    38,   123,   133,   316,   317,   318,   319,   136,
-     321,   322,   138,   139,   140,   141,   143,   172,   148,   149,
-     330,   150,   331,   151,   152,   333,   190,   177,   178,   336,
-     338,   339,   187,   340,   179,    88,   188,   180,   181,    89,
-     184,   186,   191,    90,   194,   203,   206,   210,   211,    91,
-      92,    93,   224,    94,   217,   215,    95,    96,    97,    98,
-      99,   231,   187,   100,   101,    88,   282,   216,   227,    89,
-     220,   232,   102,    90,   237,   259,   226,   228,   271,    91,
-      92,    93,   252,    94,   253,   262,    95,    96,    97,    98,
-      99,    88,   110,   100,   101,    89,   234,   167,   241,    90,
-     244,   248,   102,   249,   266,    91,    92,    93,   250,    94,
-     255,   257,    95,    96,    97,    98,    99,    88,   173,   100,
-     101,    89,   267,   270,   111,    90,   276,   272,   102,   273,
-     274,    91,    92,    93,   277,    94,   278,   281,    95,    96,
-      97,    98,    99,    88,   175,   100,   101,    89,   286,   287,
-     111,    90,   289,   290,   102,   291,   300,    91,    92,    93,
-     301,    94,   306,   309,    95,    96,    97,    98,    99,    88,
-     225,   100,   101,    89,   310,   311,   111,    90,   313,   312,
-     102,   314,   315,    91,    92,    93,   323,    94,   324,   325,
-      95,    96,    97,    98,    99,    88,   326,   100,   101,    89,
-     327,   328,   111,    90,   332,   329,   102,   334,   335,    91,
-      92,    93,   337,    94,   341,   342,    95,    96,    97,    98,
-      99,   343,    20,   100,   101,    -2,    19,    28,     1,    52,
-      53,   265,   102,     2,     0,    66,   219,   176,    81,   130,
-       3,     4,     0,     0,     0,     0,     0,     0,     5
+      78,   140,   234,   161,   137,   138,    57,  -124,    26,   210,
+      59,   239,   169,   211,    60,    30,   154,    19,    12,    31,
+      61,    62,    63,   112,    64,   133,    13,    65,    66,    67,
+      68,    69,   149,   152,    70,    71,  -124,  -124,  -124,   124,
+     125,   126,    27,    73,   155,   127,    78,   155,    78,   156,
+     206,   201,   156,    20,   207,    20,   267,   268,    14,   134,
+     161,   160,   140,    57,  -123,   163,   206,    59,   150,   150,
+     209,    60,   193,    17,   128,   129,   130,    61,    62,    63,
+     173,    64,   173,   262,    65,    66,    67,    68,    69,   220,
+     208,    70,    71,  -123,  -123,  -123,   274,   290,    18,    87,
+      73,   128,   129,   130,   188,   189,   208,    78,    94,    88,
+     174,   202,   174,    36,    29,    84,    95,   203,    23,    37,
+     250,    33,    38,    24,   203,   203,   255,   256,   223,   224,
+      35,    96,   226,   227,   108,   229,   231,    83,   161,   109,
+     178,    57,  -125,   213,   179,    59,    86,   230,   214,    60,
+      85,   236,   109,     1,   273,    61,    62,    63,    89,    64,
+       2,     3,    65,    66,    67,    68,    69,    90,     4,    70,
+      71,  -125,  -125,  -125,   247,    91,    93,   284,    73,   248,
+     292,   293,   285,   171,   294,   295,   172,    -2,    15,   102,
+     -14,   120,   121,   114,   122,     1,   298,   299,   175,   163,
+     104,   176,     2,     3,   163,   105,   307,   308,   309,   310,
+       4,   312,   313,   106,   107,   280,   281,   282,   283,   196,
+     321,   322,   197,   323,   276,   325,   326,   197,   219,   287,
+     109,   222,   163,   163,   333,   334,   289,   115,   335,   116,
+     117,   118,   339,   161,   340,   119,    57,   162,   143,   145,
+      59,   144,   146,   297,    60,   147,   164,   165,   183,   168,
+      61,    62,    63,   177,    64,   180,   185,    65,    66,    67,
+      68,    69,   186,   161,    70,    71,    57,   265,   190,   191,
+      59,   192,   195,    73,    60,   200,   203,   204,   215,   330,
+      61,    62,    63,   205,    64,   216,   243,    65,    66,    67,
+      68,    69,    40,   218,    70,    71,    41,    97,   134,    42,
+     221,    98,   225,    73,    42,   228,   232,   233,    43,   235,
+     237,   238,   240,    43,   242,   244,   246,   245,   249,   251,
+     253,    44,    45,   254,   257,   258,    44,    45,   260,    46,
+      47,    48,    49,   259,    46,    47,    48,    49,    57,    58,
+     261,   263,    59,   264,   270,   266,    60,   269,   271,   275,
+     272,   277,    61,    62,    63,   278,    64,   279,   304,    65,
+      66,    67,    68,    69,    57,   139,    70,    71,    59,   288,
+     291,    72,    60,   296,   300,    73,   301,   302,    61,    62,
+      63,   303,    64,   305,   306,    65,    66,    67,    68,    69,
+      57,   141,    70,    71,    59,   314,   315,    72,    60,   316,
+     317,    73,   319,   318,    61,    62,    63,   320,    64,   324,
+     328,    65,    66,    67,    68,    69,    57,   199,    70,    71,
+      59,   327,   329,    72,    60,   331,   337,    73,   332,   336,
+      61,    62,    63,   338,    64,   341,   342,    65,    66,    67,
+      68,    69,    57,    16,    70,    71,    59,    32,    99,    72,
+      60,   252,   194,    73,   142,   212,    61,    62,    63,     0,
+      64,     0,     0,    65,    66,    67,    68,    69,   153,     0,
+      70,    71,     0,     0,     0,     0,     0,     0,     0,    73
 };
 
 static const short int yycheck[] =
 {
-      63,    96,   113,     1,    67,    41,     4,     5,     5,    73,
-       8,    74,     7,     1,    12,     1,     3,     5,     0,     5,
-      18,    19,    20,    13,    22,     4,   217,    25,    26,    27,
-      28,    29,     7,   224,    32,    33,    34,    35,    36,    36,
-     103,   104,   105,    41,    41,     1,    41,     4,    36,     5,
-     113,    41,   115,    41,     1,    41,     1,     5,     5,     4,
-       5,   252,   253,     8,    13,   176,    41,    12,   132,     5,
-       9,   134,     6,    18,    19,    20,   140,    22,     8,     9,
-      25,    26,    27,    28,    29,    41,    24,    32,    33,    34,
-      35,    36,    41,    41,    41,     6,    41,     1,     5,    13,
-       4,     5,   197,   198,     8,    41,   201,   202,    12,   204,
-     205,     5,    36,   176,    18,    19,    20,    41,    22,   183,
-      11,    25,    26,    27,    28,    29,     5,    41,    32,    33,
-      34,    35,    36,    11,    41,     1,    14,    41,   158,   159,
-      34,    35,    36,     9,    31,     1,     8,     4,   211,     5,
-      41,    13,     8,     1,    41,    34,    35,    36,    24,     7,
-      36,    17,    10,    41,   227,    41,   230,   231,     8,     9,
-       4,    11,   236,   237,    30,    31,   271,   272,   273,   274,
-       4,     3,    38,    39,    40,    41,     8,     8,     4,    41,
-      41,   254,    13,    15,    16,   258,   259,   261,   262,    36,
-      36,    23,     1,    10,    41,    41,     5,    14,    10,     8,
-      10,    13,     7,    13,   277,    10,   279,   280,    17,     6,
-      24,     7,   286,   287,    10,   193,   290,   291,   196,     4,
-      41,    30,    31,    41,     8,    41,   300,   301,     7,    38,
-      39,    40,    41,     8,    41,   309,   310,   311,   312,    41,
-     314,   315,     6,     6,     6,     6,    41,    41,     8,     8,
-     324,     8,   326,     6,     6,   329,     6,     8,     7,   332,
-     334,   335,     1,   337,    41,     4,     5,    41,     8,     8,
-      41,     8,     8,    12,    41,     8,     8,     6,    21,    18,
-      19,    20,     4,    22,    11,    41,    25,    26,    27,    28,
-      29,    11,     1,    32,    33,     4,     5,    41,    24,     8,
-      41,     7,    41,    12,    11,    24,    41,    41,    10,    18,
-      19,    20,    11,    22,    11,    11,    25,    26,    27,    28,
-      29,     4,     5,    32,    33,     8,    41,    41,    41,    12,
-      41,    41,    41,    41,     7,    18,    19,    20,    41,    22,
-      41,    41,    25,    26,    27,    28,    29,     4,     5,    32,
-      33,     8,     7,     7,    37,    12,     8,    13,    41,    10,
-      13,    18,    19,    20,     7,    22,     8,     8,    25,    26,
-      27,    28,    29,     4,     5,    32,    33,     8,    13,    11,
-      37,    12,     4,    13,    41,    11,    13,    18,    19,    20,
-      11,    22,    41,    13,    25,    26,    27,    28,    29,     4,
-       5,    32,    33,     8,    13,    13,    37,    12,     8,    13,
-      41,    13,    13,    18,    19,    20,     8,    22,    13,     7,
-      25,    26,    27,    28,    29,     4,    13,    32,    33,     8,
-      41,     8,    37,    12,     7,    13,    41,    13,    13,    18,
-      19,    20,    13,    22,     8,     7,    25,    26,    27,    28,
-      29,     8,     7,    32,    33,     0,     1,    17,     3,    26,
-      28,   233,    41,     8,    -1,    39,   164,   115,    59,    85,
-      15,    16,    -1,    -1,    -1,    -1,    -1,    -1,    23
+      35,    81,   183,     1,     8,     9,     4,     5,     7,     1,
+       8,   192,   106,     5,    12,     1,     5,     5,    41,     5,
+      18,    19,    20,    66,    22,     7,     4,    25,    26,    27,
+      28,    29,     5,     5,    32,    33,    34,    35,    36,    74,
+      75,    76,    41,    41,    36,     5,    81,    36,    83,    41,
+       1,   145,    41,    41,     5,    41,   237,   238,     0,    41,
+       1,    96,   142,     4,     5,   100,     1,     8,    41,    41,
+       5,    12,     5,     3,    34,    35,    36,    18,    19,    20,
+      11,    22,    11,    14,    25,    26,    27,    28,    29,    13,
+      41,    32,    33,    34,    35,    36,    13,    13,     6,    31,
+      41,    34,    35,    36,   125,   126,    41,   142,     1,    41,
+      41,   146,    41,     1,     9,    41,     9,    41,    36,     7,
+     214,     4,    10,    41,    41,    41,   220,   221,   171,   172,
+       4,    24,   175,   176,    36,   178,   179,     4,     1,    41,
+      10,     4,     5,     8,    14,     8,    24,    36,    13,    12,
+      41,   186,    41,     8,   248,    18,    19,    20,     6,    22,
+      15,    16,    25,    26,    27,    28,    29,     4,    23,    32,
+      33,    34,    35,    36,     8,     4,     4,    36,    41,    13,
+     274,   275,    41,    10,   278,   279,    13,     0,     1,    41,
+       3,     8,     9,     8,    11,     8,   290,   291,    10,   234,
+       6,    13,    15,    16,   239,     6,   300,   301,   302,   303,
+      23,   305,   306,     6,     6,   258,   259,   260,   261,     7,
+     314,   315,    10,   317,     7,   319,   320,    10,   167,   264,
+      41,   170,   267,   268,   328,   329,   271,     8,   332,     8,
+       6,     6,   336,     1,   338,    41,     4,     5,     8,     6,
+       8,    41,    24,   288,    12,    41,     6,     8,     4,    41,
+      18,    19,    20,     8,    22,     8,     6,    25,    26,    27,
+      28,    29,    21,     1,    32,    33,     4,     5,    41,    41,
+       8,    11,    41,    41,    12,     8,    41,     7,    41,   324,
+      18,    19,    20,     8,    22,     7,     7,    25,    26,    27,
+      28,    29,     1,    41,    32,    33,     5,     1,    41,     8,
+      11,     5,    41,    41,     8,    41,    41,    41,    17,    41,
+      11,    11,    41,    17,    41,    41,     8,    41,    41,     8,
+       7,    30,    31,     7,     7,    10,    30,    31,    10,    38,
+      39,    40,    41,    13,    38,    39,    40,    41,     4,     5,
+      13,     8,     8,     7,    41,     8,    12,     8,    24,    11,
+      41,     4,    18,    19,    20,    13,    22,    11,     8,    25,
+      26,    27,    28,    29,     4,     5,    32,    33,     8,    24,
+      11,    37,    12,    41,    13,    41,    11,    13,    18,    19,
+      20,    13,    22,    13,    11,    25,    26,    27,    28,    29,
+       4,     5,    32,    33,     8,    13,    13,    37,    12,     7,
+      13,    41,    13,    41,    18,    19,    20,    13,    22,     7,
+      13,    25,    26,    27,    28,    29,     4,     5,    32,    33,
+       8,     8,    13,    37,    12,     8,     7,    41,    13,    13,
+      18,    19,    20,    13,    22,     8,     8,    25,    26,    27,
+      28,    29,     4,     6,    32,    33,     8,    21,    50,    37,
+      12,   217,   131,    41,    83,   157,    18,    19,    20,    -1,
+      22,    -1,    -1,    25,    26,    27,    28,    29,    91,    -1,
+      32,    33,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    41
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    symbol of state STATE-NUM.  */
 static const unsigned char yystos[] =
 {
-       0,     3,     8,    15,    16,    23,    43,    44,    45,    47,
-      48,    49,    36,    41,    46,    41,     4,     3,     0,     1,
-      45,     4,    54,     6,     5,    41,    50,    51,    46,     1,
-       5,     8,    17,    30,    31,    38,    39,    40,    41,    55,
-      56,    58,    59,    92,    93,    97,     7,    41,    53,     9,
-       1,     5,    51,    54,    24,    31,    41,     6,     4,     4,
-       4,     1,     9,    24,     1,     5,    56,     4,     1,     7,
-      10,    52,    41,     6,    24,    41,    67,     5,    41,    94,
-       5,    94,     5,    36,    41,    95,    96,    57,     4,     8,
+       0,     8,    15,    16,    23,    43,    44,    45,    47,    48,
+      49,    50,    41,     4,     0,     1,    45,     3,     6,     5,
+      41,    51,    52,    36,    41,    46,     7,    41,    54,     9,
+       1,     5,    52,     4,    55,     4,     1,     7,    10,    53,
+       1,     5,     8,    17,    30,    31,    38,    39,    40,    41,
+      56,    57,    59,    60,    93,    94,    99,     4,     5,     8,
       12,    18,    19,    20,    22,    25,    26,    27,    28,    29,
-      32,    33,    41,    61,    63,    65,    69,    71,    83,    85,
-       5,    37,    71,    90,    91,     4,    41,    41,     8,    67,
-      71,    41,     7,     8,     1,     5,    41,     5,     1,     5,
-      96,     8,    13,    41,    60,    71,    41,    81,     6,     6,
-       6,     6,    36,    41,    68,    79,    68,    80,     8,     8,
-       8,     6,     6,     8,     9,    11,    84,    71,    71,    71,
-       5,    34,    35,    36,    88,    89,     7,    41,    66,    87,
-       8,     9,    41,     5,    91,     5,    90,     8,     7,    41,
-      41,     8,     8,    13,    41,    67,     8,     1,     5,    71,
-       6,     8,    70,    62,    41,    67,    64,    10,    13,    11,
-      41,    10,    13,     8,    10,    14,     8,    73,    76,    72,
-       6,    21,    78,    78,    78,    41,    41,    11,     5,    89,
-      41,     7,    10,    77,     4,     5,    41,    24,    41,    67,
-      13,    11,     7,    82,    41,    66,    13,    11,    66,    68,
-      68,    41,    68,    68,    41,    68,    36,    68,    41,    41,
-      41,    71,    11,    11,    60,    41,    86,    41,    60,    24,
-      71,    13,    11,    67,    67,    87,     7,     7,    67,    67,
-       7,    10,    13,    10,    13,    14,     8,     7,     8,    60,
-      60,     8,     5,    71,    67,    67,    13,    11,     7,     4,
-      13,    11,    68,    68,    68,    68,    36,    41,    74,    71,
-      13,    11,    67,    67,    67,    67,    41,    67,    67,    13,
-      13,    13,    13,     8,    13,    13,    67,    67,    67,    67,
-      75,    67,    67,     8,    13,     7,    13,    41,     8,    13,
-      67,    67,     7,    67,    13,    13,    71,    13,    67,    67,
-      67,     8,     7,     8
+      32,    33,    37,    41,    62,    64,    66,    70,    72,    84,
+      86,    91,    92,     4,    41,    41,    24,    31,    41,     6,
+       4,     4,    95,     4,     1,     9,    24,     1,     5,    57,
+      61,    72,    41,    82,     6,     6,     6,     6,    36,    41,
+      69,    80,    69,    81,     8,     8,     8,     6,     6,    41,
+       8,     9,    11,    85,    72,    72,    72,     5,    34,    35,
+      36,    89,    90,     7,    41,    67,    88,     8,     9,     5,
+      92,     5,    91,     8,    41,     6,    24,    41,    68,     5,
+      41,    96,     5,    96,     5,    36,    41,    97,    98,    58,
+      72,     1,     5,    72,     6,     8,    71,    63,    41,    68,
+      65,    10,    13,    11,    41,    10,    13,     8,    10,    14,
+       8,    74,    77,     4,    73,     6,    21,    79,    79,    79,
+      41,    41,    11,     5,    90,    41,     7,    10,    78,     5,
+       8,    68,    72,    41,     7,     8,     1,     5,    41,     5,
+       1,     5,    98,     8,    13,    41,     7,    83,    41,    67,
+      13,    11,    67,    69,    69,    41,    69,    69,    41,    69,
+      36,    69,    41,    41,    61,    41,    72,    11,    11,    61,
+      41,    87,    41,     7,    41,    41,     8,     8,    13,    41,
+      68,     8,    88,     7,     7,    68,    68,     7,    10,    13,
+      10,    13,    14,     8,     7,     5,     8,    61,    61,     8,
+      41,    24,    41,    68,    13,    11,     7,     4,    13,    11,
+      69,    69,    69,    69,    36,    41,    75,    72,    24,    72,
+      13,    11,    68,    68,    68,    68,    41,    72,    68,    68,
+      13,    11,    13,    13,     8,    13,    11,    68,    68,    68,
+      68,    76,    68,    68,    13,    13,     7,    13,    41,    13,
+      13,    68,    68,    68,     7,    68,    68,     8,    13,    13,
+      72,     8,    13,    68,    68,    68,    13,     7,    13,    68,
+      68,     8,     8
 };
 
 #define yyerrok                (yyerrstatus = 0)
@@ -1286,319 +1292,327 @@ yydestruct (yymsg, yytype, yyvaluep, yylocationp)
   switch (yytype)
     {
       case 41: /* "word" */
-#line 165 "ael.y"
+#line 169 "ael.y"
         { free((yyvaluep->str));};
-#line 1292 "ael.tab.c"
+#line 1298 "ael.tab.c"
         break;
       case 44: /* "objects" */
-#line 152 "ael.y"
+#line 156 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1300 "ael.tab.c"
+#line 1306 "ael.tab.c"
         break;
       case 45: /* "object" */
-#line 152 "ael.y"
+#line 156 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1308 "ael.tab.c"
+#line 1314 "ael.tab.c"
         break;
       case 46: /* "word_or_default" */
-#line 165 "ael.y"
+#line 169 "ael.y"
         { free((yyvaluep->str));};
-#line 1313 "ael.tab.c"
+#line 1319 "ael.tab.c"
         break;
       case 47: /* "context" */
-#line 152 "ael.y"
+#line 156 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1321 "ael.tab.c"
+#line 1327 "ael.tab.c"
         break;
-      case 48: /* "macro" */
-#line 152 "ael.y"
+      case 49: /* "macro" */
+#line 156 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1329 "ael.tab.c"
+#line 1335 "ael.tab.c"
         break;
-      case 49: /* "globals" */
-#line 152 "ael.y"
+      case 50: /* "globals" */
+#line 156 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1337 "ael.tab.c"
+#line 1343 "ael.tab.c"
         break;
-      case 50: /* "global_statements" */
-#line 152 "ael.y"
+      case 51: /* "global_statements" */
+#line 156 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1345 "ael.tab.c"
+#line 1351 "ael.tab.c"
         break;
-      case 51: /* "global_statement" */
-#line 152 "ael.y"
+      case 52: /* "global_statement" */
+#line 156 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1353 "ael.tab.c"
+#line 1359 "ael.tab.c"
         break;
-      case 53: /* "arglist" */
-#line 152 "ael.y"
+      case 54: /* "arglist" */
+#line 156 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1361 "ael.tab.c"
+#line 1367 "ael.tab.c"
         break;
-      case 54: /* "elements_block" */
-#line 152 "ael.y"
+      case 55: /* "elements_block" */
+#line 156 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1369 "ael.tab.c"
+#line 1375 "ael.tab.c"
         break;
-      case 55: /* "elements" */
-#line 152 "ael.y"
+      case 56: /* "elements" */
+#line 156 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1377 "ael.tab.c"
+#line 1383 "ael.tab.c"
         break;
-      case 56: /* "element" */
-#line 152 "ael.y"
+      case 57: /* "element" */
+#line 156 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1385 "ael.tab.c"
+#line 1391 "ael.tab.c"
         break;
-      case 58: /* "ignorepat" */
-#line 152 "ael.y"
+      case 59: /* "ignorepat" */
+#line 156 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1393 "ael.tab.c"
+#line 1399 "ael.tab.c"
         break;
-      case 59: /* "extension" */
-#line 152 "ael.y"
+      case 60: /* "extension" */
+#line 156 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1401 "ael.tab.c"
+#line 1407 "ael.tab.c"
         break;
-      case 60: /* "statements" */
-#line 152 "ael.y"
+      case 61: /* "statements" */
+#line 156 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1409 "ael.tab.c"
+#line 1415 "ael.tab.c"
         break;
-      case 61: /* "if_head" */
-#line 152 "ael.y"
+      case 62: /* "if_head" */
+#line 156 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1417 "ael.tab.c"
+#line 1423 "ael.tab.c"
         break;
-      case 63: /* "random_head" */
-#line 152 "ael.y"
+      case 64: /* "random_head" */
+#line 156 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1425 "ael.tab.c"
+#line 1431 "ael.tab.c"
         break;
-      case 65: /* "iftime_head" */
-#line 152 "ael.y"
+      case 66: /* "iftime_head" */
+#line 156 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1433 "ael.tab.c"
+#line 1439 "ael.tab.c"
         break;
-      case 66: /* "word_list" */
-#line 165 "ael.y"
+      case 67: /* "word_list" */
+#line 169 "ael.y"
         { free((yyvaluep->str));};
-#line 1438 "ael.tab.c"
+#line 1444 "ael.tab.c"
         break;
-      case 67: /* "word3_list" */
-#line 165 "ael.y"
+      case 68: /* "word3_list" */
+#line 169 "ael.y"
         { free((yyvaluep->str));};
-#line 1443 "ael.tab.c"
+#line 1449 "ael.tab.c"
         break;
-      case 68: /* "goto_word" */
-#line 165 "ael.y"
+      case 69: /* "goto_word" */
+#line 169 "ael.y"
         { free((yyvaluep->str));};
-#line 1448 "ael.tab.c"
+#line 1454 "ael.tab.c"
         break;
-      case 69: /* "switch_head" */
-#line 152 "ael.y"
+      case 70: /* "switch_head" */
+#line 156 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1456 "ael.tab.c"
+#line 1462 "ael.tab.c"
         break;
-      case 71: /* "statement" */
-#line 152 "ael.y"
+      case 72: /* "statement" */
+#line 156 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1464 "ael.tab.c"
+#line 1470 "ael.tab.c"
         break;
-      case 78: /* "opt_else" */
-#line 152 "ael.y"
+      case 79: /* "opt_else" */
+#line 156 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1472 "ael.tab.c"
+#line 1478 "ael.tab.c"
         break;
-      case 79: /* "target" */
-#line 152 "ael.y"
+      case 80: /* "target" */
+#line 156 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1480 "ael.tab.c"
+#line 1486 "ael.tab.c"
         break;
-      case 80: /* "jumptarget" */
-#line 152 "ael.y"
+      case 81: /* "jumptarget" */
+#line 156 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1488 "ael.tab.c"
+#line 1494 "ael.tab.c"
         break;
-      case 81: /* "macro_call" */
-#line 152 "ael.y"
+      case 82: /* "macro_call" */
+#line 156 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1496 "ael.tab.c"
+#line 1502 "ael.tab.c"
         break;
-      case 83: /* "application_call_head" */
-#line 152 "ael.y"
+      case 84: /* "application_call_head" */
+#line 156 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1504 "ael.tab.c"
+#line 1510 "ael.tab.c"
         break;
-      case 85: /* "application_call" */
-#line 152 "ael.y"
+      case 86: /* "application_call" */
+#line 156 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1512 "ael.tab.c"
+#line 1518 "ael.tab.c"
         break;
-      case 86: /* "opt_word" */
-#line 165 "ael.y"
+      case 87: /* "opt_word" */
+#line 169 "ael.y"
         { free((yyvaluep->str));};
-#line 1517 "ael.tab.c"
+#line 1523 "ael.tab.c"
+        break;
+      case 88: /* "eval_arglist" */
+#line 156 "ael.y"
+        {
+               destroy_pval((yyvaluep->pval));
+               prev_word=0;
+       };
+#line 1531 "ael.tab.c"
         break;
-      case 87: /* "eval_arglist" */
-#line 152 "ael.y"
+      case 89: /* "case_statements" */
+#line 156 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1525 "ael.tab.c"
+#line 1539 "ael.tab.c"
         break;
-      case 88: /* "case_statements" */
-#line 152 "ael.y"
+      case 90: /* "case_statement" */
+#line 156 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1533 "ael.tab.c"
+#line 1547 "ael.tab.c"
         break;
-      case 89: /* "case_statement" */
-#line 152 "ael.y"
+      case 91: /* "macro_statements" */
+#line 156 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1541 "ael.tab.c"
+#line 1555 "ael.tab.c"
         break;
-      case 90: /* "macro_statements" */
-#line 152 "ael.y"
+      case 92: /* "macro_statement" */
+#line 156 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1549 "ael.tab.c"
+#line 1563 "ael.tab.c"
         break;
-      case 91: /* "macro_statement" */
-#line 152 "ael.y"
+      case 93: /* "switches" */
+#line 156 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1557 "ael.tab.c"
+#line 1571 "ael.tab.c"
         break;
-      case 92: /* "switches" */
-#line 152 "ael.y"
+      case 94: /* "eswitches" */
+#line 156 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1565 "ael.tab.c"
+#line 1579 "ael.tab.c"
         break;
-      case 93: /* "eswitches" */
-#line 152 "ael.y"
+      case 95: /* "switchlist_block" */
+#line 156 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1573 "ael.tab.c"
+#line 1587 "ael.tab.c"
         break;
-      case 94: /* "switchlist" */
-#line 152 "ael.y"
+      case 96: /* "switchlist" */
+#line 156 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1581 "ael.tab.c"
+#line 1595 "ael.tab.c"
         break;
-      case 95: /* "includeslist" */
-#line 152 "ael.y"
+      case 97: /* "includeslist" */
+#line 156 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1589 "ael.tab.c"
+#line 1603 "ael.tab.c"
         break;
-      case 96: /* "includedname" */
-#line 165 "ael.y"
+      case 98: /* "includedname" */
+#line 169 "ael.y"
         { free((yyvaluep->str));};
-#line 1594 "ael.tab.c"
+#line 1608 "ael.tab.c"
         break;
-      case 97: /* "includes" */
-#line 152 "ael.y"
+      case 99: /* "includes" */
+#line 156 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1602 "ael.tab.c"
+#line 1616 "ael.tab.c"
         break;
 
       default:
@@ -1915,17 +1929,17 @@ yyreduce:
   switch (yyn)
     {
         case 2:
-#line 170 "ael.y"
+#line 174 "ael.y"
     { (yyval.pval) = parseio->pval = (yyvsp[0].pval); ;}
     break;
 
   case 3:
-#line 173 "ael.y"
+#line 177 "ael.y"
     {(yyval.pval)=(yyvsp[0].pval);;}
     break;
 
   case 4:
-#line 175 "ael.y"
+#line 179 "ael.y"
     {
                        if ( (yyvsp[-1].pval) && (yyvsp[0].pval) ) {
                                (yyval.pval)=(yyvsp[-1].pval);
@@ -1939,244 +1953,246 @@ yyreduce:
     break;
 
   case 5:
-#line 185 "ael.y"
+#line 189 "ael.y"
     {(yyval.pval)=(yyvsp[-1].pval);;}
     break;
 
   case 6:
-#line 188 "ael.y"
+#line 192 "ael.y"
     {(yyval.pval)=(yyvsp[0].pval);;}
     break;
 
   case 7:
-#line 189 "ael.y"
+#line 193 "ael.y"
     {(yyval.pval)=(yyvsp[0].pval);;}
     break;
 
   case 8:
-#line 190 "ael.y"
+#line 194 "ael.y"
     {(yyval.pval)=(yyvsp[0].pval);;}
     break;
 
   case 9:
-#line 191 "ael.y"
+#line 195 "ael.y"
     {(yyval.pval)=0;/* allow older docs to be read */;}
     break;
 
   case 10:
-#line 194 "ael.y"
+#line 198 "ael.y"
     { (yyval.str) = (yyvsp[0].str); ;}
     break;
 
   case 11:
-#line 195 "ael.y"
+#line 199 "ael.y"
     { (yyval.str) = strdup("default"); ;}
     break;
 
   case 12:
-#line 198 "ael.y"
-    {
-               (yyval.pval) = npval2(PV_CONTEXT, &(yylsp[-2]), &(yylsp[0]));
-               (yyval.pval)->u1.str = (yyvsp[-1].str);
-               (yyval.pval)->u2.statements = (yyvsp[0].pval); ;}
-    break;
-
-  case 13:
 #line 202 "ael.y"
     {
                (yyval.pval) = npval2(PV_CONTEXT, &(yylsp[-3]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-1].str);
                (yyval.pval)->u2.statements = (yyvsp[0].pval);
-               (yyval.pval)->u3.abstract = 1; ;}
+               (yyval.pval)->u3.abstract = (yyvsp[-3].intval); ;}
+    break;
+
+  case 13:
+#line 210 "ael.y"
+    { (yyval.intval) = 1; ;}
     break;
 
   case 14:
-#line 209 "ael.y"
+#line 211 "ael.y"
+    { (yyval.intval) = 0; ;}
+    break;
+
+  case 15:
+#line 214 "ael.y"
     {
                (yyval.pval) = npval2(PV_MACRO, &(yylsp[-7]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-6].str); (yyval.pval)->u2.arglist = (yyvsp[-4].pval); (yyval.pval)->u3.macro_statements = (yyvsp[-1].pval); ;}
     break;
 
-  case 15:
-#line 212 "ael.y"
+  case 16:
+#line 217 "ael.y"
     {
                (yyval.pval) = npval2(PV_MACRO, &(yylsp[-6]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-5].str); (yyval.pval)->u2.arglist = (yyvsp[-3].pval); ;}
     break;
 
-  case 16:
-#line 215 "ael.y"
+  case 17:
+#line 220 "ael.y"
     {
                (yyval.pval) = npval2(PV_MACRO, &(yylsp[-6]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-5].str);
                (yyval.pval)->u3.macro_statements = (yyvsp[-1].pval); ;}
     break;
 
-  case 17:
-#line 219 "ael.y"
+  case 18:
+#line 224 "ael.y"
     {
                (yyval.pval) = npval2(PV_MACRO, &(yylsp[-5]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-4].str); ;}
     break;
 
-  case 18:
-#line 224 "ael.y"
+  case 19:
+#line 229 "ael.y"
     {
                (yyval.pval) = npval2(PV_GLOBALS, &(yylsp[-3]), &(yylsp[0]));
                (yyval.pval)->u1.statements = (yyvsp[-1].pval);;}
     break;
 
-  case 19:
-#line 227 "ael.y"
+  case 20:
+#line 232 "ael.y"
     { /* empty globals is OK */
                (yyval.pval) = npval2(PV_GLOBALS, &(yylsp[-2]), &(yylsp[0])); ;}
     break;
 
-  case 20:
-#line 231 "ael.y"
+  case 21:
+#line 236 "ael.y"
     {(yyval.pval)=(yyvsp[0].pval);;}
     break;
 
-  case 21:
-#line 232 "ael.y"
+  case 22:
+#line 237 "ael.y"
     {(yyval.pval)=(yyvsp[-1].pval); linku1((yyval.pval),(yyvsp[0].pval));;}
     break;
 
-  case 22:
-#line 233 "ael.y"
+  case 23:
+#line 238 "ael.y"
     {(yyval.pval)=(yyvsp[-1].pval);;}
     break;
 
-  case 23:
-#line 236 "ael.y"
+  case 24:
+#line 241 "ael.y"
     { reset_semicount(parseio->scanner); ;}
     break;
 
-  case 24:
-#line 236 "ael.y"
+  case 25:
+#line 241 "ael.y"
     {
                (yyval.pval) = npval2(PV_VARDEC, &(yylsp[-4]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-4].str);
                (yyval.pval)->u2.val = (yyvsp[-1].str); ;}
     break;
 
-  case 25:
-#line 242 "ael.y"
+  case 26:
+#line 247 "ael.y"
     {
                (yyval.pval)= npval2(PV_WORD, &(yylsp[0]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[0].str); ;}
     break;
 
-  case 26:
-#line 245 "ael.y"
+  case 27:
+#line 250 "ael.y"
     {
                pval *z = npval2(PV_WORD, &(yylsp[-2]), &(yylsp[0]));
                z->u1.str = (yyvsp[0].str);
                (yyval.pval) = linku1((yyvsp[-2].pval),z); ;}
     break;
 
-  case 27:
-#line 249 "ael.y"
+  case 28:
+#line 254 "ael.y"
     {(yyval.pval)=(yyvsp[-1].pval);;}
     break;
 
-  case 28:
-#line 252 "ael.y"
+  case 29:
+#line 257 "ael.y"
     { (yyval.pval) = NULL; ;}
     break;
 
-  case 29:
-#line 253 "ael.y"
+  case 30:
+#line 258 "ael.y"
     { (yyval.pval) = (yyvsp[-1].pval); ;}
     break;
 
-  case 30:
-#line 256 "ael.y"
+  case 31:
+#line 261 "ael.y"
     { (yyval.pval)=(yyvsp[0].pval);;}
     break;
 
-  case 31:
-#line 257 "ael.y"
+  case 32:
+#line 262 "ael.y"
     {(yyval.pval)=0;;}
     break;
 
-  case 32:
-#line 258 "ael.y"
+  case 33:
+#line 263 "ael.y"
     { if ( (yyvsp[-1].pval) && (yyvsp[0].pval) ) {(yyval.pval)=(yyvsp[-1].pval); linku1((yyval.pval),(yyvsp[0].pval));}
                                else if ( (yyvsp[-1].pval) ) {(yyval.pval)=(yyvsp[-1].pval);}
                                else if ( (yyvsp[0].pval) ) {(yyval.pval)=(yyvsp[0].pval);} ;}
     break;
 
-  case 33:
-#line 261 "ael.y"
-    { (yyval.pval)=(yyvsp[-1].pval);;}
-    break;
-
   case 34:
-#line 264 "ael.y"
-    {(yyval.pval)=(yyvsp[0].pval);;}
+#line 266 "ael.y"
+    { (yyval.pval)=(yyvsp[-1].pval);;}
     break;
 
   case 35:
-#line 265 "ael.y"
+#line 269 "ael.y"
     {(yyval.pval)=(yyvsp[0].pval);;}
     break;
 
   case 36:
-#line 266 "ael.y"
+#line 270 "ael.y"
     {(yyval.pval)=(yyvsp[0].pval);;}
     break;
 
   case 37:
-#line 267 "ael.y"
+#line 271 "ael.y"
     {(yyval.pval)=(yyvsp[0].pval);;}
     break;
 
   case 38:
-#line 268 "ael.y"
+#line 272 "ael.y"
     {(yyval.pval)=(yyvsp[0].pval);;}
     break;
 
   case 39:
-#line 269 "ael.y"
-    { reset_semicount(parseio->scanner); ;}
+#line 273 "ael.y"
+    {(yyval.pval)=(yyvsp[0].pval);;}
     break;
 
   case 40:
-#line 269 "ael.y"
+#line 274 "ael.y"
+    { reset_semicount(parseio->scanner); ;}
+    break;
+
+  case 41:
+#line 274 "ael.y"
     {
                (yyval.pval) = npval2(PV_VARDEC, &(yylsp[-4]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-4].str);
                (yyval.pval)->u2.val = (yyvsp[-1].str); ;}
     break;
 
-  case 41:
-#line 273 "ael.y"
+  case 42:
+#line 278 "ael.y"
     {free((yyvsp[-1].str)); (yyval.pval)=0;;}
     break;
 
-  case 42:
-#line 274 "ael.y"
+  case 43:
+#line 279 "ael.y"
     {(yyval.pval)=0;/* allow older docs to be read */;}
     break;
 
-  case 43:
-#line 277 "ael.y"
+  case 44:
+#line 282 "ael.y"
     {
                (yyval.pval) = npval2(PV_IGNOREPAT, &(yylsp[-3]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-1].str);;}
     break;
 
-  case 44:
-#line 282 "ael.y"
+  case 45:
+#line 287 "ael.y"
     {
                (yyval.pval) = npval2(PV_EXTENSION, &(yylsp[-2]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-2].str);
                (yyval.pval)->u2.statements = (yyvsp[0].pval); ;}
     break;
 
-  case 45:
-#line 286 "ael.y"
+  case 46:
+#line 291 "ael.y"
     {
                (yyval.pval) = npval2(PV_EXTENSION, &(yylsp[-3]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-2].str);
@@ -2184,8 +2200,8 @@ yyreduce:
                (yyval.pval)->u4.regexten=1;;}
     break;
 
-  case 46:
-#line 291 "ael.y"
+  case 47:
+#line 296 "ael.y"
     {
                (yyval.pval) = npval2(PV_EXTENSION, &(yylsp[-6]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-2].str);
@@ -2193,8 +2209,8 @@ yyreduce:
                (yyval.pval)->u3.hints = (yyvsp[-4].str);;}
     break;
 
-  case 47:
-#line 296 "ael.y"
+  case 48:
+#line 301 "ael.y"
     {
                (yyval.pval) = npval2(PV_EXTENSION, &(yylsp[-7]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-2].str);
@@ -2203,49 +2219,49 @@ yyreduce:
                (yyval.pval)->u3.hints = (yyvsp[-4].str);;}
     break;
 
-  case 48:
-#line 305 "ael.y"
+  case 49:
+#line 310 "ael.y"
     {(yyval.pval)=(yyvsp[0].pval);;}
     break;
 
-  case 49:
-#line 306 "ael.y"
+  case 50:
+#line 311 "ael.y"
     {if ( (yyvsp[-1].pval) && (yyvsp[0].pval) ) {(yyval.pval)=(yyvsp[-1].pval); linku1((yyval.pval),(yyvsp[0].pval));}
                                                 else if ( (yyvsp[-1].pval) ) {(yyval.pval)=(yyvsp[-1].pval);}
                                                 else if ( (yyvsp[0].pval) ) {(yyval.pval)=(yyvsp[0].pval);} ;}
     break;
 
-  case 50:
-#line 309 "ael.y"
+  case 51:
+#line 314 "ael.y"
     {(yyval.pval)=(yyvsp[-1].pval);;}
     break;
 
-  case 51:
-#line 312 "ael.y"
+  case 52:
+#line 317 "ael.y"
     { reset_parencount(parseio->scanner); ;}
     break;
 
-  case 52:
-#line 312 "ael.y"
+  case 53:
+#line 317 "ael.y"
     {
                (yyval.pval)= npval2(PV_IF, &(yylsp[-4]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-1].str); ;}
     break;
 
-  case 53:
-#line 317 "ael.y"
+  case 54:
+#line 322 "ael.y"
     { reset_parencount(parseio->scanner); ;}
     break;
 
-  case 54:
-#line 317 "ael.y"
+  case 55:
+#line 322 "ael.y"
     {
                (yyval.pval) = npval2(PV_RANDOM, &(yylsp[-4]), &(yylsp[0]));
                (yyval.pval)->u1.str=(yyvsp[-1].str);;}
     break;
 
-  case 55:
-#line 323 "ael.y"
+  case 56:
+#line 328 "ael.y"
     {
                (yyval.pval) = npval2(PV_IFTIME, &(yylsp[-13]), &(yylsp[-9])); /* XXX really @5 or more ? */
                (yyval.pval)->u1.list = npval2(PV_WORD, &(yylsp[-11]), &(yylsp[-11]));
@@ -2263,8 +2279,8 @@ yyreduce:
        ;}
     break;
 
-  case 56:
-#line 338 "ael.y"
+  case 57:
+#line 343 "ael.y"
     {
                (yyval.pval) = npval2(PV_IFTIME, &(yylsp[-9]), &(yylsp[-5])); /* XXX @5 or greater ? */
                (yyval.pval)->u1.list = npval2(PV_WORD, &(yylsp[-7]), &(yylsp[-7]));
@@ -2279,13 +2295,13 @@ yyreduce:
        ;}
     break;
 
-  case 57:
-#line 358 "ael.y"
+  case 58:
+#line 363 "ael.y"
     { (yyval.str) = (yyvsp[0].str);;}
     break;
 
-  case 58:
-#line 359 "ael.y"
+  case 59:
+#line 364 "ael.y"
     {
                asprintf(&((yyval.str)), "%s%s", (yyvsp[-1].str), (yyvsp[0].str));
                free((yyvsp[-1].str));
@@ -2293,13 +2309,13 @@ yyreduce:
                prev_word = (yyval.str);;}
     break;
 
-  case 59:
-#line 366 "ael.y"
+  case 60:
+#line 371 "ael.y"
     { (yyval.str) = (yyvsp[0].str);;}
     break;
 
-  case 60:
-#line 367 "ael.y"
+  case 61:
+#line 372 "ael.y"
     {
                asprintf(&((yyval.str)), "%s%s", (yyvsp[-1].str), (yyvsp[0].str));
                free((yyvsp[-1].str));
@@ -2307,8 +2323,8 @@ yyreduce:
                prev_word = (yyval.str);;}
     break;
 
-  case 61:
-#line 372 "ael.y"
+  case 62:
+#line 377 "ael.y"
     {
                asprintf(&((yyval.str)), "%s%s%s", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str));
                free((yyvsp[-2].str));
@@ -2317,97 +2333,97 @@ yyreduce:
                prev_word=(yyval.str);;}
     break;
 
-  case 62:
-#line 380 "ael.y"
+  case 63:
+#line 385 "ael.y"
     { (yyval.str) = (yyvsp[0].str);;}
     break;
 
-  case 63:
-#line 381 "ael.y"
+  case 64:
+#line 386 "ael.y"
     {
                asprintf(&((yyval.str)), "%s%s", (yyvsp[-1].str), (yyvsp[0].str));
                free((yyvsp[-1].str));
                free((yyvsp[0].str));;}
     break;
 
-  case 64:
-#line 385 "ael.y"
+  case 65:
+#line 390 "ael.y"
     {
                asprintf(&((yyval.str)), "%s:%s", (yyvsp[-2].str), (yyvsp[0].str));
                free((yyvsp[-2].str));
                free((yyvsp[0].str));;}
     break;
 
-  case 65:
-#line 391 "ael.y"
+  case 66:
+#line 396 "ael.y"
     { reset_parencount(parseio->scanner); ;}
     break;
 
-  case 66:
-#line 391 "ael.y"
+  case 67:
+#line 396 "ael.y"
     {
                (yyval.pval) = npval2(PV_SWITCH, &(yylsp[-5]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-2].str); ;}
     break;
 
-  case 67:
-#line 399 "ael.y"
+  case 68:
+#line 404 "ael.y"
     {
                (yyval.pval) = npval2(PV_STATEMENTBLOCK, &(yylsp[-2]), &(yylsp[0]));
                (yyval.pval)->u1.list = (yyvsp[-1].pval); ;}
     break;
 
-  case 68:
-#line 402 "ael.y"
+  case 69:
+#line 407 "ael.y"
     {reset_semicount(parseio->scanner);;}
     break;
 
-  case 69:
-#line 402 "ael.y"
+  case 70:
+#line 407 "ael.y"
     {
                (yyval.pval) = npval2(PV_VARDEC, &(yylsp[-4]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-4].str);
                (yyval.pval)->u2.val = (yyvsp[-1].str); ;}
     break;
 
-  case 70:
-#line 406 "ael.y"
+  case 71:
+#line 411 "ael.y"
     {
                (yyval.pval) = npval2(PV_GOTO, &(yylsp[-2]), &(yylsp[0]));
                (yyval.pval)->u1.list = (yyvsp[-1].pval);;}
     break;
 
-  case 71:
-#line 409 "ael.y"
+  case 72:
+#line 414 "ael.y"
     {
                (yyval.pval) = npval2(PV_GOTO, &(yylsp[-2]), &(yylsp[0]));
                (yyval.pval)->u1.list = (yyvsp[-1].pval);;}
     break;
 
-  case 72:
-#line 412 "ael.y"
+  case 73:
+#line 417 "ael.y"
     {
                (yyval.pval) = npval2(PV_LABEL, &(yylsp[-1]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-1].str); ;}
     break;
 
-  case 73:
-#line 415 "ael.y"
+  case 74:
+#line 420 "ael.y"
     {reset_semicount(parseio->scanner);;}
     break;
 
-  case 74:
-#line 416 "ael.y"
+  case 75:
+#line 421 "ael.y"
     {reset_semicount(parseio->scanner);;}
     break;
 
-  case 75:
-#line 417 "ael.y"
+  case 76:
+#line 422 "ael.y"
     {reset_parencount(parseio->scanner);;}
     break;
 
-  case 76:
-#line 417 "ael.y"
+  case 77:
+#line 422 "ael.y"
     {
                (yyval.pval) = npval2(PV_FOR, &(yylsp[-11]), &(yylsp[0]));
                (yyval.pval)->u1.for_init = (yyvsp[-8].str);
@@ -2416,58 +2432,58 @@ yyreduce:
                (yyval.pval)->u4.for_statements = (yyvsp[0].pval);;}
     break;
 
-  case 77:
-#line 423 "ael.y"
+  case 78:
+#line 428 "ael.y"
     {reset_parencount(parseio->scanner);;}
     break;
 
-  case 78:
-#line 423 "ael.y"
+  case 79:
+#line 428 "ael.y"
     {
                (yyval.pval) = npval2(PV_WHILE, &(yylsp[-5]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-2].str);
                (yyval.pval)->u2.statements = (yyvsp[0].pval); ;}
     break;
 
-  case 79:
-#line 427 "ael.y"
+  case 80:
+#line 432 "ael.y"
     {
                (yyval.pval) = update_last((yyvsp[-1].pval), &(yylsp[0])); ;}
     break;
 
-  case 80:
-#line 429 "ael.y"
+  case 81:
+#line 434 "ael.y"
     {
                (yyval.pval) = update_last((yyvsp[-2].pval), &(yylsp[0]));
                (yyval.pval)->u2.statements = (yyvsp[-1].pval);;}
     break;
 
-  case 81:
-#line 432 "ael.y"
+  case 82:
+#line 437 "ael.y"
     {
                (yyval.pval) = update_last((yyvsp[-1].pval), &(yylsp[-1])); ;}
     break;
 
-  case 82:
-#line 434 "ael.y"
+  case 83:
+#line 439 "ael.y"
     {
                (yyval.pval) = update_last((yyvsp[-1].pval), &(yylsp[0])); ;}
     break;
 
-  case 83:
-#line 436 "ael.y"
+  case 84:
+#line 441 "ael.y"
     {
                (yyval.pval)= npval2(PV_APPLICATION_CALL, &(yylsp[-1]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-1].str);;}
     break;
 
-  case 84:
-#line 439 "ael.y"
+  case 85:
+#line 444 "ael.y"
     {reset_semicount(parseio->scanner);;}
     break;
 
-  case 85:
-#line 439 "ael.y"
+  case 86:
+#line 444 "ael.y"
     {
                char *bufx;
                int tot=0;
@@ -2503,68 +2519,68 @@ yyreduce:
        ;}
     break;
 
-  case 86:
-#line 472 "ael.y"
+  case 87:
+#line 477 "ael.y"
     { (yyval.pval) = npval2(PV_BREAK, &(yylsp[-1]), &(yylsp[0])); ;}
     break;
 
-  case 87:
-#line 473 "ael.y"
+  case 88:
+#line 478 "ael.y"
     { (yyval.pval) = npval2(PV_RETURN, &(yylsp[-1]), &(yylsp[0])); ;}
     break;
 
-  case 88:
-#line 474 "ael.y"
+  case 89:
+#line 479 "ael.y"
     { (yyval.pval) = npval2(PV_CONTINUE, &(yylsp[-1]), &(yylsp[0])); ;}
     break;
 
-  case 89:
-#line 475 "ael.y"
+  case 90:
+#line 480 "ael.y"
     {
                (yyval.pval) = update_last((yyvsp[-2].pval), &(yylsp[-1])); /* XXX probably @3... */
                (yyval.pval)->u2.statements = (yyvsp[-1].pval);
                (yyval.pval)->u3.else_statements = (yyvsp[0].pval);;}
     break;
 
-  case 90:
-#line 479 "ael.y"
+  case 91:
+#line 484 "ael.y"
     {
                (yyval.pval) = update_last((yyvsp[-2].pval), &(yylsp[-1])); /* XXX probably @3... */
                (yyval.pval)->u2.statements = (yyvsp[-1].pval);
                (yyval.pval)->u3.else_statements = (yyvsp[0].pval);;}
     break;
 
-  case 91:
-#line 483 "ael.y"
+  case 92:
+#line 488 "ael.y"
     {
                (yyval.pval) = update_last((yyvsp[-2].pval), &(yylsp[-1])); /* XXX probably @3... */
                (yyval.pval)->u2.statements = (yyvsp[-1].pval);
                (yyval.pval)->u3.else_statements = (yyvsp[0].pval);;}
     break;
 
-  case 92:
-#line 487 "ael.y"
+  case 93:
+#line 492 "ael.y"
     { (yyval.pval)=0; ;}
     break;
 
-  case 93:
-#line 490 "ael.y"
+  case 94:
+#line 495 "ael.y"
     { (yyval.pval) = (yyvsp[0].pval); ;}
     break;
 
-  case 94:
-#line 491 "ael.y"
+  case 95:
+#line 496 "ael.y"
     { (yyval.pval) = NULL ; ;}
     break;
 
-  case 95:
-#line 496 "ael.y"
+  case 96:
+#line 501 "ael.y"
     { (yyval.pval) = npval2(PV_WORD, &(yylsp[0]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[0].str);;}
     break;
 
-  case 96:
-#line 498 "ael.y"
+  case 97:
+#line 503 "ael.y"
     {
                (yyval.pval) = npval2(PV_WORD, &(yylsp[-2]), &(yylsp[-2]));
                (yyval.pval)->u1.str = (yyvsp[-2].str);
@@ -2572,8 +2588,8 @@ yyreduce:
                (yyval.pval)->next->u1.str = (yyvsp[0].str);;}
     break;
 
-  case 97:
-#line 503 "ael.y"
+  case 98:
+#line 508 "ael.y"
     {
                (yyval.pval) = npval2(PV_WORD, &(yylsp[-2]), &(yylsp[-2]));
                (yyval.pval)->u1.str = (yyvsp[-2].str);
@@ -2581,8 +2597,8 @@ yyreduce:
                (yyval.pval)->next->u1.str = (yyvsp[0].str);;}
     break;
 
-  case 98:
-#line 508 "ael.y"
+  case 99:
+#line 513 "ael.y"
     {
                (yyval.pval) = npval2(PV_WORD, &(yylsp[-4]), &(yylsp[-4]));
                (yyval.pval)->u1.str = (yyvsp[-4].str);
@@ -2592,8 +2608,8 @@ yyreduce:
                (yyval.pval)->next->next->u1.str = (yyvsp[0].str); ;}
     break;
 
-  case 99:
-#line 515 "ael.y"
+  case 100:
+#line 520 "ael.y"
     {
                (yyval.pval) = npval2(PV_WORD, &(yylsp[-4]), &(yylsp[-4]));
                (yyval.pval)->u1.str = (yyvsp[-4].str);
@@ -2603,8 +2619,8 @@ yyreduce:
                (yyval.pval)->next->next->u1.str = (yyvsp[0].str); ;}
     break;
 
-  case 100:
-#line 522 "ael.y"
+  case 101:
+#line 527 "ael.y"
     {
                (yyval.pval) = npval2(PV_WORD, &(yylsp[-4]), &(yylsp[-4]));
                (yyval.pval)->u1.str = strdup("default");
@@ -2614,8 +2630,8 @@ yyreduce:
                (yyval.pval)->next->next->u1.str = (yyvsp[0].str); ;}
     break;
 
-  case 101:
-#line 529 "ael.y"
+  case 102:
+#line 534 "ael.y"
     {
                (yyval.pval) = npval2(PV_WORD, &(yylsp[-4]), &(yylsp[-4]));
                (yyval.pval)->u1.str = strdup("default");
@@ -2625,8 +2641,8 @@ yyreduce:
                (yyval.pval)->next->next->u1.str = (yyvsp[0].str); ;}
     break;
 
-  case 102:
-#line 538 "ael.y"
+  case 103:
+#line 543 "ael.y"
     {
                (yyval.pval) = npval2(PV_WORD, &(yylsp[0]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[0].str);
@@ -2634,8 +2650,8 @@ yyreduce:
                (yyval.pval)->next->u1.str = strdup("1");;}
     break;
 
-  case 103:
-#line 543 "ael.y"
+  case 104:
+#line 548 "ael.y"
     {
                (yyval.pval) = npval2(PV_WORD, &(yylsp[-2]), &(yylsp[-2]));
                (yyval.pval)->u1.str = (yyvsp[-2].str);
@@ -2643,8 +2659,8 @@ yyreduce:
                (yyval.pval)->next->u1.str = (yyvsp[0].str);;}
     break;
 
-  case 104:
-#line 548 "ael.y"
+  case 105:
+#line 553 "ael.y"
     {
                (yyval.pval) = npval2(PV_WORD, &(yylsp[-4]), &(yylsp[-4]));
                (yyval.pval)->u1.str = (yyvsp[0].str);
@@ -2654,8 +2670,8 @@ yyreduce:
                (yyval.pval)->next->next->u1.str = (yyvsp[-2].str); ;}
     break;
 
-  case 105:
-#line 555 "ael.y"
+  case 106:
+#line 560 "ael.y"
     {
                (yyval.pval) = npval2(PV_WORD, &(yylsp[-2]), &(yylsp[-2]));
                (yyval.pval)->u1.str = (yyvsp[0].str);
@@ -2665,8 +2681,8 @@ yyreduce:
                (yyval.pval)->next->next->u1.str = strdup("1"); ;}
     break;
 
-  case 106:
-#line 562 "ael.y"
+  case 107:
+#line 567 "ael.y"
     {
                (yyval.pval) = npval2(PV_WORD, &(yylsp[-4]), &(yylsp[-4]));
                (yyval.pval)->u1.str = strdup("default");
@@ -2676,8 +2692,8 @@ yyreduce:
                (yyval.pval)->next->next->u1.str = (yyvsp[-2].str); ;}
     break;
 
-  case 107:
-#line 569 "ael.y"
+  case 108:
+#line 574 "ael.y"
     {
                (yyval.pval) = npval2(PV_WORD, &(yylsp[-2]), &(yylsp[-2]));
                (yyval.pval)->u1.str = strdup("default");
@@ -2687,13 +2703,13 @@ yyreduce:
                (yyval.pval)->next->next->u1.str = strdup("1"); ;}
     break;
 
-  case 108:
-#line 578 "ael.y"
+  case 109:
+#line 583 "ael.y"
     {reset_argcount(parseio->scanner);;}
     break;
 
-  case 109:
-#line 578 "ael.y"
+  case 110:
+#line 583 "ael.y"
     {
                /* XXX original code had @2 but i think we need @5 */
                (yyval.pval) = npval2(PV_MACRO_CALL, &(yylsp[-4]), &(yylsp[0]));
@@ -2701,20 +2717,20 @@ yyreduce:
                (yyval.pval)->u2.arglist = (yyvsp[-1].pval);;}
     break;
 
-  case 110:
-#line 583 "ael.y"
+  case 111:
+#line 588 "ael.y"
     {
                (yyval.pval)= npval2(PV_MACRO_CALL, &(yylsp[-2]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-2].str); ;}
     break;
 
-  case 111:
-#line 588 "ael.y"
+  case 112:
+#line 593 "ael.y"
     {reset_argcount(parseio->scanner);;}
     break;
 
-  case 112:
-#line 588 "ael.y"
+  case 113:
+#line 593 "ael.y"
     {
                if (strcasecmp((yyvsp[-2].str),"goto") == 0) {
                        (yyval.pval)= npval2(PV_GOTO, &(yylsp[-2]), &(yylsp[0]));
@@ -2725,8 +2741,8 @@ yyreduce:
                (yyval.pval)->u1.str = (yyvsp[-2].str); ;}
     break;
 
-  case 113:
-#line 598 "ael.y"
+  case 114:
+#line 603 "ael.y"
     {
                (yyval.pval) = update_last((yyvsp[-2].pval), &(yylsp[0]));
                if( (yyval.pval)->type == PV_GOTO )
@@ -2736,37 +2752,37 @@ yyreduce:
        ;}
     break;
 
-  case 114:
-#line 605 "ael.y"
+  case 115:
+#line 610 "ael.y"
     { (yyval.pval) = update_last((yyvsp[-1].pval), &(yylsp[0])); ;}
     break;
 
-  case 115:
-#line 608 "ael.y"
+  case 116:
+#line 613 "ael.y"
     { (yyval.str) = (yyvsp[0].str) ;}
     break;
 
-  case 116:
-#line 609 "ael.y"
+  case 117:
+#line 614 "ael.y"
     { (yyval.str) = strdup(""); ;}
     break;
 
-  case 117:
-#line 612 "ael.y"
+  case 118:
+#line 617 "ael.y"
     { 
                (yyval.pval)= npval2(PV_WORD, &(yylsp[0]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[0].str);;}
     break;
 
-  case 118:
-#line 615 "ael.y"
+  case 119:
+#line 620 "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 119:
-#line 618 "ael.y"
+  case 120:
+#line 623 "ael.y"
     {
                pval *z = npval2(PV_WORD, &(yylsp[0]), &(yylsp[0]));
                (yyval.pval) = (yyvsp[-2].pval);
@@ -2774,123 +2790,127 @@ yyreduce:
                z->u1.str = (yyvsp[0].str);;}
     break;
 
-  case 120:
-#line 625 "ael.y"
+  case 121:
+#line 630 "ael.y"
     {(yyval.pval)=(yyvsp[0].pval);;}
     break;
 
-  case 121:
-#line 626 "ael.y"
+  case 122:
+#line 631 "ael.y"
     { if ( (yyvsp[-1].pval) && (yyvsp[0].pval) ) {(yyval.pval)=(yyvsp[-1].pval); linku1((yyval.pval),(yyvsp[0].pval));}
                                                 else if ( (yyvsp[-1].pval) ) {(yyval.pval)=(yyvsp[-1].pval);}
                                                 else if ( (yyvsp[0].pval) ) {(yyval.pval)=(yyvsp[0].pval);} ;}
     break;
 
-  case 122:
-#line 631 "ael.y"
+  case 123:
+#line 636 "ael.y"
     {
                (yyval.pval) = npval2(PV_CASE, &(yylsp[-3]), &(yylsp[-1])); /* XXX 3 or 4 ? */
                (yyval.pval)->u1.str = (yyvsp[-2].str);
                (yyval.pval)->u2.statements = (yyvsp[0].pval);;}
     break;
 
-  case 123:
-#line 635 "ael.y"
+  case 124:
+#line 640 "ael.y"
     {
                (yyval.pval) = npval2(PV_DEFAULT, &(yylsp[-2]), &(yylsp[0]));
                (yyval.pval)->u1.str = NULL;
                (yyval.pval)->u2.statements = (yyvsp[0].pval);;}
     break;
 
-  case 124:
-#line 639 "ael.y"
+  case 125:
+#line 644 "ael.y"
     {
                (yyval.pval) = npval2(PV_PATTERN, &(yylsp[-3]), &(yylsp[0])); /* XXX@3 or @4 ? */
                (yyval.pval)->u1.str = (yyvsp[-2].str);
                (yyval.pval)->u2.statements = (yyvsp[0].pval);;}
     break;
 
-  case 125:
-#line 643 "ael.y"
+  case 126:
+#line 648 "ael.y"
     {
                (yyval.pval) = npval2(PV_CASE, &(yylsp[-2]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-1].str);;}
     break;
 
-  case 126:
-#line 646 "ael.y"
+  case 127:
+#line 651 "ael.y"
     {
                (yyval.pval) = npval2(PV_DEFAULT, &(yylsp[-1]), &(yylsp[0]));
                (yyval.pval)->u1.str = NULL;;}
     break;
 
-  case 127:
-#line 649 "ael.y"
+  case 128:
+#line 654 "ael.y"
     {
                (yyval.pval) = npval2(PV_PATTERN, &(yylsp[-2]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-1].str);;}
     break;
 
-  case 128:
-#line 654 "ael.y"
+  case 129:
+#line 659 "ael.y"
     {(yyval.pval) = (yyvsp[0].pval);;}
     break;
 
-  case 129:
-#line 655 "ael.y"
+  case 130:
+#line 660 "ael.y"
     { if ( (yyvsp[-1].pval) && (yyvsp[0].pval) ) {(yyval.pval)=(yyvsp[-1].pval); linku1((yyval.pval),(yyvsp[0].pval));}
                                                 else if ( (yyvsp[-1].pval) ) {(yyval.pval)=(yyvsp[-1].pval);}
                                                 else if ( (yyvsp[0].pval) ) {(yyval.pval)=(yyvsp[0].pval);} ;}
     break;
 
-  case 130:
-#line 660 "ael.y"
+  case 131:
+#line 665 "ael.y"
     {(yyval.pval)=(yyvsp[0].pval);;}
     break;
 
-  case 131:
-#line 661 "ael.y"
+  case 132:
+#line 666 "ael.y"
     {
                (yyval.pval) = npval2(PV_CATCH, &(yylsp[-4]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-3].str);
                (yyval.pval)->u2.statements = (yyvsp[-1].pval);;}
     break;
 
-  case 132:
-#line 667 "ael.y"
+  case 133:
+#line 672 "ael.y"
     {
                (yyval.pval) = npval2(PV_SWITCHES, &(yylsp[-3]), &(yylsp[0]));
                (yyval.pval)->u1.list = (yyvsp[-1].pval); ;}
     break;
 
-  case 133:
-#line 670 "ael.y"
+  case 134:
+#line 675 "ael.y"
     {
                (yyval.pval) = npval2(PV_SWITCHES, &(yylsp[-2]), &(yylsp[0])); ;}
     break;
 
-  case 134:
-#line 674 "ael.y"
+  case 135:
+#line 679 "ael.y"
     {
-               (yyval.pval) = npval2(PV_ESWITCHES, &(yylsp[-3]), &(yylsp[0]));
-               (yyval.pval)->u1.list = (yyvsp[-1].pval); ;}
+               (yyval.pval) = npval2(PV_ESWITCHES, &(yylsp[-1]), &(yylsp[0]));
+               (yyval.pval)->u1.list = (yyvsp[0].pval); ;}
     break;
 
-  case 135:
-#line 677 "ael.y"
-    { /* empty switch list OK */
-               (yyval.pval) = npval2(PV_ESWITCHES, &(yylsp[-2]), &(yylsp[0])); ;}
+  case 136:
+#line 684 "ael.y"
+    { (yyval.pval) = (yyvsp[-1].pval); ;}
     break;
 
-  case 136:
-#line 681 "ael.y"
+  case 137:
+#line 685 "ael.y"
+    { (yyval.pval) = NULL; ;}
+    break;
+
+  case 138:
+#line 688 "ael.y"
     {
                (yyval.pval) = npval2(PV_WORD, &(yylsp[-1]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-1].str);;}
     break;
 
-  case 137:
-#line 684 "ael.y"
+  case 139:
+#line 691 "ael.y"
     {
                pval *z = npval2(PV_WORD, &(yylsp[-1]), &(yylsp[0]));
                z->u1.str = (yyvsp[-1].str);
@@ -2898,20 +2918,20 @@ yyreduce:
                linku1((yyval.pval),z); ;}
     break;
 
-  case 138:
-#line 689 "ael.y"
+  case 140:
+#line 696 "ael.y"
     {(yyval.pval)=(yyvsp[-1].pval);;}
     break;
 
-  case 139:
-#line 692 "ael.y"
+  case 141:
+#line 699 "ael.y"
     {
                (yyval.pval) = npval2(PV_WORD, &(yylsp[-1]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-1].str);;}
     break;
 
-  case 140:
-#line 696 "ael.y"
+  case 142:
+#line 703 "ael.y"
     {
                (yyval.pval) = npval2(PV_WORD, &(yylsp[-13]), &(yylsp[-12]));
                (yyval.pval)->u1.str = (yyvsp[-13].str);
@@ -2930,8 +2950,8 @@ yyreduce:
        ;}
     break;
 
-  case 141:
-#line 712 "ael.y"
+  case 143:
+#line 719 "ael.y"
     {
                (yyval.pval) = npval2(PV_WORD, &(yylsp[-9]), &(yylsp[-8]));
                (yyval.pval)->u1.str = (yyvsp[-9].str);
@@ -2947,8 +2967,8 @@ yyreduce:
        ;}
     break;
 
-  case 142:
-#line 725 "ael.y"
+  case 144:
+#line 732 "ael.y"
     {
                pval *z = npval2(PV_WORD, &(yylsp[-1]), &(yylsp[0])); /* XXX don't we need @1-@3 ?*/
                (yyval.pval)=(yyvsp[-2].pval);
@@ -2956,8 +2976,8 @@ yyreduce:
                linku1((yyval.pval),z); ;}
     break;
 
-  case 143:
-#line 731 "ael.y"
+  case 145:
+#line 738 "ael.y"
     {
                pval *z = npval2(PV_WORD, &(yylsp[-13]), &(yylsp[-12]));
                (yyval.pval)=(yyvsp[-14].pval); z->u1.str = (yyvsp[-13].str);
@@ -2977,8 +2997,8 @@ yyreduce:
        ;}
     break;
 
-  case 144:
-#line 748 "ael.y"
+  case 146:
+#line 755 "ael.y"
     {
                pval *z = npval2(PV_WORD, &(yylsp[-9]), &(yylsp[-8]));
                (yyval.pval)=(yyvsp[-10].pval);
@@ -2996,30 +3016,30 @@ yyreduce:
        ;}
     break;
 
-  case 145:
-#line 763 "ael.y"
+  case 147:
+#line 770 "ael.y"
     {(yyval.pval)=(yyvsp[-1].pval);;}
     break;
 
-  case 146:
-#line 766 "ael.y"
+  case 148:
+#line 773 "ael.y"
     { (yyval.str) = (yyvsp[0].str);;}
     break;
 
-  case 147:
-#line 767 "ael.y"
+  case 149:
+#line 774 "ael.y"
     {(yyval.str)=strdup("default");;}
     break;
 
-  case 148:
-#line 770 "ael.y"
+  case 150:
+#line 777 "ael.y"
     {
                (yyval.pval) = npval2(PV_INCLUDES, &(yylsp[-3]), &(yylsp[0]));
                (yyval.pval)->u1.list = (yyvsp[-1].pval);;}
     break;
 
-  case 149:
-#line 773 "ael.y"
+  case 151:
+#line 780 "ael.y"
     {
                (yyval.pval) = npval2(PV_INCLUDES, &(yylsp[-2]), &(yylsp[0]));;}
     break;
@@ -3029,7 +3049,7 @@ yyreduce:
     }
 
 /* Line 1126 of yacc.c.  */
-#line 3033 "ael.tab.c"
+#line 3053 "ael.tab.c"
 \f
   yyvsp -= yylen;
   yyssp -= yylen;
@@ -3304,7 +3324,7 @@ yyreturn:
 }
 
 
-#line 778 "ael.y"
+#line 785 "ael.y"
 
 
 static char *token_equivs1[] =
index d4a924b..199a5b5 100644 (file)
 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
 #line 53 "ael.y"
 typedef union YYSTYPE {
-       char *str;
-       struct pval *pval;
+       int     intval;         /* integer value, typically flags */
+       char    *str;           /* strings */
+       struct pval *pval;      /* full objects */
 } YYSTYPE;
 /* Line 1447 of yacc.c.  */
-#line 125 "ael.tab.h"
+#line 126 "ael.tab.h"
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
 # define YYSTYPE_IS_TRIVIAL 1
index cf71eb1..f1d20a3 100644 (file)
@@ -51,8 +51,9 @@ static char *ael_token_subst(char *mess);
 
 
 %union {
-       char *str;
-       struct pval *pval;
+       int     intval;         /* integer value, typically flags */
+       char    *str;           /* strings */
+       struct pval *pval;      /* full objects */
 }
 
 %{
@@ -117,6 +118,7 @@ static pval *update_last(pval *, YYLTYPE *);
 /* XXX lr changes */
 %type <pval>opt_else
 %type <pval>elements_block
+%type <pval>switchlist_block
 
 %type <str>opt_word
 %type <str>word_or_default
@@ -126,6 +128,8 @@ static pval *update_last(pval *, YYLTYPE *);
 %type <str>word3_list
 %type <str>includedname
 
+%type <intval>opt_abstract
+
 /*
  * OPTIONS
  */
@@ -160,7 +164,7 @@ static pval *update_last(pval *, YYLTYPE *);
                ignorepat element elements arglist global_statement
                global_statements globals macro context object objects
                opt_else
-               elements_block
+               elements_block switchlist_block
 
 %destructor { free($$);}  word word_list goto_word word3_list includedname opt_word word_or_default
 
@@ -195,15 +199,16 @@ word_or_default : word { $$ = $1; }
        | KW_DEFAULT { $$ = strdup("default"); }
        ;
 
-context : KW_CONTEXT word_or_default elements_block {
-               $$ = npval2(PV_CONTEXT, &@1, &@3);
-               $$->u1.str = $2;
-               $$->u2.statements = $3; }
-       | KW_ABSTRACT KW_CONTEXT word_or_default elements_block {
+context : opt_abstract KW_CONTEXT word_or_default elements_block {
                $$ = npval2(PV_CONTEXT, &@1, &@4);
                $$->u1.str = $3;
                $$->u2.statements = $4;
-               $$->u3.abstract = 1; }
+               $$->u3.abstract = $1; }
+       ;
+
+/* optional "abstract" keyword */
+opt_abstract: KW_ABSTRACT { $$ = 1; }
+       | /* nothing */ { $$ = 0; }
        ;
 
 macro : KW_MACRO word LP arglist RP LC macro_statements RC {
@@ -671,11 +676,13 @@ switches : KW_SWITCHES LC switchlist RC {
                $$ = npval2(PV_SWITCHES, &@1, &@3); }
        ;
 
-eswitches : KW_ESWITCHES LC switchlist RC {
-               $$ = npval2(PV_ESWITCHES, &@1, &@4);
-               $$->u1.list = $3; }
-       | KW_ESWITCHES LC  RC { /* empty switch list OK */
-               $$ = npval2(PV_ESWITCHES, &@1, &@3); } /* if there's nothing to declare, why include it? */
+eswitches : KW_ESWITCHES switchlist_block {
+               $$ = npval2(PV_ESWITCHES, &@1, &@2);
+               $$->u1.list = $2; }
+       ;
+
+switchlist_block : LC switchlist RC { $$ = $2; }
+       | LC RC { $$ = NULL; }
        ;
 
 switchlist : word SEMI {