gawk-diffs
[Top][All Lists]
Advanced

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

[gawk-diffs] [SCM] gawk branch, feature/fix-comments, updated. gawk-4.1.


From: Arnold Robbins
Subject: [gawk-diffs] [SCM] gawk branch, feature/fix-comments, updated. gawk-4.1.0-3449-g006feb1
Date: Fri, 21 Sep 2018 06:28:32 -0400 (EDT)

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, feature/fix-comments has been updated
       via  006feb1f312f45e81004be5cb61540c25a8e0bbb (commit)
       via  9bd846b32089bf025d0dc82b61a59e503ee1767c (commit)
      from  e1be82e01980281819732b2c7012f6d331267cfd (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=006feb1f312f45e81004be5cb61540c25a8e0bbb

commit 006feb1f312f45e81004be5cb61540c25a8e0bbb
Author: Arnold D. Robbins <address@hidden>
Date:   Fri Sep 21 13:28:04 2018 +0300

    Start at revamping comment handling for the pretty printer.

diff --git a/ChangeLog b/ChangeLog
index 8492e3f..c0885e8 100755
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,16 @@
 2018-09-21         Arnold D. Robbins     <address@hidden>
 
+       * awk.h (INSTRUCTION): Add comment field to carry
+       comment around during parsing.
+       * awkgram.y (merge_comments): New function.
+       (split_comment, check_comment, comment, prior_comment,
+       comment_to_save, program_comment, function_comment,
+       block_comment): Removed.
+       (grammar): Remove old code and start passing the comment
+       up via yylval and the newlines in the grammar.
+
+2018-09-21         Arnold D. Robbins     <address@hidden>
+
        * awkgram.y: Undo change of 2016-11-28 to make switch
        head a separate production, in preparation for revamping
        comment handling.
diff --git a/awk.h b/awk.h
index 46b72e1..5e1e40a 100644
--- a/awk.h
+++ b/awk.h
@@ -762,6 +762,7 @@ typedef struct exp_instruction {
                awk_ext_func_t *exf;
        } x;
 
+       struct exp_instruction *comment;
        short source_line;
        short pool_size;        // memory management in symbol.c
        OPCODE opcode;
diff --git a/awkgram.c b/awkgram.c
index c09e04a..1655ac3 100644
--- a/awkgram.c
+++ b/awkgram.c
@@ -62,7 +62,7 @@
 
 
 /* Copy the first part of user declarations.  */
-#line 26 "awkgram.y" /* yacc.c:339  */
+#line 33 "awkgram.y" /* yacc.c:339  */
 
 #ifdef GAWKDEBUG
 #define YYDEBUG 12
@@ -124,8 +124,7 @@ static void check_funcs(void);
 
 static ssize_t read_one_line(int fd, void *buffer, size_t count);
 static int one_line_close(int fd);
-static void split_comment(void);
-static void check_comment(void);
+static bool merge_comments(INSTRUCTION *c1, INSTRUCTION *c2);
 static void add_sign_to_num(NODE *n, char sign);
 
 static bool at_seen = false;
@@ -192,27 +191,19 @@ static INSTRUCTION *ip_endfile;
 static INSTRUCTION *ip_beginfile;
 INSTRUCTION *main_beginfile;
 
-static INSTRUCTION *comment = NULL;
-static INSTRUCTION *prior_comment = NULL;
-static INSTRUCTION *comment_to_save = NULL;
-static INSTRUCTION *program_comment = NULL;
-static INSTRUCTION *function_comment = NULL;
-static INSTRUCTION *block_comment = NULL;
-
-static bool func_first = true;
+static bool func_first = true; // can nuke
 static bool first_rule = true;
 
 static inline INSTRUCTION *list_create(INSTRUCTION *x);
 static inline INSTRUCTION *list_append(INSTRUCTION *l, INSTRUCTION *x);
 static inline INSTRUCTION *list_prepend(INSTRUCTION *l, INSTRUCTION *x);
 static inline INSTRUCTION *list_merge(INSTRUCTION *l1, INSTRUCTION *l2);
-static inline INSTRUCTION *add_pending_comment(INSTRUCTION *stmt);
 
 extern double fmod(double x, double y);
 
 #define YYSTYPE INSTRUCTION *
 
-#line 216 "awkgram.c" /* yacc.c:339  */
+#line 207 "awkgram.c" /* yacc.c:339  */
 
 # ifndef YY_NULLPTR
 #  if defined __cplusplus && 201103L <= __cplusplus
@@ -368,7 +359,7 @@ int yyparse (void);
 
 /* Copy the second part of user declarations.  */
 
-#line 372 "awkgram.c" /* yacc.c:358  */
+#line 363 "awkgram.c" /* yacc.c:358  */
 
 #ifdef short
 # undef short
@@ -670,27 +661,27 @@ static const yytype_uint8 yytranslate[] =
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   215,   215,   217,   222,   223,   227,   239,   244,   255,
-     262,   268,   277,   285,   287,   292,   300,   302,   308,   316,
-     326,   356,   370,   384,   392,   403,   415,   417,   419,   425,
-     433,   434,   438,   438,   484,   483,   517,   532,   534,   539,
-     549,   596,   601,   602,   606,   608,   610,   617,   707,   749,
-     791,   904,   911,   918,   929,   939,   949,   959,   971,   988,
-     987,  1001,  1013,  1013,  1112,  1112,  1146,  1177,  1186,  1187,
-    1193,  1194,  1201,  1206,  1218,  1232,  1234,  1242,  1249,  1251,
-    1259,  1268,  1270,  1279,  1280,  1288,  1293,  1293,  1306,  1310,
-    1318,  1319,  1322,  1324,  1329,  1330,  1339,  1340,  1345,  1350,
-    1359,  1361,  1363,  1370,  1371,  1377,  1378,  1383,  1385,  1390,
-    1392,  1400,  1405,  1414,  1415,  1420,  1422,  1427,  1429,  1437,
-    1442,  1450,  1451,  1456,  1463,  1467,  1469,  1471,  1484,  1501,
-    1511,  1518,  1520,  1525,  1527,  1529,  1537,  1539,  1544,  1546,
-    1551,  1553,  1555,  1612,  1614,  1616,  1618,  1620,  1622,  1624,
-    1626,  1640,  1645,  1650,  1675,  1681,  1683,  1685,  1687,  1689,
-    1691,  1696,  1700,  1732,  1740,  1746,  1752,  1765,  1766,  1767,
-    1772,  1777,  1781,  1785,  1800,  1821,  1826,  1863,  1892,  1893,
-    1899,  1900,  1905,  1907,  1914,  1931,  1948,  1950,  1957,  1962,
-    1970,  1980,  1992,  2001,  2005,  2009,  2013,  2017,  2021,  2024,
-    2026,  2030,  2034,  2038
+       0,   213,   213,   215,   220,   227,   231,   243,   248,   259,
+     266,   276,   289,   297,   299,   304,   312,   314,   320,   323,
+     328,   360,   373,   386,   393,   403,   420,   422,   424,   430,
+     438,   439,   443,   443,   479,   478,   512,   527,   529,   534,
+     537,   551,   556,   557,   561,   563,   565,   572,   662,   704,
+     746,   859,   866,   873,   883,   891,   899,   908,   919,   935,
+     934,   946,   958,   958,  1056,  1056,  1089,  1119,  1127,  1128,
+    1134,  1135,  1142,  1147,  1159,  1173,  1175,  1183,  1190,  1192,
+    1200,  1209,  1211,  1220,  1221,  1229,  1234,  1234,  1247,  1251,
+    1259,  1260,  1278,  1280,  1285,  1286,  1295,  1296,  1301,  1306,
+    1315,  1317,  1319,  1326,  1327,  1333,  1334,  1339,  1341,  1346,
+    1348,  1356,  1361,  1370,  1371,  1376,  1378,  1383,  1385,  1393,
+    1398,  1406,  1407,  1412,  1419,  1423,  1425,  1427,  1440,  1457,
+    1467,  1474,  1476,  1481,  1483,  1485,  1493,  1495,  1500,  1502,
+    1507,  1509,  1511,  1568,  1570,  1572,  1574,  1576,  1578,  1580,
+    1582,  1596,  1601,  1606,  1631,  1637,  1639,  1641,  1643,  1645,
+    1647,  1652,  1656,  1688,  1696,  1702,  1708,  1721,  1722,  1723,
+    1728,  1733,  1737,  1741,  1756,  1777,  1782,  1819,  1848,  1849,
+    1855,  1856,  1861,  1863,  1870,  1887,  1904,  1906,  1913,  1918,
+    1926,  1936,  1948,  1957,  1961,  1965,  1969,  1973,  1977,  1980,
+    1982,  1986,  1990,  1994
 };
 #endif
 
@@ -1889,24 +1880,35 @@ yyreduce:
   switch (yyn)
     {
         case 3:
-#line 218 "awkgram.y" /* yacc.c:1651  */
+#line 216 "awkgram.y" /* yacc.c:1651  */
     {
                rule = 0;
                yyerrok;
          }
-#line 1898 "awkgram.c" /* yacc.c:1651  */
+#line 1889 "awkgram.c" /* yacc.c:1651  */
+    break;
+
+  case 4:
+#line 221 "awkgram.y" /* yacc.c:1651  */
+    {
+                 if ((yyvsp[0]) != NULL)
+                         (yyval) = list_append((yyvsp[-1]), (yyvsp[0]));
+                 else
+                         (yyval) = (yyvsp[-1]);
+         }
+#line 1900 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 5:
-#line 224 "awkgram.y" /* yacc.c:1651  */
+#line 228 "awkgram.y" /* yacc.c:1651  */
     {
                next_sourcefile();
          }
-#line 1906 "awkgram.c" /* yacc.c:1651  */
+#line 1908 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 6:
-#line 228 "awkgram.y" /* yacc.c:1651  */
+#line 232 "awkgram.y" /* yacc.c:1651  */
     {
                rule = 0;
                /*
@@ -1915,20 +1917,20 @@ yyreduce:
                 */
                /* yyerrok; */
          }
-#line 1919 "awkgram.c" /* yacc.c:1651  */
+#line 1921 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 7:
-#line 240 "awkgram.y" /* yacc.c:1651  */
+#line 244 "awkgram.y" /* yacc.c:1651  */
     {
                (void) append_rule((yyvsp[-1]), (yyvsp[0]));
                first_rule = false;
          }
-#line 1928 "awkgram.c" /* yacc.c:1651  */
+#line 1930 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 8:
-#line 245 "awkgram.y" /* yacc.c:1651  */
+#line 249 "awkgram.y" /* yacc.c:1651  */
     {
                if (rule != Rule) {
                        msg(_("%s blocks must have an action part"), 
ruletab[rule]);
@@ -1939,42 +1941,50 @@ yyreduce:
                } else          /* pattern rule with non-empty pattern */
                        (void) append_rule((yyvsp[-1]), NULL);
          }
-#line 1943 "awkgram.c" /* yacc.c:1651  */
+#line 1945 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 9:
-#line 256 "awkgram.y" /* yacc.c:1651  */
+#line 260 "awkgram.y" /* yacc.c:1651  */
     {
                in_function = NULL;
                (void) mk_function((yyvsp[-1]), (yyvsp[0]));
                want_param_names = DONT_CHECK;
                yyerrok;
          }
-#line 1954 "awkgram.c" /* yacc.c:1651  */
+#line 1956 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 10:
-#line 263 "awkgram.y" /* yacc.c:1651  */
+#line 267 "awkgram.y" /* yacc.c:1651  */
     {
                want_source = false;
                at_seen = false;
+               if ((yyvsp[0]) != NULL) {
+                       warning(_("comments on address@hidden' statements will 
be lost"));
+                       /* FIXME: Free memory, it should be a list */
+               }
                yyerrok;
          }
-#line 1964 "awkgram.c" /* yacc.c:1651  */
+#line 1970 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 11:
-#line 269 "awkgram.y" /* yacc.c:1651  */
+#line 277 "awkgram.y" /* yacc.c:1651  */
     {
                want_source = false;
                at_seen = false;
+               if ((yyvsp[0]) != NULL) {
+                       warning(_("comments on address@hidden' statements will 
be lost"));
+                       /* FIXME: Free memory, it should be a list */
+               }
                yyerrok;
          }
-#line 1974 "awkgram.c" /* yacc.c:1651  */
+#line 1984 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 12:
-#line 278 "awkgram.y" /* yacc.c:1651  */
+#line 290 "awkgram.y" /* yacc.c:1651  */
     {
                if (include_source((yyvsp[0])) < 0)
                        YYABORT;
@@ -1982,23 +1992,23 @@ yyreduce:
                bcfree((yyvsp[0]));
                (yyval) = NULL;
          }
-#line 1986 "awkgram.c" /* yacc.c:1651  */
+#line 1996 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 13:
-#line 286 "awkgram.y" /* yacc.c:1651  */
+#line 298 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 1992 "awkgram.c" /* yacc.c:1651  */
+#line 2002 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 14:
-#line 288 "awkgram.y" /* yacc.c:1651  */
+#line 300 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 1998 "awkgram.c" /* yacc.c:1651  */
+#line 2008 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 15:
-#line 293 "awkgram.y" /* yacc.c:1651  */
+#line 305 "awkgram.y" /* yacc.c:1651  */
     {
                if (load_library((yyvsp[0])) < 0)
                        YYABORT;
@@ -2006,49 +2016,39 @@ yyreduce:
                bcfree((yyvsp[0]));
                (yyval) = NULL;
          }
-#line 2010 "awkgram.c" /* yacc.c:1651  */
+#line 2020 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 16:
-#line 301 "awkgram.y" /* yacc.c:1651  */
+#line 313 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 2016 "awkgram.c" /* yacc.c:1651  */
+#line 2026 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 17:
-#line 303 "awkgram.y" /* yacc.c:1651  */
+#line 315 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 2022 "awkgram.c" /* yacc.c:1651  */
+#line 2032 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 18:
-#line 308 "awkgram.y" /* yacc.c:1651  */
+#line 320 "awkgram.y" /* yacc.c:1651  */
     {
                rule = Rule;
-               if (comment != NULL) {
-                       (yyval) = list_create(comment);
-                       comment = NULL;
-               } else
-                       (yyval) = NULL;
          }
-#line 2035 "awkgram.c" /* yacc.c:1651  */
+#line 2040 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 19:
-#line 317 "awkgram.y" /* yacc.c:1651  */
+#line 324 "awkgram.y" /* yacc.c:1651  */
     {
                rule = Rule;
-               if (comment != NULL) {
-                       (yyval) = list_prepend((yyvsp[0]), comment);
-                       comment = NULL;
-               } else
-                       (yyval) = (yyvsp[0]);
          }
 #line 2048 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 20:
-#line 327 "awkgram.y" /* yacc.c:1651  */
+#line 329 "awkgram.y" /* yacc.c:1651  */
     {
                INSTRUCTION *tp;
 
@@ -2071,18 +2071,20 @@ yyreduce:
                        ((yyvsp[-3])->nexti + 1)->condpair_left = 
(yyvsp[-3])->lasti;
                        ((yyvsp[-3])->nexti + 1)->condpair_right = 
(yyvsp[0])->lasti;
                }
-               if (comment != NULL) {
-                       (yyval) = 
list_append(list_merge(list_prepend((yyvsp[-3]), comment), (yyvsp[0])), tp);
-                       comment = NULL;
-               } else
+#if 0
+               /* Put any comments in front of the range expression */
+               if ((yyvsp[-1]) != NULL)
+                       (yyval) = 
list_append(list_merge(list_prepend((yyvsp[-3]), (yyvsp[-1])), (yyvsp[0])), tp);
+               else
+#endif
                        (yyval) = list_append(list_merge((yyvsp[-3]), 
(yyvsp[0])), tp);
                rule = Rule;
          }
-#line 2082 "awkgram.c" /* yacc.c:1651  */
+#line 2084 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 21:
-#line 357 "awkgram.y" /* yacc.c:1651  */
+#line 361 "awkgram.y" /* yacc.c:1651  */
     {
                static int begin_seen = 0;
 
@@ -2093,14 +2095,13 @@ yyreduce:
 
                (yyvsp[0])->in_rule = rule = BEGIN;
                (yyvsp[0])->source_file = source;
-               check_comment();
                (yyval) = (yyvsp[0]);
          }
-#line 2100 "awkgram.c" /* yacc.c:1651  */
+#line 2101 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 22:
-#line 371 "awkgram.y" /* yacc.c:1651  */
+#line 374 "awkgram.y" /* yacc.c:1651  */
     {
                static int end_seen = 0;
 
@@ -2111,115 +2112,107 @@ yyreduce:
 
                (yyvsp[0])->in_rule = rule = END;
                (yyvsp[0])->source_file = source;
-               check_comment();
                (yyval) = (yyvsp[0]);
          }
 #line 2118 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 23:
-#line 385 "awkgram.y" /* yacc.c:1651  */
+#line 387 "awkgram.y" /* yacc.c:1651  */
     {
                func_first = false;
                (yyvsp[0])->in_rule = rule = BEGINFILE;
                (yyvsp[0])->source_file = source;
-               check_comment();
                (yyval) = (yyvsp[0]);
          }
-#line 2130 "awkgram.c" /* yacc.c:1651  */
+#line 2129 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 24:
-#line 393 "awkgram.y" /* yacc.c:1651  */
+#line 394 "awkgram.y" /* yacc.c:1651  */
     {
                func_first = false;
                (yyvsp[0])->in_rule = rule = ENDFILE;
                (yyvsp[0])->source_file = source;
-               check_comment();
                (yyval) = (yyvsp[0]);
          }
-#line 2142 "awkgram.c" /* yacc.c:1651  */
+#line 2140 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 25:
 #line 404 "awkgram.y" /* yacc.c:1651  */
     {
                INSTRUCTION *ip;
+
                if ((yyvsp[-3]) == NULL)
                        ip = list_create(instruction(Op_no_op));
                else
                        ip = (yyvsp[-3]);
+
+               /* Tack any comment onto the end. */
+               if ((yyvsp[0]) != NULL)
+                       ip = list_append(ip, (yyvsp[0]));
                (yyval) = ip;
          }
-#line 2155 "awkgram.c" /* yacc.c:1651  */
+#line 2158 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 26:
-#line 416 "awkgram.y" /* yacc.c:1651  */
+#line 421 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 2161 "awkgram.c" /* yacc.c:1651  */
+#line 2164 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 27:
-#line 418 "awkgram.y" /* yacc.c:1651  */
+#line 423 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 2167 "awkgram.c" /* yacc.c:1651  */
+#line 2170 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 28:
-#line 420 "awkgram.y" /* yacc.c:1651  */
+#line 425 "awkgram.y" /* yacc.c:1651  */
     {
                yyerror(_("`%s' is a built-in function, it cannot be 
redefined"),
                                        tokstart);
                YYABORT;
          }
-#line 2177 "awkgram.c" /* yacc.c:1651  */
+#line 2180 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 29:
-#line 426 "awkgram.y" /* yacc.c:1651  */
+#line 431 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = (yyvsp[0]);
                at_seen = false;
          }
-#line 2186 "awkgram.c" /* yacc.c:1651  */
+#line 2189 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 32:
-#line 438 "awkgram.y" /* yacc.c:1651  */
+#line 443 "awkgram.y" /* yacc.c:1651  */
     { want_param_names = FUNC_HEADER; }
-#line 2192 "awkgram.c" /* yacc.c:1651  */
+#line 2195 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 33:
-#line 439 "awkgram.y" /* yacc.c:1651  */
+#line 444 "awkgram.y" /* yacc.c:1651  */
     {
-               /*
-                *  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 (prior_comment != NULL) {
-                       comment_to_save = prior_comment;
-                       prior_comment = NULL;
-               } else if (comment != NULL) {
-                       comment_to_save = comment;
-                       comment = NULL;
-               } else
-                       comment_to_save = NULL;
-
-               if (comment_to_save != NULL && func_first
-                   && strstr(comment_to_save->memory->stptr, "\n\n") != NULL)
-                       split_comment();
-
-               /* save any other pre-function comment as function comment  */
-               if (comment_to_save != NULL) {
-                       function_comment = comment_to_save;
-                       comment_to_save = NULL;
+               // Merge any comments found in the parameter list with those
+               // following the function header, associate the whole shebang
+               // with the function as one block comment.
+#if 0
+               if ((yyvsp[-2])->comment != NULL && (yyvsp[0]) != NULL) {
+                       INSTRUCTION *ip = list_merge((yyvsp[-2])->comment, 
(yyvsp[0]));
+                       (yyvsp[-6])->comment = merge_comment_list(ip);
+                       (yyvsp[-2])->comment = NULL;
+               } else if ((yyvsp[-2])->comment != NULL) {
+                       (yyvsp[-6])->comment = (yyvsp[-2])->comment;
+                       (yyvsp[-2])->comment = NULL;
+               } else {
+                       (yyvsp[-6])->comment = merge_comment_list((yyvsp[0]));
                }
-               func_first = false;
+#endif
+
                (yyvsp[-6])->source_file = source;
                if (install_function((yyvsp[-5])->lextok, (yyvsp[-6]), 
(yyvsp[-2])) < 0)
                        YYABORT;
@@ -2230,17 +2223,17 @@ yyreduce:
                (yyval) = (yyvsp[-6]);
                want_param_names = FUNC_BODY;
          }
-#line 2234 "awkgram.c" /* yacc.c:1651  */
+#line 2227 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 34:
-#line 484 "awkgram.y" /* yacc.c:1651  */
+#line 479 "awkgram.y" /* yacc.c:1651  */
     { want_regexp = true; }
-#line 2240 "awkgram.c" /* yacc.c:1651  */
+#line 2233 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 35:
-#line 486 "awkgram.y" /* yacc.c:1651  */
+#line 481 "awkgram.y" /* yacc.c:1651  */
     {
                  NODE *n, *exp;
                  char *re;
@@ -2269,11 +2262,11 @@ yyreduce:
                  (yyval)->opcode = Op_match_rec;
                  (yyval)->memory = n;
                }
-#line 2273 "awkgram.c" /* yacc.c:1651  */
+#line 2266 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 36:
-#line 518 "awkgram.y" /* yacc.c:1651  */
+#line 513 "awkgram.y" /* yacc.c:1651  */
     {
                  char *re;
                  size_t len;
@@ -2286,112 +2279,78 @@ yyreduce:
                  (yyval)->opcode = Op_push_re;
                  (yyval)->memory = make_typed_regex(re, len);
                }
-#line 2290 "awkgram.c" /* yacc.c:1651  */
+#line 2283 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 37:
-#line 533 "awkgram.y" /* yacc.c:1651  */
+#line 528 "awkgram.y" /* yacc.c:1651  */
     { bcfree((yyvsp[0])); }
-#line 2296 "awkgram.c" /* yacc.c:1651  */
+#line 2289 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 39:
-#line 539 "awkgram.y" /* yacc.c:1651  */
+#line 534 "awkgram.y" /* yacc.c:1651  */
     {
-               if (prior_comment != NULL) {
-                       (yyval) = list_create(prior_comment);
-                       prior_comment = NULL;
-               } else if (comment != NULL) {
-                       (yyval) = list_create(comment);
-                       comment = NULL;
-               } else
-                       (yyval) = NULL;
+               (yyval) = NULL;
          }
-#line 2311 "awkgram.c" /* yacc.c:1651  */
+#line 2297 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 40:
-#line 550 "awkgram.y" /* yacc.c:1651  */
+#line 538 "awkgram.y" /* yacc.c:1651  */
     {
                if ((yyvsp[0]) == NULL) {
-                       if (prior_comment != NULL) {
-                               (yyval) = list_append((yyvsp[-1]), 
prior_comment);
-                               prior_comment = NULL;
-                               if (comment != NULL) {
-                                       (yyval) = list_append((yyval), comment);
-                                       comment = NULL;
-                               }
-                       } else if (comment != NULL) {
-                               (yyval) = list_append((yyvsp[-1]), comment);
-                               comment = NULL;
-                       } else
-                               (yyval) = (yyvsp[-1]);
+                       (yyval) = (yyvsp[-1]);
                } else {
                        add_lint((yyvsp[0]), LINT_no_effect);
                        if ((yyvsp[-1]) == NULL) {
-                               if (prior_comment != NULL) {
-                                       (yyval) = list_append((yyvsp[0]), 
prior_comment);
-                                       prior_comment = NULL;
-                                       if (comment != NULL) {
-                                               (yyval) = list_append((yyval), 
comment);
-                                               comment = NULL;
-                                       }
-                               } else if (comment != NULL) {
-                                       (yyval) = list_append((yyvsp[0]), 
comment);
-                                       comment = NULL;
-                               } else
-                                       (yyval) = (yyvsp[0]);
+                               (yyval) = (yyvsp[0]);
                        } else {
-                               if (prior_comment != NULL) {
-                                       list_append((yyvsp[0]), prior_comment);
-                                       prior_comment = NULL;
-                                       if (comment != NULL) {
-                                               list_append((yyvsp[0]), 
comment);
-                                               comment = NULL;
-                                       }
-                               } else if (comment != NULL) {
-                                       list_append((yyvsp[0]), comment);
-                                       comment = NULL;
-                               }
                                (yyval) = list_merge((yyvsp[-1]), (yyvsp[0]));
                        }
                }
                yyerrok;
          }
-#line 2362 "awkgram.c" /* yacc.c:1651  */
+#line 2315 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 41:
-#line 597 "awkgram.y" /* yacc.c:1651  */
+#line 552 "awkgram.y" /* yacc.c:1651  */
     {  (yyval) = NULL; }
-#line 2368 "awkgram.c" /* yacc.c:1651  */
+#line 2321 "awkgram.c" /* yacc.c:1651  */
+    break;
+
+  case 43:
+#line 557 "awkgram.y" /* yacc.c:1651  */
+    { (yyval) = (yyvsp[0]); }
+#line 2327 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 44:
-#line 607 "awkgram.y" /* yacc.c:1651  */
+#line 562 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 2374 "awkgram.c" /* yacc.c:1651  */
+#line 2333 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 45:
-#line 609 "awkgram.y" /* yacc.c:1651  */
+#line 564 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[-1]); }
-#line 2380 "awkgram.c" /* yacc.c:1651  */
+#line 2339 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 46:
-#line 611 "awkgram.y" /* yacc.c:1651  */
+#line 566 "awkgram.y" /* yacc.c:1651  */
     {
                if (do_pretty_print)
                        (yyval) = list_prepend((yyvsp[0]), 
instruction(Op_exec_count));
                else
                        (yyval) = (yyvsp[0]);
          }
-#line 2391 "awkgram.c" /* yacc.c:1651  */
+#line 2350 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 47:
-#line 618 "awkgram.y" /* yacc.c:1651  */
+#line 573 "awkgram.y" /* yacc.c:1651  */
     {
                INSTRUCTION *dflt, *curr = NULL, *cexp, *cstmt;
                INSTRUCTION *ip, *nextc, *tbreak;
@@ -2481,11 +2440,11 @@ yyreduce:
                break_allowed--;
                fix_break_continue(ip, tbreak, NULL);
          }
-#line 2485 "awkgram.c" /* yacc.c:1651  */
+#line 2444 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 48:
-#line 708 "awkgram.y" /* yacc.c:1651  */
+#line 663 "awkgram.y" /* yacc.c:1651  */
     {
                /*
                 *    -----------------
@@ -2527,11 +2486,11 @@ yyreduce:
                continue_allowed--;
                fix_break_continue(ip, tbreak, tcont);
          }
-#line 2531 "awkgram.c" /* yacc.c:1651  */
+#line 2490 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 49:
-#line 750 "awkgram.y" /* yacc.c:1651  */
+#line 705 "awkgram.y" /* yacc.c:1651  */
     {
                /*
                 *    -----------------
@@ -2573,11 +2532,11 @@ yyreduce:
                } /* else
                        $1 and $4 are NULLs */
          }
-#line 2577 "awkgram.c" /* yacc.c:1651  */
+#line 2536 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 50:
-#line 792 "awkgram.y" /* yacc.c:1651  */
+#line 747 "awkgram.y" /* yacc.c:1651  */
     {
                INSTRUCTION *ip;
                char *var_name = (yyvsp[-5])->lextok;
@@ -2690,73 +2649,68 @@ regular_loop:
                break_allowed--;
                continue_allowed--;
          }
-#line 2694 "awkgram.c" /* yacc.c:1651  */
+#line 2653 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 51:
-#line 905 "awkgram.y" /* yacc.c:1651  */
+#line 860 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = mk_for_loop((yyvsp[-11]), (yyvsp[-9]), (yyvsp[-6]), 
(yyvsp[-3]), (yyvsp[0]));
 
                break_allowed--;
                continue_allowed--;
          }
-#line 2705 "awkgram.c" /* yacc.c:1651  */
+#line 2664 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 52:
-#line 912 "awkgram.y" /* yacc.c:1651  */
+#line 867 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = mk_for_loop((yyvsp[-10]), (yyvsp[-8]), (INSTRUCTION 
*) NULL, (yyvsp[-3]), (yyvsp[0]));
 
                break_allowed--;
                continue_allowed--;
          }
-#line 2716 "awkgram.c" /* yacc.c:1651  */
+#line 2675 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 53:
-#line 919 "awkgram.y" /* yacc.c:1651  */
+#line 874 "awkgram.y" /* yacc.c:1651  */
     {
                if (do_pretty_print)
                        (yyval) = list_prepend((yyvsp[0]), 
instruction(Op_exec_count));
                else
                        (yyval) = (yyvsp[0]);
-               (yyval) = add_pending_comment((yyval));
          }
-#line 2728 "awkgram.c" /* yacc.c:1651  */
+#line 2686 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 54:
-#line 930 "awkgram.y" /* yacc.c:1651  */
+#line 884 "awkgram.y" /* yacc.c:1651  */
     {
                if (! break_allowed)
                        error_ln((yyvsp[-1])->source_line,
                                _("`break' is not allowed outside a loop or 
switch"));
                (yyvsp[-1])->target_jmp = NULL;
                (yyval) = list_create((yyvsp[-1]));
-               (yyval) = add_pending_comment((yyval));
-
          }
-#line 2742 "awkgram.c" /* yacc.c:1651  */
+#line 2698 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 55:
-#line 940 "awkgram.y" /* yacc.c:1651  */
+#line 892 "awkgram.y" /* yacc.c:1651  */
     {
                if (! continue_allowed)
                        error_ln((yyvsp[-1])->source_line,
                                _("`continue' is not allowed outside a loop"));
                (yyvsp[-1])->target_jmp = NULL;
                (yyval) = list_create((yyvsp[-1]));
-               (yyval) = add_pending_comment((yyval));
-
          }
-#line 2756 "awkgram.c" /* yacc.c:1651  */
+#line 2710 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 56:
-#line 950 "awkgram.y" /* yacc.c:1651  */
+#line 900 "awkgram.y" /* yacc.c:1651  */
     {
                /* if inside function (rule = 0), resolve context at run-time */
                if (rule && rule != Rule)
@@ -2764,13 +2718,12 @@ regular_loop:
                                _("`next' used in %s action"), ruletab[rule]);
                (yyvsp[-1])->target_jmp = ip_rec;
                (yyval) = list_create((yyvsp[-1]));
-               (yyval) = add_pending_comment((yyval));
          }
-#line 2770 "awkgram.c" /* yacc.c:1651  */
+#line 2723 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 57:
-#line 960 "awkgram.y" /* yacc.c:1651  */
+#line 909 "awkgram.y" /* yacc.c:1651  */
     {
                /* if inside function (rule = 0), resolve context at run-time */
                if (rule == BEGIN || rule == END || rule == ENDFILE)
@@ -2780,13 +2733,12 @@ regular_loop:
                (yyvsp[-1])->target_newfile = ip_newfile;
                (yyvsp[-1])->target_endfile = ip_endfile;
                (yyval) = list_create((yyvsp[-1]));
-               (yyval) = add_pending_comment((yyval));
          }
-#line 2786 "awkgram.c" /* yacc.c:1651  */
+#line 2738 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 58:
-#line 972 "awkgram.y" /* yacc.c:1651  */
+#line 920 "awkgram.y" /* yacc.c:1651  */
     {
                /* Initialize the two possible jump targets, the actual target
                 * is resolved at run-time.
@@ -2800,22 +2752,21 @@ regular_loop:
                        (yyval)->nexti->memory = dupnode(Nnull_string);
                } else
                        (yyval) = list_append((yyvsp[-1]), (yyvsp[-2]));
-               (yyval) = add_pending_comment((yyval));
          }
-#line 2806 "awkgram.c" /* yacc.c:1651  */
+#line 2757 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 59:
-#line 988 "awkgram.y" /* yacc.c:1651  */
+#line 935 "awkgram.y" /* yacc.c:1651  */
     {
                if (! in_function)
                        yyerror(_("`return' used outside function context"));
          }
-#line 2815 "awkgram.c" /* yacc.c:1651  */
+#line 2766 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 60:
-#line 991 "awkgram.y" /* yacc.c:1651  */
+#line 938 "awkgram.y" /* yacc.c:1651  */
     {
                if ((yyvsp[-1]) == NULL) {
                        (yyval) = list_create((yyvsp[-3]));
@@ -2823,20 +2774,18 @@ regular_loop:
                        (yyval)->nexti->memory = dupnode(Nnull_string);
                } else
                        (yyval) = list_append((yyvsp[-1]), (yyvsp[-3]));
-
-               (yyval) = add_pending_comment((yyval));
          }
-#line 2830 "awkgram.c" /* yacc.c:1651  */
+#line 2779 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 62:
-#line 1013 "awkgram.y" /* yacc.c:1651  */
+#line 958 "awkgram.y" /* yacc.c:1651  */
     { in_print = true; in_parens = 0; }
-#line 2836 "awkgram.c" /* yacc.c:1651  */
+#line 2785 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 63:
-#line 1014 "awkgram.y" /* yacc.c:1651  */
+#line 959 "awkgram.y" /* yacc.c:1651  */
     {
                /*
                 * Optimization: plain `print' has no expression list, so $3 is 
null.
@@ -2932,19 +2881,18 @@ regular_print:
                                }
                        }
                }
-               (yyval) = add_pending_comment((yyval));
          }
-#line 2938 "awkgram.c" /* yacc.c:1651  */
+#line 2886 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 64:
-#line 1112 "awkgram.y" /* yacc.c:1651  */
+#line 1056 "awkgram.y" /* yacc.c:1651  */
     { sub_counter = 0; }
-#line 2944 "awkgram.c" /* yacc.c:1651  */
+#line 2892 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 65:
-#line 1113 "awkgram.y" /* yacc.c:1651  */
+#line 1057 "awkgram.y" /* yacc.c:1651  */
     {
                char *arr = (yyvsp[-2])->lextok;
 
@@ -2976,13 +2924,12 @@ regular_print:
                        (yyvsp[-3])->expr_count = sub_counter;
                        (yyval) = list_append(list_append((yyvsp[0]), 
(yyvsp[-2])), (yyvsp[-3]));
                }
-               (yyval) = add_pending_comment((yyval));
          }
-#line 2982 "awkgram.c" /* yacc.c:1651  */
+#line 2929 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 66:
-#line 1151 "awkgram.y" /* yacc.c:1651  */
+#line 1094 "awkgram.y" /* yacc.c:1651  */
     {
                static bool warned = false;
                char *arr = (yyvsp[-1])->lextok;
@@ -3007,57 +2954,55 @@ regular_print:
                        else if ((yyvsp[-1])->memory == func_table)
                                fatal(_("`delete' is not allowed with 
FUNCTAB"));
                }
-               (yyval) = add_pending_comment((yyval));
          }
-#line 3013 "awkgram.c" /* yacc.c:1651  */
+#line 2959 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 67:
-#line 1178 "awkgram.y" /* yacc.c:1651  */
+#line 1120 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = optimize_assignment((yyvsp[0]));
-               (yyval) = add_pending_comment((yyval));
          }
-#line 3022 "awkgram.c" /* yacc.c:1651  */
+#line 2967 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 68:
-#line 1186 "awkgram.y" /* yacc.c:1651  */
+#line 1127 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 3028 "awkgram.c" /* yacc.c:1651  */
+#line 2973 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 69:
-#line 1188 "awkgram.y" /* yacc.c:1651  */
+#line 1129 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3034 "awkgram.c" /* yacc.c:1651  */
+#line 2979 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 70:
-#line 1193 "awkgram.y" /* yacc.c:1651  */
+#line 1134 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 3040 "awkgram.c" /* yacc.c:1651  */
+#line 2985 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 71:
-#line 1195 "awkgram.y" /* yacc.c:1651  */
+#line 1136 "awkgram.y" /* yacc.c:1651  */
     {
                if ((yyvsp[-1]) == NULL)
                        (yyval) = list_create((yyvsp[0]));
                else
                        (yyval) = list_prepend((yyvsp[-1]), (yyvsp[0]));
          }
-#line 3051 "awkgram.c" /* yacc.c:1651  */
+#line 2996 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 72:
-#line 1202 "awkgram.y" /* yacc.c:1651  */
+#line 1143 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 3057 "awkgram.c" /* yacc.c:1651  */
+#line 3002 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 73:
-#line 1207 "awkgram.y" /* yacc.c:1651  */
+#line 1148 "awkgram.y" /* yacc.c:1651  */
     {
                INSTRUCTION *casestmt = (yyvsp[0]);
                if ((yyvsp[0]) == NULL)
@@ -3069,11 +3014,11 @@ regular_print:
                bcfree((yyvsp[-2]));
                (yyval) = (yyvsp[-4]);
          }
-#line 3073 "awkgram.c" /* yacc.c:1651  */
+#line 3018 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 74:
-#line 1219 "awkgram.y" /* yacc.c:1651  */
+#line 1160 "awkgram.y" /* yacc.c:1651  */
     {
                INSTRUCTION *casestmt = (yyvsp[0]);
                if ((yyvsp[0]) == NULL)
@@ -3084,17 +3029,17 @@ regular_print:
                (yyvsp[-3])->case_stmt = casestmt;
                (yyval) = (yyvsp[-3]);
          }
-#line 3088 "awkgram.c" /* yacc.c:1651  */
+#line 3033 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 75:
-#line 1233 "awkgram.y" /* yacc.c:1651  */
+#line 1174 "awkgram.y" /* yacc.c:1651  */
     {  (yyval) = (yyvsp[0]); }
-#line 3094 "awkgram.c" /* yacc.c:1651  */
+#line 3039 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 76:
-#line 1235 "awkgram.y" /* yacc.c:1651  */
+#line 1176 "awkgram.y" /* yacc.c:1651  */
     {
                NODE *n = (yyvsp[0])->memory;
                (void) force_number(n);
@@ -3102,28 +3047,28 @@ regular_print:
                bcfree((yyvsp[-1]));
                (yyval) = (yyvsp[0]);
          }
-#line 3106 "awkgram.c" /* yacc.c:1651  */
+#line 3051 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 77:
-#line 1243 "awkgram.y" /* yacc.c:1651  */
+#line 1184 "awkgram.y" /* yacc.c:1651  */
     {
                NODE *n = (yyvsp[0])->lasti->memory;
                bcfree((yyvsp[-1]));
                add_sign_to_num(n, '+');
                (yyval) = (yyvsp[0]);
          }
-#line 3117 "awkgram.c" /* yacc.c:1651  */
+#line 3062 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 78:
-#line 1250 "awkgram.y" /* yacc.c:1651  */
+#line 1191 "awkgram.y" /* yacc.c:1651  */
     {  (yyval) = (yyvsp[0]); }
-#line 3123 "awkgram.c" /* yacc.c:1651  */
+#line 3068 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 79:
-#line 1252 "awkgram.y" /* yacc.c:1651  */
+#line 1193 "awkgram.y" /* yacc.c:1651  */
     {
                if ((yyvsp[0])->memory->type == Node_regex)
                        (yyvsp[0])->opcode = Op_push_re;
@@ -3131,57 +3076,57 @@ regular_print:
                        (yyvsp[0])->opcode = Op_push;
                (yyval) = (yyvsp[0]);
          }
-#line 3135 "awkgram.c" /* yacc.c:1651  */
+#line 3080 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 80:
-#line 1260 "awkgram.y" /* yacc.c:1651  */
+#line 1201 "awkgram.y" /* yacc.c:1651  */
     {
                assert(((yyvsp[0])->memory->flags & REGEX) == REGEX);
                (yyvsp[0])->opcode = Op_push_re;
                (yyval) = (yyvsp[0]);
          }
-#line 3145 "awkgram.c" /* yacc.c:1651  */
+#line 3090 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 81:
-#line 1269 "awkgram.y" /* yacc.c:1651  */
+#line 1210 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3151 "awkgram.c" /* yacc.c:1651  */
+#line 3096 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 82:
-#line 1271 "awkgram.y" /* yacc.c:1651  */
+#line 1212 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3157 "awkgram.c" /* yacc.c:1651  */
+#line 3102 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 84:
-#line 1281 "awkgram.y" /* yacc.c:1651  */
+#line 1222 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = (yyvsp[-1]);
          }
-#line 3165 "awkgram.c" /* yacc.c:1651  */
+#line 3110 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 85:
-#line 1288 "awkgram.y" /* yacc.c:1651  */
+#line 1229 "awkgram.y" /* yacc.c:1651  */
     {
                in_print = false;
                in_parens = 0;
                (yyval) = NULL;
          }
-#line 3175 "awkgram.c" /* yacc.c:1651  */
+#line 3120 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 86:
-#line 1293 "awkgram.y" /* yacc.c:1651  */
+#line 1234 "awkgram.y" /* yacc.c:1651  */
     { in_print = false; in_parens = 0; }
-#line 3181 "awkgram.c" /* yacc.c:1651  */
+#line 3126 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 87:
-#line 1294 "awkgram.y" /* yacc.c:1651  */
+#line 1235 "awkgram.y" /* yacc.c:1651  */
     {
                if ((yyvsp[-2])->redir_type == redirect_twoway
                        && (yyvsp[0])->lasti->opcode == Op_K_getline_redir
@@ -3191,63 +3136,89 @@ regular_print:
                        lintwarn(_("concatenation as I/O `>' redirection target 
is ambiguous"));
                (yyval) = list_prepend((yyvsp[0]), (yyvsp[-2]));
          }
-#line 3195 "awkgram.c" /* yacc.c:1651  */
+#line 3140 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 88:
-#line 1307 "awkgram.y" /* yacc.c:1651  */
+#line 1248 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = mk_condition((yyvsp[-3]), (yyvsp[-5]), (yyvsp[0]), 
NULL, NULL);
          }
-#line 3203 "awkgram.c" /* yacc.c:1651  */
+#line 3148 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 89:
-#line 1312 "awkgram.y" /* yacc.c:1651  */
+#line 1253 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = mk_condition((yyvsp[-6]), (yyvsp[-8]), (yyvsp[-3]), 
(yyvsp[-2]), (yyvsp[0]));
          }
-#line 3211 "awkgram.c" /* yacc.c:1651  */
+#line 3156 "awkgram.c" /* yacc.c:1651  */
+    break;
+
+  case 90:
+#line 1259 "awkgram.y" /* yacc.c:1651  */
+    { (yyval) = (yyvsp[0]); }
+#line 3162 "awkgram.c" /* yacc.c:1651  */
+    break;
+
+  case 91:
+#line 1261 "awkgram.y" /* yacc.c:1651  */
+    {
+               if ((yyvsp[-1]) != NULL && (yyvsp[0]) != NULL) {
+                       if ((yyvsp[-1])->memory->comment_type == EOL_COMMENT) {
+                               assert((yyvsp[0])->memory->comment_type == 
FULL_COMMENT);
+                               (yyvsp[-1])->comment = (yyvsp[0]);      // 
chain them
+                       } else if (merge_comments((yyvsp[-1]), (yyvsp[0])))
+                               (yyval) = (yyvsp[-1]);
+                       else
+                               cant_happen();
+               } else if ((yyvsp[-1]) != NULL) {
+                       (yyval) = (yyvsp[-1]);
+               } else {
+                       (yyval) = (yyvsp[0]);
+               }
+         }
+#line 3182 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 94:
-#line 1329 "awkgram.y" /* yacc.c:1651  */
+#line 1285 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 3217 "awkgram.c" /* yacc.c:1651  */
+#line 3188 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 95:
-#line 1331 "awkgram.y" /* yacc.c:1651  */
+#line 1287 "awkgram.y" /* yacc.c:1651  */
     {
                bcfree((yyvsp[-1]));
                (yyval) = (yyvsp[0]);
          }
-#line 3226 "awkgram.c" /* yacc.c:1651  */
+#line 3197 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 96:
-#line 1339 "awkgram.y" /* yacc.c:1651  */
+#line 1295 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 3232 "awkgram.c" /* yacc.c:1651  */
+#line 3203 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 97:
-#line 1341 "awkgram.y" /* yacc.c:1651  */
+#line 1297 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3238 "awkgram.c" /* yacc.c:1651  */
+#line 3209 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 98:
-#line 1346 "awkgram.y" /* yacc.c:1651  */
+#line 1302 "awkgram.y" /* yacc.c:1651  */
     {
                (yyvsp[0])->param_count = 0;
                (yyval) = list_create((yyvsp[0]));
          }
-#line 3247 "awkgram.c" /* yacc.c:1651  */
+#line 3218 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 99:
-#line 1351 "awkgram.y" /* yacc.c:1651  */
+#line 1307 "awkgram.y" /* yacc.c:1651  */
     {
                if ((yyvsp[-2]) != NULL && (yyvsp[0]) != NULL) {
                        (yyvsp[0])->param_count =  
(yyvsp[-2])->lasti->param_count + 1;
@@ -3256,74 +3227,74 @@ regular_print:
                } else
                        (yyval) = NULL;
          }
-#line 3260 "awkgram.c" /* yacc.c:1651  */
+#line 3231 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 100:
-#line 1360 "awkgram.y" /* yacc.c:1651  */
+#line 1316 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 3266 "awkgram.c" /* yacc.c:1651  */
+#line 3237 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 101:
-#line 1362 "awkgram.y" /* yacc.c:1651  */
+#line 1318 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[-1]); }
-#line 3272 "awkgram.c" /* yacc.c:1651  */
+#line 3243 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 102:
-#line 1364 "awkgram.y" /* yacc.c:1651  */
+#line 1320 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[-2]); }
-#line 3278 "awkgram.c" /* yacc.c:1651  */
+#line 3249 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 103:
-#line 1370 "awkgram.y" /* yacc.c:1651  */
+#line 1326 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 3284 "awkgram.c" /* yacc.c:1651  */
+#line 3255 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 104:
-#line 1372 "awkgram.y" /* yacc.c:1651  */
+#line 1328 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3290 "awkgram.c" /* yacc.c:1651  */
+#line 3261 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 105:
-#line 1377 "awkgram.y" /* yacc.c:1651  */
+#line 1333 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 3296 "awkgram.c" /* yacc.c:1651  */
+#line 3267 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 106:
-#line 1379 "awkgram.y" /* yacc.c:1651  */
+#line 1335 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3302 "awkgram.c" /* yacc.c:1651  */
+#line 3273 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 107:
-#line 1384 "awkgram.y" /* yacc.c:1651  */
+#line 1340 "awkgram.y" /* yacc.c:1651  */
     {  (yyval) = mk_expression_list(NULL, (yyvsp[0])); }
-#line 3308 "awkgram.c" /* yacc.c:1651  */
+#line 3279 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 108:
-#line 1386 "awkgram.y" /* yacc.c:1651  */
+#line 1342 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
                yyerrok;
          }
-#line 3317 "awkgram.c" /* yacc.c:1651  */
+#line 3288 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 109:
-#line 1391 "awkgram.y" /* yacc.c:1651  */
+#line 1347 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 3323 "awkgram.c" /* yacc.c:1651  */
+#line 3294 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 110:
-#line 1393 "awkgram.y" /* yacc.c:1651  */
+#line 1349 "awkgram.y" /* yacc.c:1651  */
     {
                /*
                 * Returning the expression list instead of NULL lets
@@ -3331,62 +3302,62 @@ regular_print:
                 */
                (yyval) = (yyvsp[-1]);
          }
-#line 3335 "awkgram.c" /* yacc.c:1651  */
+#line 3306 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 111:
-#line 1401 "awkgram.y" /* yacc.c:1651  */
+#line 1357 "awkgram.y" /* yacc.c:1651  */
     {
                /* Ditto */
                (yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
          }
-#line 3344 "awkgram.c" /* yacc.c:1651  */
+#line 3315 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 112:
-#line 1406 "awkgram.y" /* yacc.c:1651  */
+#line 1362 "awkgram.y" /* yacc.c:1651  */
     {
                /* Ditto */
                (yyval) = (yyvsp[-2]);
          }
-#line 3353 "awkgram.c" /* yacc.c:1651  */
+#line 3324 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 113:
-#line 1414 "awkgram.y" /* yacc.c:1651  */
+#line 1370 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 3359 "awkgram.c" /* yacc.c:1651  */
+#line 3330 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 114:
-#line 1416 "awkgram.y" /* yacc.c:1651  */
+#line 1372 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3365 "awkgram.c" /* yacc.c:1651  */
+#line 3336 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 115:
-#line 1421 "awkgram.y" /* yacc.c:1651  */
+#line 1377 "awkgram.y" /* yacc.c:1651  */
     {  (yyval) = mk_expression_list(NULL, (yyvsp[0])); }
-#line 3371 "awkgram.c" /* yacc.c:1651  */
+#line 3342 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 116:
-#line 1423 "awkgram.y" /* yacc.c:1651  */
+#line 1379 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
                yyerrok;
          }
-#line 3380 "awkgram.c" /* yacc.c:1651  */
+#line 3351 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 117:
-#line 1428 "awkgram.y" /* yacc.c:1651  */
+#line 1384 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 3386 "awkgram.c" /* yacc.c:1651  */
+#line 3357 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 118:
-#line 1430 "awkgram.y" /* yacc.c:1651  */
+#line 1386 "awkgram.y" /* yacc.c:1651  */
     {
                /*
                 * Returning the expression list instead of NULL lets
@@ -3394,72 +3365,72 @@ regular_print:
                 */
                (yyval) = (yyvsp[-1]);
          }
-#line 3398 "awkgram.c" /* yacc.c:1651  */
+#line 3369 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 119:
-#line 1438 "awkgram.y" /* yacc.c:1651  */
+#line 1394 "awkgram.y" /* yacc.c:1651  */
     {
                /* Ditto */
                (yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
          }
-#line 3407 "awkgram.c" /* yacc.c:1651  */
+#line 3378 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 120:
-#line 1443 "awkgram.y" /* yacc.c:1651  */
+#line 1399 "awkgram.y" /* yacc.c:1651  */
     {
                /* Ditto */
                (yyval) = (yyvsp[-2]);
          }
-#line 3416 "awkgram.c" /* yacc.c:1651  */
+#line 3387 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 121:
-#line 1450 "awkgram.y" /* yacc.c:1651  */
+#line 1406 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3422 "awkgram.c" /* yacc.c:1651  */
+#line 3393 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 122:
-#line 1451 "awkgram.y" /* yacc.c:1651  */
+#line 1407 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = list_create((yyvsp[0])); }
-#line 3428 "awkgram.c" /* yacc.c:1651  */
+#line 3399 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 123:
-#line 1457 "awkgram.y" /* yacc.c:1651  */
+#line 1413 "awkgram.y" /* yacc.c:1651  */
     {
                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[-2]), (yyvsp[0]), (yyvsp[-1]));
          }
-#line 3439 "awkgram.c" /* yacc.c:1651  */
+#line 3410 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 124:
-#line 1464 "awkgram.y" /* yacc.c:1651  */
+#line 1420 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = mk_assignment((yyvsp[-2]), list_create((yyvsp[0])), 
(yyvsp[-1]));
          }
-#line 3447 "awkgram.c" /* yacc.c:1651  */
+#line 3418 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 125:
-#line 1468 "awkgram.y" /* yacc.c:1651  */
+#line 1424 "awkgram.y" /* yacc.c:1651  */
     {  (yyval) = mk_boolean((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3453 "awkgram.c" /* yacc.c:1651  */
+#line 3424 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 126:
-#line 1470 "awkgram.y" /* yacc.c:1651  */
+#line 1426 "awkgram.y" /* yacc.c:1651  */
     {  (yyval) = mk_boolean((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3459 "awkgram.c" /* yacc.c:1651  */
+#line 3430 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 127:
-#line 1472 "awkgram.y" /* yacc.c:1651  */
+#line 1428 "awkgram.y" /* yacc.c:1651  */
     {
                if ((yyvsp[-2])->lasti->opcode == Op_match_rec)
                        warning_ln((yyvsp[-1])->source_line,
@@ -3472,11 +3443,11 @@ regular_print:
                bcfree((yyvsp[0]));
                (yyval) = list_append((yyvsp[-2]), (yyvsp[-1]));
          }
-#line 3476 "awkgram.c" /* yacc.c:1651  */
+#line 3447 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 128:
-#line 1485 "awkgram.y" /* yacc.c:1651  */
+#line 1441 "awkgram.y" /* yacc.c:1651  */
     {
                if ((yyvsp[-2])->lasti->opcode == Op_match_rec)
                        warning_ln((yyvsp[-1])->source_line,
@@ -3493,11 +3464,11 @@ regular_print:
                        (yyval) = list_append(list_merge((yyvsp[-2]), 
(yyvsp[0])), (yyvsp[-1]));
                }
          }
-#line 3497 "awkgram.c" /* yacc.c:1651  */
+#line 3468 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 129:
-#line 1502 "awkgram.y" /* yacc.c:1651  */
+#line 1458 "awkgram.y" /* yacc.c:1651  */
     {
                if (do_lint_old)
                        warning_ln((yyvsp[-1])->source_line,
@@ -3507,91 +3478,91 @@ regular_print:
                (yyvsp[-1])->expr_count = 1;
                (yyval) = list_append(list_merge((yyvsp[-2]), (yyvsp[0])), 
(yyvsp[-1]));
          }
-#line 3511 "awkgram.c" /* yacc.c:1651  */
+#line 3482 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 130:
-#line 1512 "awkgram.y" /* yacc.c:1651  */
+#line 1468 "awkgram.y" /* yacc.c:1651  */
     {
                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[-2]), (yyvsp[0])), 
(yyvsp[-1]));
          }
-#line 3522 "awkgram.c" /* yacc.c:1651  */
+#line 3493 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 131:
-#line 1519 "awkgram.y" /* yacc.c:1651  */
+#line 1475 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = mk_condition((yyvsp[-4]), (yyvsp[-3]), (yyvsp[-2]), 
(yyvsp[-1]), (yyvsp[0])); }
-#line 3528 "awkgram.c" /* yacc.c:1651  */
+#line 3499 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 132:
-#line 1521 "awkgram.y" /* yacc.c:1651  */
+#line 1477 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3534 "awkgram.c" /* yacc.c:1651  */
+#line 3505 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 133:
-#line 1526 "awkgram.y" /* yacc.c:1651  */
+#line 1482 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3540 "awkgram.c" /* yacc.c:1651  */
+#line 3511 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 134:
-#line 1528 "awkgram.y" /* yacc.c:1651  */
+#line 1484 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3546 "awkgram.c" /* yacc.c:1651  */
+#line 3517 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 135:
-#line 1530 "awkgram.y" /* yacc.c:1651  */
+#line 1486 "awkgram.y" /* yacc.c:1651  */
     {
                (yyvsp[0])->opcode = Op_assign_quotient;
                (yyval) = (yyvsp[0]);
          }
-#line 3555 "awkgram.c" /* yacc.c:1651  */
+#line 3526 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 136:
-#line 1538 "awkgram.y" /* yacc.c:1651  */
+#line 1494 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3561 "awkgram.c" /* yacc.c:1651  */
+#line 3532 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 137:
-#line 1540 "awkgram.y" /* yacc.c:1651  */
+#line 1496 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3567 "awkgram.c" /* yacc.c:1651  */
+#line 3538 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 138:
-#line 1545 "awkgram.y" /* yacc.c:1651  */
+#line 1501 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3573 "awkgram.c" /* yacc.c:1651  */
+#line 3544 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 139:
-#line 1547 "awkgram.y" /* yacc.c:1651  */
+#line 1503 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3579 "awkgram.c" /* yacc.c:1651  */
+#line 3550 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 140:
-#line 1552 "awkgram.y" /* yacc.c:1651  */
+#line 1508 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3585 "awkgram.c" /* yacc.c:1651  */
+#line 3556 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 141:
-#line 1554 "awkgram.y" /* yacc.c:1651  */
+#line 1510 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3591 "awkgram.c" /* yacc.c:1651  */
+#line 3562 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 142:
-#line 1556 "awkgram.y" /* yacc.c:1651  */
+#line 1512 "awkgram.y" /* yacc.c:1651  */
     {
                int count = 2;
                bool is_simple_var = false;
@@ -3645,47 +3616,47 @@ regular_print:
                                max_args = count;
                }
          }
-#line 3649 "awkgram.c" /* yacc.c:1651  */
+#line 3620 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 144:
-#line 1615 "awkgram.y" /* yacc.c:1651  */
+#line 1571 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3655 "awkgram.c" /* yacc.c:1651  */
+#line 3626 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 145:
-#line 1617 "awkgram.y" /* yacc.c:1651  */
+#line 1573 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3661 "awkgram.c" /* yacc.c:1651  */
+#line 3632 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 146:
-#line 1619 "awkgram.y" /* yacc.c:1651  */
+#line 1575 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3667 "awkgram.c" /* yacc.c:1651  */
+#line 3638 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 147:
-#line 1621 "awkgram.y" /* yacc.c:1651  */
+#line 1577 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3673 "awkgram.c" /* yacc.c:1651  */
+#line 3644 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 148:
-#line 1623 "awkgram.y" /* yacc.c:1651  */
+#line 1579 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3679 "awkgram.c" /* yacc.c:1651  */
+#line 3650 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 149:
-#line 1625 "awkgram.y" /* yacc.c:1651  */
+#line 1581 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3685 "awkgram.c" /* yacc.c:1651  */
+#line 3656 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 150:
-#line 1627 "awkgram.y" /* yacc.c:1651  */
+#line 1583 "awkgram.y" /* yacc.c:1651  */
     {
                /*
                 * In BEGINFILE/ENDFILE, allow `getline [var] < file'
@@ -3699,29 +3670,29 @@ regular_print:
                                _("non-redirected `getline' undefined inside 
END action"));
                (yyval) = mk_getline((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]), 
redirect_input);
          }
-#line 3703 "awkgram.c" /* yacc.c:1651  */
+#line 3674 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 151:
-#line 1641 "awkgram.y" /* yacc.c:1651  */
+#line 1597 "awkgram.y" /* yacc.c:1651  */
     {
                (yyvsp[0])->opcode = Op_postincrement;
                (yyval) = mk_assignment((yyvsp[-1]), NULL, (yyvsp[0]));
          }
-#line 3712 "awkgram.c" /* yacc.c:1651  */
+#line 3683 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 152:
-#line 1646 "awkgram.y" /* yacc.c:1651  */
+#line 1602 "awkgram.y" /* yacc.c:1651  */
     {
                (yyvsp[0])->opcode = Op_postdecrement;
                (yyval) = mk_assignment((yyvsp[-1]), NULL, (yyvsp[0]));
          }
-#line 3721 "awkgram.c" /* yacc.c:1651  */
+#line 3692 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 153:
-#line 1651 "awkgram.y" /* yacc.c:1651  */
+#line 1607 "awkgram.y" /* yacc.c:1651  */
     {
                if (do_lint_old) {
                    warning_ln((yyvsp[-1])->source_line,
@@ -3741,64 +3712,64 @@ regular_print:
                        (yyval) = list_append(list_merge(t, (yyvsp[0])), 
(yyvsp[-1]));
                }
          }
-#line 3745 "awkgram.c" /* yacc.c:1651  */
+#line 3716 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 154:
-#line 1676 "awkgram.y" /* yacc.c:1651  */
+#line 1632 "awkgram.y" /* yacc.c:1651  */
     {
                  (yyval) = mk_getline((yyvsp[-1]), (yyvsp[0]), (yyvsp[-3]), 
(yyvsp[-2])->redir_type);
                  bcfree((yyvsp[-2]));
                }
-#line 3754 "awkgram.c" /* yacc.c:1651  */
+#line 3725 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 155:
-#line 1682 "awkgram.y" /* yacc.c:1651  */
+#line 1638 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3760 "awkgram.c" /* yacc.c:1651  */
+#line 3731 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 156:
-#line 1684 "awkgram.y" /* yacc.c:1651  */
+#line 1640 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3766 "awkgram.c" /* yacc.c:1651  */
+#line 3737 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 157:
-#line 1686 "awkgram.y" /* yacc.c:1651  */
+#line 1642 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3772 "awkgram.c" /* yacc.c:1651  */
+#line 3743 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 158:
-#line 1688 "awkgram.y" /* yacc.c:1651  */
+#line 1644 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3778 "awkgram.c" /* yacc.c:1651  */
+#line 3749 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 159:
-#line 1690 "awkgram.y" /* yacc.c:1651  */
+#line 1646 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3784 "awkgram.c" /* yacc.c:1651  */
+#line 3755 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 160:
-#line 1692 "awkgram.y" /* yacc.c:1651  */
+#line 1648 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3790 "awkgram.c" /* yacc.c:1651  */
+#line 3761 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 161:
-#line 1697 "awkgram.y" /* yacc.c:1651  */
+#line 1653 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = list_create((yyvsp[0]));
          }
-#line 3798 "awkgram.c" /* yacc.c:1651  */
+#line 3769 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 162:
-#line 1701 "awkgram.y" /* yacc.c:1651  */
+#line 1657 "awkgram.y" /* yacc.c:1651  */
     {
                if ((yyvsp[0])->opcode == Op_match_rec) {
                        (yyvsp[0])->opcode = Op_nomatch;
@@ -3830,11 +3801,11 @@ regular_print:
                        }
                }
           }
-#line 3834 "awkgram.c" /* yacc.c:1651  */
+#line 3805 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 163:
-#line 1733 "awkgram.y" /* yacc.c:1651  */
+#line 1689 "awkgram.y" /* yacc.c:1651  */
     {
                // Always include. Allows us to lint warn on
                // print "foo" > "bar" 1
@@ -3842,31 +3813,31 @@ regular_print:
                // print "foo" > ("bar" 1)
                (yyval) = list_append((yyvsp[-1]), bcalloc(Op_parens, 1, 
sourceline));
          }
-#line 3846 "awkgram.c" /* yacc.c:1651  */
+#line 3817 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 164:
-#line 1741 "awkgram.y" /* yacc.c:1651  */
+#line 1697 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = snode((yyvsp[-1]), (yyvsp[-3]));
                if ((yyval) == NULL)
                        YYABORT;
          }
-#line 3856 "awkgram.c" /* yacc.c:1651  */
+#line 3827 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 165:
-#line 1747 "awkgram.y" /* yacc.c:1651  */
+#line 1703 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = snode((yyvsp[-1]), (yyvsp[-3]));
                if ((yyval) == NULL)
                        YYABORT;
          }
-#line 3866 "awkgram.c" /* yacc.c:1651  */
+#line 3837 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 166:
-#line 1753 "awkgram.y" /* yacc.c:1651  */
+#line 1709 "awkgram.y" /* yacc.c:1651  */
     {
                static bool warned = false;
 
@@ -3879,45 +3850,45 @@ regular_print:
                if ((yyval) == NULL)
                        YYABORT;
          }
-#line 3883 "awkgram.c" /* yacc.c:1651  */
+#line 3854 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 169:
-#line 1768 "awkgram.y" /* yacc.c:1651  */
+#line 1724 "awkgram.y" /* yacc.c:1651  */
     {
                (yyvsp[-1])->opcode = Op_preincrement;
                (yyval) = mk_assignment((yyvsp[0]), NULL, (yyvsp[-1]));
          }
-#line 3892 "awkgram.c" /* yacc.c:1651  */
+#line 3863 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 170:
-#line 1773 "awkgram.y" /* yacc.c:1651  */
+#line 1729 "awkgram.y" /* yacc.c:1651  */
     {
                (yyvsp[-1])->opcode = Op_predecrement;
                (yyval) = mk_assignment((yyvsp[0]), NULL, (yyvsp[-1]));
          }
-#line 3901 "awkgram.c" /* yacc.c:1651  */
+#line 3872 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 171:
-#line 1778 "awkgram.y" /* yacc.c:1651  */
+#line 1734 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = list_create((yyvsp[0]));
          }
-#line 3909 "awkgram.c" /* yacc.c:1651  */
+#line 3880 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 172:
-#line 1782 "awkgram.y" /* yacc.c:1651  */
+#line 1738 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = list_create((yyvsp[0]));
          }
-#line 3917 "awkgram.c" /* yacc.c:1651  */
+#line 3888 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 173:
-#line 1786 "awkgram.y" /* yacc.c:1651  */
+#line 1742 "awkgram.y" /* yacc.c:1651  */
     {
                if ((yyvsp[0])->lasti->opcode == Op_push_i
                        && ((yyvsp[0])->lasti->memory->flags & STRING) == 0
@@ -3932,11 +3903,11 @@ regular_print:
                        (yyval) = list_append((yyvsp[0]), (yyvsp[-1]));
                }
          }
-#line 3936 "awkgram.c" /* yacc.c:1651  */
+#line 3907 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 174:
-#line 1801 "awkgram.y" /* yacc.c:1651  */
+#line 1757 "awkgram.y" /* yacc.c:1651  */
     {
                if ((yyvsp[0])->lasti->opcode == Op_push_i
                        && ((yyvsp[0])->lasti->memory->flags & STRING) == 0
@@ -3954,20 +3925,20 @@ regular_print:
                        (yyval) = list_append((yyvsp[0]), (yyvsp[-1]));
                }
          }
-#line 3958 "awkgram.c" /* yacc.c:1651  */
+#line 3929 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 175:
-#line 1822 "awkgram.y" /* yacc.c:1651  */
+#line 1778 "awkgram.y" /* yacc.c:1651  */
     {
                func_use((yyvsp[0])->lasti->func_name, FUNC_USE);
                (yyval) = (yyvsp[0]);
          }
-#line 3967 "awkgram.c" /* yacc.c:1651  */
+#line 3938 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 176:
-#line 1827 "awkgram.y" /* yacc.c:1651  */
+#line 1783 "awkgram.y" /* yacc.c:1651  */
     {
                /* indirect function call */
                INSTRUCTION *f, *t;
@@ -4001,11 +3972,11 @@ regular_print:
                (yyval) = list_prepend((yyvsp[0]), t);
                at_seen = false;
          }
-#line 4005 "awkgram.c" /* yacc.c:1651  */
+#line 3976 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 177:
-#line 1864 "awkgram.y" /* yacc.c:1651  */
+#line 1820 "awkgram.y" /* yacc.c:1651  */
     {
                NODE *n;
 
@@ -4030,49 +4001,49 @@ regular_print:
                        (yyval) = list_append(t, (yyvsp[-3]));
                }
          }
-#line 4034 "awkgram.c" /* yacc.c:1651  */
+#line 4005 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 178:
-#line 1892 "awkgram.y" /* yacc.c:1651  */
+#line 1848 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 4040 "awkgram.c" /* yacc.c:1651  */
+#line 4011 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 179:
-#line 1894 "awkgram.y" /* yacc.c:1651  */
+#line 1850 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 4046 "awkgram.c" /* yacc.c:1651  */
+#line 4017 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 180:
-#line 1899 "awkgram.y" /* yacc.c:1651  */
+#line 1855 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 4052 "awkgram.c" /* yacc.c:1651  */
+#line 4023 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 181:
-#line 1901 "awkgram.y" /* yacc.c:1651  */
+#line 1857 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[-1]); }
-#line 4058 "awkgram.c" /* yacc.c:1651  */
+#line 4029 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 182:
-#line 1906 "awkgram.y" /* yacc.c:1651  */
+#line 1862 "awkgram.y" /* yacc.c:1651  */
     {  (yyval) = (yyvsp[0]); }
-#line 4064 "awkgram.c" /* yacc.c:1651  */
+#line 4035 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 183:
-#line 1908 "awkgram.y" /* yacc.c:1651  */
+#line 1864 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = list_merge((yyvsp[-1]), (yyvsp[0]));
          }
-#line 4072 "awkgram.c" /* yacc.c:1651  */
+#line 4043 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 184:
-#line 1915 "awkgram.y" /* yacc.c:1651  */
+#line 1871 "awkgram.y" /* yacc.c:1651  */
     {
                INSTRUCTION *ip = (yyvsp[0])->lasti;
                int count = ip->sub_count;      /* # of SUBSEP-seperated 
expressions */
@@ -4086,11 +4057,11 @@ regular_print:
                sub_counter++;  /* count # of dimensions */
                (yyval) = (yyvsp[0]);
          }
-#line 4090 "awkgram.c" /* yacc.c:1651  */
+#line 4061 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 185:
-#line 1932 "awkgram.y" /* yacc.c:1651  */
+#line 1888 "awkgram.y" /* yacc.c:1651  */
     {
                INSTRUCTION *t = (yyvsp[-1]);
                if ((yyvsp[-1]) == NULL) {
@@ -4104,31 +4075,31 @@ regular_print:
                        (yyvsp[0])->sub_count = count_expressions(&t, false);
                (yyval) = list_append(t, (yyvsp[0]));
          }
-#line 4108 "awkgram.c" /* yacc.c:1651  */
+#line 4079 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 186:
-#line 1949 "awkgram.y" /* yacc.c:1651  */
+#line 1905 "awkgram.y" /* yacc.c:1651  */
     {  (yyval) = (yyvsp[0]); }
-#line 4114 "awkgram.c" /* yacc.c:1651  */
+#line 4085 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 187:
-#line 1951 "awkgram.y" /* yacc.c:1651  */
+#line 1907 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = list_merge((yyvsp[-1]), (yyvsp[0]));
          }
-#line 4122 "awkgram.c" /* yacc.c:1651  */
+#line 4093 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 188:
-#line 1958 "awkgram.y" /* yacc.c:1651  */
+#line 1914 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[-1]); }
-#line 4128 "awkgram.c" /* yacc.c:1651  */
+#line 4099 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 189:
-#line 1963 "awkgram.y" /* yacc.c:1651  */
+#line 1919 "awkgram.y" /* yacc.c:1651  */
     {
                char *var_name = (yyvsp[0])->lextok;
 
@@ -4136,22 +4107,22 @@ regular_print:
                (yyvsp[0])->memory = variable((yyvsp[0])->source_line, 
var_name, Node_var_new);
                (yyval) = list_create((yyvsp[0]));
          }
-#line 4140 "awkgram.c" /* yacc.c:1651  */
+#line 4111 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 190:
-#line 1971 "awkgram.y" /* yacc.c:1651  */
+#line 1927 "awkgram.y" /* yacc.c:1651  */
     {
                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 4151 "awkgram.c" /* yacc.c:1651  */
+#line 4122 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 191:
-#line 1981 "awkgram.y" /* yacc.c:1651  */
+#line 1937 "awkgram.y" /* yacc.c:1651  */
     {
                INSTRUCTION *ip = (yyvsp[0])->nexti;
                if (ip->opcode == Op_push
@@ -4163,73 +4134,73 @@ regular_print:
                } else
                        (yyval) = (yyvsp[0]);
          }
-#line 4167 "awkgram.c" /* yacc.c:1651  */
+#line 4138 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 192:
-#line 1993 "awkgram.y" /* yacc.c:1651  */
+#line 1949 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = list_append((yyvsp[-1]), (yyvsp[-2]));
                if ((yyvsp[0]) != NULL)
                        mk_assignment((yyvsp[-1]), NULL, (yyvsp[0]));
          }
-#line 4177 "awkgram.c" /* yacc.c:1651  */
+#line 4148 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 193:
-#line 2002 "awkgram.y" /* yacc.c:1651  */
+#line 1958 "awkgram.y" /* yacc.c:1651  */
     {
                (yyvsp[0])->opcode = Op_postincrement;
          }
-#line 4185 "awkgram.c" /* yacc.c:1651  */
+#line 4156 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 194:
-#line 2006 "awkgram.y" /* yacc.c:1651  */
+#line 1962 "awkgram.y" /* yacc.c:1651  */
     {
                (yyvsp[0])->opcode = Op_postdecrement;
          }
-#line 4193 "awkgram.c" /* yacc.c:1651  */
+#line 4164 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 195:
-#line 2009 "awkgram.y" /* yacc.c:1651  */
+#line 1965 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 4199 "awkgram.c" /* yacc.c:1651  */
+#line 4170 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 197:
-#line 2017 "awkgram.y" /* yacc.c:1651  */
+#line 1973 "awkgram.y" /* yacc.c:1651  */
     { yyerrok; }
-#line 4205 "awkgram.c" /* yacc.c:1651  */
+#line 4176 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 198:
-#line 2021 "awkgram.y" /* yacc.c:1651  */
+#line 1977 "awkgram.y" /* yacc.c:1651  */
     { yyerrok; }
-#line 4211 "awkgram.c" /* yacc.c:1651  */
+#line 4182 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 201:
-#line 2030 "awkgram.y" /* yacc.c:1651  */
+#line 1986 "awkgram.y" /* yacc.c:1651  */
     { yyerrok; }
-#line 4217 "awkgram.c" /* yacc.c:1651  */
+#line 4188 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 202:
-#line 2034 "awkgram.y" /* yacc.c:1651  */
+#line 1990 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); yyerrok; }
-#line 4223 "awkgram.c" /* yacc.c:1651  */
+#line 4194 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 203:
-#line 2038 "awkgram.y" /* yacc.c:1651  */
+#line 1994 "awkgram.y" /* yacc.c:1651  */
     { yyerrok; }
-#line 4229 "awkgram.c" /* yacc.c:1651  */
+#line 4200 "awkgram.c" /* yacc.c:1651  */
     break;
 
 
-#line 4233 "awkgram.c" /* yacc.c:1651  */
+#line 4204 "awkgram.c" /* yacc.c:1651  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -4457,7 +4428,7 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 2040 "awkgram.y" /* yacc.c:1910  */
+#line 1996 "awkgram.y" /* yacc.c:1910  */
 
 
 struct token {
@@ -4536,8 +4507,8 @@ static const struct token tokentab[] = {
 {"exp",                Op_builtin,      LEX_BUILTIN,   A(1),           do_exp, 
MPF(exp)},
 {"fflush",     Op_builtin,      LEX_BUILTIN,   A(0)|A(1), do_fflush,   0},
 {"for",                Op_K_for,        LEX_FOR,       BREAK|CONTINUE, 0,      
0},
-{"func",       Op_func, LEX_FUNCTION,  NOT_POSIX|NOT_OLD,      0,      0},
-{"function",Op_func, LEX_FUNCTION,     NOT_OLD,        0,      0},
+{"func",       Op_func,        LEX_FUNCTION,   NOT_POSIX|NOT_OLD,      0,      
0},
+{"function",   Op_func,        LEX_FUNCTION,   NOT_OLD,        0,      0},
 {"gensub",     Op_sub_builtin,  LEX_BUILTIN,   GAWKX|A(3)|A(4), 0,     0},
 {"getline",    Op_K_getline_redir,      LEX_GETLINE,   NOT_OLD,        0,      
0},
 {"gsub",       Op_sub_builtin,  LEX_BUILTIN,   NOT_OLD|A(2)|A(3), 0,   0},
@@ -4896,11 +4867,6 @@ mk_program()
                                cp = end_block;
                        else
                                cp = list_merge(begin_block, end_block);
-                       if (program_comment != NULL) {
-                               (void) list_prepend(cp, program_comment);
-                       }
-                       if (comment != NULL)
-                               (void) list_append(cp, comment);
                        (void) list_append(cp, ip_atexit);
                        (void) list_append(cp, instruction(Op_stop));
 
@@ -4933,12 +4899,6 @@ mk_program()
        if (begin_block != NULL)
                cp = list_merge(begin_block, cp);
 
-       if (program_comment != NULL) {
-               (void) list_prepend(cp, program_comment);
-       }
-       if (comment != NULL) {
-               (void) list_append(cp, comment);
-       }
        (void) list_append(cp, ip_atexit);
        (void) list_append(cp, instruction(Op_stop));
 
@@ -4946,10 +4906,6 @@ out:
        /* delete the Op_list, not needed */
        tmp = cp->nexti;
        bcfree(cp);
-       /* these variables are not used again but zap them anyway.  */
-       comment = NULL;
-       function_comment = NULL;
-       program_comment = NULL;
        return tmp;
 
 #undef begin_block
@@ -5612,21 +5568,6 @@ pushback(void)
        (! lexeof && lexptr && lexptr > lexptr_begin ? lexptr-- : lexptr);
 }
 
-/* check_comment --- check for block comment */
-
-void
-check_comment(void)
-{
-       if (comment != NULL) {
-               if (first_rule) {
-                       program_comment = comment;
-               } else
-                       block_comment = comment;
-               comment = NULL;
-       }
-       first_rule = false;
-}
-
 /*
  * get_comment --- collect comment text.
  *     Flag = EOL_COMMENT for end-of-line comments.
@@ -5634,15 +5575,16 @@ check_comment(void)
  */
 
 int
-get_comment(int flag)
+get_comment(int flag, INSTRUCTION **comment_instruction)
 {
        int c;
        int sl;
+       char *p1;
+       char *p2;
+
        tok = tokstart;
        tokadd('#');
        sl = sourceline;
-       char *p1;
-       char *p2;
 
        while (true) {
                while ((c = nextc(false)) != '\n' && c != END_FILE) {
@@ -5678,9 +5620,6 @@ get_comment(int flag)
                        break;
        }
 
-       if (comment != NULL)
-               prior_comment = comment;
-
        /* remove any trailing blank lines (consecutive \n) from comment */
        p1 = tok - 1;
        p2 = tok - 2;
@@ -5690,49 +5629,18 @@ get_comment(int flag)
                tok--;
        }
 
-       comment = bcalloc(Op_comment, 1, sl);
-       comment->source_file = source;
-       comment->memory = make_str_node(tokstart, tok - tokstart, 0);
-       comment->memory->comment_type = flag;
+       (*comment_instruction) = bcalloc(Op_comment, 1, sl);
+       (*comment_instruction)->source_file = source;
+       (*comment_instruction)->memory = make_str_node(tokstart, tok - 
tokstart, 0);
+       (*comment_instruction)->memory->comment_type = flag;
 
        return c;
 }
 
-/* split_comment --- split initial comment text into program and function 
parts */
-
-static void
-split_comment(void)
-{
-       char *p;
-       int l;
-       NODE *n;
-
-       p = comment_to_save->memory->stptr;
-       l = comment_to_save->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') {
-                       function_comment = comment_to_save;
-                       n = function_comment->memory;
-                       function_comment->memory = make_string(p + l + 2, 
n->stlen - l - 2);
-                       /* create program comment  */
-                       program_comment = bcalloc(Op_comment, 1, sourceline);
-                       program_comment->source_file = 
comment_to_save->source_file;
-                       p[l + 2] = 0;
-                       program_comment->memory = make_str_node(p, l + 2, 0);
-                       comment_to_save = NULL;
-                       freenode(n);
-                       break;
-               }
-               else
-                       l--;
-       }
-}
-
 /* allow_newline --- allow newline after &&, ||, ? and : */
 
 static void
-allow_newline(void)
+allow_newline(INSTRUCTION **new_comment)
 {
        int c;
 
@@ -5744,8 +5652,8 @@ allow_newline(void)
                }
                if (c == '#') {
                        if (do_pretty_print && ! do_profile) {
-                       /* collect comment byte code iff doing pretty print but 
not profiling.  */
-                               c = get_comment(EOL_COMMENT);
+                               /* collect comment byte code iff doing pretty 
print but not profiling.  */
+                               c = get_comment(EOL_COMMENT, new_comment);
                        } else {
                                while ((c = nextc(false)) != '\n' && c != 
END_FILE)
                                        continue;
@@ -5976,15 +5884,20 @@ retry:
                return lasttok = NEWLINE;
 
        case '#':               /* it's a comment */
+               yylval = NULL;
                if (do_pretty_print && ! do_profile) {
                        /*
                         * Collect comment byte code iff doing pretty print
                         * but not profiling.
                         */
+                       INSTRUCTION *new_comment;
+
                        if (lasttok == NEWLINE || lasttok == 0)
-                               c = get_comment(FULL_COMMENT);
+                               c = get_comment(FULL_COMMENT, & new_comment);
                        else
-                               c = get_comment(EOL_COMMENT);
+                               c = get_comment(EOL_COMMENT, & new_comment);
+
+                       yylval = new_comment;
 
                        if (c == END_FILE)
                                return lasttok = NEWLINE_EOF;
@@ -6016,7 +5929,10 @@ retry:
                 * Use it at your own risk. We think it's a bad idea, which
                 * is why it's not on by default.
                 */
+               yylval = NULL;
                if (! do_traditional) {
+                       INSTRUCTION *new_comment;
+
                        /* strip trailing white-space and/or comment */
                        while ((c = nextc(true)) == ' ' || c == '\t' || c == 
'\r')
                                continue;
@@ -6028,9 +5944,11 @@ retry:
                                        lintwarn(
                _("use of `\\ #...' line continuation is not portable"));
                                }
-                               if (do_pretty_print && ! do_profile)
-                                       c = get_comment(EOL_COMMENT);
-                               else {
+                               if (do_pretty_print && ! do_profile) {
+                                       c = get_comment(EOL_COMMENT, & 
new_comment);
+                                       yylval = new_comment;
+                                       return lasttok = c;
+                               } else {
                                        while ((c = nextc(false)) != '\n')
                                                if (c == END_FILE)
                                                        break;
@@ -6054,8 +5972,11 @@ retry:
        case ':':
        case '?':
                yylval = GET_INSTRUCTION(Op_cond_exp);
-               if (! do_posix)
-                       allow_newline();
+               if (! do_posix) {
+                       INSTRUCTION *new_comment = NULL;
+                       allow_newline(& new_comment);
+                       yylval->comment = new_comment;
+               }
                return lasttok = c;
 
                /*
@@ -6477,7 +6398,10 @@ retry:
        case '&':
                if ((c = nextc(true)) == '&') {
                        yylval = GET_INSTRUCTION(Op_and);
-                       allow_newline();
+                       INSTRUCTION *new_comment = NULL;
+                       allow_newline(& new_comment);
+                       yylval->comment = new_comment;
+
                        return lasttok = LEX_AND;
                }
                pushback();
@@ -6487,11 +6411,15 @@ retry:
        case '|':
                if ((c = nextc(true)) == '|') {
                        yylval = GET_INSTRUCTION(Op_or);
-                       allow_newline();
+                       INSTRUCTION *new_comment = NULL;
+                       allow_newline(& new_comment);
+                       yylval->comment = new_comment;
+
                        return lasttok = LEX_OR;
                } else if (! do_traditional && c == '&') {
                        yylval = GET_INSTRUCTION(Op_symbol);
                        yylval->redir_type = redirect_twoway;
+
                        return lasttok = (in_print && in_parens == 0 ? IO_OUT : 
IO_IN);
                }
                pushback();
@@ -6681,8 +6609,11 @@ out:
                yylval->lextok = tokkey;
 
 #define SMART_ALECK    1
-               if (SMART_ALECK && do_lint
-                   && ! goto_warned && strcasecmp(tokkey, "goto") == 0) {
+               if (SMART_ALECK
+                   && do_lint
+                   && ! goto_warned
+                   && tolower(tokkey[0]) == 'g'
+                   && strcasecmp(tokkey, "goto") == 0) {
                        goto_warned = true;
                        lintwarn(_("`goto' considered harmful!"));
                }
@@ -7153,15 +7084,8 @@ mk_function(INSTRUCTION *fi, INSTRUCTION *def)
        thisfunc = fi->func_body;
        assert(thisfunc != NULL);
 
-       /* add any pre-function comment to start of action for profile.c  */
-
-       if (function_comment != NULL) {
-               function_comment->source_line = 0;
-               (void) list_prepend(def, function_comment);
-               function_comment = NULL;
-       }
-
-       /* add an implicit return at end;
+       /*
+        * Add an implicit return at end;
         * also used by 'return' command in debugger
         */
 
@@ -7872,12 +7796,7 @@ append_rule(INSTRUCTION *pattern, INSTRUCTION *action)
                (rp + 1)->lasti = action->lasti;
                (rp + 2)->first_line = pattern->source_line;
                (rp + 2)->last_line = lastline;
-               if (block_comment != NULL) {
-                       ip = list_prepend(list_prepend(action, block_comment), 
rp);
-                       block_comment = NULL;
-               } else
-                       ip = list_prepend(action, rp);
-
+               ip = list_prepend(action, rp);
        } else {
                rp = bcalloc(Op_rule, 3, 0);
                rp->in_rule = Rule;
@@ -8497,26 +8416,6 @@ list_merge(INSTRUCTION *l1, INSTRUCTION *l2)
        return l1;
 }
 
-/* add_pending_comment --- add a pending comment to a statement */
-
-static inline INSTRUCTION *
-add_pending_comment(INSTRUCTION *stmt)
-{
-       INSTRUCTION *ret = stmt;
-
-       if (prior_comment != NULL) {
-               if (function_comment != prior_comment)
-                       ret = list_append(stmt, prior_comment);
-               prior_comment = NULL;
-       } else if (comment != NULL && comment->memory->comment_type == 
EOL_COMMENT) {
-               if (function_comment != comment)
-                       ret = list_append(stmt, comment);
-               comment = NULL;
-       }
-
-       return ret;
-}
-
 /* See if name is a special token. */
 
 int
@@ -8756,3 +8655,55 @@ set_profile_text(NODE *n, const char *str, size_t len)
 
        return n;
 }
+
+/* merge_comments --- merge c2 into c1 and free c2 if successful. */
+
+static bool
+merge_comments(INSTRUCTION *c1, INSTRUCTION *c2)
+{
+       assert(c1->opcode == Op_comment && c2->opcode == Op_comment);
+
+       size_t total = c1->memory->stlen + 1 /* \n */ + c2->memory->stlen;
+       if (c1->comment != NULL)
+               total += c1->comment->memory->stlen + 1;
+       if (c2->comment != NULL)
+               total += c2->comment->memory->stlen + 1;
+
+       char *buffer;
+       emalloc(buffer, char *, total + 1, "merge_comments");
+
+       strcpy(buffer, c1->memory->stptr);
+       strcat(buffer, "\n");
+       if (c1->comment != NULL) {
+               strcat(buffer, c1->comment->memory->stptr);
+               strcat(buffer, "\n");
+       }
+
+       strcat(buffer, c2->memory->stptr);
+       if (c2->comment != NULL) {
+               strcat(buffer, "\n");
+               strcat(buffer, c2->comment->memory->stptr);
+       }
+
+       c1->memory->comment_type = FULL_COMMENT;
+       free(c1->memory->stptr);
+       c1->memory->stptr = buffer;
+       c1->memory->stlen = strlen(buffer);
+
+       // now free everything else
+       if (c1->comment != NULL) {
+               unref(c1->comment->memory);
+               bcfree(c1->comment);
+               c1->comment = NULL;
+       }
+
+       unref(c2->memory);
+       if (c2->comment != NULL) {
+               unref(c2->comment->memory);
+               bcfree(c2->comment);
+               c2->comment = NULL;
+       }
+       bcfree(c2);
+
+       return true;
+}
diff --git a/awkgram.y b/awkgram.y
index 1afad27..3ffb585 100644
--- a/awkgram.y
+++ b/awkgram.y
@@ -1,3 +1,10 @@
+/* working on statement_term */
+/*
+-- After ? and :
+-- After && and ||
+-- After , in parameter list
+-- After , in a range expression in a patter
+*/
 /*
  * awkgram.y --- yacc/bison parser
  */
@@ -84,8 +91,7 @@ static void check_funcs(void);
 
 static ssize_t read_one_line(int fd, void *buffer, size_t count);
 static int one_line_close(int fd);
-static void split_comment(void);
-static void check_comment(void);
+static bool merge_comments(INSTRUCTION *c1, INSTRUCTION *c2);
 static void add_sign_to_num(NODE *n, char sign);
 
 static bool at_seen = false;
@@ -152,21 +158,13 @@ static INSTRUCTION *ip_endfile;
 static INSTRUCTION *ip_beginfile;
 INSTRUCTION *main_beginfile;
 
-static INSTRUCTION *comment = NULL;
-static INSTRUCTION *prior_comment = NULL;
-static INSTRUCTION *comment_to_save = NULL;
-static INSTRUCTION *program_comment = NULL;
-static INSTRUCTION *function_comment = NULL;
-static INSTRUCTION *block_comment = NULL;
-
-static bool func_first = true;
+static bool func_first = true; // can nuke
 static bool first_rule = true;
 
 static inline INSTRUCTION *list_create(INSTRUCTION *x);
 static inline INSTRUCTION *list_append(INSTRUCTION *l, INSTRUCTION *x);
 static inline INSTRUCTION *list_prepend(INSTRUCTION *l, INSTRUCTION *x);
 static inline INSTRUCTION *list_merge(INSTRUCTION *l1, INSTRUCTION *l2);
-static inline INSTRUCTION *add_pending_comment(INSTRUCTION *stmt);
 
 extern double fmod(double x, double y);
 
@@ -220,6 +218,12 @@ program
                yyerrok;
          }
        | program nls
+         {
+                 if ($2 != NULL)
+                         $$ = list_append($1, $2);
+                 else
+                         $$ = $1;
+         }
        | program LEX_EOF
          {
                next_sourcefile();
@@ -263,12 +267,20 @@ rule
          {
                want_source = false;
                at_seen = false;
+               if ($4 != NULL) {
+                       warning(_("comments on address@hidden' statements will 
be lost"));
+                       /* FIXME: Free memory, it should be a list */
+               }
                yyerrok;
          }
        | '@' LEX_LOAD library statement_term
          {
                want_source = false;
                at_seen = false;
+               if ($4 != NULL) {
+                       warning(_("comments on address@hidden' statements will 
be lost"));
+                       /* FIXME: Free memory, it should be a list */
+               }
                yyerrok;
          }
        ;
@@ -307,20 +319,10 @@ pattern
        : /* empty */
          {
                rule = Rule;
-               if (comment != NULL) {
-                       $$ = list_create(comment);
-                       comment = NULL;
-               } else
-                       $$ = NULL;
          }
        | exp
          {
                rule = Rule;
-               if (comment != NULL) {
-                       $$ = list_prepend($1, comment);
-                       comment = NULL;
-               } else
-                       $$ = $1;
          }
 
        | exp ',' opt_nls exp
@@ -346,10 +348,12 @@ pattern
                        ($1->nexti + 1)->condpair_left = $1->lasti;
                        ($1->nexti + 1)->condpair_right = $4->lasti;
                }
-               if (comment != NULL) {
-                       $$ = list_append(list_merge(list_prepend($1, comment), 
$4), tp);
-                       comment = NULL;
-               } else
+#if 0
+               /* Put any comments in front of the range expression */
+               if ($3 != NULL)
+                       $$ = list_append(list_merge(list_prepend($1, $3), $4), 
tp);
+               else
+#endif
                        $$ = list_append(list_merge($1, $4), tp);
                rule = Rule;
          }
@@ -364,7 +368,6 @@ pattern
 
                $1->in_rule = rule = BEGIN;
                $1->source_file = source;
-               check_comment();
                $$ = $1;
          }
        | LEX_END
@@ -378,7 +381,6 @@ pattern
 
                $1->in_rule = rule = END;
                $1->source_file = source;
-               check_comment();
                $$ = $1;
          }
        | LEX_BEGINFILE
@@ -386,7 +388,6 @@ pattern
                func_first = false;
                $1->in_rule = rule = BEGINFILE;
                $1->source_file = source;
-               check_comment();
                $$ = $1;
          }
        | LEX_ENDFILE
@@ -394,7 +395,6 @@ pattern
                func_first = false;
                $1->in_rule = rule = ENDFILE;
                $1->source_file = source;
-               check_comment();
                $$ = $1;
          }
        ;
@@ -403,10 +403,15 @@ action
        : l_brace statements r_brace opt_semi opt_nls
          {
                INSTRUCTION *ip;
+
                if ($2 == NULL)
                        ip = list_create(instruction(Op_no_op));
                else
                        ip = $2;
+
+               /* Tack any comment onto the end. */
+               if ($5 != NULL)
+                       ip = list_append(ip, $5);
                $$ = ip;
          }
        ;
@@ -437,32 +442,22 @@ lex_builtin
 function_prologue
        : LEX_FUNCTION func_name '(' { want_param_names = FUNC_HEADER; } 
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 (prior_comment != NULL) {
-                       comment_to_save = prior_comment;
-                       prior_comment = NULL;
-               } else if (comment != NULL) {
-                       comment_to_save = comment;
-                       comment = NULL;
-               } else
-                       comment_to_save = NULL;
-
-               if (comment_to_save != NULL && func_first
-                   && strstr(comment_to_save->memory->stptr, "\n\n") != NULL)
-                       split_comment();
-
-               /* save any other pre-function comment as function comment  */
-               if (comment_to_save != NULL) {
-                       function_comment = comment_to_save;
-                       comment_to_save = NULL;
+               // Merge any comments found in the parameter list with those
+               // following the function header, associate the whole shebang
+               // with the function as one block comment.
+#if 0
+               if ($5->comment != NULL && $7 != NULL) {
+                       INSTRUCTION *ip = list_merge($5->comment, $7);
+                       $1->comment = merge_comment_list(ip);
+                       $5->comment = NULL;
+               } else if ($5->comment != NULL) {
+                       $1->comment = $5->comment;
+                       $5->comment = NULL;
+               } else {
+                       $1->comment = merge_comment_list($7);
                }
-               func_first = false;
+#endif
+
                $1->source_file = source;
                if (install_function($2->lextok, $1, $5) < 0)
                        YYABORT;
@@ -537,57 +532,17 @@ a_slash
 statements
        : /* empty */
          {
-               if (prior_comment != NULL) {
-                       $$ = list_create(prior_comment);
-                       prior_comment = NULL;
-               } else if (comment != NULL) {
-                       $$ = list_create(comment);
-                       comment = NULL;
-               } else
-                       $$ = NULL;
+               $$ = NULL;
          }
        | statements statement
          {
                if ($2 == NULL) {
-                       if (prior_comment != NULL) {
-                               $$ = list_append($1, prior_comment);
-                               prior_comment = NULL;
-                               if (comment != NULL) {
-                                       $$ = list_append($$, comment);
-                                       comment = NULL;
-                               }
-                       } else if (comment != NULL) {
-                               $$ = list_append($1, comment);
-                               comment = NULL;
-                       } else
-                               $$ = $1;
+                       $$ = $1;
                } else {
                        add_lint($2, LINT_no_effect);
                        if ($1 == NULL) {
-                               if (prior_comment != NULL) {
-                                       $$ = list_append($2, prior_comment);
-                                       prior_comment = NULL;
-                                       if (comment != NULL) {
-                                               $$ = list_append($$, comment);
-                                               comment = NULL;
-                                       }
-                               } else if (comment != NULL) {
-                                       $$ = list_append($2, comment);
-                                       comment = NULL;
-                               } else
-                                       $$ = $2;
+                               $$ = $2;
                        } else {
-                               if (prior_comment != NULL) {
-                                       list_append($2, prior_comment);
-                                       prior_comment = NULL;
-                                       if (comment != NULL) {
-                                               list_append($2, comment);
-                                               comment = NULL;
-                                       }
-                               } else if (comment != NULL) {
-                                       list_append($2, comment);
-                                       comment = NULL;
-                               }
                                $$ = list_merge($1, $2);
                        }
                }
@@ -599,7 +554,7 @@ statements
 
 statement_term
        : nls
-       | semi opt_nls
+       | semi opt_nls { $$ = $2; }
        ;
 
 statement
@@ -921,7 +876,6 @@ regular_loop:
                        $$ = list_prepend($1, instruction(Op_exec_count));
                else
                        $$ = $1;
-               $$ = add_pending_comment($$);
          }
        ;
 
@@ -933,8 +887,6 @@ non_compound_stmt
                                _("`break' is not allowed outside a loop or 
switch"));
                $1->target_jmp = NULL;
                $$ = list_create($1);
-               $$ = add_pending_comment($$);
-
          }
        | LEX_CONTINUE statement_term
          {
@@ -943,8 +895,6 @@ non_compound_stmt
                                _("`continue' is not allowed outside a loop"));
                $1->target_jmp = NULL;
                $$ = list_create($1);
-               $$ = add_pending_comment($$);
-
          }
        | LEX_NEXT statement_term
          {
@@ -954,7 +904,6 @@ non_compound_stmt
                                _("`next' used in %s action"), ruletab[rule]);
                $1->target_jmp = ip_rec;
                $$ = list_create($1);
-               $$ = add_pending_comment($$);
          }
        | LEX_NEXTFILE statement_term
          {
@@ -966,7 +915,6 @@ non_compound_stmt
                $1->target_newfile = ip_newfile;
                $1->target_endfile = ip_endfile;
                $$ = list_create($1);
-               $$ = add_pending_comment($$);
          }
        | LEX_EXIT opt_exp statement_term
          {
@@ -982,7 +930,6 @@ non_compound_stmt
                        $$->nexti->memory = dupnode(Nnull_string);
                } else
                        $$ = list_append($2, $1);
-               $$ = add_pending_comment($$);
          }
        | LEX_RETURN
          {
@@ -995,8 +942,6 @@ non_compound_stmt
                        $$->nexti->memory = dupnode(Nnull_string);
                } else
                        $$ = list_append($3, $1);
-
-               $$ = add_pending_comment($$);
          }
        | simple_stmt statement_term
        ;
@@ -1106,7 +1051,6 @@ regular_print:
                                }
                        }
                }
-               $$ = add_pending_comment($$);
          }
 
        | LEX_DELETE NAME { sub_counter = 0; } delete_subscript_list
@@ -1141,7 +1085,6 @@ regular_print:
                        $1->expr_count = sub_counter;
                        $$ = list_append(list_append($4, $2), $1);
                }
-               $$ = add_pending_comment($$);
          }
        | LEX_DELETE '(' NAME ')'
                  /*
@@ -1172,12 +1115,10 @@ regular_print:
                        else if ($3->memory == func_table)
                                fatal(_("`delete' is not allowed with 
FUNCTAB"));
                }
-               $$ = add_pending_comment($$);
          }
        | exp
          {
                $$ = optimize_assignment($1);
-               $$ = add_pending_comment($$);
          }
        ;
 
@@ -1315,8 +1256,23 @@ if_statement
        ;
 
 nls
-       : NEWLINE
+       : NEWLINE { $$ = $1; }
        | nls NEWLINE
+         {
+               if ($1 != NULL && $2 != NULL) {
+                       if ($1->memory->comment_type == EOL_COMMENT) {
+                               assert($2->memory->comment_type == 
FULL_COMMENT);
+                               $1->comment = $2;       // chain them
+                       } else if (merge_comments($1, $2))
+                               $$ = $1;
+                       else
+                               cant_happen();
+               } else if ($1 != NULL) {
+                       $$ = $1;
+               } else {
+                       $$ = $2;
+               }
+         }
        ;
 
 opt_nls
@@ -2115,8 +2071,8 @@ static const struct token tokentab[] = {
 {"exp",                Op_builtin,      LEX_BUILTIN,   A(1),           do_exp, 
MPF(exp)},
 {"fflush",     Op_builtin,      LEX_BUILTIN,   A(0)|A(1), do_fflush,   0},
 {"for",                Op_K_for,        LEX_FOR,       BREAK|CONTINUE, 0,      
0},
-{"func",       Op_func, LEX_FUNCTION,  NOT_POSIX|NOT_OLD,      0,      0},
-{"function",Op_func, LEX_FUNCTION,     NOT_OLD,        0,      0},
+{"func",       Op_func,        LEX_FUNCTION,   NOT_POSIX|NOT_OLD,      0,      
0},
+{"function",   Op_func,        LEX_FUNCTION,   NOT_OLD,        0,      0},
 {"gensub",     Op_sub_builtin,  LEX_BUILTIN,   GAWKX|A(3)|A(4), 0,     0},
 {"getline",    Op_K_getline_redir,      LEX_GETLINE,   NOT_OLD,        0,      
0},
 {"gsub",       Op_sub_builtin,  LEX_BUILTIN,   NOT_OLD|A(2)|A(3), 0,   0},
@@ -2475,11 +2431,6 @@ mk_program()
                                cp = end_block;
                        else
                                cp = list_merge(begin_block, end_block);
-                       if (program_comment != NULL) {
-                               (void) list_prepend(cp, program_comment);
-                       }
-                       if (comment != NULL)
-                               (void) list_append(cp, comment);
                        (void) list_append(cp, ip_atexit);
                        (void) list_append(cp, instruction(Op_stop));
 
@@ -2512,12 +2463,6 @@ mk_program()
        if (begin_block != NULL)
                cp = list_merge(begin_block, cp);
 
-       if (program_comment != NULL) {
-               (void) list_prepend(cp, program_comment);
-       }
-       if (comment != NULL) {
-               (void) list_append(cp, comment);
-       }
        (void) list_append(cp, ip_atexit);
        (void) list_append(cp, instruction(Op_stop));
 
@@ -2525,10 +2470,6 @@ out:
        /* delete the Op_list, not needed */
        tmp = cp->nexti;
        bcfree(cp);
-       /* these variables are not used again but zap them anyway.  */
-       comment = NULL;
-       function_comment = NULL;
-       program_comment = NULL;
        return tmp;
 
 #undef begin_block
@@ -3191,21 +3132,6 @@ pushback(void)
        (! lexeof && lexptr && lexptr > lexptr_begin ? lexptr-- : lexptr);
 }
 
-/* check_comment --- check for block comment */
-
-void
-check_comment(void)
-{
-       if (comment != NULL) {
-               if (first_rule) {
-                       program_comment = comment;
-               } else
-                       block_comment = comment;
-               comment = NULL;
-       }
-       first_rule = false;
-}
-
 /*
  * get_comment --- collect comment text.
  *     Flag = EOL_COMMENT for end-of-line comments.
@@ -3213,15 +3139,16 @@ check_comment(void)
  */
 
 int
-get_comment(int flag)
+get_comment(int flag, INSTRUCTION **comment_instruction)
 {
        int c;
        int sl;
+       char *p1;
+       char *p2;
+
        tok = tokstart;
        tokadd('#');
        sl = sourceline;
-       char *p1;
-       char *p2;
 
        while (true) {
                while ((c = nextc(false)) != '\n' && c != END_FILE) {
@@ -3257,9 +3184,6 @@ get_comment(int flag)
                        break;
        }
 
-       if (comment != NULL)
-               prior_comment = comment;
-
        /* remove any trailing blank lines (consecutive \n) from comment */
        p1 = tok - 1;
        p2 = tok - 2;
@@ -3269,49 +3193,18 @@ get_comment(int flag)
                tok--;
        }
 
-       comment = bcalloc(Op_comment, 1, sl);
-       comment->source_file = source;
-       comment->memory = make_str_node(tokstart, tok - tokstart, 0);
-       comment->memory->comment_type = flag;
+       (*comment_instruction) = bcalloc(Op_comment, 1, sl);
+       (*comment_instruction)->source_file = source;
+       (*comment_instruction)->memory = make_str_node(tokstart, tok - 
tokstart, 0);
+       (*comment_instruction)->memory->comment_type = flag;
 
        return c;
 }
 
-/* split_comment --- split initial comment text into program and function 
parts */
-
-static void
-split_comment(void)
-{
-       char *p;
-       int l;
-       NODE *n;
-
-       p = comment_to_save->memory->stptr;
-       l = comment_to_save->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') {
-                       function_comment = comment_to_save;
-                       n = function_comment->memory;
-                       function_comment->memory = make_string(p + l + 2, 
n->stlen - l - 2);
-                       /* create program comment  */
-                       program_comment = bcalloc(Op_comment, 1, sourceline);
-                       program_comment->source_file = 
comment_to_save->source_file;
-                       p[l + 2] = 0;
-                       program_comment->memory = make_str_node(p, l + 2, 0);
-                       comment_to_save = NULL;
-                       freenode(n);
-                       break;
-               }
-               else
-                       l--;
-       }
-}
-
 /* allow_newline --- allow newline after &&, ||, ? and : */
 
 static void
-allow_newline(void)
+allow_newline(INSTRUCTION **new_comment)
 {
        int c;
 
@@ -3323,8 +3216,8 @@ allow_newline(void)
                }
                if (c == '#') {
                        if (do_pretty_print && ! do_profile) {
-                       /* collect comment byte code iff doing pretty print but 
not profiling.  */
-                               c = get_comment(EOL_COMMENT);
+                               /* collect comment byte code iff doing pretty 
print but not profiling.  */
+                               c = get_comment(EOL_COMMENT, new_comment);
                        } else {
                                while ((c = nextc(false)) != '\n' && c != 
END_FILE)
                                        continue;
@@ -3555,15 +3448,20 @@ retry:
                return lasttok = NEWLINE;
 
        case '#':               /* it's a comment */
+               yylval = NULL;
                if (do_pretty_print && ! do_profile) {
                        /*
                         * Collect comment byte code iff doing pretty print
                         * but not profiling.
                         */
+                       INSTRUCTION *new_comment;
+
                        if (lasttok == NEWLINE || lasttok == 0)
-                               c = get_comment(FULL_COMMENT);
+                               c = get_comment(FULL_COMMENT, & new_comment);
                        else
-                               c = get_comment(EOL_COMMENT);
+                               c = get_comment(EOL_COMMENT, & new_comment);
+
+                       yylval = new_comment;
 
                        if (c == END_FILE)
                                return lasttok = NEWLINE_EOF;
@@ -3595,7 +3493,10 @@ retry:
                 * Use it at your own risk. We think it's a bad idea, which
                 * is why it's not on by default.
                 */
+               yylval = NULL;
                if (! do_traditional) {
+                       INSTRUCTION *new_comment;
+
                        /* strip trailing white-space and/or comment */
                        while ((c = nextc(true)) == ' ' || c == '\t' || c == 
'\r')
                                continue;
@@ -3607,9 +3508,11 @@ retry:
                                        lintwarn(
                _("use of `\\ #...' line continuation is not portable"));
                                }
-                               if (do_pretty_print && ! do_profile)
-                                       c = get_comment(EOL_COMMENT);
-                               else {
+                               if (do_pretty_print && ! do_profile) {
+                                       c = get_comment(EOL_COMMENT, & 
new_comment);
+                                       yylval = new_comment;
+                                       return lasttok = c;
+                               } else {
                                        while ((c = nextc(false)) != '\n')
                                                if (c == END_FILE)
                                                        break;
@@ -3633,8 +3536,11 @@ retry:
        case ':':
        case '?':
                yylval = GET_INSTRUCTION(Op_cond_exp);
-               if (! do_posix)
-                       allow_newline();
+               if (! do_posix) {
+                       INSTRUCTION *new_comment = NULL;
+                       allow_newline(& new_comment);
+                       yylval->comment = new_comment;
+               }
                return lasttok = c;
 
                /*
@@ -4056,7 +3962,10 @@ retry:
        case '&':
                if ((c = nextc(true)) == '&') {
                        yylval = GET_INSTRUCTION(Op_and);
-                       allow_newline();
+                       INSTRUCTION *new_comment = NULL;
+                       allow_newline(& new_comment);
+                       yylval->comment = new_comment;
+
                        return lasttok = LEX_AND;
                }
                pushback();
@@ -4066,11 +3975,15 @@ retry:
        case '|':
                if ((c = nextc(true)) == '|') {
                        yylval = GET_INSTRUCTION(Op_or);
-                       allow_newline();
+                       INSTRUCTION *new_comment = NULL;
+                       allow_newline(& new_comment);
+                       yylval->comment = new_comment;
+
                        return lasttok = LEX_OR;
                } else if (! do_traditional && c == '&') {
                        yylval = GET_INSTRUCTION(Op_symbol);
                        yylval->redir_type = redirect_twoway;
+
                        return lasttok = (in_print && in_parens == 0 ? IO_OUT : 
IO_IN);
                }
                pushback();
@@ -4260,8 +4173,11 @@ out:
                yylval->lextok = tokkey;
 
 #define SMART_ALECK    1
-               if (SMART_ALECK && do_lint
-                   && ! goto_warned && strcasecmp(tokkey, "goto") == 0) {
+               if (SMART_ALECK
+                   && do_lint
+                   && ! goto_warned
+                   && tolower(tokkey[0]) == 'g'
+                   && strcasecmp(tokkey, "goto") == 0) {
                        goto_warned = true;
                        lintwarn(_("`goto' considered harmful!"));
                }
@@ -4732,15 +4648,8 @@ mk_function(INSTRUCTION *fi, INSTRUCTION *def)
        thisfunc = fi->func_body;
        assert(thisfunc != NULL);
 
-       /* add any pre-function comment to start of action for profile.c  */
-
-       if (function_comment != NULL) {
-               function_comment->source_line = 0;
-               (void) list_prepend(def, function_comment);
-               function_comment = NULL;
-       }
-
-       /* add an implicit return at end;
+       /*
+        * Add an implicit return at end;
         * also used by 'return' command in debugger
         */
 
@@ -5451,12 +5360,7 @@ append_rule(INSTRUCTION *pattern, INSTRUCTION *action)
                (rp + 1)->lasti = action->lasti;
                (rp + 2)->first_line = pattern->source_line;
                (rp + 2)->last_line = lastline;
-               if (block_comment != NULL) {
-                       ip = list_prepend(list_prepend(action, block_comment), 
rp);
-                       block_comment = NULL;
-               } else
-                       ip = list_prepend(action, rp);
-
+               ip = list_prepend(action, rp);
        } else {
                rp = bcalloc(Op_rule, 3, 0);
                rp->in_rule = Rule;
@@ -6076,26 +5980,6 @@ list_merge(INSTRUCTION *l1, INSTRUCTION *l2)
        return l1;
 }
 
-/* add_pending_comment --- add a pending comment to a statement */
-
-static inline INSTRUCTION *
-add_pending_comment(INSTRUCTION *stmt)
-{
-       INSTRUCTION *ret = stmt;
-
-       if (prior_comment != NULL) {
-               if (function_comment != prior_comment)
-                       ret = list_append(stmt, prior_comment);
-               prior_comment = NULL;
-       } else if (comment != NULL && comment->memory->comment_type == 
EOL_COMMENT) {
-               if (function_comment != comment)
-                       ret = list_append(stmt, comment);
-               comment = NULL;
-       }
-
-       return ret;
-}
-
 /* See if name is a special token. */
 
 int
@@ -6335,3 +6219,55 @@ set_profile_text(NODE *n, const char *str, size_t len)
 
        return n;
 }
+
+/* merge_comments --- merge c2 into c1 and free c2 if successful. */
+
+static bool
+merge_comments(INSTRUCTION *c1, INSTRUCTION *c2)
+{
+       assert(c1->opcode == Op_comment && c2->opcode == Op_comment);
+
+       size_t total = c1->memory->stlen + 1 /* \n */ + c2->memory->stlen;
+       if (c1->comment != NULL)
+               total += c1->comment->memory->stlen + 1;
+       if (c2->comment != NULL)
+               total += c2->comment->memory->stlen + 1;
+
+       char *buffer;
+       emalloc(buffer, char *, total + 1, "merge_comments");
+
+       strcpy(buffer, c1->memory->stptr);
+       strcat(buffer, "\n");
+       if (c1->comment != NULL) {
+               strcat(buffer, c1->comment->memory->stptr);
+               strcat(buffer, "\n");
+       }
+
+       strcat(buffer, c2->memory->stptr);
+       if (c2->comment != NULL) {
+               strcat(buffer, "\n");
+               strcat(buffer, c2->comment->memory->stptr);
+       }
+
+       c1->memory->comment_type = FULL_COMMENT;
+       free(c1->memory->stptr);
+       c1->memory->stptr = buffer;
+       c1->memory->stlen = strlen(buffer);
+
+       // now free everything else
+       if (c1->comment != NULL) {
+               unref(c1->comment->memory);
+               bcfree(c1->comment);
+               c1->comment = NULL;
+       }
+
+       unref(c2->memory);
+       if (c2->comment != NULL) {
+               unref(c2->comment->memory);
+               bcfree(c2->comment);
+               c2->comment = NULL;
+       }
+       bcfree(c2);
+
+       return true;
+}

http://git.sv.gnu.org/cgit/gawk.git/commit/?id=9bd846b32089bf025d0dc82b61a59e503ee1767c

commit 9bd846b32089bf025d0dc82b61a59e503ee1767c
Author: Arnold D. Robbins <address@hidden>
Date:   Fri Sep 21 13:22:53 2018 +0300

    Reset comment changes to be equal to master.

diff --git a/ChangeLog b/ChangeLog
index ebdb167..8492e3f 100755
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2018-09-21         Arnold D. Robbins     <address@hidden>
 
+       * awkgram.y: Undo change of 2016-11-28 to make switch
+       head a separate production, in preparation for revamping
+       comment handling.
+
+2018-09-21         Arnold D. Robbins     <address@hidden>
+
        * re.c (make_regexp): Handle backslash at end of
        input string. Thanks to Anatoly Trosinenko
        <address@hidden> for the report.
diff --git a/awkgram.c b/awkgram.c
index 81cab67..c09e04a 100644
--- a/awkgram.c
+++ b/awkgram.c
@@ -610,16 +610,16 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  2
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1247
+#define YYLAST   1236
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  76
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  71
+#define YYNNTS  70
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  204
+#define YYNRULES  203
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  351
+#define YYNSTATES  350
 
 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
    by yylex, with out-of-bounds checking.  */
@@ -674,23 +674,23 @@ static const yytype_uint16 yyrline[] =
      262,   268,   277,   285,   287,   292,   300,   302,   308,   316,
      326,   356,   370,   384,   392,   403,   415,   417,   419,   425,
      433,   434,   438,   438,   484,   483,   517,   532,   534,   539,
-     549,   596,   601,   602,   606,   622,   624,   626,   633,   724,
-     766,   808,   921,   928,   935,   946,   956,   966,   976,   988,
-    1005,  1004,  1018,  1030,  1030,  1129,  1129,  1163,  1194,  1203,
-    1204,  1210,  1211,  1218,  1223,  1235,  1249,  1251,  1259,  1266,
-    1268,  1276,  1285,  1287,  1296,  1297,  1305,  1310,  1310,  1323,
-    1327,  1335,  1336,  1339,  1341,  1346,  1347,  1356,  1357,  1362,
-    1367,  1376,  1378,  1380,  1387,  1388,  1394,  1395,  1400,  1402,
-    1407,  1409,  1417,  1422,  1431,  1432,  1437,  1439,  1444,  1446,
-    1454,  1459,  1467,  1468,  1473,  1480,  1484,  1486,  1488,  1501,
-    1518,  1528,  1535,  1537,  1542,  1544,  1546,  1554,  1556,  1561,
-    1563,  1568,  1570,  1572,  1629,  1631,  1633,  1635,  1637,  1639,
-    1641,  1643,  1657,  1662,  1667,  1692,  1698,  1700,  1702,  1704,
-    1706,  1708,  1713,  1717,  1749,  1757,  1763,  1769,  1782,  1783,
-    1784,  1789,  1794,  1798,  1802,  1817,  1838,  1843,  1880,  1909,
-    1910,  1916,  1917,  1922,  1924,  1931,  1948,  1965,  1967,  1974,
-    1979,  1987,  1997,  2009,  2018,  2022,  2026,  2030,  2034,  2038,
-    2041,  2043,  2047,  2051,  2055
+     549,   596,   601,   602,   606,   608,   610,   617,   707,   749,
+     791,   904,   911,   918,   929,   939,   949,   959,   971,   988,
+     987,  1001,  1013,  1013,  1112,  1112,  1146,  1177,  1186,  1187,
+    1193,  1194,  1201,  1206,  1218,  1232,  1234,  1242,  1249,  1251,
+    1259,  1268,  1270,  1279,  1280,  1288,  1293,  1293,  1306,  1310,
+    1318,  1319,  1322,  1324,  1329,  1330,  1339,  1340,  1345,  1350,
+    1359,  1361,  1363,  1370,  1371,  1377,  1378,  1383,  1385,  1390,
+    1392,  1400,  1405,  1414,  1415,  1420,  1422,  1427,  1429,  1437,
+    1442,  1450,  1451,  1456,  1463,  1467,  1469,  1471,  1484,  1501,
+    1511,  1518,  1520,  1525,  1527,  1529,  1537,  1539,  1544,  1546,
+    1551,  1553,  1555,  1612,  1614,  1616,  1618,  1620,  1622,  1624,
+    1626,  1640,  1645,  1650,  1675,  1681,  1683,  1685,  1687,  1689,
+    1691,  1696,  1700,  1732,  1740,  1746,  1752,  1765,  1766,  1767,
+    1772,  1777,  1781,  1785,  1800,  1821,  1826,  1863,  1892,  1893,
+    1899,  1900,  1905,  1907,  1914,  1931,  1948,  1950,  1957,  1962,
+    1970,  1980,  1992,  2001,  2005,  2009,  2013,  2017,  2021,  2024,
+    2026,  2030,  2034,  2038
 };
 #endif
 
@@ -714,18 +714,18 @@ static const char *const yytname[] =
   "'}'", "';'", "$accept", "program", "rule", "source", "library",
   "pattern", "action", "func_name", "lex_builtin", "function_prologue",
   "address@hidden", "regexp", "address@hidden", "typed_regexp", "a_slash", 
"statements",
-  "statement_term", "switch_head", "statement", "non_compound_stmt", 
"address@hidden",
-  "simple_stmt", "address@hidden", "address@hidden", "opt_simple_stmt", 
"case_statements",
-  "case_statement", "case_value", "print", "print_expression_list",
-  "output_redir", "address@hidden", "if_statement", "nls", "opt_nls", 
"input_redir",
-  "opt_param_list", "param_list", "opt_exp", "opt_expression_list",
-  "expression_list", "opt_fcall_expression_list", "fcall_expression_list",
-  "fcall_exp", "exp", "assign_operator", "relop_or_less", "a_relop",
-  "common_exp", "simp_exp", "simp_exp_nc", "non_post_simp_exp",
-  "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_NULLPTR
+  "statement_term", "statement", "non_compound_stmt", "address@hidden", 
"simple_stmt",
+  "address@hidden", "address@hidden", "opt_simple_stmt", "case_statements", 
"case_statement",
+  "case_value", "print", "print_expression_list", "output_redir", 
"address@hidden",
+  "if_statement", "nls", "opt_nls", "input_redir", "opt_param_list",
+  "param_list", "opt_exp", "opt_expression_list", "expression_list",
+  "opt_fcall_expression_list", "fcall_expression_list", "fcall_exp", "exp",
+  "assign_operator", "relop_or_less", "a_relop", "common_exp", "simp_exp",
+  "simp_exp_nc", "non_post_simp_exp", "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_NULLPTR
 };
 #endif
 
@@ -745,56 +745,55 @@ static const yytype_uint16 yytoknum[] =
 };
 # endif
 
-#define YYPACT_NINF -305
+#define YYPACT_NINF -275
 
 #define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-305)))
+  (!!((Yystate) == (-275)))
 
-#define YYTABLE_NINF -116
+#define YYTABLE_NINF -115
 
 #define yytable_value_is_error(Yytable_value) \
-  (!!((Yytable_value) == (-116)))
+  (!!((Yytable_value) == (-115)))
 
   /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    -305,   387,  -305,  -305,   -35,   -18,  -305,  -305,  -305,  -305,
-     182,  -305,  -305,    78,    78,    78,   -23,   -21,  -305,  -305,
-    -305,  1150,  1150,  -305,  1150,   303,   880,   187,  -305,   -25,
-     -16,  -305,  -305,     3,  1165,  1076,    97,   341,  -305,  -305,
-    -305,  -305,   280,   806,   880,  -305,     8,  -305,  -305,  -305,
-    -305,  -305,    10,     5,  -305,    76,  -305,  -305,  -305,   806,
-     806,   145,    75,    22,    75,    75,  1150,   117,  -305,  -305,
-      15,  1059,    31,    38,  -305,   112,  -305,  -305,  -305,     3,
-    -305,   112,  -305,   162,  -305,  -305,  1103,   175,  1150,  1150,
-    1150,   112,  -305,  -305,  -305,  1150,   141,    97,  1150,  1150,
-    1150,  1150,  1150,  1150,  1150,  1150,  1150,  1150,  1150,  1150,
-    -305,   173,  -305,  -305,   170,  1150,  -305,  -305,  -305,   118,
-      69,  -305,  1189,    58,  1189,  -305,  -305,  -305,  -305,  1150,
-    -305,   118,   118,  1059,  -305,  -305,  -305,  1150,   112,  -305,
-     148,   927,  -305,  -305,    68,   -24,  -305,    71,   -24,     3,
-    -305,   610,  -305,  -305,  -305,    19,  -305,   241,   220,  1183,
-    1150,   186,    78,   -20,   -20,    75,    75,    75,    75,   -20,
-     -20,    75,    75,    75,    75,  -305,  -305,  1189,  -305,  1103,
-     853,  -305,    60,    97,  -305,  -305,  1189,  -305,   175,  -305,
-    1189,  -305,  -305,  -305,  -305,  -305,   135,  -305,    59,   140,
-     146,   112,   151,   -24,   -24,  -305,  -305,   -24,  1150,   -24,
-     112,   -16,  -305,  -305,   -24,  -305,  -305,  1189,  -305,   147,
-     112,  1150,  1189,  -305,  -305,  -305,  -305,  -305,  -305,   118,
-     138,  -305,  1150,  1150,  -305,   212,  1150,  1150,   726,   960,
-    -305,  -305,  -305,   -24,  1189,  -305,  -305,  -305,  -305,   657,
-     610,   112,  -305,  -305,  1189,   112,  -305,    48,  1059,   -24,
-     -18,   154,  1059,  1059,   198,   -17,  -305,   147,  -305,   201,
-     880,   223,  -305,    57,  -305,  -305,  -305,  -305,  -305,   112,
-    -305,  -305,     9,  -305,  -305,  -305,   112,   112,   163,   175,
-     112,  -305,   259,   190,  -305,   168,    15,  -305,  -305,   726,
-    -305,  -305,  -305,   726,  1150,   118,   773,  -305,  -305,   230,
-     240,  -305,  -305,   190,  -305,   112,  -305,   148,  1150,   234,
-    -305,  1059,   112,   895,   112,  -305,  -305,   112,  -305,  1076,
-     112,   112,   726,   112,  1008,  -305,   460,   726,  -305,  -305,
-    1008,   118,   535,  -305,   118,   112,   112,   726,   726,  -305,
-    -305
+    -275,   376,  -275,  -275,   -12,    -9,  -275,  -275,  -275,  -275,
+     171,  -275,  -275,    44,    44,    44,     5,    40,  -275,  -275,
+    -275,  1139,  1139,  -275,  1139,  1166,   869,    27,  -275,   -18,
+       2,  -275,  -275,    89,   884,  1065,   192,   214,  -275,  -275,
+    -275,  -275,   248,   795,   869,  -275,    10,  -275,  -275,  -275,
+    -275,  -275,   116,    82,  -275,   115,  -275,  -275,  -275,   795,
+     795,   166,   107,   104,   107,   107,  1139,   117,  -275,  -275,
+      15,   349,    23,    45,  -275,   125,  -275,  -275,  -275,    89,
+    -275,   125,  -275,   178,  -275,  -275,  1092,   172,  1139,  1139,
+    1139,   125,  -275,  -275,  -275,  1139,   146,   192,  1139,  1139,
+    1139,  1139,  1139,  1139,  1139,  1139,  1139,  1139,  1139,  1139,
+    -275,   181,  -275,  -275,   173,  1139,  -275,  -275,  -275,   128,
+      73,  -275,  1107,    14,  1107,  -275,  -275,  -275,  -275,  1139,
+    -275,   128,   128,   349,  -275,  -275,  -275,  1139,   125,  -275,
+     152,   916,  -275,  -275,    16,    92,  -275,    20,    92,    89,
+    -275,   599,  -275,  -275,  -275,   148,  -275,   124,    22,  1048,
+    1139,   199,    44,   265,   265,   107,   107,   107,   107,   265,
+     265,   107,   107,   107,   107,  -275,  -275,  1107,  -275,  1092,
+     842,  -275,    43,   192,  -275,  -275,  1107,  -275,   172,  -275,
+    1107,  -275,  -275,  -275,  -275,  -275,   133,  -275,    41,   144,
+     145,   125,   147,    92,    92,  -275,  -275,    92,  1139,    92,
+     125,  -275,  -275,    92,  -275,  -275,  1107,  -275,   151,   125,
+    1139,  1107,  -275,  -275,  -275,  -275,  -275,  -275,   128,    76,
+    -275,  1139,  1139,  -275,   224,  1139,  1139,   715,   949,  -275,
+    -275,  -275,    92,  1107,  -275,  -275,  -275,   646,   599,   125,
+    -275,  -275,  1107,   125,  -275,    49,   349,    92,    -9,   160,
+     349,   349,   206,   113,  -275,   151,  -275,   869,   225,  -275,
+     169,  -275,  -275,  -275,  -275,  -275,   125,  -275,  -275,    11,
+    -275,  -275,  -275,   125,   125,   179,   172,   125,    15,  -275,
+    -275,   715,  -275,  -275,     2,   715,  1139,   128,   762,   152,
+    1139,   219,  -275,  -275,   349,   125,   275,   125,  1065,   125,
+     112,   125,   715,   125,   997,   715,  -275,   261,   205,  -275,
+     191,  -275,  -275,   997,   128,  -275,  -275,  -275,   271,   272,
+    -275,  -275,   205,  -275,   125,  -275,   128,   125,  -275,  -275,
+     125,  -275,   125,   715,  -275,   449,   715,  -275,   524,  -275
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -802,68 +801,65 @@ static const yytype_int16 yypact[] =
      means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       2,     0,     1,     6,     0,   190,   172,   173,    21,    22,
-       0,    23,    24,   179,     0,     0,     0,   167,     5,    91,
+       2,     0,     1,     6,     0,   189,   171,   172,    21,    22,
+       0,    23,    24,   178,     0,     0,     0,   166,     5,    90,
       38,     0,     0,    37,     0,     0,     0,     0,     3,     0,
-       0,   162,    34,     4,    19,   133,   141,   142,   144,   168,
-     176,   192,   169,     0,     0,   187,     0,   191,    27,    26,
-      30,    31,     0,     0,    28,    95,   180,   170,   171,     0,
-       0,     0,   175,   169,   174,   163,     0,   196,   169,   110,
-       0,   108,     0,     0,   177,    93,   202,     7,     8,    42,
-      39,    93,     9,     0,    92,   137,     0,     0,     0,     0,
-       0,    93,   138,   140,   139,     0,     0,   143,     0,     0,
+       0,   161,    34,     4,    19,   132,   140,   141,   143,   167,
+     175,   191,   168,     0,     0,   186,     0,   190,    27,    26,
+      30,    31,     0,     0,    28,    94,   179,   169,   170,     0,
+       0,     0,   174,   168,   173,   162,     0,   195,   168,   109,
+       0,   107,     0,     0,   176,    92,   201,     7,     8,    42,
+      39,    92,     9,     0,    91,   136,     0,     0,     0,     0,
+       0,    92,   137,   139,   138,     0,     0,   142,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     135,   134,   152,   153,     0,     0,   118,    36,   123,     0,
-       0,   116,   122,     0,   108,   189,   188,    29,    32,     0,
-     151,     0,     0,     0,   194,   195,   193,   111,    93,   199,
-       0,     0,   164,    14,     0,     0,    17,     0,     0,    94,
-     197,     0,    43,    35,   128,   129,   130,   126,   127,     0,
-       0,   131,   179,   149,   150,   146,   147,   148,   145,   160,
-     161,   157,   158,   159,   156,   125,   136,   124,   178,   119,
-       0,   186,     0,    96,   165,   166,   112,   204,     0,   113,
-     109,    13,    10,    16,    11,    41,     0,    60,     0,     0,
-       0,    93,     0,     0,     0,    82,    83,     0,   104,     0,
-      93,     0,    40,    54,     0,    63,    47,    68,    39,   200,
-      93,     0,    20,   155,   120,   121,   117,   101,    99,     0,
-       0,   154,     0,   104,    65,     0,     0,     0,     0,    69,
-      55,    56,    57,     0,   105,    58,   198,    71,    62,     0,
-       0,    93,   201,    45,   132,    93,   102,     0,     0,     0,
-     181,     0,     0,     0,     0,   190,    70,     0,    59,     0,
-       0,    86,    84,     0,    46,    25,    33,   103,   100,    93,
-      61,    66,     0,   183,   185,    67,    93,    93,     0,     0,
-      93,    73,     0,     0,    72,     0,     0,    87,    64,     0,
-     182,   184,    44,     0,     0,     0,     0,    76,    79,     0,
-       0,    80,    81,     0,   203,    93,    48,    85,     0,    89,
-      49,     0,    93,     0,    93,    78,    77,    93,    39,    88,
-      93,    93,     0,    93,    69,    39,     0,     0,    50,    51,
-      69,     0,     0,    90,     0,    93,    93,     0,     0,    53,
-      52
+     134,   133,   151,   152,     0,     0,   117,    36,   122,     0,
+       0,   115,   121,     0,   107,   188,   187,    29,    32,     0,
+     150,     0,     0,     0,   193,   194,   192,   110,    92,   198,
+       0,     0,   163,    14,     0,     0,    17,     0,     0,    93,
+     196,     0,    43,    35,   127,   128,   129,   125,   126,     0,
+       0,   130,   178,   148,   149,   145,   146,   147,   144,   159,
+     160,   156,   157,   158,   155,   124,   135,   123,   177,   118,
+       0,   185,     0,    95,   164,   165,   111,   203,     0,   112,
+     108,    13,    10,    16,    11,    41,     0,    59,     0,     0,
+       0,    92,     0,     0,     0,    81,    82,     0,   103,     0,
+      92,    40,    53,     0,    62,    46,    67,    39,   199,    92,
+       0,    20,   154,   119,   120,   116,   100,    98,     0,     0,
+     153,     0,   103,    64,     0,     0,     0,     0,    68,    54,
+      55,    56,     0,   104,    57,   197,    61,     0,     0,    92,
+     200,    44,   131,    92,   101,     0,     0,     0,   180,     0,
+       0,     0,     0,   189,    69,     0,    58,     0,    85,    83,
+       0,    45,    25,    33,   102,    99,    92,    60,    65,     0,
+     182,   184,    66,    92,    92,     0,     0,    92,     0,    86,
+      63,     0,   181,   183,     0,     0,     0,     0,     0,    84,
+       0,    88,    70,    48,     0,    92,     0,    92,    87,    92,
+       0,    92,     0,    92,    68,     0,    72,     0,     0,    71,
+       0,    49,    50,    68,     0,    89,    75,    78,     0,     0,
+      79,    80,     0,   202,    92,    47,     0,    92,    77,    76,
+      92,    39,    92,     0,    39,     0,     0,    52,     0,    51
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -305,  -305,  -305,  -305,  -305,  -305,   227,  -305,  -305,  -305,
-    -305,   -34,  -305,   -71,  -305,  -204,   -67,  -305,  -182,  -305,
-    -305,  -222,  -305,  -305,  -304,  -305,  -305,  -305,  -305,  -305,
-    -305,  -305,  -305,     6,    53,  -305,  -305,  -305,    26,  -305,
-     -38,   111,  -305,    -6,   109,  -305,  -305,  -305,   -58,    -1,
-    -305,   245,  -305,     4,   110,  -305,  -305,    -8,   -42,  -305,
-    -305,   -77,   -13,  -305,   -11,  -212,   -57,  -305,   -26,   -37,
-    -115
+    -275,  -275,  -275,  -275,  -275,  -275,   252,  -275,  -275,  -275,
+    -275,   -33,  -275,   -80,  -275,  -213,   100,  -144,  -275,  -275,
+    -231,  -275,  -275,  -274,  -275,  -275,  -275,  -275,  -275,  -275,
+    -275,  -275,     7,    62,  -275,  -275,  -275,    54,  -275,   -43,
+       1,  -275,   -23,    -1,  -275,  -275,  -275,   -13,    17,  -275,
+     263,  -275,     8,   127,  -275,  -275,    21,   -36,  -275,  -275,
+     -78,    -2,  -275,   -27,  -230,   -65,  -275,   -15,   -38,   -94
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
       -1,     1,    28,   145,   148,    29,    77,    53,    54,    30,
-     182,    31,    83,   118,    32,   151,    78,   211,   212,   213,
-     233,   214,   249,   260,   267,   269,   294,   313,   215,   271,
-     298,   318,   216,   149,   150,   130,   229,   230,   243,   272,
-      70,   119,   120,   121,   217,   115,    94,    95,    35,    36,
-      37,    38,    39,    40,    55,   281,   282,   283,    45,    46,
-      47,    41,    42,   136,   218,   219,   142,   251,   220,   315,
-     141
+     182,    31,    83,   118,    32,   151,    78,   211,   212,   232,
+     213,   247,   258,   265,   310,   319,   332,   214,   268,   290,
+     300,   215,   149,   150,   130,   228,   229,   242,   269,    70,
+     119,   120,   121,   216,   115,    94,    95,    35,    36,    37,
+      38,    39,    40,    55,   278,   279,   280,    45,    46,    47,
+      41,    42,   136,   217,   218,   142,   249,   219,   334,   141
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -871,260 +867,258 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      56,    57,    58,    81,   126,   180,   123,    33,    63,    63,
-     156,    63,    68,   140,   250,   154,   137,   266,    80,    80,
-      62,    64,    63,    65,   289,   125,   300,    19,    19,    85,
-     341,    74,   143,    43,    97,    79,   344,   144,   274,   146,
-     175,   100,   101,   102,   147,    59,   103,    60,    75,   277,
-      76,    76,   278,    44,    44,    84,   264,    75,   137,   137,
-     127,   227,   178,   234,   228,    74,   112,   113,  -107,   191,
-     179,   138,   193,   128,   184,   185,    92,    93,   192,    44,
-      44,   194,     5,   316,   139,    63,    63,    63,    63,    63,
-      63,    63,    63,    63,    63,    63,    63,   163,   164,   165,
-     166,   167,   168,   169,   170,   171,   172,   173,   174,  -107,
-      34,   231,   266,   138,   138,   257,    63,   319,   266,    81,
-     -12,   320,    81,   -15,   336,   138,  -107,   235,   183,   -97,
-     181,   342,  -107,   129,   152,    71,   240,   241,  -115,   256,
-     242,   103,   245,   -12,   160,    25,   -15,   248,     4,    56,
-     339,    79,   122,   124,    79,   343,    98,    99,   100,   101,
-     102,   134,   135,   103,    19,   349,   350,   153,   122,   122,
-     131,   132,   255,   224,   226,   133,   268,    81,    81,     5,
-     162,    81,   117,    81,   176,    48,    49,   139,    81,   188,
-       4,   187,   280,   252,   138,   155,  -116,   157,   158,   159,
-     247,   279,   291,   232,   161,   286,   287,   -98,   236,    79,
-      79,   273,   305,    79,   237,    79,   261,    81,   284,   239,
-      79,   312,    76,   285,   177,   288,   292,   293,    50,    51,
-      85,   304,   296,    81,   297,    86,    72,   325,    73,   317,
-     284,   290,   210,  -116,  -116,   314,   186,   326,   322,    79,
-     190,    85,    52,    19,   238,   330,    86,    82,   311,   259,
-     329,    87,    88,   246,   331,    79,   307,   308,   117,   222,
-      67,     0,   223,   253,   301,   -93,   327,    92,    93,     0,
-     324,     0,    87,     0,   345,     0,     0,   346,   122,   122,
-       0,     0,     0,   110,   111,     0,     0,   333,    92,    93,
-       0,     0,     0,     0,   275,    63,     4,     5,   276,     0,
-       6,     7,    20,     0,     0,     0,    63,   244,   309,   310,
-       0,    23,   295,     0,   112,   113,     0,     0,    97,     0,
-     254,     0,   299,   114,     0,     0,     0,     0,     0,   302,
-     303,   258,   244,   306,     0,   262,   263,    14,    15,    16,
-      17,     0,     0,     0,     0,     0,    20,     0,   124,     0,
-       0,     0,    21,    22,     0,    23,     0,    24,   328,     0,
-      25,    66,     0,    61,     0,   332,     0,   334,     0,    71,
-     335,     0,     0,   337,   338,     0,   340,     2,     3,     0,
-       4,     5,     0,     0,     6,     7,     0,     0,   347,   348,
-     104,   105,   106,   107,   108,     8,     9,   109,     0,     0,
-       0,     0,     0,   321,     0,   323,     0,     0,     0,     0,
-       0,     0,     0,    10,    11,    12,    13,     0,     0,     0,
-       0,    14,    15,    16,    17,    18,     0,     0,     0,    19,
-      20,     0,     0,     0,     0,     0,    21,    22,     0,    23,
-       0,    24,     0,     0,    25,    26,     0,    27,     0,     0,
-     -18,   195,   -18,     4,     5,     0,     0,     6,     7,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     196,     0,   197,   198,   199,   -75,   -75,   200,   201,   202,
-     203,   204,   205,   206,   207,   208,     0,     0,     0,    13,
-     209,     0,     0,     0,    14,    15,    16,    17,     0,     0,
-       0,     0,   -75,    20,     0,     0,     0,     0,     0,    21,
-      22,     0,    23,     0,    24,     0,     0,    25,    26,     0,
-      61,     0,     0,    75,   -75,    76,   195,     0,     4,     5,
-       0,     0,     6,     7,     0,     0,     0,     0,     0,     0,
+      34,   123,    80,    80,   248,   140,   154,   264,    33,   156,
+     126,    56,    57,    58,    81,   137,   137,   191,   271,    63,
+      63,   193,    63,    68,   143,    71,   180,   125,   292,   144,
+       4,   175,    85,    63,    19,    74,    79,    86,    62,    64,
+     324,    65,   122,   124,   226,   233,   146,   227,     5,   336,
+     274,   147,    97,   275,   178,    75,    43,    76,   122,   122,
+     131,   132,    44,    87,    88,   133,   184,   185,   -12,    74,
+     138,   138,   -15,    59,   179,    75,    72,   254,    73,    92,
+      93,    44,    44,   264,   139,   155,   181,   157,   158,   159,
+     335,   -12,   264,   262,   161,   -15,    63,    63,    63,    63,
+      63,    63,    63,    63,    63,    63,    63,    63,    60,   234,
+     230,    25,   -96,   316,   177,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   173,   174,    63,   345,   138,
+      81,   348,   138,    81,    85,   255,   186,   317,   318,    86,
+     190,    84,  -114,   152,    19,   -97,   183,   301,   112,   113,
+     128,   303,    79,   160,   286,    79,   223,   225,    85,   221,
+      56,   134,   135,   253,    19,    87,   127,    76,   322,     4,
+     137,   325,   129,   103,    48,    49,     5,    19,   122,   122,
+    -106,    92,    93,   153,    44,   162,   -92,   176,    81,    81,
+     117,   276,    81,   188,    81,   283,   284,   139,    81,   347,
+     187,   231,   349,   250,   270,    92,    93,   243,   297,  -115,
+      79,    79,   235,   236,    79,   238,    79,    50,    51,   252,
+      79,  -106,   281,   299,   288,   138,    76,    81,   259,   282,
+     256,   243,   305,   285,   260,   261,   289,   331,  -106,   311,
+     309,    52,    81,   281,  -106,   192,   124,   296,   194,    79,
+     287,    98,    99,   100,   101,   102,  -115,  -115,   103,   337,
+     333,   110,   111,   237,    79,   210,    71,   302,   326,   327,
+     117,   342,   245,   104,   105,   106,   107,   108,   338,   339,
+     109,   251,    82,   307,   330,    85,   257,   308,    67,   222,
+      86,   313,   112,   113,   340,   304,     0,   306,    63,     0,
+     293,   114,     0,   239,   240,     0,    63,   241,     0,   244,
+       0,   272,     0,   246,    20,   273,    87,    88,    89,     0,
+     328,   329,     0,    23,     0,    97,   100,   101,   102,    90,
+       0,   103,    92,    93,     0,     0,     0,     0,   291,     0,
+       0,     0,   266,     0,     0,   294,   295,     0,     0,   298,
+      76,     0,     0,     0,     0,     0,     0,   277,     0,    85,
+       0,     0,     0,     0,    86,     0,     0,   312,     0,   314,
+       0,   315,   320,   321,     0,   323,     2,     3,     0,     4,
+       5,     0,     0,     6,     7,     0,     0,     0,     0,     0,
+      87,    88,    89,     0,     8,     9,   341,     0,     0,   343,
+       0,     0,   344,    90,   346,     0,    92,    93,     0,     0,
+       0,     0,    10,    11,    12,    13,     0,     0,   139,     0,
+      14,    15,    16,    17,    18,     0,     0,     0,    19,    20,
+       0,     0,     0,     0,     0,    21,    22,     0,    23,     0,
+      24,     0,     0,    25,    26,     0,    27,     0,     0,   -18,
+     195,   -18,     4,     5,     0,     0,     6,     7,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   196,
+       0,   197,   198,   199,   -74,   -74,   200,   201,   202,   203,
+     204,   205,   206,   207,   208,     0,     0,     0,    13,   209,
+       0,     0,     0,    14,    15,    16,    17,     0,     0,     0,
+       0,   -74,    20,     0,     0,     0,     0,     0,    21,    22,
+       0,    23,     0,    24,     0,     0,    25,    26,     0,    61,
+       0,     0,    75,   -74,    76,   195,     0,     4,     5,     0,
+       0,     6,     7,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   196,     0,   197,   198,   199,   -73,
+     -73,   200,   201,   202,   203,   204,   205,   206,   207,   208,
+       0,     0,     0,    13,   209,     0,     0,     0,    14,    15,
+      16,    17,     0,     0,     0,     0,   -73,    20,     0,     0,
+       0,     0,     0,    21,    22,     0,    23,     0,    24,     0,
+       0,    25,    26,     0,    61,     0,     0,    75,   -73,    76,
+     195,     0,     4,     5,     0,     0,     6,     7,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   196,
+       0,   197,   198,   199,     0,     0,   200,   201,   202,   203,
+     204,   205,   206,   207,   208,     0,     0,     0,    13,   209,
+       0,     0,     0,    14,    15,    16,    17,    69,     0,     4,
+       5,     0,    20,     6,     7,     0,     0,  -105,    21,    22,
+       0,    23,     0,    24,     0,     0,    25,    26,     0,    61,
+       0,     0,    75,   210,    76,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    13,     0,     0,     0,     0,
+      14,    15,    16,    17,     0,     0,     0,     0,  -105,    20,
+       0,     0,     0,     0,     0,    21,    22,     0,    23,     0,
+      24,     0,     0,    25,   267,  -105,    61,     0,     4,     5,
+       0,  -105,     6,     7,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,   196,     0,   197,   198,   199,
-     -74,   -74,   200,   201,   202,   203,   204,   205,   206,   207,
+       0,     0,   200,   201,   202,   203,   204,   205,   206,   207,
      208,     0,     0,     0,    13,   209,     0,     0,     0,    14,
-      15,    16,    17,     0,     0,     0,     0,   -74,    20,     0,
-       0,     0,     0,     0,    21,    22,     0,    23,     0,    24,
-       0,     0,    25,    26,     0,    61,     0,     0,    75,   -74,
-      76,   195,     0,     4,     5,     0,     0,     6,     7,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     196,     0,   197,   198,   199,     0,     0,   200,   201,   202,
-     203,   204,   205,   206,   207,   208,     0,     0,     0,    13,
-     209,     0,     0,     0,    14,    15,    16,    17,    69,     0,
-       4,     5,     0,    20,     6,     7,     0,     0,  -106,    21,
-      22,     0,    23,     0,    24,     0,     0,    25,    26,     0,
-      61,     0,     0,    75,   210,    76,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    13,     0,     0,     0,
-       0,    14,    15,    16,    17,     0,     0,     0,     0,  -106,
-      20,     0,     0,     0,     0,     0,    21,    22,     0,    23,
-       0,    24,     0,     0,    25,   270,  -106,    61,     0,     4,
-       5,     0,  -106,     6,     7,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   196,     0,   197,   198,
-     199,     0,     0,   200,   201,   202,   203,   204,   205,   206,
-     207,   208,     0,     0,     0,    13,   209,     0,     0,     0,
-      14,    15,    16,    17,     0,     0,     4,     5,     0,    20,
-       6,     7,     0,     0,     0,    21,    22,     0,    23,     0,
-      24,     0,     0,    25,    26,     0,    61,     0,     0,    75,
-       0,    76,     0,     0,     0,     0,     0,   116,     0,     4,
-       5,     0,    13,     6,     7,   117,     0,    14,    15,    16,
-      17,     0,     0,     0,     0,     0,    20,     0,     0,     0,
-       0,     0,    21,    22,     0,    23,     0,    24,     0,     0,
-      25,    26,     0,    61,     0,    13,     0,     0,    76,     0,
-      14,    15,    16,    17,   225,     0,     4,     5,     0,    20,
-       6,     7,   117,     0,     0,    21,    22,     0,    23,     0,
-      24,     0,     0,    25,    26,  -114,    61,     0,     0,     0,
-       0,    69,     0,     4,     5,     0,     0,     6,     7,     0,
-       0,     0,    13,     0,     0,     0,     0,    14,    15,    16,
-      17,     0,     0,     0,     0,    85,    20,     0,     0,     0,
-      86,     0,    21,    22,     0,    23,     0,    24,     0,    13,
-      25,    26,     0,    61,    14,    15,    16,    17,   189,     0,
-       4,     5,     0,    20,     6,     7,    87,    88,    89,    21,
-      22,     0,    23,     0,    24,     0,     0,    25,    26,    90,
-      61,     0,    92,    93,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     4,   265,     0,    13,     6,     7,     0,
-      76,    14,    15,    16,    17,     0,     0,     0,     0,     0,
-      20,     0,     0,   198,     0,     0,    21,    22,     0,    23,
-       0,    24,   205,   206,    25,    26,     0,    61,     0,    13,
-       0,     0,     0,     0,    14,    15,    16,    17,     0,     0,
-       0,     4,     5,    20,     0,     6,     7,     0,     0,    21,
-      22,     0,    23,     0,    24,     0,     0,    25,    26,     0,
-      61,   198,     0,     0,     0,     0,     0,     0,     0,     0,
-     205,   206,     0,     0,     0,     0,     0,    13,     0,     0,
-       0,     0,    14,    15,    16,    17,     0,     0,     0,     0,
-       0,    20,     0,     0,     0,     0,     0,    21,    22,    85,
-      23,     0,    24,     0,    86,    25,    26,     0,    61,     4,
-       5,     0,     0,     6,     7,     0,     0,     0,    96,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      87,    88,    89,     0,     0,     0,     4,     5,     0,     0,
-       6,     7,   117,    90,     0,    13,    92,    93,     0,     0,
-      14,    15,    16,    17,     0,     0,     0,     0,   139,    20,
+      15,    16,    17,     0,     0,     4,     5,     0,    20,     6,
+       7,     0,     0,     0,    21,    22,     0,    23,     0,    24,
+       0,     0,    25,    26,     0,    61,     0,     0,    75,     0,
+      76,     0,     0,     0,     0,     0,   116,     0,     4,     5,
+       0,    13,     6,     7,   117,     0,    14,    15,    16,    17,
+       0,     0,     0,     0,     0,    20,     0,     0,     0,     0,
+       0,    21,    22,     0,    23,     0,    24,     0,     0,    25,
+      26,     0,    61,     0,    13,     0,     0,    76,     0,    14,
+      15,    16,    17,   224,     0,     4,     5,     0,    20,     6,
+       7,   117,     0,     0,    21,    22,     0,    23,     0,    24,
+       0,     0,    25,    26,  -113,    61,     0,     0,     0,     0,
+      69,     0,     4,     5,     0,     0,     6,     7,     0,     0,
+       0,    13,     0,     0,     0,     0,    14,    15,    16,    17,
+       0,     0,     0,     0,    85,    20,     0,     0,     0,    86,
+       0,    21,    22,     0,    23,     0,    24,     0,    13,    25,
+      26,     0,    61,    14,    15,    16,    17,   189,     0,     4,
+       5,     0,    20,     6,     7,    87,    88,    89,    21,    22,
+       0,    23,     0,    24,     0,     0,    25,    26,    90,    61,
+      91,    92,    93,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     4,   263,     0,    13,     6,     7,     0,     0,
+      14,    15,    16,    17,     0,     0,     0,     0,     0,    20,
+       0,     0,   198,     0,     0,    21,    22,     0,    23,     0,
+      24,   205,   206,    25,    26,     0,    61,     0,    13,     0,
+       0,     0,     0,    14,    15,    16,    17,     0,     0,     0,
+       4,     5,    20,     0,     6,     7,     0,     0,    21,    22,
+       0,    23,     0,    24,     0,     0,    25,    26,     0,    61,
+     198,     0,     0,     0,     0,     0,     0,     0,     0,   205,
+     206,     0,     0,     0,     0,     0,    13,     0,     0,     0,
+       0,    14,    15,    16,    17,     0,     0,     0,     0,     0,
+      20,     0,     0,     0,     0,     0,    21,    22,    85,    23,
+       0,    24,     0,    86,    25,    26,     0,    61,     4,     5,
+       0,     0,     6,     7,     0,     0,     0,    96,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    87,
+      88,    89,     0,     0,     0,     4,     5,     0,     0,     6,
+       7,   117,    90,   220,    13,    92,    93,     0,     0,    14,
+      15,    16,    17,     0,     0,     0,     0,    85,    20,     0,
+       0,     0,    86,     0,    21,    22,     0,    23,     0,    24,
+       0,    13,    25,    26,     0,    61,    14,    15,    16,    17,
+       0,     0,     4,     5,     0,    20,     6,     7,    87,    88,
+      89,    21,    22,     0,    23,     0,    24,     0,     0,    25,
+      26,    90,    61,     0,    92,    93,     0,     0,     0,     4,
+       5,     0,     0,     6,     7,     0,     0,     0,    13,     0,
+       0,     0,     0,    14,    15,    16,    17,     0,     0,     0,
+       0,     0,    20,     0,     0,     0,     0,     0,    21,    22,
+       0,    23,     0,    24,     0,     0,    25,    26,     0,    61,
+      14,    15,    16,    17,     0,     0,     0,     0,     0,    20,
        0,     0,     0,     0,     0,    21,    22,     0,    23,     0,
-      24,     0,    13,    25,    26,     0,    61,    14,    15,    16,
-      17,     0,     0,     4,     5,     0,    20,     6,     7,     0,
-       0,     0,    21,    22,     0,    23,     0,    24,     0,     0,
-      25,    26,     0,    61,     0,    85,     0,     0,     0,     0,
-      86,     0,     0,     0,     0,     0,     0,     0,     0,    13,
-       0,     0,     0,    85,    14,    15,    16,    17,    86,    85,
-       0,     0,     0,    20,    86,     0,    87,    88,    89,    21,
-      22,     0,    23,     0,    24,     0,     0,    25,    26,    90,
-      61,    91,    92,    93,    87,    88,    89,     0,     0,     0,
-      87,    88,    89,     0,     0,     0,     0,    90,   221,     0,
-      92,    93,     0,    90,     0,     0,    92,    93
+      24,     0,     0,    25,    66,     0,    61
 };
 
 static const yytype_int16 yycheck[] =
 {
-      13,    14,    15,    29,    46,   120,    44,     1,    21,    22,
-      87,    24,    25,    70,   218,    86,     1,   239,    29,    30,
-      21,    22,    35,    24,    41,    17,    17,    52,    52,    10,
-     334,    27,     1,    68,    35,    29,   340,     6,   250,     1,
-     111,    61,    62,    63,     6,    68,    66,    68,    73,     1,
-      75,    75,     4,    71,    71,    52,   238,    73,     1,     1,
-      50,     1,   119,     4,     4,    61,    44,    45,    11,     1,
-       1,    56,     1,    68,   131,   132,    57,    58,   145,    71,
-      71,   148,     4,   295,    69,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,   108,   109,    52,
-       1,   188,   334,    56,    56,   230,   129,   299,   340,   145,
-      52,   303,   148,    52,   328,    56,    69,    68,   129,    69,
-      72,   335,    75,    57,    81,    26,   203,   204,    69,     1,
-     207,    66,   209,    75,    91,    67,    75,   214,     3,   162,
-     332,   145,    43,    44,   148,   337,    59,    60,    61,    62,
-      63,    44,    45,    66,    52,   347,   348,     5,    59,    60,
-      59,    60,   229,   179,   180,    66,   243,   203,   204,     4,
-      39,   207,     9,   209,    14,     3,     4,    69,   214,    41,
-       3,   138,   259,   219,    56,    86,    10,    88,    89,    90,
-     211,   258,     1,    68,    95,   262,   263,    69,    68,   203,
-     204,   249,   289,   207,    68,   209,     4,   243,   260,    68,
-     214,   292,    75,    69,   115,    27,    25,    26,    46,    47,
-      10,    68,   270,   259,    11,    15,    49,     7,    51,   296,
-     282,   267,    74,    57,    58,    55,   137,     7,   305,   243,
-     141,    10,    70,    52,   201,    21,    15,    30,   292,   233,
-     318,    41,    42,   210,   321,   259,     7,     8,     9,   160,
-      25,    -1,   162,   220,   282,    74,   313,    57,    58,    -1,
-     306,    -1,    41,    -1,   341,    -1,    -1,   344,   179,   180,
-      -1,    -1,    -1,    13,    14,    -1,    -1,   323,    57,    58,
-      -1,    -1,    -1,    -1,   251,   318,     3,     4,   255,    -1,
-       7,     8,    53,    -1,    -1,    -1,   329,   208,    59,    60,
-      -1,    62,   269,    -1,    44,    45,    -1,    -1,   329,    -1,
-     221,    -1,   279,    53,    -1,    -1,    -1,    -1,    -1,   286,
-     287,   232,   233,   290,    -1,   236,   237,    44,    45,    46,
-      47,    -1,    -1,    -1,    -1,    -1,    53,    -1,   249,    -1,
-      -1,    -1,    59,    60,    -1,    62,    -1,    64,   315,    -1,
-      67,    68,    -1,    70,    -1,   322,    -1,   324,    -1,   270,
-     327,    -1,    -1,   330,   331,    -1,   333,     0,     1,    -1,
-       3,     4,    -1,    -1,     7,     8,    -1,    -1,   345,   346,
-      59,    60,    61,    62,    63,    18,    19,    66,    -1,    -1,
-      -1,    -1,    -1,   304,    -1,   306,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    36,    37,    38,    39,    -1,    -1,    -1,
-      -1,    44,    45,    46,    47,    48,    -1,    -1,    -1,    52,
-      53,    -1,    -1,    -1,    -1,    -1,    59,    60,    -1,    62,
-      -1,    64,    -1,    -1,    67,    68,    -1,    70,    -1,    -1,
-      73,     1,    75,     3,     4,    -1,    -1,     7,     8,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      20,    -1,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    -1,    -1,    -1,    39,
-      40,    -1,    -1,    -1,    44,    45,    46,    47,    -1,    -1,
-      -1,    -1,    52,    53,    -1,    -1,    -1,    -1,    -1,    59,
-      60,    -1,    62,    -1,    64,    -1,    -1,    67,    68,    -1,
-      70,    -1,    -1,    73,    74,    75,     1,    -1,     3,     4,
-      -1,    -1,     7,     8,    -1,    -1,    -1,    -1,    -1,    -1,
+       1,    44,    29,    30,   217,    70,    86,   238,     1,    87,
+      46,    13,    14,    15,    29,     1,     1,     1,   248,    21,
+      22,     1,    24,    25,     1,    26,   120,    17,    17,     6,
+       3,   111,    10,    35,    52,    27,    29,    15,    21,    22,
+     314,    24,    43,    44,     1,     4,     1,     4,     4,   323,
+       1,     6,    35,     4,   119,    73,    68,    75,    59,    60,
+      59,    60,    71,    41,    42,    66,   131,   132,    52,    61,
+      56,    56,    52,    68,     1,    73,    49,     1,    51,    57,
+      58,    71,    71,   314,    69,    86,    72,    88,    89,    90,
+     320,    75,   323,   237,    95,    75,    98,    99,   100,   101,
+     102,   103,   104,   105,   106,   107,   108,   109,    68,    68,
+     188,    67,    69,     1,   115,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,   107,   108,   109,   129,   341,    56,
+     145,   344,    56,   148,    10,   229,   137,    25,    26,    15,
+     141,    52,    69,    81,    52,    69,   129,   291,    44,    45,
+      68,   295,   145,    91,    41,   148,   179,   180,    10,   160,
+     162,    44,    45,   228,    52,    41,    50,    75,   312,     3,
+       1,   315,    57,    66,     3,     4,     4,    52,   179,   180,
+      11,    57,    58,     5,    71,    39,    74,    14,   203,   204,
+       9,   256,   207,    41,   209,   260,   261,    69,   213,   343,
+     138,    68,   346,   218,   247,    57,    58,   208,   286,    10,
+     203,   204,    68,    68,   207,    68,   209,    46,    47,   220,
+     213,    52,   258,   288,   267,    56,    75,   242,     4,    69,
+     231,   232,   297,    27,   235,   236,    11,   317,    69,   304,
+      21,    70,   257,   279,    75,   145,   247,    68,   148,   242,
+     265,    59,    60,    61,    62,    63,    57,    58,    66,   324,
+      55,    13,    14,   201,   257,    74,   267,   294,     7,     8,
+       9,   336,   210,    59,    60,    61,    62,    63,     7,     7,
+      66,   219,    30,   298,   317,    10,   232,   300,    25,   162,
+      15,   306,    44,    45,   332,   296,    -1,   298,   300,    -1,
+     279,    53,    -1,   203,   204,    -1,   308,   207,    -1,   209,
+      -1,   249,    -1,   213,    53,   253,    41,    42,    43,    -1,
+      59,    60,    -1,    62,    -1,   308,    61,    62,    63,    54,
+      -1,    66,    57,    58,    -1,    -1,    -1,    -1,   276,    -1,
+      -1,    -1,   242,    -1,    -1,   283,   284,    -1,    -1,   287,
+      75,    -1,    -1,    -1,    -1,    -1,    -1,   257,    -1,    10,
+      -1,    -1,    -1,    -1,    15,    -1,    -1,   305,    -1,   307,
+      -1,   309,   310,   311,    -1,   313,     0,     1,    -1,     3,
+       4,    -1,    -1,     7,     8,    -1,    -1,    -1,    -1,    -1,
+      41,    42,    43,    -1,    18,    19,   334,    -1,    -1,   337,
+      -1,    -1,   340,    54,   342,    -1,    57,    58,    -1,    -1,
+      -1,    -1,    36,    37,    38,    39,    -1,    -1,    69,    -1,
+      44,    45,    46,    47,    48,    -1,    -1,    -1,    52,    53,
+      -1,    -1,    -1,    -1,    -1,    59,    60,    -1,    62,    -1,
+      64,    -1,    -1,    67,    68,    -1,    70,    -1,    -1,    73,
+       1,    75,     3,     4,    -1,    -1,     7,     8,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    20,
+      -1,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    -1,    -1,    -1,    39,    40,
+      -1,    -1,    -1,    44,    45,    46,    47,    -1,    -1,    -1,
+      -1,    52,    53,    -1,    -1,    -1,    -1,    -1,    59,    60,
+      -1,    62,    -1,    64,    -1,    -1,    67,    68,    -1,    70,
+      -1,    -1,    73,    74,    75,     1,    -1,     3,     4,    -1,
+      -1,     7,     8,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    20,    -1,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      -1,    -1,    -1,    39,    40,    -1,    -1,    -1,    44,    45,
+      46,    47,    -1,    -1,    -1,    -1,    52,    53,    -1,    -1,
+      -1,    -1,    -1,    59,    60,    -1,    62,    -1,    64,    -1,
+      -1,    67,    68,    -1,    70,    -1,    -1,    73,    74,    75,
+       1,    -1,     3,     4,    -1,    -1,     7,     8,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    20,
+      -1,    22,    23,    24,    -1,    -1,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    -1,    -1,    -1,    39,    40,
+      -1,    -1,    -1,    44,    45,    46,    47,     1,    -1,     3,
+       4,    -1,    53,     7,     8,    -1,    -1,    11,    59,    60,
+      -1,    62,    -1,    64,    -1,    -1,    67,    68,    -1,    70,
+      -1,    -1,    73,    74,    75,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,
+      44,    45,    46,    47,    -1,    -1,    -1,    -1,    52,    53,
+      -1,    -1,    -1,    -1,    -1,    59,    60,    -1,    62,    -1,
+      64,    -1,    -1,    67,    68,    69,    70,    -1,     3,     4,
+      -1,    75,     7,     8,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    20,    -1,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      -1,    -1,    27,    28,    29,    30,    31,    32,    33,    34,
       35,    -1,    -1,    -1,    39,    40,    -1,    -1,    -1,    44,
-      45,    46,    47,    -1,    -1,    -1,    -1,    52,    53,    -1,
-      -1,    -1,    -1,    -1,    59,    60,    -1,    62,    -1,    64,
-      -1,    -1,    67,    68,    -1,    70,    -1,    -1,    73,    74,
-      75,     1,    -1,     3,     4,    -1,    -1,     7,     8,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      20,    -1,    22,    23,    24,    -1,    -1,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    -1,    -1,    -1,    39,
-      40,    -1,    -1,    -1,    44,    45,    46,    47,     1,    -1,
-       3,     4,    -1,    53,     7,     8,    -1,    -1,    11,    59,
-      60,    -1,    62,    -1,    64,    -1,    -1,    67,    68,    -1,
-      70,    -1,    -1,    73,    74,    75,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,
-      -1,    44,    45,    46,    47,    -1,    -1,    -1,    -1,    52,
-      53,    -1,    -1,    -1,    -1,    -1,    59,    60,    -1,    62,
-      -1,    64,    -1,    -1,    67,    68,    69,    70,    -1,     3,
-       4,    -1,    75,     7,     8,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    20,    -1,    22,    23,
-      24,    -1,    -1,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    -1,    -1,    -1,    39,    40,    -1,    -1,    -1,
-      44,    45,    46,    47,    -1,    -1,     3,     4,    -1,    53,
-       7,     8,    -1,    -1,    -1,    59,    60,    -1,    62,    -1,
-      64,    -1,    -1,    67,    68,    -1,    70,    -1,    -1,    73,
-      -1,    75,    -1,    -1,    -1,    -1,    -1,     1,    -1,     3,
-       4,    -1,    39,     7,     8,     9,    -1,    44,    45,    46,
-      47,    -1,    -1,    -1,    -1,    -1,    53,    -1,    -1,    -1,
-      -1,    -1,    59,    60,    -1,    62,    -1,    64,    -1,    -1,
-      67,    68,    -1,    70,    -1,    39,    -1,    -1,    75,    -1,
-      44,    45,    46,    47,     1,    -1,     3,     4,    -1,    53,
-       7,     8,     9,    -1,    -1,    59,    60,    -1,    62,    -1,
-      64,    -1,    -1,    67,    68,    69,    70,    -1,    -1,    -1,
-      -1,     1,    -1,     3,     4,    -1,    -1,     7,     8,    -1,
-      -1,    -1,    39,    -1,    -1,    -1,    -1,    44,    45,    46,
-      47,    -1,    -1,    -1,    -1,    10,    53,    -1,    -1,    -1,
-      15,    -1,    59,    60,    -1,    62,    -1,    64,    -1,    39,
-      67,    68,    -1,    70,    44,    45,    46,    47,     1,    -1,
-       3,     4,    -1,    53,     7,     8,    41,    42,    43,    59,
-      60,    -1,    62,    -1,    64,    -1,    -1,    67,    68,    54,
-      70,    -1,    57,    58,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,     3,     4,    -1,    39,     7,     8,    -1,
-      75,    44,    45,    46,    47,    -1,    -1,    -1,    -1,    -1,
-      53,    -1,    -1,    23,    -1,    -1,    59,    60,    -1,    62,
-      -1,    64,    32,    33,    67,    68,    -1,    70,    -1,    39,
-      -1,    -1,    -1,    -1,    44,    45,    46,    47,    -1,    -1,
-      -1,     3,     4,    53,    -1,     7,     8,    -1,    -1,    59,
-      60,    -1,    62,    -1,    64,    -1,    -1,    67,    68,    -1,
-      70,    23,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      32,    33,    -1,    -1,    -1,    -1,    -1,    39,    -1,    -1,
-      -1,    -1,    44,    45,    46,    47,    -1,    -1,    -1,    -1,
-      -1,    53,    -1,    -1,    -1,    -1,    -1,    59,    60,    10,
-      62,    -1,    64,    -1,    15,    67,    68,    -1,    70,     3,
-       4,    -1,    -1,     7,     8,    -1,    -1,    -1,    12,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      41,    42,    43,    -1,    -1,    -1,     3,     4,    -1,    -1,
-       7,     8,     9,    54,    -1,    39,    57,    58,    -1,    -1,
-      44,    45,    46,    47,    -1,    -1,    -1,    -1,    69,    53,
+      45,    46,    47,    -1,    -1,     3,     4,    -1,    53,     7,
+       8,    -1,    -1,    -1,    59,    60,    -1,    62,    -1,    64,
+      -1,    -1,    67,    68,    -1,    70,    -1,    -1,    73,    -1,
+      75,    -1,    -1,    -1,    -1,    -1,     1,    -1,     3,     4,
+      -1,    39,     7,     8,     9,    -1,    44,    45,    46,    47,
+      -1,    -1,    -1,    -1,    -1,    53,    -1,    -1,    -1,    -1,
+      -1,    59,    60,    -1,    62,    -1,    64,    -1,    -1,    67,
+      68,    -1,    70,    -1,    39,    -1,    -1,    75,    -1,    44,
+      45,    46,    47,     1,    -1,     3,     4,    -1,    53,     7,
+       8,     9,    -1,    -1,    59,    60,    -1,    62,    -1,    64,
+      -1,    -1,    67,    68,    69,    70,    -1,    -1,    -1,    -1,
+       1,    -1,     3,     4,    -1,    -1,     7,     8,    -1,    -1,
+      -1,    39,    -1,    -1,    -1,    -1,    44,    45,    46,    47,
+      -1,    -1,    -1,    -1,    10,    53,    -1,    -1,    -1,    15,
+      -1,    59,    60,    -1,    62,    -1,    64,    -1,    39,    67,
+      68,    -1,    70,    44,    45,    46,    47,     1,    -1,     3,
+       4,    -1,    53,     7,     8,    41,    42,    43,    59,    60,
+      -1,    62,    -1,    64,    -1,    -1,    67,    68,    54,    70,
+      56,    57,    58,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,     3,     4,    -1,    39,     7,     8,    -1,    -1,
+      44,    45,    46,    47,    -1,    -1,    -1,    -1,    -1,    53,
+      -1,    -1,    23,    -1,    -1,    59,    60,    -1,    62,    -1,
+      64,    32,    33,    67,    68,    -1,    70,    -1,    39,    -1,
+      -1,    -1,    -1,    44,    45,    46,    47,    -1,    -1,    -1,
+       3,     4,    53,    -1,     7,     8,    -1,    -1,    59,    60,
+      -1,    62,    -1,    64,    -1,    -1,    67,    68,    -1,    70,
+      23,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    32,
+      33,    -1,    -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,
+      -1,    44,    45,    46,    47,    -1,    -1,    -1,    -1,    -1,
+      53,    -1,    -1,    -1,    -1,    -1,    59,    60,    10,    62,
+      -1,    64,    -1,    15,    67,    68,    -1,    70,     3,     4,
+      -1,    -1,     7,     8,    -1,    -1,    -1,    12,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    41,
+      42,    43,    -1,    -1,    -1,     3,     4,    -1,    -1,     7,
+       8,     9,    54,    55,    39,    57,    58,    -1,    -1,    44,
+      45,    46,    47,    -1,    -1,    -1,    -1,    10,    53,    -1,
+      -1,    -1,    15,    -1,    59,    60,    -1,    62,    -1,    64,
+      -1,    39,    67,    68,    -1,    70,    44,    45,    46,    47,
+      -1,    -1,     3,     4,    -1,    53,     7,     8,    41,    42,
+      43,    59,    60,    -1,    62,    -1,    64,    -1,    -1,    67,
+      68,    54,    70,    -1,    57,    58,    -1,    -1,    -1,     3,
+       4,    -1,    -1,     7,     8,    -1,    -1,    -1,    39,    -1,
+      -1,    -1,    -1,    44,    45,    46,    47,    -1,    -1,    -1,
+      -1,    -1,    53,    -1,    -1,    -1,    -1,    -1,    59,    60,
+      -1,    62,    -1,    64,    -1,    -1,    67,    68,    -1,    70,
+      44,    45,    46,    47,    -1,    -1,    -1,    -1,    -1,    53,
       -1,    -1,    -1,    -1,    -1,    59,    60,    -1,    62,    -1,
-      64,    -1,    39,    67,    68,    -1,    70,    44,    45,    46,
-      47,    -1,    -1,     3,     4,    -1,    53,     7,     8,    -1,
-      -1,    -1,    59,    60,    -1,    62,    -1,    64,    -1,    -1,
-      67,    68,    -1,    70,    -1,    10,    -1,    -1,    -1,    -1,
-      15,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    39,
-      -1,    -1,    -1,    10,    44,    45,    46,    47,    15,    10,
-      -1,    -1,    -1,    53,    15,    -1,    41,    42,    43,    59,
-      60,    -1,    62,    -1,    64,    -1,    -1,    67,    68,    54,
-      70,    56,    57,    58,    41,    42,    43,    -1,    -1,    -1,
-      41,    42,    43,    -1,    -1,    -1,    -1,    54,    55,    -1,
-      57,    58,    -1,    54,    -1,    -1,    57,    58
+      64,    -1,    -1,    67,    68,    -1,    70
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1134,39 +1128,38 @@ static const yytype_uint8 yystos[] =
        0,    77,     0,     1,     3,     4,     7,     8,    18,    19,
       36,    37,    38,    39,    44,    45,    46,    47,    48,    52,
       53,    59,    60,    62,    64,    67,    68,    70,    78,    81,
-      85,    87,    90,   109,   120,   124,   125,   126,   127,   128,
-     129,   137,   138,    68,    71,   134,   135,   136,     3,     4,
-      46,    47,    70,    83,    84,   130,   138,   138,   138,    68,
-      68,    70,   125,   138,   125,   125,    68,   127,   138,     1,
-     116,   120,    49,    51,   129,    73,    75,    82,    92,   109,
-     140,   144,    82,    88,    52,    10,    15,    41,    42,    43,
-      54,    56,    57,    58,   122,   123,    12,   125,    59,    60,
+      85,    87,    90,   108,   119,   123,   124,   125,   126,   127,
+     128,   136,   137,    68,    71,   133,   134,   135,     3,     4,
+      46,    47,    70,    83,    84,   129,   137,   137,   137,    68,
+      68,    70,   124,   137,   124,   124,    68,   126,   137,     1,
+     115,   119,    49,    51,   128,    73,    75,    82,    92,   108,
+     139,   143,    82,    88,    52,    10,    15,    41,    42,    43,
+      54,    56,    57,    58,   121,   122,    12,   124,    59,    60,
       61,    62,    63,    66,    59,    60,    61,    62,    63,    66,
-      13,    14,    44,    45,    53,   121,     1,     9,    89,   117,
-     118,   119,   120,   116,   120,    17,   134,    50,    68,    57,
-     111,   117,   117,   120,    44,    45,   139,     1,    56,    69,
-     142,   146,   142,     1,     6,    79,     1,     6,    80,   109,
-     110,    91,   110,     5,    89,   120,   137,   120,   120,   120,
-     110,   120,    39,   125,   125,   125,   125,   125,   125,   125,
-     125,   125,   125,   125,   125,    89,    14,   120,   142,     1,
-     146,    72,    86,   125,   142,   142,   120,   110,    41,     1,
-     120,     1,    92,     1,    92,     1,    20,    22,    23,    24,
+      13,    14,    44,    45,    53,   120,     1,     9,    89,   116,
+     117,   118,   119,   115,   119,    17,   133,    50,    68,    57,
+     110,   116,   116,   119,    44,    45,   138,     1,    56,    69,
+     141,   145,   141,     1,     6,    79,     1,     6,    80,   108,
+     109,    91,   109,     5,    89,   119,   136,   119,   119,   119,
+     109,   119,    39,   124,   124,   124,   124,   124,   124,   124,
+     124,   124,   124,   124,   124,    89,    14,   119,   141,     1,
+     145,    72,    86,   124,   141,   141,   119,   109,    41,     1,
+     119,     1,    92,     1,    92,     1,    20,    22,    23,    24,
       27,    28,    29,    30,    31,    32,    33,    34,    35,    40,
-      74,    93,    94,    95,    97,   104,   108,   120,   140,   141,
-     144,    55,   120,   130,   119,     1,   119,     1,     4,   112,
-     113,   137,    68,    96,     4,    68,    68,    68,   110,    68,
-      92,    92,    92,   114,   120,    92,   110,   140,    92,    98,
-      91,   143,   144,   110,   120,   142,     1,   146,   120,   114,
-      99,     4,   120,   120,    94,     4,    97,   100,    92,   101,
-      68,   105,   115,   116,   141,   110,   110,     1,     4,   142,
-      92,   131,   132,   133,   134,    69,   142,   142,    27,    41,
-     144,     1,    25,    26,   102,   110,   116,    11,   106,   110,
-      17,   133,   110,   110,    68,   137,   110,     7,     8,    59,
-      60,    87,    89,   103,    55,   145,   141,   142,   107,    94,
-      94,   120,   142,   120,   144,     7,     7,   145,   110,   124,
-      21,   142,   110,   144,   110,   110,    91,   110,   110,    94,
-     110,   100,    91,    94,   100,   142,   142,   110,   110,    94,
-      94
+      74,    93,    94,    96,   103,   107,   119,   139,   140,   143,
+      55,   119,   129,   118,     1,   118,     1,     4,   111,   112,
+     136,    68,    95,     4,    68,    68,    68,   109,    68,    92,
+      92,    92,   113,   119,    92,   109,    92,    97,    91,   142,
+     143,   109,   119,   141,     1,   145,   119,   113,    98,     4,
+     119,   119,    93,     4,    96,    99,    92,    68,   104,   114,
+     115,   140,   109,   109,     1,     4,   141,    92,   130,   131,
+     132,   133,    69,   141,   141,    27,    41,   143,   115,    11,
+     105,   109,    17,   132,   109,   109,    68,   136,   109,   141,
+     106,    93,   139,    93,   119,   141,   119,   143,   123,    21,
+     100,   141,   109,   143,   109,   109,     1,    25,    26,   101,
+     109,   109,    93,   109,    99,    93,     7,     8,    59,    60,
+      87,    89,   102,    55,   144,   140,    99,   141,     7,     7,
+     144,   109,   141,   109,   109,    91,   109,    93,    91,    93
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
@@ -1176,23 +1169,23 @@ static const yytype_uint8 yyr1[] =
       78,    78,    79,    79,    79,    80,    80,    80,    81,    81,
       81,    81,    81,    81,    81,    82,    83,    83,    83,    83,
       84,    84,    86,    85,    88,    87,    89,    90,    90,    91,
-      91,    91,    92,    92,    93,    94,    94,    94,    94,    94,
-      94,    94,    94,    94,    94,    95,    95,    95,    95,    95,
-      96,    95,    95,    98,    97,    99,    97,    97,    97,   100,
-     100,   101,   101,   101,   102,   102,   103,   103,   103,   103,
-     103,   103,   104,   104,   105,   105,   106,   107,   106,   108,
-     108,   109,   109,   110,   110,   111,   111,   112,   112,   113,
-     113,   113,   113,   113,   114,   114,   115,   115,   116,   116,
-     116,   116,   116,   116,   117,   117,   118,   118,   118,   118,
-     118,   118,   119,   119,   120,   120,   120,   120,   120,   120,
-     120,   120,   120,   120,   121,   121,   121,   122,   122,   123,
-     123,   124,   124,   124,   125,   125,   125,   125,   125,   125,
-     125,   125,   125,   125,   125,   126,   126,   126,   126,   126,
-     126,   126,   127,   127,   127,   127,   127,   127,   127,   127,
-     127,   127,   127,   127,   127,   127,   128,   128,   129,   130,
-     130,   131,   131,   132,   132,   133,   134,   135,   135,   136,
-     137,   137,   138,   138,   139,   139,   139,   140,   141,   142,
-     143,   143,   144,   145,   146
+      91,    91,    92,    92,    93,    93,    93,    93,    93,    93,
+      93,    93,    93,    93,    94,    94,    94,    94,    94,    95,
+      94,    94,    97,    96,    98,    96,    96,    96,    99,    99,
+     100,   100,   100,   101,   101,   102,   102,   102,   102,   102,
+     102,   103,   103,   104,   104,   105,   106,   105,   107,   107,
+     108,   108,   109,   109,   110,   110,   111,   111,   112,   112,
+     112,   112,   112,   113,   113,   114,   114,   115,   115,   115,
+     115,   115,   115,   116,   116,   117,   117,   117,   117,   117,
+     117,   118,   118,   119,   119,   119,   119,   119,   119,   119,
+     119,   119,   119,   120,   120,   120,   121,   121,   122,   122,
+     123,   123,   123,   124,   124,   124,   124,   124,   124,   124,
+     124,   124,   124,   124,   125,   125,   125,   125,   125,   125,
+     125,   126,   126,   126,   126,   126,   126,   126,   126,   126,
+     126,   126,   126,   126,   126,   127,   127,   128,   129,   129,
+     130,   130,   131,   131,   132,   133,   134,   134,   135,   136,
+     136,   137,   137,   138,   138,   138,   139,   140,   141,   142,
+     142,   143,   144,   145
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -1202,23 +1195,23 @@ static const yytype_uint8 yyr2[] =
        4,     4,     1,     2,     1,     1,     2,     1,     0,     1,
        4,     1,     1,     1,     1,     5,     1,     1,     1,     2,
        1,     1,     0,     7,     0,     3,     1,     1,     1,     0,
-       2,     2,     1,     2,     5,     2,     3,     1,     5,     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,     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,     0,     1,     1,     3,     1,     2,
-       3,     3,     1,     1,     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
+       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,     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,     0,     1,     1,     3,     1,     2,     3,
+       3,     1,     1,     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
 };
 
 
@@ -1901,7 +1894,7 @@ yyreduce:
                rule = 0;
                yyerrok;
          }
-#line 1905 "awkgram.c" /* yacc.c:1651  */
+#line 1898 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 5:
@@ -1909,7 +1902,7 @@ yyreduce:
     {
                next_sourcefile();
          }
-#line 1913 "awkgram.c" /* yacc.c:1651  */
+#line 1906 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 6:
@@ -1922,7 +1915,7 @@ yyreduce:
                 */
                /* yyerrok; */
          }
-#line 1926 "awkgram.c" /* yacc.c:1651  */
+#line 1919 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 7:
@@ -1931,7 +1924,7 @@ yyreduce:
                (void) append_rule((yyvsp[-1]), (yyvsp[0]));
                first_rule = false;
          }
-#line 1935 "awkgram.c" /* yacc.c:1651  */
+#line 1928 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 8:
@@ -1946,7 +1939,7 @@ yyreduce:
                } else          /* pattern rule with non-empty pattern */
                        (void) append_rule((yyvsp[-1]), NULL);
          }
-#line 1950 "awkgram.c" /* yacc.c:1651  */
+#line 1943 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 9:
@@ -1957,7 +1950,7 @@ yyreduce:
                want_param_names = DONT_CHECK;
                yyerrok;
          }
-#line 1961 "awkgram.c" /* yacc.c:1651  */
+#line 1954 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 10:
@@ -1967,7 +1960,7 @@ yyreduce:
                at_seen = false;
                yyerrok;
          }
-#line 1971 "awkgram.c" /* yacc.c:1651  */
+#line 1964 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 11:
@@ -1977,7 +1970,7 @@ yyreduce:
                at_seen = false;
                yyerrok;
          }
-#line 1981 "awkgram.c" /* yacc.c:1651  */
+#line 1974 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 12:
@@ -1989,19 +1982,19 @@ yyreduce:
                bcfree((yyvsp[0]));
                (yyval) = NULL;
          }
-#line 1993 "awkgram.c" /* yacc.c:1651  */
+#line 1986 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 13:
 #line 286 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 1999 "awkgram.c" /* yacc.c:1651  */
+#line 1992 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 14:
 #line 288 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 2005 "awkgram.c" /* yacc.c:1651  */
+#line 1998 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 15:
@@ -2013,19 +2006,19 @@ yyreduce:
                bcfree((yyvsp[0]));
                (yyval) = NULL;
          }
-#line 2017 "awkgram.c" /* yacc.c:1651  */
+#line 2010 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 16:
 #line 301 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 2023 "awkgram.c" /* yacc.c:1651  */
+#line 2016 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 17:
 #line 303 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 2029 "awkgram.c" /* yacc.c:1651  */
+#line 2022 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 18:
@@ -2038,7 +2031,7 @@ yyreduce:
                } else
                        (yyval) = NULL;
          }
-#line 2042 "awkgram.c" /* yacc.c:1651  */
+#line 2035 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 19:
@@ -2051,7 +2044,7 @@ yyreduce:
                } else
                        (yyval) = (yyvsp[0]);
          }
-#line 2055 "awkgram.c" /* yacc.c:1651  */
+#line 2048 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 20:
@@ -2085,7 +2078,7 @@ yyreduce:
                        (yyval) = list_append(list_merge((yyvsp[-3]), 
(yyvsp[0])), tp);
                rule = Rule;
          }
-#line 2089 "awkgram.c" /* yacc.c:1651  */
+#line 2082 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 21:
@@ -2103,7 +2096,7 @@ yyreduce:
                check_comment();
                (yyval) = (yyvsp[0]);
          }
-#line 2107 "awkgram.c" /* yacc.c:1651  */
+#line 2100 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 22:
@@ -2121,7 +2114,7 @@ yyreduce:
                check_comment();
                (yyval) = (yyvsp[0]);
          }
-#line 2125 "awkgram.c" /* yacc.c:1651  */
+#line 2118 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 23:
@@ -2133,7 +2126,7 @@ yyreduce:
                check_comment();
                (yyval) = (yyvsp[0]);
          }
-#line 2137 "awkgram.c" /* yacc.c:1651  */
+#line 2130 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 24:
@@ -2145,7 +2138,7 @@ yyreduce:
                check_comment();
                (yyval) = (yyvsp[0]);
          }
-#line 2149 "awkgram.c" /* yacc.c:1651  */
+#line 2142 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 25:
@@ -2158,19 +2151,19 @@ yyreduce:
                        ip = (yyvsp[-3]);
                (yyval) = ip;
          }
-#line 2162 "awkgram.c" /* yacc.c:1651  */
+#line 2155 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 26:
 #line 416 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 2168 "awkgram.c" /* yacc.c:1651  */
+#line 2161 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 27:
 #line 418 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 2174 "awkgram.c" /* yacc.c:1651  */
+#line 2167 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 28:
@@ -2180,7 +2173,7 @@ yyreduce:
                                        tokstart);
                YYABORT;
          }
-#line 2184 "awkgram.c" /* yacc.c:1651  */
+#line 2177 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 29:
@@ -2189,13 +2182,13 @@ yyreduce:
                (yyval) = (yyvsp[0]);
                at_seen = false;
          }
-#line 2193 "awkgram.c" /* yacc.c:1651  */
+#line 2186 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 32:
 #line 438 "awkgram.y" /* yacc.c:1651  */
     { want_param_names = FUNC_HEADER; }
-#line 2199 "awkgram.c" /* yacc.c:1651  */
+#line 2192 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 33:
@@ -2237,13 +2230,13 @@ yyreduce:
                (yyval) = (yyvsp[-6]);
                want_param_names = FUNC_BODY;
          }
-#line 2241 "awkgram.c" /* yacc.c:1651  */
+#line 2234 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 34:
 #line 484 "awkgram.y" /* yacc.c:1651  */
     { want_regexp = true; }
-#line 2247 "awkgram.c" /* yacc.c:1651  */
+#line 2240 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 35:
@@ -2276,7 +2269,7 @@ yyreduce:
                  (yyval)->opcode = Op_match_rec;
                  (yyval)->memory = n;
                }
-#line 2280 "awkgram.c" /* yacc.c:1651  */
+#line 2273 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 36:
@@ -2293,13 +2286,13 @@ yyreduce:
                  (yyval)->opcode = Op_push_re;
                  (yyval)->memory = make_typed_regex(re, len);
                }
-#line 2297 "awkgram.c" /* yacc.c:1651  */
+#line 2290 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 37:
 #line 533 "awkgram.y" /* yacc.c:1651  */
     { bcfree((yyvsp[0])); }
-#line 2303 "awkgram.c" /* yacc.c:1651  */
+#line 2296 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 39:
@@ -2314,7 +2307,7 @@ yyreduce:
                } else
                        (yyval) = NULL;
          }
-#line 2318 "awkgram.c" /* yacc.c:1651  */
+#line 2311 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 40:
@@ -2365,57 +2358,40 @@ yyreduce:
                }
                yyerrok;
          }
-#line 2369 "awkgram.c" /* yacc.c:1651  */
+#line 2362 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 41:
 #line 597 "awkgram.y" /* yacc.c:1651  */
     {  (yyval) = NULL; }
-#line 2375 "awkgram.c" /* yacc.c:1651  */
+#line 2368 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 44:
 #line 607 "awkgram.y" /* yacc.c:1651  */
-    {
-               INSTRUCTION *ip;
-
-               ip = (yyvsp[-2]);
-               if (do_pretty_print) {
-                       (void) list_prepend(ip, (yyvsp[-4]));
-                       (void) list_prepend(ip, instruction(Op_exec_count));
-               }
-               /* else
-                       $1 is NULL */
-               (yyval) = ip;
-         }
-#line 2392 "awkgram.c" /* yacc.c:1651  */
-    break;
-
-  case 45:
-#line 623 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 2398 "awkgram.c" /* yacc.c:1651  */
+#line 2374 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 46:
-#line 625 "awkgram.y" /* yacc.c:1651  */
+  case 45:
+#line 609 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[-1]); }
-#line 2404 "awkgram.c" /* yacc.c:1651  */
+#line 2380 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 47:
-#line 627 "awkgram.y" /* yacc.c:1651  */
+  case 46:
+#line 611 "awkgram.y" /* yacc.c:1651  */
     {
                if (do_pretty_print)
                        (yyval) = list_prepend((yyvsp[0]), 
instruction(Op_exec_count));
                else
                        (yyval) = (yyvsp[0]);
          }
-#line 2415 "awkgram.c" /* yacc.c:1651  */
+#line 2391 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 48:
-#line 634 "awkgram.y" /* yacc.c:1651  */
+  case 47:
+#line 618 "awkgram.y" /* yacc.c:1651  */
     {
                INSTRUCTION *dflt, *curr = NULL, *cexp, *cstmt;
                INSTRUCTION *ip, *nextc, *tbreak;
@@ -2433,9 +2409,8 @@ yyreduce:
                if ((yyvsp[-2]) != NULL) {
                        curr = (yyvsp[-2])->nexti;
                        bcfree((yyvsp[-2]));    /* Op_list */
-               }
-               /*  else
-                       curr = NULL; */
+               } /*  else
+                               curr = NULL; */
 
                for (; curr != NULL; curr = nextc) {
                        INSTRUCTION *caseexp = curr->case_exp;
@@ -2489,15 +2464,15 @@ yyreduce:
                if (case_values != NULL)
                        efree(case_values);
 
-               ip = (yyvsp[-4]);
+               ip = (yyvsp[-6]);
                if (do_pretty_print) {
-                       INSTRUCTION *exp = (yyvsp[-4])->nexti->nexti;
-                       exp->target_break = tbreak;
-                       (exp + 1)->switch_start = cexp->nexti;
-                       (exp + 1)->switch_end = cexp->lasti;
-               }
-               /* else
-                       $1 is NULL */
+                       (void) list_prepend(ip, (yyvsp[-8]));
+                       (void) list_prepend(ip, instruction(Op_exec_count));
+                       (yyvsp[-8])->target_break = tbreak;
+                       ((yyvsp[-8]) + 1)->switch_start = cexp->nexti;
+                       ((yyvsp[-8]) + 1)->switch_end = cexp->lasti;
+               }/* else
+                               $1 is NULL */
 
                (void) list_append(cexp, dflt);
                (void) list_merge(ip, cexp);
@@ -2506,11 +2481,11 @@ yyreduce:
                break_allowed--;
                fix_break_continue(ip, tbreak, NULL);
          }
-#line 2510 "awkgram.c" /* yacc.c:1651  */
+#line 2485 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 49:
-#line 725 "awkgram.y" /* yacc.c:1651  */
+  case 48:
+#line 708 "awkgram.y" /* yacc.c:1651  */
     {
                /*
                 *    -----------------
@@ -2552,11 +2527,11 @@ yyreduce:
                continue_allowed--;
                fix_break_continue(ip, tbreak, tcont);
          }
-#line 2556 "awkgram.c" /* yacc.c:1651  */
+#line 2531 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 50:
-#line 767 "awkgram.y" /* yacc.c:1651  */
+  case 49:
+#line 750 "awkgram.y" /* yacc.c:1651  */
     {
                /*
                 *    -----------------
@@ -2598,11 +2573,11 @@ yyreduce:
                } /* else
                        $1 and $4 are NULLs */
          }
-#line 2602 "awkgram.c" /* yacc.c:1651  */
+#line 2577 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 51:
-#line 809 "awkgram.y" /* yacc.c:1651  */
+  case 50:
+#line 792 "awkgram.y" /* yacc.c:1651  */
     {
                INSTRUCTION *ip;
                char *var_name = (yyvsp[-5])->lextok;
@@ -2715,33 +2690,33 @@ regular_loop:
                break_allowed--;
                continue_allowed--;
          }
-#line 2719 "awkgram.c" /* yacc.c:1651  */
+#line 2694 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 52:
-#line 922 "awkgram.y" /* yacc.c:1651  */
+  case 51:
+#line 905 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = mk_for_loop((yyvsp[-11]), (yyvsp[-9]), (yyvsp[-6]), 
(yyvsp[-3]), (yyvsp[0]));
 
                break_allowed--;
                continue_allowed--;
          }
-#line 2730 "awkgram.c" /* yacc.c:1651  */
+#line 2705 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 53:
-#line 929 "awkgram.y" /* yacc.c:1651  */
+  case 52:
+#line 912 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = mk_for_loop((yyvsp[-10]), (yyvsp[-8]), (INSTRUCTION 
*) NULL, (yyvsp[-3]), (yyvsp[0]));
 
                break_allowed--;
                continue_allowed--;
          }
-#line 2741 "awkgram.c" /* yacc.c:1651  */
+#line 2716 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 54:
-#line 936 "awkgram.y" /* yacc.c:1651  */
+  case 53:
+#line 919 "awkgram.y" /* yacc.c:1651  */
     {
                if (do_pretty_print)
                        (yyval) = list_prepend((yyvsp[0]), 
instruction(Op_exec_count));
@@ -2749,11 +2724,11 @@ regular_loop:
                        (yyval) = (yyvsp[0]);
                (yyval) = add_pending_comment((yyval));
          }
-#line 2753 "awkgram.c" /* yacc.c:1651  */
+#line 2728 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 55:
-#line 947 "awkgram.y" /* yacc.c:1651  */
+  case 54:
+#line 930 "awkgram.y" /* yacc.c:1651  */
     {
                if (! break_allowed)
                        error_ln((yyvsp[-1])->source_line,
@@ -2763,11 +2738,11 @@ regular_loop:
                (yyval) = add_pending_comment((yyval));
 
          }
-#line 2767 "awkgram.c" /* yacc.c:1651  */
+#line 2742 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 56:
-#line 957 "awkgram.y" /* yacc.c:1651  */
+  case 55:
+#line 940 "awkgram.y" /* yacc.c:1651  */
     {
                if (! continue_allowed)
                        error_ln((yyvsp[-1])->source_line,
@@ -2777,11 +2752,11 @@ regular_loop:
                (yyval) = add_pending_comment((yyval));
 
          }
-#line 2781 "awkgram.c" /* yacc.c:1651  */
+#line 2756 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 57:
-#line 967 "awkgram.y" /* yacc.c:1651  */
+  case 56:
+#line 950 "awkgram.y" /* yacc.c:1651  */
     {
                /* if inside function (rule = 0), resolve context at run-time */
                if (rule && rule != Rule)
@@ -2791,11 +2766,11 @@ regular_loop:
                (yyval) = list_create((yyvsp[-1]));
                (yyval) = add_pending_comment((yyval));
          }
-#line 2795 "awkgram.c" /* yacc.c:1651  */
+#line 2770 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 58:
-#line 977 "awkgram.y" /* yacc.c:1651  */
+  case 57:
+#line 960 "awkgram.y" /* yacc.c:1651  */
     {
                /* if inside function (rule = 0), resolve context at run-time */
                if (rule == BEGIN || rule == END || rule == ENDFILE)
@@ -2807,11 +2782,11 @@ regular_loop:
                (yyval) = list_create((yyvsp[-1]));
                (yyval) = add_pending_comment((yyval));
          }
-#line 2811 "awkgram.c" /* yacc.c:1651  */
+#line 2786 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 59:
-#line 989 "awkgram.y" /* yacc.c:1651  */
+  case 58:
+#line 972 "awkgram.y" /* yacc.c:1651  */
     {
                /* Initialize the two possible jump targets, the actual target
                 * is resolved at run-time.
@@ -2827,20 +2802,20 @@ regular_loop:
                        (yyval) = list_append((yyvsp[-1]), (yyvsp[-2]));
                (yyval) = add_pending_comment((yyval));
          }
-#line 2831 "awkgram.c" /* yacc.c:1651  */
+#line 2806 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 60:
-#line 1005 "awkgram.y" /* yacc.c:1651  */
+  case 59:
+#line 988 "awkgram.y" /* yacc.c:1651  */
     {
                if (! in_function)
                        yyerror(_("`return' used outside function context"));
          }
-#line 2840 "awkgram.c" /* yacc.c:1651  */
+#line 2815 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 61:
-#line 1008 "awkgram.y" /* yacc.c:1651  */
+  case 60:
+#line 991 "awkgram.y" /* yacc.c:1651  */
     {
                if ((yyvsp[-1]) == NULL) {
                        (yyval) = list_create((yyvsp[-3]));
@@ -2851,17 +2826,17 @@ regular_loop:
 
                (yyval) = add_pending_comment((yyval));
          }
-#line 2855 "awkgram.c" /* yacc.c:1651  */
+#line 2830 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 63:
-#line 1030 "awkgram.y" /* yacc.c:1651  */
+  case 62:
+#line 1013 "awkgram.y" /* yacc.c:1651  */
     { in_print = true; in_parens = 0; }
-#line 2861 "awkgram.c" /* yacc.c:1651  */
+#line 2836 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 64:
-#line 1031 "awkgram.y" /* yacc.c:1651  */
+  case 63:
+#line 1014 "awkgram.y" /* yacc.c:1651  */
     {
                /*
                 * Optimization: plain `print' has no expression list, so $3 is 
null.
@@ -2959,17 +2934,17 @@ regular_print:
                }
                (yyval) = add_pending_comment((yyval));
          }
-#line 2963 "awkgram.c" /* yacc.c:1651  */
+#line 2938 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 65:
-#line 1129 "awkgram.y" /* yacc.c:1651  */
+  case 64:
+#line 1112 "awkgram.y" /* yacc.c:1651  */
     { sub_counter = 0; }
-#line 2969 "awkgram.c" /* yacc.c:1651  */
+#line 2944 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 66:
-#line 1130 "awkgram.y" /* yacc.c:1651  */
+  case 65:
+#line 1113 "awkgram.y" /* yacc.c:1651  */
     {
                char *arr = (yyvsp[-2])->lextok;
 
@@ -3003,11 +2978,11 @@ regular_print:
                }
                (yyval) = add_pending_comment((yyval));
          }
-#line 3007 "awkgram.c" /* yacc.c:1651  */
+#line 2982 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 67:
-#line 1168 "awkgram.y" /* yacc.c:1651  */
+  case 66:
+#line 1151 "awkgram.y" /* yacc.c:1651  */
     {
                static bool warned = false;
                char *arr = (yyvsp[-1])->lextok;
@@ -3034,55 +3009,55 @@ regular_print:
                }
                (yyval) = add_pending_comment((yyval));
          }
-#line 3038 "awkgram.c" /* yacc.c:1651  */
+#line 3013 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 68:
-#line 1195 "awkgram.y" /* yacc.c:1651  */
+  case 67:
+#line 1178 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = optimize_assignment((yyvsp[0]));
                (yyval) = add_pending_comment((yyval));
          }
-#line 3047 "awkgram.c" /* yacc.c:1651  */
+#line 3022 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 69:
-#line 1203 "awkgram.y" /* yacc.c:1651  */
+  case 68:
+#line 1186 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 3053 "awkgram.c" /* yacc.c:1651  */
+#line 3028 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 70:
-#line 1205 "awkgram.y" /* yacc.c:1651  */
+  case 69:
+#line 1188 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3059 "awkgram.c" /* yacc.c:1651  */
+#line 3034 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 71:
-#line 1210 "awkgram.y" /* yacc.c:1651  */
+  case 70:
+#line 1193 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 3065 "awkgram.c" /* yacc.c:1651  */
+#line 3040 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 72:
-#line 1212 "awkgram.y" /* yacc.c:1651  */
+  case 71:
+#line 1195 "awkgram.y" /* yacc.c:1651  */
     {
                if ((yyvsp[-1]) == NULL)
                        (yyval) = list_create((yyvsp[0]));
                else
                        (yyval) = list_prepend((yyvsp[-1]), (yyvsp[0]));
          }
-#line 3076 "awkgram.c" /* yacc.c:1651  */
+#line 3051 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 73:
-#line 1219 "awkgram.y" /* yacc.c:1651  */
+  case 72:
+#line 1202 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 3082 "awkgram.c" /* yacc.c:1651  */
+#line 3057 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 74:
-#line 1224 "awkgram.y" /* yacc.c:1651  */
+  case 73:
+#line 1207 "awkgram.y" /* yacc.c:1651  */
     {
                INSTRUCTION *casestmt = (yyvsp[0]);
                if ((yyvsp[0]) == NULL)
@@ -3094,11 +3069,11 @@ regular_print:
                bcfree((yyvsp[-2]));
                (yyval) = (yyvsp[-4]);
          }
-#line 3098 "awkgram.c" /* yacc.c:1651  */
+#line 3073 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 75:
-#line 1236 "awkgram.y" /* yacc.c:1651  */
+  case 74:
+#line 1219 "awkgram.y" /* yacc.c:1651  */
     {
                INSTRUCTION *casestmt = (yyvsp[0]);
                if ((yyvsp[0]) == NULL)
@@ -3109,17 +3084,17 @@ regular_print:
                (yyvsp[-3])->case_stmt = casestmt;
                (yyval) = (yyvsp[-3]);
          }
-#line 3113 "awkgram.c" /* yacc.c:1651  */
+#line 3088 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 76:
-#line 1250 "awkgram.y" /* yacc.c:1651  */
+  case 75:
+#line 1233 "awkgram.y" /* yacc.c:1651  */
     {  (yyval) = (yyvsp[0]); }
-#line 3119 "awkgram.c" /* yacc.c:1651  */
+#line 3094 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 77:
-#line 1252 "awkgram.y" /* yacc.c:1651  */
+  case 76:
+#line 1235 "awkgram.y" /* yacc.c:1651  */
     {
                NODE *n = (yyvsp[0])->memory;
                (void) force_number(n);
@@ -3127,28 +3102,28 @@ regular_print:
                bcfree((yyvsp[-1]));
                (yyval) = (yyvsp[0]);
          }
-#line 3131 "awkgram.c" /* yacc.c:1651  */
+#line 3106 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 78:
-#line 1260 "awkgram.y" /* yacc.c:1651  */
+  case 77:
+#line 1243 "awkgram.y" /* yacc.c:1651  */
     {
                NODE *n = (yyvsp[0])->lasti->memory;
                bcfree((yyvsp[-1]));
                add_sign_to_num(n, '+');
                (yyval) = (yyvsp[0]);
          }
-#line 3142 "awkgram.c" /* yacc.c:1651  */
+#line 3117 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 79:
-#line 1267 "awkgram.y" /* yacc.c:1651  */
+  case 78:
+#line 1250 "awkgram.y" /* yacc.c:1651  */
     {  (yyval) = (yyvsp[0]); }
-#line 3148 "awkgram.c" /* yacc.c:1651  */
+#line 3123 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 80:
-#line 1269 "awkgram.y" /* yacc.c:1651  */
+  case 79:
+#line 1252 "awkgram.y" /* yacc.c:1651  */
     {
                if ((yyvsp[0])->memory->type == Node_regex)
                        (yyvsp[0])->opcode = Op_push_re;
@@ -3156,57 +3131,57 @@ regular_print:
                        (yyvsp[0])->opcode = Op_push;
                (yyval) = (yyvsp[0]);
          }
-#line 3160 "awkgram.c" /* yacc.c:1651  */
+#line 3135 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 81:
-#line 1277 "awkgram.y" /* yacc.c:1651  */
+  case 80:
+#line 1260 "awkgram.y" /* yacc.c:1651  */
     {
                assert(((yyvsp[0])->memory->flags & REGEX) == REGEX);
                (yyvsp[0])->opcode = Op_push_re;
                (yyval) = (yyvsp[0]);
          }
-#line 3170 "awkgram.c" /* yacc.c:1651  */
+#line 3145 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 82:
-#line 1286 "awkgram.y" /* yacc.c:1651  */
+  case 81:
+#line 1269 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3176 "awkgram.c" /* yacc.c:1651  */
+#line 3151 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 83:
-#line 1288 "awkgram.y" /* yacc.c:1651  */
+  case 82:
+#line 1271 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3182 "awkgram.c" /* yacc.c:1651  */
+#line 3157 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 85:
-#line 1298 "awkgram.y" /* yacc.c:1651  */
+  case 84:
+#line 1281 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = (yyvsp[-1]);
          }
-#line 3190 "awkgram.c" /* yacc.c:1651  */
+#line 3165 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 86:
-#line 1305 "awkgram.y" /* yacc.c:1651  */
+  case 85:
+#line 1288 "awkgram.y" /* yacc.c:1651  */
     {
                in_print = false;
                in_parens = 0;
                (yyval) = NULL;
          }
-#line 3200 "awkgram.c" /* yacc.c:1651  */
+#line 3175 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 87:
-#line 1310 "awkgram.y" /* yacc.c:1651  */
+  case 86:
+#line 1293 "awkgram.y" /* yacc.c:1651  */
     { in_print = false; in_parens = 0; }
-#line 3206 "awkgram.c" /* yacc.c:1651  */
+#line 3181 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 88:
-#line 1311 "awkgram.y" /* yacc.c:1651  */
+  case 87:
+#line 1294 "awkgram.y" /* yacc.c:1651  */
     {
                if ((yyvsp[-2])->redir_type == redirect_twoway
                        && (yyvsp[0])->lasti->opcode == Op_K_getline_redir
@@ -3216,63 +3191,63 @@ regular_print:
                        lintwarn(_("concatenation as I/O `>' redirection target 
is ambiguous"));
                (yyval) = list_prepend((yyvsp[0]), (yyvsp[-2]));
          }
-#line 3220 "awkgram.c" /* yacc.c:1651  */
+#line 3195 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 89:
-#line 1324 "awkgram.y" /* yacc.c:1651  */
+  case 88:
+#line 1307 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = mk_condition((yyvsp[-3]), (yyvsp[-5]), (yyvsp[0]), 
NULL, NULL);
          }
-#line 3228 "awkgram.c" /* yacc.c:1651  */
+#line 3203 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 90:
-#line 1329 "awkgram.y" /* yacc.c:1651  */
+  case 89:
+#line 1312 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = mk_condition((yyvsp[-6]), (yyvsp[-8]), (yyvsp[-3]), 
(yyvsp[-2]), (yyvsp[0]));
          }
-#line 3236 "awkgram.c" /* yacc.c:1651  */
+#line 3211 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 95:
-#line 1346 "awkgram.y" /* yacc.c:1651  */
+  case 94:
+#line 1329 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 3242 "awkgram.c" /* yacc.c:1651  */
+#line 3217 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 96:
-#line 1348 "awkgram.y" /* yacc.c:1651  */
+  case 95:
+#line 1331 "awkgram.y" /* yacc.c:1651  */
     {
                bcfree((yyvsp[-1]));
                (yyval) = (yyvsp[0]);
          }
-#line 3251 "awkgram.c" /* yacc.c:1651  */
+#line 3226 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 97:
-#line 1356 "awkgram.y" /* yacc.c:1651  */
+  case 96:
+#line 1339 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 3257 "awkgram.c" /* yacc.c:1651  */
+#line 3232 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 98:
-#line 1358 "awkgram.y" /* yacc.c:1651  */
+  case 97:
+#line 1341 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3263 "awkgram.c" /* yacc.c:1651  */
+#line 3238 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 99:
-#line 1363 "awkgram.y" /* yacc.c:1651  */
+  case 98:
+#line 1346 "awkgram.y" /* yacc.c:1651  */
     {
                (yyvsp[0])->param_count = 0;
                (yyval) = list_create((yyvsp[0]));
          }
-#line 3272 "awkgram.c" /* yacc.c:1651  */
+#line 3247 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 100:
-#line 1368 "awkgram.y" /* yacc.c:1651  */
+  case 99:
+#line 1351 "awkgram.y" /* yacc.c:1651  */
     {
                if ((yyvsp[-2]) != NULL && (yyvsp[0]) != NULL) {
                        (yyvsp[0])->param_count =  
(yyvsp[-2])->lasti->param_count + 1;
@@ -3281,74 +3256,74 @@ regular_print:
                } else
                        (yyval) = NULL;
          }
-#line 3285 "awkgram.c" /* yacc.c:1651  */
+#line 3260 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 101:
-#line 1377 "awkgram.y" /* yacc.c:1651  */
+  case 100:
+#line 1360 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 3291 "awkgram.c" /* yacc.c:1651  */
+#line 3266 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 102:
-#line 1379 "awkgram.y" /* yacc.c:1651  */
+  case 101:
+#line 1362 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[-1]); }
-#line 3297 "awkgram.c" /* yacc.c:1651  */
+#line 3272 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 103:
-#line 1381 "awkgram.y" /* yacc.c:1651  */
+  case 102:
+#line 1364 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[-2]); }
-#line 3303 "awkgram.c" /* yacc.c:1651  */
+#line 3278 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 104:
-#line 1387 "awkgram.y" /* yacc.c:1651  */
+  case 103:
+#line 1370 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 3309 "awkgram.c" /* yacc.c:1651  */
+#line 3284 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 105:
-#line 1389 "awkgram.y" /* yacc.c:1651  */
+  case 104:
+#line 1372 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3315 "awkgram.c" /* yacc.c:1651  */
+#line 3290 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 106:
-#line 1394 "awkgram.y" /* yacc.c:1651  */
+  case 105:
+#line 1377 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 3321 "awkgram.c" /* yacc.c:1651  */
+#line 3296 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 107:
-#line 1396 "awkgram.y" /* yacc.c:1651  */
+  case 106:
+#line 1379 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3327 "awkgram.c" /* yacc.c:1651  */
+#line 3302 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 108:
-#line 1401 "awkgram.y" /* yacc.c:1651  */
+  case 107:
+#line 1384 "awkgram.y" /* yacc.c:1651  */
     {  (yyval) = mk_expression_list(NULL, (yyvsp[0])); }
-#line 3333 "awkgram.c" /* yacc.c:1651  */
+#line 3308 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 109:
-#line 1403 "awkgram.y" /* yacc.c:1651  */
+  case 108:
+#line 1386 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
                yyerrok;
          }
-#line 3342 "awkgram.c" /* yacc.c:1651  */
+#line 3317 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 110:
-#line 1408 "awkgram.y" /* yacc.c:1651  */
+  case 109:
+#line 1391 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 3348 "awkgram.c" /* yacc.c:1651  */
+#line 3323 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 111:
-#line 1410 "awkgram.y" /* yacc.c:1651  */
+  case 110:
+#line 1393 "awkgram.y" /* yacc.c:1651  */
     {
                /*
                 * Returning the expression list instead of NULL lets
@@ -3356,62 +3331,62 @@ regular_print:
                 */
                (yyval) = (yyvsp[-1]);
          }
-#line 3360 "awkgram.c" /* yacc.c:1651  */
+#line 3335 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 112:
-#line 1418 "awkgram.y" /* yacc.c:1651  */
+  case 111:
+#line 1401 "awkgram.y" /* yacc.c:1651  */
     {
                /* Ditto */
                (yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
          }
-#line 3369 "awkgram.c" /* yacc.c:1651  */
+#line 3344 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 113:
-#line 1423 "awkgram.y" /* yacc.c:1651  */
+  case 112:
+#line 1406 "awkgram.y" /* yacc.c:1651  */
     {
                /* Ditto */
                (yyval) = (yyvsp[-2]);
          }
-#line 3378 "awkgram.c" /* yacc.c:1651  */
+#line 3353 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 114:
-#line 1431 "awkgram.y" /* yacc.c:1651  */
+  case 113:
+#line 1414 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 3384 "awkgram.c" /* yacc.c:1651  */
+#line 3359 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 115:
-#line 1433 "awkgram.y" /* yacc.c:1651  */
+  case 114:
+#line 1416 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3390 "awkgram.c" /* yacc.c:1651  */
+#line 3365 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 116:
-#line 1438 "awkgram.y" /* yacc.c:1651  */
+  case 115:
+#line 1421 "awkgram.y" /* yacc.c:1651  */
     {  (yyval) = mk_expression_list(NULL, (yyvsp[0])); }
-#line 3396 "awkgram.c" /* yacc.c:1651  */
+#line 3371 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 117:
-#line 1440 "awkgram.y" /* yacc.c:1651  */
+  case 116:
+#line 1423 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
                yyerrok;
          }
-#line 3405 "awkgram.c" /* yacc.c:1651  */
+#line 3380 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 118:
-#line 1445 "awkgram.y" /* yacc.c:1651  */
+  case 117:
+#line 1428 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 3411 "awkgram.c" /* yacc.c:1651  */
+#line 3386 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 119:
-#line 1447 "awkgram.y" /* yacc.c:1651  */
+  case 118:
+#line 1430 "awkgram.y" /* yacc.c:1651  */
     {
                /*
                 * Returning the expression list instead of NULL lets
@@ -3419,72 +3394,72 @@ regular_print:
                 */
                (yyval) = (yyvsp[-1]);
          }
-#line 3423 "awkgram.c" /* yacc.c:1651  */
+#line 3398 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 120:
-#line 1455 "awkgram.y" /* yacc.c:1651  */
+  case 119:
+#line 1438 "awkgram.y" /* yacc.c:1651  */
     {
                /* Ditto */
                (yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
          }
-#line 3432 "awkgram.c" /* yacc.c:1651  */
+#line 3407 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 121:
-#line 1460 "awkgram.y" /* yacc.c:1651  */
+  case 120:
+#line 1443 "awkgram.y" /* yacc.c:1651  */
     {
                /* Ditto */
                (yyval) = (yyvsp[-2]);
          }
-#line 3441 "awkgram.c" /* yacc.c:1651  */
+#line 3416 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 122:
-#line 1467 "awkgram.y" /* yacc.c:1651  */
+  case 121:
+#line 1450 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3447 "awkgram.c" /* yacc.c:1651  */
+#line 3422 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 123:
-#line 1468 "awkgram.y" /* yacc.c:1651  */
+  case 122:
+#line 1451 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = list_create((yyvsp[0])); }
-#line 3453 "awkgram.c" /* yacc.c:1651  */
+#line 3428 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 124:
-#line 1474 "awkgram.y" /* yacc.c:1651  */
+  case 123:
+#line 1457 "awkgram.y" /* yacc.c:1651  */
     {
                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[-2]), (yyvsp[0]), (yyvsp[-1]));
          }
-#line 3464 "awkgram.c" /* yacc.c:1651  */
+#line 3439 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 125:
-#line 1481 "awkgram.y" /* yacc.c:1651  */
+  case 124:
+#line 1464 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = mk_assignment((yyvsp[-2]), list_create((yyvsp[0])), 
(yyvsp[-1]));
          }
-#line 3472 "awkgram.c" /* yacc.c:1651  */
+#line 3447 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 126:
-#line 1485 "awkgram.y" /* yacc.c:1651  */
+  case 125:
+#line 1468 "awkgram.y" /* yacc.c:1651  */
     {  (yyval) = mk_boolean((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3478 "awkgram.c" /* yacc.c:1651  */
+#line 3453 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 127:
-#line 1487 "awkgram.y" /* yacc.c:1651  */
+  case 126:
+#line 1470 "awkgram.y" /* yacc.c:1651  */
     {  (yyval) = mk_boolean((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3484 "awkgram.c" /* yacc.c:1651  */
+#line 3459 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 128:
-#line 1489 "awkgram.y" /* yacc.c:1651  */
+  case 127:
+#line 1472 "awkgram.y" /* yacc.c:1651  */
     {
                if ((yyvsp[-2])->lasti->opcode == Op_match_rec)
                        warning_ln((yyvsp[-1])->source_line,
@@ -3497,11 +3472,11 @@ regular_print:
                bcfree((yyvsp[0]));
                (yyval) = list_append((yyvsp[-2]), (yyvsp[-1]));
          }
-#line 3501 "awkgram.c" /* yacc.c:1651  */
+#line 3476 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 129:
-#line 1502 "awkgram.y" /* yacc.c:1651  */
+  case 128:
+#line 1485 "awkgram.y" /* yacc.c:1651  */
     {
                if ((yyvsp[-2])->lasti->opcode == Op_match_rec)
                        warning_ln((yyvsp[-1])->source_line,
@@ -3518,11 +3493,11 @@ regular_print:
                        (yyval) = list_append(list_merge((yyvsp[-2]), 
(yyvsp[0])), (yyvsp[-1]));
                }
          }
-#line 3522 "awkgram.c" /* yacc.c:1651  */
+#line 3497 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 130:
-#line 1519 "awkgram.y" /* yacc.c:1651  */
+  case 129:
+#line 1502 "awkgram.y" /* yacc.c:1651  */
     {
                if (do_lint_old)
                        warning_ln((yyvsp[-1])->source_line,
@@ -3532,91 +3507,91 @@ regular_print:
                (yyvsp[-1])->expr_count = 1;
                (yyval) = list_append(list_merge((yyvsp[-2]), (yyvsp[0])), 
(yyvsp[-1]));
          }
-#line 3536 "awkgram.c" /* yacc.c:1651  */
+#line 3511 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 131:
-#line 1529 "awkgram.y" /* yacc.c:1651  */
+  case 130:
+#line 1512 "awkgram.y" /* yacc.c:1651  */
     {
                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[-2]), (yyvsp[0])), 
(yyvsp[-1]));
          }
-#line 3547 "awkgram.c" /* yacc.c:1651  */
+#line 3522 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 132:
-#line 1536 "awkgram.y" /* yacc.c:1651  */
+  case 131:
+#line 1519 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = mk_condition((yyvsp[-4]), (yyvsp[-3]), (yyvsp[-2]), 
(yyvsp[-1]), (yyvsp[0])); }
-#line 3553 "awkgram.c" /* yacc.c:1651  */
+#line 3528 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 133:
-#line 1538 "awkgram.y" /* yacc.c:1651  */
+  case 132:
+#line 1521 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3559 "awkgram.c" /* yacc.c:1651  */
+#line 3534 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 134:
-#line 1543 "awkgram.y" /* yacc.c:1651  */
+  case 133:
+#line 1526 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3565 "awkgram.c" /* yacc.c:1651  */
+#line 3540 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 135:
-#line 1545 "awkgram.y" /* yacc.c:1651  */
+  case 134:
+#line 1528 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3571 "awkgram.c" /* yacc.c:1651  */
+#line 3546 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 136:
-#line 1547 "awkgram.y" /* yacc.c:1651  */
+  case 135:
+#line 1530 "awkgram.y" /* yacc.c:1651  */
     {
                (yyvsp[0])->opcode = Op_assign_quotient;
                (yyval) = (yyvsp[0]);
          }
-#line 3580 "awkgram.c" /* yacc.c:1651  */
+#line 3555 "awkgram.c" /* yacc.c:1651  */
+    break;
+
+  case 136:
+#line 1538 "awkgram.y" /* yacc.c:1651  */
+    { (yyval) = (yyvsp[0]); }
+#line 3561 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 137:
-#line 1555 "awkgram.y" /* yacc.c:1651  */
+#line 1540 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3586 "awkgram.c" /* yacc.c:1651  */
+#line 3567 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 138:
-#line 1557 "awkgram.y" /* yacc.c:1651  */
+#line 1545 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3592 "awkgram.c" /* yacc.c:1651  */
+#line 3573 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 139:
-#line 1562 "awkgram.y" /* yacc.c:1651  */
+#line 1547 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3598 "awkgram.c" /* yacc.c:1651  */
+#line 3579 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 140:
-#line 1564 "awkgram.y" /* yacc.c:1651  */
+#line 1552 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3604 "awkgram.c" /* yacc.c:1651  */
+#line 3585 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 141:
-#line 1569 "awkgram.y" /* yacc.c:1651  */
+#line 1554 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3610 "awkgram.c" /* yacc.c:1651  */
+#line 3591 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 142:
-#line 1571 "awkgram.y" /* yacc.c:1651  */
-    { (yyval) = (yyvsp[0]); }
-#line 3616 "awkgram.c" /* yacc.c:1651  */
-    break;
-
-  case 143:
-#line 1573 "awkgram.y" /* yacc.c:1651  */
+#line 1556 "awkgram.y" /* yacc.c:1651  */
     {
                int count = 2;
                bool is_simple_var = false;
@@ -3670,47 +3645,47 @@ regular_print:
                                max_args = count;
                }
          }
-#line 3674 "awkgram.c" /* yacc.c:1651  */
+#line 3649 "awkgram.c" /* yacc.c:1651  */
+    break;
+
+  case 144:
+#line 1615 "awkgram.y" /* yacc.c:1651  */
+    { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
+#line 3655 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 145:
-#line 1632 "awkgram.y" /* yacc.c:1651  */
+#line 1617 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3680 "awkgram.c" /* yacc.c:1651  */
+#line 3661 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 146:
-#line 1634 "awkgram.y" /* yacc.c:1651  */
+#line 1619 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3686 "awkgram.c" /* yacc.c:1651  */
+#line 3667 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 147:
-#line 1636 "awkgram.y" /* yacc.c:1651  */
+#line 1621 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3692 "awkgram.c" /* yacc.c:1651  */
+#line 3673 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 148:
-#line 1638 "awkgram.y" /* yacc.c:1651  */
+#line 1623 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3698 "awkgram.c" /* yacc.c:1651  */
+#line 3679 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 149:
-#line 1640 "awkgram.y" /* yacc.c:1651  */
+#line 1625 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3704 "awkgram.c" /* yacc.c:1651  */
+#line 3685 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 150:
-#line 1642 "awkgram.y" /* yacc.c:1651  */
-    { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3710 "awkgram.c" /* yacc.c:1651  */
-    break;
-
-  case 151:
-#line 1644 "awkgram.y" /* yacc.c:1651  */
+#line 1627 "awkgram.y" /* yacc.c:1651  */
     {
                /*
                 * In BEGINFILE/ENDFILE, allow `getline [var] < file'
@@ -3724,29 +3699,29 @@ regular_print:
                                _("non-redirected `getline' undefined inside 
END action"));
                (yyval) = mk_getline((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]), 
redirect_input);
          }
-#line 3728 "awkgram.c" /* yacc.c:1651  */
+#line 3703 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 152:
-#line 1658 "awkgram.y" /* yacc.c:1651  */
+  case 151:
+#line 1641 "awkgram.y" /* yacc.c:1651  */
     {
                (yyvsp[0])->opcode = Op_postincrement;
                (yyval) = mk_assignment((yyvsp[-1]), NULL, (yyvsp[0]));
          }
-#line 3737 "awkgram.c" /* yacc.c:1651  */
+#line 3712 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 153:
-#line 1663 "awkgram.y" /* yacc.c:1651  */
+  case 152:
+#line 1646 "awkgram.y" /* yacc.c:1651  */
     {
                (yyvsp[0])->opcode = Op_postdecrement;
                (yyval) = mk_assignment((yyvsp[-1]), NULL, (yyvsp[0]));
          }
-#line 3746 "awkgram.c" /* yacc.c:1651  */
+#line 3721 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 154:
-#line 1668 "awkgram.y" /* yacc.c:1651  */
+  case 153:
+#line 1651 "awkgram.y" /* yacc.c:1651  */
     {
                if (do_lint_old) {
                    warning_ln((yyvsp[-1])->source_line,
@@ -3766,64 +3741,64 @@ regular_print:
                        (yyval) = list_append(list_merge(t, (yyvsp[0])), 
(yyvsp[-1]));
                }
          }
-#line 3770 "awkgram.c" /* yacc.c:1651  */
+#line 3745 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 155:
-#line 1693 "awkgram.y" /* yacc.c:1651  */
+  case 154:
+#line 1676 "awkgram.y" /* yacc.c:1651  */
     {
                  (yyval) = mk_getline((yyvsp[-1]), (yyvsp[0]), (yyvsp[-3]), 
(yyvsp[-2])->redir_type);
                  bcfree((yyvsp[-2]));
                }
-#line 3779 "awkgram.c" /* yacc.c:1651  */
+#line 3754 "awkgram.c" /* yacc.c:1651  */
+    break;
+
+  case 155:
+#line 1682 "awkgram.y" /* yacc.c:1651  */
+    { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
+#line 3760 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 156:
-#line 1699 "awkgram.y" /* yacc.c:1651  */
+#line 1684 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3785 "awkgram.c" /* yacc.c:1651  */
+#line 3766 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 157:
-#line 1701 "awkgram.y" /* yacc.c:1651  */
+#line 1686 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3791 "awkgram.c" /* yacc.c:1651  */
+#line 3772 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 158:
-#line 1703 "awkgram.y" /* yacc.c:1651  */
+#line 1688 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3797 "awkgram.c" /* yacc.c:1651  */
+#line 3778 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 159:
-#line 1705 "awkgram.y" /* yacc.c:1651  */
+#line 1690 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3803 "awkgram.c" /* yacc.c:1651  */
+#line 3784 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 160:
-#line 1707 "awkgram.y" /* yacc.c:1651  */
+#line 1692 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3809 "awkgram.c" /* yacc.c:1651  */
+#line 3790 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 161:
-#line 1709 "awkgram.y" /* yacc.c:1651  */
-    { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3815 "awkgram.c" /* yacc.c:1651  */
-    break;
-
-  case 162:
-#line 1714 "awkgram.y" /* yacc.c:1651  */
+#line 1697 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = list_create((yyvsp[0]));
          }
-#line 3823 "awkgram.c" /* yacc.c:1651  */
+#line 3798 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 163:
-#line 1718 "awkgram.y" /* yacc.c:1651  */
+  case 162:
+#line 1701 "awkgram.y" /* yacc.c:1651  */
     {
                if ((yyvsp[0])->opcode == Op_match_rec) {
                        (yyvsp[0])->opcode = Op_nomatch;
@@ -3855,11 +3830,11 @@ regular_print:
                        }
                }
           }
-#line 3859 "awkgram.c" /* yacc.c:1651  */
+#line 3834 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 164:
-#line 1750 "awkgram.y" /* yacc.c:1651  */
+  case 163:
+#line 1733 "awkgram.y" /* yacc.c:1651  */
     {
                // Always include. Allows us to lint warn on
                // print "foo" > "bar" 1
@@ -3867,31 +3842,31 @@ regular_print:
                // print "foo" > ("bar" 1)
                (yyval) = list_append((yyvsp[-1]), bcalloc(Op_parens, 1, 
sourceline));
          }
-#line 3871 "awkgram.c" /* yacc.c:1651  */
+#line 3846 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 165:
-#line 1758 "awkgram.y" /* yacc.c:1651  */
+  case 164:
+#line 1741 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = snode((yyvsp[-1]), (yyvsp[-3]));
                if ((yyval) == NULL)
                        YYABORT;
          }
-#line 3881 "awkgram.c" /* yacc.c:1651  */
+#line 3856 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 166:
-#line 1764 "awkgram.y" /* yacc.c:1651  */
+  case 165:
+#line 1747 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = snode((yyvsp[-1]), (yyvsp[-3]));
                if ((yyval) == NULL)
                        YYABORT;
          }
-#line 3891 "awkgram.c" /* yacc.c:1651  */
+#line 3866 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 167:
-#line 1770 "awkgram.y" /* yacc.c:1651  */
+  case 166:
+#line 1753 "awkgram.y" /* yacc.c:1651  */
     {
                static bool warned = false;
 
@@ -3904,45 +3879,45 @@ regular_print:
                if ((yyval) == NULL)
                        YYABORT;
          }
-#line 3908 "awkgram.c" /* yacc.c:1651  */
+#line 3883 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 170:
-#line 1785 "awkgram.y" /* yacc.c:1651  */
+  case 169:
+#line 1768 "awkgram.y" /* yacc.c:1651  */
     {
                (yyvsp[-1])->opcode = Op_preincrement;
                (yyval) = mk_assignment((yyvsp[0]), NULL, (yyvsp[-1]));
          }
-#line 3917 "awkgram.c" /* yacc.c:1651  */
+#line 3892 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 171:
-#line 1790 "awkgram.y" /* yacc.c:1651  */
+  case 170:
+#line 1773 "awkgram.y" /* yacc.c:1651  */
     {
                (yyvsp[-1])->opcode = Op_predecrement;
                (yyval) = mk_assignment((yyvsp[0]), NULL, (yyvsp[-1]));
          }
-#line 3926 "awkgram.c" /* yacc.c:1651  */
+#line 3901 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 172:
-#line 1795 "awkgram.y" /* yacc.c:1651  */
+  case 171:
+#line 1778 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = list_create((yyvsp[0]));
          }
-#line 3934 "awkgram.c" /* yacc.c:1651  */
+#line 3909 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 173:
-#line 1799 "awkgram.y" /* yacc.c:1651  */
+  case 172:
+#line 1782 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = list_create((yyvsp[0]));
          }
-#line 3942 "awkgram.c" /* yacc.c:1651  */
+#line 3917 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 174:
-#line 1803 "awkgram.y" /* yacc.c:1651  */
+  case 173:
+#line 1786 "awkgram.y" /* yacc.c:1651  */
     {
                if ((yyvsp[0])->lasti->opcode == Op_push_i
                        && ((yyvsp[0])->lasti->memory->flags & STRING) == 0
@@ -3957,11 +3932,11 @@ regular_print:
                        (yyval) = list_append((yyvsp[0]), (yyvsp[-1]));
                }
          }
-#line 3961 "awkgram.c" /* yacc.c:1651  */
+#line 3936 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 175:
-#line 1818 "awkgram.y" /* yacc.c:1651  */
+  case 174:
+#line 1801 "awkgram.y" /* yacc.c:1651  */
     {
                if ((yyvsp[0])->lasti->opcode == Op_push_i
                        && ((yyvsp[0])->lasti->memory->flags & STRING) == 0
@@ -3979,20 +3954,20 @@ regular_print:
                        (yyval) = list_append((yyvsp[0]), (yyvsp[-1]));
                }
          }
-#line 3983 "awkgram.c" /* yacc.c:1651  */
+#line 3958 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 176:
-#line 1839 "awkgram.y" /* yacc.c:1651  */
+  case 175:
+#line 1822 "awkgram.y" /* yacc.c:1651  */
     {
                func_use((yyvsp[0])->lasti->func_name, FUNC_USE);
                (yyval) = (yyvsp[0]);
          }
-#line 3992 "awkgram.c" /* yacc.c:1651  */
+#line 3967 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 177:
-#line 1844 "awkgram.y" /* yacc.c:1651  */
+  case 176:
+#line 1827 "awkgram.y" /* yacc.c:1651  */
     {
                /* indirect function call */
                INSTRUCTION *f, *t;
@@ -4026,11 +4001,11 @@ regular_print:
                (yyval) = list_prepend((yyvsp[0]), t);
                at_seen = false;
          }
-#line 4030 "awkgram.c" /* yacc.c:1651  */
+#line 4005 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 178:
-#line 1881 "awkgram.y" /* yacc.c:1651  */
+  case 177:
+#line 1864 "awkgram.y" /* yacc.c:1651  */
     {
                NODE *n;
 
@@ -4055,49 +4030,49 @@ regular_print:
                        (yyval) = list_append(t, (yyvsp[-3]));
                }
          }
-#line 4059 "awkgram.c" /* yacc.c:1651  */
+#line 4034 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 179:
-#line 1909 "awkgram.y" /* yacc.c:1651  */
+  case 178:
+#line 1892 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 4065 "awkgram.c" /* yacc.c:1651  */
+#line 4040 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 180:
-#line 1911 "awkgram.y" /* yacc.c:1651  */
+  case 179:
+#line 1894 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 4071 "awkgram.c" /* yacc.c:1651  */
+#line 4046 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 181:
-#line 1916 "awkgram.y" /* yacc.c:1651  */
+  case 180:
+#line 1899 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 4077 "awkgram.c" /* yacc.c:1651  */
+#line 4052 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 182:
-#line 1918 "awkgram.y" /* yacc.c:1651  */
+  case 181:
+#line 1901 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[-1]); }
-#line 4083 "awkgram.c" /* yacc.c:1651  */
+#line 4058 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 183:
-#line 1923 "awkgram.y" /* yacc.c:1651  */
+  case 182:
+#line 1906 "awkgram.y" /* yacc.c:1651  */
     {  (yyval) = (yyvsp[0]); }
-#line 4089 "awkgram.c" /* yacc.c:1651  */
+#line 4064 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 184:
-#line 1925 "awkgram.y" /* yacc.c:1651  */
+  case 183:
+#line 1908 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = list_merge((yyvsp[-1]), (yyvsp[0]));
          }
-#line 4097 "awkgram.c" /* yacc.c:1651  */
+#line 4072 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 185:
-#line 1932 "awkgram.y" /* yacc.c:1651  */
+  case 184:
+#line 1915 "awkgram.y" /* yacc.c:1651  */
     {
                INSTRUCTION *ip = (yyvsp[0])->lasti;
                int count = ip->sub_count;      /* # of SUBSEP-seperated 
expressions */
@@ -4111,11 +4086,11 @@ regular_print:
                sub_counter++;  /* count # of dimensions */
                (yyval) = (yyvsp[0]);
          }
-#line 4115 "awkgram.c" /* yacc.c:1651  */
+#line 4090 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 186:
-#line 1949 "awkgram.y" /* yacc.c:1651  */
+  case 185:
+#line 1932 "awkgram.y" /* yacc.c:1651  */
     {
                INSTRUCTION *t = (yyvsp[-1]);
                if ((yyvsp[-1]) == NULL) {
@@ -4129,31 +4104,31 @@ regular_print:
                        (yyvsp[0])->sub_count = count_expressions(&t, false);
                (yyval) = list_append(t, (yyvsp[0]));
          }
-#line 4133 "awkgram.c" /* yacc.c:1651  */
+#line 4108 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 187:
-#line 1966 "awkgram.y" /* yacc.c:1651  */
+  case 186:
+#line 1949 "awkgram.y" /* yacc.c:1651  */
     {  (yyval) = (yyvsp[0]); }
-#line 4139 "awkgram.c" /* yacc.c:1651  */
+#line 4114 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 188:
-#line 1968 "awkgram.y" /* yacc.c:1651  */
+  case 187:
+#line 1951 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = list_merge((yyvsp[-1]), (yyvsp[0]));
          }
-#line 4147 "awkgram.c" /* yacc.c:1651  */
+#line 4122 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 189:
-#line 1975 "awkgram.y" /* yacc.c:1651  */
+  case 188:
+#line 1958 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[-1]); }
-#line 4153 "awkgram.c" /* yacc.c:1651  */
+#line 4128 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 190:
-#line 1980 "awkgram.y" /* yacc.c:1651  */
+  case 189:
+#line 1963 "awkgram.y" /* yacc.c:1651  */
     {
                char *var_name = (yyvsp[0])->lextok;
 
@@ -4161,22 +4136,22 @@ regular_print:
                (yyvsp[0])->memory = variable((yyvsp[0])->source_line, 
var_name, Node_var_new);
                (yyval) = list_create((yyvsp[0]));
          }
-#line 4165 "awkgram.c" /* yacc.c:1651  */
+#line 4140 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 191:
-#line 1988 "awkgram.y" /* yacc.c:1651  */
+  case 190:
+#line 1971 "awkgram.y" /* yacc.c:1651  */
     {
                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 4176 "awkgram.c" /* yacc.c:1651  */
+#line 4151 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 192:
-#line 1998 "awkgram.y" /* yacc.c:1651  */
+  case 191:
+#line 1981 "awkgram.y" /* yacc.c:1651  */
     {
                INSTRUCTION *ip = (yyvsp[0])->nexti;
                if (ip->opcode == Op_push
@@ -4188,73 +4163,73 @@ regular_print:
                } else
                        (yyval) = (yyvsp[0]);
          }
-#line 4192 "awkgram.c" /* yacc.c:1651  */
+#line 4167 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 193:
-#line 2010 "awkgram.y" /* yacc.c:1651  */
+  case 192:
+#line 1993 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = list_append((yyvsp[-1]), (yyvsp[-2]));
                if ((yyvsp[0]) != NULL)
                        mk_assignment((yyvsp[-1]), NULL, (yyvsp[0]));
          }
-#line 4202 "awkgram.c" /* yacc.c:1651  */
+#line 4177 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 194:
-#line 2019 "awkgram.y" /* yacc.c:1651  */
+  case 193:
+#line 2002 "awkgram.y" /* yacc.c:1651  */
     {
                (yyvsp[0])->opcode = Op_postincrement;
          }
-#line 4210 "awkgram.c" /* yacc.c:1651  */
+#line 4185 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 195:
-#line 2023 "awkgram.y" /* yacc.c:1651  */
+  case 194:
+#line 2006 "awkgram.y" /* yacc.c:1651  */
     {
                (yyvsp[0])->opcode = Op_postdecrement;
          }
-#line 4218 "awkgram.c" /* yacc.c:1651  */
+#line 4193 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 196:
-#line 2026 "awkgram.y" /* yacc.c:1651  */
+  case 195:
+#line 2009 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 4224 "awkgram.c" /* yacc.c:1651  */
+#line 4199 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 198:
-#line 2034 "awkgram.y" /* yacc.c:1651  */
+  case 197:
+#line 2017 "awkgram.y" /* yacc.c:1651  */
     { yyerrok; }
-#line 4230 "awkgram.c" /* yacc.c:1651  */
+#line 4205 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 199:
-#line 2038 "awkgram.y" /* yacc.c:1651  */
+  case 198:
+#line 2021 "awkgram.y" /* yacc.c:1651  */
     { yyerrok; }
-#line 4236 "awkgram.c" /* yacc.c:1651  */
+#line 4211 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 202:
-#line 2047 "awkgram.y" /* yacc.c:1651  */
+  case 201:
+#line 2030 "awkgram.y" /* yacc.c:1651  */
     { yyerrok; }
-#line 4242 "awkgram.c" /* yacc.c:1651  */
+#line 4217 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 203:
-#line 2051 "awkgram.y" /* yacc.c:1651  */
+  case 202:
+#line 2034 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); yyerrok; }
-#line 4248 "awkgram.c" /* yacc.c:1651  */
+#line 4223 "awkgram.c" /* yacc.c:1651  */
     break;
 
-  case 204:
-#line 2055 "awkgram.y" /* yacc.c:1651  */
+  case 203:
+#line 2038 "awkgram.y" /* yacc.c:1651  */
     { yyerrok; }
-#line 4254 "awkgram.c" /* yacc.c:1651  */
+#line 4229 "awkgram.c" /* yacc.c:1651  */
     break;
 
 
-#line 4258 "awkgram.c" /* yacc.c:1651  */
+#line 4233 "awkgram.c" /* yacc.c:1651  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -4482,7 +4457,7 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 2057 "awkgram.y" /* yacc.c:1910  */
+#line 2040 "awkgram.y" /* yacc.c:1910  */
 
 
 struct token {
diff --git a/awkgram.y b/awkgram.y
index 3ba0ed1..1afad27 100644
--- a/awkgram.y
+++ b/awkgram.y
@@ -602,22 +602,6 @@ statement_term
        | semi opt_nls
        ;
 
-switch_head
-       : LEX_SWITCH '(' exp r_paren opt_nls
-         {
-               INSTRUCTION *ip;
-
-               ip = $3;
-               if (do_pretty_print) {
-                       (void) list_prepend(ip, $1);
-                       (void) list_prepend(ip, instruction(Op_exec_count));
-               }
-               /* else
-                       $1 is NULL */
-               $$ = ip;
-         }
-       ;
-
 statement
        : semi opt_nls
          { $$ = NULL; }
@@ -630,7 +614,7 @@ statement
                else
                        $$ = $1;
          }
-       | switch_head l_brace case_statements opt_nls r_brace
+       | LEX_SWITCH '(' exp r_paren opt_nls l_brace case_statements opt_nls 
r_brace
          {
                INSTRUCTION *dflt, *curr = NULL, *cexp, *cstmt;
                INSTRUCTION *ip, *nextc, *tbreak;
@@ -645,12 +629,11 @@ statement
                dflt = instruction(Op_jmp);
                dflt->target_jmp = tbreak;      /* if no case match and no 
explicit default */
 
-               if ($3 != NULL) {
-                       curr = $3->nexti;
-                       bcfree($3);     /* Op_list */
-               }
-               /*  else
-                       curr = NULL; */
+               if ($7 != NULL) {
+                       curr = $7->nexti;
+                       bcfree($7);     /* Op_list */
+               } /*  else
+                               curr = NULL; */
 
                for (; curr != NULL; curr = nextc) {
                        INSTRUCTION *caseexp = curr->case_exp;
@@ -704,15 +687,15 @@ statement
                if (case_values != NULL)
                        efree(case_values);
 
-               ip = $1;
+               ip = $3;
                if (do_pretty_print) {
-                       INSTRUCTION *exp = $1->nexti->nexti;
-                       exp->target_break = tbreak;
-                       (exp + 1)->switch_start = cexp->nexti;
-                       (exp + 1)->switch_end = cexp->lasti;
-               }
-               /* else
-                       $1 is NULL */
+                       (void) list_prepend(ip, $1);
+                       (void) list_prepend(ip, instruction(Op_exec_count));
+                       $1->target_break = tbreak;
+                       ($1 + 1)->switch_start = cexp->nexti;
+                       ($1 + 1)->switch_end = cexp->lasti;
+               }/* else
+                               $1 is NULL */
 
                (void) list_append(cexp, dflt);
                (void) list_merge(ip, cexp);

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

Summary of changes:
 ChangeLog |   17 +
 awk.h     |    1 +
 awkgram.c | 2332 ++++++++++++++++++++++++++++++-------------------------------
 awkgram.y |  451 +++++-------
 4 files changed, 1332 insertions(+), 1469 deletions(-)


hooks/post-receive
-- 
gawk



reply via email to

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