document options, move objects of the same type close to
authorLuigi Rizzo <rizzo@icir.org>
Thu, 27 Apr 2006 19:51:59 +0000 (19:51 +0000)
committerLuigi Rizzo <rizzo@icir.org>
Thu, 27 Apr 2006 19:51:59 +0000 (19:51 +0000)
each other so it is evident what they are.

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@22958 65c4cc65-6c06-0410-ace0-fbb531ad65f3

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

index bcb502d..6275922 100644 (file)
@@ -561,22 +561,22 @@ static const yysigned_char yyrhs[] =
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const unsigned short int yyrline[] =
 {
-       0,   136,   136,   139,   140,   151,   154,   155,   156,   157,
-     160,   164,   167,   171,   174,   179,   183,   188,   194,   197,
-     200,   203,   208,   211,   216,   217,   218,   221,   221,   227,
-     230,   235,   238,   239,   240,   243,   246,   247,   248,   249,
-     250,   251,   251,   255,   256,   259,   264,   268,   273,   278,
-     287,   288,   291,   294,   294,   299,   299,   304,   320,   340,
-     341,   348,   349,   354,   362,   363,   367,   373,   373,   381,
-     384,   384,   388,   391,   394,   397,   398,   399,   397,   405,
-     405,   409,   413,   418,   422,   426,   429,   429,   462,   464,
-     466,   468,   473,   479,   484,   490,   495,   501,   504,   505,
-     510,   515,   522,   529,   536,   545,   550,   555,   562,   569,
-     576,   585,   585,   590,   595,   595,   605,   611,   614,   617,
-     620,   625,   632,   633,   638,   642,   646,   650,   653,   656,
-     661,   662,   667,   668,   671,   672,   675,   676,   679,   680,
-     681,   684,   685,   701,   714,   715,   730,   743,   746,   747,
-     750,   753
+       0,   160,   160,   163,   164,   175,   178,   179,   180,   181,
+     184,   188,   191,   195,   198,   203,   207,   212,   218,   221,
+     224,   227,   232,   235,   240,   241,   242,   245,   245,   251,
+     254,   259,   262,   263,   264,   267,   270,   271,   272,   273,
+     274,   275,   275,   279,   280,   283,   288,   292,   297,   302,
+     311,   312,   315,   318,   318,   323,   323,   328,   344,   364,
+     365,   372,   373,   378,   386,   387,   391,   397,   397,   405,
+     408,   408,   412,   415,   418,   421,   422,   423,   421,   429,
+     429,   433,   437,   442,   446,   450,   453,   453,   486,   488,
+     490,   492,   497,   503,   508,   514,   519,   525,   528,   529,
+     534,   539,   546,   553,   560,   569,   574,   579,   586,   593,
+     600,   609,   609,   614,   619,   619,   629,   635,   638,   641,
+     644,   649,   656,   657,   662,   666,   670,   674,   677,   680,
+     685,   686,   691,   692,   695,   696,   699,   700,   703,   704,
+     705,   708,   709,   725,   738,   739,   754,   767,   770,   771,
+     774,   777
 };
 #endif
 
@@ -1313,194 +1313,425 @@ yydestruct (yymsg, yytype, yyvaluep, yylocationp)
   switch (yytype)
     {
       case 41: /* "word" */
-#line 131 "ael.y"
+#line 155 "ael.y"
         { free((yyvaluep->str));};
 #line 1319 "ael.tab.c"
         break;
       case 44: /* "objects" */
-#line 128 "ael.y"
-        { if (yymsg[0] != 'C') {destroy_pval((yyvaluep->pval)); prev_word=0;} else {printf("Cleanup destructor called for pvals\n");} };
-#line 1324 "ael.tab.c"
+#line 140 "ael.y"
+        {
+               if (yymsg[0] != 'C') {
+                       destroy_pval((yyvaluep->pval));
+                       prev_word=0;
+               } else {
+                       printf("Cleanup destructor called for pvals\n");
+               }
+       };
+#line 1331 "ael.tab.c"
         break;
       case 45: /* "object" */
-#line 128 "ael.y"
-        { if (yymsg[0] != 'C') {destroy_pval((yyvaluep->pval)); prev_word=0;} else {printf("Cleanup destructor called for pvals\n");} };
-#line 1329 "ael.tab.c"
+#line 140 "ael.y"
+        {
+               if (yymsg[0] != 'C') {
+                       destroy_pval((yyvaluep->pval));
+                       prev_word=0;
+               } else {
+                       printf("Cleanup destructor called for pvals\n");
+               }
+       };
+#line 1343 "ael.tab.c"
         break;
       case 46: /* "context" */
-#line 128 "ael.y"
-        { if (yymsg[0] != 'C') {destroy_pval((yyvaluep->pval)); prev_word=0;} else {printf("Cleanup destructor called for pvals\n");} };
-#line 1334 "ael.tab.c"
+#line 140 "ael.y"
+        {
+               if (yymsg[0] != 'C') {
+                       destroy_pval((yyvaluep->pval));
+                       prev_word=0;
+               } else {
+                       printf("Cleanup destructor called for pvals\n");
+               }
+       };
+#line 1355 "ael.tab.c"
         break;
       case 47: /* "macro" */
-#line 128 "ael.y"
-        { if (yymsg[0] != 'C') {destroy_pval((yyvaluep->pval)); prev_word=0;} else {printf("Cleanup destructor called for pvals\n");} };
-#line 1339 "ael.tab.c"
+#line 140 "ael.y"
+        {
+               if (yymsg[0] != 'C') {
+                       destroy_pval((yyvaluep->pval));
+                       prev_word=0;
+               } else {
+                       printf("Cleanup destructor called for pvals\n");
+               }
+       };
+#line 1367 "ael.tab.c"
         break;
       case 48: /* "globals" */
-#line 128 "ael.y"
-        { if (yymsg[0] != 'C') {destroy_pval((yyvaluep->pval)); prev_word=0;} else {printf("Cleanup destructor called for pvals\n");} };
-#line 1344 "ael.tab.c"
+#line 140 "ael.y"
+        {
+               if (yymsg[0] != 'C') {
+                       destroy_pval((yyvaluep->pval));
+                       prev_word=0;
+               } else {
+                       printf("Cleanup destructor called for pvals\n");
+               }
+       };
+#line 1379 "ael.tab.c"
         break;
       case 49: /* "global_statements" */
-#line 128 "ael.y"
-        { if (yymsg[0] != 'C') {destroy_pval((yyvaluep->pval)); prev_word=0;} else {printf("Cleanup destructor called for pvals\n");} };
-#line 1349 "ael.tab.c"
+#line 140 "ael.y"
+        {
+               if (yymsg[0] != 'C') {
+                       destroy_pval((yyvaluep->pval));
+                       prev_word=0;
+               } else {
+                       printf("Cleanup destructor called for pvals\n");
+               }
+       };
+#line 1391 "ael.tab.c"
         break;
       case 50: /* "global_statement" */
-#line 128 "ael.y"
-        { if (yymsg[0] != 'C') {destroy_pval((yyvaluep->pval)); prev_word=0;} else {printf("Cleanup destructor called for pvals\n");} };
-#line 1354 "ael.tab.c"
+#line 140 "ael.y"
+        {
+               if (yymsg[0] != 'C') {
+                       destroy_pval((yyvaluep->pval));
+                       prev_word=0;
+               } else {
+                       printf("Cleanup destructor called for pvals\n");
+               }
+       };
+#line 1403 "ael.tab.c"
         break;
       case 52: /* "arglist" */
-#line 128 "ael.y"
-        { if (yymsg[0] != 'C') {destroy_pval((yyvaluep->pval)); prev_word=0;} else {printf("Cleanup destructor called for pvals\n");} };
-#line 1359 "ael.tab.c"
+#line 140 "ael.y"
+        {
+               if (yymsg[0] != 'C') {
+                       destroy_pval((yyvaluep->pval));
+                       prev_word=0;
+               } else {
+                       printf("Cleanup destructor called for pvals\n");
+               }
+       };
+#line 1415 "ael.tab.c"
         break;
       case 53: /* "elements" */
-#line 128 "ael.y"
-        { if (yymsg[0] != 'C') {destroy_pval((yyvaluep->pval)); prev_word=0;} else {printf("Cleanup destructor called for pvals\n");} };
-#line 1364 "ael.tab.c"
+#line 140 "ael.y"
+        {
+               if (yymsg[0] != 'C') {
+                       destroy_pval((yyvaluep->pval));
+                       prev_word=0;
+               } else {
+                       printf("Cleanup destructor called for pvals\n");
+               }
+       };
+#line 1427 "ael.tab.c"
         break;
       case 54: /* "element" */
-#line 128 "ael.y"
-        { if (yymsg[0] != 'C') {destroy_pval((yyvaluep->pval)); prev_word=0;} else {printf("Cleanup destructor called for pvals\n");} };
-#line 1369 "ael.tab.c"
+#line 140 "ael.y"
+        {
+               if (yymsg[0] != 'C') {
+                       destroy_pval((yyvaluep->pval));
+                       prev_word=0;
+               } else {
+                       printf("Cleanup destructor called for pvals\n");
+               }
+       };
+#line 1439 "ael.tab.c"
         break;
       case 56: /* "ignorepat" */
-#line 128 "ael.y"
-        { if (yymsg[0] != 'C') {destroy_pval((yyvaluep->pval)); prev_word=0;} else {printf("Cleanup destructor called for pvals\n");} };
-#line 1374 "ael.tab.c"
+#line 140 "ael.y"
+        {
+               if (yymsg[0] != 'C') {
+                       destroy_pval((yyvaluep->pval));
+                       prev_word=0;
+               } else {
+                       printf("Cleanup destructor called for pvals\n");
+               }
+       };
+#line 1451 "ael.tab.c"
         break;
       case 57: /* "extension" */
-#line 128 "ael.y"
-        { if (yymsg[0] != 'C') {destroy_pval((yyvaluep->pval)); prev_word=0;} else {printf("Cleanup destructor called for pvals\n");} };
-#line 1379 "ael.tab.c"
+#line 140 "ael.y"
+        {
+               if (yymsg[0] != 'C') {
+                       destroy_pval((yyvaluep->pval));
+                       prev_word=0;
+               } else {
+                       printf("Cleanup destructor called for pvals\n");
+               }
+       };
+#line 1463 "ael.tab.c"
         break;
       case 58: /* "statements" */
-#line 128 "ael.y"
-        { if (yymsg[0] != 'C') {destroy_pval((yyvaluep->pval)); prev_word=0;} else {printf("Cleanup destructor called for pvals\n");} };
-#line 1384 "ael.tab.c"
+#line 140 "ael.y"
+        {
+               if (yymsg[0] != 'C') {
+                       destroy_pval((yyvaluep->pval));
+                       prev_word=0;
+               } else {
+                       printf("Cleanup destructor called for pvals\n");
+               }
+       };
+#line 1475 "ael.tab.c"
         break;
       case 59: /* "if_head" */
-#line 128 "ael.y"
-        { if (yymsg[0] != 'C') {destroy_pval((yyvaluep->pval)); prev_word=0;} else {printf("Cleanup destructor called for pvals\n");} };
-#line 1389 "ael.tab.c"
+#line 140 "ael.y"
+        {
+               if (yymsg[0] != 'C') {
+                       destroy_pval((yyvaluep->pval));
+                       prev_word=0;
+               } else {
+                       printf("Cleanup destructor called for pvals\n");
+               }
+       };
+#line 1487 "ael.tab.c"
         break;
       case 61: /* "random_head" */
-#line 128 "ael.y"
-        { if (yymsg[0] != 'C') {destroy_pval((yyvaluep->pval)); prev_word=0;} else {printf("Cleanup destructor called for pvals\n");} };
-#line 1394 "ael.tab.c"
+#line 140 "ael.y"
+        {
+               if (yymsg[0] != 'C') {
+                       destroy_pval((yyvaluep->pval));
+                       prev_word=0;
+               } else {
+                       printf("Cleanup destructor called for pvals\n");
+               }
+       };
+#line 1499 "ael.tab.c"
         break;
       case 63: /* "iftime_head" */
-#line 128 "ael.y"
-        { if (yymsg[0] != 'C') {destroy_pval((yyvaluep->pval)); prev_word=0;} else {printf("Cleanup destructor called for pvals\n");} };
-#line 1399 "ael.tab.c"
+#line 140 "ael.y"
+        {
+               if (yymsg[0] != 'C') {
+                       destroy_pval((yyvaluep->pval));
+                       prev_word=0;
+               } else {
+                       printf("Cleanup destructor called for pvals\n");
+               }
+       };
+#line 1511 "ael.tab.c"
         break;
       case 64: /* "word_list" */
-#line 131 "ael.y"
+#line 155 "ael.y"
         { free((yyvaluep->str));};
-#line 1404 "ael.tab.c"
+#line 1516 "ael.tab.c"
         break;
       case 65: /* "word3_list" */
-#line 131 "ael.y"
+#line 155 "ael.y"
         { free((yyvaluep->str));};
-#line 1409 "ael.tab.c"
+#line 1521 "ael.tab.c"
         break;
       case 66: /* "goto_word" */
-#line 131 "ael.y"
+#line 155 "ael.y"
         { free((yyvaluep->str));};
-#line 1414 "ael.tab.c"
+#line 1526 "ael.tab.c"
         break;
       case 67: /* "switch_head" */
-#line 128 "ael.y"
-        { if (yymsg[0] != 'C') {destroy_pval((yyvaluep->pval)); prev_word=0;} else {printf("Cleanup destructor called for pvals\n");} };
-#line 1419 "ael.tab.c"
+#line 140 "ael.y"
+        {
+               if (yymsg[0] != 'C') {
+                       destroy_pval((yyvaluep->pval));
+                       prev_word=0;
+               } else {
+                       printf("Cleanup destructor called for pvals\n");
+               }
+       };
+#line 1538 "ael.tab.c"
         break;
       case 69: /* "statement" */
-#line 128 "ael.y"
-        { if (yymsg[0] != 'C') {destroy_pval((yyvaluep->pval)); prev_word=0;} else {printf("Cleanup destructor called for pvals\n");} };
-#line 1424 "ael.tab.c"
+#line 140 "ael.y"
+        {
+               if (yymsg[0] != 'C') {
+                       destroy_pval((yyvaluep->pval));
+                       prev_word=0;
+               } else {
+                       printf("Cleanup destructor called for pvals\n");
+               }
+       };
+#line 1550 "ael.tab.c"
         break;
       case 76: /* "target" */
-#line 128 "ael.y"
-        { if (yymsg[0] != 'C') {destroy_pval((yyvaluep->pval)); prev_word=0;} else {printf("Cleanup destructor called for pvals\n");} };
-#line 1429 "ael.tab.c"
+#line 140 "ael.y"
+        {
+               if (yymsg[0] != 'C') {
+                       destroy_pval((yyvaluep->pval));
+                       prev_word=0;
+               } else {
+                       printf("Cleanup destructor called for pvals\n");
+               }
+       };
+#line 1562 "ael.tab.c"
         break;
       case 77: /* "jumptarget" */
-#line 128 "ael.y"
-        { if (yymsg[0] != 'C') {destroy_pval((yyvaluep->pval)); prev_word=0;} else {printf("Cleanup destructor called for pvals\n");} };
-#line 1434 "ael.tab.c"
+#line 140 "ael.y"
+        {
+               if (yymsg[0] != 'C') {
+                       destroy_pval((yyvaluep->pval));
+                       prev_word=0;
+               } else {
+                       printf("Cleanup destructor called for pvals\n");
+               }
+       };
+#line 1574 "ael.tab.c"
         break;
       case 78: /* "macro_call" */
-#line 128 "ael.y"
-        { if (yymsg[0] != 'C') {destroy_pval((yyvaluep->pval)); prev_word=0;} else {printf("Cleanup destructor called for pvals\n");} };
-#line 1439 "ael.tab.c"
+#line 140 "ael.y"
+        {
+               if (yymsg[0] != 'C') {
+                       destroy_pval((yyvaluep->pval));
+                       prev_word=0;
+               } else {
+                       printf("Cleanup destructor called for pvals\n");
+               }
+       };
+#line 1586 "ael.tab.c"
         break;
       case 80: /* "application_call_head" */
-#line 128 "ael.y"
-        { if (yymsg[0] != 'C') {destroy_pval((yyvaluep->pval)); prev_word=0;} else {printf("Cleanup destructor called for pvals\n");} };
-#line 1444 "ael.tab.c"
+#line 140 "ael.y"
+        {
+               if (yymsg[0] != 'C') {
+                       destroy_pval((yyvaluep->pval));
+                       prev_word=0;
+               } else {
+                       printf("Cleanup destructor called for pvals\n");
+               }
+       };
+#line 1598 "ael.tab.c"
         break;
       case 82: /* "application_call" */
-#line 128 "ael.y"
-        { if (yymsg[0] != 'C') {destroy_pval((yyvaluep->pval)); prev_word=0;} else {printf("Cleanup destructor called for pvals\n");} };
-#line 1449 "ael.tab.c"
+#line 140 "ael.y"
+        {
+               if (yymsg[0] != 'C') {
+                       destroy_pval((yyvaluep->pval));
+                       prev_word=0;
+               } else {
+                       printf("Cleanup destructor called for pvals\n");
+               }
+       };
+#line 1610 "ael.tab.c"
         break;
       case 83: /* "eval_arglist" */
-#line 128 "ael.y"
-        { if (yymsg[0] != 'C') {destroy_pval((yyvaluep->pval)); prev_word=0;} else {printf("Cleanup destructor called for pvals\n");} };
-#line 1454 "ael.tab.c"
+#line 140 "ael.y"
+        {
+               if (yymsg[0] != 'C') {
+                       destroy_pval((yyvaluep->pval));
+                       prev_word=0;
+               } else {
+                       printf("Cleanup destructor called for pvals\n");
+               }
+       };
+#line 1622 "ael.tab.c"
         break;
       case 84: /* "case_statements" */
-#line 128 "ael.y"
-        { if (yymsg[0] != 'C') {destroy_pval((yyvaluep->pval)); prev_word=0;} else {printf("Cleanup destructor called for pvals\n");} };
-#line 1459 "ael.tab.c"
+#line 140 "ael.y"
+        {
+               if (yymsg[0] != 'C') {
+                       destroy_pval((yyvaluep->pval));
+                       prev_word=0;
+               } else {
+                       printf("Cleanup destructor called for pvals\n");
+               }
+       };
+#line 1634 "ael.tab.c"
         break;
       case 85: /* "case_statement" */
-#line 128 "ael.y"
-        { if (yymsg[0] != 'C') {destroy_pval((yyvaluep->pval)); prev_word=0;} else {printf("Cleanup destructor called for pvals\n");} };
-#line 1464 "ael.tab.c"
+#line 140 "ael.y"
+        {
+               if (yymsg[0] != 'C') {
+                       destroy_pval((yyvaluep->pval));
+                       prev_word=0;
+               } else {
+                       printf("Cleanup destructor called for pvals\n");
+               }
+       };
+#line 1646 "ael.tab.c"
         break;
       case 86: /* "macro_statements" */
-#line 128 "ael.y"
-        { if (yymsg[0] != 'C') {destroy_pval((yyvaluep->pval)); prev_word=0;} else {printf("Cleanup destructor called for pvals\n");} };
-#line 1469 "ael.tab.c"
+#line 140 "ael.y"
+        {
+               if (yymsg[0] != 'C') {
+                       destroy_pval((yyvaluep->pval));
+                       prev_word=0;
+               } else {
+                       printf("Cleanup destructor called for pvals\n");
+               }
+       };
+#line 1658 "ael.tab.c"
         break;
       case 87: /* "macro_statement" */
-#line 128 "ael.y"
-        { if (yymsg[0] != 'C') {destroy_pval((yyvaluep->pval)); prev_word=0;} else {printf("Cleanup destructor called for pvals\n");} };
-#line 1474 "ael.tab.c"
+#line 140 "ael.y"
+        {
+               if (yymsg[0] != 'C') {
+                       destroy_pval((yyvaluep->pval));
+                       prev_word=0;
+               } else {
+                       printf("Cleanup destructor called for pvals\n");
+               }
+       };
+#line 1670 "ael.tab.c"
         break;
       case 88: /* "switches" */
-#line 128 "ael.y"
-        { if (yymsg[0] != 'C') {destroy_pval((yyvaluep->pval)); prev_word=0;} else {printf("Cleanup destructor called for pvals\n");} };
-#line 1479 "ael.tab.c"
+#line 140 "ael.y"
+        {
+               if (yymsg[0] != 'C') {
+                       destroy_pval((yyvaluep->pval));
+                       prev_word=0;
+               } else {
+                       printf("Cleanup destructor called for pvals\n");
+               }
+       };
+#line 1682 "ael.tab.c"
         break;
       case 89: /* "eswitches" */
-#line 128 "ael.y"
-        { if (yymsg[0] != 'C') {destroy_pval((yyvaluep->pval)); prev_word=0;} else {printf("Cleanup destructor called for pvals\n");} };
-#line 1484 "ael.tab.c"
+#line 140 "ael.y"
+        {
+               if (yymsg[0] != 'C') {
+                       destroy_pval((yyvaluep->pval));
+                       prev_word=0;
+               } else {
+                       printf("Cleanup destructor called for pvals\n");
+               }
+       };
+#line 1694 "ael.tab.c"
         break;
       case 90: /* "switchlist" */
-#line 128 "ael.y"
-        { if (yymsg[0] != 'C') {destroy_pval((yyvaluep->pval)); prev_word=0;} else {printf("Cleanup destructor called for pvals\n");} };
-#line 1489 "ael.tab.c"
+#line 140 "ael.y"
+        {
+               if (yymsg[0] != 'C') {
+                       destroy_pval((yyvaluep->pval));
+                       prev_word=0;
+               } else {
+                       printf("Cleanup destructor called for pvals\n");
+               }
+       };
+#line 1706 "ael.tab.c"
         break;
       case 91: /* "includeslist" */
-#line 128 "ael.y"
-        { if (yymsg[0] != 'C') {destroy_pval((yyvaluep->pval)); prev_word=0;} else {printf("Cleanup destructor called for pvals\n");} };
-#line 1494 "ael.tab.c"
+#line 140 "ael.y"
+        {
+               if (yymsg[0] != 'C') {
+                       destroy_pval((yyvaluep->pval));
+                       prev_word=0;
+               } else {
+                       printf("Cleanup destructor called for pvals\n");
+               }
+       };
+#line 1718 "ael.tab.c"
         break;
       case 92: /* "includedname" */
-#line 131 "ael.y"
+#line 155 "ael.y"
         { free((yyvaluep->str));};
-#line 1499 "ael.tab.c"
+#line 1723 "ael.tab.c"
         break;
       case 93: /* "includes" */
-#line 128 "ael.y"
-        { if (yymsg[0] != 'C') {destroy_pval((yyvaluep->pval)); prev_word=0;} else {printf("Cleanup destructor called for pvals\n");} };
-#line 1504 "ael.tab.c"
+#line 140 "ael.y"
+        {
+               if (yymsg[0] != 'C') {
+                       destroy_pval((yyvaluep->pval));
+                       prev_word=0;
+               } else {
+                       printf("Cleanup destructor called for pvals\n");
+               }
+       };
+#line 1735 "ael.tab.c"
         break;
 
       default:
@@ -1817,17 +2048,17 @@ yyreduce:
   switch (yyn)
     {
         case 2:
-#line 136 "ael.y"
+#line 160 "ael.y"
     { (yyval.pval) = parseio->pval = (yyvsp[0].pval); ;}
     break;
 
   case 3:
-#line 139 "ael.y"
+#line 163 "ael.y"
     {(yyval.pval)=(yyvsp[0].pval);;}
     break;
 
   case 4:
-#line 141 "ael.y"
+#line 165 "ael.y"
     {
                        if ( (yyvsp[-1].pval) && (yyvsp[0].pval) ) {
                                (yyval.pval)=(yyvsp[-1].pval);
@@ -1841,32 +2072,32 @@ yyreduce:
     break;
 
   case 5:
-#line 151 "ael.y"
+#line 175 "ael.y"
     {(yyval.pval)=(yyvsp[-1].pval);;}
     break;
 
   case 6:
-#line 154 "ael.y"
+#line 178 "ael.y"
     {(yyval.pval)=(yyvsp[0].pval);;}
     break;
 
   case 7:
-#line 155 "ael.y"
+#line 179 "ael.y"
     {(yyval.pval)=(yyvsp[0].pval);;}
     break;
 
   case 8:
-#line 156 "ael.y"
+#line 180 "ael.y"
     {(yyval.pval)=(yyvsp[0].pval);;}
     break;
 
   case 9:
-#line 157 "ael.y"
+#line 181 "ael.y"
     {(yyval.pval)=0;/* allow older docs to be read */;}
     break;
 
   case 10:
-#line 160 "ael.y"
+#line 184 "ael.y"
     {
                (yyval.pval) = npval2(PV_CONTEXT, &(yylsp[-4]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-3].str);
@@ -1874,14 +2105,14 @@ yyreduce:
     break;
 
   case 11:
-#line 164 "ael.y"
+#line 188 "ael.y"
     {
                (yyval.pval) = npval2(PV_CONTEXT, &(yylsp[-3]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-2].str); ;}
     break;
 
   case 12:
-#line 167 "ael.y"
+#line 191 "ael.y"
     {
                (yyval.pval) = npval2(PV_CONTEXT, &(yylsp[-4]), &(yylsp[0]));
                (yyval.pval)->u1.str = strdup("default");
@@ -1889,14 +2120,14 @@ yyreduce:
     break;
 
   case 13:
-#line 171 "ael.y"
+#line 195 "ael.y"
     {
                (yyval.pval) = npval2(PV_CONTEXT, &(yylsp[-3]), &(yylsp[0]));
                (yyval.pval)->u1.str = strdup("default"); ;}
     break;
 
   case 14:
-#line 174 "ael.y"
+#line 198 "ael.y"
     {
                (yyval.pval) = npval2(PV_CONTEXT, &(yylsp[-5]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-3].str);
@@ -1905,7 +2136,7 @@ yyreduce:
     break;
 
   case 15:
-#line 179 "ael.y"
+#line 203 "ael.y"
     {
                (yyval.pval) = npval2(PV_CONTEXT, &(yylsp[-4]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-2].str);
@@ -1913,7 +2144,7 @@ yyreduce:
     break;
 
   case 16:
-#line 183 "ael.y"
+#line 207 "ael.y"
     {
                (yyval.pval) = npval2(PV_CONTEXT, &(yylsp[-5]), &(yylsp[0]));
                (yyval.pval)->u1.str = strdup("default");
@@ -1922,7 +2153,7 @@ yyreduce:
     break;
 
   case 17:
-#line 188 "ael.y"
+#line 212 "ael.y"
     {
                (yyval.pval) = npval2(PV_CONTEXT, &(yylsp[-4]), &(yylsp[0]));
                (yyval.pval)->u1.str = strdup("default");
@@ -1930,69 +2161,69 @@ yyreduce:
     break;
 
   case 18:
-#line 194 "ael.y"
+#line 218 "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 19:
-#line 197 "ael.y"
+#line 221 "ael.y"
     {
                (yyval.pval)=npval(PV_MACRO,(yylsp[-6]).first_line,(yylsp[0]).last_line, (yylsp[-6]).first_column, (yylsp[0]).last_column);
                (yyval.pval)->u1.str = (yyvsp[-5].str); (yyval.pval)->u2.arglist = (yyvsp[-3].pval); ;}
     break;
 
   case 20:
-#line 200 "ael.y"
+#line 224 "ael.y"
     {
                (yyval.pval)=npval(PV_MACRO,(yylsp[-6]).first_line,(yylsp[0]).last_line, (yylsp[-6]).first_column, (yylsp[0]).last_column);
                (yyval.pval)->u1.str = (yyvsp[-5].str); (yyval.pval)->u3.macro_statements = (yyvsp[-1].pval); ;}
     break;
 
   case 21:
-#line 203 "ael.y"
+#line 227 "ael.y"
     {
                (yyval.pval)=npval(PV_MACRO,(yylsp[-5]).first_line,(yylsp[0]).last_line, (yylsp[-5]).first_column, (yylsp[0]).last_column);
                (yyval.pval)->u1.str = (yyvsp[-4].str); /* pretty empty! */ ;}
     break;
 
   case 22:
-#line 208 "ael.y"
+#line 232 "ael.y"
     {
                (yyval.pval)=npval(PV_GLOBALS,(yylsp[-3]).first_line,(yylsp[0]).last_line, (yylsp[-3]).first_column, (yylsp[0]).last_column);
                (yyval.pval)->u1.statements = (yyvsp[-1].pval);;}
     break;
 
   case 23:
-#line 211 "ael.y"
+#line 235 "ael.y"
     {
                (yyval.pval)=npval(PV_GLOBALS,(yylsp[-2]).first_line,(yylsp[0]).last_line, (yylsp[-2]).first_column, (yylsp[0]).last_column);
                /* and that's all */ ;}
     break;
 
   case 24:
-#line 216 "ael.y"
+#line 240 "ael.y"
     {(yyval.pval)=(yyvsp[0].pval);;}
     break;
 
   case 25:
-#line 217 "ael.y"
+#line 241 "ael.y"
     {(yyval.pval)=(yyvsp[-1].pval); linku1((yyval.pval),(yyvsp[0].pval));;}
     break;
 
   case 26:
-#line 218 "ael.y"
+#line 242 "ael.y"
     {(yyval.pval)=(yyvsp[-1].pval);;}
     break;
 
   case 27:
-#line 221 "ael.y"
+#line 245 "ael.y"
     { reset_semicount(parseio->scanner); ;}
     break;
 
   case 28:
-#line 221 "ael.y"
+#line 245 "ael.y"
     {
                (yyval.pval)=npval(PV_VARDEC,(yylsp[-4]).first_line,(yylsp[0]).last_line, (yylsp[-4]).first_column, (yylsp[0]).last_column);
                (yyval.pval)->u1.str = (yyvsp[-4].str);
@@ -2000,14 +2231,14 @@ yyreduce:
     break;
 
   case 29:
-#line 227 "ael.y"
+#line 251 "ael.y"
     {
                (yyval.pval)= npval(PV_WORD,(yylsp[0]).first_line,(yylsp[0]).last_line, (yylsp[0]).first_column, (yylsp[0]).last_column);
                (yyval.pval)->u1.str = (yyvsp[0].str); ;}
     break;
 
   case 30:
-#line 230 "ael.y"
+#line 254 "ael.y"
     {
                pval *z = npval(PV_WORD,(yylsp[-2]).first_line,(yylsp[0]).last_line, (yylsp[-2]).first_column, (yylsp[0]).last_column);
                z->u1.str = (yyvsp[0].str);
@@ -2016,64 +2247,64 @@ yyreduce:
     break;
 
   case 31:
-#line 235 "ael.y"
+#line 259 "ael.y"
     {(yyval.pval)=(yyvsp[-1].pval);;}
     break;
 
   case 32:
-#line 238 "ael.y"
+#line 262 "ael.y"
     { (yyval.pval)=(yyvsp[0].pval);;}
     break;
 
   case 33:
-#line 239 "ael.y"
+#line 263 "ael.y"
     {(yyval.pval)=0;;}
     break;
 
   case 34:
-#line 240 "ael.y"
+#line 264 "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 35:
-#line 243 "ael.y"
+#line 267 "ael.y"
     { (yyval.pval)=(yyvsp[-1].pval);;}
     break;
 
   case 36:
-#line 246 "ael.y"
+#line 270 "ael.y"
     {(yyval.pval)=(yyvsp[0].pval);;}
     break;
 
   case 37:
-#line 247 "ael.y"
+#line 271 "ael.y"
     {(yyval.pval)=(yyvsp[0].pval);;}
     break;
 
   case 38:
-#line 248 "ael.y"
+#line 272 "ael.y"
     {(yyval.pval)=(yyvsp[0].pval);;}
     break;
 
   case 39:
-#line 249 "ael.y"
+#line 273 "ael.y"
     {(yyval.pval)=(yyvsp[0].pval);;}
     break;
 
   case 40:
-#line 250 "ael.y"
+#line 274 "ael.y"
     {(yyval.pval)=(yyvsp[0].pval);;}
     break;
 
   case 41:
-#line 251 "ael.y"
+#line 275 "ael.y"
     { reset_semicount(parseio->scanner); ;}
     break;
 
   case 42:
-#line 251 "ael.y"
+#line 275 "ael.y"
     {
                (yyval.pval) = npval2(PV_VARDEC, &(yylsp[-4]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-4].str);
@@ -2081,24 +2312,24 @@ yyreduce:
     break;
 
   case 43:
-#line 255 "ael.y"
+#line 279 "ael.y"
     {free((yyvsp[-1].str)); (yyval.pval)=0;;}
     break;
 
   case 44:
-#line 256 "ael.y"
+#line 280 "ael.y"
     {(yyval.pval)=0;/* allow older docs to be read */;}
     break;
 
   case 45:
-#line 259 "ael.y"
+#line 283 "ael.y"
     {
                (yyval.pval) = npval2(PV_IGNOREPAT, &(yylsp[-3]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-1].str);;}
     break;
 
   case 46:
-#line 264 "ael.y"
+#line 288 "ael.y"
     {
                (yyval.pval) = npval(PV_EXTENSION,(yylsp[-2]).first_line,(yylsp[0]).last_line, (yylsp[-2]).first_column, (yylsp[0]).last_column);
                (yyval.pval)->u1.str = (yyvsp[-2].str);
@@ -2106,7 +2337,7 @@ yyreduce:
     break;
 
   case 47:
-#line 268 "ael.y"
+#line 292 "ael.y"
     {
                (yyval.pval) = npval(PV_EXTENSION,(yylsp[-3]).first_line,(yylsp[0]).last_line, (yylsp[-3]).first_column, (yylsp[0]).last_column);
                (yyval.pval)->u1.str = (yyvsp[-2].str);
@@ -2115,7 +2346,7 @@ yyreduce:
     break;
 
   case 48:
-#line 273 "ael.y"
+#line 297 "ael.y"
     {
                (yyval.pval) = npval(PV_EXTENSION,(yylsp[-6]).first_line,(yylsp[0]).last_line, (yylsp[-6]).first_column, (yylsp[0]).last_column);
                (yyval.pval)->u1.str = (yyvsp[-2].str);
@@ -2124,7 +2355,7 @@ yyreduce:
     break;
 
   case 49:
-#line 278 "ael.y"
+#line 302 "ael.y"
     {
                (yyval.pval) = npval(PV_EXTENSION,(yylsp[-7]).first_line,(yylsp[0]).last_line, (yylsp[-7]).first_column, (yylsp[0]).last_column);
                (yyval.pval)->u1.str = (yyvsp[-2].str);
@@ -2134,48 +2365,48 @@ yyreduce:
     break;
 
   case 50:
-#line 287 "ael.y"
+#line 311 "ael.y"
     {(yyval.pval)=(yyvsp[0].pval);;}
     break;
 
   case 51:
-#line 288 "ael.y"
+#line 312 "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 52:
-#line 291 "ael.y"
+#line 315 "ael.y"
     {(yyval.pval)=(yyvsp[-1].pval);;}
     break;
 
   case 53:
-#line 294 "ael.y"
+#line 318 "ael.y"
     { reset_parencount(parseio->scanner); ;}
     break;
 
   case 54:
-#line 294 "ael.y"
+#line 318 "ael.y"
     {
                (yyval.pval)= npval(PV_IF,(yylsp[-4]).first_line,(yylsp[0]).last_line, (yylsp[-4]).first_column, (yylsp[0]).last_column);
                (yyval.pval)->u1.str = (yyvsp[-1].str); ;}
     break;
 
   case 55:
-#line 299 "ael.y"
+#line 323 "ael.y"
     { reset_parencount(parseio->scanner); ;}
     break;
 
   case 56:
-#line 299 "ael.y"
+#line 323 "ael.y"
     {
                (yyval.pval)= npval(PV_RANDOM,(yylsp[-4]).first_line,(yylsp[0]).last_line, (yylsp[-4]).first_column, (yylsp[0]).last_column);
                (yyval.pval)->u1.str=(yyvsp[-1].str);;}
     break;
 
   case 57:
-#line 305 "ael.y"
+#line 329 "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]));
@@ -2194,7 +2425,7 @@ yyreduce:
     break;
 
   case 58:
-#line 320 "ael.y"
+#line 344 "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]));
@@ -2210,12 +2441,12 @@ yyreduce:
     break;
 
   case 59:
-#line 340 "ael.y"
+#line 364 "ael.y"
     { (yyval.str) = (yyvsp[0].str);;}
     break;
 
   case 60:
-#line 341 "ael.y"
+#line 365 "ael.y"
     {
                asprintf(&((yyval.str)), "%s%s", (yyvsp[-1].str), (yyvsp[0].str));
                free((yyvsp[-1].str));
@@ -2224,12 +2455,12 @@ yyreduce:
     break;
 
   case 61:
-#line 348 "ael.y"
+#line 372 "ael.y"
     { (yyval.str) = (yyvsp[0].str);;}
     break;
 
   case 62:
-#line 349 "ael.y"
+#line 373 "ael.y"
     {
                asprintf(&((yyval.str)), "%s%s", (yyvsp[-1].str), (yyvsp[0].str));
                free((yyvsp[-1].str));
@@ -2238,7 +2469,7 @@ yyreduce:
     break;
 
   case 63:
-#line 354 "ael.y"
+#line 378 "ael.y"
     {
                asprintf(&((yyval.str)), "%s%s%s", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str));
                free((yyvsp[-2].str));
@@ -2248,12 +2479,12 @@ yyreduce:
     break;
 
   case 64:
-#line 362 "ael.y"
+#line 386 "ael.y"
     { (yyval.str) = (yyvsp[0].str);;}
     break;
 
   case 65:
-#line 363 "ael.y"
+#line 387 "ael.y"
     {
                asprintf(&((yyval.str)), "%s%s", (yyvsp[-1].str), (yyvsp[0].str));
                free((yyvsp[-1].str));
@@ -2261,7 +2492,7 @@ yyreduce:
     break;
 
   case 66:
-#line 367 "ael.y"
+#line 391 "ael.y"
     {
                asprintf(&((yyval.str)), "%s:%s", (yyvsp[-2].str), (yyvsp[0].str));
                free((yyvsp[-2].str));
@@ -2269,31 +2500,31 @@ yyreduce:
     break;
 
   case 67:
-#line 373 "ael.y"
+#line 397 "ael.y"
     { reset_parencount(parseio->scanner); ;}
     break;
 
   case 68:
-#line 373 "ael.y"
+#line 397 "ael.y"
     {
                (yyval.pval)=npval(PV_SWITCH,(yylsp[-5]).first_line,(yylsp[0]).last_line, (yylsp[-5]).first_column, (yylsp[0]).last_column);
                (yyval.pval)->u1.str = (yyvsp[-2].str); ;}
     break;
 
   case 69:
-#line 381 "ael.y"
+#line 405 "ael.y"
     {
                (yyval.pval) = npval2(PV_STATEMENTBLOCK, &(yylsp[-2]), &(yylsp[0]));
                (yyval.pval)->u1.list = (yyvsp[-1].pval); ;}
     break;
 
   case 70:
-#line 384 "ael.y"
+#line 408 "ael.y"
     {reset_semicount(parseio->scanner);;}
     break;
 
   case 71:
-#line 384 "ael.y"
+#line 408 "ael.y"
     {
                (yyval.pval) = npval2(PV_VARDEC, &(yylsp[-4]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-4].str);
@@ -2301,43 +2532,43 @@ yyreduce:
     break;
 
   case 72:
-#line 388 "ael.y"
+#line 412 "ael.y"
     {
                (yyval.pval) = npval2(PV_GOTO, &(yylsp[-2]), &(yylsp[0]));
                (yyval.pval)->u1.list = (yyvsp[-1].pval);;}
     break;
 
   case 73:
-#line 391 "ael.y"
+#line 415 "ael.y"
     {
                (yyval.pval)=npval(PV_GOTO,(yylsp[-2]).first_line,(yylsp[0]).last_line, (yylsp[-2]).first_column, (yylsp[0]).last_column);
                (yyval.pval)->u1.list = (yyvsp[-1].pval);;}
     break;
 
   case 74:
-#line 394 "ael.y"
+#line 418 "ael.y"
     {
                (yyval.pval)=npval(PV_LABEL,(yylsp[-1]).first_line,(yylsp[0]).last_line, (yylsp[-1]).first_column, (yylsp[0]).last_column);
                (yyval.pval)->u1.str = (yyvsp[-1].str); ;}
     break;
 
   case 75:
-#line 397 "ael.y"
+#line 421 "ael.y"
     {reset_semicount(parseio->scanner);;}
     break;
 
   case 76:
-#line 398 "ael.y"
+#line 422 "ael.y"
     {reset_semicount(parseio->scanner);;}
     break;
 
   case 77:
-#line 399 "ael.y"
+#line 423 "ael.y"
     {reset_parencount(parseio->scanner);;}
     break;
 
   case 78:
-#line 399 "ael.y"
+#line 423 "ael.y"
     {
                (yyval.pval)=npval(PV_FOR,(yylsp[-11]).first_line,(yylsp[0]).last_line, (yylsp[-11]).first_column, (yylsp[0]).last_column);
                (yyval.pval)->u1.for_init = (yyvsp[-8].str);
@@ -2347,12 +2578,12 @@ yyreduce:
     break;
 
   case 79:
-#line 405 "ael.y"
+#line 429 "ael.y"
     {reset_parencount(parseio->scanner);;}
     break;
 
   case 80:
-#line 405 "ael.y"
+#line 429 "ael.y"
     {
                (yyval.pval)=npval(PV_WHILE,(yylsp[-5]).first_line,(yylsp[0]).last_line, (yylsp[-5]).first_column, (yylsp[0]).last_column);
                (yyval.pval)->u1.str = (yyvsp[-2].str);
@@ -2360,7 +2591,7 @@ yyreduce:
     break;
 
   case 81:
-#line 409 "ael.y"
+#line 433 "ael.y"
     {
                (yyval.pval)=(yyvsp[-1].pval);
                (yyval.pval)->endline = (yylsp[0]).last_line;
@@ -2368,7 +2599,7 @@ yyreduce:
     break;
 
   case 82:
-#line 413 "ael.y"
+#line 437 "ael.y"
     {
                (yyval.pval)=(yyvsp[-2].pval);
                (yyval.pval)->u2.statements = (yyvsp[-1].pval);
@@ -2377,7 +2608,7 @@ yyreduce:
     break;
 
   case 83:
-#line 418 "ael.y"
+#line 442 "ael.y"
     {
                (yyval.pval) = (yyvsp[-1].pval);
                (yyval.pval)->endline = (yylsp[-1]).last_line;
@@ -2385,7 +2616,7 @@ yyreduce:
     break;
 
   case 84:
-#line 422 "ael.y"
+#line 446 "ael.y"
     {
                (yyval.pval) = (yyvsp[-1].pval);
                (yyval.pval)->endline = (yylsp[0]).last_line;
@@ -2393,19 +2624,19 @@ yyreduce:
     break;
 
   case 85:
-#line 426 "ael.y"
+#line 450 "ael.y"
     {
                (yyval.pval)= npval(PV_APPLICATION_CALL,(yylsp[-1]).first_line,(yylsp[0]).last_line, (yylsp[-1]).first_column, (yylsp[0]).last_column);
                (yyval.pval)->u1.str = (yyvsp[-1].str);;}
     break;
 
   case 86:
-#line 429 "ael.y"
+#line 453 "ael.y"
     {reset_semicount(parseio->scanner);;}
     break;
 
   case 87:
-#line 429 "ael.y"
+#line 453 "ael.y"
     {
                char *bufx;
                int tot=0;
@@ -2442,25 +2673,25 @@ yyreduce:
     break;
 
   case 88:
-#line 462 "ael.y"
+#line 486 "ael.y"
     {
                (yyval.pval) = npval(PV_BREAK,(yylsp[-1]).first_line,(yylsp[0]).last_line, (yylsp[-1]).first_column, (yylsp[0]).last_column);;}
     break;
 
   case 89:
-#line 464 "ael.y"
+#line 488 "ael.y"
     {
                (yyval.pval) = npval(PV_RETURN,(yylsp[-1]).first_line,(yylsp[0]).last_line, (yylsp[-1]).first_column, (yylsp[0]).last_column);;}
     break;
 
   case 90:
-#line 466 "ael.y"
+#line 490 "ael.y"
     {
                (yyval.pval) = npval(PV_CONTINUE,(yylsp[-1]).first_line,(yylsp[0]).last_line, (yylsp[-1]).first_column, (yylsp[0]).last_column);;}
     break;
 
   case 91:
-#line 468 "ael.y"
+#line 492 "ael.y"
     {
                (yyval.pval)=(yyvsp[-1].pval);
                (yyval.pval)->u2.statements = (yyvsp[0].pval);
@@ -2469,7 +2700,7 @@ yyreduce:
     break;
 
   case 92:
-#line 473 "ael.y"
+#line 497 "ael.y"
     {
                (yyval.pval)=(yyvsp[-3].pval);
                (yyval.pval)->u2.statements = (yyvsp[-2].pval);
@@ -2479,7 +2710,7 @@ yyreduce:
     break;
 
   case 93:
-#line 479 "ael.y"
+#line 503 "ael.y"
     {
                (yyval.pval)=(yyvsp[-1].pval);
                (yyval.pval)->u2.statements = (yyvsp[0].pval);
@@ -2488,7 +2719,7 @@ yyreduce:
     break;
 
   case 94:
-#line 484 "ael.y"
+#line 508 "ael.y"
     {
                (yyval.pval)=(yyvsp[-3].pval);
                (yyval.pval)->u2.statements = (yyvsp[-2].pval);
@@ -2498,7 +2729,7 @@ yyreduce:
     break;
 
   case 95:
-#line 490 "ael.y"
+#line 514 "ael.y"
     {
                (yyval.pval)=(yyvsp[-1].pval);
                (yyval.pval)->u2.statements = (yyvsp[0].pval);
@@ -2507,7 +2738,7 @@ yyreduce:
     break;
 
   case 96:
-#line 495 "ael.y"
+#line 519 "ael.y"
     {
                (yyval.pval)=(yyvsp[-3].pval);
                (yyval.pval)->u2.statements = (yyvsp[-2].pval);
@@ -2517,17 +2748,17 @@ yyreduce:
     break;
 
   case 97:
-#line 501 "ael.y"
+#line 525 "ael.y"
     { (yyval.pval)=0; ;}
     break;
 
   case 98:
-#line 504 "ael.y"
+#line 528 "ael.y"
     { (yyval.pval) = npval(PV_WORD,(yylsp[0]).first_line,(yylsp[0]).last_line, (yylsp[0]).first_column, (yylsp[0]).last_column); (yyval.pval)->u1.str = (yyvsp[0].str);;}
     break;
 
   case 99:
-#line 505 "ael.y"
+#line 529 "ael.y"
     {
                (yyval.pval)=npval(PV_WORD,(yylsp[-2]).first_line,(yylsp[-2]).last_line, (yylsp[-2]).first_column, (yylsp[-2]).last_column);
                (yyval.pval)->u1.str = (yyvsp[-2].str);
@@ -2536,7 +2767,7 @@ yyreduce:
     break;
 
   case 100:
-#line 510 "ael.y"
+#line 534 "ael.y"
     {
                (yyval.pval)=npval(PV_WORD,(yylsp[-2]).first_line,(yylsp[-2]).last_line, (yylsp[-2]).first_column, (yylsp[-2]).last_column);
                (yyval.pval)->u1.str = (yyvsp[-2].str);
@@ -2545,7 +2776,7 @@ yyreduce:
     break;
 
   case 101:
-#line 515 "ael.y"
+#line 539 "ael.y"
     {
                (yyval.pval)=npval(PV_WORD,(yylsp[-4]).first_line,(yylsp[-4]).last_line, (yylsp[-4]).first_column, (yylsp[-4]).last_column);
                (yyval.pval)->u1.str = (yyvsp[-4].str);
@@ -2556,7 +2787,7 @@ yyreduce:
     break;
 
   case 102:
-#line 522 "ael.y"
+#line 546 "ael.y"
     {
                (yyval.pval)=npval(PV_WORD,(yylsp[-4]).first_line,(yylsp[-4]).last_line, (yylsp[-4]).first_column, (yylsp[-4]).last_column);
                (yyval.pval)->u1.str = (yyvsp[-4].str);
@@ -2567,7 +2798,7 @@ yyreduce:
     break;
 
   case 103:
-#line 529 "ael.y"
+#line 553 "ael.y"
     {
                (yyval.pval)=npval(PV_WORD,(yylsp[-4]).first_line,(yylsp[-4]).last_line, (yylsp[-4]).first_column, (yylsp[-4]).last_column);
                (yyval.pval)->u1.str = strdup("default");
@@ -2578,7 +2809,7 @@ yyreduce:
     break;
 
   case 104:
-#line 536 "ael.y"
+#line 560 "ael.y"
     {
                (yyval.pval)=npval(PV_WORD,(yylsp[-4]).first_line,(yylsp[-4]).last_line, (yylsp[-4]).first_column, (yylsp[-4]).last_column);
                (yyval.pval)->u1.str = strdup("default");
@@ -2589,7 +2820,7 @@ yyreduce:
     break;
 
   case 105:
-#line 545 "ael.y"
+#line 569 "ael.y"
     {
                (yyval.pval)=npval(PV_WORD,(yylsp[0]).first_line,(yylsp[0]).last_line, (yylsp[0]).first_column, (yylsp[0]).last_column);
                (yyval.pval)->u1.str = (yyvsp[0].str);
@@ -2598,7 +2829,7 @@ yyreduce:
     break;
 
   case 106:
-#line 550 "ael.y"
+#line 574 "ael.y"
     {
                (yyval.pval)=npval(PV_WORD,(yylsp[-2]).first_line,(yylsp[-2]).last_line, (yylsp[-2]).first_column, (yylsp[-2]).last_column);
                (yyval.pval)->u1.str = (yyvsp[-2].str);
@@ -2607,7 +2838,7 @@ yyreduce:
     break;
 
   case 107:
-#line 555 "ael.y"
+#line 579 "ael.y"
     {
                (yyval.pval)=npval(PV_WORD,(yylsp[-4]).first_line,(yylsp[-4]).last_line, (yylsp[-4]).first_column, (yylsp[-4]).last_column);
                (yyval.pval)->u1.str = (yyvsp[0].str);
@@ -2618,7 +2849,7 @@ yyreduce:
     break;
 
   case 108:
-#line 562 "ael.y"
+#line 586 "ael.y"
     {
                (yyval.pval)=npval(PV_WORD,(yylsp[-2]).first_line,(yylsp[-2]).last_line, (yylsp[-2]).first_column, (yylsp[-2]).last_column);
                (yyval.pval)->u1.str = (yyvsp[0].str);
@@ -2629,7 +2860,7 @@ yyreduce:
     break;
 
   case 109:
-#line 569 "ael.y"
+#line 593 "ael.y"
     {
                (yyval.pval)=npval(PV_WORD,(yylsp[-4]).first_line,(yylsp[-4]).last_line, (yylsp[-4]).first_column, (yylsp[-4]).last_column);
                (yyval.pval)->u1.str = strdup("default");
@@ -2640,7 +2871,7 @@ yyreduce:
     break;
 
   case 110:
-#line 576 "ael.y"
+#line 600 "ael.y"
     {
                (yyval.pval)=npval(PV_WORD,(yylsp[-2]).first_line,(yylsp[-2]).last_line, (yylsp[-2]).first_column, (yylsp[-2]).last_column);
                (yyval.pval)->u1.str = strdup("default");
@@ -2651,12 +2882,12 @@ yyreduce:
     break;
 
   case 111:
-#line 585 "ael.y"
+#line 609 "ael.y"
     {reset_argcount(parseio->scanner);;}
     break;
 
   case 112:
-#line 585 "ael.y"
+#line 609 "ael.y"
     {
                /* XXX original code had @2 but i think we need @5 */
                (yyval.pval) = npval2(PV_MACRO_CALL, &(yylsp[-4]), &(yylsp[0]));
@@ -2665,19 +2896,19 @@ yyreduce:
     break;
 
   case 113:
-#line 590 "ael.y"
+#line 614 "ael.y"
     {
                (yyval.pval)= npval2(PV_MACRO_CALL, &(yylsp[-2]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-2].str); ;}
     break;
 
   case 114:
-#line 595 "ael.y"
+#line 619 "ael.y"
     {reset_argcount(parseio->scanner);;}
     break;
 
   case 115:
-#line 595 "ael.y"
+#line 619 "ael.y"
     {
                if (strcasecmp((yyvsp[-2].str),"goto") == 0) {
                        (yyval.pval)= npval(PV_GOTO,(yylsp[-2]).first_line,(yylsp[0]).last_line, (yylsp[-2]).first_column, (yylsp[0]).last_column);
@@ -2689,7 +2920,7 @@ yyreduce:
     break;
 
   case 116:
-#line 605 "ael.y"
+#line 629 "ael.y"
     {(yyval.pval) = (yyvsp[-2].pval);
                if( (yyval.pval)->type == PV_GOTO )
                        (yyval.pval)->u1.list = (yyvsp[-1].pval);
@@ -2699,26 +2930,26 @@ yyreduce:
     break;
 
   case 117:
-#line 611 "ael.y"
+#line 635 "ael.y"
     {(yyval.pval)=(yyvsp[-1].pval);(yyval.pval)->endline = (yylsp[0]).last_line; (yyval.pval)->endcol = (yylsp[0]).last_column;;}
     break;
 
   case 118:
-#line 614 "ael.y"
+#line 638 "ael.y"
     { 
                (yyval.pval)= npval(PV_WORD,(yylsp[0]).first_line,(yylsp[0]).last_line, (yylsp[0]).first_column, (yylsp[0]).last_column);
                (yyval.pval)->u1.str = (yyvsp[0].str);;}
     break;
 
   case 119:
-#line 617 "ael.y"
+#line 641 "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 120:
-#line 620 "ael.y"
+#line 644 "ael.y"
     {
                pval *z = npval(PV_WORD,(yylsp[0]).first_line,(yylsp[0]).last_line, (yylsp[0]).first_column, (yylsp[0]).last_column);
                (yyval.pval) = (yyvsp[-2].pval);
@@ -2727,7 +2958,7 @@ yyreduce:
     break;
 
   case 121:
-#line 625 "ael.y"
+#line 649 "ael.y"
     {
                pval *z = npval(PV_WORD,(yylsp[0]).first_line,(yylsp[0]).last_line, (yylsp[0]).first_column, (yylsp[0]).last_column);
                (yyval.pval) = (yyvsp[-1].pval);
@@ -2736,19 +2967,19 @@ yyreduce:
     break;
 
   case 122:
-#line 632 "ael.y"
+#line 656 "ael.y"
     {(yyval.pval)=(yyvsp[0].pval);;}
     break;
 
   case 123:
-#line 633 "ael.y"
+#line 657 "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 124:
-#line 638 "ael.y"
+#line 662 "ael.y"
     {
                (yyval.pval) = npval2(PV_CASE, &(yylsp[-3]), &(yylsp[-1])); /* XXX 3 or 4 ? */
                (yyval.pval)->u1.str = (yyvsp[-2].str);
@@ -2756,7 +2987,7 @@ yyreduce:
     break;
 
   case 125:
-#line 642 "ael.y"
+#line 666 "ael.y"
     {
                (yyval.pval) = npval2(PV_DEFAULT, &(yylsp[-2]), &(yylsp[0]));
                (yyval.pval)->u1.str = NULL;
@@ -2764,7 +2995,7 @@ yyreduce:
     break;
 
   case 126:
-#line 646 "ael.y"
+#line 670 "ael.y"
     {
                (yyval.pval) = npval2(PV_PATTERN, &(yylsp[-3]), &(yylsp[0])); /* XXX@3 or @4 ? */
                (yyval.pval)->u1.str = (yyvsp[-2].str);
@@ -2772,90 +3003,90 @@ yyreduce:
     break;
 
   case 127:
-#line 650 "ael.y"
+#line 674 "ael.y"
     {
                (yyval.pval) = npval2(PV_CASE, &(yylsp[-2]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-1].str);;}
     break;
 
   case 128:
-#line 653 "ael.y"
+#line 677 "ael.y"
     {
                (yyval.pval) = npval2(PV_DEFAULT, &(yylsp[-1]), &(yylsp[0]));
                (yyval.pval)->u1.str = NULL;;}
     break;
 
   case 129:
-#line 656 "ael.y"
+#line 680 "ael.y"
     {
                (yyval.pval) = npval2(PV_PATTERN, &(yylsp[-2]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-1].str);;}
     break;
 
   case 130:
-#line 661 "ael.y"
+#line 685 "ael.y"
     {(yyval.pval) = (yyvsp[0].pval);;}
     break;
 
   case 131:
-#line 662 "ael.y"
+#line 686 "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 132:
-#line 667 "ael.y"
+#line 691 "ael.y"
     {(yyval.pval)=(yyvsp[0].pval);;}
     break;
 
   case 133:
-#line 668 "ael.y"
+#line 692 "ael.y"
     {(yyval.pval)=npval(PV_CATCH,(yylsp[-4]).first_line,(yylsp[0]).last_line, (yylsp[-4]).first_column, (yylsp[0]).last_column); (yyval.pval)->u1.str = (yyvsp[-3].str); (yyval.pval)->u2.statements = (yyvsp[-1].pval);;}
     break;
 
   case 134:
-#line 671 "ael.y"
+#line 695 "ael.y"
     {(yyval.pval)= npval(PV_SWITCHES,(yylsp[-3]).first_line,(yylsp[0]).last_line, (yylsp[-3]).first_column, (yylsp[0]).last_column); (yyval.pval)->u1.list = (yyvsp[-1].pval); ;}
     break;
 
   case 135:
-#line 672 "ael.y"
+#line 696 "ael.y"
     {(yyval.pval)= npval(PV_SWITCHES,(yylsp[-2]).first_line,(yylsp[0]).last_line, (yylsp[-2]).first_column, (yylsp[0]).last_column);;}
     break;
 
   case 136:
-#line 675 "ael.y"
+#line 699 "ael.y"
     {(yyval.pval)= npval(PV_ESWITCHES,(yylsp[-3]).first_line,(yylsp[0]).last_line, (yylsp[-3]).first_column, (yylsp[0]).last_column); (yyval.pval)->u1.list = (yyvsp[-1].pval); ;}
     break;
 
   case 137:
-#line 676 "ael.y"
+#line 700 "ael.y"
     {(yyval.pval)= npval(PV_ESWITCHES,(yylsp[-2]).first_line,(yylsp[0]).last_line, (yylsp[-2]).first_column, (yylsp[0]).last_column); ;}
     break;
 
   case 138:
-#line 679 "ael.y"
+#line 703 "ael.y"
     {(yyval.pval)=npval(PV_WORD,(yylsp[-1]).first_line,(yylsp[0]).last_line, (yylsp[-1]).first_column, (yylsp[0]).last_column); (yyval.pval)->u1.str = (yyvsp[-1].str);;}
     break;
 
   case 139:
-#line 680 "ael.y"
+#line 704 "ael.y"
     {pval *z = npval(PV_WORD,(yylsp[-1]).first_line,(yylsp[0]).last_line, (yylsp[-1]).first_column, (yylsp[0]).last_column); (yyval.pval)=(yyvsp[-2].pval); z->u1.str = (yyvsp[-1].str); linku1((yyval.pval),z); ;}
     break;
 
   case 140:
-#line 681 "ael.y"
+#line 705 "ael.y"
     {(yyval.pval)=(yyvsp[-1].pval);;}
     break;
 
   case 141:
-#line 684 "ael.y"
+#line 708 "ael.y"
     {(yyval.pval)=npval(PV_WORD,(yylsp[-1]).first_line,(yylsp[0]).last_line, (yylsp[-1]).first_column, (yylsp[0]).last_column); (yyval.pval)->u1.str = (yyvsp[-1].str);;}
     break;
 
   case 142:
-#line 685 "ael.y"
+#line 709 "ael.y"
     {
                (yyval.pval)=npval(PV_WORD,(yylsp[-13]).first_line,(yylsp[-12]).last_line, (yylsp[-13]).first_column, (yylsp[-12]).last_column);
                (yyval.pval)->u1.str = (yyvsp[-13].str);
@@ -2875,7 +3106,7 @@ yyreduce:
     break;
 
   case 143:
-#line 701 "ael.y"
+#line 725 "ael.y"
     {
                (yyval.pval)=npval(PV_WORD,(yylsp[-9]).first_line,(yylsp[-8]).last_line, (yylsp[-9]).first_column, (yylsp[-8]).last_column);
                (yyval.pval)->u1.str = (yyvsp[-9].str);
@@ -2892,12 +3123,12 @@ yyreduce:
     break;
 
   case 144:
-#line 714 "ael.y"
+#line 738 "ael.y"
     {pval *z = npval(PV_WORD,(yylsp[-1]).first_line,(yylsp[0]).last_line, (yylsp[-1]).first_column, (yylsp[0]).last_column); (yyval.pval)=(yyvsp[-2].pval); z->u1.str = (yyvsp[-1].str); linku1((yyval.pval),z); ;}
     break;
 
   case 145:
-#line 715 "ael.y"
+#line 739 "ael.y"
     {pval *z = npval(PV_WORD,(yylsp[-13]).first_line,(yylsp[-12]).last_line, (yylsp[-13]).first_column, (yylsp[-12]).last_column);
                (yyval.pval)=(yyvsp[-14].pval); z->u1.str = (yyvsp[-13].str); linku1((yyval.pval),z);
                z->u2.arglist = npval(PV_WORD,(yylsp[-11]).first_line,(yylsp[-11]).last_line, (yylsp[-11]).first_column, (yylsp[-11]).last_column);
@@ -2916,7 +3147,7 @@ yyreduce:
     break;
 
   case 146:
-#line 731 "ael.y"
+#line 755 "ael.y"
     {pval *z = npval(PV_WORD,(yylsp[-9]).first_line,(yylsp[-9]).last_line, (yylsp[-9]).first_column, (yylsp[-8]).last_column);
                (yyval.pval)=(yyvsp[-10].pval); z->u1.str = (yyvsp[-9].str); linku1((yyval.pval),z);
                z->u2.arglist = npval(PV_WORD,(yylsp[-7]).first_line,(yylsp[-7]).last_line, (yylsp[-7]).first_column, (yylsp[-7]).last_column);
@@ -2932,29 +3163,29 @@ yyreduce:
     break;
 
   case 147:
-#line 743 "ael.y"
+#line 767 "ael.y"
     {(yyval.pval)=(yyvsp[-1].pval);;}
     break;
 
   case 148:
-#line 746 "ael.y"
+#line 770 "ael.y"
     { (yyval.str) = (yyvsp[0].str);;}
     break;
 
   case 149:
-#line 747 "ael.y"
+#line 771 "ael.y"
     {(yyval.str)=strdup("default");;}
     break;
 
   case 150:
-#line 750 "ael.y"
+#line 774 "ael.y"
     {
                (yyval.pval) = npval2(PV_INCLUDES, &(yylsp[-3]), &(yylsp[0]));
                (yyval.pval)->u1.list = (yyvsp[-1].pval);;}
     break;
 
   case 151:
-#line 753 "ael.y"
+#line 777 "ael.y"
     {
                (yyval.pval) = npval2(PV_INCLUDES, &(yylsp[-2]), &(yylsp[0]));;}
     break;
@@ -2964,7 +3195,7 @@ yyreduce:
     }
 
 /* Line 1126 of yacc.c.  */
-#line 2968 "ael.tab.c"
+#line 3199 "ael.tab.c"
 \f
   yyvsp -= yylen;
   yyssp -= yylen;
@@ -3239,7 +3470,7 @@ yyreturn:
 }
 
 
-#line 758 "ael.y"
+#line 782 "ael.y"
 
 
 static char *token_equivs1[] =
index f09e291..48fac1c 100644 (file)
@@ -91,9 +91,7 @@ static pval *npval2(pvaltype type, YYLTYPE *first, YYLTYPE *last);
 %type <pval>target jumptarget
 %type <pval>statement
 %type <pval>switch_head
-%type <str>word_list goto_word
-%type <str>word3_list
-%type <str>includedname
+
 %type <pval>if_head
 %type <pval>random_head
 %type <pval>iftime_head
@@ -112,22 +110,48 @@ static pval *npval2(pvaltype type, YYLTYPE *first, YYLTYPE *last);
 %type <pval>objects
 %type <pval>file
 
-/* OPTIONS */
-%locations
-%pure-parser
+%type <str>goto_word
+%type <str>word_list
+%type <str>word3_list
+%type <str>includedname
+
+/*
+ * OPTIONS
+ */
+
+%locations     /* track source location using @n variables (yylloc in flex) */
+%pure-parser   /* pass yylval and yylloc as arguments to yylex(). */
 %name-prefix="ael_yy"
-/* the following option does two things:
-    it adds the locp arg to the yyerror
-    and it adds the NULL to the yyerrr arg list, and calls yyerror with NULL for that arg.
-    You can't get the locp arg without the NULL arg, don't ask me why. */
+/*
+ * add an additional argument, parseio, to yyparse(),
+ * which is then accessible in the grammar actions
+ */
 %parse-param {struct parse_io *parseio}
+
 /* there will be two shift/reduce conflicts, they involve the if statement, where a single statement occurs not wrapped in curlies in the "true" section
    the default action to shift will attach the else to the preceeding if. */
 %expect 5
 %error-verbose
-%destructor { if (yymsg[0] != 'C') {destroy_pval($$); prev_word=0;} else {printf("Cleanup destructor called for pvals\n");} } includes includeslist switchlist eswitches switches macro_statement macro_statements case_statement case_statements eval_arglist application_call
-                                application_call_head macro_call target jumptarget statement switch_head if_head random_head iftime_head statements extension ignorepat element
-                                elements arglist global_statement global_statements globals macro context object objects
+
+/*
+ * declare destructors for objects.
+ * The former is for pval, the latter for strings.
+ */
+%destructor {
+               if (yymsg[0] != 'C') {
+                       destroy_pval($$);
+                       prev_word=0;
+               } else {
+                       printf("Cleanup destructor called for pvals\n");
+               }
+       }       includes includeslist switchlist eswitches switches
+               macro_statement macro_statements case_statement case_statements
+               eval_arglist application_call application_call_head
+               macro_call target jumptarget statement switch_head
+               if_head random_head iftime_head statements extension
+               ignorepat element elements arglist global_statement
+               global_statements globals macro context object objects
+
 %destructor { free($$);}  word word_list goto_word word3_list includedname