[asterisk-commits] branch murf/AEL2 r20033 - /team/murf/AEL2/pbx/

asterisk-commits at lists.digium.com asterisk-commits at lists.digium.com
Fri Apr 14 09:41:57 MST 2006


Author: murf
Date: Fri Apr 14 11:41:53 2006
New Revision: 20033

URL: http://svn.digium.com/view/asterisk?rev=20033&view=rev
Log:

At last, I figured it out. No bison bug, just cockpit 
error on my part. I've discovered a few more tricks with 
bison, rearranged the input file a little, simplified things
a bit, and got rid of all the bad hacks. Now I can bump
the syntax error count in a thread-safe way, so that kluge
is fixed. 

Ahhhh, it feels good!



Modified:
    team/murf/AEL2/pbx/ael.flex
    team/murf/AEL2/pbx/ael.tab.c
    team/murf/AEL2/pbx/ael.tab.h
    team/murf/AEL2/pbx/ael.y
    team/murf/AEL2/pbx/ael_lex.c

Modified: team/murf/AEL2/pbx/ael.flex
URL: http://svn.digium.com/view/asterisk/team/murf/AEL2/pbx/ael.flex?rev=20033&r1=20032&r2=20033&view=diff
==============================================================================
--- team/murf/AEL2/pbx/ael.flex (original)
+++ team/murf/AEL2/pbx/ael.flex Fri Apr 14 11:41:53 2006
@@ -46,7 +46,7 @@
 struct pval *ael2_parse(char *filename, int *errors);
 int ael_yyget_column  (yyscan_t yyscanner);
 void ael_yyset_column (int  column_no , yyscan_t yyscanner);
-int ael_yyparse (void *);
+int ael_yyparse (struct parse_io *);
 static void pbcpush(char x);
 static int pbcpop(char x);
 static void pbcwhere(char *text, int *line, int *col );
@@ -580,15 +580,6 @@
 	BEGIN(argg);
 }
 
-#ifdef NOMORE
-void parse_extensions(yyscan_t scanner)
-{
-    struct yyguts_t * yyg = (struct yyguts_t*)scanner;
-	struct pval *yy;
-	ael_yyparse((void*)(&yy));
-	printf("Done. yy->type is %d\n", yy->type);
-}
-#endif
 
 struct pval *ael2_parse(char *filename, int *errors)
 {
@@ -597,12 +588,10 @@
 	char *buffer;
 	struct stat stats;
 	FILE *fin;
-	extern struct parse_io *shared_parseio;
 
 	/* extern int ael_yydebug; */
 
 	io = calloc(sizeof(struct parse_io),1);
-	shared_parseio = io;
 	/* reset the global counters */
 	prev_word = 0;
 	my_lineno = 1;
@@ -628,14 +617,13 @@
 
 	/* ael_yyset_in (fin , io->scanner);	OLD WAY */
 
-	ael_yyparse((void *) io);
+	ael_yyparse(io);
 
 
 	pval = io->pval;
 	*errors = io->syntax_error_count;
 
 	ael_yylex_destroy(io->scanner);
-	shared_parseio = 0;
 	free(buffer);
 	free(io);
 

Modified: team/murf/AEL2/pbx/ael.tab.c
URL: http://svn.digium.com/view/asterisk/team/murf/AEL2/pbx/ael.tab.c?rev=20033&r1=20032&r2=20033&view=diff
==============================================================================
--- team/murf/AEL2/pbx/ael.tab.c (original)
+++ team/murf/AEL2/pbx/ael.tab.c Fri Apr 14 11:41:53 2006
@@ -1,7 +1,7 @@
-/* A Bison parser, made by GNU Bison 1.875c.  */
+/* A Bison parser, made by GNU Bison 2.1.  */
 
 /* Skeleton parser for Yacc-like parsing with Bison,
-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -15,8 +15,8 @@
 
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
+   Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
 
 /* As a special exception, when this file is copied by Bison into a
    Bison output file, you may use that output file without restriction.
@@ -36,6 +36,9 @@
 /* Identify Bison output.  */
 #define YYBISON 1
 
+/* Bison version.  */
+#define YYBISON_VERSION "2.1"
+
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
 
@@ -45,8 +48,7 @@
 /* Using locations.  */
 #define YYLSP_NEEDED 1
 
-/* If NAME_PREFIX is specified substitute the variables and functions
-   names.  */
+/* Substitute the variable and function names.  */
 #define yyparse ael_yyparse
 #define yylex   ael_yylex
 #define yyerror ael_yyerror
@@ -103,6 +105,7 @@
      word = 296
    };
 #endif
+/* Tokens.  */
 #define KW_CONTEXT 258
 #define LC 259
 #define RC 260
@@ -181,11 +184,47 @@
 extern void reset_semicount(yyscan_t yyscanner);
 extern void reset_argcount(yyscan_t yyscanner );
 
-#define YYPARSE_PARAM parseio
 #define YYLEX_PARAM ((struct parse_io *)parseio)->scanner
 #define YYERROR_VERBOSE 1
 
-/* this stuff is included so I can declare the proto for yyerror */ 
+extern char *my_file;
+int ael_is_funcname(char *name);
+ static char *ael_token_subst(char *mess);
+ extern char *prev_word;
+ 
+
+
+/* Enabling traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+/* Enabling verbose error messages.  */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 1
+#endif
+
+/* Enabling the token table.  */
+#ifndef YYTOKEN_TABLE
+# define YYTOKEN_TABLE 0
+#endif
+
+#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
+#line 45 "ael.y"
+typedef union YYSTYPE {
+	char *str;
+	struct pval *pval;
+} YYSTYPE;
+/* Line 196 of yacc.c.  */
+#line 223 "ael.tab.c"
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+# define YYSTYPE_IS_TRIVIAL 1
+#endif
+
 #if ! defined (YYLTYPE) && ! defined (YYLTYPE_IS_DECLARED)
 typedef struct YYLTYPE
 {
@@ -198,93 +237,60 @@
 # define YYLTYPE_IS_DECLARED 1
 # define YYLTYPE_IS_TRIVIAL 1
 #endif
-#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-typedef union YYSTYPE {
-	char *str;
-	struct pval *pval;
-} YYSTYPE;
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
-# define YYSTYPE_IS_DECLARED 1
-# define YYSTYPE_IS_TRIVIAL 1
-#endif
-
-extern char *my_file;
-void yyerror(YYLTYPE *locp,void *nothing, char const *s);
+
+
+/* Copy the second part of user declarations.  */
+#line 50 "ael.y"
+
+	/* declaring these AFTER the union makes things a lot simpler! */
+void yyerror(YYLTYPE *locp, struct parse_io *parseio, char const *s);
 int ael_yylex (YYSTYPE * yylval_param, YYLTYPE * yylloc_param , void * yyscanner);
-int ael_is_funcname(char *name);
- static char *ael_token_subst(char *mess);
- extern char *prev_word;
- struct parse_io *shared_parseio;
- 
-
-
-/* Enabling traces.  */
-#ifndef YYDEBUG
-# define YYDEBUG 0
-#endif
-
-/* Enabling verbose error messages.  */
-#ifdef YYERROR_VERBOSE
-# undef YYERROR_VERBOSE
-# define YYERROR_VERBOSE 1
-#else
-# define YYERROR_VERBOSE 1
-#endif
-
-#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 72 "ael.y"
-typedef union YYSTYPE {
-	char *str;
-	struct pval *pval;
-} YYSTYPE;
-/* Line 191 of yacc.c.  */
-#line 242 "ael.tab.c"
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
-# define YYSTYPE_IS_DECLARED 1
-# define YYSTYPE_IS_TRIVIAL 1
-#endif
-
-#if ! defined (YYLTYPE) && ! defined (YYLTYPE_IS_DECLARED)
-typedef struct YYLTYPE
-{
-  int first_line;
-  int first_column;
-  int last_line;
-  int last_column;
-} YYLTYPE;
-# define yyltype YYLTYPE /* obsolescent; will be withdrawn */
-# define YYLTYPE_IS_DECLARED 1
-# define YYLTYPE_IS_TRIVIAL 1
-#endif
-
-
-/* Copy the second part of user declarations.  */
-
-
-/* Line 214 of yacc.c.  */
-#line 266 "ael.tab.c"
+	
+
+
+/* Line 219 of yacc.c.  */
+#line 253 "ael.tab.c"
+
+#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
+# define YYSIZE_T __SIZE_TYPE__
+#endif
+#if ! defined (YYSIZE_T) && defined (size_t)
+# define YYSIZE_T size_t
+#endif
+#if ! defined (YYSIZE_T) && (defined (__STDC__) || defined (__cplusplus))
+# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+# define YYSIZE_T size_t
+#endif
+#if ! defined (YYSIZE_T)
+# define YYSIZE_T unsigned int
+#endif
+
+#ifndef YY_
+# if YYENABLE_NLS
+#  if ENABLE_NLS
+#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
+#   define YY_(msgid) dgettext ("bison-runtime", msgid)
+#  endif
+# endif
+# ifndef YY_
+#  define YY_(msgid) msgid
+# endif
+#endif
 
 #if ! defined (yyoverflow) || YYERROR_VERBOSE
-
-# ifndef YYFREE
-#  define YYFREE free
-# endif
-# ifndef YYMALLOC
-#  define YYMALLOC malloc
-# endif
 
 /* The parser invokes alloca or malloc; define the necessary symbols.  */
 
 # ifdef YYSTACK_USE_ALLOCA
 #  if YYSTACK_USE_ALLOCA
-#   define YYSTACK_ALLOC alloca
-#  endif
-# else
-#  if defined (alloca) || defined (_ALLOCA_H)
-#   define YYSTACK_ALLOC alloca
-#  else
 #   ifdef __GNUC__
 #    define YYSTACK_ALLOC __builtin_alloca
+#   else
+#    define YYSTACK_ALLOC alloca
+#    if defined (__STDC__) || defined (__cplusplus)
+#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#     define YYINCLUDED_STDLIB_H
+#    endif
 #   endif
 #  endif
 # endif
@@ -292,13 +298,39 @@
 # ifdef YYSTACK_ALLOC
    /* Pacify GCC's `empty if-body' warning. */
 #  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+    /* The OS might guarantee only one guard page at the bottom of the stack,
+       and a page size can be as small as 4096 bytes.  So we cannot safely
+       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
+       to allow for a few compiler-allocated temporary stack slots.  */
+#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2005 */
+#  endif
 # else
-#  if defined (__STDC__) || defined (__cplusplus)
-#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#   define YYSIZE_T size_t
-#  endif
 #  define YYSTACK_ALLOC YYMALLOC
 #  define YYSTACK_FREE YYFREE
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+#   define YYSTACK_ALLOC_MAXIMUM ((YYSIZE_T) -1)
+#  endif
+#  ifdef __cplusplus
+extern "C" {
+#  endif
+#  ifndef YYMALLOC
+#   define YYMALLOC malloc
+#   if (! defined (malloc) && ! defined (YYINCLUDED_STDLIB_H) \
+	&& (defined (__STDC__) || defined (__cplusplus)))
+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+#  ifndef YYFREE
+#   define YYFREE free
+#   if (! defined (free) && ! defined (YYINCLUDED_STDLIB_H) \
+	&& (defined (__STDC__) || defined (__cplusplus)))
+void free (void *); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+#  ifdef __cplusplus
+}
+#  endif
 # endif
 #endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
 
@@ -311,7 +343,7 @@
 /* A type that is properly aligned for any stack member.  */
 union yyalloc
 {
-  short yyss;
+  short int yyss;
   YYSTYPE yyvs;
     YYLTYPE yyls;
 };
@@ -322,7 +354,7 @@
 /* The size of an array large to enough to hold all stacks, each with
    N elements.  */
 # define YYSTACK_BYTES(N) \
-     ((N) * (sizeof (short) + sizeof (YYSTYPE) + sizeof (YYLTYPE))	\
+     ((N) * (sizeof (short int) + sizeof (YYSTYPE) + sizeof (YYLTYPE))	\
       + 2 * YYSTACK_GAP_MAXIMUM)
 
 /* Copy COUNT objects from FROM to TO.  The source and destination do
@@ -335,7 +367,7 @@
 #   define YYCOPY(To, From, Count)		\
       do					\
 	{					\
-	  register YYSIZE_T yyi;		\
+	  YYSIZE_T yyi;				\
 	  for (yyi = 0; yyi < (Count); yyi++)	\
 	    (To)[yyi] = (From)[yyi];		\
 	}					\
@@ -364,7 +396,7 @@
 #if defined (__STDC__) || defined (__cplusplus)
    typedef signed char yysigned_char;
 #else
-   typedef short yysigned_char;
+   typedef short int yysigned_char;
 #endif
 
 /* YYFINAL -- State number of the termination state. */
@@ -385,7 +417,7 @@
 #define YYUNDEFTOK  2
 #define YYMAXUTOK   296
 
-#define YYTRANSLATE(YYX) 						\
+#define YYTRANSLATE(YYX)						\
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
 
 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
@@ -426,7 +458,7 @@
 #if YYDEBUG
 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
    YYRHS.  */
-static const unsigned short yyprhs[] =
+static const unsigned short int yyprhs[] =
 {
        0,     0,     3,     5,     7,    10,    13,    15,    17,    19,
       21,    27,    32,    38,    43,    50,    56,    63,    69,    78,
@@ -513,28 +545,28 @@
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
-static const unsigned short yyrline[] =
-{
-       0,   139,   139,   142,   143,   146,   149,   150,   151,   152,
-     155,   156,   157,   158,   159,   160,   161,   162,   165,   167,
-     168,   169,   172,   173,   176,   177,   178,   181,   181,   184,
-     185,   186,   189,   190,   191,   194,   197,   198,   199,   200,
-     201,   202,   202,   203,   204,   207,   210,   211,   212,   213,
-     217,   218,   221,   224,   224,   227,   227,   230,   249,   268,
-     269,   271,   272,   273,   276,   276,   281,   282,   282,   285,
-     286,   287,   288,   289,   290,   288,   293,   293,   296,   297,
-     298,   299,   300,   302,   302,   334,   335,   336,   337,   338,
-     339,   340,   341,   342,   343,   346,   347,   350,   353,   358,
-     363,   368,   375,   378,   381,   386,   391,   396,   403,   403,
-     406,   409,   409,   417,   423,   426,   427,   428,   429,   432,
-     433,   438,   439,   440,   441,   442,   443,   446,   447,   452,
-     453,   456,   457,   460,   461,   464,   465,   466,   469,   470,
-     491,   504,   505,   525,   538,   541,   542,   545,   546
+static const unsigned short int yyrline[] =
+{
+       0,   119,   119,   122,   123,   126,   129,   130,   131,   132,
+     135,   136,   137,   138,   139,   140,   141,   142,   145,   147,
+     148,   149,   152,   153,   156,   157,   158,   161,   161,   164,
+     165,   166,   169,   170,   171,   174,   177,   178,   179,   180,
+     181,   182,   182,   183,   184,   187,   190,   191,   192,   193,
+     197,   198,   201,   204,   204,   207,   207,   210,   229,   248,
+     249,   251,   252,   253,   256,   256,   261,   262,   262,   265,
+     266,   267,   268,   269,   270,   268,   273,   273,   276,   277,
+     278,   279,   280,   282,   282,   314,   315,   316,   317,   318,
+     319,   320,   321,   322,   323,   326,   327,   330,   333,   338,
+     343,   348,   355,   358,   361,   366,   371,   376,   383,   383,
+     386,   389,   389,   397,   403,   406,   407,   408,   409,   412,
+     413,   418,   419,   420,   421,   422,   423,   426,   427,   432,
+     433,   436,   437,   440,   441,   444,   445,   446,   449,   450,
+     471,   484,   485,   505,   518,   521,   522,   525,   526
 };
 #endif
 
-#if YYDEBUG || YYERROR_VERBOSE
-/* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
    First, the terminals, then, starting at YYNTOKENS, nonterminals. */
 static const char *const yytname[] =
 {
@@ -560,7 +592,7 @@
 # ifdef YYPRINT
 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
    token YYLEX-NUM.  */
-static const unsigned short yytoknum[] =
+static const unsigned short int yytoknum[] =
 {
        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
@@ -653,7 +685,7 @@
 };
 
 /* YYDEFGOTO[NTERM-NUM]. */
-static const short yydefgoto[] =
+static const short int yydefgoto[] =
 {
       -1,     6,     7,     8,     9,    10,    11,    25,    26,    75,
       50,    39,    40,    95,    41,    42,   144,   111,   202,   112,
@@ -666,7 +698,7 @@
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
 #define YYPACT_NINF -198
-static const short yypact[] =
+static const short int yypact[] =
 {
      143,    79,  -198,   -38,     8,    24,    58,   379,  -198,  -198,
     -198,  -198,    68,   103,   122,    36,   119,  -198,  -198,  -198,
@@ -706,7 +738,7 @@
 };
 
 /* YYPGOTO[NTERM-NUM].  */
-static const short yypgoto[] =
+static const short int yypgoto[] =
 {
     -198,  -198,  -198,   507,  -198,  -198,  -198,  -198,   496,  -198,
     -198,    55,   -37,  -198,  -198,  -198,  -197,  -198,  -198,  -198,
@@ -721,7 +753,7 @@
    number is the opposite.  If zero, do what YYDEFACT says.
    If YYTABLE_NINF, syntax error.  */
 #define YYTABLE_NINF -124
-static const short yytable[] =
+static const short int yytable[] =
 {
      115,   183,    69,    14,   196,   120,   236,    96,  -122,    58,
       69,    97,    15,   138,   129,    98,   130,   139,    90,    59,
@@ -781,7 +813,7 @@
        0,     0,     0,     0,     0,     0,     0,   110
 };
 
-static const short yycheck[] =
+static const short int yycheck[] =
 {
       66,   121,    39,    41,     1,    71,    13,     4,     5,    31,
       47,     8,     4,     1,    81,    12,    82,     5,     5,    41,
@@ -882,22 +914,6 @@
       13,    68,    13,    65,    65,    65,     8,     7,     8
 };
 
-#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
-# define YYSIZE_T __SIZE_TYPE__
-#endif
-#if ! defined (YYSIZE_T) && defined (size_t)
-# define YYSIZE_T size_t
-#endif
-#if ! defined (YYSIZE_T)
-# if defined (__STDC__) || defined (__cplusplus)
-#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
-#  define YYSIZE_T size_t
-# endif
-#endif
-#if ! defined (YYSIZE_T)
-# define YYSIZE_T unsigned int
-#endif
-
 #define yyerrok		(yyerrstatus = 0)
 #define yyclearin	(yychar = YYEMPTY)
 #define YYEMPTY		(-2)
@@ -927,25 +943,58 @@
       goto yybackup;						\
     }								\
   else								\
-    { 								\
-      yyerror (&yylloc, NULL, "syntax error: cannot back up");\
+    {								\
+      yyerror (&yylloc, parseio, YY_("syntax error: cannot back up")); \
       YYERROR;							\
     }								\
 while (0)
 
+
 #define YYTERROR	1
 #define YYERRCODE	256
 
-/* YYLLOC_DEFAULT -- Compute the default location (before the actions
-   are run).  */
-
+
+/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
+   If N is 0, then set CURRENT to the empty location which ends
+   the previous symbol: RHS[0] (always defined).  */
+
+#define YYRHSLOC(Rhs, K) ((Rhs)[K])
 #ifndef YYLLOC_DEFAULT
-# define YYLLOC_DEFAULT(Current, Rhs, N)		\
-   ((Current).first_line   = (Rhs)[1].first_line,	\
-    (Current).first_column = (Rhs)[1].first_column,	\
-    (Current).last_line    = (Rhs)[N].last_line,	\
-    (Current).last_column  = (Rhs)[N].last_column)
-#endif
+# define YYLLOC_DEFAULT(Current, Rhs, N)				\
+    do									\
+      if (N)								\
+	{								\
+	  (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;	\
+	  (Current).first_column = YYRHSLOC (Rhs, 1).first_column;	\
+	  (Current).last_line    = YYRHSLOC (Rhs, N).last_line;		\
+	  (Current).last_column  = YYRHSLOC (Rhs, N).last_column;	\
+	}								\
+      else								\
+	{								\
+	  (Current).first_line   = (Current).last_line   =		\
+	    YYRHSLOC (Rhs, 0).last_line;				\
+	  (Current).first_column = (Current).last_column =		\
+	    YYRHSLOC (Rhs, 0).last_column;				\
+	}								\
+    while (0)
+#endif
+
+
+/* YY_LOCATION_PRINT -- Print the location on the stream.
+   This macro was not mandated originally: define only if we know
+   we won't break user code: when these are the locations we know.  */
+
+#ifndef YY_LOCATION_PRINT
+# if YYLTYPE_IS_TRIVIAL
+#  define YY_LOCATION_PRINT(File, Loc)			\
+     fprintf (File, "%d.%d-%d.%d",			\
+              (Loc).first_line, (Loc).first_column,	\
+              (Loc).last_line,  (Loc).last_column)
+# else
+#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+# endif
+#endif
+
 
 /* YYLEX -- calling `yylex' with the right arguments.  */
 
@@ -969,19 +1018,13 @@
     YYFPRINTF Args;				\
 } while (0)
 
-# define YYDSYMPRINT(Args)			\
-do {						\
-  if (yydebug)					\
-    yysymprint Args;				\
-} while (0)
-
-# define YYDSYMPRINTF(Title, Token, Value, Location)		\
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)		\
 do {								\
   if (yydebug)							\
     {								\
       YYFPRINTF (stderr, "%s ", Title);				\
-      yysymprint (stderr, 					\
-                  Token, Value, Location);	\
+      yysymprint (stderr,					\
+                  Type, Value, Location);	\
       YYFPRINTF (stderr, "\n");					\
     }								\
 } while (0)
@@ -993,12 +1036,12 @@
 
 #if defined (__STDC__) || defined (__cplusplus)
 static void
-yy_stack_print (short *bottom, short *top)
+yy_stack_print (short int *bottom, short int *top)
 #else
 static void
 yy_stack_print (bottom, top)
-    short *bottom;
-    short *top;
+    short int *bottom;
+    short int *top;
 #endif
 {
   YYFPRINTF (stderr, "Stack now");
@@ -1028,13 +1071,13 @@
 #endif
 {
   int yyi;
-  unsigned int yylno = yyrline[yyrule];
-  YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",
+  unsigned long int yylno = yyrline[yyrule];
+  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu), ",
              yyrule - 1, yylno);
   /* Print the symbols being reduced, and their result.  */
   for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
-    YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
-  YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]);
+    YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
+  YYFPRINTF (stderr, "-> %s\n", yytname[yyr1[yyrule]]);
 }
 
 # define YY_REDUCE_PRINT(Rule)		\
@@ -1048,8 +1091,7 @@
 int yydebug;
 #else /* !YYDEBUG */
 # define YYDPRINTF(Args)
-# define YYDSYMPRINT(Args)
-# define YYDSYMPRINTF(Title, Token, Value, Location)
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
 # define YY_STACK_PRINT(Bottom, Top)
 # define YY_REDUCE_PRINT(Rule)
 #endif /* !YYDEBUG */
@@ -1064,12 +1106,8 @@
    if the built-in stack extension method is used).
 
    Do not make this value too large; the results are undefined if
-   SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
+   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
    evaluated with infinite-precision integer arithmetic.  */
-
-#if defined (YYMAXDEPTH) && YYMAXDEPTH == 0
-# undef YYMAXDEPTH
-#endif
 
 #ifndef YYMAXDEPTH
 # define YYMAXDEPTH 10000
@@ -1092,7 +1130,7 @@
      const char *yystr;
 #   endif
 {
-  register const char *yys = yystr;
+  const char *yys = yystr;
 
   while (*yys++ != '\0')
     continue;
@@ -1117,8 +1155,8 @@
      const char *yysrc;
 #   endif
 {
-  register char *yyd = yydest;
-  register const char *yys = yysrc;
+  char *yyd = yydest;
+  const char *yys = yysrc;
 
   while ((*yyd++ = *yys++) != '\0')
     continue;
@@ -1128,7 +1166,55 @@
 #  endif
 # endif
 
-#endif /* !YYERROR_VERBOSE */
+# ifndef yytnamerr
+/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
+   quotes and backslashes, so that it's suitable for yyerror.  The
+   heuristic is that double-quoting is unnecessary unless the string
+   contains an apostrophe, a comma, or backslash (other than
+   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
+   null, do not copy; instead, return the length of what the result
+   would have been.  */
+static YYSIZE_T
+yytnamerr (char *yyres, const char *yystr)
+{
+  if (*yystr == '"')
+    {
+      size_t yyn = 0;
+      char const *yyp = yystr;
+
+      for (;;)
+	switch (*++yyp)
+	  {
+	  case '\'':
+	  case ',':
+	    goto do_not_strip_quotes;
+
+	  case '\\':
+	    if (*++yyp != '\\')
+	      goto do_not_strip_quotes;
+	    /* Fall through.  */
+	  default:
+	    if (yyres)
+	      yyres[yyn] = *yyp;
+	    yyn++;
+	    break;
+
+	  case '"':
+	    if (yyres)
+	      yyres[yyn] = '\0';
+	    return yyn;
+	  }
+    do_not_strip_quotes: ;
+    }
+
+  if (! yyres)
+    return yystrlen (yystr);
+
+  return yystpcpy (yyres, yystr) - yyres;
+}
+# endif
+
+#endif /* YYERROR_VERBOSE */
 
 
 
@@ -1154,15 +1240,17 @@
   (void) yylocationp;
 
   if (yytype < YYNTOKENS)
-    {
-      YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
-# ifdef YYPRINT
-      YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
-# endif
-    }
+    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
   else
     YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
 
+  YY_LOCATION_PRINT (yyoutput, *yylocationp);
+  YYFPRINTF (yyoutput, ": ");
+
+# ifdef YYPRINT
+  if (yytype < YYNTOKENS)
+    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# endif
   switch (yytype)
     {
       default:
@@ -1178,10 +1266,11 @@
 
 #if defined (__STDC__) || defined (__cplusplus)
 static void
-yydestruct (int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocationp)
+yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocationp)
 #else
 static void
-yydestruct (yytype, yyvaluep, yylocationp)
+yydestruct (yymsg, yytype, yyvaluep, yylocationp)
+    const char *yymsg;
     int yytype;
     YYSTYPE *yyvaluep;
     YYLTYPE *yylocationp;
@@ -1190,6 +1279,10 @@
   /* Pacify ``unused variable'' warnings.  */
   (void) yyvaluep;
   (void) yylocationp;
+
+  if (!yymsg)
+    yymsg = "Deleting";
+  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
 
   switch (yytype)
     {
@@ -1210,7 +1303,7 @@
 # endif
 #else /* ! YYPARSE_PARAM */
 #if defined (__STDC__) || defined (__cplusplus)
-int yyparse (void *NULL);
+int yyparse (struct parse_io *parseio);
 #else
 int yyparse ();
 #endif
@@ -1235,31 +1328,31 @@
 #else /* ! YYPARSE_PARAM */
 #if defined (__STDC__) || defined (__cplusplus)
 int
-yyparse (void *NULL)
+yyparse (struct parse_io *parseio)
 #else
 int
-yyparse (NULL)
-    void *NULL;
-#endif
-#endif
-{
-  /* The lookahead symbol.  */
+yyparse (parseio)
+    struct parse_io *parseio;
+#endif
+#endif
+{
+  /* The look-ahead symbol.  */
 int yychar;
 
-/* The semantic value of the lookahead symbol.  */
+/* The semantic value of the look-ahead symbol.  */
 YYSTYPE yylval;
 
 /* Number of syntax errors so far.  */
 int yynerrs;
-/* Location data for the lookahead symbol.  */
+/* Location data for the look-ahead symbol.  */
 YYLTYPE yylloc;
 
-  register int yystate;
-  register int yyn;
+  int yystate;
+  int yyn;
   int yyresult;
   /* Number of tokens to shift before error messages enabled.  */
   int yyerrstatus;
-  /* Lookahead token as an internal (translated) token number.  */
+  /* Look-ahead token as an internal (translated) token number.  */
   int yytoken = 0;
 
   /* Three stacks and their tools:
@@ -1271,20 +1364,21 @@
      to reallocate them elsewhere.  */
 
   /* The state stack.  */
-  short	yyssa[YYINITDEPTH];
-  short *yyss = yyssa;
-  register short *yyssp;
+  short int yyssa[YYINITDEPTH];
+  short int *yyss = yyssa;
+  short int *yyssp;
 
   /* The semantic value stack.  */
   YYSTYPE yyvsa[YYINITDEPTH];
   YYSTYPE *yyvs = yyvsa;
-  register YYSTYPE *yyvsp;
+  YYSTYPE *yyvsp;
 
   /* The location stack.  */
   YYLTYPE yylsa[YYINITDEPTH];
   YYLTYPE *yyls = yylsa;
   YYLTYPE *yylsp;
-  YYLTYPE *yylerrsp;
+  /* The locations where the error started and ended. */
+  YYLTYPE yyerror_range[2];
 
 #define YYPOPSTACK   (yyvsp--, yyssp--, yylsp--)
 
@@ -1314,6 +1408,12 @@
   yyssp = yyss;
   yyvsp = yyvs;
   yylsp = yyls;
+#if YYLTYPE_IS_TRIVIAL
+  /* Initialize the default location before parsing starts.  */
+  yylloc.first_line   = yylloc.last_line   = 1;
+  yylloc.first_column = yylloc.last_column = 0;
+#endif
+
   goto yysetstate;
 
 /*------------------------------------------------------------.
@@ -1339,14 +1439,14 @@
 	   these so that the &'s don't force the real ones into
 	   memory.  */
 	YYSTYPE *yyvs1 = yyvs;
-	short *yyss1 = yyss;
+	short int *yyss1 = yyss;
 	YYLTYPE *yyls1 = yyls;
 
 	/* Each stack pointer address is followed by the size of the
 	   data in use in that stack, in bytes.  This used to be a
 	   conditional around just the two extra args, but that might
 	   be undefined if yyoverflow is a macro.  */
-	yyoverflow ("parser stack overflow",
+	yyoverflow (YY_("memory exhausted"),
 		    &yyss1, yysize * sizeof (*yyssp),
 		    &yyvs1, yysize * sizeof (*yyvsp),
 		    &yyls1, yysize * sizeof (*yylsp),
@@ -1357,21 +1457,21 @@
       }
 #else /* no yyoverflow */
 # ifndef YYSTACK_RELOCATE
-      goto yyoverflowlab;
+      goto yyexhaustedlab;
 # else
       /* Extend the stack our own way.  */
       if (YYMAXDEPTH <= yystacksize)
-	goto yyoverflowlab;
+	goto yyexhaustedlab;
       yystacksize *= 2;
       if (YYMAXDEPTH < yystacksize)
 	yystacksize = YYMAXDEPTH;
 
       {
-	short *yyss1 = yyss;
+	short int *yyss1 = yyss;
 	union yyalloc *yyptr =
 	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
 	if (! yyptr)
-	  goto yyoverflowlab;
+	  goto yyexhaustedlab;
 	YYSTACK_RELOCATE (yyss);
 	YYSTACK_RELOCATE (yyvs);
 	YYSTACK_RELOCATE (yyls);
@@ -1403,18 +1503,18 @@
 yybackup:
 
 /* Do appropriate processing given the current state.  */
-/* Read a lookahead token if we need one and don't already have one.  */
+/* Read a look-ahead token if we need one and don't already have one.  */
 /* yyresume: */
 
-  /* First try to decide what to do without reference to lookahead token.  */
+  /* First try to decide what to do without reference to look-ahead token.  */
 
   yyn = yypact[yystate];
   if (yyn == YYPACT_NINF)
     goto yydefault;
 
-  /* Not known => get a lookahead token if don't already have one.  */
-
-  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
+  /* Not known => get a look-ahead token if don't already have one.  */
+
+  /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol.  */
   if (yychar == YYEMPTY)
     {
       YYDPRINTF ((stderr, "Reading a token: "));
@@ -1429,7 +1529,7 @@
   else
     {
       yytoken = YYTRANSLATE (yychar);
-      YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc);
+      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
     }
 
   /* If the proper action on seeing token YYTOKEN is to reduce or to
@@ -1449,8 +1549,8 @@
   if (yyn == YYFINAL)
     YYACCEPT;
 
-  /* Shift the lookahead token.  */
-  YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken]));
+  /* Shift the look-ahead token.  */
+  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
 
   /* Discard the token being shifted unless it is eof.  */
   if (yychar != YYEOF)
@@ -1501,933 +1601,934 @@
   switch (yyn)
     {
         case 2:
+#line 119 "ael.y"
+    { parseio->pval = (yyval.pval); ;}
+    break;
+
+  case 3:
+#line 122 "ael.y"
+    {(yyval.pval)=(yyvsp[0].pval);;}
+    break;
+
+  case 4:
+#line 123 "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 5:
+#line 126 "ael.y"
+    {(yyval.pval)=(yyvsp[-1].pval);;}
+    break;
+
+  case 6:
+#line 129 "ael.y"
+    {(yyval.pval)=(yyvsp[0].pval);;}
+    break;
+
+  case 7:
+#line 130 "ael.y"
+    {(yyval.pval)=(yyvsp[0].pval);;}
+    break;
+
+  case 8:
+#line 131 "ael.y"
+    {(yyval.pval)=(yyvsp[0].pval);;}
+    break;
+
+  case 9:
+#line 132 "ael.y"
+    {(yyval.pval)=0;/* allow older docs to be read */;}
+    break;
+
+  case 10:
+#line 135 "ael.y"
+    {(yyval.pval)=npval(PV_CONTEXT,(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 11:
+#line 136 "ael.y"
+    {(yyval.pval)=npval(PV_CONTEXT,(yylsp[-3]).first_line,(yylsp[0]).last_line, (yylsp[-3]).first_column, (yylsp[0]).last_column); (yyval.pval)->u1.str = (yyvsp[-2].str); ;}
+    break;
+
+  case 12:
+#line 137 "ael.y"
+    {(yyval.pval)=npval(PV_CONTEXT,(yylsp[-4]).first_line,(yylsp[0]).last_line, (yylsp[-4]).first_column, (yylsp[0]).last_column); (yyval.pval)->u1.str = strdup("default"); (yyval.pval)->u2.statements = (yyvsp[-1].pval); ;}
+    break;
+
+  case 13:
+#line 138 "ael.y"
+    {(yyval.pval)=npval(PV_CONTEXT,(yylsp[-3]).first_line,(yylsp[0]).last_line, (yylsp[-3]).first_column, (yylsp[0]).last_column); (yyval.pval)->u1.str = strdup("default"); ;}
+    break;
+
+  case 14:
 #line 139 "ael.y"
-    {((struct parse_io *)parseio)->pval = yyval.pval; ;}
-    break;
-
-  case 3:
+    {(yyval.pval)=npval(PV_CONTEXT,(yylsp[-5]).first_line,(yylsp[0]).last_line, (yylsp[-5]).first_column, (yylsp[0]).last_column); (yyval.pval)->u1.str = (yyvsp[-3].str); (yyval.pval)->u2.statements = (yyvsp[-1].pval);  (yyval.pval)->u3.abstract = 1;;}
+    break;
+
+  case 15:
+#line 140 "ael.y"
+    {(yyval.pval)=npval(PV_CONTEXT,(yylsp[-4]).first_line,(yylsp[0]).last_line, (yylsp[-4]).first_column, (yylsp[0]).last_column); (yyval.pval)->u1.str = (yyvsp[-2].str); (yyval.pval)->u3.abstract = 1; ;}
+    break;
+
+  case 16:
+#line 141 "ael.y"
+    {(yyval.pval)=npval(PV_CONTEXT,(yylsp[-5]).first_line,(yylsp[0]).last_line, (yylsp[-5]).first_column, (yylsp[0]).last_column); (yyval.pval)->u1.str = strdup("default"); (yyval.pval)->u2.statements = (yyvsp[-1].pval); (yyval.pval)->u3.abstract = 1; ;}
+    break;
+
+  case 17:
 #line 142 "ael.y"
-    {yyval.pval=yyvsp[0].pval;;}
-    break;
-
-  case 4:
-#line 143 "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 5:
-#line 146 "ael.y"
-    {yyval.pval=yyvsp[-1].pval;;}
-    break;
-
-  case 6:
+    {(yyval.pval)=npval(PV_CONTEXT,(yylsp[-4]).first_line,(yylsp[0]).last_line, (yylsp[-4]).first_column, (yylsp[0]).last_column); (yyval.pval)->u1.str = strdup("default"); (yyval.pval)->u3.abstract = 1; ;}
+    break;
+
+  case 18:
+#line 145 "ael.y"
+    {(yyval.pval)=npval(PV_MACRO,(yylsp[-7]).first_line,(yylsp[0]).last_line, (yylsp[-7]).first_column, (yylsp[0]).last_column); 
+																	 (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 147 "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 148 "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 149 "ael.y"
-    {yyval.pval=yyvsp[0].pval;;}
-    break;
-
-  case 7:
-#line 150 "ael.y"
-    {yyval.pval=yyvsp[0].pval;;}
-    break;
-
-  case 8:
-#line 151 "ael.y"
-    {yyval.pval=yyvsp[0].pval;;}
-    break;
-
-  case 9:
+    {(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 152 "ael.y"
-    {yyval.pval=0;/* allow older docs to be read */;}
-    break;
-
-  case 10:
-#line 155 "ael.y"
-    {yyval.pval=npval(PV_CONTEXT,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 11:
+    {(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 153 "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 156 "ael.y"
-    {yyval.pval=npval(PV_CONTEXT,yylsp[-3].first_line,yylsp[0].last_line, yylsp[-3].first_column, yylsp[0].last_column); yyval.pval->u1.str = yyvsp[-2].str; ;}
-    break;
-
-  case 12:
+    {(yyval.pval)=(yyvsp[0].pval);;}
+    break;
+
+  case 25:
 #line 157 "ael.y"
-    {yyval.pval=npval(PV_CONTEXT,yylsp[-4].first_line,yylsp[0].last_line, yylsp[-4].first_column, yylsp[0].last_column); yyval.pval->u1.str = strdup("default"); yyval.pval->u2.statements = yyvsp[-1].pval; ;}
-    break;
-
-  case 13:
+    {(yyval.pval)=(yyvsp[-1].pval); linku1((yyval.pval),(yyvsp[0].pval));;}
+    break;
+
+  case 26:
 #line 158 "ael.y"
-    {yyval.pval=npval(PV_CONTEXT,yylsp[-3].first_line,yylsp[0].last_line, yylsp[-3].first_column, yylsp[0].last_column); yyval.pval->u1.str = strdup("default"); ;}
-    break;
-
-  case 14:
-#line 159 "ael.y"
-    {yyval.pval=npval(PV_CONTEXT,yylsp[-5].first_line,yylsp[0].last_line, yylsp[-5].first_column, yylsp[0].last_column); yyval.pval->u1.str = yyvsp[-3].str; yyval.pval->u2.statements = yyvsp[-1].pval;  yyval.pval->u3.abstract = 1;;}
-    break;
-
-  case 15:
-#line 160 "ael.y"
-    {yyval.pval=npval(PV_CONTEXT,yylsp[-4].first_line,yylsp[0].last_line, yylsp[-4].first_column, yylsp[0].last_column); yyval.pval->u1.str = yyvsp[-2].str; yyval.pval->u3.abstract = 1; ;}
-    break;
-
-  case 16:
+    {(yyval.pval)=(yyvsp[-1].pval);;}
+    break;
+
+  case 27:
 #line 161 "ael.y"
-    {yyval.pval=npval(PV_CONTEXT,yylsp[-5].first_line,yylsp[0].last_line, yylsp[-5].first_column, yylsp[0].last_column); yyval.pval->u1.str = strdup("default"); yyval.pval->u2.statements = yyvsp[-1].pval; yyval.pval->u3.abstract = 1; ;}
-    break;
-
-  case 17:
-#line 162 "ael.y"
-    {yyval.pval=npval(PV_CONTEXT,yylsp[-4].first_line,yylsp[0].last_line, yylsp[-4].first_column, yylsp[0].last_column); yyval.pval->u1.str = strdup("default"); yyval.pval->u3.abstract = 1; ;}
-    break;
-
-  case 18:
+    { reset_semicount(parseio->scanner); ;}
+    break;
+
+  case 28:
+#line 161 "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);(yyval.pval)->u2.val = (yyvsp[-1].str); ;}
+    break;
+
+  case 29:
+#line 164 "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 165 "ael.y"
-    {yyval.pval=npval(PV_MACRO,yylsp[-7].first_line,yylsp[0].last_line, yylsp[-7].first_column, yylsp[0].last_column); 
-																	 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 167 "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 168 "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:
+    {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); (yyval.pval)=(yyvsp[-2].pval); linku1((yyval.pval),z); ;}
+    break;
+
+  case 31:
+#line 166 "ael.y"
+    {(yyval.pval)=(yyvsp[-1].pval);;}
+    break;
+
+  case 32:
 #line 169 "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 172 "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 173 "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 176 "ael.y"
-    {yyval.pval=yyvsp[0].pval;;}
-    break;
-
-  case 25:
+    { (yyval.pval)=(yyvsp[0].pval);;}
+    break;
+
+  case 33:
+#line 170 "ael.y"
+    {(yyval.pval)=0;;}
+    break;
+
+  case 34:
+#line 171 "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);}

[... 2025 lines stripped ...]


More information about the asterisk-commits mailing list