gawk-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gawk-diffs] [SCM] gawk branch, comment, updated. gawk-4.1.0-796-gf671c3


From: Arnold Robbins
Subject: [gawk-diffs] [SCM] gawk branch, comment, updated. gawk-4.1.0-796-gf671c30
Date: Fri, 12 Sep 2014 15:16:07 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "gawk".

The branch, comment has been updated
       via  f671c30534a2e3b0675f81cbb82f0d0e82ace6c3 (commit)
      from  5d0e35df699f96e1f22af4d8f4cffab355c82913 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=f671c30534a2e3b0675f81cbb82f0d0e82ace6c3

commit f671c30534a2e3b0675f81cbb82f0d0e82ace6c3
Author: Arnold D. Robbins <address@hidden>
Date:   Fri Sep 12 18:15:37 2014 +0300

    Minor code cleanups.

diff --git a/awkgram.c b/awkgram.c
index c9c539d..3ea5d6c 100644
--- a/awkgram.c
+++ b/awkgram.c
@@ -1,19 +1,19 @@
-/* A Bison parser, made by GNU Bison 2.7.  */
+/* A Bison parser, made by GNU Bison 3.0.2.  */
 
 /* Bison implementation for Yacc-like parsers in C
-   
-      Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc.
-   
+
+   Copyright (C) 1984, 1989-1990, 2000-2013 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
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
-   
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-   
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
@@ -26,7 +26,7 @@
    special exception, which will cause the skeleton and the resulting
    Bison output files to be licensed under the GNU General Public
    License without this special exception.
-   
+
    This special exception was added by the Free Software Foundation in
    version 2.2 of Bison.  */
 
@@ -44,7 +44,7 @@
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "2.7"
+#define YYBISON_VERSION "3.0.2"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -62,8 +62,7 @@
 
 
 /* Copy the first part of user declarations.  */
-/* Line 371 of yacc.c  */
-#line 26 "awkgram.y"
+#line 26 "awkgram.y" /* yacc.c:339  */
 
 #ifdef GAWKDEBUG
 #define YYDEBUG 12
@@ -192,7 +191,7 @@ static INSTRUCTION *comment = NULL;
 static INSTRUCTION *comment0 = NULL;
 static INSTRUCTION *commentf = NULL;
 
-static int func_first = 1;
+static bool func_first = true;
 
 static inline INSTRUCTION *list_create(INSTRUCTION *x);
 static inline INSTRUCTION *list_append(INSTRUCTION *l, INSTRUCTION *x);
@@ -205,14 +204,13 @@ extern double fmod(double x, double y);
 
 #define is_identchar(c)                (isalnum(c) || (c) == '_')
 
-/* Line 371 of yacc.c  */
-#line 210 "awkgram.c"
+#line 208 "awkgram.c" /* yacc.c:339  */
 
-# ifndef YY_NULL
+# ifndef YY_NULLPTR
 #  if defined __cplusplus && 201103L <= __cplusplus
-#   define YY_NULL nullptr
+#   define YY_NULLPTR nullptr
 #  else
-#   define YY_NULL 0
+#   define YY_NULLPTR 0
 #  endif
 # endif
 
@@ -225,7 +223,7 @@ extern double fmod(double x, double y);
 #endif
 
 
-/* Enabling traces.  */
+/* Debug traces.  */
 #ifndef YYDEBUG
 # define YYDEBUG 0
 #endif
@@ -233,64 +231,63 @@ extern double fmod(double x, double y);
 extern int yydebug;
 #endif
 
-/* Tokens.  */
+/* Token type.  */
 #ifndef YYTOKENTYPE
 # define YYTOKENTYPE
-   /* Put the tokens into the symbol table, so that GDB and other debuggers
-      know about them.  */
-   enum yytokentype {
-     FUNC_CALL = 258,
-     NAME = 259,
-     REGEXP = 260,
-     FILENAME = 261,
-     YNUMBER = 262,
-     YSTRING = 263,
-     RELOP = 264,
-     IO_OUT = 265,
-     IO_IN = 266,
-     ASSIGNOP = 267,
-     ASSIGN = 268,
-     MATCHOP = 269,
-     CONCAT_OP = 270,
-     SUBSCRIPT = 271,
-     LEX_BEGIN = 272,
-     LEX_END = 273,
-     LEX_IF = 274,
-     LEX_ELSE = 275,
-     LEX_RETURN = 276,
-     LEX_DELETE = 277,
-     LEX_SWITCH = 278,
-     LEX_CASE = 279,
-     LEX_DEFAULT = 280,
-     LEX_WHILE = 281,
-     LEX_DO = 282,
-     LEX_FOR = 283,
-     LEX_BREAK = 284,
-     LEX_CONTINUE = 285,
-     LEX_PRINT = 286,
-     LEX_PRINTF = 287,
-     LEX_NEXT = 288,
-     LEX_EXIT = 289,
-     LEX_FUNCTION = 290,
-     LEX_BEGINFILE = 291,
-     LEX_ENDFILE = 292,
-     LEX_GETLINE = 293,
-     LEX_NEXTFILE = 294,
-     LEX_IN = 295,
-     LEX_AND = 296,
-     LEX_OR = 297,
-     INCREMENT = 298,
-     DECREMENT = 299,
-     LEX_BUILTIN = 300,
-     LEX_LENGTH = 301,
-     LEX_EOF = 302,
-     LEX_INCLUDE = 303,
-     LEX_EVAL = 304,
-     LEX_LOAD = 305,
-     NEWLINE = 306,
-     SLASH_BEFORE_EQUAL = 307,
-     UNARY = 308
-   };
+  enum yytokentype
+  {
+    FUNC_CALL = 258,
+    NAME = 259,
+    REGEXP = 260,
+    FILENAME = 261,
+    YNUMBER = 262,
+    YSTRING = 263,
+    RELOP = 264,
+    IO_OUT = 265,
+    IO_IN = 266,
+    ASSIGNOP = 267,
+    ASSIGN = 268,
+    MATCHOP = 269,
+    CONCAT_OP = 270,
+    SUBSCRIPT = 271,
+    LEX_BEGIN = 272,
+    LEX_END = 273,
+    LEX_IF = 274,
+    LEX_ELSE = 275,
+    LEX_RETURN = 276,
+    LEX_DELETE = 277,
+    LEX_SWITCH = 278,
+    LEX_CASE = 279,
+    LEX_DEFAULT = 280,
+    LEX_WHILE = 281,
+    LEX_DO = 282,
+    LEX_FOR = 283,
+    LEX_BREAK = 284,
+    LEX_CONTINUE = 285,
+    LEX_PRINT = 286,
+    LEX_PRINTF = 287,
+    LEX_NEXT = 288,
+    LEX_EXIT = 289,
+    LEX_FUNCTION = 290,
+    LEX_BEGINFILE = 291,
+    LEX_ENDFILE = 292,
+    LEX_GETLINE = 293,
+    LEX_NEXTFILE = 294,
+    LEX_IN = 295,
+    LEX_AND = 296,
+    LEX_OR = 297,
+    INCREMENT = 298,
+    DECREMENT = 299,
+    LEX_BUILTIN = 300,
+    LEX_LENGTH = 301,
+    LEX_EOF = 302,
+    LEX_INCLUDE = 303,
+    LEX_EVAL = 304,
+    LEX_LOAD = 305,
+    NEWLINE = 306,
+    SLASH_BEFORE_EQUAL = 307,
+    UNARY = 308
+  };
 #endif
 /* Tokens.  */
 #define FUNC_CALL 258
@@ -345,37 +342,23 @@ extern int yydebug;
 #define SLASH_BEFORE_EQUAL 307
 #define UNARY 308
 
-
-
+/* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 typedef int YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
 #endif
 
+
 extern YYSTYPE yylval;
 
-#ifdef YYPARSE_PARAM
-#if defined __STDC__ || defined __cplusplus
-int yyparse (void *YYPARSE_PARAM);
-#else
-int yyparse ();
-#endif
-#else /* ! YYPARSE_PARAM */
-#if defined __STDC__ || defined __cplusplus
 int yyparse (void);
-#else
-int yyparse ();
-#endif
-#endif /* ! YYPARSE_PARAM */
 
 
 
 /* Copy the second part of user declarations.  */
 
-/* Line 390 of yacc.c  */
-#line 379 "awkgram.c"
+#line 362 "awkgram.c" /* yacc.c:358  */
 
 #ifdef short
 # undef short
@@ -389,11 +372,8 @@ typedef unsigned char yytype_uint8;
 
 #ifdef YYTYPE_INT8
 typedef YYTYPE_INT8 yytype_int8;
-#elif (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-typedef signed char yytype_int8;
 #else
-typedef short int yytype_int8;
+typedef signed char yytype_int8;
 #endif
 
 #ifdef YYTYPE_UINT16
@@ -413,8 +393,7 @@ typedef short int yytype_int16;
 #  define YYSIZE_T __SIZE_TYPE__
 # elif defined size_t
 #  define YYSIZE_T size_t
-# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
+# elif ! defined YYSIZE_T
 #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
 #  define YYSIZE_T size_t
 # else
@@ -436,6 +415,33 @@ typedef short int yytype_int16;
 # endif
 #endif
 
+#ifndef YY_ATTRIBUTE
+# if (defined __GNUC__                                               \
+      && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__)))  \
+     || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
+#  define YY_ATTRIBUTE(Spec) __attribute__(Spec)
+# else
+#  define YY_ATTRIBUTE(Spec) /* empty */
+# endif
+#endif
+
+#ifndef YY_ATTRIBUTE_PURE
+# define YY_ATTRIBUTE_PURE   YY_ATTRIBUTE ((__pure__))
+#endif
+
+#ifndef YY_ATTRIBUTE_UNUSED
+# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
+#endif
+
+#if !defined _Noreturn \
+     && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112)
+# if defined _MSC_VER && 1200 <= _MSC_VER
+#  define _Noreturn __declspec (noreturn)
+# else
+#  define _Noreturn YY_ATTRIBUTE ((__noreturn__))
+# endif
+#endif
+
 /* Suppress unused-variable warnings by "using" E.  */
 #if ! defined lint || defined __GNUC__
 # define YYUSE(E) ((void) (E))
@@ -443,24 +449,26 @@ typedef short int yytype_int16;
 # define YYUSE(E) /* empty */
 #endif
 
-/* Identity function, used to suppress warnings about constant conditions.  */
-#ifndef lint
-# define YYID(N) (N)
+#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
+/* Suppress an incorrect diagnostic about yylval being uninitialized.  */
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
+    _Pragma ("GCC diagnostic push") \
+    _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
+    _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
+    _Pragma ("GCC diagnostic pop")
 #else
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static int
-YYID (int yyi)
-#else
-static int
-YYID (yyi)
-    int yyi;
+# define YY_INITIAL_VALUE(Value) Value
 #endif
-{
-  return yyi;
-}
+#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END
+#endif
+#ifndef YY_INITIAL_VALUE
+# define YY_INITIAL_VALUE(Value) /* Nothing. */
 #endif
 
+
 #if ! defined yyoverflow || YYERROR_VERBOSE
 
 /* The parser invokes alloca or malloc; define the necessary symbols.  */
@@ -478,8 +486,7 @@ YYID (yyi)
 #    define alloca _alloca
 #   else
 #    define YYSTACK_ALLOC alloca
-#    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || 
defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
+#    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
 #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
       /* Use EXIT_SUCCESS as a witness for stdlib.h.  */
 #     ifndef EXIT_SUCCESS
@@ -491,8 +498,8 @@ YYID (yyi)
 # endif
 
 # ifdef YYSTACK_ALLOC
-   /* Pacify GCC's `empty if-body' warning.  */
-#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+   /* 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
@@ -508,7 +515,7 @@ YYID (yyi)
 #  endif
 #  if (defined __cplusplus && ! defined EXIT_SUCCESS \
        && ! ((defined YYMALLOC || defined malloc) \
-            && (defined YYFREE || defined free)))
+             && (defined YYFREE || defined free)))
 #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
 #   ifndef EXIT_SUCCESS
 #    define EXIT_SUCCESS 0
@@ -516,15 +523,13 @@ YYID (yyi)
 #  endif
 #  ifndef YYMALLOC
 #   define YYMALLOC malloc
-#   if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || 
defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
+#   if ! defined malloc && ! defined EXIT_SUCCESS
 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
 #   endif
 #  endif
 #  ifndef YYFREE
 #   define YYFREE free
-#   if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || 
defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
+#   if ! defined free && ! defined EXIT_SUCCESS
 void free (void *); /* INFRINGES ON USER NAME SPACE */
 #   endif
 #  endif
@@ -534,7 +539,7 @@ void free (void *); /* INFRINGES ON USER NAME SPACE */
 
 #if (! defined yyoverflow \
      && (! defined __cplusplus \
-        || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+         || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
 
 /* A type that is properly aligned for any stack member.  */
 union yyalloc
@@ -559,16 +564,16 @@ union yyalloc
    elements in the stack, and YYPTR gives the new location of the
    stack.  Advance YYPTR to a properly aligned location for the next
    stack.  */
-# define YYSTACK_RELOCATE(Stack_alloc, Stack)                          \
-    do                                                                 \
-      {                                                                        
\
-       YYSIZE_T yynewbytes;                                            \
-       YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
-       Stack = &yyptr->Stack_alloc;                                    \
-       yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
-       yyptr += yynewbytes / sizeof (*yyptr);                          \
-      }                                                                        
\
-    while (YYID (0))
+# define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
+    do                                                                  \
+      {                                                                 \
+        YYSIZE_T yynewbytes;                                            \
+        YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
+        Stack = &yyptr->Stack_alloc;                                    \
+        yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+        yyptr += yynewbytes / sizeof (*yyptr);                          \
+      }                                                                 \
+    while (0)
 
 #endif
 
@@ -587,7 +592,7 @@ union yyalloc
           for (yyi = 0; yyi < (Count); yyi++)   \
             (Dst)[yyi] = (Src)[yyi];            \
         }                                       \
-      while (YYID (0))
+      while (0)
 #  endif
 # endif
 #endif /* !YYCOPY_NEEDED */
@@ -603,17 +608,19 @@ union yyalloc
 #define YYNNTS  65
 /* YYNRULES -- Number of rules.  */
 #define YYNRULES  188
-/* YYNRULES -- Number of states.  */
+/* YYNSTATES -- Number of states.  */
 #define YYNSTATES  335
 
-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
+   by yylex, with out-of-bounds checking.  */
 #define YYUNDEFTOK  2
 #define YYMAXUTOK   308
 
-#define YYTRANSLATE(YYX)                                               \
+#define YYTRANSLATE(YYX)                                                \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
 
-/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
+/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
+   as returned by yylex, without out-of-bounds checking.  */
 static const yytype_uint8 yytranslate[] =
 {
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -650,117 +657,28 @@ static const yytype_uint8 yytranslate[] =
 };
 
 #if YYDEBUG
-/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
-   YYRHS.  */
-static const yytype_uint16 yyprhs[] =
-{
-       0,     0,     3,     4,     7,    10,    13,    16,    19,    22,
-      25,    30,    35,    37,    40,    42,    44,    47,    49,    50,
-      52,    57,    59,    61,    63,    65,    71,    73,    75,    77,
-      80,    82,    84,    91,    92,    96,    98,   100,   101,   104,
-     107,   109,   112,   115,   119,   121,   131,   138,   147,   156,
-     169,   181,   183,   186,   189,   192,   195,   199,   200,   205,
-     208,   209,   214,   215,   220,   225,   227,   228,   230,   231,
-     234,   237,   243,   248,   250,   253,   256,   258,   260,   262,
-     264,   266,   270,   271,   272,   276,   283,   293,   295,   298,
-     299,   301,   302,   305,   306,   308,   310,   314,   316,   319,
-     323,   324,   326,   327,   329,   331,   335,   337,   340,   344,
-     348,   352,   356,   360,   364,   368,   372,   378,   380,   382,
-     384,   387,   389,   391,   393,   395,   397,   399,   402,   404,
-     408,   412,   416,   420,   424,   428,   432,   435,   438,   444,
-     449,   453,   457,   461,   465,   469,   473,   475,   478,   482,
-     487,   492,   494,   496,   498,   501,   504,   506,   508,   511,
-     514,   516,   519,   524,   525,   527,   528,   531,   533,   536,
-     538,   542,   544,   547,   550,   552,   555,   557,   561,   563,
-     565,   566,   569,   572,   574,   575,   577,   579,   581
-};
-
-/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
-static const yytype_int16 yyrhs[] =
-{
-      76,     0,    -1,    -1,    76,    77,    -1,    76,   105,    -1,
-      76,    47,    -1,    76,     1,    -1,    80,    81,    -1,    80,
-      89,    -1,    84,    81,    -1,    69,    48,    78,    89,    -1,
-      69,    50,    79,    89,    -1,     6,    -1,     6,     1,    -1,
-       1,    -1,     6,    -1,     6,     1,    -1,     1,    -1,    -1,
-     113,    -1,   113,    55,   106,   113,    -1,    17,    -1,    18,
-      -1,    36,    -1,    37,    -1,   133,    88,   134,   136,   106,
-      -1,     4,    -1,     3,    -1,    83,    -1,    69,    49,    -1,
-      45,    -1,    46,    -1,    35,    82,    67,   108,   135,   106,
-      -1,    -1,    87,    86,     5,    -1,    61,    -1,    52,    -1,
-      -1,    88,    90,    -1,    88,     1,    -1,   105,    -1,   137,
-     106,    -1,   137,   106,    -1,   133,    88,   134,    -1,   104,
-      -1,    23,    67,   113,   135,   106,   133,    97,   106,   134,
-      -1,    26,    67,   113,   135,   106,    90,    -1,    27,   106,
-      90,    26,    67,   113,   135,   106,    -1,    28,    67,     4,
-      40,   130,   135,   106,    90,    -1,    28,    67,    96,   137,
-     106,   113,   137,   106,    96,   135,   106,    90,    -1,    28,
-      67,    96,   137,   106,   137,   106,    96,   135,   106,    90,
-      -1,    91,    -1,    29,    89,    -1,    30,    89,    -1,    33,
-      89,    -1,    39,    89,    -1,    34,   110,    89,    -1,    -1,
-      21,    92,   110,    89,    -1,    93,    89,    -1,    -1,   100,
-      94,   101,   102,    -1,    -1,    22,     4,    95,   124,    -1,
-      22,    67,     4,    68,    -1,   113,    -1,    -1,    93,    -1,
-      -1,    97,    98,    -1,    97,     1,    -1,    24,    99,   138,
-     106,    88,    -1,    25,   138,   106,    88,    -1,     7,    -1,
-      59,     7,    -1,    58,     7,    -1,     8,    -1,    85,    -1,
-      31,    -1,    32,    -1,   111,    -1,    67,   112,   135,    -1,
-      -1,    -1,    10,   103,   117,    -1,    19,    67,   113,   135,
-     106,    90,    -1,    19,    67,   113,   135,   106,    90,    20,
-     106,    90,    -1,    51,    -1,   105,    51,    -1,    -1,   105,
-      -1,    -1,    56,   118,    -1,    -1,   109,    -1,     4,    -1,
-     109,   139,     4,    -1,     1,    -1,   109,     1,    -1,   109,
-     139,     1,    -1,    -1,   113,    -1,    -1,   112,    -1,   113,
-      -1,   112,   139,   113,    -1,     1,    -1,   112,     1,    -1,
-     112,     1,   113,    -1,   112,   139,     1,    -1,   131,   114,
-     113,    -1,   113,    41,   113,    -1,   113,    42,   113,    -1,
-     113,    14,   113,    -1,   113,    40,   130,    -1,   113,   116,
-     113,    -1,   113,    53,   113,    54,   113,    -1,   117,    -1,
-      13,    -1,    12,    -1,    52,    13,    -1,     9,    -1,    56,
-      -1,   115,    -1,    57,    -1,   118,    -1,   119,    -1,   117,
-     118,    -1,   120,    -1,   118,    65,   118,    -1,   118,    60,
-     118,    -1,   118,    61,   118,    -1,   118,    62,   118,    -1,
-     118,    58,   118,    -1,   118,    59,   118,    -1,    38,   123,
-     107,    -1,   131,    43,    -1,   131,    44,    -1,    67,   112,
-     135,    40,   130,    -1,   117,    11,    38,   123,    -1,   119,
-      65,   118,    -1,   119,    60,   118,    -1,   119,    61,   118,
-      -1,   119,    62,   118,    -1,   119,    58,   118,    -1,   119,
-      59,   118,    -1,    85,    -1,    63,   118,    -1,    67,   113,
-     135,    -1,    45,    67,   111,   135,    -1,    46,    67,   111,
-     135,    -1,    46,    -1,   121,    -1,   131,    -1,    43,   131,
-      -1,    44,   131,    -1,     7,    -1,     8,    -1,    59,   118,
-      -1,    58,   118,    -1,   122,    -1,    69,   122,    -1,     3,
-      67,   111,   135,    -1,    -1,   131,    -1,    -1,   125,    16,
-      -1,   126,    -1,   125,   126,    -1,   127,    -1,    70,   112,
-      71,    -1,   127,    -1,   128,   127,    -1,   128,    16,    -1,
-       4,    -1,     4,   129,    -1,   130,    -1,    66,   120,   132,
-      -1,    43,    -1,    44,    -1,    -1,    72,   106,    -1,    73,
-     106,    -1,    68,    -1,    -1,   137,    -1,    74,    -1,    54,
-      -1,    55,   106,    -1
-};
-
-/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
+  /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
        0,   207,   207,   209,   214,   215,   221,   233,   237,   248,
      254,   259,   267,   275,   277,   282,   290,   292,   298,   305,
      314,   340,   353,   365,   372,   382,   394,   396,   398,   404,
-     409,   410,   414,   443,   442,   476,   478,   483,   489,   517,
-     522,   523,   527,   529,   531,   538,   628,   670,   712,   825,
-     832,   839,   849,   858,   867,   876,   887,   903,   902,   926,
-     938,   938,  1036,  1036,  1069,  1099,  1105,  1106,  1112,  1113,
-    1120,  1125,  1137,  1151,  1153,  1161,  1166,  1168,  1176,  1178,
-    1187,  1188,  1196,  1201,  1201,  1212,  1216,  1224,  1225,  1228,
-    1230,  1235,  1236,  1245,  1246,  1251,  1256,  1262,  1264,  1266,
-    1273,  1274,  1280,  1281,  1286,  1288,  1293,  1295,  1303,  1308,
-    1317,  1324,  1326,  1328,  1344,  1354,  1361,  1363,  1368,  1370,
-    1372,  1380,  1382,  1387,  1389,  1394,  1396,  1398,  1448,  1450,
-    1452,  1454,  1456,  1458,  1460,  1462,  1476,  1481,  1486,  1511,
-    1517,  1519,  1521,  1523,  1525,  1527,  1532,  1536,  1568,  1570,
-    1576,  1582,  1595,  1596,  1597,  1602,  1607,  1611,  1615,  1630,
-    1643,  1648,  1684,  1702,  1703,  1709,  1710,  1715,  1717,  1724,
-    1741,  1758,  1760,  1767,  1772,  1780,  1790,  1802,  1811,  1815,
-    1819,  1823,  1827,  1831,  1834,  1836,  1840,  1844,  1848
+     409,   410,   414,   449,   448,   482,   484,   489,   495,   523,
+     528,   529,   533,   535,   537,   544,   634,   676,   718,   831,
+     838,   845,   855,   864,   873,   882,   893,   909,   908,   932,
+     944,   944,  1042,  1042,  1075,  1105,  1111,  1112,  1118,  1119,
+    1126,  1131,  1143,  1157,  1159,  1167,  1172,  1174,  1182,  1184,
+    1193,  1194,  1202,  1207,  1207,  1218,  1222,  1230,  1231,  1234,
+    1236,  1241,  1242,  1251,  1252,  1257,  1262,  1268,  1270,  1272,
+    1279,  1280,  1286,  1287,  1292,  1294,  1299,  1301,  1309,  1314,
+    1323,  1330,  1332,  1334,  1350,  1360,  1367,  1369,  1374,  1376,
+    1378,  1386,  1388,  1393,  1395,  1400,  1402,  1404,  1454,  1456,
+    1458,  1460,  1462,  1464,  1466,  1468,  1482,  1487,  1492,  1517,
+    1523,  1525,  1527,  1529,  1531,  1533,  1538,  1542,  1574,  1576,
+    1582,  1588,  1601,  1602,  1603,  1608,  1613,  1617,  1621,  1636,
+    1649,  1654,  1690,  1708,  1709,  1715,  1716,  1721,  1723,  1730,
+    1747,  1764,  1766,  1773,  1778,  1786,  1796,  1808,  1817,  1821,
+    1825,  1829,  1833,  1837,  1840,  1842,  1846,  1850,  1854
 };
 #endif
 
@@ -793,13 +711,13 @@ static const char *const yytname[] =
   "func_call", "direct_func_call", "opt_variable", "delete_subscript_list",
   "delete_subscript", "delete_exp_list", "bracketed_exp_list", "subscript",
   "subscript_list", "simple_variable", "variable", "opt_incdec", "l_brace",
-  "r_brace", "r_paren", "opt_semi", "semi", "colon", "comma", YY_NULL
+  "r_brace", "r_paren", "opt_semi", "semi", "colon", "comma", YY_NULLPTR
 };
 #endif
 
 # ifdef YYPRINT
-/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
-   token YYLEX-NUM.  */
+/* YYTOKNUM[NUM] -- (External) token number corresponding to the
+   (internal) symbol number NUM (which must be that of a token).  */
 static const yytype_uint16 yytoknum[] =
 {
        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
@@ -813,110 +731,18 @@ static const yytype_uint16 yytoknum[] =
 };
 # endif
 
-/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
-static const yytype_uint8 yyr1[] =
-{
-       0,    75,    76,    76,    76,    76,    76,    77,    77,    77,
-      77,    77,    78,    78,    78,    79,    79,    79,    80,    80,
-      80,    80,    80,    80,    80,    81,    82,    82,    82,    82,
-      83,    83,    84,    86,    85,    87,    87,    88,    88,    88,
-      89,    89,    90,    90,    90,    90,    90,    90,    90,    90,
-      90,    90,    91,    91,    91,    91,    91,    92,    91,    91,
-      94,    93,    95,    93,    93,    93,    96,    96,    97,    97,
-      97,    98,    98,    99,    99,    99,    99,    99,   100,   100,
-     101,   101,   102,   103,   102,   104,   104,   105,   105,   106,
-     106,   107,   107,   108,   108,   109,   109,   109,   109,   109,
-     110,   110,   111,   111,   112,   112,   112,   112,   112,   112,
-     113,   113,   113,   113,   113,   113,   113,   113,   114,   114,
-     114,   115,   115,   116,   116,   117,   117,   117,   118,   118,
-     118,   118,   118,   118,   118,   118,   118,   118,   118,   119,
-     119,   119,   119,   119,   119,   119,   120,   120,   120,   120,
-     120,   120,   120,   120,   120,   120,   120,   120,   120,   120,
-     121,   121,   122,   123,   123,   124,   124,   125,   125,   126,
-     127,   128,   128,   129,   130,   130,   131,   131,   132,   132,
-     132,   133,   134,   135,   136,   136,   137,   138,   139
-};
+#define YYPACT_NINF -273
 
-/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
-static const yytype_uint8 yyr2[] =
-{
-       0,     2,     0,     2,     2,     2,     2,     2,     2,     2,
-       4,     4,     1,     2,     1,     1,     2,     1,     0,     1,
-       4,     1,     1,     1,     1,     5,     1,     1,     1,     2,
-       1,     1,     6,     0,     3,     1,     1,     0,     2,     2,
-       1,     2,     2,     3,     1,     9,     6,     8,     8,    12,
-      11,     1,     2,     2,     2,     2,     3,     0,     4,     2,
-       0,     4,     0,     4,     4,     1,     0,     1,     0,     2,
-       2,     5,     4,     1,     2,     2,     1,     1,     1,     1,
-       1,     3,     0,     0,     3,     6,     9,     1,     2,     0,
-       1,     0,     2,     0,     1,     1,     3,     1,     2,     3,
-       0,     1,     0,     1,     1,     3,     1,     2,     3,     3,
-       3,     3,     3,     3,     3,     3,     5,     1,     1,     1,
-       2,     1,     1,     1,     1,     1,     1,     2,     1,     3,
-       3,     3,     3,     3,     3,     3,     2,     2,     5,     4,
-       3,     3,     3,     3,     3,     3,     1,     2,     3,     4,
-       4,     1,     1,     1,     2,     2,     1,     1,     2,     2,
-       1,     2,     4,     0,     1,     0,     2,     1,     2,     1,
-       3,     1,     2,     2,     1,     2,     1,     3,     1,     1,
-       0,     2,     2,     1,     0,     1,     1,     1,     2
-};
+#define yypact_value_is_default(Yystate) \
+  (!!((Yystate) == (-273)))
 
-/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
-   Performed when YYTABLE doesn't specify something else to do.  Zero
-   means the default is an error.  */
-static const yytype_uint8 yydefact[] =
-{
-       2,     0,     1,     6,     0,   174,   156,   157,    21,    22,
-       0,    23,    24,   163,     0,     0,     0,   151,     5,    87,
-      36,     0,     0,    35,     0,     0,     0,     0,     3,     0,
-       0,   146,    33,     4,    19,   117,   125,   126,   128,   152,
-     160,   176,   153,     0,     0,   171,     0,   175,    27,    26,
-      30,    31,     0,     0,    28,    91,   164,   154,   155,     0,
-       0,     0,   159,   153,   158,   147,     0,   180,   153,   106,
-       0,   104,     0,     0,   161,    89,   186,     7,     8,    40,
-      37,    89,     9,     0,    88,   121,     0,     0,     0,     0,
-       0,    89,   122,   124,   123,     0,     0,   127,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     119,   118,   136,   137,     0,     0,     0,     0,   104,     0,
-     173,   172,    29,     0,     0,   135,     0,     0,     0,   178,
-     179,   177,   107,    89,   183,     0,     0,   148,    14,     0,
-       0,    17,     0,     0,    90,   181,     0,    41,    34,   113,
-     114,   111,   112,     0,     0,   115,   163,   133,   134,   130,
-     131,   132,   129,   144,   145,   141,   142,   143,   140,   120,
-     110,   162,   170,    97,    95,     0,     0,    92,   149,   150,
-     108,   188,     0,   109,   105,    13,    10,    16,    11,    39,
-       0,    57,     0,     0,     0,    89,     0,     0,     0,    78,
-      79,     0,   100,     0,    89,    38,    51,     0,    60,    44,
-      65,    37,   184,    89,     0,    20,   139,    89,    98,     0,
-     138,     0,   100,    62,     0,     0,     0,     0,    66,    52,
-      53,    54,     0,   101,    55,   182,    59,     0,     0,    89,
-     185,    42,   116,    32,    99,    96,     0,     0,   165,     0,
-       0,     0,     0,   174,    67,     0,    56,     0,    82,    80,
-      43,    25,    89,    58,    63,     0,   167,   169,    64,    89,
-      89,     0,     0,    89,     0,    83,    61,     0,   166,   168,
-       0,     0,     0,     0,     0,    81,     0,    85,    68,    46,
-       0,    89,     0,    89,    84,    89,     0,    89,     0,    89,
-      66,     0,    70,     0,     0,    69,     0,    47,    48,    66,
-       0,    86,    73,    76,     0,     0,    77,     0,   187,    89,
-      45,     0,    89,    75,    74,    89,    37,    89,     0,    37,
-       0,     0,    50,     0,    49
-};
+#define YYTABLE_NINF -104
 
-/* YYDEFGOTO[NTERM-NUM].  */
-static const yytype_int16 yydefgoto[] =
-{
-      -1,     1,    28,   140,   143,    29,    77,    53,    54,    30,
-      31,    83,    32,   146,    78,   205,   206,   222,   207,   237,
-     248,   255,   296,   305,   317,   208,   258,   276,   286,   209,
-     144,   145,   125,   175,   176,   232,   116,   117,   210,   115,
-      94,    95,    35,    36,    37,    38,    39,    40,    55,   264,
-     265,   266,    45,    46,    47,    41,    42,   131,   211,   212,
-     137,   239,   213,   319,   136
-};
+#define yytable_value_is_error(Yytable_value) \
+  (!!((Yytable_value) == (-104)))
 
-/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
-   STATE-NUM.  */
-#define YYPACT_NINF -273
+  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+     STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
     -273,   376,  -273,  -273,   -27,   -21,  -273,  -273,  -273,  -273,
@@ -955,7 +781,48 @@ static const yytype_int16 yypact[] =
      448,   710,  -273,   522,  -273
 };
 
-/* YYPGOTO[NTERM-NUM].  */
+  /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
+     Performed when YYTABLE does not specify something else to do.  Zero
+     means the default is an error.  */
+static const yytype_uint8 yydefact[] =
+{
+       2,     0,     1,     6,     0,   174,   156,   157,    21,    22,
+       0,    23,    24,   163,     0,     0,     0,   151,     5,    87,
+      36,     0,     0,    35,     0,     0,     0,     0,     3,     0,
+       0,   146,    33,     4,    19,   117,   125,   126,   128,   152,
+     160,   176,   153,     0,     0,   171,     0,   175,    27,    26,
+      30,    31,     0,     0,    28,    91,   164,   154,   155,     0,
+       0,     0,   159,   153,   158,   147,     0,   180,   153,   106,
+       0,   104,     0,     0,   161,    89,   186,     7,     8,    40,
+      37,    89,     9,     0,    88,   121,     0,     0,     0,     0,
+       0,    89,   122,   124,   123,     0,     0,   127,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     119,   118,   136,   137,     0,     0,     0,     0,   104,     0,
+     173,   172,    29,     0,     0,   135,     0,     0,     0,   178,
+     179,   177,   107,    89,   183,     0,     0,   148,    14,     0,
+       0,    17,     0,     0,    90,   181,     0,    41,    34,   113,
+     114,   111,   112,     0,     0,   115,   163,   133,   134,   130,
+     131,   132,   129,   144,   145,   141,   142,   143,   140,   120,
+     110,   162,   170,    97,    95,     0,     0,    92,   149,   150,
+     108,   188,     0,   109,   105,    13,    10,    16,    11,    39,
+       0,    57,     0,     0,     0,    89,     0,     0,     0,    78,
+      79,     0,   100,     0,    89,    38,    51,     0,    60,    44,
+      65,    37,   184,    89,     0,    20,   139,    89,    98,     0,
+     138,     0,   100,    62,     0,     0,     0,     0,    66,    52,
+      53,    54,     0,   101,    55,   182,    59,     0,     0,    89,
+     185,    42,   116,    32,    99,    96,     0,     0,   165,     0,
+       0,     0,     0,   174,    67,     0,    56,     0,    82,    80,
+      43,    25,    89,    58,    63,     0,   167,   169,    64,    89,
+      89,     0,     0,    89,     0,    83,    61,     0,   166,   168,
+       0,     0,     0,     0,     0,    81,     0,    85,    68,    46,
+       0,    89,     0,    89,    84,    89,     0,    89,     0,    89,
+      66,     0,    70,     0,     0,    69,     0,    47,    48,    66,
+       0,    86,    73,    76,     0,     0,    77,     0,   187,    89,
+      45,     0,    89,    75,    74,    89,    37,    89,     0,    37,
+       0,     0,    50,     0,    49
+};
+
+  /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
     -273,  -273,  -273,  -273,  -273,  -273,   208,  -273,  -273,  -273,
@@ -967,10 +834,21 @@ static const yytype_int16 yypgoto[] =
      -46,  -273,   -25,   -57,    85
 };
 
-/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
-   positive, shift that token.  If negative, reduce the rule which
-   number is the opposite.  If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -104
+  /* YYDEFGOTO[NTERM-NUM].  */
+static const yytype_int16 yydefgoto[] =
+{
+      -1,     1,    28,   140,   143,    29,    77,    53,    54,    30,
+      31,    83,    32,   146,    78,   205,   206,   222,   207,   237,
+     248,   255,   296,   305,   317,   208,   258,   276,   286,   209,
+     144,   145,   125,   175,   176,   232,   116,   117,   210,   115,
+      94,    95,    35,    36,    37,    38,    39,    40,    55,   264,
+     265,   266,    45,    46,    47,    41,    42,   131,   211,   212,
+     137,   239,   213,   319,   136
+};
+
+  /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
+     positive, shift that token.  If negative, reduce the rule whose
+     number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
       34,    80,    80,    70,    81,   126,   127,   260,   121,   238,
@@ -1091,12 +969,6 @@ static const yytype_int16 yytable[] =
        0,    90,   214,     0,    92,    93
 };
 
-#define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-273)))
-
-#define yytable_value_is_error(Yytable_value) \
-  (!!((Yytable_value) == (-104)))
-
 static const yytype_int16 yycheck[] =
 {
        1,    29,    30,    26,    29,    59,    60,   238,    46,   211,
@@ -1217,8 +1089,8 @@ static const yytype_int16 yycheck[] =
       -1,    53,    54,    -1,    56,    57
 };
 
-/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
-   symbol of state STATE-NUM.  */
+  /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+     symbol of state STATE-NUM.  */
 static const yytype_uint8 yystos[] =
 {
        0,    76,     0,     1,     3,     4,     7,     8,    17,    18,
@@ -1257,30 +1129,64 @@ static const yytype_uint8 yystos[] =
       88,   106,    90,    88,    90
 };
 
-#define yyerrok                (yyerrstatus = 0)
-#define yyclearin      (yychar = YYEMPTY)
-#define YYEMPTY                (-2)
-#define YYEOF          0
-
-#define YYACCEPT       goto yyacceptlab
-#define YYABORT                goto yyabortlab
-#define YYERROR                goto yyerrorlab
-
-
-/* Like YYERROR except do call yyerror.  This remains here temporarily
-   to ease the transition to the new meaning of YYERROR, for GCC.
-   Once GCC version 2 has supplanted version 1, this can go.  However,
-   YYFAIL appears to be in use.  Nevertheless, it is formally deprecated
-   in Bison 2.4.2's NEWS entry, where a plan to phase it out is
-   discussed.  */
-
-#define YYFAIL         goto yyerrlab
-#if defined YYFAIL
-  /* This is here to suppress warnings from the GCC cpp's
-     -Wunused-macros.  Normally we don't worry about that warning, but
-     some users do, and we want to make it easy for users to remove
-     YYFAIL uses, which will produce warnings from Bison 2.5.  */
-#endif
+  /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+static const yytype_uint8 yyr1[] =
+{
+       0,    75,    76,    76,    76,    76,    76,    77,    77,    77,
+      77,    77,    78,    78,    78,    79,    79,    79,    80,    80,
+      80,    80,    80,    80,    80,    81,    82,    82,    82,    82,
+      83,    83,    84,    86,    85,    87,    87,    88,    88,    88,
+      89,    89,    90,    90,    90,    90,    90,    90,    90,    90,
+      90,    90,    91,    91,    91,    91,    91,    92,    91,    91,
+      94,    93,    95,    93,    93,    93,    96,    96,    97,    97,
+      97,    98,    98,    99,    99,    99,    99,    99,   100,   100,
+     101,   101,   102,   103,   102,   104,   104,   105,   105,   106,
+     106,   107,   107,   108,   108,   109,   109,   109,   109,   109,
+     110,   110,   111,   111,   112,   112,   112,   112,   112,   112,
+     113,   113,   113,   113,   113,   113,   113,   113,   114,   114,
+     114,   115,   115,   116,   116,   117,   117,   117,   118,   118,
+     118,   118,   118,   118,   118,   118,   118,   118,   118,   119,
+     119,   119,   119,   119,   119,   119,   120,   120,   120,   120,
+     120,   120,   120,   120,   120,   120,   120,   120,   120,   120,
+     121,   121,   122,   123,   123,   124,   124,   125,   125,   126,
+     127,   128,   128,   129,   130,   130,   131,   131,   132,   132,
+     132,   133,   134,   135,   136,   136,   137,   138,   139
+};
+
+  /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
+static const yytype_uint8 yyr2[] =
+{
+       0,     2,     0,     2,     2,     2,     2,     2,     2,     2,
+       4,     4,     1,     2,     1,     1,     2,     1,     0,     1,
+       4,     1,     1,     1,     1,     5,     1,     1,     1,     2,
+       1,     1,     6,     0,     3,     1,     1,     0,     2,     2,
+       1,     2,     2,     3,     1,     9,     6,     8,     8,    12,
+      11,     1,     2,     2,     2,     2,     3,     0,     4,     2,
+       0,     4,     0,     4,     4,     1,     0,     1,     0,     2,
+       2,     5,     4,     1,     2,     2,     1,     1,     1,     1,
+       1,     3,     0,     0,     3,     6,     9,     1,     2,     0,
+       1,     0,     2,     0,     1,     1,     3,     1,     2,     3,
+       0,     1,     0,     1,     1,     3,     1,     2,     3,     3,
+       3,     3,     3,     3,     3,     3,     5,     1,     1,     1,
+       2,     1,     1,     1,     1,     1,     1,     2,     1,     3,
+       3,     3,     3,     3,     3,     3,     2,     2,     5,     4,
+       3,     3,     3,     3,     3,     3,     1,     2,     3,     4,
+       4,     1,     1,     1,     2,     2,     1,     1,     2,     2,
+       1,     2,     4,     0,     1,     0,     2,     1,     2,     1,
+       3,     1,     2,     2,     1,     2,     1,     3,     1,     1,
+       0,     2,     2,     1,     0,     1,     1,     1,     2
+};
+
+
+#define yyerrok         (yyerrstatus = 0)
+#define yyclearin       (yychar = YYEMPTY)
+#define YYEMPTY         (-2)
+#define YYEOF           0
+
+#define YYACCEPT        goto yyacceptlab
+#define YYABORT         goto yyabortlab
+#define YYERROR         goto yyerrorlab
+
 
 #define YYRECOVERING()  (!!yyerrstatus)
 
@@ -1297,27 +1203,15 @@ do                                                      
        \
   else                                                          \
     {                                                           \
       yyerror (YY_("syntax error: cannot back up")); \
-      YYERROR;                                                 \
-    }                                                          \
-while (YYID (0))
+      YYERROR;                                                  \
+    }                                                           \
+while (0)
 
 /* Error token number */
-#define YYTERROR       1
-#define YYERRCODE      256
+#define YYTERROR        1
+#define YYERRCODE       256
 
 
-/* This macro is provided for backward compatibility. */
-#ifndef YY_LOCATION_PRINT
-# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
-#endif
-
-
-/* YYLEX -- calling `yylex' with the right arguments.  */
-#ifdef YYLEX_PARAM
-# define YYLEX yylex (YYLEX_PARAM)
-#else
-# define YYLEX yylex ()
-#endif
 
 /* Enable debugging if requested.  */
 #if YYDEBUG
@@ -1327,40 +1221,36 @@ while (YYID (0))
 #  define YYFPRINTF fprintf
 # endif
 
-# define YYDPRINTF(Args)                       \
-do {                                           \
-  if (yydebug)                                 \
-    YYFPRINTF Args;                            \
-} while (YYID (0))
+# define YYDPRINTF(Args)                        \
+do {                                            \
+  if (yydebug)                                  \
+    YYFPRINTF Args;                             \
+} while (0)
 
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)                   \
-do {                                                                     \
-  if (yydebug)                                                           \
-    {                                                                    \
-      YYFPRINTF (stderr, "%s ", Title);                                        
  \
-      yy_symbol_print (stderr,                                           \
-                 Type, Value); \
-      YYFPRINTF (stderr, "\n");                                                
  \
-    }                                                                    \
-} while (YYID (0))
+/* This macro is provided for backward compatibility. */
+#ifndef YY_LOCATION_PRINT
+# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+#endif
 
 
-/*--------------------------------.
-| Print this symbol on YYOUTPUT.  |
-`--------------------------------*/
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)                    \
+do {                                                                      \
+  if (yydebug)                                                            \
+    {                                                                     \
+      YYFPRINTF (stderr, "%s ", Title);                                   \
+      yy_symbol_print (stderr,                                            \
+                  Type, Value); \
+      YYFPRINTF (stderr, "\n");                                           \
+    }                                                                     \
+} while (0)
+
+
+/*----------------------------------------.
+| Print this symbol's value on YYOUTPUT.  |
+`----------------------------------------*/
 
-/*ARGSUSED*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 static void
 yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const 
yyvaluep)
-#else
-static void
-yy_symbol_value_print (yyoutput, yytype, yyvaluep)
-    FILE *yyoutput;
-    int yytype;
-    YYSTYPE const * const yyvaluep;
-#endif
 {
   FILE *yyo = yyoutput;
   YYUSE (yyo);
@@ -1369,14 +1259,8 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep)
 # ifdef YYPRINT
   if (yytype < YYNTOKENS)
     YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
-# else
-  YYUSE (yyoutput);
 # endif
-  switch (yytype)
-    {
-      default:
-        break;
-    }
+  YYUSE (yytype);
 }
 
 
@@ -1384,22 +1268,11 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep)
 | Print this symbol on YYOUTPUT.  |
 `--------------------------------*/
 
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 static void
 yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
-#else
-static void
-yy_symbol_print (yyoutput, yytype, yyvaluep)
-    FILE *yyoutput;
-    int yytype;
-    YYSTYPE const * const yyvaluep;
-#endif
 {
-  if (yytype < YYNTOKENS)
-    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
-  else
-    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+  YYFPRINTF (yyoutput, "%s %s (",
+             yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
 
   yy_symbol_value_print (yyoutput, yytype, yyvaluep);
   YYFPRINTF (yyoutput, ")");
@@ -1410,16 +1283,8 @@ yy_symbol_print (yyoutput, yytype, yyvaluep)
 | TOP (included).                                                   |
 `------------------------------------------------------------------*/
 
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 static void
 yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
-#else
-static void
-yy_stack_print (yybottom, yytop)
-    yytype_int16 *yybottom;
-    yytype_int16 *yytop;
-#endif
 {
   YYFPRINTF (stderr, "Stack now");
   for (; yybottom <= yytop; yybottom++)
@@ -1430,49 +1295,42 @@ yy_stack_print (yybottom, yytop)
   YYFPRINTF (stderr, "\n");
 }
 
-# define YY_STACK_PRINT(Bottom, Top)                           \
-do {                                                           \
-  if (yydebug)                                                 \
-    yy_stack_print ((Bottom), (Top));                          \
-} while (YYID (0))
+# define YY_STACK_PRINT(Bottom, Top)                            \
+do {                                                            \
+  if (yydebug)                                                  \
+    yy_stack_print ((Bottom), (Top));                           \
+} while (0)
 
 
 /*------------------------------------------------.
 | Report that the YYRULE is going to be reduced.  |
 `------------------------------------------------*/
 
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 static void
-yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
-#else
-static void
-yy_reduce_print (yyvsp, yyrule)
-    YYSTYPE *yyvsp;
-    int yyrule;
-#endif
+yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule)
 {
+  unsigned long int yylno = yyrline[yyrule];
   int yynrhs = yyr2[yyrule];
   int yyi;
-  unsigned long int yylno = yyrline[yyrule];
   YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
-            yyrule - 1, yylno);
+             yyrule - 1, yylno);
   /* The symbols being reduced.  */
   for (yyi = 0; yyi < yynrhs; yyi++)
     {
       YYFPRINTF (stderr, "   $%d = ", yyi + 1);
-      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
-                      &(yyvsp[(yyi + 1) - (yynrhs)])
-                                      );
+      yy_symbol_print (stderr,
+                       yystos[yyssp[yyi + 1 - yynrhs]],
+                       &(yyvsp[(yyi + 1) - (yynrhs)])
+                                              );
       YYFPRINTF (stderr, "\n");
     }
 }
 
-# define YY_REDUCE_PRINT(Rule)         \
-do {                                   \
-  if (yydebug)                         \
-    yy_reduce_print (yyvsp, Rule); \
-} while (YYID (0))
+# define YY_REDUCE_PRINT(Rule)          \
+do {                                    \
+  if (yydebug)                          \
+    yy_reduce_print (yyssp, yyvsp, Rule); \
+} while (0)
 
 /* Nonzero means print parse trace.  It is left uninitialized so that
    multiple parsers can coexist.  */
@@ -1486,7 +1344,7 @@ int yydebug;
 
 
 /* YYINITDEPTH -- initial size of the parser's stacks.  */
-#ifndef        YYINITDEPTH
+#ifndef YYINITDEPTH
 # define YYINITDEPTH 200
 #endif
 
@@ -1509,15 +1367,8 @@ int yydebug;
 #   define yystrlen strlen
 #  else
 /* Return the length of YYSTR.  */
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 static YYSIZE_T
 yystrlen (const char *yystr)
-#else
-static YYSIZE_T
-yystrlen (yystr)
-    const char *yystr;
-#endif
 {
   YYSIZE_T yylen;
   for (yylen = 0; yystr[yylen]; yylen++)
@@ -1533,16 +1384,8 @@ yystrlen (yystr)
 #  else
 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
    YYDEST.  */
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 static char *
 yystpcpy (char *yydest, const char *yysrc)
-#else
-static char *
-yystpcpy (yydest, yysrc)
-    char *yydest;
-    const char *yysrc;
-#endif
 {
   char *yyd = yydest;
   const char *yys = yysrc;
@@ -1572,27 +1415,27 @@ yytnamerr (char *yyres, const char *yystr)
       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;
-         }
+        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: ;
     }
 
@@ -1615,11 +1458,11 @@ static int
 yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
                 yytype_int16 *yyssp, int yytoken)
 {
-  YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]);
+  YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
   YYSIZE_T yysize = yysize0;
   enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
   /* Internationalized format string. */
-  const char *yyformat = YY_NULL;
+  const char *yyformat = YY_NULLPTR;
   /* Arguments of yyformat. */
   char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
   /* Number of reported tokens (one for the "unexpected", one per
@@ -1627,10 +1470,6 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
   int yycount = 0;
 
   /* There are many possibilities here to consider:
-     - Assume YYFAIL is not used.  It's too flawed to consider.  See
-       <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
-       for details.  YYERROR is fine as it does not invoke this
-       function.
      - If this state is a consistent state with a default action, then
        the only way this function was invoked is if the default action
        is an error action.  In that case, don't check for expected
@@ -1680,7 +1519,7 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
                   }
                 yyarg[yycount++] = yytname[yyx];
                 {
-                  YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULL, 
yytname[yyx]);
+                  YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, 
yytname[yyx]);
                   if (! (yysize <= yysize1
                          && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
                     return 2;
@@ -1747,31 +1586,17 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
 | Release the memory associated to this symbol.  |
 `-----------------------------------------------*/
 
-/*ARGSUSED*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 static void
 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
-#else
-static void
-yydestruct (yymsg, yytype, yyvaluep)
-    const char *yymsg;
-    int yytype;
-    YYSTYPE *yyvaluep;
-#endif
 {
   YYUSE (yyvaluep);
-
   if (!yymsg)
     yymsg = "Deleting";
   YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
 
-  switch (yytype)
-    {
-
-      default:
-        break;
-    }
+  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+  YYUSE (yytype);
+  YY_IGNORE_MAYBE_UNINITIALIZED_END
 }
 
 
@@ -1780,18 +1605,8 @@ yydestruct (yymsg, yytype, yyvaluep)
 /* The lookahead symbol.  */
 int yychar;
 
-
-#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-# define YY_IGNORE_MAYBE_UNINITIALIZED_END
-#endif
-#ifndef YY_INITIAL_VALUE
-# define YY_INITIAL_VALUE(Value) /* Nothing. */
-#endif
-
 /* The semantic value of the lookahead symbol.  */
-YYSTYPE yylval YY_INITIAL_VALUE(yyval_default);
-
+YYSTYPE yylval;
 /* Number of syntax errors so far.  */
 int yynerrs;
 
@@ -1800,35 +1615,16 @@ int yynerrs;
 | yyparse.  |
 `----------*/
 
-#ifdef YYPARSE_PARAM
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-int
-yyparse (void *YYPARSE_PARAM)
-#else
-int
-yyparse (YYPARSE_PARAM)
-    void *YYPARSE_PARAM;
-#endif
-#else /* ! YYPARSE_PARAM */
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 int
 yyparse (void)
-#else
-int
-yyparse ()
-
-#endif
-#endif
 {
     int yystate;
     /* Number of tokens to shift before error messages enabled.  */
     int yyerrstatus;
 
     /* The stacks and their tools:
-       `yyss': related to states.
-       `yyvs': related to semantic values.
+       'yyss': related to states.
+       'yyvs': related to semantic values.
 
        Refer to the stacks through separate pointers, to allow yyoverflow
        to reallocate them elsewhere.  */
@@ -1896,23 +1692,23 @@ yyparse ()
 
 #ifdef yyoverflow
       {
-       /* Give user a chance to reallocate the stack.  Use copies of
-          these so that the &'s don't force the real ones into
-          memory.  */
-       YYSTYPE *yyvs1 = yyvs;
-       yytype_int16 *yyss1 = yyss;
-
-       /* 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 (YY_("memory exhausted"),
-                   &yyss1, yysize * sizeof (*yyssp),
-                   &yyvs1, yysize * sizeof (*yyvsp),
-                   &yystacksize);
-
-       yyss = yyss1;
-       yyvs = yyvs1;
+        /* Give user a chance to reallocate the stack.  Use copies of
+           these so that the &'s don't force the real ones into
+           memory.  */
+        YYSTYPE *yyvs1 = yyvs;
+        yytype_int16 *yyss1 = yyss;
+
+        /* 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 (YY_("memory exhausted"),
+                    &yyss1, yysize * sizeof (*yyssp),
+                    &yyvs1, yysize * sizeof (*yyvsp),
+                    &yystacksize);
+
+        yyss = yyss1;
+        yyvs = yyvs1;
       }
 #else /* no yyoverflow */
 # ifndef YYSTACK_RELOCATE
@@ -1920,22 +1716,22 @@ yyparse ()
 # else
       /* Extend the stack our own way.  */
       if (YYMAXDEPTH <= yystacksize)
-       goto yyexhaustedlab;
+        goto yyexhaustedlab;
       yystacksize *= 2;
       if (YYMAXDEPTH < yystacksize)
-       yystacksize = YYMAXDEPTH;
+        yystacksize = YYMAXDEPTH;
 
       {
-       yytype_int16 *yyss1 = yyss;
-       union yyalloc *yyptr =
-         (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
-       if (! yyptr)
-         goto yyexhaustedlab;
-       YYSTACK_RELOCATE (yyss_alloc, yyss);
-       YYSTACK_RELOCATE (yyvs_alloc, yyvs);
+        yytype_int16 *yyss1 = yyss;
+        union yyalloc *yyptr =
+          (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+        if (! yyptr)
+          goto yyexhaustedlab;
+        YYSTACK_RELOCATE (yyss_alloc, yyss);
+        YYSTACK_RELOCATE (yyvs_alloc, yyvs);
 #  undef YYSTACK_RELOCATE
-       if (yyss1 != yyssa)
-         YYSTACK_FREE (yyss1);
+        if (yyss1 != yyssa)
+          YYSTACK_FREE (yyss1);
       }
 # endif
 #endif /* no yyoverflow */
@@ -1944,10 +1740,10 @@ yyparse ()
       yyvsp = yyvs + yysize - 1;
 
       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
-                 (unsigned long int) yystacksize));
+                  (unsigned long int) yystacksize));
 
       if (yyss + yystacksize - 1 <= yyssp)
-       YYABORT;
+        YYABORT;
     }
 
   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
@@ -1976,7 +1772,7 @@ yybackup:
   if (yychar == YYEMPTY)
     {
       YYDPRINTF ((stderr, "Reading a token: "));
-      yychar = YYLEX;
+      yychar = yylex ();
     }
 
   if (yychar <= YYEOF)
@@ -2041,7 +1837,7 @@ yyreduce:
   yylen = yyr2[yyn];
 
   /* If YYLEN is nonzero, implement the default value of the action:
-     `$$ = $1'.
+     '$$ = $1'.
 
      Otherwise, the following line sets YYVAL to garbage.
      This behavior is undocumented and Bison
@@ -2055,27 +1851,26 @@ yyreduce:
   switch (yyn)
     {
         case 3:
-/* Line 1792 of yacc.c  */
-#line 210 "awkgram.y"
+#line 210 "awkgram.y" /* yacc.c:1646  */
     {
                rule = 0;
                yyerrok;
          }
+#line 1860 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 5:
-/* Line 1792 of yacc.c  */
-#line 216 "awkgram.y"
+#line 216 "awkgram.y" /* yacc.c:1646  */
     {
                next_sourcefile();
                if (sourcefile == srcfiles)
                        process_deferred();
          }
+#line 1870 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 6:
-/* Line 1792 of yacc.c  */
-#line 222 "awkgram.y"
+#line 222 "awkgram.y" /* yacc.c:1646  */
     {
                rule = 0;
                /*
@@ -2084,306 +1879,312 @@ yyreduce:
                 */
                /* yyerrok; */
          }
+#line 1883 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 7:
-/* Line 1792 of yacc.c  */
-#line 234 "awkgram.y"
+#line 234 "awkgram.y" /* yacc.c:1646  */
     {
-               (void) append_rule((yyvsp[(1) - (2)]), (yyvsp[(2) - (2)]));
+               (void) append_rule((yyvsp[-1]), (yyvsp[0]));
          }
+#line 1891 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 8:
-/* Line 1792 of yacc.c  */
-#line 238 "awkgram.y"
+#line 238 "awkgram.y" /* yacc.c:1646  */
     {
                if (rule != Rule) {
                        msg(_("%s blocks must have an action part"), 
ruletab[rule]);
                        errcount++;
-               } else if ((yyvsp[(1) - (2)]) == NULL) {
+               } else if ((yyvsp[-1]) == NULL) {
                        msg(_("each rule must have a pattern or an action 
part"));
                        errcount++;
                } else          /* pattern rule with non-empty pattern */
-                       (void) append_rule((yyvsp[(1) - (2)]), NULL);
+                       (void) append_rule((yyvsp[-1]), NULL);
          }
+#line 1906 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 9:
-/* Line 1792 of yacc.c  */
-#line 249 "awkgram.y"
+#line 249 "awkgram.y" /* yacc.c:1646  */
     {
                in_function = NULL;
-               (void) mk_function((yyvsp[(1) - (2)]), (yyvsp[(2) - (2)]));
+               (void) mk_function((yyvsp[-1]), (yyvsp[0]));
                yyerrok;
          }
+#line 1916 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 10:
-/* Line 1792 of yacc.c  */
-#line 255 "awkgram.y"
+#line 255 "awkgram.y" /* yacc.c:1646  */
     {
                want_source = false;
                yyerrok;
          }
+#line 1925 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 11:
-/* Line 1792 of yacc.c  */
-#line 260 "awkgram.y"
+#line 260 "awkgram.y" /* yacc.c:1646  */
     {
                want_source = false;
                yyerrok;
          }
+#line 1934 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 12:
-/* Line 1792 of yacc.c  */
-#line 268 "awkgram.y"
+#line 268 "awkgram.y" /* yacc.c:1646  */
     {
-               if (include_source((yyvsp[(1) - (1)])) < 0)
+               if (include_source((yyvsp[0])) < 0)
                        YYABORT;
-               efree((yyvsp[(1) - (1)])->lextok);
-               bcfree((yyvsp[(1) - (1)]));
+               efree((yyvsp[0])->lextok);
+               bcfree((yyvsp[0]));
                (yyval) = NULL;
          }
+#line 1946 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 13:
-/* Line 1792 of yacc.c  */
-#line 276 "awkgram.y"
+#line 276 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
+#line 1952 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 14:
-/* Line 1792 of yacc.c  */
-#line 278 "awkgram.y"
+#line 278 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
+#line 1958 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 15:
-/* Line 1792 of yacc.c  */
-#line 283 "awkgram.y"
+#line 283 "awkgram.y" /* yacc.c:1646  */
     {
-               if (load_library((yyvsp[(1) - (1)])) < 0)
+               if (load_library((yyvsp[0])) < 0)
                        YYABORT;
-               efree((yyvsp[(1) - (1)])->lextok);
-               bcfree((yyvsp[(1) - (1)]));
+               efree((yyvsp[0])->lextok);
+               bcfree((yyvsp[0]));
                (yyval) = NULL;
          }
+#line 1970 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 16:
-/* Line 1792 of yacc.c  */
-#line 291 "awkgram.y"
+#line 291 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
+#line 1976 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 17:
-/* Line 1792 of yacc.c  */
-#line 293 "awkgram.y"
+#line 293 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
+#line 1982 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 18:
-/* Line 1792 of yacc.c  */
-#line 298 "awkgram.y"
+#line 298 "awkgram.y" /* yacc.c:1646  */
     {  rule = Rule;
-               if (comment != NULL){
+               if (comment != NULL) {
                        (yyval) = list_create(comment);
                        comment = NULL;
                } else
                        (yyval) = NULL;
          }
+#line 1994 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 19:
-/* Line 1792 of yacc.c  */
-#line 306 "awkgram.y"
+#line 306 "awkgram.y" /* yacc.c:1646  */
     {  rule = Rule;
-               if (comment != NULL){
-                       (yyval) = list_prepend((yyvsp[(1) - (1)]), comment);
+               if (comment != NULL) {
+                       (yyval) = list_prepend((yyvsp[0]), comment);
                        comment = NULL;
                } else
-                       (yyval) = (yyvsp[(1) - (1)]);
+                       (yyval) = (yyvsp[0]);
          }
+#line 2006 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 20:
-/* Line 1792 of yacc.c  */
-#line 315 "awkgram.y"
+#line 315 "awkgram.y" /* yacc.c:1646  */
     {
                INSTRUCTION *tp;
 
-               add_lint((yyvsp[(1) - (4)]), LINT_assign_in_cond);
-               add_lint((yyvsp[(4) - (4)]), LINT_assign_in_cond);
+               add_lint((yyvsp[-3]), LINT_assign_in_cond);
+               add_lint((yyvsp[0]), LINT_assign_in_cond);
 
                tp = instruction(Op_no_op);
-               list_prepend((yyvsp[(1) - (4)]), bcalloc(Op_line_range, 
!!do_pretty_print + 1, 0));
-               (yyvsp[(1) - (4)])->nexti->triggered = false;
-               (yyvsp[(1) - (4)])->nexti->target_jmp = (yyvsp[(4) - 
(4)])->nexti;
+               list_prepend((yyvsp[-3]), bcalloc(Op_line_range, 
!!do_pretty_print + 1, 0));
+               (yyvsp[-3])->nexti->triggered = false;
+               (yyvsp[-3])->nexti->target_jmp = (yyvsp[0])->nexti;
 
-               list_append((yyvsp[(1) - (4)]), instruction(Op_cond_pair));
-               (yyvsp[(1) - (4)])->lasti->line_range = (yyvsp[(1) - 
(4)])->nexti;
-               (yyvsp[(1) - (4)])->lasti->target_jmp = tp;
+               list_append((yyvsp[-3]), instruction(Op_cond_pair));
+               (yyvsp[-3])->lasti->line_range = (yyvsp[-3])->nexti;
+               (yyvsp[-3])->lasti->target_jmp = tp;
 
-               list_append((yyvsp[(4) - (4)]), instruction(Op_cond_pair));
-               (yyvsp[(4) - (4)])->lasti->line_range = (yyvsp[(1) - 
(4)])->nexti;
-               (yyvsp[(4) - (4)])->lasti->target_jmp = tp;
+               list_append((yyvsp[0]), instruction(Op_cond_pair));
+               (yyvsp[0])->lasti->line_range = (yyvsp[-3])->nexti;
+               (yyvsp[0])->lasti->target_jmp = tp;
                if (do_pretty_print) {
-                       ((yyvsp[(1) - (4)])->nexti + 1)->condpair_left = 
(yyvsp[(1) - (4)])->lasti;
-                       ((yyvsp[(1) - (4)])->nexti + 1)->condpair_right = 
(yyvsp[(4) - (4)])->lasti;
+                       ((yyvsp[-3])->nexti + 1)->condpair_left = 
(yyvsp[-3])->lasti;
+                       ((yyvsp[-3])->nexti + 1)->condpair_right = 
(yyvsp[0])->lasti;
                }
-               (yyval) = list_append(list_merge((yyvsp[(1) - (4)]), (yyvsp[(4) 
- (4)])), tp);
+               (yyval) = list_append(list_merge((yyvsp[-3]), (yyvsp[0])), tp);
                rule = Rule;
          }
+#line 2036 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 21:
-/* Line 1792 of yacc.c  */
-#line 341 "awkgram.y"
+#line 341 "awkgram.y" /* yacc.c:1646  */
     {
                static int begin_seen = 0;
-               func_first = 0;
+               func_first = false;
                INSTRUCTION *ip;
                if (do_lint_old && ++begin_seen == 2)
-                       warning_ln((yyvsp[(1) - (1)])->source_line,
+                       warning_ln((yyvsp[0])->source_line,
                                _("old awk does not support multiple `BEGIN' or 
`END' rules"));
 
-               (yyvsp[(1) - (1)])->in_rule = rule = BEGIN;
-               (yyvsp[(1) - (1)])->source_file = source;
-               (yyval) = (yyvsp[(1) - (1)]);
+               (yyvsp[0])->in_rule = rule = BEGIN;
+               (yyvsp[0])->source_file = source;
+               (yyval) = (yyvsp[0]);
          }
+#line 2053 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 22:
-/* Line 1792 of yacc.c  */
-#line 354 "awkgram.y"
+#line 354 "awkgram.y" /* yacc.c:1646  */
     {
                static int end_seen = 0;
-               func_first = 0;
+               func_first = false;
                if (do_lint_old && ++end_seen == 2)
-                       warning_ln((yyvsp[(1) - (1)])->source_line,
+                       warning_ln((yyvsp[0])->source_line,
                                _("old awk does not support multiple `BEGIN' or 
`END' rules"));
 
-               (yyvsp[(1) - (1)])->in_rule = rule = END;
-               (yyvsp[(1) - (1)])->source_file = source;
-               (yyval) = (yyvsp[(1) - (1)]);
+               (yyvsp[0])->in_rule = rule = END;
+               (yyvsp[0])->source_file = source;
+               (yyval) = (yyvsp[0]);
          }
+#line 2069 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 23:
-/* Line 1792 of yacc.c  */
-#line 366 "awkgram.y"
+#line 366 "awkgram.y" /* yacc.c:1646  */
     {
-               func_first = 0;
-               (yyvsp[(1) - (1)])->in_rule = rule = BEGINFILE;
-               (yyvsp[(1) - (1)])->source_file = source;
-               (yyval) = (yyvsp[(1) - (1)]);
+               func_first = false;
+               (yyvsp[0])->in_rule = rule = BEGINFILE;
+               (yyvsp[0])->source_file = source;
+               (yyval) = (yyvsp[0]);
          }
+#line 2080 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 24:
-/* Line 1792 of yacc.c  */
-#line 373 "awkgram.y"
+#line 373 "awkgram.y" /* yacc.c:1646  */
     {
-               func_first = 0;
-               (yyvsp[(1) - (1)])->in_rule = rule = ENDFILE;
-               (yyvsp[(1) - (1)])->source_file = source;
-               (yyval) = (yyvsp[(1) - (1)]);
+               func_first = false;
+               (yyvsp[0])->in_rule = rule = ENDFILE;
+               (yyvsp[0])->source_file = source;
+               (yyval) = (yyvsp[0]);
          }
+#line 2091 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 25:
-/* Line 1792 of yacc.c  */
-#line 383 "awkgram.y"
+#line 383 "awkgram.y" /* yacc.c:1646  */
     {
                INSTRUCTION *ip;
-               if ((yyvsp[(2) - (5)]) == NULL)
+               if ((yyvsp[-3]) == NULL)
                        ip = list_create(instruction(Op_no_op));
                else
-                       ip = (yyvsp[(2) - (5)]);
+                       ip = (yyvsp[-3]);
                (yyval) = ip;
          }
+#line 2104 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 26:
-/* Line 1792 of yacc.c  */
-#line 395 "awkgram.y"
-    { (yyval) = (yyvsp[(1) - (1)]); }
+#line 395 "awkgram.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 2110 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 27:
-/* Line 1792 of yacc.c  */
-#line 397 "awkgram.y"
-    { (yyval) = (yyvsp[(1) - (1)]); }
+#line 397 "awkgram.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 2116 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 28:
-/* Line 1792 of yacc.c  */
-#line 399 "awkgram.y"
+#line 399 "awkgram.y" /* yacc.c:1646  */
     {
                yyerror(_("`%s' is a built-in function, it cannot be 
redefined"),
                                        tokstart);
                YYABORT;
          }
+#line 2126 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 29:
-/* Line 1792 of yacc.c  */
-#line 405 "awkgram.y"
-    { (yyval) = (yyvsp[(2) - (2)]); }
+#line 405 "awkgram.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 2132 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 32:
-/* Line 1792 of yacc.c  */
-#line 415 "awkgram.y"
+#line 415 "awkgram.y" /* yacc.c:1646  */
     {
-/* treat any comments between BOF and the first function definition (with no 
intervening BEGIN etc block) as program comments 
-   Special kludge: iff there are more than one such comments, treat the last 
as a function comment.  */
-               if (comment != NULL && func_first && 
strstr(comment->memory->stptr, "\n\n") != NULL)
+               /*
+                *  treat any comments between BOF and the first function
+                *  definition (with no intervening BEGIN etc block) as
+                *  program comments.  Special kludge: iff there are more
+                *  than one such comments, treat the last as a function
+                *  comment.
+                */
+               if (comment != NULL && func_first
+                   && strstr(comment->memory->stptr, "\n\n") != NULL)
                        split_comment();
-       /* save any other pre-function comment as function comment  */
-               if (comment != NULL){
+               /* save any other pre-function comment as function comment  */
+               if (comment != NULL) {
                        commentf = comment;
                        comment = NULL;
                }
-               func_first = 0;
-               (yyvsp[(1) - (6)])->source_file = source;
-               if (install_function((yyvsp[(2) - (6)])->lextok, (yyvsp[(1) - 
(6)]), (yyvsp[(4) - (6)])) < 0)
+               func_first = false;
+               (yyvsp[-5])->source_file = source;
+               if (install_function((yyvsp[-4])->lextok, (yyvsp[-5]), 
(yyvsp[-2])) < 0)
                        YYABORT;
-               in_function = (yyvsp[(2) - (6)])->lextok;
-               (yyvsp[(2) - (6)])->lextok = NULL;
-               bcfree((yyvsp[(2) - (6)]));
+               in_function = (yyvsp[-4])->lextok;
+               (yyvsp[-4])->lextok = NULL;
+               bcfree((yyvsp[-4]));
                /* $4 already free'd in install_function */
-               (yyval) = (yyvsp[(1) - (6)]);
+               (yyval) = (yyvsp[-5]);
          }
+#line 2163 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 33:
-/* Line 1792 of yacc.c  */
-#line 443 "awkgram.y"
+#line 449 "awkgram.y" /* yacc.c:1646  */
     { want_regexp = true; }
+#line 2169 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 34:
-/* Line 1792 of yacc.c  */
-#line 445 "awkgram.y"
+#line 451 "awkgram.y" /* yacc.c:1646  */
     {
                  NODE *n, *exp;
                  char *re;
                  size_t len;
 
-                 re = (yyvsp[(3) - (3)])->lextok;
-                 (yyvsp[(3) - (3)])->lextok = NULL;
+                 re = (yyvsp[0])->lextok;
+                 (yyvsp[0])->lextok = NULL;
                  len = strlen(re);
                  if (do_lint) {
                        if (len == 0)
-                               lintwarn_ln((yyvsp[(3) - (3)])->source_line,
+                               lintwarn_ln((yyvsp[0])->source_line,
                                        _("regexp constant `//' looks like a 
C++ comment, but is not"));
                        else if (re[0] == '*' && re[len-1] == '*')
                                /* possible C comment */
-                               lintwarn_ln((yyvsp[(3) - (3)])->source_line,
+                               lintwarn_ln((yyvsp[0])->source_line,
                                        _("regexp constant `/%s/' looks like a 
C comment, but is not"), re);
                  }
 
@@ -2393,93 +2194,93 @@ yyreduce:
                        unref(exp);
                        YYABORT;
                  }
-                 (yyval) = (yyvsp[(3) - (3)]);
+                 (yyval) = (yyvsp[0]);
                  (yyval)->opcode = Op_match_rec;
                  (yyval)->memory = n;
                }
+#line 2202 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 35:
-/* Line 1792 of yacc.c  */
-#line 477 "awkgram.y"
-    { bcfree((yyvsp[(1) - (1)])); }
+#line 483 "awkgram.y" /* yacc.c:1646  */
+    { bcfree((yyvsp[0])); }
+#line 2208 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 37:
-/* Line 1792 of yacc.c  */
-#line 483 "awkgram.y"
+#line 489 "awkgram.y" /* yacc.c:1646  */
     {
-               if (comment != NULL){
+               if (comment != NULL) {
                        (yyval) = list_create(comment);
                        comment = NULL;
                } else (yyval) = NULL;
          }
+#line 2219 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 38:
-/* Line 1792 of yacc.c  */
-#line 490 "awkgram.y"
+#line 496 "awkgram.y" /* yacc.c:1646  */
     {
-               if ((yyvsp[(2) - (2)]) == NULL) {
+               if ((yyvsp[0]) == NULL) {
                        if (comment == NULL)
-                               (yyval) = (yyvsp[(1) - (2)]);
+                               (yyval) = (yyvsp[-1]);
                        else {
-                               (yyval) = list_append((yyvsp[(1) - (2)]), 
comment);
+                               (yyval) = list_append((yyvsp[-1]), comment);
                                comment = NULL;
                        }
                } else {
-                       add_lint((yyvsp[(2) - (2)]), LINT_no_effect);
-                       if ((yyvsp[(1) - (2)]) == NULL) {
+                       add_lint((yyvsp[0]), LINT_no_effect);
+                       if ((yyvsp[-1]) == NULL) {
                                if (comment == NULL)
-                                       (yyval) = (yyvsp[(2) - (2)]);
+                                       (yyval) = (yyvsp[0]);
                                else {
-                                       (yyval) = list_append((yyvsp[(2) - 
(2)]), comment);
+                                       (yyval) = list_append((yyvsp[0]), 
comment);
                                        comment = NULL;
                                }
                        } else {
-                               if (comment != NULL){
-                                       list_append((yyvsp[(2) - (2)]), 
comment);
+                               if (comment != NULL) {
+                                       list_append((yyvsp[0]), comment);
                                        comment = NULL;
                                }
-                               (yyval) = list_merge((yyvsp[(1) - (2)]), 
(yyvsp[(2) - (2)]));
+                               (yyval) = list_merge((yyvsp[-1]), (yyvsp[0]));
                        }
                }
                yyerrok;
          }
+#line 2251 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 39:
-/* Line 1792 of yacc.c  */
-#line 518 "awkgram.y"
+#line 524 "awkgram.y" /* yacc.c:1646  */
     {  (yyval) = NULL; }
+#line 2257 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 42:
-/* Line 1792 of yacc.c  */
-#line 528 "awkgram.y"
+#line 534 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
+#line 2263 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 43:
-/* Line 1792 of yacc.c  */
-#line 530 "awkgram.y"
-    { (yyval) = (yyvsp[(2) - (3)]); }
+#line 536 "awkgram.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[-1]); }
+#line 2269 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 44:
-/* Line 1792 of yacc.c  */
-#line 532 "awkgram.y"
+#line 538 "awkgram.y" /* yacc.c:1646  */
     {
                if (do_pretty_print)
-                       (yyval) = list_prepend((yyvsp[(1) - (1)]), 
instruction(Op_exec_count));
+                       (yyval) = list_prepend((yyvsp[0]), 
instruction(Op_exec_count));
                else
-                       (yyval) = (yyvsp[(1) - (1)]);
+                       (yyval) = (yyvsp[0]);
          }
+#line 2280 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 45:
-/* Line 1792 of yacc.c  */
-#line 539 "awkgram.y"
+#line 545 "awkgram.y" /* yacc.c:1646  */
     {
                INSTRUCTION *dflt, *curr = NULL, *cexp, *cstmt;
                INSTRUCTION *ip, *nextc, *tbreak;
@@ -2494,9 +2295,9 @@ yyreduce:
                dflt = instruction(Op_jmp);
                dflt->target_jmp = tbreak;      /* if no case match and no 
explicit default */
 
-               if ((yyvsp[(7) - (9)]) != NULL) {
-                       curr = (yyvsp[(7) - (9)])->nexti;
-                       bcfree((yyvsp[(7) - (9)]));     /* Op_list */
+               if ((yyvsp[-2]) != NULL) {
+                       curr = (yyvsp[-2])->nexti;
+                       bcfree((yyvsp[-2]));    /* Op_list */
                } /*  else
                                curr = NULL; */
 
@@ -2552,13 +2353,13 @@ yyreduce:
                if (case_values != NULL)
                        efree(case_values);
 
-               ip = (yyvsp[(3) - (9)]);
+               ip = (yyvsp[-6]);
                if (do_pretty_print) {
-                       (void) list_prepend(ip, (yyvsp[(1) - (9)]));
+                       (void) list_prepend(ip, (yyvsp[-8]));
                        (void) list_prepend(ip, instruction(Op_exec_count));
-                       (yyvsp[(1) - (9)])->target_break = tbreak;
-                       ((yyvsp[(1) - (9)]) + 1)->switch_start = cexp->nexti;
-                       ((yyvsp[(1) - (9)]) + 1)->switch_end = cexp->lasti;
+                       (yyvsp[-8])->target_break = tbreak;
+                       ((yyvsp[-8]) + 1)->switch_start = cexp->nexti;
+                       ((yyvsp[-8]) + 1)->switch_end = cexp->lasti;
                }/* else
                                $1 is NULL */
 
@@ -2569,11 +2370,11 @@ yyreduce:
                break_allowed--;                        
                fix_break_continue(ip, tbreak, NULL);
          }
+#line 2374 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 46:
-/* Line 1792 of yacc.c  */
-#line 629 "awkgram.y"
+#line 635 "awkgram.y" /* yacc.c:1646  */
     { 
                /*
                 *    -----------------
@@ -2591,22 +2392,22 @@ yyreduce:
                INSTRUCTION *ip, *tbreak, *tcont;
 
                tbreak = instruction(Op_no_op);
-               add_lint((yyvsp[(3) - (6)]), LINT_assign_in_cond);
-               tcont = (yyvsp[(3) - (6)])->nexti;
-               ip = list_append((yyvsp[(3) - (6)]), instruction(Op_jmp_false));
+               add_lint((yyvsp[-3]), LINT_assign_in_cond);
+               tcont = (yyvsp[-3])->nexti;
+               ip = list_append((yyvsp[-3]), instruction(Op_jmp_false));
                ip->lasti->target_jmp = tbreak;
 
                if (do_pretty_print) {
                        (void) list_append(ip, instruction(Op_exec_count));
-                       (yyvsp[(1) - (6)])->target_break = tbreak;
-                       (yyvsp[(1) - (6)])->target_continue = tcont;
-                       ((yyvsp[(1) - (6)]) + 1)->while_body = ip->lasti;
-                       (void) list_prepend(ip, (yyvsp[(1) - (6)]));
+                       (yyvsp[-5])->target_break = tbreak;
+                       (yyvsp[-5])->target_continue = tcont;
+                       ((yyvsp[-5]) + 1)->while_body = ip->lasti;
+                       (void) list_prepend(ip, (yyvsp[-5]));
                }/* else
                                $1 is NULL */
 
-               if ((yyvsp[(6) - (6)]) != NULL)
-                       (void) list_merge(ip, (yyvsp[(6) - (6)]));
+               if ((yyvsp[0]) != NULL)
+                       (void) list_merge(ip, (yyvsp[0]));
                (void) list_append(ip, instruction(Op_jmp));
                ip->lasti->target_jmp = tcont;
                (yyval) = list_append(ip, tbreak);
@@ -2615,11 +2416,11 @@ yyreduce:
                continue_allowed--;
                fix_break_continue(ip, tbreak, tcont);
          }
+#line 2420 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 47:
-/* Line 1792 of yacc.c  */
-#line 671 "awkgram.y"
+#line 677 "awkgram.y" /* yacc.c:1646  */
     {
                /*
                 *    -----------------
@@ -2636,12 +2437,12 @@ yyreduce:
                INSTRUCTION *ip, *tbreak, *tcont;
 
                tbreak = instruction(Op_no_op);
-               tcont = (yyvsp[(6) - (8)])->nexti;
-               add_lint((yyvsp[(6) - (8)]), LINT_assign_in_cond);
-               if ((yyvsp[(3) - (8)]) != NULL)
-                       ip = list_merge((yyvsp[(3) - (8)]), (yyvsp[(6) - (8)]));
+               tcont = (yyvsp[-2])->nexti;
+               add_lint((yyvsp[-2]), LINT_assign_in_cond);
+               if ((yyvsp[-5]) != NULL)
+                       ip = list_merge((yyvsp[-5]), (yyvsp[-2]));
                else
-                       ip = list_prepend((yyvsp[(6) - (8)]), 
instruction(Op_no_op));
+                       ip = list_prepend((yyvsp[-2]), instruction(Op_no_op));
                if (do_pretty_print)
                        (void) list_prepend(ip, instruction(Op_exec_count));
                (void) list_append(ip, instruction(Op_jmp_true));
@@ -2653,29 +2454,29 @@ yyreduce:
                fix_break_continue(ip, tbreak, tcont);
 
                if (do_pretty_print) {
-                       (yyvsp[(1) - (8)])->target_break = tbreak;
-                       (yyvsp[(1) - (8)])->target_continue = tcont;
-                       ((yyvsp[(1) - (8)]) + 1)->doloop_cond = tcont;
-                       (yyval) = list_prepend(ip, (yyvsp[(1) - (8)]));
-                       bcfree((yyvsp[(4) - (8)]));
+                       (yyvsp[-7])->target_break = tbreak;
+                       (yyvsp[-7])->target_continue = tcont;
+                       ((yyvsp[-7]) + 1)->doloop_cond = tcont;
+                       (yyval) = list_prepend(ip, (yyvsp[-7]));
+                       bcfree((yyvsp[-4]));
                } /* else
                        $1 and $4 are NULLs */
          }
+#line 2466 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 48:
-/* Line 1792 of yacc.c  */
-#line 713 "awkgram.y"
+#line 719 "awkgram.y" /* yacc.c:1646  */
     {
                INSTRUCTION *ip;
-               char *var_name = (yyvsp[(3) - (8)])->lextok;
-
-               if ((yyvsp[(8) - (8)]) != NULL
-                               && (yyvsp[(8) - (8)])->lasti->opcode == 
Op_K_delete
-                               && (yyvsp[(8) - (8)])->lasti->expr_count == 1
-                               && (yyvsp[(8) - (8)])->nexti->opcode == Op_push
-                               && ((yyvsp[(8) - (8)])->nexti->memory->type != 
Node_var || !((yyvsp[(8) - (8)])->nexti->memory->var_update))
-                               && strcmp((yyvsp[(8) - 
(8)])->nexti->memory->vname, var_name) == 0
+               char *var_name = (yyvsp[-5])->lextok;
+
+               if ((yyvsp[0]) != NULL
+                               && (yyvsp[0])->lasti->opcode == Op_K_delete
+                               && (yyvsp[0])->lasti->expr_count == 1
+                               && (yyvsp[0])->nexti->opcode == Op_push
+                               && ((yyvsp[0])->nexti->memory->type != Node_var 
|| !((yyvsp[0])->nexti->memory->var_update))
+                               && strcmp((yyvsp[0])->nexti->memory->vname, 
var_name) == 0
                ) {
                
                /* Efficiency hack.  Recognize the special case of
@@ -2692,25 +2493,25 @@ yyreduce:
                 */              
                        NODE *arr = NULL;
 
-                       ip = (yyvsp[(8) - (8)])->nexti->nexti; 
-                       if ((yyvsp[(5) - (8)])->nexti->opcode == Op_push && 
(yyvsp[(5) - (8)])->lasti == (yyvsp[(5) - (8)])->nexti)
-                               arr = (yyvsp[(5) - (8)])->nexti->memory;
+                       ip = (yyvsp[0])->nexti->nexti; 
+                       if ((yyvsp[-3])->nexti->opcode == Op_push && 
(yyvsp[-3])->lasti == (yyvsp[-3])->nexti)
+                               arr = (yyvsp[-3])->nexti->memory;
                        if (arr != NULL
                                        && ip->opcode == Op_no_op
                                        && ip->nexti->opcode == Op_push_array
                                        && strcmp(ip->nexti->memory->vname, 
arr->vname) == 0
-                                       && ip->nexti->nexti == (yyvsp[(8) - 
(8)])->lasti
+                                       && ip->nexti->nexti == (yyvsp[0])->lasti
                        ) {
-                               (void) make_assignable((yyvsp[(8) - 
(8)])->nexti);
-                               (yyvsp[(8) - (8)])->lasti->opcode = 
Op_K_delete_loop;
-                               (yyvsp[(8) - (8)])->lasti->expr_count = 0;
-                               if ((yyvsp[(1) - (8)]) != NULL)
-                                       bcfree((yyvsp[(1) - (8)]));
+                               (void) make_assignable((yyvsp[0])->nexti);
+                               (yyvsp[0])->lasti->opcode = Op_K_delete_loop;
+                               (yyvsp[0])->lasti->expr_count = 0;
+                               if ((yyvsp[-7]) != NULL)
+                                       bcfree((yyvsp[-7]));
                                efree(var_name);
-                               bcfree((yyvsp[(3) - (8)]));
-                               bcfree((yyvsp[(4) - (8)]));
-                               bcfree((yyvsp[(5) - (8)]));
-                               (yyval) = (yyvsp[(8) - (8)]);
+                               bcfree((yyvsp[-5]));
+                               bcfree((yyvsp[-4]));
+                               bcfree((yyvsp[-3]));
+                               (yyval) = (yyvsp[0]);
                        } else
                                goto regular_loop;
                } else {
@@ -2727,50 +2528,50 @@ yyreduce:
                         * ib:[Op_arrayfor_final      ]
                         */
 regular_loop:
-                       ip = (yyvsp[(5) - (8)]);
+                       ip = (yyvsp[-3]);
                        ip->nexti->opcode = Op_push_array;
 
                        tbreak = instruction(Op_arrayfor_final);
-                       (yyvsp[(4) - (8)])->opcode = Op_arrayfor_incr;
-                       (yyvsp[(4) - (8)])->array_var = variable((yyvsp[(3) - 
(8)])->source_line, var_name, Node_var);
-                       (yyvsp[(4) - (8)])->target_jmp = tbreak;
-                       tcont = (yyvsp[(4) - (8)]);
-                       (yyvsp[(3) - (8)])->opcode = Op_arrayfor_init;
-                       (yyvsp[(3) - (8)])->target_jmp = tbreak;
-                       (void) list_append(ip, (yyvsp[(3) - (8)]));
+                       (yyvsp[-4])->opcode = Op_arrayfor_incr;
+                       (yyvsp[-4])->array_var = 
variable((yyvsp[-5])->source_line, var_name, Node_var);
+                       (yyvsp[-4])->target_jmp = tbreak;
+                       tcont = (yyvsp[-4]);
+                       (yyvsp[-5])->opcode = Op_arrayfor_init;
+                       (yyvsp[-5])->target_jmp = tbreak;
+                       (void) list_append(ip, (yyvsp[-5]));
 
                        if (do_pretty_print) {
-                               (yyvsp[(1) - (8)])->opcode = Op_K_arrayfor;
-                               (yyvsp[(1) - (8)])->target_continue = tcont;
-                               (yyvsp[(1) - (8)])->target_break = tbreak;
-                               (void) list_append(ip, (yyvsp[(1) - (8)]));
+                               (yyvsp[-7])->opcode = Op_K_arrayfor;
+                               (yyvsp[-7])->target_continue = tcont;
+                               (yyvsp[-7])->target_break = tbreak;
+                               (void) list_append(ip, (yyvsp[-7]));
                        } /* else
                                        $1 is NULL */
 
                        /* add update_FOO instruction if necessary */ 
-                       if ((yyvsp[(4) - (8)])->array_var->type == Node_var && 
(yyvsp[(4) - (8)])->array_var->var_update) {
+                       if ((yyvsp[-4])->array_var->type == Node_var && 
(yyvsp[-4])->array_var->var_update) {
                                (void) list_append(ip, 
instruction(Op_var_update));
-                               ip->lasti->update_var = (yyvsp[(4) - 
(8)])->array_var->var_update;
+                               ip->lasti->update_var = 
(yyvsp[-4])->array_var->var_update;
                        }
-                       (void) list_append(ip, (yyvsp[(4) - (8)]));
+                       (void) list_append(ip, (yyvsp[-4]));
 
                        /* add set_FOO instruction if necessary */
-                       if ((yyvsp[(4) - (8)])->array_var->type == Node_var && 
(yyvsp[(4) - (8)])->array_var->var_assign) {
+                       if ((yyvsp[-4])->array_var->type == Node_var && 
(yyvsp[-4])->array_var->var_assign) {
                                (void) list_append(ip, 
instruction(Op_var_assign));
-                               ip->lasti->assign_var = (yyvsp[(4) - 
(8)])->array_var->var_assign;
+                               ip->lasti->assign_var = 
(yyvsp[-4])->array_var->var_assign;
                        }
 
                        if (do_pretty_print) {
                                (void) list_append(ip, 
instruction(Op_exec_count));
-                               ((yyvsp[(1) - (8)]) + 1)->forloop_cond = 
(yyvsp[(4) - (8)]);
-                               ((yyvsp[(1) - (8)]) + 1)->forloop_body = 
ip->lasti; 
+                               ((yyvsp[-7]) + 1)->forloop_cond = (yyvsp[-4]);
+                               ((yyvsp[-7]) + 1)->forloop_body = ip->lasti; 
                        }
 
-                       if ((yyvsp[(8) - (8)]) != NULL)
-                               (void) list_merge(ip, (yyvsp[(8) - (8)]));
+                       if ((yyvsp[0]) != NULL)
+                               (void) list_merge(ip, (yyvsp[0]));
 
                        (void) list_append(ip, instruction(Op_jmp));
-                       ip->lasti->target_jmp = (yyvsp[(4) - (8)]);
+                       ip->lasti->target_jmp = (yyvsp[-4]);
                        (yyval) = list_append(ip, tbreak);
                        fix_break_continue(ip, tbreak, tcont);
                } 
@@ -2778,157 +2579,157 @@ regular_loop:
                break_allowed--;
                continue_allowed--;
          }
+#line 2583 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 49:
-/* Line 1792 of yacc.c  */
-#line 826 "awkgram.y"
+#line 832 "awkgram.y" /* yacc.c:1646  */
     {
-               (yyval) = mk_for_loop((yyvsp[(1) - (12)]), (yyvsp[(3) - (12)]), 
(yyvsp[(6) - (12)]), (yyvsp[(9) - (12)]), (yyvsp[(12) - (12)]));
+               (yyval) = mk_for_loop((yyvsp[-11]), (yyvsp[-9]), (yyvsp[-6]), 
(yyvsp[-3]), (yyvsp[0]));
 
                break_allowed--;
                continue_allowed--;
          }
+#line 2594 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 50:
-/* Line 1792 of yacc.c  */
-#line 833 "awkgram.y"
+#line 839 "awkgram.y" /* yacc.c:1646  */
     {
-               (yyval) = mk_for_loop((yyvsp[(1) - (11)]), (yyvsp[(3) - (11)]), 
(INSTRUCTION *) NULL, (yyvsp[(8) - (11)]), (yyvsp[(11) - (11)]));
+               (yyval) = mk_for_loop((yyvsp[-10]), (yyvsp[-8]), (INSTRUCTION 
*) NULL, (yyvsp[-3]), (yyvsp[0]));
 
                break_allowed--;
                continue_allowed--;
          }
+#line 2605 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 51:
-/* Line 1792 of yacc.c  */
-#line 840 "awkgram.y"
+#line 846 "awkgram.y" /* yacc.c:1646  */
     {
                if (do_pretty_print)
-                       (yyval) = list_prepend((yyvsp[(1) - (1)]), 
instruction(Op_exec_count));
+                       (yyval) = list_prepend((yyvsp[0]), 
instruction(Op_exec_count));
                else
-                       (yyval) = (yyvsp[(1) - (1)]);
+                       (yyval) = (yyvsp[0]);
          }
+#line 2616 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 52:
-/* Line 1792 of yacc.c  */
-#line 850 "awkgram.y"
+#line 856 "awkgram.y" /* yacc.c:1646  */
     { 
                if (! break_allowed)
-                       error_ln((yyvsp[(1) - (2)])->source_line,
+                       error_ln((yyvsp[-1])->source_line,
                                _("`break' is not allowed outside a loop or 
switch"));
-               (yyvsp[(1) - (2)])->target_jmp = NULL;
-               (yyval) = list_create((yyvsp[(1) - (2)]));
+               (yyvsp[-1])->target_jmp = NULL;
+               (yyval) = list_create((yyvsp[-1]));
 
          }
+#line 2629 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 53:
-/* Line 1792 of yacc.c  */
-#line 859 "awkgram.y"
+#line 865 "awkgram.y" /* yacc.c:1646  */
     {
                if (! continue_allowed)
-                       error_ln((yyvsp[(1) - (2)])->source_line,
+                       error_ln((yyvsp[-1])->source_line,
                                _("`continue' is not allowed outside a loop"));
-               (yyvsp[(1) - (2)])->target_jmp = NULL;
-               (yyval) = list_create((yyvsp[(1) - (2)]));
+               (yyvsp[-1])->target_jmp = NULL;
+               (yyval) = list_create((yyvsp[-1]));
 
          }
+#line 2642 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 54:
-/* Line 1792 of yacc.c  */
-#line 868 "awkgram.y"
+#line 874 "awkgram.y" /* yacc.c:1646  */
     {
                /* if inside function (rule = 0), resolve context at run-time */
                if (rule && rule != Rule)
-                       error_ln((yyvsp[(1) - (2)])->source_line,
+                       error_ln((yyvsp[-1])->source_line,
                                _("`next' used in %s action"), ruletab[rule]);
-               (yyvsp[(1) - (2)])->target_jmp = ip_rec;
-               (yyval) = list_create((yyvsp[(1) - (2)]));
+               (yyvsp[-1])->target_jmp = ip_rec;
+               (yyval) = list_create((yyvsp[-1]));
          }
+#line 2655 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 55:
-/* Line 1792 of yacc.c  */
-#line 877 "awkgram.y"
+#line 883 "awkgram.y" /* yacc.c:1646  */
     {
                /* if inside function (rule = 0), resolve context at run-time */
                if (rule == BEGIN || rule == END || rule == ENDFILE)
-                       error_ln((yyvsp[(1) - (2)])->source_line,
+                       error_ln((yyvsp[-1])->source_line,
                                _("`nextfile' used in %s action"), 
ruletab[rule]);
 
-               (yyvsp[(1) - (2)])->target_newfile = ip_newfile;
-               (yyvsp[(1) - (2)])->target_endfile = ip_endfile;
-               (yyval) = list_create((yyvsp[(1) - (2)]));
+               (yyvsp[-1])->target_newfile = ip_newfile;
+               (yyvsp[-1])->target_endfile = ip_endfile;
+               (yyval) = list_create((yyvsp[-1]));
          }
+#line 2670 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 56:
-/* Line 1792 of yacc.c  */
-#line 888 "awkgram.y"
+#line 894 "awkgram.y" /* yacc.c:1646  */
     {
                /* Initialize the two possible jump targets, the actual target
                 * is resolved at run-time. 
                 */
-               (yyvsp[(1) - (3)])->target_end = ip_end;        /* first 
instruction in end_block */
-               (yyvsp[(1) - (3)])->target_atexit = ip_atexit;  /* cleanup and 
go home */
+               (yyvsp[-2])->target_end = ip_end;       /* first instruction in 
end_block */
+               (yyvsp[-2])->target_atexit = ip_atexit; /* cleanup and go home 
*/
 
-               if ((yyvsp[(2) - (3)]) == NULL) {
-                       (yyval) = list_create((yyvsp[(1) - (3)]));
+               if ((yyvsp[-1]) == NULL) {
+                       (yyval) = list_create((yyvsp[-2]));
                        (void) list_prepend((yyval), instruction(Op_push_i));
                        (yyval)->nexti->memory = dupnode(Nnull_string);
                } else
-                       (yyval) = list_append((yyvsp[(2) - (3)]), (yyvsp[(1) - 
(3)]));
+                       (yyval) = list_append((yyvsp[-1]), (yyvsp[-2]));
          }
+#line 2689 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 57:
-/* Line 1792 of yacc.c  */
-#line 903 "awkgram.y"
+#line 909 "awkgram.y" /* yacc.c:1646  */
     {
                if (! in_function)
                        yyerror(_("`return' used outside function context"));
          }
+#line 2698 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 58:
-/* Line 1792 of yacc.c  */
-#line 906 "awkgram.y"
+#line 912 "awkgram.y" /* yacc.c:1646  */
     {
-               if ((yyvsp[(3) - (4)]) == NULL) {
-                       (yyval) = list_create((yyvsp[(1) - (4)]));
+               if ((yyvsp[-1]) == NULL) {
+                       (yyval) = list_create((yyvsp[-3]));
                        (void) list_prepend((yyval), instruction(Op_push_i));
                        (yyval)->nexti->memory = dupnode(Nnull_string);
                } else {
                        if (do_optimize
-                               && (yyvsp[(3) - (4)])->lasti->opcode == 
Op_func_call
-                               && strcmp((yyvsp[(3) - (4)])->lasti->func_name, 
in_function) == 0
+                               && (yyvsp[-1])->lasti->opcode == Op_func_call
+                               && strcmp((yyvsp[-1])->lasti->func_name, 
in_function) == 0
                        ) {
                                /* Do tail recursion optimization. Tail
                                 * call without a return value is recognized
                                 * in mk_function().
                                 */
-                               ((yyvsp[(3) - (4)])->lasti + 1)->tail_call = 
true;
+                               ((yyvsp[-1])->lasti + 1)->tail_call = true;
                        }
 
-                       (yyval) = list_append((yyvsp[(3) - (4)]), (yyvsp[(1) - 
(4)]));
+                       (yyval) = list_append((yyvsp[-1]), (yyvsp[-3]));
                }
          }
+#line 2723 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 60:
-/* Line 1792 of yacc.c  */
-#line 938 "awkgram.y"
+#line 944 "awkgram.y" /* yacc.c:1646  */
     { in_print = true; in_parens = 0; }
+#line 2729 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 61:
-/* Line 1792 of yacc.c  */
-#line 939 "awkgram.y"
+#line 945 "awkgram.y" /* yacc.c:1646  */
     {
                /*
                 * Optimization: plain `print' has no expression list, so $3 is 
null.
@@ -2936,12 +2737,12 @@ regular_loop:
                 * which is faster for these two cases.
                 */
 
-               if ((yyvsp[(1) - (4)])->opcode == Op_K_print &&
-                       ((yyvsp[(3) - (4)]) == NULL
-                               || ((yyvsp[(3) - (4)])->lasti->opcode == 
Op_field_spec
-                                       && (yyvsp[(3) - 
(4)])->nexti->nexti->nexti == (yyvsp[(3) - (4)])->lasti
-                                       && (yyvsp[(3) - 
(4)])->nexti->nexti->opcode == Op_push_i
-                                       && (yyvsp[(3) - 
(4)])->nexti->nexti->memory->type == Node_val)
+               if ((yyvsp[-3])->opcode == Op_K_print &&
+                       ((yyvsp[-1]) == NULL
+                               || ((yyvsp[-1])->lasti->opcode == Op_field_spec
+                                       && (yyvsp[-1])->nexti->nexti->nexti == 
(yyvsp[-1])->lasti
+                                       && (yyvsp[-1])->nexti->nexti->opcode == 
Op_push_i
+                                       && 
(yyvsp[-1])->nexti->nexti->memory->type == Node_val)
                        )
                ) {
                        static bool warned = false;
@@ -2954,37 +2755,37 @@ regular_loop:
                         *    [Op_K_print_rec | NULL | redir_type | expr_count]
                         */
 
-                       if ((yyvsp[(3) - (4)]) != NULL) {
-                               NODE *n = (yyvsp[(3) - 
(4)])->nexti->nexti->memory;
+                       if ((yyvsp[-1]) != NULL) {
+                               NODE *n = (yyvsp[-1])->nexti->nexti->memory;
 
                                if (! iszero(n))
                                        goto regular_print;
 
-                               bcfree((yyvsp[(3) - (4)])->lasti);              
        /* Op_field_spec */
+                               bcfree((yyvsp[-1])->lasti);                     
/* Op_field_spec */
                                unref(n);                               /* 
Node_val */
-                               bcfree((yyvsp[(3) - (4)])->nexti->nexti);       
        /* Op_push_i */
-                               bcfree((yyvsp[(3) - (4)])->nexti);              
        /* Op_list */
-                               bcfree((yyvsp[(3) - (4)]));                     
        /* Op_list */
+                               bcfree((yyvsp[-1])->nexti->nexti);              
/* Op_push_i */
+                               bcfree((yyvsp[-1])->nexti);                     
/* Op_list */
+                               bcfree((yyvsp[-1]));                            
/* Op_list */
                        } else {
                                if (do_lint && (rule == BEGIN || rule == END) 
&& ! warned) {
                                        warned = true;
-                                       lintwarn_ln((yyvsp[(1) - 
(4)])->source_line,
+                                       lintwarn_ln((yyvsp[-3])->source_line,
                _("plain `print' in BEGIN or END rule should probably be `print 
\"\"'"));
                                }
                        }
 
-                       (yyvsp[(1) - (4)])->expr_count = 0;
-                       (yyvsp[(1) - (4)])->opcode = Op_K_print_rec;
-                       if ((yyvsp[(4) - (4)]) == NULL) {    /* no redircetion 
*/
-                               (yyvsp[(1) - (4)])->redir_type = redirect_none;
-                               (yyval) = list_create((yyvsp[(1) - (4)]));
+                       (yyvsp[-3])->expr_count = 0;
+                       (yyvsp[-3])->opcode = Op_K_print_rec;
+                       if ((yyvsp[0]) == NULL) {    /* no redircetion */
+                               (yyvsp[-3])->redir_type = redirect_none;
+                               (yyval) = list_create((yyvsp[-3]));
                        } else {
                                INSTRUCTION *ip;
-                               ip = (yyvsp[(4) - (4)])->nexti;
-                               (yyvsp[(1) - (4)])->redir_type = ip->redir_type;
-                               (yyvsp[(4) - (4)])->nexti = ip->nexti;
+                               ip = (yyvsp[0])->nexti;
+                               (yyvsp[-3])->redir_type = ip->redir_type;
+                               (yyvsp[0])->nexti = ip->nexti;
                                bcfree(ip);
-                               (yyval) = list_append((yyvsp[(4) - (4)]), 
(yyvsp[(1) - (4)]));
+                               (yyval) = list_append((yyvsp[0]), (yyvsp[-3]));
                        }
                } else {
                        /*   -----------------
@@ -2997,59 +2798,59 @@ regular_loop:
                         *
                         */
 regular_print:  
-                       if ((yyvsp[(4) - (4)]) == NULL) {               /* no 
redirection */
-                               if ((yyvsp[(3) - (4)]) == NULL) {       /* 
printf without arg */
-                                       (yyvsp[(1) - (4)])->expr_count = 0;
-                                       (yyvsp[(1) - (4)])->redir_type = 
redirect_none;
-                                       (yyval) = list_create((yyvsp[(1) - 
(4)]));
+                       if ((yyvsp[0]) == NULL) {               /* no 
redirection */
+                               if ((yyvsp[-1]) == NULL)        {       /* 
printf without arg */
+                                       (yyvsp[-3])->expr_count = 0;
+                                       (yyvsp[-3])->redir_type = redirect_none;
+                                       (yyval) = list_create((yyvsp[-3]));
                                } else {
-                                       INSTRUCTION *t = (yyvsp[(3) - (4)]);
-                                       (yyvsp[(1) - (4)])->expr_count = 
count_expressions(&t, false);
-                                       (yyvsp[(1) - (4)])->redir_type = 
redirect_none;
-                                       (yyval) = list_append(t, (yyvsp[(1) - 
(4)]));
+                                       INSTRUCTION *t = (yyvsp[-1]);
+                                       (yyvsp[-3])->expr_count = 
count_expressions(&t, false);
+                                       (yyvsp[-3])->redir_type = redirect_none;
+                                       (yyval) = list_append(t, (yyvsp[-3]));
                                }
                        } else {
                                INSTRUCTION *ip;
-                               ip = (yyvsp[(4) - (4)])->nexti;
-                               (yyvsp[(1) - (4)])->redir_type = ip->redir_type;
-                               (yyvsp[(4) - (4)])->nexti = ip->nexti;
+                               ip = (yyvsp[0])->nexti;
+                               (yyvsp[-3])->redir_type = ip->redir_type;
+                               (yyvsp[0])->nexti = ip->nexti;
                                bcfree(ip);
-                               if ((yyvsp[(3) - (4)]) == NULL) {
-                                       (yyvsp[(1) - (4)])->expr_count = 0;
-                                       (yyval) = list_append((yyvsp[(4) - 
(4)]), (yyvsp[(1) - (4)]));
+                               if ((yyvsp[-1]) == NULL) {
+                                       (yyvsp[-3])->expr_count = 0;
+                                       (yyval) = list_append((yyvsp[0]), 
(yyvsp[-3]));
                                } else {
-                                       INSTRUCTION *t = (yyvsp[(3) - (4)]);
-                                       (yyvsp[(1) - (4)])->expr_count = 
count_expressions(&t, false);
-                                       (yyval) = 
list_append(list_merge((yyvsp[(4) - (4)]), t), (yyvsp[(1) - (4)]));
+                                       INSTRUCTION *t = (yyvsp[-1]);
+                                       (yyvsp[-3])->expr_count = 
count_expressions(&t, false);
+                                       (yyval) = 
list_append(list_merge((yyvsp[0]), t), (yyvsp[-3]));
                                }
                        }
                }
          }
+#line 2830 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 62:
-/* Line 1792 of yacc.c  */
-#line 1036 "awkgram.y"
+#line 1042 "awkgram.y" /* yacc.c:1646  */
     { sub_counter = 0; }
+#line 2836 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 63:
-/* Line 1792 of yacc.c  */
-#line 1037 "awkgram.y"
+#line 1043 "awkgram.y" /* yacc.c:1646  */
     {
-               char *arr = (yyvsp[(2) - (4)])->lextok;
+               char *arr = (yyvsp[-2])->lextok;
 
-               (yyvsp[(2) - (4)])->opcode = Op_push_array;
-               (yyvsp[(2) - (4)])->memory = variable((yyvsp[(2) - 
(4)])->source_line, arr, Node_var_new);
+               (yyvsp[-2])->opcode = Op_push_array;
+               (yyvsp[-2])->memory = variable((yyvsp[-2])->source_line, arr, 
Node_var_new);
 
                if (! do_posix && ! do_traditional) {
-                       if ((yyvsp[(2) - (4)])->memory == symbol_table)
+                       if ((yyvsp[-2])->memory == symbol_table)
                                fatal(_("`delete' is not allowed with SYMTAB"));
-                       else if ((yyvsp[(2) - (4)])->memory == func_table)
+                       else if ((yyvsp[-2])->memory == func_table)
                                fatal(_("`delete' is not allowed with 
FUNCTAB"));
                }
 
-               if ((yyvsp[(4) - (4)]) == NULL) {
+               if ((yyvsp[0]) == NULL) {
                        /*
                         * As of September 2012, POSIX has added support
                         * for `delete array'. See:
@@ -3061,525 +2862,525 @@ regular_print:
                         * Also, since BWK awk supports it, we don't have to
                         * check do_traditional either.
                         */
-                       (yyvsp[(1) - (4)])->expr_count = 0;
-                       (yyval) = list_append(list_create((yyvsp[(2) - (4)])), 
(yyvsp[(1) - (4)]));
+                       (yyvsp[-3])->expr_count = 0;
+                       (yyval) = list_append(list_create((yyvsp[-2])), 
(yyvsp[-3]));
                } else {
-                       (yyvsp[(1) - (4)])->expr_count = sub_counter;
-                       (yyval) = list_append(list_append((yyvsp[(4) - (4)]), 
(yyvsp[(2) - (4)])), (yyvsp[(1) - (4)]));
+                       (yyvsp[-3])->expr_count = sub_counter;
+                       (yyval) = list_append(list_append((yyvsp[0]), 
(yyvsp[-2])), (yyvsp[-3]));
                }
          }
+#line 2873 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 64:
-/* Line 1792 of yacc.c  */
-#line 1074 "awkgram.y"
+#line 1080 "awkgram.y" /* yacc.c:1646  */
     {
                static bool warned = false;
-               char *arr = (yyvsp[(3) - (4)])->lextok;
+               char *arr = (yyvsp[-1])->lextok;
 
                if (do_lint && ! warned) {
                        warned = true;
-                       lintwarn_ln((yyvsp[(1) - (4)])->source_line,
+                       lintwarn_ln((yyvsp[-3])->source_line,
                                _("`delete(array)' is a non-portable tawk 
extension"));
                }
                if (do_traditional) {
-                       error_ln((yyvsp[(1) - (4)])->source_line,
+                       error_ln((yyvsp[-3])->source_line,
                                _("`delete(array)' is a non-portable tawk 
extension"));
                }
-               (yyvsp[(3) - (4)])->memory = variable((yyvsp[(3) - 
(4)])->source_line, arr, Node_var_new);
-               (yyvsp[(3) - (4)])->opcode = Op_push_array;
-               (yyvsp[(1) - (4)])->expr_count = 0;
-               (yyval) = list_append(list_create((yyvsp[(3) - (4)])), 
(yyvsp[(1) - (4)]));
+               (yyvsp[-1])->memory = variable((yyvsp[-1])->source_line, arr, 
Node_var_new);
+               (yyvsp[-1])->opcode = Op_push_array;
+               (yyvsp[-3])->expr_count = 0;
+               (yyval) = list_append(list_create((yyvsp[-1])), (yyvsp[-3]));
 
                if (! do_posix && ! do_traditional) {
-                       if ((yyvsp[(3) - (4)])->memory == symbol_table)
+                       if ((yyvsp[-1])->memory == symbol_table)
                                fatal(_("`delete' is not allowed with SYMTAB"));
-                       else if ((yyvsp[(3) - (4)])->memory == func_table)
+                       else if ((yyvsp[-1])->memory == func_table)
                                fatal(_("`delete' is not allowed with 
FUNCTAB"));
                }
          }
+#line 2903 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 65:
-/* Line 1792 of yacc.c  */
-#line 1100 "awkgram.y"
-    {  (yyval) = optimize_assignment((yyvsp[(1) - (1)])); }
+#line 1106 "awkgram.y" /* yacc.c:1646  */
+    {  (yyval) = optimize_assignment((yyvsp[0])); }
+#line 2909 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 66:
-/* Line 1792 of yacc.c  */
-#line 1105 "awkgram.y"
+#line 1111 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
+#line 2915 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 67:
-/* Line 1792 of yacc.c  */
-#line 1107 "awkgram.y"
-    { (yyval) = (yyvsp[(1) - (1)]); }
+#line 1113 "awkgram.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 2921 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 68:
-/* Line 1792 of yacc.c  */
-#line 1112 "awkgram.y"
+#line 1118 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
+#line 2927 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 69:
-/* Line 1792 of yacc.c  */
-#line 1114 "awkgram.y"
+#line 1120 "awkgram.y" /* yacc.c:1646  */
     {
-               if ((yyvsp[(1) - (2)]) == NULL)
-                       (yyval) = list_create((yyvsp[(2) - (2)]));
+               if ((yyvsp[-1]) == NULL)
+                       (yyval) = list_create((yyvsp[0]));
                else
-                       (yyval) = list_prepend((yyvsp[(1) - (2)]), (yyvsp[(2) - 
(2)]));
+                       (yyval) = list_prepend((yyvsp[-1]), (yyvsp[0]));
          }
+#line 2938 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 70:
-/* Line 1792 of yacc.c  */
-#line 1121 "awkgram.y"
+#line 1127 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
+#line 2944 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 71:
-/* Line 1792 of yacc.c  */
-#line 1126 "awkgram.y"
+#line 1132 "awkgram.y" /* yacc.c:1646  */
     {
-               INSTRUCTION *casestmt = (yyvsp[(5) - (5)]);
-               if ((yyvsp[(5) - (5)]) == NULL)
+               INSTRUCTION *casestmt = (yyvsp[0]);
+               if ((yyvsp[0]) == NULL)
                        casestmt = list_create(instruction(Op_no_op));  
                if (do_pretty_print)
                        (void) list_prepend(casestmt, 
instruction(Op_exec_count));
-               (yyvsp[(1) - (5)])->case_exp = (yyvsp[(2) - (5)]);
-               (yyvsp[(1) - (5)])->case_stmt = casestmt;
-               bcfree((yyvsp[(3) - (5)]));
-               (yyval) = (yyvsp[(1) - (5)]);
+               (yyvsp[-4])->case_exp = (yyvsp[-3]);
+               (yyvsp[-4])->case_stmt = casestmt;
+               bcfree((yyvsp[-2]));
+               (yyval) = (yyvsp[-4]);
          }
+#line 2960 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 72:
-/* Line 1792 of yacc.c  */
-#line 1138 "awkgram.y"
+#line 1144 "awkgram.y" /* yacc.c:1646  */
     {
-               INSTRUCTION *casestmt = (yyvsp[(4) - (4)]);
-               if ((yyvsp[(4) - (4)]) == NULL)
+               INSTRUCTION *casestmt = (yyvsp[0]);
+               if ((yyvsp[0]) == NULL)
                        casestmt = list_create(instruction(Op_no_op));
                if (do_pretty_print)
                        (void) list_prepend(casestmt, 
instruction(Op_exec_count));
-               bcfree((yyvsp[(2) - (4)]));
-               (yyvsp[(1) - (4)])->case_stmt = casestmt;
-               (yyval) = (yyvsp[(1) - (4)]);
+               bcfree((yyvsp[-2]));
+               (yyvsp[-3])->case_stmt = casestmt;
+               (yyval) = (yyvsp[-3]);
          }
+#line 2975 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 73:
-/* Line 1792 of yacc.c  */
-#line 1152 "awkgram.y"
-    {  (yyval) = (yyvsp[(1) - (1)]); }
+#line 1158 "awkgram.y" /* yacc.c:1646  */
+    {  (yyval) = (yyvsp[0]); }
+#line 2981 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 74:
-/* Line 1792 of yacc.c  */
-#line 1154 "awkgram.y"
+#line 1160 "awkgram.y" /* yacc.c:1646  */
     { 
-               NODE *n = (yyvsp[(2) - (2)])->memory;
+               NODE *n = (yyvsp[0])->memory;
                (void) force_number(n);
                negate_num(n);
-               bcfree((yyvsp[(1) - (2)]));
-               (yyval) = (yyvsp[(2) - (2)]);
+               bcfree((yyvsp[-1]));
+               (yyval) = (yyvsp[0]);
          }
+#line 2993 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 75:
-/* Line 1792 of yacc.c  */
-#line 1162 "awkgram.y"
+#line 1168 "awkgram.y" /* yacc.c:1646  */
     {
-               bcfree((yyvsp[(1) - (2)]));
-               (yyval) = (yyvsp[(2) - (2)]);
+               bcfree((yyvsp[-1]));
+               (yyval) = (yyvsp[0]);
          }
+#line 3002 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 76:
-/* Line 1792 of yacc.c  */
-#line 1167 "awkgram.y"
-    {  (yyval) = (yyvsp[(1) - (1)]); }
+#line 1173 "awkgram.y" /* yacc.c:1646  */
+    {  (yyval) = (yyvsp[0]); }
+#line 3008 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 77:
-/* Line 1792 of yacc.c  */
-#line 1169 "awkgram.y"
+#line 1175 "awkgram.y" /* yacc.c:1646  */
     {
-               (yyvsp[(1) - (1)])->opcode = Op_push_re;
-               (yyval) = (yyvsp[(1) - (1)]);
+               (yyvsp[0])->opcode = Op_push_re;
+               (yyval) = (yyvsp[0]);
          }
+#line 3017 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 78:
-/* Line 1792 of yacc.c  */
-#line 1177 "awkgram.y"
-    { (yyval) = (yyvsp[(1) - (1)]); }
+#line 1183 "awkgram.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 3023 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 79:
-/* Line 1792 of yacc.c  */
-#line 1179 "awkgram.y"
-    { (yyval) = (yyvsp[(1) - (1)]); }
+#line 1185 "awkgram.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 3029 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 81:
-/* Line 1792 of yacc.c  */
-#line 1189 "awkgram.y"
+#line 1195 "awkgram.y" /* yacc.c:1646  */
     {
-               (yyval) = (yyvsp[(2) - (3)]);
+               (yyval) = (yyvsp[-1]);
          }
+#line 3037 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 82:
-/* Line 1792 of yacc.c  */
-#line 1196 "awkgram.y"
+#line 1202 "awkgram.y" /* yacc.c:1646  */
     {
                in_print = false;
                in_parens = 0;
                (yyval) = NULL;
          }
+#line 3047 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 83:
-/* Line 1792 of yacc.c  */
-#line 1201 "awkgram.y"
+#line 1207 "awkgram.y" /* yacc.c:1646  */
     { in_print = false; in_parens = 0; }
+#line 3053 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 84:
-/* Line 1792 of yacc.c  */
-#line 1202 "awkgram.y"
+#line 1208 "awkgram.y" /* yacc.c:1646  */
     {
-               if ((yyvsp[(1) - (3)])->redir_type == redirect_twoway
-                       && (yyvsp[(3) - (3)])->lasti->opcode == 
Op_K_getline_redir
-                               && (yyvsp[(3) - (3)])->lasti->redir_type == 
redirect_twoway)
+               if ((yyvsp[-2])->redir_type == redirect_twoway
+                       && (yyvsp[0])->lasti->opcode == Op_K_getline_redir
+                               && (yyvsp[0])->lasti->redir_type == 
redirect_twoway)
                        yyerror(_("multistage two-way pipelines don't work"));
-               (yyval) = list_prepend((yyvsp[(3) - (3)]), (yyvsp[(1) - (3)]));
+               (yyval) = list_prepend((yyvsp[0]), (yyvsp[-2]));
          }
+#line 3065 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 85:
-/* Line 1792 of yacc.c  */
-#line 1213 "awkgram.y"
+#line 1219 "awkgram.y" /* yacc.c:1646  */
     {
-               (yyval) = mk_condition((yyvsp[(3) - (6)]), (yyvsp[(1) - (6)]), 
(yyvsp[(6) - (6)]), NULL, NULL);
+               (yyval) = mk_condition((yyvsp[-3]), (yyvsp[-5]), (yyvsp[0]), 
NULL, NULL);
          }
+#line 3073 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 86:
-/* Line 1792 of yacc.c  */
-#line 1218 "awkgram.y"
+#line 1224 "awkgram.y" /* yacc.c:1646  */
     {
-               (yyval) = mk_condition((yyvsp[(3) - (9)]), (yyvsp[(1) - (9)]), 
(yyvsp[(6) - (9)]), (yyvsp[(7) - (9)]), (yyvsp[(9) - (9)]));
+               (yyval) = mk_condition((yyvsp[-6]), (yyvsp[-8]), (yyvsp[-3]), 
(yyvsp[-2]), (yyvsp[0]));
          }
+#line 3081 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 91:
-/* Line 1792 of yacc.c  */
-#line 1235 "awkgram.y"
+#line 1241 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
+#line 3087 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 92:
-/* Line 1792 of yacc.c  */
-#line 1237 "awkgram.y"
+#line 1243 "awkgram.y" /* yacc.c:1646  */
     {
-               bcfree((yyvsp[(1) - (2)]));
-               (yyval) = (yyvsp[(2) - (2)]);
+               bcfree((yyvsp[-1]));
+               (yyval) = (yyvsp[0]);
          }
+#line 3096 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 93:
-/* Line 1792 of yacc.c  */
-#line 1245 "awkgram.y"
+#line 1251 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
+#line 3102 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 94:
-/* Line 1792 of yacc.c  */
-#line 1247 "awkgram.y"
-    { (yyval) = (yyvsp[(1) - (1)]) ; }
+#line 1253 "awkgram.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]) ; }
+#line 3108 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 95:
-/* Line 1792 of yacc.c  */
-#line 1252 "awkgram.y"
+#line 1258 "awkgram.y" /* yacc.c:1646  */
     {
-               (yyvsp[(1) - (1)])->param_count = 0;
-               (yyval) = list_create((yyvsp[(1) - (1)]));
+               (yyvsp[0])->param_count = 0;
+               (yyval) = list_create((yyvsp[0]));
          }
+#line 3117 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 96:
-/* Line 1792 of yacc.c  */
-#line 1257 "awkgram.y"
+#line 1263 "awkgram.y" /* yacc.c:1646  */
     {
-               (yyvsp[(3) - (3)])->param_count =  (yyvsp[(1) - 
(3)])->lasti->param_count + 1;
-               (yyval) = list_append((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]));
+               (yyvsp[0])->param_count =  (yyvsp[-2])->lasti->param_count + 1;
+               (yyval) = list_append((yyvsp[-2]), (yyvsp[0]));
                yyerrok;
          }
+#line 3127 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 97:
-/* Line 1792 of yacc.c  */
-#line 1263 "awkgram.y"
+#line 1269 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
+#line 3133 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 98:
-/* Line 1792 of yacc.c  */
-#line 1265 "awkgram.y"
-    { (yyval) = (yyvsp[(1) - (2)]); }
+#line 1271 "awkgram.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[-1]); }
+#line 3139 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 99:
-/* Line 1792 of yacc.c  */
-#line 1267 "awkgram.y"
-    { (yyval) = (yyvsp[(1) - (3)]); }
+#line 1273 "awkgram.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[-2]); }
+#line 3145 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 100:
-/* Line 1792 of yacc.c  */
-#line 1273 "awkgram.y"
+#line 1279 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
+#line 3151 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 101:
-/* Line 1792 of yacc.c  */
-#line 1275 "awkgram.y"
-    { (yyval) = (yyvsp[(1) - (1)]); }
+#line 1281 "awkgram.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 3157 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 102:
-/* Line 1792 of yacc.c  */
-#line 1280 "awkgram.y"
+#line 1286 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
+#line 3163 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 103:
-/* Line 1792 of yacc.c  */
-#line 1282 "awkgram.y"
-    { (yyval) = (yyvsp[(1) - (1)]); }
+#line 1288 "awkgram.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 3169 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 104:
-/* Line 1792 of yacc.c  */
-#line 1287 "awkgram.y"
-    {  (yyval) = mk_expression_list(NULL, (yyvsp[(1) - (1)])); }
+#line 1293 "awkgram.y" /* yacc.c:1646  */
+    {  (yyval) = mk_expression_list(NULL, (yyvsp[0])); }
+#line 3175 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 105:
-/* Line 1792 of yacc.c  */
-#line 1289 "awkgram.y"
+#line 1295 "awkgram.y" /* yacc.c:1646  */
     {
-               (yyval) = mk_expression_list((yyvsp[(1) - (3)]), (yyvsp[(3) - 
(3)]));
+               (yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
                yyerrok;
          }
+#line 3184 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 106:
-/* Line 1792 of yacc.c  */
-#line 1294 "awkgram.y"
+#line 1300 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
+#line 3190 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 107:
-/* Line 1792 of yacc.c  */
-#line 1296 "awkgram.y"
+#line 1302 "awkgram.y" /* yacc.c:1646  */
     {
                /*
                 * Returning the expression list instead of NULL lets
                 * snode get a list of arguments that it can count.
                 */
-               (yyval) = (yyvsp[(1) - (2)]);
+               (yyval) = (yyvsp[-1]);
          }
+#line 3202 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 108:
-/* Line 1792 of yacc.c  */
-#line 1304 "awkgram.y"
+#line 1310 "awkgram.y" /* yacc.c:1646  */
     {
                /* Ditto */
-               (yyval) = mk_expression_list((yyvsp[(1) - (3)]), (yyvsp[(3) - 
(3)]));
+               (yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
          }
+#line 3211 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 109:
-/* Line 1792 of yacc.c  */
-#line 1309 "awkgram.y"
+#line 1315 "awkgram.y" /* yacc.c:1646  */
     {
                /* Ditto */
-               (yyval) = (yyvsp[(1) - (3)]);
+               (yyval) = (yyvsp[-2]);
          }
+#line 3220 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 110:
-/* Line 1792 of yacc.c  */
-#line 1318 "awkgram.y"
+#line 1324 "awkgram.y" /* yacc.c:1646  */
     {
-               if (do_lint && (yyvsp[(3) - (3)])->lasti->opcode == 
Op_match_rec)
-                       lintwarn_ln((yyvsp[(2) - (3)])->source_line,
+               if (do_lint && (yyvsp[0])->lasti->opcode == Op_match_rec)
+                       lintwarn_ln((yyvsp[-1])->source_line,
                                _("regular expression on right of assignment"));
-               (yyval) = mk_assignment((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), 
(yyvsp[(2) - (3)]));
+               (yyval) = mk_assignment((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1]));
          }
+#line 3231 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 111:
-/* Line 1792 of yacc.c  */
-#line 1325 "awkgram.y"
-    {  (yyval) = mk_boolean((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) 
- (3)])); }
+#line 1331 "awkgram.y" /* yacc.c:1646  */
+    {  (yyval) = mk_boolean((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
+#line 3237 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 112:
-/* Line 1792 of yacc.c  */
-#line 1327 "awkgram.y"
-    {  (yyval) = mk_boolean((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) 
- (3)])); }
+#line 1333 "awkgram.y" /* yacc.c:1646  */
+    {  (yyval) = mk_boolean((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
+#line 3243 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 113:
-/* Line 1792 of yacc.c  */
-#line 1329 "awkgram.y"
+#line 1335 "awkgram.y" /* yacc.c:1646  */
     {
-               if ((yyvsp[(1) - (3)])->lasti->opcode == Op_match_rec)
-                       warning_ln((yyvsp[(2) - (3)])->source_line,
+               if ((yyvsp[-2])->lasti->opcode == Op_match_rec)
+                       warning_ln((yyvsp[-1])->source_line,
                                _("regular expression on left of `~' or `!~' 
operator"));
 
-               if ((yyvsp[(3) - (3)])->lasti == (yyvsp[(3) - (3)])->nexti && 
(yyvsp[(3) - (3)])->nexti->opcode == Op_match_rec) {
-                       (yyvsp[(2) - (3)])->memory = (yyvsp[(3) - 
(3)])->nexti->memory;
-                       bcfree((yyvsp[(3) - (3)])->nexti);      /* Op_match_rec 
*/
-                       bcfree((yyvsp[(3) - (3)]));                     /* 
Op_list */
-                       (yyval) = list_append((yyvsp[(1) - (3)]), (yyvsp[(2) - 
(3)]));
+               if ((yyvsp[0])->lasti == (yyvsp[0])->nexti && 
(yyvsp[0])->nexti->opcode == Op_match_rec) {
+                       (yyvsp[-1])->memory = (yyvsp[0])->nexti->memory;
+                       bcfree((yyvsp[0])->nexti);      /* Op_match_rec */
+                       bcfree((yyvsp[0]));                     /* Op_list */
+                       (yyval) = list_append((yyvsp[-2]), (yyvsp[-1]));
                } else {
-                       (yyvsp[(2) - (3)])->memory = 
make_regnode(Node_dynregex, NULL);
-                       (yyval) = list_append(list_merge((yyvsp[(1) - (3)]), 
(yyvsp[(3) - (3)])), (yyvsp[(2) - (3)]));
+                       (yyvsp[-1])->memory = make_regnode(Node_dynregex, NULL);
+                       (yyval) = list_append(list_merge((yyvsp[-2]), 
(yyvsp[0])), (yyvsp[-1]));
                }
          }
+#line 3263 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 114:
-/* Line 1792 of yacc.c  */
-#line 1345 "awkgram.y"
+#line 1351 "awkgram.y" /* yacc.c:1646  */
     {
                if (do_lint_old)
-                       warning_ln((yyvsp[(2) - (3)])->source_line,
+                       warning_ln((yyvsp[-1])->source_line,
                                _("old awk does not support the keyword `in' 
except after `for'"));
-               (yyvsp[(3) - (3)])->nexti->opcode = Op_push_array;
-               (yyvsp[(2) - (3)])->opcode = Op_in_array;
-               (yyvsp[(2) - (3)])->expr_count = 1;
-               (yyval) = list_append(list_merge((yyvsp[(1) - (3)]), (yyvsp[(3) 
- (3)])), (yyvsp[(2) - (3)]));
+               (yyvsp[0])->nexti->opcode = Op_push_array;
+               (yyvsp[-1])->opcode = Op_in_array;
+               (yyvsp[-1])->expr_count = 1;
+               (yyval) = list_append(list_merge((yyvsp[-2]), (yyvsp[0])), 
(yyvsp[-1]));
          }
+#line 3277 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 115:
-/* Line 1792 of yacc.c  */
-#line 1355 "awkgram.y"
+#line 1361 "awkgram.y" /* yacc.c:1646  */
     {
-               if (do_lint && (yyvsp[(3) - (3)])->lasti->opcode == 
Op_match_rec)
-                       lintwarn_ln((yyvsp[(2) - (3)])->source_line,
+               if (do_lint && (yyvsp[0])->lasti->opcode == Op_match_rec)
+                       lintwarn_ln((yyvsp[-1])->source_line,
                                _("regular expression on right of comparison"));
-               (yyval) = list_append(list_merge((yyvsp[(1) - (3)]), (yyvsp[(3) 
- (3)])), (yyvsp[(2) - (3)]));
+               (yyval) = list_append(list_merge((yyvsp[-2]), (yyvsp[0])), 
(yyvsp[-1]));
          }
+#line 3288 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 116:
-/* Line 1792 of yacc.c  */
-#line 1362 "awkgram.y"
-    { (yyval) = mk_condition((yyvsp[(1) - (5)]), (yyvsp[(2) - (5)]), 
(yyvsp[(3) - (5)]), (yyvsp[(4) - (5)]), (yyvsp[(5) - (5)])); }
+#line 1368 "awkgram.y" /* yacc.c:1646  */
+    { (yyval) = mk_condition((yyvsp[-4]), (yyvsp[-3]), (yyvsp[-2]), 
(yyvsp[-1]), (yyvsp[0])); }
+#line 3294 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 117:
-/* Line 1792 of yacc.c  */
-#line 1364 "awkgram.y"
-    { (yyval) = (yyvsp[(1) - (1)]); }
+#line 1370 "awkgram.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 3300 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 118:
-/* Line 1792 of yacc.c  */
-#line 1369 "awkgram.y"
-    { (yyval) = (yyvsp[(1) - (1)]); }
+#line 1375 "awkgram.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 3306 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 119:
-/* Line 1792 of yacc.c  */
-#line 1371 "awkgram.y"
-    { (yyval) = (yyvsp[(1) - (1)]); }
+#line 1377 "awkgram.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 3312 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 120:
-/* Line 1792 of yacc.c  */
-#line 1373 "awkgram.y"
+#line 1379 "awkgram.y" /* yacc.c:1646  */
     {  
-               (yyvsp[(2) - (2)])->opcode = Op_assign_quotient;
-               (yyval) = (yyvsp[(2) - (2)]);
+               (yyvsp[0])->opcode = Op_assign_quotient;
+               (yyval) = (yyvsp[0]);
          }
+#line 3321 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 121:
-/* Line 1792 of yacc.c  */
-#line 1381 "awkgram.y"
-    { (yyval) = (yyvsp[(1) - (1)]); }
+#line 1387 "awkgram.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 3327 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 122:
-/* Line 1792 of yacc.c  */
-#line 1383 "awkgram.y"
-    { (yyval) = (yyvsp[(1) - (1)]); }
+#line 1389 "awkgram.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 3333 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 123:
-/* Line 1792 of yacc.c  */
-#line 1388 "awkgram.y"
-    { (yyval) = (yyvsp[(1) - (1)]); }
+#line 1394 "awkgram.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 3339 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 124:
-/* Line 1792 of yacc.c  */
-#line 1390 "awkgram.y"
-    { (yyval) = (yyvsp[(1) - (1)]); }
+#line 1396 "awkgram.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 3345 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 125:
-/* Line 1792 of yacc.c  */
-#line 1395 "awkgram.y"
-    { (yyval) = (yyvsp[(1) - (1)]); }
+#line 1401 "awkgram.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 3351 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 126:
-/* Line 1792 of yacc.c  */
-#line 1397 "awkgram.y"
-    { (yyval) = (yyvsp[(1) - (1)]); }
+#line 1403 "awkgram.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 3357 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 127:
-/* Line 1792 of yacc.c  */
-#line 1399 "awkgram.y"
+#line 1405 "awkgram.y" /* yacc.c:1646  */
     {
                int count = 2;
                bool is_simple_var = false;
 
-               if ((yyvsp[(1) - (2)])->lasti->opcode == Op_concat) {
+               if ((yyvsp[-1])->lasti->opcode == Op_concat) {
                        /* multiple (> 2) adjacent strings optimization */
-                       is_simple_var = ((yyvsp[(1) - (2)])->lasti->concat_flag 
& CSVAR);
-                       count = (yyvsp[(1) - (2)])->lasti->expr_count + 1;
-                       (yyvsp[(1) - (2)])->lasti->opcode = Op_no_op;
+                       is_simple_var = ((yyvsp[-1])->lasti->concat_flag & 
CSVAR);
+                       count = (yyvsp[-1])->lasti->expr_count + 1;
+                       (yyvsp[-1])->lasti->opcode = Op_no_op;
                } else {
-                       is_simple_var = ((yyvsp[(1) - (2)])->nexti->opcode == 
Op_push
-                                       && (yyvsp[(1) - (2)])->lasti == 
(yyvsp[(1) - (2)])->nexti); /* first exp. is a simple
+                       is_simple_var = ((yyvsp[-1])->nexti->opcode == Op_push
+                                       && (yyvsp[-1])->lasti == 
(yyvsp[-1])->nexti); /* first exp. is a simple
                                                                     * 
variable?; kludge for use
                                                                     * in 
Op_assign_concat.
                                                                     */
                }
 
                if (do_optimize
-                       && (yyvsp[(1) - (2)])->nexti == (yyvsp[(1) - 
(2)])->lasti && (yyvsp[(1) - (2)])->nexti->opcode == Op_push_i
-                       && (yyvsp[(2) - (2)])->nexti == (yyvsp[(2) - 
(2)])->lasti && (yyvsp[(2) - (2)])->nexti->opcode == Op_push_i
+                       && (yyvsp[-1])->nexti == (yyvsp[-1])->lasti && 
(yyvsp[-1])->nexti->opcode == Op_push_i
+                       && (yyvsp[0])->nexti == (yyvsp[0])->lasti && 
(yyvsp[0])->nexti->opcode == Op_push_i
                ) {
-                       NODE *n1 = (yyvsp[(1) - (2)])->nexti->memory;
-                       NODE *n2 = (yyvsp[(2) - (2)])->nexti->memory;
+                       NODE *n1 = (yyvsp[-1])->nexti->memory;
+                       NODE *n2 = (yyvsp[0])->nexti->memory;
                        size_t nlen;
 
                        n1 = force_string(n1);
@@ -3592,184 +3393,184 @@ regular_print:
                        n1->flags &= ~(NUMCUR|NUMBER|NUMINT);
                        n1->flags |= (STRING|STRCUR);
                        unref(n2);
-                       bcfree((yyvsp[(2) - (2)])->nexti);
-                       bcfree((yyvsp[(2) - (2)]));
-                       (yyval) = (yyvsp[(1) - (2)]);
+                       bcfree((yyvsp[0])->nexti);
+                       bcfree((yyvsp[0]));
+                       (yyval) = (yyvsp[-1]);
                } else {
-                       (yyval) = list_append(list_merge((yyvsp[(1) - (2)]), 
(yyvsp[(2) - (2)])), instruction(Op_concat));
+                       (yyval) = list_append(list_merge((yyvsp[-1]), 
(yyvsp[0])), instruction(Op_concat));
                        (yyval)->lasti->concat_flag = (is_simple_var ? CSVAR : 
0);
                        (yyval)->lasti->expr_count = count;
                        if (count > max_args)
                                max_args = count;
                }
          }
+#line 3408 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 129:
-/* Line 1792 of yacc.c  */
-#line 1451 "awkgram.y"
-    { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - 
(3)])); }
+#line 1457 "awkgram.y" /* yacc.c:1646  */
+    { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
+#line 3414 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 130:
-/* Line 1792 of yacc.c  */
-#line 1453 "awkgram.y"
-    { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - 
(3)])); }
+#line 1459 "awkgram.y" /* yacc.c:1646  */
+    { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
+#line 3420 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 131:
-/* Line 1792 of yacc.c  */
-#line 1455 "awkgram.y"
-    { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - 
(3)])); }
+#line 1461 "awkgram.y" /* yacc.c:1646  */
+    { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
+#line 3426 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 132:
-/* Line 1792 of yacc.c  */
-#line 1457 "awkgram.y"
-    { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - 
(3)])); }
+#line 1463 "awkgram.y" /* yacc.c:1646  */
+    { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
+#line 3432 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 133:
-/* Line 1792 of yacc.c  */
-#line 1459 "awkgram.y"
-    { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - 
(3)])); }
+#line 1465 "awkgram.y" /* yacc.c:1646  */
+    { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
+#line 3438 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 134:
-/* Line 1792 of yacc.c  */
-#line 1461 "awkgram.y"
-    { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - 
(3)])); }
+#line 1467 "awkgram.y" /* yacc.c:1646  */
+    { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
+#line 3444 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 135:
-/* Line 1792 of yacc.c  */
-#line 1463 "awkgram.y"
+#line 1469 "awkgram.y" /* yacc.c:1646  */
     {
                /*
                 * In BEGINFILE/ENDFILE, allow `getline [var] < file'
                 */
 
-               if ((rule == BEGINFILE || rule == ENDFILE) && (yyvsp[(3) - 
(3)]) == NULL)
-                       error_ln((yyvsp[(1) - (3)])->source_line,
+               if ((rule == BEGINFILE || rule == ENDFILE) && (yyvsp[0]) == 
NULL)
+                       error_ln((yyvsp[-2])->source_line,
                                 _("non-redirected `getline' invalid inside 
`%s' rule"), ruletab[rule]);
-               if (do_lint && rule == END && (yyvsp[(3) - (3)]) == NULL)
-                       lintwarn_ln((yyvsp[(1) - (3)])->source_line,
+               if (do_lint && rule == END && (yyvsp[0]) == NULL)
+                       lintwarn_ln((yyvsp[-2])->source_line,
                                _("non-redirected `getline' undefined inside 
END action"));
-               (yyval) = mk_getline((yyvsp[(1) - (3)]), (yyvsp[(2) - (3)]), 
(yyvsp[(3) - (3)]), redirect_input);
+               (yyval) = mk_getline((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]), 
redirect_input);
          }
+#line 3462 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 136:
-/* Line 1792 of yacc.c  */
-#line 1477 "awkgram.y"
+#line 1483 "awkgram.y" /* yacc.c:1646  */
     {
-               (yyvsp[(2) - (2)])->opcode = Op_postincrement;
-               (yyval) = mk_assignment((yyvsp[(1) - (2)]), NULL, (yyvsp[(2) - 
(2)]));
+               (yyvsp[0])->opcode = Op_postincrement;
+               (yyval) = mk_assignment((yyvsp[-1]), NULL, (yyvsp[0]));
          }
+#line 3471 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 137:
-/* Line 1792 of yacc.c  */
-#line 1482 "awkgram.y"
+#line 1488 "awkgram.y" /* yacc.c:1646  */
     {
-               (yyvsp[(2) - (2)])->opcode = Op_postdecrement;
-               (yyval) = mk_assignment((yyvsp[(1) - (2)]), NULL, (yyvsp[(2) - 
(2)]));
+               (yyvsp[0])->opcode = Op_postdecrement;
+               (yyval) = mk_assignment((yyvsp[-1]), NULL, (yyvsp[0]));
          }
+#line 3480 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 138:
-/* Line 1792 of yacc.c  */
-#line 1487 "awkgram.y"
+#line 1493 "awkgram.y" /* yacc.c:1646  */
     {
                if (do_lint_old) {
-                   warning_ln((yyvsp[(4) - (5)])->source_line,
+                   warning_ln((yyvsp[-1])->source_line,
                                _("old awk does not support the keyword `in' 
except after `for'"));
-                   warning_ln((yyvsp[(4) - (5)])->source_line,
+                   warning_ln((yyvsp[-1])->source_line,
                                _("old awk does not support multidimensional 
arrays"));
                }
-               (yyvsp[(5) - (5)])->nexti->opcode = Op_push_array;
-               (yyvsp[(4) - (5)])->opcode = Op_in_array;
-               if ((yyvsp[(2) - (5)]) == NULL) {       /* error */
+               (yyvsp[0])->nexti->opcode = Op_push_array;
+               (yyvsp[-1])->opcode = Op_in_array;
+               if ((yyvsp[-3]) == NULL) {      /* error */
                        errcount++;
-                       (yyvsp[(4) - (5)])->expr_count = 0;
-                       (yyval) = list_merge((yyvsp[(5) - (5)]), (yyvsp[(4) - 
(5)]));
+                       (yyvsp[-1])->expr_count = 0;
+                       (yyval) = list_merge((yyvsp[0]), (yyvsp[-1]));
                } else {
-                       INSTRUCTION *t = (yyvsp[(2) - (5)]);
-                       (yyvsp[(4) - (5)])->expr_count = count_expressions(&t, 
false);
-                       (yyval) = list_append(list_merge(t, (yyvsp[(5) - 
(5)])), (yyvsp[(4) - (5)]));
+                       INSTRUCTION *t = (yyvsp[-3]);
+                       (yyvsp[-1])->expr_count = count_expressions(&t, false);
+                       (yyval) = list_append(list_merge(t, (yyvsp[0])), 
(yyvsp[-1]));
                }
          }
+#line 3504 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 139:
-/* Line 1792 of yacc.c  */
-#line 1512 "awkgram.y"
+#line 1518 "awkgram.y" /* yacc.c:1646  */
     {
-                 (yyval) = mk_getline((yyvsp[(3) - (4)]), (yyvsp[(4) - (4)]), 
(yyvsp[(1) - (4)]), (yyvsp[(2) - (4)])->redir_type);
-                 bcfree((yyvsp[(2) - (4)]));
+                 (yyval) = mk_getline((yyvsp[-1]), (yyvsp[0]), (yyvsp[-3]), 
(yyvsp[-2])->redir_type);
+                 bcfree((yyvsp[-2]));
                }
+#line 3513 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 140:
-/* Line 1792 of yacc.c  */
-#line 1518 "awkgram.y"
-    { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - 
(3)])); }
+#line 1524 "awkgram.y" /* yacc.c:1646  */
+    { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
+#line 3519 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 141:
-/* Line 1792 of yacc.c  */
-#line 1520 "awkgram.y"
-    { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - 
(3)])); }
+#line 1526 "awkgram.y" /* yacc.c:1646  */
+    { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
+#line 3525 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 142:
-/* Line 1792 of yacc.c  */
-#line 1522 "awkgram.y"
-    { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - 
(3)])); }
+#line 1528 "awkgram.y" /* yacc.c:1646  */
+    { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
+#line 3531 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 143:
-/* Line 1792 of yacc.c  */
-#line 1524 "awkgram.y"
-    { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - 
(3)])); }
+#line 1530 "awkgram.y" /* yacc.c:1646  */
+    { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
+#line 3537 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 144:
-/* Line 1792 of yacc.c  */
-#line 1526 "awkgram.y"
-    { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - 
(3)])); }
+#line 1532 "awkgram.y" /* yacc.c:1646  */
+    { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
+#line 3543 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 145:
-/* Line 1792 of yacc.c  */
-#line 1528 "awkgram.y"
-    { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - 
(3)])); }
+#line 1534 "awkgram.y" /* yacc.c:1646  */
+    { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
+#line 3549 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 146:
-/* Line 1792 of yacc.c  */
-#line 1533 "awkgram.y"
+#line 1539 "awkgram.y" /* yacc.c:1646  */
     {
-               (yyval) = list_create((yyvsp[(1) - (1)]));
+               (yyval) = list_create((yyvsp[0]));
          }
+#line 3557 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 147:
-/* Line 1792 of yacc.c  */
-#line 1537 "awkgram.y"
+#line 1543 "awkgram.y" /* yacc.c:1646  */
     {
-               if ((yyvsp[(2) - (2)])->opcode == Op_match_rec) {
-                       (yyvsp[(2) - (2)])->opcode = Op_nomatch;
-                       (yyvsp[(1) - (2)])->opcode = Op_push_i;
-                       (yyvsp[(1) - (2)])->memory = make_number(0.0);  
-                       (yyval) = 
list_append(list_append(list_create((yyvsp[(1) - (2)])),
-                                               instruction(Op_field_spec)), 
(yyvsp[(2) - (2)]));
+               if ((yyvsp[0])->opcode == Op_match_rec) {
+                       (yyvsp[0])->opcode = Op_nomatch;
+                       (yyvsp[-1])->opcode = Op_push_i;
+                       (yyvsp[-1])->memory = make_number(0.0); 
+                       (yyval) = 
list_append(list_append(list_create((yyvsp[-1])),
+                                               instruction(Op_field_spec)), 
(yyvsp[0]));
                } else {
-                       if (do_optimize && (yyvsp[(2) - (2)])->nexti == 
(yyvsp[(2) - (2)])->lasti
-                                       && (yyvsp[(2) - (2)])->nexti->opcode == 
Op_push_i
-                                       && ((yyvsp[(2) - 
(2)])->nexti->memory->flags & (MPFN|MPZN)) == 0
+                       if (do_optimize && (yyvsp[0])->nexti == 
(yyvsp[0])->lasti
+                                       && (yyvsp[0])->nexti->opcode == 
Op_push_i
+                                       && ((yyvsp[0])->nexti->memory->flags & 
(MPFN|MPZN)) == 0
                        ) {
-                               NODE *n = (yyvsp[(2) - (2)])->nexti->memory;
+                               NODE *n = (yyvsp[0])->nexti->memory;
                                if ((n->flags & (STRCUR|STRING)) != 0) {
                                        n->numbr = (AWKNUM) (n->stlen == 0);
                                        n->flags &= ~(STRCUR|STRING);
@@ -3779,139 +3580,139 @@ regular_print:
                                        n->stlen = 0;
                                } else
                                        n->numbr = (AWKNUM) (n->numbr == 0.0);
-                               bcfree((yyvsp[(1) - (2)]));
-                               (yyval) = (yyvsp[(2) - (2)]);
+                               bcfree((yyvsp[-1]));
+                               (yyval) = (yyvsp[0]);
                        } else {
-                               (yyvsp[(1) - (2)])->opcode = Op_not;
-                               add_lint((yyvsp[(2) - (2)]), 
LINT_assign_in_cond);
-                               (yyval) = list_append((yyvsp[(2) - (2)]), 
(yyvsp[(1) - (2)]));
+                               (yyvsp[-1])->opcode = Op_not;
+                               add_lint((yyvsp[0]), LINT_assign_in_cond);
+                               (yyval) = list_append((yyvsp[0]), (yyvsp[-1]));
                        }
                }
           }
+#line 3593 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 148:
-/* Line 1792 of yacc.c  */
-#line 1569 "awkgram.y"
-    { (yyval) = (yyvsp[(2) - (3)]); }
+#line 1575 "awkgram.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[-1]); }
+#line 3599 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 149:
-/* Line 1792 of yacc.c  */
-#line 1571 "awkgram.y"
+#line 1577 "awkgram.y" /* yacc.c:1646  */
     {
-               (yyval) = snode((yyvsp[(3) - (4)]), (yyvsp[(1) - (4)]));
+               (yyval) = snode((yyvsp[-1]), (yyvsp[-3]));
                if ((yyval) == NULL)
                        YYABORT;
          }
+#line 3609 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 150:
-/* Line 1792 of yacc.c  */
-#line 1577 "awkgram.y"
+#line 1583 "awkgram.y" /* yacc.c:1646  */
     {
-               (yyval) = snode((yyvsp[(3) - (4)]), (yyvsp[(1) - (4)]));
+               (yyval) = snode((yyvsp[-1]), (yyvsp[-3]));
                if ((yyval) == NULL)
                        YYABORT;
          }
+#line 3619 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 151:
-/* Line 1792 of yacc.c  */
-#line 1583 "awkgram.y"
+#line 1589 "awkgram.y" /* yacc.c:1646  */
     {
                static bool warned = false;
 
                if (do_lint && ! warned) {
                        warned = true;
-                       lintwarn_ln((yyvsp[(1) - (1)])->source_line,
+                       lintwarn_ln((yyvsp[0])->source_line,
                                _("call of `length' without parentheses is not 
portable"));
                }
-               (yyval) = snode(NULL, (yyvsp[(1) - (1)]));
+               (yyval) = snode(NULL, (yyvsp[0]));
                if ((yyval) == NULL)
                        YYABORT;
          }
+#line 3636 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 154:
-/* Line 1792 of yacc.c  */
-#line 1598 "awkgram.y"
+#line 1604 "awkgram.y" /* yacc.c:1646  */
     {
-               (yyvsp[(1) - (2)])->opcode = Op_preincrement;
-               (yyval) = mk_assignment((yyvsp[(2) - (2)]), NULL, (yyvsp[(1) - 
(2)]));
+               (yyvsp[-1])->opcode = Op_preincrement;
+               (yyval) = mk_assignment((yyvsp[0]), NULL, (yyvsp[-1]));
          }
+#line 3645 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 155:
-/* Line 1792 of yacc.c  */
-#line 1603 "awkgram.y"
+#line 1609 "awkgram.y" /* yacc.c:1646  */
     {
-               (yyvsp[(1) - (2)])->opcode = Op_predecrement;
-               (yyval) = mk_assignment((yyvsp[(2) - (2)]), NULL, (yyvsp[(1) - 
(2)]));
+               (yyvsp[-1])->opcode = Op_predecrement;
+               (yyval) = mk_assignment((yyvsp[0]), NULL, (yyvsp[-1]));
          }
+#line 3654 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 156:
-/* Line 1792 of yacc.c  */
-#line 1608 "awkgram.y"
+#line 1614 "awkgram.y" /* yacc.c:1646  */
     {
-               (yyval) = list_create((yyvsp[(1) - (1)]));
+               (yyval) = list_create((yyvsp[0]));
          }
+#line 3662 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 157:
-/* Line 1792 of yacc.c  */
-#line 1612 "awkgram.y"
+#line 1618 "awkgram.y" /* yacc.c:1646  */
     {
-               (yyval) = list_create((yyvsp[(1) - (1)]));
+               (yyval) = list_create((yyvsp[0]));
          }
+#line 3670 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 158:
-/* Line 1792 of yacc.c  */
-#line 1616 "awkgram.y"
+#line 1622 "awkgram.y" /* yacc.c:1646  */
     {
-               if ((yyvsp[(2) - (2)])->lasti->opcode == Op_push_i
-                       && ((yyvsp[(2) - (2)])->lasti->memory->flags & 
(STRCUR|STRING)) == 0
+               if ((yyvsp[0])->lasti->opcode == Op_push_i
+                       && ((yyvsp[0])->lasti->memory->flags & (STRCUR|STRING)) 
== 0
                ) {
-                       NODE *n = (yyvsp[(2) - (2)])->lasti->memory;
+                       NODE *n = (yyvsp[0])->lasti->memory;
                        (void) force_number(n);
                        negate_num(n);                  
-                       (yyval) = (yyvsp[(2) - (2)]);
-                       bcfree((yyvsp[(1) - (2)]));
+                       (yyval) = (yyvsp[0]);
+                       bcfree((yyvsp[-1]));
                } else {
-                       (yyvsp[(1) - (2)])->opcode = Op_unary_minus;
-                       (yyval) = list_append((yyvsp[(2) - (2)]), (yyvsp[(1) - 
(2)]));
+                       (yyvsp[-1])->opcode = Op_unary_minus;
+                       (yyval) = list_append((yyvsp[0]), (yyvsp[-1]));
                }
          }
+#line 3689 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 159:
-/* Line 1792 of yacc.c  */
-#line 1631 "awkgram.y"
+#line 1637 "awkgram.y" /* yacc.c:1646  */
     {
            /*
             * was: $$ = $2
             * POSIX semantics: force a conversion to numeric type
             */
-               (yyvsp[(1) - (2)])->opcode = Op_plus_i;
-               (yyvsp[(1) - (2)])->memory = make_number(0.0);
-               (yyval) = list_append((yyvsp[(2) - (2)]), (yyvsp[(1) - (2)]));
+               (yyvsp[-1])->opcode = Op_plus_i;
+               (yyvsp[-1])->memory = make_number(0.0);
+               (yyval) = list_append((yyvsp[0]), (yyvsp[-1]));
          }
+#line 3703 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 160:
-/* Line 1792 of yacc.c  */
-#line 1644 "awkgram.y"
+#line 1650 "awkgram.y" /* yacc.c:1646  */
     {
-               func_use((yyvsp[(1) - (1)])->lasti->func_name, FUNC_USE);
-               (yyval) = (yyvsp[(1) - (1)]);
+               func_use((yyvsp[0])->lasti->func_name, FUNC_USE);
+               (yyval) = (yyvsp[0]);
          }
+#line 3712 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 161:
-/* Line 1792 of yacc.c  */
-#line 1649 "awkgram.y"
+#line 1655 "awkgram.y" /* yacc.c:1646  */
     {
                /* indirect function call */
                INSTRUCTION *f, *t;
@@ -3927,7 +3728,7 @@ regular_print:
                        lintwarn("%s", msg);
                }
                
-               f = (yyvsp[(2) - (2)])->lasti;
+               f = (yyvsp[0])->lasti;
                f->opcode = Op_indirect_func_call;
                name = estrdup(f->func_name, strlen(f->func_name));
                if (is_std_var(name))
@@ -3942,71 +3743,71 @@ regular_print:
                 *              @f(f="real_fun")
                 */
 
-               (yyval) = list_prepend((yyvsp[(2) - (2)]), t);
+               (yyval) = list_prepend((yyvsp[0]), t);
          }
+#line 3749 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 162:
-/* Line 1792 of yacc.c  */
-#line 1685 "awkgram.y"
+#line 1691 "awkgram.y" /* yacc.c:1646  */
     {
-               param_sanity((yyvsp[(3) - (4)]));
-               (yyvsp[(1) - (4)])->opcode = Op_func_call;
-               (yyvsp[(1) - (4)])->func_body = NULL;
-               if ((yyvsp[(3) - (4)]) == NULL) {       /* no argument or error 
*/
-                       ((yyvsp[(1) - (4)]) + 1)->expr_count = 0;
-                       (yyval) = list_create((yyvsp[(1) - (4)]));
+               param_sanity((yyvsp[-1]));
+               (yyvsp[-3])->opcode = Op_func_call;
+               (yyvsp[-3])->func_body = NULL;
+               if ((yyvsp[-1]) == NULL) {      /* no argument or error */
+                       ((yyvsp[-3]) + 1)->expr_count = 0;
+                       (yyval) = list_create((yyvsp[-3]));
                } else {
-                       INSTRUCTION *t = (yyvsp[(3) - (4)]);
-                       ((yyvsp[(1) - (4)]) + 1)->expr_count = 
count_expressions(&t, true); 
-                       (yyval) = list_append(t, (yyvsp[(1) - (4)]));
+                       INSTRUCTION *t = (yyvsp[-1]);
+                       ((yyvsp[-3]) + 1)->expr_count = count_expressions(&t, 
true); 
+                       (yyval) = list_append(t, (yyvsp[-3]));
                }
          }
+#line 3767 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 163:
-/* Line 1792 of yacc.c  */
-#line 1702 "awkgram.y"
+#line 1708 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
+#line 3773 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 164:
-/* Line 1792 of yacc.c  */
-#line 1704 "awkgram.y"
-    { (yyval) = (yyvsp[(1) - (1)]); }
+#line 1710 "awkgram.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 3779 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 165:
-/* Line 1792 of yacc.c  */
-#line 1709 "awkgram.y"
+#line 1715 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
+#line 3785 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 166:
-/* Line 1792 of yacc.c  */
-#line 1711 "awkgram.y"
-    { (yyval) = (yyvsp[(1) - (2)]); }
+#line 1717 "awkgram.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[-1]); }
+#line 3791 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 167:
-/* Line 1792 of yacc.c  */
-#line 1716 "awkgram.y"
-    {  (yyval) = (yyvsp[(1) - (1)]); }
+#line 1722 "awkgram.y" /* yacc.c:1646  */
+    {  (yyval) = (yyvsp[0]); }
+#line 3797 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 168:
-/* Line 1792 of yacc.c  */
-#line 1718 "awkgram.y"
+#line 1724 "awkgram.y" /* yacc.c:1646  */
     {
-               (yyval) = list_merge((yyvsp[(1) - (2)]), (yyvsp[(2) - (2)]));
+               (yyval) = list_merge((yyvsp[-1]), (yyvsp[0]));
          }
+#line 3805 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 169:
-/* Line 1792 of yacc.c  */
-#line 1725 "awkgram.y"
+#line 1731 "awkgram.y" /* yacc.c:1646  */
     {
-               INSTRUCTION *ip = (yyvsp[(1) - (1)])->lasti; 
+               INSTRUCTION *ip = (yyvsp[0])->lasti; 
                int count = ip->sub_count;      /* # of SUBSEP-seperated 
expressions */
                if (count > 1) {
                        /* change Op_subscript or Op_sub_array to Op_concat */
@@ -4016,152 +3817,152 @@ regular_print:
                } else
                        ip->opcode = Op_no_op;
                sub_counter++;  /* count # of dimensions */
-               (yyval) = (yyvsp[(1) - (1)]);
+               (yyval) = (yyvsp[0]);
          }
+#line 3823 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 170:
-/* Line 1792 of yacc.c  */
-#line 1742 "awkgram.y"
+#line 1748 "awkgram.y" /* yacc.c:1646  */
     {
-               INSTRUCTION *t = (yyvsp[(2) - (3)]);
-               if ((yyvsp[(2) - (3)]) == NULL) {
-                       error_ln((yyvsp[(3) - (3)])->source_line,
+               INSTRUCTION *t = (yyvsp[-1]);
+               if ((yyvsp[-1]) == NULL) {
+                       error_ln((yyvsp[0])->source_line,
                                _("invalid subscript expression"));
                        /* install Null string as subscript. */
                        t = list_create(instruction(Op_push_i));
                        t->nexti->memory = dupnode(Nnull_string);
-                       (yyvsp[(3) - (3)])->sub_count = 1;                      
+                       (yyvsp[0])->sub_count = 1;                      
                } else
-                       (yyvsp[(3) - (3)])->sub_count = count_expressions(&t, 
false);
-               (yyval) = list_append(t, (yyvsp[(3) - (3)]));
+                       (yyvsp[0])->sub_count = count_expressions(&t, false);
+               (yyval) = list_append(t, (yyvsp[0]));
          }
+#line 3841 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 171:
-/* Line 1792 of yacc.c  */
-#line 1759 "awkgram.y"
-    {  (yyval) = (yyvsp[(1) - (1)]); }
+#line 1765 "awkgram.y" /* yacc.c:1646  */
+    {  (yyval) = (yyvsp[0]); }
+#line 3847 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 172:
-/* Line 1792 of yacc.c  */
-#line 1761 "awkgram.y"
+#line 1767 "awkgram.y" /* yacc.c:1646  */
     {
-               (yyval) = list_merge((yyvsp[(1) - (2)]), (yyvsp[(2) - (2)]));
+               (yyval) = list_merge((yyvsp[-1]), (yyvsp[0]));
          }
+#line 3855 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 173:
-/* Line 1792 of yacc.c  */
-#line 1768 "awkgram.y"
-    { (yyval) = (yyvsp[(1) - (2)]); }
+#line 1774 "awkgram.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[-1]); }
+#line 3861 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 174:
-/* Line 1792 of yacc.c  */
-#line 1773 "awkgram.y"
+#line 1779 "awkgram.y" /* yacc.c:1646  */
     {
-               char *var_name = (yyvsp[(1) - (1)])->lextok;
+               char *var_name = (yyvsp[0])->lextok;
 
-               (yyvsp[(1) - (1)])->opcode = Op_push;
-               (yyvsp[(1) - (1)])->memory = variable((yyvsp[(1) - 
(1)])->source_line, var_name, Node_var_new);
-               (yyval) = list_create((yyvsp[(1) - (1)]));
+               (yyvsp[0])->opcode = Op_push;
+               (yyvsp[0])->memory = variable((yyvsp[0])->source_line, 
var_name, Node_var_new);
+               (yyval) = list_create((yyvsp[0]));
          }
+#line 3873 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 175:
-/* Line 1792 of yacc.c  */
-#line 1781 "awkgram.y"
+#line 1787 "awkgram.y" /* yacc.c:1646  */
     {
-               char *arr = (yyvsp[(1) - (2)])->lextok;
-               (yyvsp[(1) - (2)])->memory = variable((yyvsp[(1) - 
(2)])->source_line, arr, Node_var_new);
-               (yyvsp[(1) - (2)])->opcode = Op_push_array;
-               (yyval) = list_prepend((yyvsp[(2) - (2)]), (yyvsp[(1) - (2)]));
+               char *arr = (yyvsp[-1])->lextok;
+               (yyvsp[-1])->memory = variable((yyvsp[-1])->source_line, arr, 
Node_var_new);
+               (yyvsp[-1])->opcode = Op_push_array;
+               (yyval) = list_prepend((yyvsp[0]), (yyvsp[-1]));
          }
+#line 3884 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 176:
-/* Line 1792 of yacc.c  */
-#line 1791 "awkgram.y"
+#line 1797 "awkgram.y" /* yacc.c:1646  */
     {
-               INSTRUCTION *ip = (yyvsp[(1) - (1)])->nexti;
+               INSTRUCTION *ip = (yyvsp[0])->nexti;
                if (ip->opcode == Op_push
                        && ip->memory->type == Node_var
                        && ip->memory->var_update
                ) {
-                       (yyval) = list_prepend((yyvsp[(1) - (1)]), 
instruction(Op_var_update));
+                       (yyval) = list_prepend((yyvsp[0]), 
instruction(Op_var_update));
                        (yyval)->nexti->update_var = ip->memory->var_update;
                } else
-                       (yyval) = (yyvsp[(1) - (1)]);
+                       (yyval) = (yyvsp[0]);
          }
+#line 3900 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 177:
-/* Line 1792 of yacc.c  */
-#line 1803 "awkgram.y"
+#line 1809 "awkgram.y" /* yacc.c:1646  */
     {
-               (yyval) = list_append((yyvsp[(2) - (3)]), (yyvsp[(1) - (3)]));
-               if ((yyvsp[(3) - (3)]) != NULL)
-                       mk_assignment((yyvsp[(2) - (3)]), NULL, (yyvsp[(3) - 
(3)]));
+               (yyval) = list_append((yyvsp[-1]), (yyvsp[-2]));
+               if ((yyvsp[0]) != NULL)
+                       mk_assignment((yyvsp[-1]), NULL, (yyvsp[0]));
          }
+#line 3910 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 178:
-/* Line 1792 of yacc.c  */
-#line 1812 "awkgram.y"
+#line 1818 "awkgram.y" /* yacc.c:1646  */
     {
-               (yyvsp[(1) - (1)])->opcode = Op_postincrement;
+               (yyvsp[0])->opcode = Op_postincrement;
          }
+#line 3918 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 179:
-/* Line 1792 of yacc.c  */
-#line 1816 "awkgram.y"
+#line 1822 "awkgram.y" /* yacc.c:1646  */
     {
-               (yyvsp[(1) - (1)])->opcode = Op_postdecrement;
+               (yyvsp[0])->opcode = Op_postdecrement;
          }
+#line 3926 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 180:
-/* Line 1792 of yacc.c  */
-#line 1819 "awkgram.y"
+#line 1825 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
+#line 3932 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 182:
-/* Line 1792 of yacc.c  */
-#line 1827 "awkgram.y"
+#line 1833 "awkgram.y" /* yacc.c:1646  */
     { yyerrok; }
+#line 3938 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 183:
-/* Line 1792 of yacc.c  */
-#line 1831 "awkgram.y"
+#line 1837 "awkgram.y" /* yacc.c:1646  */
     { yyerrok; }
+#line 3944 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 186:
-/* Line 1792 of yacc.c  */
-#line 1840 "awkgram.y"
+#line 1846 "awkgram.y" /* yacc.c:1646  */
     { yyerrok; }
+#line 3950 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 187:
-/* Line 1792 of yacc.c  */
-#line 1844 "awkgram.y"
-    { (yyval) = (yyvsp[(1) - (1)]); yyerrok; }
+#line 1850 "awkgram.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); yyerrok; }
+#line 3956 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 188:
-/* Line 1792 of yacc.c  */
-#line 1848 "awkgram.y"
+#line 1854 "awkgram.y" /* yacc.c:1646  */
     { yyerrok; }
+#line 3962 "awkgram.c" /* yacc.c:1646  */
     break;
 
 
-/* Line 1792 of yacc.c  */
-#line 4165 "awkgram.c"
+#line 3966 "awkgram.c" /* yacc.c:1646  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -4183,7 +3984,7 @@ regular_print:
 
   *++yyvsp = yyval;
 
-  /* Now `shift' the result of the reduction.  Determine what state
+  /* Now 'shift' the result of the reduction.  Determine what state
      that goes to, based on the state we popped back to and the rule
      number reduced by.  */
 
@@ -4198,9 +3999,9 @@ regular_print:
   goto yynewstate;
 
 
-/*------------------------------------.
-| yyerrlab -- here on detecting error |
-`------------------------------------*/
+/*--------------------------------------.
+| yyerrlab -- here on detecting error.  |
+`--------------------------------------*/
 yyerrlab:
   /* Make sure we have latest lookahead translation.  See comments at
      user semantic actions for why this is necessary.  */
@@ -4251,20 +4052,20 @@ yyerrlab:
   if (yyerrstatus == 3)
     {
       /* If just tried and failed to reuse lookahead token after an
-        error, discard it.  */
+         error, discard it.  */
 
       if (yychar <= YYEOF)
-       {
-         /* Return failure if at end of input.  */
-         if (yychar == YYEOF)
-           YYABORT;
-       }
+        {
+          /* Return failure if at end of input.  */
+          if (yychar == YYEOF)
+            YYABORT;
+        }
       else
-       {
-         yydestruct ("Error: discarding",
-                     yytoken, &yylval);
-         yychar = YYEMPTY;
-       }
+        {
+          yydestruct ("Error: discarding",
+                      yytoken, &yylval);
+          yychar = YYEMPTY;
+        }
     }
 
   /* Else will try to reuse lookahead token after shifting the error
@@ -4283,7 +4084,7 @@ yyerrorlab:
   if (/*CONSTCOND*/ 0)
      goto yyerrorlab;
 
-  /* Do not reclaim the symbols of the rule which action triggered
+  /* Do not reclaim the symbols of the rule whose action triggered
      this YYERROR.  */
   YYPOPSTACK (yylen);
   yylen = 0;
@@ -4296,29 +4097,29 @@ yyerrorlab:
 | yyerrlab1 -- common code for both syntax error and YYERROR.  |
 `-------------------------------------------------------------*/
 yyerrlab1:
-  yyerrstatus = 3;     /* Each real token shifted decrements this.  */
+  yyerrstatus = 3;      /* Each real token shifted decrements this.  */
 
   for (;;)
     {
       yyn = yypact[yystate];
       if (!yypact_value_is_default (yyn))
-       {
-         yyn += YYTERROR;
-         if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
-           {
-             yyn = yytable[yyn];
-             if (0 < yyn)
-               break;
-           }
-       }
+        {
+          yyn += YYTERROR;
+          if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+            {
+              yyn = yytable[yyn];
+              if (0 < yyn)
+                break;
+            }
+        }
 
       /* Pop the current state because it cannot handle the error token.  */
       if (yyssp == yyss)
-       YYABORT;
+        YYABORT;
 
 
       yydestruct ("Error: popping",
-                 yystos[yystate], yyvsp);
+                  yystos[yystate], yyvsp);
       YYPOPSTACK (1);
       yystate = *yyssp;
       YY_STACK_PRINT (yyss, yyssp);
@@ -4369,14 +4170,14 @@ yyreturn:
       yydestruct ("Cleanup: discarding lookahead",
                   yytoken, &yylval);
     }
-  /* Do not reclaim the symbols of the rule which action triggered
+  /* Do not reclaim the symbols of the rule whose action triggered
      this YYABORT or YYACCEPT.  */
   YYPOPSTACK (yylen);
   YY_STACK_PRINT (yyss, yyssp);
   while (yyssp != yyss)
     {
       yydestruct ("Cleanup: popping",
-                 yystos[*yyssp], yyvsp);
+                  yystos[*yyssp], yyvsp);
       YYPOPSTACK (1);
     }
 #ifndef yyoverflow
@@ -4387,13 +4188,9 @@ yyreturn:
   if (yymsg != yymsgbuf)
     YYSTACK_FREE (yymsg);
 #endif
-  /* Make sure YYID is used.  */
-  return YYID (yyresult);
+  return yyresult;
 }
-
-
-/* Line 2055 of yacc.c  */
-#line 1850 "awkgram.y"
+#line 1856 "awkgram.y" /* yacc.c:1906  */
 
 
 struct token {
@@ -4861,10 +4658,10 @@ mk_program()
        if (begin_block != NULL)
                cp = list_merge(begin_block, cp);
 
-       if (comment0 != NULL){
+       if (comment0 != NULL) {
                (void) list_prepend(cp, comment0);
        }  
-       if (comment != NULL){
+       if (comment != NULL) {
                (void) list_append(cp, comment);
        } 
        (void) list_append(cp, ip_atexit);
@@ -5368,7 +5165,7 @@ get_src_buf()
                lexend = lexptr + n;
                if (n == 0) {
                        static bool warned = false;
-                       if (do_lint && newfile && ! warned){
+                       if (do_lint && newfile && ! warned) {
                                warned = true;
                                sourceline = 0;
                                lintwarn(_("source file `%s' is empty"), 
source);
@@ -5550,11 +5347,11 @@ int get_comment(void)
        tokadd('#');
        sl = sourceline;
 
-       while (true){
-               while ((c = nextc(false)) != '\n' && c != END_FILE){
+       while (true) {
+               while ((c = nextc(false)) != '\n' && c != END_FILE) {
                        tokadd(c);
                }
-               if (c == '\n'){
+               if (c == '\n') {
                        tokadd(c);
                        sourceline++;
                        do {
@@ -5566,7 +5363,7 @@ int get_comment(void)
                        } while (isspace(c) && c != END_FILE) ;
                        if ( c == END_FILE)
                                break;
-                       else if (c != '#'){
+                       else if (c != '#') {
                                pushback();
                                break;
                        } else
@@ -5593,23 +5390,23 @@ void split_comment(void)
        p = comment->memory->stptr;
        l = comment->memory->stlen - 3;
        /* have at least two comments so split at last blank line ( \n\n)  */
-       while (l >= 0){
-               if (p[l] == '\n' && p[l+1] == '\n'){
+       while (l >= 0) {
+               if (p[l] == '\n' && p[l+1] == '\n') {
                        commentf = comment;
                        n = commentf->memory;
                        commentf->memory = make_str_node(p + l + 2, n->stlen - 
l - 2, 0);
-       /* create program comment  */
+                       /* create program comment  */
                        comment0 = bcalloc(Op_comment, 1, sourceline);
                        comment0->source_file = comment->source_file;
                        p[l + 2] = 0;
-                       comment0->memory = make_str_node(p , l + 2, 0);
+                       comment0->memory = make_str_node(p, l + 2, 0);
                        comment = NULL;
                        freenode(n);
                        break;
                }
-               else l--;
+               else
+                       l--;
        }
-                       
 }
 
 /* allow_newline --- allow newline after &&, ||, ? and : */
@@ -5655,7 +5452,8 @@ allow_newline(void)
  * removes the warnings.
  */
 
-static int newline_eof()
+static int
+newline_eof()
 {
        /* NB: a newline at end does not start a source line. */
        if (lasttok != NEWLINE) {
@@ -6943,7 +6741,7 @@ mk_function(INSTRUCTION *fi, INSTRUCTION *def)
 
        /* add any pre-function comment to start of action for profile.c  */
 
-       if (commentf != NULL){
+       if (commentf != NULL) {
                commentf->source_line = 0;
                (void) list_prepend(def, commentf);
                commentf = NULL;
diff --git a/awkgram.y b/awkgram.y
index 19ab4d6..041f70b 100644
--- a/awkgram.y
+++ b/awkgram.y
@@ -151,7 +151,7 @@ static INSTRUCTION *comment = NULL;
 static INSTRUCTION *comment0 = NULL;
 static INSTRUCTION *commentf = NULL;
 
-static int func_first = 1;
+static bool func_first = true;
 
 static inline INSTRUCTION *list_create(INSTRUCTION *x);
 static inline INSTRUCTION *list_append(INSTRUCTION *l, INSTRUCTION *x);
@@ -296,7 +296,7 @@ library
 pattern
        : /* empty */
          {     rule = Rule;
-               if (comment != NULL){
+               if (comment != NULL) {
                        $$ = list_create(comment);
                        comment = NULL;
                } else
@@ -304,7 +304,7 @@ pattern
          }
        | exp
          {     rule = Rule;
-               if (comment != NULL){
+               if (comment != NULL) {
                        $$ = list_prepend($1, comment);
                        comment = NULL;
                } else
@@ -340,7 +340,7 @@ pattern
        | LEX_BEGIN
          {
                static int begin_seen = 0;
-               func_first = 0;
+               func_first = false;
                INSTRUCTION *ip;
                if (do_lint_old && ++begin_seen == 2)
                        warning_ln($1->source_line,
@@ -353,7 +353,7 @@ pattern
        | LEX_END
          {
                static int end_seen = 0;
-               func_first = 0;
+               func_first = false;
                if (do_lint_old && ++end_seen == 2)
                        warning_ln($1->source_line,
                                _("old awk does not support multiple `BEGIN' or 
`END' rules"));
@@ -364,14 +364,14 @@ pattern
          }
        | LEX_BEGINFILE
          {
-               func_first = 0;
+               func_first = false;
                $1->in_rule = rule = BEGINFILE;
                $1->source_file = source;
                $$ = $1;
          }
        | LEX_ENDFILE
          {
-               func_first = 0;
+               func_first = false;
                $1->in_rule = rule = ENDFILE;
                $1->source_file = source;
                $$ = $1;
@@ -413,16 +413,22 @@ lex_builtin
 function_prologue
        : LEX_FUNCTION func_name '(' opt_param_list r_paren opt_nls
          {
-/* treat any comments between BOF and the first function definition (with no 
intervening BEGIN etc block) as program comments 
-   Special kludge: iff there are more than one such comments, treat the last 
as a function comment.  */
-               if (comment != NULL && func_first && 
strstr(comment->memory->stptr, "\n\n") != NULL)
+               /*
+                *  treat any comments between BOF and the first function
+                *  definition (with no intervening BEGIN etc block) as
+                *  program comments.  Special kludge: iff there are more
+                *  than one such comments, treat the last as a function
+                *  comment.
+                */
+               if (comment != NULL && func_first
+                   && strstr(comment->memory->stptr, "\n\n") != NULL)
                        split_comment();
-       /* save any other pre-function comment as function comment  */
-               if (comment != NULL){
+               /* save any other pre-function comment as function comment  */
+               if (comment != NULL) {
                        commentf = comment;
                        comment = NULL;
                }
-               func_first = 0;
+               func_first = false;
                $1->source_file = source;
                if (install_function($2->lextok, $1, $4) < 0)
                        YYABORT;
@@ -481,7 +487,7 @@ a_slash
 statements
        : /* empty */
          {
-               if (comment != NULL){
+               if (comment != NULL) {
                        $$ = list_create(comment);
                        comment = NULL;
                } else $$ = NULL;
@@ -505,7 +511,7 @@ statements
                                        comment = NULL;
                                }
                        } else {
-                               if (comment != NULL){
+                               if (comment != NULL) {
                                        list_append($2, comment);
                                        comment = NULL;
                                }
@@ -2314,10 +2320,10 @@ mk_program()
        if (begin_block != NULL)
                cp = list_merge(begin_block, cp);
 
-       if (comment0 != NULL){
+       if (comment0 != NULL) {
                (void) list_prepend(cp, comment0);
        }  
-       if (comment != NULL){
+       if (comment != NULL) {
                (void) list_append(cp, comment);
        } 
        (void) list_append(cp, ip_atexit);
@@ -2821,7 +2827,7 @@ get_src_buf()
                lexend = lexptr + n;
                if (n == 0) {
                        static bool warned = false;
-                       if (do_lint && newfile && ! warned){
+                       if (do_lint && newfile && ! warned) {
                                warned = true;
                                sourceline = 0;
                                lintwarn(_("source file `%s' is empty"), 
source);
@@ -3003,11 +3009,11 @@ int get_comment(void)
        tokadd('#');
        sl = sourceline;
 
-       while (true){
-               while ((c = nextc(false)) != '\n' && c != END_FILE){
+       while (true) {
+               while ((c = nextc(false)) != '\n' && c != END_FILE) {
                        tokadd(c);
                }
-               if (c == '\n'){
+               if (c == '\n') {
                        tokadd(c);
                        sourceline++;
                        do {
@@ -3019,7 +3025,7 @@ int get_comment(void)
                        } while (isspace(c) && c != END_FILE) ;
                        if ( c == END_FILE)
                                break;
-                       else if (c != '#'){
+                       else if (c != '#') {
                                pushback();
                                break;
                        } else
@@ -3046,23 +3052,23 @@ void split_comment(void)
        p = comment->memory->stptr;
        l = comment->memory->stlen - 3;
        /* have at least two comments so split at last blank line ( \n\n)  */
-       while (l >= 0){
-               if (p[l] == '\n' && p[l+1] == '\n'){
+       while (l >= 0) {
+               if (p[l] == '\n' && p[l+1] == '\n') {
                        commentf = comment;
                        n = commentf->memory;
                        commentf->memory = make_str_node(p + l + 2, n->stlen - 
l - 2, 0);
-       /* create program comment  */
+                       /* create program comment  */
                        comment0 = bcalloc(Op_comment, 1, sourceline);
                        comment0->source_file = comment->source_file;
                        p[l + 2] = 0;
-                       comment0->memory = make_str_node(p , l + 2, 0);
+                       comment0->memory = make_str_node(p, l + 2, 0);
                        comment = NULL;
                        freenode(n);
                        break;
                }
-               else l--;
+               else
+                       l--;
        }
-                       
 }
 
 /* allow_newline --- allow newline after &&, ||, ? and : */
@@ -3108,7 +3114,8 @@ allow_newline(void)
  * removes the warnings.
  */
 
-static int newline_eof()
+static int
+newline_eof()
 {
        /* NB: a newline at end does not start a source line. */
        if (lasttok != NEWLINE) {
@@ -4396,7 +4403,7 @@ mk_function(INSTRUCTION *fi, INSTRUCTION *def)
 
        /* add any pre-function comment to start of action for profile.c  */
 
-       if (commentf != NULL){
+       if (commentf != NULL) {
                commentf->source_line = 0;
                (void) list_prepend(def, commentf);
                commentf = NULL;

-----------------------------------------------------------------------

Summary of changes:
 awkgram.c | 2688 ++++++++++++++++++++++++++++---------------------------------
 awkgram.y |   67 +-
 2 files changed, 1280 insertions(+), 1475 deletions(-)


hooks/post-receive
-- 
gawk



reply via email to

[Prev in Thread] Current Thread [Next in Thread]