[asterisk-commits] trunk r23011 - in /trunk/pbx/ael: ael.flex ael.tab.c ael.y ael_lex.c

asterisk-commits at lists.digium.com asterisk-commits at lists.digium.com
Thu Apr 27 14:09:52 MST 2006


Author: rizzo
Date: Thu Apr 27 16:09:52 2006
New Revision: 23011

URL: http://svn.digium.com/view/asterisk?rev=23011&view=rev
Log:
fix destructor for pval objects (thanks to Steve Murphy);
rearrange initial part of ael.flex for flexibility.

Modified:
    trunk/pbx/ael/ael.flex
    trunk/pbx/ael/ael.tab.c
    trunk/pbx/ael/ael.y
    trunk/pbx/ael/ael_lex.c

Modified: trunk/pbx/ael/ael.flex
URL: http://svn.digium.com/view/asterisk/trunk/pbx/ael/ael.flex?rev=23011&r1=23010&r2=23011&view=diff
==============================================================================
--- trunk/pbx/ael/ael.flex (original)
+++ trunk/pbx/ael/ael.flex Thu Apr 27 16:09:52 2006
@@ -1,4 +1,3 @@
-%{
 /*
  * Asterisk -- An open source telephony toolkit.
  *
@@ -20,7 +19,44 @@
  *
  * \brief Flex scanner description of tokens used in AEL2 .
  *
- */#include <sys/types.h>
+ */
+
+/*
+ * Start with flex options:
+ *
+ * %x describes the contexts we have: paren, semic and argg, plus INITIAL
+ */
+%x paren semic argg
+
+/* prefix used for various globally-visible functions and variables.
+ * This renames also yywrap, but since we do not use it, we just
+ * add option noyywrap to remove it.
+ */
+%option prefix="ael_yy"
+%option noyywrap
+
+/* batch gives a bit more performance if we are using it in
+ * a non-interactive mode. We probably don't care much.
+ */
+%option batch
+
+/* outfile is the filename to be used instead of lex.yy.c */
+%option outfile="ael_lex.c"
+
+/*
+ * These are not supported in flex 2.5.4, but we need them
+ * at the moment:
+ * reentrant produces a thread-safe parser. Not 100% sure that
+ * we require it, though.
+ * bison-bridge passes an additional yylval argument to yylex().
+ * bison-locations is probably not needed.
+ */
+%option reentrant
+%option bison-bridge
+%option bison-locations
+
+%{
+#include <sys/types.h>
 #include <sys/stat.h>
 #include <unistd.h>
 
@@ -60,7 +96,6 @@
 int ael_yyparse (struct parse_io *);
 static void pbcpush(char x);
 static int pbcpop(char x);
-static void pbcwhere(const char *text, int *line, int *col );
 
 /*
  * A stack to process include files.
@@ -84,6 +119,27 @@
  * the line number is constant, and the column is incremented
  * by the length of the token.
  */
+#ifdef FLEX_BETA	/* set for 2.5.33 */
+
+/* compute the total number of lines and columns in the text
+ * passed as argument.
+ */
+static void pbcwhere(const char *text, int *line, int *col )
+{
+	int loc_line = *line;
+	int loc_col = *col;
+	char c;
+	while ( (c = *text++) ) {
+		if ( c == '\n' ) {
+			loc_line++;
+			loc_col = 0;
+		}
+		loc_col++;
+	}
+	*line = loc_line;
+	*col = loc_col;
+}
+
 #define	STORE_POS do {							\
 		yylloc->first_line = yylloc->last_line = my_lineno;	\
 		yylloc->first_column=my_col;				\
@@ -101,30 +157,13 @@
 		yylloc->last_line = my_lineno;		\
 		yylloc->last_column = my_col;		\
 	} while (0)
+#else
+#define	STORE_POS
+#define	STORE_START
+#define	STORE_END
+#endif
 %}
 
-/* %x describes the contexts we have: paren, semic and argg, plus INITIAL */
-%x paren semic argg
-
-/* prefix used for various globally-visible functions and variables.
- * This renames also yywrap, but since we do not use it, we just
- * add option noyywrap to remove it.
- */
-%option prefix="ael_yy"
-%option noyywrap
-
-/* option batch gives a bit more performance if we are using it in
- * a non-interactive mode. We probably don't care much.
- */
-%option batch
-
-/* filename to be used instead of lex.yy.c */
-%option outfile="ael_lex.c"
-
-%option reentrant
-%option bison-bridge
-%option bison-locations
-/* %option yylineno I've tried hard, but haven't been able to use this */
 
 NOPARENS	[^()\[\]\{\}]*
 
@@ -466,24 +505,6 @@
 	return 0;
 }
 
-/* compute the total number of lines and columns in the text
- * passed as argument.
- */
-static void pbcwhere(const char *text, int *line, int *col )
-{
-	int loc_line = *line;
-	int loc_col = *col;
-	char c;
-	while ( (c = *text++) ) {
-		if ( c == '\n' ) {
-			loc_line++;
-			loc_col = 0;
-		}
-		loc_col++;
-	}
-	*line = loc_line;
-	*col = loc_col;
-}
 
 /* used by the bison code */
 void reset_parencount(yyscan_t yyscanner );

Modified: trunk/pbx/ael/ael.tab.c
URL: http://svn.digium.com/view/asterisk/trunk/pbx/ael/ael.tab.c?rev=23011&r1=23010&r2=23011&view=diff
==============================================================================
--- trunk/pbx/ael/ael.tab.c (original)
+++ trunk/pbx/ael/ael.tab.c Thu Apr 27 16:09:52 2006
@@ -561,22 +561,22 @@
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const unsigned short int yyrline[] =
 {
-       0,   161,   161,   164,   165,   176,   179,   180,   181,   182,
-     185,   189,   192,   196,   199,   204,   208,   213,   219,   222,
-     225,   228,   233,   236,   241,   242,   243,   246,   246,   252,
-     255,   260,   263,   264,   265,   268,   271,   272,   273,   274,
-     275,   276,   276,   280,   281,   284,   289,   293,   298,   303,
-     312,   313,   316,   319,   319,   324,   324,   329,   345,   365,
-     366,   373,   374,   379,   387,   388,   392,   398,   398,   406,
-     409,   409,   413,   416,   419,   422,   423,   424,   422,   430,
-     430,   434,   438,   443,   447,   451,   454,   454,   487,   489,
-     491,   493,   498,   504,   509,   515,   520,   526,   529,   530,
-     535,   540,   547,   554,   561,   570,   575,   580,   587,   594,
-     601,   610,   610,   615,   620,   620,   630,   636,   639,   642,
-     645,   650,   657,   658,   663,   667,   671,   675,   678,   681,
-     686,   687,   692,   693,   696,   697,   700,   701,   704,   705,
-     706,   709,   710,   726,   739,   740,   755,   768,   771,   772,
-     775,   778
+       0,   157,   157,   160,   161,   172,   175,   176,   177,   178,
+     181,   185,   188,   192,   195,   200,   204,   209,   215,   218,
+     221,   224,   229,   232,   237,   238,   239,   242,   242,   248,
+     251,   256,   259,   260,   261,   264,   267,   268,   269,   270,
+     271,   272,   272,   276,   277,   280,   285,   289,   294,   299,
+     308,   309,   312,   315,   315,   320,   320,   325,   341,   361,
+     362,   369,   370,   375,   383,   384,   388,   394,   394,   402,
+     405,   405,   409,   412,   415,   418,   419,   420,   418,   426,
+     426,   430,   434,   439,   443,   447,   450,   450,   483,   485,
+     487,   489,   494,   500,   505,   511,   516,   522,   525,   526,
+     531,   536,   543,   550,   557,   566,   571,   576,   583,   590,
+     597,   606,   606,   611,   616,   616,   626,   632,   635,   638,
+     641,   646,   653,   654,   659,   663,   667,   671,   674,   677,
+     682,   683,   688,   689,   692,   693,   696,   697,   700,   701,
+     702,   705,   706,   722,   735,   736,   751,   764,   767,   768,
+     771,   774
 };
 #endif
 
@@ -1313,458 +1313,293 @@
   switch (yytype)
     {
       case 41: /* "word" */
-#line 156 "ael.y"
+#line 152 "ael.y"
         { free((yyvaluep->str));};
 #line 1319 "ael.tab.c"
         break;
       case 44: /* "objects" */
-#line 140 "ael.y"
+#line 141 "ael.y"
         {
-		/* XXX i think the destructor must be called always */
-		if (1 /* yymsg[0] != 'C' */) {
-			destroy_pval((yyvaluep->pval));
-			prev_word=0;
-		} else {
-			printf("Cleanup destructor called for pvals\n");
-		}
+		destroy_pval((yyvaluep->pval));
+		prev_word=0;
 	};
-#line 1332 "ael.tab.c"
+#line 1327 "ael.tab.c"
         break;
       case 45: /* "object" */
-#line 140 "ael.y"
+#line 141 "ael.y"
         {
-		/* XXX i think the destructor must be called always */
-		if (1 /* yymsg[0] != 'C' */) {
-			destroy_pval((yyvaluep->pval));
-			prev_word=0;
-		} else {
-			printf("Cleanup destructor called for pvals\n");
-		}
+		destroy_pval((yyvaluep->pval));
+		prev_word=0;
 	};
-#line 1345 "ael.tab.c"
+#line 1335 "ael.tab.c"
         break;
       case 46: /* "context" */
-#line 140 "ael.y"
+#line 141 "ael.y"
         {
-		/* XXX i think the destructor must be called always */
-		if (1 /* yymsg[0] != 'C' */) {
-			destroy_pval((yyvaluep->pval));
-			prev_word=0;
-		} else {
-			printf("Cleanup destructor called for pvals\n");
-		}
+		destroy_pval((yyvaluep->pval));
+		prev_word=0;
 	};
-#line 1358 "ael.tab.c"
+#line 1343 "ael.tab.c"
         break;
       case 47: /* "macro" */
-#line 140 "ael.y"
+#line 141 "ael.y"
         {
-		/* XXX i think the destructor must be called always */
-		if (1 /* yymsg[0] != 'C' */) {
-			destroy_pval((yyvaluep->pval));
-			prev_word=0;
-		} else {
-			printf("Cleanup destructor called for pvals\n");
-		}
+		destroy_pval((yyvaluep->pval));
+		prev_word=0;
 	};
-#line 1371 "ael.tab.c"
+#line 1351 "ael.tab.c"
         break;
       case 48: /* "globals" */
-#line 140 "ael.y"
+#line 141 "ael.y"
         {
-		/* XXX i think the destructor must be called always */
-		if (1 /* yymsg[0] != 'C' */) {
-			destroy_pval((yyvaluep->pval));
-			prev_word=0;
-		} else {
-			printf("Cleanup destructor called for pvals\n");
-		}
+		destroy_pval((yyvaluep->pval));
+		prev_word=0;
 	};
-#line 1384 "ael.tab.c"
+#line 1359 "ael.tab.c"
         break;
       case 49: /* "global_statements" */
-#line 140 "ael.y"
+#line 141 "ael.y"
         {
-		/* XXX i think the destructor must be called always */
-		if (1 /* yymsg[0] != 'C' */) {
-			destroy_pval((yyvaluep->pval));
-			prev_word=0;
-		} else {
-			printf("Cleanup destructor called for pvals\n");
-		}
+		destroy_pval((yyvaluep->pval));
+		prev_word=0;
 	};
-#line 1397 "ael.tab.c"
+#line 1367 "ael.tab.c"
         break;
       case 50: /* "global_statement" */
-#line 140 "ael.y"
+#line 141 "ael.y"
         {
-		/* XXX i think the destructor must be called always */
-		if (1 /* yymsg[0] != 'C' */) {
-			destroy_pval((yyvaluep->pval));
-			prev_word=0;
-		} else {
-			printf("Cleanup destructor called for pvals\n");
-		}
+		destroy_pval((yyvaluep->pval));
+		prev_word=0;
 	};
-#line 1410 "ael.tab.c"
+#line 1375 "ael.tab.c"
         break;
       case 52: /* "arglist" */
-#line 140 "ael.y"
+#line 141 "ael.y"
         {
-		/* XXX i think the destructor must be called always */
-		if (1 /* yymsg[0] != 'C' */) {
-			destroy_pval((yyvaluep->pval));
-			prev_word=0;
-		} else {
-			printf("Cleanup destructor called for pvals\n");
-		}
+		destroy_pval((yyvaluep->pval));
+		prev_word=0;
+	};
+#line 1383 "ael.tab.c"
+        break;
+      case 53: /* "elements" */
+#line 141 "ael.y"
+        {
+		destroy_pval((yyvaluep->pval));
+		prev_word=0;
+	};
+#line 1391 "ael.tab.c"
+        break;
+      case 54: /* "element" */
+#line 141 "ael.y"
+        {
+		destroy_pval((yyvaluep->pval));
+		prev_word=0;
+	};
+#line 1399 "ael.tab.c"
+        break;
+      case 56: /* "ignorepat" */
+#line 141 "ael.y"
+        {
+		destroy_pval((yyvaluep->pval));
+		prev_word=0;
+	};
+#line 1407 "ael.tab.c"
+        break;
+      case 57: /* "extension" */
+#line 141 "ael.y"
+        {
+		destroy_pval((yyvaluep->pval));
+		prev_word=0;
+	};
+#line 1415 "ael.tab.c"
+        break;
+      case 58: /* "statements" */
+#line 141 "ael.y"
+        {
+		destroy_pval((yyvaluep->pval));
+		prev_word=0;
 	};
 #line 1423 "ael.tab.c"
         break;
-      case 53: /* "elements" */
-#line 140 "ael.y"
+      case 59: /* "if_head" */
+#line 141 "ael.y"
         {
-		/* XXX i think the destructor must be called always */
-		if (1 /* yymsg[0] != 'C' */) {
-			destroy_pval((yyvaluep->pval));
-			prev_word=0;
-		} else {
-			printf("Cleanup destructor called for pvals\n");
-		}
+		destroy_pval((yyvaluep->pval));
+		prev_word=0;
 	};
-#line 1436 "ael.tab.c"
-        break;
-      case 54: /* "element" */
-#line 140 "ael.y"
+#line 1431 "ael.tab.c"
+        break;
+      case 61: /* "random_head" */
+#line 141 "ael.y"
         {
-		/* XXX i think the destructor must be called always */
-		if (1 /* yymsg[0] != 'C' */) {
-			destroy_pval((yyvaluep->pval));
-			prev_word=0;
-		} else {
-			printf("Cleanup destructor called for pvals\n");
-		}
+		destroy_pval((yyvaluep->pval));
+		prev_word=0;
 	};
-#line 1449 "ael.tab.c"
-        break;
-      case 56: /* "ignorepat" */
-#line 140 "ael.y"
+#line 1439 "ael.tab.c"
+        break;
+      case 63: /* "iftime_head" */
+#line 141 "ael.y"
         {
-		/* XXX i think the destructor must be called always */
-		if (1 /* yymsg[0] != 'C' */) {
-			destroy_pval((yyvaluep->pval));
-			prev_word=0;
-		} else {
-			printf("Cleanup destructor called for pvals\n");
-		}
+		destroy_pval((yyvaluep->pval));
+		prev_word=0;
 	};
+#line 1447 "ael.tab.c"
+        break;
+      case 64: /* "word_list" */
+#line 152 "ael.y"
+        { free((yyvaluep->str));};
+#line 1452 "ael.tab.c"
+        break;
+      case 65: /* "word3_list" */
+#line 152 "ael.y"
+        { free((yyvaluep->str));};
+#line 1457 "ael.tab.c"
+        break;
+      case 66: /* "goto_word" */
+#line 152 "ael.y"
+        { free((yyvaluep->str));};
 #line 1462 "ael.tab.c"
         break;
-      case 57: /* "extension" */
-#line 140 "ael.y"
+      case 67: /* "switch_head" */
+#line 141 "ael.y"
         {
-		/* XXX i think the destructor must be called always */
-		if (1 /* yymsg[0] != 'C' */) {
-			destroy_pval((yyvaluep->pval));
-			prev_word=0;
-		} else {
-			printf("Cleanup destructor called for pvals\n");
-		}
+		destroy_pval((yyvaluep->pval));
+		prev_word=0;
 	};
-#line 1475 "ael.tab.c"
-        break;
-      case 58: /* "statements" */
-#line 140 "ael.y"
+#line 1470 "ael.tab.c"
+        break;
+      case 69: /* "statement" */
+#line 141 "ael.y"
         {
-		/* XXX i think the destructor must be called always */
-		if (1 /* yymsg[0] != 'C' */) {
-			destroy_pval((yyvaluep->pval));
-			prev_word=0;
-		} else {
-			printf("Cleanup destructor called for pvals\n");
-		}
+		destroy_pval((yyvaluep->pval));
+		prev_word=0;
 	};
-#line 1488 "ael.tab.c"
-        break;
-      case 59: /* "if_head" */
-#line 140 "ael.y"
+#line 1478 "ael.tab.c"
+        break;
+      case 76: /* "target" */
+#line 141 "ael.y"
         {
-		/* XXX i think the destructor must be called always */
-		if (1 /* yymsg[0] != 'C' */) {
-			destroy_pval((yyvaluep->pval));
-			prev_word=0;
-		} else {
-			printf("Cleanup destructor called for pvals\n");
-		}
+		destroy_pval((yyvaluep->pval));
+		prev_word=0;
 	};
-#line 1501 "ael.tab.c"
-        break;
-      case 61: /* "random_head" */
-#line 140 "ael.y"
+#line 1486 "ael.tab.c"
+        break;
+      case 77: /* "jumptarget" */
+#line 141 "ael.y"
         {
-		/* XXX i think the destructor must be called always */
-		if (1 /* yymsg[0] != 'C' */) {
-			destroy_pval((yyvaluep->pval));
-			prev_word=0;
-		} else {
-			printf("Cleanup destructor called for pvals\n");
-		}
+		destroy_pval((yyvaluep->pval));
+		prev_word=0;
 	};
-#line 1514 "ael.tab.c"
-        break;
-      case 63: /* "iftime_head" */
-#line 140 "ael.y"
+#line 1494 "ael.tab.c"
+        break;
+      case 78: /* "macro_call" */
+#line 141 "ael.y"
         {
-		/* XXX i think the destructor must be called always */
-		if (1 /* yymsg[0] != 'C' */) {
-			destroy_pval((yyvaluep->pval));
-			prev_word=0;
-		} else {
-			printf("Cleanup destructor called for pvals\n");
-		}
+		destroy_pval((yyvaluep->pval));
+		prev_word=0;
 	};
-#line 1527 "ael.tab.c"
-        break;
-      case 64: /* "word_list" */
-#line 156 "ael.y"
+#line 1502 "ael.tab.c"
+        break;
+      case 80: /* "application_call_head" */
+#line 141 "ael.y"
+        {
+		destroy_pval((yyvaluep->pval));
+		prev_word=0;
+	};
+#line 1510 "ael.tab.c"
+        break;
+      case 82: /* "application_call" */
+#line 141 "ael.y"
+        {
+		destroy_pval((yyvaluep->pval));
+		prev_word=0;
+	};
+#line 1518 "ael.tab.c"
+        break;
+      case 83: /* "eval_arglist" */
+#line 141 "ael.y"
+        {
+		destroy_pval((yyvaluep->pval));
+		prev_word=0;
+	};
+#line 1526 "ael.tab.c"
+        break;
+      case 84: /* "case_statements" */
+#line 141 "ael.y"
+        {
+		destroy_pval((yyvaluep->pval));
+		prev_word=0;
+	};
+#line 1534 "ael.tab.c"
+        break;
+      case 85: /* "case_statement" */
+#line 141 "ael.y"
+        {
+		destroy_pval((yyvaluep->pval));
+		prev_word=0;
+	};
+#line 1542 "ael.tab.c"
+        break;
+      case 86: /* "macro_statements" */
+#line 141 "ael.y"
+        {
+		destroy_pval((yyvaluep->pval));
+		prev_word=0;
+	};
+#line 1550 "ael.tab.c"
+        break;
+      case 87: /* "macro_statement" */
+#line 141 "ael.y"
+        {
+		destroy_pval((yyvaluep->pval));
+		prev_word=0;
+	};
+#line 1558 "ael.tab.c"
+        break;
+      case 88: /* "switches" */
+#line 141 "ael.y"
+        {
+		destroy_pval((yyvaluep->pval));
+		prev_word=0;
+	};
+#line 1566 "ael.tab.c"
+        break;
+      case 89: /* "eswitches" */
+#line 141 "ael.y"
+        {
+		destroy_pval((yyvaluep->pval));
+		prev_word=0;
+	};
+#line 1574 "ael.tab.c"
+        break;
+      case 90: /* "switchlist" */
+#line 141 "ael.y"
+        {
+		destroy_pval((yyvaluep->pval));
+		prev_word=0;
+	};
+#line 1582 "ael.tab.c"
+        break;
+      case 91: /* "includeslist" */
+#line 141 "ael.y"
+        {
+		destroy_pval((yyvaluep->pval));
+		prev_word=0;
+	};
+#line 1590 "ael.tab.c"
+        break;
+      case 92: /* "includedname" */
+#line 152 "ael.y"
         { free((yyvaluep->str));};
-#line 1532 "ael.tab.c"
-        break;
-      case 65: /* "word3_list" */
-#line 156 "ael.y"
-        { free((yyvaluep->str));};
-#line 1537 "ael.tab.c"
-        break;
-      case 66: /* "goto_word" */
-#line 156 "ael.y"
-        { free((yyvaluep->str));};
-#line 1542 "ael.tab.c"
-        break;
-      case 67: /* "switch_head" */
-#line 140 "ael.y"
+#line 1595 "ael.tab.c"
+        break;
+      case 93: /* "includes" */
+#line 141 "ael.y"
         {
-		/* XXX i think the destructor must be called always */
-		if (1 /* yymsg[0] != 'C' */) {
-			destroy_pval((yyvaluep->pval));
-			prev_word=0;
-		} else {
-			printf("Cleanup destructor called for pvals\n");
-		}
+		destroy_pval((yyvaluep->pval));
+		prev_word=0;
 	};
-#line 1555 "ael.tab.c"
-        break;
-      case 69: /* "statement" */
-#line 140 "ael.y"
-        {
-		/* XXX i think the destructor must be called always */
-		if (1 /* yymsg[0] != 'C' */) {
-			destroy_pval((yyvaluep->pval));
-			prev_word=0;
-		} else {
-			printf("Cleanup destructor called for pvals\n");
-		}
-	};
-#line 1568 "ael.tab.c"
-        break;
-      case 76: /* "target" */
-#line 140 "ael.y"
-        {
-		/* XXX i think the destructor must be called always */
-		if (1 /* yymsg[0] != 'C' */) {
-			destroy_pval((yyvaluep->pval));
-			prev_word=0;
-		} else {
-			printf("Cleanup destructor called for pvals\n");
-		}
-	};
-#line 1581 "ael.tab.c"
-        break;
-      case 77: /* "jumptarget" */
-#line 140 "ael.y"
-        {
-		/* XXX i think the destructor must be called always */
-		if (1 /* yymsg[0] != 'C' */) {
-			destroy_pval((yyvaluep->pval));
-			prev_word=0;
-		} else {
-			printf("Cleanup destructor called for pvals\n");
-		}
-	};
-#line 1594 "ael.tab.c"
-        break;
-      case 78: /* "macro_call" */
-#line 140 "ael.y"
-        {
-		/* XXX i think the destructor must be called always */
-		if (1 /* yymsg[0] != 'C' */) {
-			destroy_pval((yyvaluep->pval));
-			prev_word=0;
-		} else {
-			printf("Cleanup destructor called for pvals\n");
-		}
-	};
-#line 1607 "ael.tab.c"
-        break;
-      case 80: /* "application_call_head" */
-#line 140 "ael.y"
-        {
-		/* XXX i think the destructor must be called always */
-		if (1 /* yymsg[0] != 'C' */) {
-			destroy_pval((yyvaluep->pval));
-			prev_word=0;
-		} else {
-			printf("Cleanup destructor called for pvals\n");
-		}
-	};
-#line 1620 "ael.tab.c"
-        break;
-      case 82: /* "application_call" */
-#line 140 "ael.y"
-        {
-		/* XXX i think the destructor must be called always */
-		if (1 /* yymsg[0] != 'C' */) {
-			destroy_pval((yyvaluep->pval));
-			prev_word=0;
-		} else {
-			printf("Cleanup destructor called for pvals\n");
-		}
-	};
-#line 1633 "ael.tab.c"
-        break;
-      case 83: /* "eval_arglist" */
-#line 140 "ael.y"
-        {
-		/* XXX i think the destructor must be called always */
-		if (1 /* 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 84: /* "case_statements" */
-#line 140 "ael.y"
-        {
-		/* XXX i think the destructor must be called always */
-		if (1 /* yymsg[0] != 'C' */) {
-			destroy_pval((yyvaluep->pval));
-			prev_word=0;
-		} else {
-			printf("Cleanup destructor called for pvals\n");
-		}
-	};
-#line 1659 "ael.tab.c"
-        break;
-      case 85: /* "case_statement" */
-#line 140 "ael.y"
-        {
-		/* XXX i think the destructor must be called always */
-		if (1 /* yymsg[0] != 'C' */) {
-			destroy_pval((yyvaluep->pval));
-			prev_word=0;
-		} else {
-			printf("Cleanup destructor called for pvals\n");
-		}
-	};
-#line 1672 "ael.tab.c"
-        break;
-      case 86: /* "macro_statements" */
-#line 140 "ael.y"
-        {
-		/* XXX i think the destructor must be called always */
-		if (1 /* yymsg[0] != 'C' */) {
-			destroy_pval((yyvaluep->pval));
-			prev_word=0;
-		} else {
-			printf("Cleanup destructor called for pvals\n");
-		}
-	};
-#line 1685 "ael.tab.c"
-        break;
-      case 87: /* "macro_statement" */
-#line 140 "ael.y"
-        {
-		/* XXX i think the destructor must be called always */
-		if (1 /* yymsg[0] != 'C' */) {
-			destroy_pval((yyvaluep->pval));
-			prev_word=0;
-		} else {
-			printf("Cleanup destructor called for pvals\n");
-		}
-	};
-#line 1698 "ael.tab.c"
-        break;
-      case 88: /* "switches" */
-#line 140 "ael.y"
-        {
-		/* XXX i think the destructor must be called always */
-		if (1 /* yymsg[0] != 'C' */) {
-			destroy_pval((yyvaluep->pval));
-			prev_word=0;
-		} else {
-			printf("Cleanup destructor called for pvals\n");
-		}
-	};
-#line 1711 "ael.tab.c"
-        break;
-      case 89: /* "eswitches" */
-#line 140 "ael.y"
-        {
-		/* XXX i think the destructor must be called always */
-		if (1 /* yymsg[0] != 'C' */) {
-			destroy_pval((yyvaluep->pval));
-			prev_word=0;
-		} else {
-			printf("Cleanup destructor called for pvals\n");
-		}
-	};
-#line 1724 "ael.tab.c"
-        break;
-      case 90: /* "switchlist" */
-#line 140 "ael.y"
-        {
-		/* XXX i think the destructor must be called always */
-		if (1 /* yymsg[0] != 'C' */) {
-			destroy_pval((yyvaluep->pval));
-			prev_word=0;
-		} else {
-			printf("Cleanup destructor called for pvals\n");
-		}
-	};
-#line 1737 "ael.tab.c"
-        break;
-      case 91: /* "includeslist" */
-#line 140 "ael.y"
-        {
-		/* XXX i think the destructor must be called always */
-		if (1 /* yymsg[0] != 'C' */) {
-			destroy_pval((yyvaluep->pval));
-			prev_word=0;
-		} else {
-			printf("Cleanup destructor called for pvals\n");
-		}
-	};
-#line 1750 "ael.tab.c"
-        break;
-      case 92: /* "includedname" */
-#line 156 "ael.y"
-        { free((yyvaluep->str));};
-#line 1755 "ael.tab.c"
-        break;
-      case 93: /* "includes" */
-#line 140 "ael.y"
-        {
-		/* XXX i think the destructor must be called always */
-		if (1 /* yymsg[0] != 'C' */) {
-			destroy_pval((yyvaluep->pval));
-			prev_word=0;
-		} else {
-			printf("Cleanup destructor called for pvals\n");
-		}
-	};
-#line 1768 "ael.tab.c"
+#line 1603 "ael.tab.c"
         break;
 
       default:
@@ -2081,17 +1916,17 @@
   switch (yyn)
     {
         case 2:
-#line 161 "ael.y"
+#line 157 "ael.y"
     { (yyval.pval) = parseio->pval = (yyvsp[0].pval); ;}
     break;
 
   case 3:
-#line 164 "ael.y"
+#line 160 "ael.y"
     {(yyval.pval)=(yyvsp[0].pval);;}
     break;
 
   case 4:
-#line 166 "ael.y"
+#line 162 "ael.y"
     {
 			if ( (yyvsp[-1].pval) && (yyvsp[0].pval) ) {
 				(yyval.pval)=(yyvsp[-1].pval);
@@ -2105,32 +1940,32 @@
     break;
 
   case 5:
+#line 172 "ael.y"
+    {(yyval.pval)=(yyvsp[-1].pval);;}
+    break;
+
+  case 6:
+#line 175 "ael.y"
+    {(yyval.pval)=(yyvsp[0].pval);;}
+    break;
+
+  case 7:
 #line 176 "ael.y"
-    {(yyval.pval)=(yyvsp[-1].pval);;}
-    break;
-
-  case 6:
-#line 179 "ael.y"
     {(yyval.pval)=(yyvsp[0].pval);;}
     break;
 
-  case 7:
-#line 180 "ael.y"
+  case 8:
+#line 177 "ael.y"
     {(yyval.pval)=(yyvsp[0].pval);;}
     break;
 
-  case 8:
+  case 9:
+#line 178 "ael.y"
+    {(yyval.pval)=0;/* allow older docs to be read */;}
+    break;
+
+  case 10:
 #line 181 "ael.y"
-    {(yyval.pval)=(yyvsp[0].pval);;}
-    break;
-
-  case 9:
-#line 182 "ael.y"
-    {(yyval.pval)=0;/* allow older docs to be read */;}
-    break;
-
-  case 10:
-#line 185 "ael.y"
     {
 		(yyval.pval) = npval2(PV_CONTEXT, &(yylsp[-4]), &(yylsp[0]));
 		(yyval.pval)->u1.str = (yyvsp[-3].str);
@@ -2138,14 +1973,14 @@
     break;
 
   case 11:
-#line 189 "ael.y"
+#line 185 "ael.y"
     {
 		(yyval.pval) = npval2(PV_CONTEXT, &(yylsp[-3]), &(yylsp[0]));
 		(yyval.pval)->u1.str = (yyvsp[-2].str); ;}
     break;
 
   case 12:
-#line 192 "ael.y"
+#line 188 "ael.y"
     {
 		(yyval.pval) = npval2(PV_CONTEXT, &(yylsp[-4]), &(yylsp[0]));
 		(yyval.pval)->u1.str = strdup("default");
@@ -2153,14 +1988,14 @@
     break;
 
   case 13:
-#line 196 "ael.y"
+#line 192 "ael.y"
     {
 		(yyval.pval) = npval2(PV_CONTEXT, &(yylsp[-3]), &(yylsp[0]));
 		(yyval.pval)->u1.str = strdup("default"); ;}
     break;
 
   case 14:
-#line 199 "ael.y"
+#line 195 "ael.y"
     {
 		(yyval.pval) = npval2(PV_CONTEXT, &(yylsp[-5]), &(yylsp[0]));
 		(yyval.pval)->u1.str = (yyvsp[-3].str);
@@ -2169,7 +2004,7 @@
     break;
 
   case 15:
-#line 204 "ael.y"
+#line 200 "ael.y"
     {
 		(yyval.pval) = npval2(PV_CONTEXT, &(yylsp[-4]), &(yylsp[0]));
 		(yyval.pval)->u1.str = (yyvsp[-2].str);
@@ -2177,7 +2012,7 @@
     break;
 
   case 16:
-#line 208 "ael.y"
+#line 204 "ael.y"
     {
 		(yyval.pval) = npval2(PV_CONTEXT, &(yylsp[-5]), &(yylsp[0]));
 		(yyval.pval)->u1.str = strdup("default");
@@ -2186,7 +2021,7 @@
     break;
 
   case 17:
-#line 213 "ael.y"
+#line 209 "ael.y"
     {
 		(yyval.pval) = npval2(PV_CONTEXT, &(yylsp[-4]), &(yylsp[0]));
 		(yyval.pval)->u1.str = strdup("default");
@@ -2194,69 +2029,69 @@
     break;
 
   case 18:
-#line 219 "ael.y"
+#line 215 "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 222 "ael.y"
+#line 218 "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 225 "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)->u3.macro_statements = (yyvsp[-1].pval); ;}
     break;
 
   case 21:
-#line 228 "ael.y"
+#line 224 "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 233 "ael.y"
+#line 229 "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 236 "ael.y"
+#line 232 "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 241 "ael.y"
+#line 237 "ael.y"
     {(yyval.pval)=(yyvsp[0].pval);;}
     break;
 
   case 25:
+#line 238 "ael.y"
+    {(yyval.pval)=(yyvsp[-1].pval); linku1((yyval.pval),(yyvsp[0].pval));;}
+    break;
+
+  case 26:
+#line 239 "ael.y"
+    {(yyval.pval)=(yyvsp[-1].pval);;}
+    break;
+
+  case 27:
 #line 242 "ael.y"
-    {(yyval.pval)=(yyvsp[-1].pval); linku1((yyval.pval),(yyvsp[0].pval));;}
-    break;
-
-  case 26:
-#line 243 "ael.y"
-    {(yyval.pval)=(yyvsp[-1].pval);;}
-    break;
-
-  case 27:
-#line 246 "ael.y"
     { reset_semicount(parseio->scanner); ;}
     break;
 
   case 28:
-#line 246 "ael.y"
+#line 242 "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);
@@ -2264,14 +2099,14 @@
     break;
 
   case 29:
-#line 252 "ael.y"
+#line 248 "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 255 "ael.y"
+#line 251 "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);
@@ -2280,64 +2115,64 @@
     break;
 
   case 31:
+#line 256 "ael.y"
+    {(yyval.pval)=(yyvsp[-1].pval);;}
+    break;
+
+  case 32:
+#line 259 "ael.y"
+    { (yyval.pval)=(yyvsp[0].pval);;}
+    break;
+
+  case 33:
 #line 260 "ael.y"
-    {(yyval.pval)=(yyvsp[-1].pval);;}
-    break;
-
-  case 32:
-#line 263 "ael.y"
-    { (yyval.pval)=(yyvsp[0].pval);;}
-    break;
-
-  case 33:
-#line 264 "ael.y"
     {(yyval.pval)=0;;}
     break;
 
   case 34:
-#line 265 "ael.y"
+#line 261 "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 264 "ael.y"
+    { (yyval.pval)=(yyvsp[-1].pval);;}
+    break;
+
+  case 36:
+#line 267 "ael.y"
+    {(yyval.pval)=(yyvsp[0].pval);;}
+    break;
+
+  case 37:
 #line 268 "ael.y"
-    { (yyval.pval)=(yyvsp[-1].pval);;}
-    break;
-
-  case 36:
+    {(yyval.pval)=(yyvsp[0].pval);;}
+    break;
+
+  case 38:
+#line 269 "ael.y"
+    {(yyval.pval)=(yyvsp[0].pval);;}
+    break;
+
+  case 39:
+#line 270 "ael.y"
+    {(yyval.pval)=(yyvsp[0].pval);;}
+    break;
+
+  case 40:
 #line 271 "ael.y"
     {(yyval.pval)=(yyvsp[0].pval);;}
     break;
 
-  case 37:
+  case 41:
 #line 272 "ael.y"
-    {(yyval.pval)=(yyvsp[0].pval);;}
-    break;
-
-  case 38:
-#line 273 "ael.y"
-    {(yyval.pval)=(yyvsp[0].pval);;}
-    break;
-
-  case 39:
-#line 274 "ael.y"
-    {(yyval.pval)=(yyvsp[0].pval);;}
-    break;
-
-  case 40:
-#line 275 "ael.y"
-    {(yyval.pval)=(yyvsp[0].pval);;}
-    break;
-
-  case 41:
-#line 276 "ael.y"
     { reset_semicount(parseio->scanner); ;}
     break;
 
   case 42:
-#line 276 "ael.y"
+#line 272 "ael.y"
     {
 		(yyval.pval) = npval2(PV_VARDEC, &(yylsp[-4]), &(yylsp[0]));
 		(yyval.pval)->u1.str = (yyvsp[-4].str);
@@ -2345,24 +2180,24 @@
     break;
 
   case 43:
+#line 276 "ael.y"
+    {free((yyvsp[-1].str)); (yyval.pval)=0;;}
+    break;
+
+  case 44:
+#line 277 "ael.y"
+    {(yyval.pval)=0;/* allow older docs to be read */;}
+    break;
+
+  case 45:
 #line 280 "ael.y"
-    {free((yyvsp[-1].str)); (yyval.pval)=0;;}
-    break;
-
-  case 44:
-#line 281 "ael.y"
-    {(yyval.pval)=0;/* allow older docs to be read */;}
-    break;
-
-  case 45:
-#line 284 "ael.y"
     {
 		(yyval.pval) = npval2(PV_IGNOREPAT, &(yylsp[-3]), &(yylsp[0]));
 		(yyval.pval)->u1.str = (yyvsp[-1].str);;}
     break;
 
   case 46:
-#line 289 "ael.y"
+#line 285 "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);
@@ -2370,7 +2205,7 @@
     break;
 
   case 47:
-#line 293 "ael.y"
+#line 289 "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);
@@ -2379,7 +2214,7 @@
     break;
 
   case 48:
-#line 298 "ael.y"
+#line 294 "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);
@@ -2388,7 +2223,7 @@
     break;
 
   case 49:
-#line 303 "ael.y"
+#line 299 "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);
@@ -2398,48 +2233,48 @@
     break;
 
   case 50:
-#line 312 "ael.y"
+#line 308 "ael.y"
     {(yyval.pval)=(yyvsp[0].pval);;}
     break;
 
   case 51:
-#line 313 "ael.y"
+#line 309 "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 316 "ael.y"
+#line 312 "ael.y"
     {(yyval.pval)=(yyvsp[-1].pval);;}
     break;
 
   case 53:
-#line 319 "ael.y"
+#line 315 "ael.y"
     { reset_parencount(parseio->scanner); ;}
     break;
 
   case 54:
-#line 319 "ael.y"
+#line 315 "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 324 "ael.y"
+#line 320 "ael.y"
     { reset_parencount(parseio->scanner); ;}
     break;
 
   case 56:
-#line 324 "ael.y"
+#line 320 "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 330 "ael.y"
+#line 326 "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]));
@@ -2458,7 +2293,7 @@
     break;
 
   case 58:
-#line 345 "ael.y"
+#line 341 "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]));
@@ -2474,12 +2309,12 @@
     break;
 
   case 59:
-#line 365 "ael.y"
+#line 361 "ael.y"
     { (yyval.str) = (yyvsp[0].str);;}
     break;
 
   case 60:
-#line 366 "ael.y"
+#line 362 "ael.y"
     {
 		asprintf(&((yyval.str)), "%s%s", (yyvsp[-1].str), (yyvsp[0].str));
 		free((yyvsp[-1].str));
@@ -2488,12 +2323,12 @@
     break;
 
   case 61:
-#line 373 "ael.y"
+#line 369 "ael.y"
     { (yyval.str) = (yyvsp[0].str);;}
     break;
 
   case 62:
-#line 374 "ael.y"
+#line 370 "ael.y"
     {
 		asprintf(&((yyval.str)), "%s%s", (yyvsp[-1].str), (yyvsp[0].str));
 		free((yyvsp[-1].str));
@@ -2502,7 +2337,7 @@
     break;
 
   case 63:
-#line 379 "ael.y"
+#line 375 "ael.y"
     {
 		asprintf(&((yyval.str)), "%s%s%s", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str));
 		free((yyvsp[-2].str));
@@ -2512,12 +2347,12 @@
     break;
 
   case 64:
-#line 387 "ael.y"
+#line 383 "ael.y"
     { (yyval.str) = (yyvsp[0].str);;}
     break;
 
   case 65:
-#line 388 "ael.y"
+#line 384 "ael.y"
     {
 		asprintf(&((yyval.str)), "%s%s", (yyvsp[-1].str), (yyvsp[0].str));
 		free((yyvsp[-1].str));
@@ -2525,7 +2360,7 @@
     break;
 
   case 66:
-#line 392 "ael.y"
+#line 388 "ael.y"
     {
 		asprintf(&((yyval.str)), "%s:%s", (yyvsp[-2].str), (yyvsp[0].str));
 		free((yyvsp[-2].str));
@@ -2533,31 +2368,31 @@
     break;
 
   case 67:
-#line 398 "ael.y"
+#line 394 "ael.y"
     { reset_parencount(parseio->scanner); ;}
     break;
 
   case 68:
-#line 398 "ael.y"
+#line 394 "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 406 "ael.y"
+#line 402 "ael.y"
     {
 		(yyval.pval) = npval2(PV_STATEMENTBLOCK, &(yylsp[-2]), &(yylsp[0]));
 		(yyval.pval)->u1.list = (yyvsp[-1].pval); ;}
     break;
 
   case 70:
-#line 409 "ael.y"
+#line 405 "ael.y"
     {reset_semicount(parseio->scanner);;}
     break;
 
   case 71:
-#line 409 "ael.y"
+#line 405 "ael.y"
     {
 		(yyval.pval) = npval2(PV_VARDEC, &(yylsp[-4]), &(yylsp[0]));
 		(yyval.pval)->u1.str = (yyvsp[-4].str);
@@ -2565,43 +2400,43 @@
     break;
 
   case 72:
-#line 413 "ael.y"
+#line 409 "ael.y"
     {
 		(yyval.pval) = npval2(PV_GOTO, &(yylsp[-2]), &(yylsp[0]));
 		(yyval.pval)->u1.list = (yyvsp[-1].pval);;}
     break;
 
   case 73:
-#line 416 "ael.y"
+#line 412 "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 419 "ael.y"
+#line 415 "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 422 "ael.y"
+#line 418 "ael.y"
     {reset_semicount(parseio->scanner);;}
     break;
 
   case 76:
-#line 423 "ael.y"
+#line 419 "ael.y"
     {reset_semicount(parseio->scanner);;}
     break;
 
   case 77:
-#line 424 "ael.y"
+#line 420 "ael.y"
     {reset_parencount(parseio->scanner);;}
     break;
 
   case 78:
-#line 424 "ael.y"
+#line 420 "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);
@@ -2611,12 +2446,12 @@
     break;
 
   case 79:
-#line 430 "ael.y"
+#line 426 "ael.y"
     {reset_parencount(parseio->scanner);;}
     break;
 
   case 80:
-#line 430 "ael.y"
+#line 426 "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);
@@ -2624,7 +2459,7 @@
     break;
 
   case 81:
-#line 434 "ael.y"
+#line 430 "ael.y"
     {
 		(yyval.pval)=(yyvsp[-1].pval);
 		(yyval.pval)->endline = (yylsp[0]).last_line;
@@ -2632,7 +2467,7 @@
     break;
 
   case 82:
-#line 438 "ael.y"
+#line 434 "ael.y"
     {
 		(yyval.pval)=(yyvsp[-2].pval);
 		(yyval.pval)->u2.statements = (yyvsp[-1].pval);
@@ -2641,7 +2476,7 @@
     break;
 
   case 83:
-#line 443 "ael.y"
+#line 439 "ael.y"
     {
 		(yyval.pval) = (yyvsp[-1].pval);
 		(yyval.pval)->endline = (yylsp[-1]).last_line;
@@ -2649,7 +2484,7 @@
     break;
 
   case 84:
-#line 447 "ael.y"
+#line 443 "ael.y"
     {
 		(yyval.pval) = (yyvsp[-1].pval);
 		(yyval.pval)->endline = (yylsp[0]).last_line;
@@ -2657,19 +2492,19 @@
     break;
 
   case 85:
-#line 451 "ael.y"
+#line 447 "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 454 "ael.y"
+#line 450 "ael.y"
     {reset_semicount(parseio->scanner);;}
     break;
 
   case 87:
-#line 454 "ael.y"
+#line 450 "ael.y"
     {
 		char *bufx;
 		int tot=0;
@@ -2706,25 +2541,25 @@
     break;
 
   case 88:
+#line 483 "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 485 "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 487 "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:

[... 1119 lines stripped ...]


More information about the asterisk-commits mailing list