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-3485-g4a3d2f2
Date: Tue, 16 Oct 2018 14:11:14 -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  4a3d2f254868347ddf54bc649c1ebf1d0af5ae0c (commit)
       via  8848f21e0a2e0223a3963f84cf24aa1bbf4f7e55 (commit)
      from  19ecd045e33ad66f27d859034141ccf09c8032b9 (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=4a3d2f254868347ddf54bc649c1ebf1d0af5ae0c

commit 4a3d2f254868347ddf54bc649c1ebf1d0af5ae0c
Author: Arnold D. Robbins <address@hidden>
Date:   Tue Oct 16 21:10:59 2018 +0300

    Fix compiler warning from Cygwin.

diff --git a/ChangeLog b/ChangeLog
index f4a49ba..6806273 100755
--- a/ChangeLog
+++ b/ChangeLog
@@ -6,6 +6,7 @@
        * debug.c (print_instruction): Handle comments for case and default.
        Simplify printing of comments.
        * profile.c (pprint): Handle comments for case and default.
+       Remove compiler warning in Op_and/Op_or handling.
 
 2018-10-14         Arnold D. Robbins     <address@hidden>
 
diff --git a/profile.c b/profile.c
index e6a528d..3a4ec04 100644
--- a/profile.c
+++ b/profile.c
@@ -420,7 +420,7 @@ cleanup:
                                emalloc(str, char *, len, "pprint");
                                sprintf(str, "%s%s%s%.*s %s", t1->pp_str, 
op2str(pc->opcode),
                                                pc->comment->memory->stptr,
-                                               indent_level + 1, tabs, 
t2->pp_str);
+                                               (int) indent_level + 1, tabs, 
t2->pp_str);
                        }
                        pp_free(t1);
                        pp_free(t2);

http://git.sv.gnu.org/cgit/gawk.git/commit/?id=8848f21e0a2e0223a3963f84cf24aa1bbf4f7e55

commit 8848f21e0a2e0223a3963f84cf24aa1bbf4f7e55
Author: Arnold D. Robbins <address@hidden>
Date:   Tue Oct 16 21:09:13 2018 +0300

    Continue with comments, especially case and default.

diff --git a/ChangeLog b/ChangeLog
index 08a584c..f4a49ba 100755
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2018-10-16         Arnold D. Robbins     <address@hidden>
+
+       * awkgram.y (Grammar): Improve comment handling for many plain
+       statements. Improve handling for case and default.
+       (yylex): After a colon, only allow newline if was part of ?:.
+       * debug.c (print_instruction): Handle comments for case and default.
+       Simplify printing of comments.
+       * profile.c (pprint): Handle comments for case and default.
+
 2018-10-14         Arnold D. Robbins     <address@hidden>
 
        * awkgram.y (Grammar): Add comment handling for do...while.
diff --git a/awkgram.c b/awkgram.c
index 5097cfa..d191b15 100644
--- a/awkgram.c
+++ b/awkgram.c
@@ -62,7 +62,7 @@
 
 
 /* Copy the first part of user declarations.  */
-#line 45 "awkgram.y" /* yacc.c:339  */
+#line 44 "awkgram.y" /* yacc.c:339  */
 
 #ifdef GAWKDEBUG
 #define YYDEBUG 12
@@ -662,27 +662,27 @@ static const yytype_uint8 yytranslate[] =
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   228,   228,   229,   234,   242,   246,   258,   263,   274,
-     281,   291,   304,   312,   314,   319,   327,   329,   335,   339,
-     344,   374,   387,   400,   407,   417,   429,   431,   433,   439,
-     447,   448,   452,   452,   486,   485,   519,   534,   536,   541,
-     542,   556,   561,   562,   566,   577,   581,   588,   696,   747,
-     797,   911,   918,   925,   935,   943,   951,   960,   971,   987,
-     986,   998,  1010,  1010,  1108,  1108,  1141,  1171,  1179,  1180,
-    1186,  1187,  1194,  1199,  1211,  1225,  1227,  1235,  1242,  1244,
-    1252,  1261,  1263,  1272,  1273,  1281,  1286,  1286,  1299,  1305,
-    1317,  1318,  1340,  1341,  1347,  1348,  1357,  1358,  1363,  1368,
-    1385,  1387,  1389,  1396,  1397,  1403,  1404,  1409,  1411,  1416,
-    1418,  1426,  1431,  1440,  1441,  1446,  1448,  1453,  1455,  1463,
-    1468,  1476,  1477,  1482,  1489,  1493,  1495,  1497,  1510,  1527,
-    1537,  1544,  1546,  1551,  1553,  1555,  1563,  1565,  1570,  1572,
-    1577,  1579,  1581,  1638,  1640,  1642,  1644,  1646,  1648,  1650,
-    1652,  1666,  1671,  1676,  1701,  1707,  1709,  1711,  1713,  1715,
-    1717,  1722,  1726,  1758,  1766,  1772,  1778,  1791,  1792,  1793,
-    1798,  1803,  1807,  1811,  1826,  1847,  1852,  1889,  1918,  1919,
-    1925,  1926,  1931,  1933,  1940,  1957,  1974,  1976,  1983,  1988,
-    1996,  2006,  2018,  2027,  2031,  2036,  2040,  2044,  2048,  2053,
-    2054,  2058,  2062,  2066
+       0,   227,   227,   228,   233,   241,   245,   257,   262,   276,
+     283,   293,   306,   314,   316,   321,   329,   331,   337,   341,
+     346,   376,   389,   402,   409,   419,   431,   433,   435,   441,
+     449,   450,   454,   454,   488,   487,   521,   536,   538,   543,
+     544,   558,   563,   564,   568,   579,   583,   590,   698,   749,
+     799,   919,   926,   933,   943,   953,   963,   974,   987,  1005,
+    1004,  1018,  1036,  1036,  1134,  1134,  1167,  1197,  1205,  1206,
+    1212,  1213,  1220,  1225,  1238,  1253,  1255,  1263,  1270,  1272,
+    1280,  1289,  1291,  1300,  1301,  1309,  1314,  1314,  1327,  1333,
+    1345,  1346,  1368,  1369,  1375,  1376,  1385,  1386,  1391,  1396,
+    1413,  1415,  1417,  1424,  1425,  1431,  1432,  1437,  1439,  1444,
+    1446,  1454,  1459,  1468,  1469,  1474,  1476,  1481,  1483,  1491,
+    1496,  1504,  1505,  1510,  1517,  1521,  1523,  1525,  1538,  1555,
+    1565,  1572,  1574,  1579,  1581,  1583,  1591,  1593,  1598,  1600,
+    1605,  1607,  1609,  1666,  1668,  1670,  1672,  1674,  1676,  1678,
+    1680,  1694,  1699,  1704,  1729,  1735,  1737,  1739,  1741,  1743,
+    1745,  1750,  1754,  1786,  1794,  1800,  1806,  1819,  1820,  1821,
+    1826,  1831,  1835,  1839,  1854,  1875,  1880,  1917,  1946,  1947,
+    1953,  1954,  1959,  1961,  1968,  1985,  2002,  2004,  2011,  2016,
+    2024,  2034,  2046,  2055,  2059,  2064,  2068,  2072,  2076,  2081,
+    2082,  2086,  2090,  2094
 };
 #endif
 
@@ -1881,13 +1881,13 @@ yyreduce:
   switch (yyn)
     {
         case 2:
-#line 228 "awkgram.y" /* yacc.c:1651  */
+#line 227 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
 #line 1887 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 3:
-#line 230 "awkgram.y" /* yacc.c:1651  */
+#line 229 "awkgram.y" /* yacc.c:1651  */
     {
                rule = 0;
                yyerrok;
@@ -1896,7 +1896,7 @@ yyreduce:
     break;
 
   case 4:
-#line 235 "awkgram.y" /* yacc.c:1651  */
+#line 234 "awkgram.y" /* yacc.c:1651  */
     {
                if ((yyvsp[0]) != NULL) {
                        merge_comments((yyvsp[0]), NULL);
@@ -1908,7 +1908,7 @@ yyreduce:
     break;
 
   case 5:
-#line 243 "awkgram.y" /* yacc.c:1651  */
+#line 242 "awkgram.y" /* yacc.c:1651  */
     {
                next_sourcefile();
          }
@@ -1916,7 +1916,7 @@ yyreduce:
     break;
 
   case 6:
-#line 247 "awkgram.y" /* yacc.c:1651  */
+#line 246 "awkgram.y" /* yacc.c:1651  */
     {
                rule = 0;
                /*
@@ -1929,7 +1929,7 @@ yyreduce:
     break;
 
   case 7:
-#line 259 "awkgram.y" /* yacc.c:1651  */
+#line 258 "awkgram.y" /* yacc.c:1651  */
     {
                (void) append_rule((yyvsp[-1]), (yyvsp[0]));
                first_rule = false;
@@ -1938,7 +1938,7 @@ yyreduce:
     break;
 
   case 8:
-#line 264 "awkgram.y" /* yacc.c:1651  */
+#line 263 "awkgram.y" /* yacc.c:1651  */
     {
                if (rule != Rule) {
                        msg(_("%s blocks must have an action part"), 
ruletab[rule]);
@@ -1946,53 +1946,56 @@ yyreduce:
                } else if ((yyvsp[-1]) == NULL) {
                        msg(_("each rule must have a pattern or an action 
part"));
                        errcount++;
-               } else          /* pattern rule with non-empty pattern */
+               } else {        /* pattern rule with non-empty pattern */
+                       if ((yyvsp[0]) != NULL)
+                               list_append((yyvsp[-1]), (yyvsp[0]));
                        (void) append_rule((yyvsp[-1]), NULL);
+               }
          }
-#line 1953 "awkgram.c" /* yacc.c:1651  */
+#line 1956 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 9:
-#line 275 "awkgram.y" /* yacc.c:1651  */
+#line 277 "awkgram.y" /* yacc.c:1651  */
     {
                in_function = NULL;
                (void) mk_function((yyvsp[-1]), (yyvsp[0]));
                want_param_names = DONT_CHECK;
                yyerrok;
          }
-#line 1964 "awkgram.c" /* yacc.c:1651  */
+#line 1967 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 10:
-#line 282 "awkgram.y" /* yacc.c:1651  */
+#line 284 "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 */
+                       bcfree((yyvsp[0]));
                }
                yyerrok;
          }
-#line 1978 "awkgram.c" /* yacc.c:1651  */
+#line 1981 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 11:
-#line 292 "awkgram.y" /* yacc.c:1651  */
+#line 294 "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 */
+                       bcfree((yyvsp[0]));
                }
                yyerrok;
          }
-#line 1992 "awkgram.c" /* yacc.c:1651  */
+#line 1995 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 12:
-#line 305 "awkgram.y" /* yacc.c:1651  */
+#line 307 "awkgram.y" /* yacc.c:1651  */
     {
                if (include_source((yyvsp[0])) < 0)
                        YYABORT;
@@ -2000,23 +2003,23 @@ yyreduce:
                bcfree((yyvsp[0]));
                (yyval) = NULL;
          }
-#line 2004 "awkgram.c" /* yacc.c:1651  */
+#line 2007 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 13:
-#line 313 "awkgram.y" /* yacc.c:1651  */
+#line 315 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 2010 "awkgram.c" /* yacc.c:1651  */
+#line 2013 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 14:
-#line 315 "awkgram.y" /* yacc.c:1651  */
+#line 317 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 2016 "awkgram.c" /* yacc.c:1651  */
+#line 2019 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 15:
-#line 320 "awkgram.y" /* yacc.c:1651  */
+#line 322 "awkgram.y" /* yacc.c:1651  */
     {
                if (load_library((yyvsp[0])) < 0)
                        YYABORT;
@@ -2024,40 +2027,40 @@ yyreduce:
                bcfree((yyvsp[0]));
                (yyval) = NULL;
          }
-#line 2028 "awkgram.c" /* yacc.c:1651  */
+#line 2031 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 16:
-#line 328 "awkgram.y" /* yacc.c:1651  */
+#line 330 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 2034 "awkgram.c" /* yacc.c:1651  */
+#line 2037 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 17:
-#line 330 "awkgram.y" /* yacc.c:1651  */
+#line 332 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 2040 "awkgram.c" /* yacc.c:1651  */
+#line 2043 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 18:
-#line 335 "awkgram.y" /* yacc.c:1651  */
+#line 337 "awkgram.y" /* yacc.c:1651  */
     {
                rule = Rule;
                (yyval) = NULL;
          }
-#line 2049 "awkgram.c" /* yacc.c:1651  */
+#line 2052 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 19:
-#line 340 "awkgram.y" /* yacc.c:1651  */
+#line 342 "awkgram.y" /* yacc.c:1651  */
     {
                rule = Rule;
          }
-#line 2057 "awkgram.c" /* yacc.c:1651  */
+#line 2060 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 20:
-#line 345 "awkgram.y" /* yacc.c:1651  */
+#line 347 "awkgram.y" /* yacc.c:1651  */
     {
                INSTRUCTION *tp;
 
@@ -2087,11 +2090,11 @@ yyreduce:
                        (yyval) = list_append(list_merge((yyvsp[-3]), 
(yyvsp[0])), tp);
                rule = Rule;
          }
-#line 2091 "awkgram.c" /* yacc.c:1651  */
+#line 2094 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 21:
-#line 375 "awkgram.y" /* yacc.c:1651  */
+#line 377 "awkgram.y" /* yacc.c:1651  */
     {
                static int begin_seen = 0;
 
@@ -2104,11 +2107,11 @@ yyreduce:
                (yyvsp[0])->source_file = source;
                (yyval) = (yyvsp[0]);
          }
-#line 2108 "awkgram.c" /* yacc.c:1651  */
+#line 2111 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 22:
-#line 388 "awkgram.y" /* yacc.c:1651  */
+#line 390 "awkgram.y" /* yacc.c:1651  */
     {
                static int end_seen = 0;
 
@@ -2121,33 +2124,33 @@ yyreduce:
                (yyvsp[0])->source_file = source;
                (yyval) = (yyvsp[0]);
          }
-#line 2125 "awkgram.c" /* yacc.c:1651  */
+#line 2128 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 23:
-#line 401 "awkgram.y" /* yacc.c:1651  */
+#line 403 "awkgram.y" /* yacc.c:1651  */
     {
                func_first = false;
                (yyvsp[0])->in_rule = rule = BEGINFILE;
                (yyvsp[0])->source_file = source;
                (yyval) = (yyvsp[0]);
          }
-#line 2136 "awkgram.c" /* yacc.c:1651  */
+#line 2139 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 24:
-#line 408 "awkgram.y" /* yacc.c:1651  */
+#line 410 "awkgram.y" /* yacc.c:1651  */
     {
                func_first = false;
                (yyvsp[0])->in_rule = rule = ENDFILE;
                (yyvsp[0])->source_file = source;
                (yyval) = (yyvsp[0]);
          }
-#line 2147 "awkgram.c" /* yacc.c:1651  */
+#line 2150 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 25:
-#line 418 "awkgram.y" /* yacc.c:1651  */
+#line 420 "awkgram.y" /* yacc.c:1651  */
     {
                INSTRUCTION *ip = make_braced_statements((yyvsp[-4]), 
(yyvsp[-3]), (yyvsp[-2]));
 
@@ -2156,48 +2159,48 @@ yyreduce:
 
                (yyval) = ip;
          }
-#line 2160 "awkgram.c" /* yacc.c:1651  */
+#line 2163 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 26:
-#line 430 "awkgram.y" /* yacc.c:1651  */
+#line 432 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 2166 "awkgram.c" /* yacc.c:1651  */
+#line 2169 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 27:
-#line 432 "awkgram.y" /* yacc.c:1651  */
+#line 434 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 2172 "awkgram.c" /* yacc.c:1651  */
+#line 2175 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 28:
-#line 434 "awkgram.y" /* yacc.c:1651  */
+#line 436 "awkgram.y" /* yacc.c:1651  */
     {
                yyerror(_("`%s' is a built-in function, it cannot be 
redefined"),
                                        tokstart);
                YYABORT;
          }
-#line 2182 "awkgram.c" /* yacc.c:1651  */
+#line 2185 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 29:
-#line 440 "awkgram.y" /* yacc.c:1651  */
+#line 442 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = (yyvsp[0]);
                at_seen = false;
          }
-#line 2191 "awkgram.c" /* yacc.c:1651  */
+#line 2194 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 32:
-#line 452 "awkgram.y" /* yacc.c:1651  */
+#line 454 "awkgram.y" /* yacc.c:1651  */
     { want_param_names = FUNC_HEADER; }
-#line 2197 "awkgram.c" /* yacc.c:1651  */
+#line 2200 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 33:
-#line 453 "awkgram.y" /* yacc.c:1651  */
+#line 455 "awkgram.y" /* yacc.c:1651  */
     {
                INSTRUCTION *func_comment = NULL;
                // Merge any comments found in the parameter list with those
@@ -2223,17 +2226,17 @@ yyreduce:
                (yyval) = (yyvsp[-6]);
                want_param_names = FUNC_BODY;
          }
-#line 2227 "awkgram.c" /* yacc.c:1651  */
+#line 2230 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 34:
-#line 486 "awkgram.y" /* yacc.c:1651  */
+#line 488 "awkgram.y" /* yacc.c:1651  */
     { want_regexp = true; }
-#line 2233 "awkgram.c" /* yacc.c:1651  */
+#line 2236 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 35:
-#line 488 "awkgram.y" /* yacc.c:1651  */
+#line 490 "awkgram.y" /* yacc.c:1651  */
     {
                  NODE *n, *exp;
                  char *re;
@@ -2262,11 +2265,11 @@ yyreduce:
                  (yyval)->opcode = Op_match_rec;
                  (yyval)->memory = n;
                }
-#line 2266 "awkgram.c" /* yacc.c:1651  */
+#line 2269 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 36:
-#line 520 "awkgram.y" /* yacc.c:1651  */
+#line 522 "awkgram.y" /* yacc.c:1651  */
     {
                  char *re;
                  size_t len;
@@ -2279,23 +2282,23 @@ yyreduce:
                  (yyval)->opcode = Op_push_re;
                  (yyval)->memory = make_typed_regex(re, len);
                }
-#line 2283 "awkgram.c" /* yacc.c:1651  */
+#line 2286 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 37:
-#line 535 "awkgram.y" /* yacc.c:1651  */
+#line 537 "awkgram.y" /* yacc.c:1651  */
     { bcfree((yyvsp[0])); }
-#line 2289 "awkgram.c" /* yacc.c:1651  */
+#line 2292 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 39:
-#line 541 "awkgram.y" /* yacc.c:1651  */
+#line 543 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 2295 "awkgram.c" /* yacc.c:1651  */
+#line 2298 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 40:
-#line 543 "awkgram.y" /* yacc.c:1651  */
+#line 545 "awkgram.y" /* yacc.c:1651  */
     {
                if ((yyvsp[0]) == NULL) {
                        (yyval) = (yyvsp[-1]);
@@ -2309,29 +2312,29 @@ yyreduce:
                }
                yyerrok;
          }
-#line 2313 "awkgram.c" /* yacc.c:1651  */
+#line 2316 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 41:
-#line 557 "awkgram.y" /* yacc.c:1651  */
+#line 559 "awkgram.y" /* yacc.c:1651  */
     {  (yyval) = NULL; }
-#line 2319 "awkgram.c" /* yacc.c:1651  */
+#line 2322 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 42:
-#line 561 "awkgram.y" /* yacc.c:1651  */
+#line 563 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 2325 "awkgram.c" /* yacc.c:1651  */
+#line 2328 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 43:
-#line 562 "awkgram.y" /* yacc.c:1651  */
+#line 564 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 2331 "awkgram.c" /* yacc.c:1651  */
+#line 2334 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 44:
-#line 567 "awkgram.y" /* yacc.c:1651  */
+#line 569 "awkgram.y" /* yacc.c:1651  */
     {
                if ((yyvsp[0]) != NULL) {
                        INSTRUCTION *ip;
@@ -2342,30 +2345,30 @@ yyreduce:
                } else
                        (yyval) = NULL;
          }
-#line 2346 "awkgram.c" /* yacc.c:1651  */
+#line 2349 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 45:
-#line 578 "awkgram.y" /* yacc.c:1651  */
+#line 580 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = make_braced_statements((yyvsp[-2]), (yyvsp[-1]), 
(yyvsp[0]));
          }
-#line 2354 "awkgram.c" /* yacc.c:1651  */
+#line 2357 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 46:
-#line 582 "awkgram.y" /* yacc.c:1651  */
+#line 584 "awkgram.y" /* yacc.c:1651  */
     {
                if (do_pretty_print)
                        (yyval) = list_prepend((yyvsp[0]), 
instruction(Op_exec_count));
                else
                        (yyval) = (yyvsp[0]);
          }
-#line 2365 "awkgram.c" /* yacc.c:1651  */
+#line 2368 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 47:
-#line 589 "awkgram.y" /* yacc.c:1651  */
+#line 591 "awkgram.y" /* yacc.c:1651  */
     {
                INSTRUCTION *dflt, *curr = NULL, *cexp, *cstmt;
                INSTRUCTION *ip, *nextc, *tbreak;
@@ -2473,11 +2476,11 @@ yyreduce:
                break_allowed--;
                fix_break_continue(ip, tbreak, NULL);
          }
-#line 2477 "awkgram.c" /* yacc.c:1651  */
+#line 2480 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 48:
-#line 697 "awkgram.y" /* yacc.c:1651  */
+#line 699 "awkgram.y" /* yacc.c:1651  */
     {
                /*
                 *    -----------------
@@ -2528,11 +2531,11 @@ yyreduce:
                continue_allowed--;
                fix_break_continue(ip, tbreak, tcont);
          }
-#line 2532 "awkgram.c" /* yacc.c:1651  */
+#line 2535 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 49:
-#line 748 "awkgram.y" /* yacc.c:1651  */
+#line 750 "awkgram.y" /* yacc.c:1651  */
     {
                /*
                 *    -----------------
@@ -2582,11 +2585,11 @@ yyreduce:
                /* else
                        $1 and $4 are NULLs */
          }
-#line 2586 "awkgram.c" /* yacc.c:1651  */
+#line 2589 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 50:
-#line 798 "awkgram.y" /* yacc.c:1651  */
+#line 800 "awkgram.y" /* yacc.c:1651  */
     {
                INSTRUCTION *ip;
                char *var_name = (yyvsp[-5])->lextok;
@@ -2631,6 +2634,8 @@ yyreduce:
                                bcfree((yyvsp[-5]));
                                bcfree((yyvsp[-4]));
                                bcfree((yyvsp[-3]));
+                               if ((yyvsp[-1]) != NULL)
+                                       (yyvsp[0]) = list_prepend((yyvsp[0]), 
(yyvsp[-1]));
                                (yyval) = (yyvsp[0]);
                        } else
                                goto regular_loop;
@@ -2688,8 +2693,12 @@ regular_loop:
                                ((yyvsp[-7]) + 1)->forloop_body = ip->lasti;
                        }
 
-                       if ((yyvsp[0]) != NULL)
+                       if ((yyvsp[0]) != NULL) {
+                               if ((yyvsp[-1]) != NULL)
+                                       (yyvsp[0]) = list_prepend((yyvsp[0]), 
(yyvsp[-1]));
                                (void) list_merge(ip, (yyvsp[0]));
+                       } else if ((yyvsp[-1]) != NULL)
+                               (void) list_append(ip, (yyvsp[-1]));
 
                        (void) list_append(ip, instruction(Op_jmp));
                        ip->lasti->target_jmp = (yyvsp[-4]);
@@ -2700,68 +2709,72 @@ regular_loop:
                break_allowed--;
                continue_allowed--;
          }
-#line 2704 "awkgram.c" /* yacc.c:1651  */
+#line 2713 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 51:
-#line 912 "awkgram.y" /* yacc.c:1651  */
+#line 920 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = mk_for_loop((yyvsp[-11]), (yyvsp[-9]), (yyvsp[-6]), 
(yyvsp[-3]), (yyvsp[0]));
 
                break_allowed--;
                continue_allowed--;
          }
-#line 2715 "awkgram.c" /* yacc.c:1651  */
+#line 2724 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 52:
-#line 919 "awkgram.y" /* yacc.c:1651  */
+#line 927 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = mk_for_loop((yyvsp[-10]), (yyvsp[-8]), (INSTRUCTION 
*) NULL, (yyvsp[-3]), (yyvsp[0]));
 
                break_allowed--;
                continue_allowed--;
          }
-#line 2726 "awkgram.c" /* yacc.c:1651  */
+#line 2735 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 53:
-#line 926 "awkgram.y" /* yacc.c:1651  */
+#line 934 "awkgram.y" /* yacc.c:1651  */
     {
                if (do_pretty_print)
                        (yyval) = list_prepend((yyvsp[0]), 
instruction(Op_exec_count));
                else
                        (yyval) = (yyvsp[0]);
          }
-#line 2737 "awkgram.c" /* yacc.c:1651  */
+#line 2746 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 54:
-#line 936 "awkgram.y" /* yacc.c:1651  */
+#line 944 "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]));
+               if ((yyvsp[0]) != NULL)
+                       (yyval) = list_append((yyval), (yyvsp[0]));
          }
-#line 2749 "awkgram.c" /* yacc.c:1651  */
+#line 2760 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 55:
-#line 944 "awkgram.y" /* yacc.c:1651  */
+#line 954 "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]));
+               if ((yyvsp[0]) != NULL)
+                       (yyval) = list_append((yyval), (yyvsp[0]));
          }
-#line 2761 "awkgram.c" /* yacc.c:1651  */
+#line 2774 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 56:
-#line 952 "awkgram.y" /* yacc.c:1651  */
+#line 964 "awkgram.y" /* yacc.c:1651  */
     {
                /* if inside function (rule = 0), resolve context at run-time */
                if (rule && rule != Rule)
@@ -2769,12 +2782,14 @@ regular_loop:
                                _("`next' used in %s action"), ruletab[rule]);
                (yyvsp[-1])->target_jmp = ip_rec;
                (yyval) = list_create((yyvsp[-1]));
+               if ((yyvsp[0]) != NULL)
+                       (yyval) = list_append((yyval), (yyvsp[0]));
          }
-#line 2774 "awkgram.c" /* yacc.c:1651  */
+#line 2789 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 57:
-#line 961 "awkgram.y" /* yacc.c:1651  */
+#line 975 "awkgram.y" /* yacc.c:1651  */
     {
                /* if inside function (rule = 0), resolve context at run-time */
                if (rule == BEGIN || rule == END || rule == ENDFILE)
@@ -2784,12 +2799,14 @@ regular_loop:
                (yyvsp[-1])->target_newfile = ip_newfile;
                (yyvsp[-1])->target_endfile = ip_endfile;
                (yyval) = list_create((yyvsp[-1]));
+               if ((yyvsp[0]) != NULL)
+                       (yyval) = list_append((yyval), (yyvsp[0]));
          }
-#line 2789 "awkgram.c" /* yacc.c:1651  */
+#line 2806 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 58:
-#line 972 "awkgram.y" /* yacc.c:1651  */
+#line 988 "awkgram.y" /* yacc.c:1651  */
     {
                /* Initialize the two possible jump targets, the actual target
                 * is resolved at run-time.
@@ -2803,21 +2820,23 @@ regular_loop:
                        (yyval)->nexti->memory = dupnode(Nnull_string);
                } else
                        (yyval) = list_append((yyvsp[-1]), (yyvsp[-2]));
+               if ((yyvsp[0]) != NULL)
+                       (yyval) = list_append((yyval), (yyvsp[0]));
          }
-#line 2808 "awkgram.c" /* yacc.c:1651  */
+#line 2827 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 59:
-#line 987 "awkgram.y" /* yacc.c:1651  */
+#line 1005 "awkgram.y" /* yacc.c:1651  */
     {
                if (! in_function)
                        yyerror(_("`return' used outside function context"));
          }
-#line 2817 "awkgram.c" /* yacc.c:1651  */
+#line 2836 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 60:
-#line 990 "awkgram.y" /* yacc.c:1651  */
+#line 1008 "awkgram.y" /* yacc.c:1651  */
     {
                if ((yyvsp[-1]) == NULL) {
                        (yyval) = list_create((yyvsp[-3]));
@@ -2825,18 +2844,31 @@ regular_loop:
                        (yyval)->nexti->memory = dupnode(Nnull_string);
                } else
                        (yyval) = list_append((yyvsp[-1]), (yyvsp[-3]));
+               if ((yyvsp[0]) != NULL)
+                       (yyval) = list_append((yyval), (yyvsp[0]));
+         }
+#line 2851 "awkgram.c" /* yacc.c:1651  */
+    break;
+
+  case 61:
+#line 1019 "awkgram.y" /* yacc.c:1651  */
+    {
+               if ((yyvsp[0]) != NULL)
+                       (yyval) = list_append((yyvsp[-1]), (yyvsp[0]));
+               else
+                       (yyval) = (yyvsp[-1]);
          }
-#line 2830 "awkgram.c" /* yacc.c:1651  */
+#line 2862 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 62:
-#line 1010 "awkgram.y" /* yacc.c:1651  */
+#line 1036 "awkgram.y" /* yacc.c:1651  */
     { in_print = true; in_parens = 0; }
-#line 2836 "awkgram.c" /* yacc.c:1651  */
+#line 2868 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 63:
-#line 1011 "awkgram.y" /* yacc.c:1651  */
+#line 1037 "awkgram.y" /* yacc.c:1651  */
     {
                /*
                 * Optimization: plain `print' has no expression list, so $3 is 
null.
@@ -2933,17 +2965,17 @@ regular_print:
                        }
                }
          }
-#line 2937 "awkgram.c" /* yacc.c:1651  */
+#line 2969 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 64:
-#line 1108 "awkgram.y" /* yacc.c:1651  */
+#line 1134 "awkgram.y" /* yacc.c:1651  */
     { sub_counter = 0; }
-#line 2943 "awkgram.c" /* yacc.c:1651  */
+#line 2975 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 65:
-#line 1109 "awkgram.y" /* yacc.c:1651  */
+#line 1135 "awkgram.y" /* yacc.c:1651  */
     {
                char *arr = (yyvsp[-2])->lextok;
 
@@ -2976,11 +3008,11 @@ regular_print:
                        (yyval) = list_append(list_append((yyvsp[0]), 
(yyvsp[-2])), (yyvsp[-3]));
                }
          }
-#line 2980 "awkgram.c" /* yacc.c:1651  */
+#line 3012 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 66:
-#line 1146 "awkgram.y" /* yacc.c:1651  */
+#line 1172 "awkgram.y" /* yacc.c:1651  */
     {
                static bool warned = false;
                char *arr = (yyvsp[-1])->lextok;
@@ -3006,54 +3038,54 @@ regular_print:
                                fatal(_("`delete' is not allowed with 
FUNCTAB"));
                }
          }
-#line 3010 "awkgram.c" /* yacc.c:1651  */
+#line 3042 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 67:
-#line 1172 "awkgram.y" /* yacc.c:1651  */
+#line 1198 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = optimize_assignment((yyvsp[0]));
          }
-#line 3018 "awkgram.c" /* yacc.c:1651  */
+#line 3050 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 68:
-#line 1179 "awkgram.y" /* yacc.c:1651  */
+#line 1205 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 3024 "awkgram.c" /* yacc.c:1651  */
+#line 3056 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 69:
-#line 1181 "awkgram.y" /* yacc.c:1651  */
+#line 1207 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3030 "awkgram.c" /* yacc.c:1651  */
+#line 3062 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 70:
-#line 1186 "awkgram.y" /* yacc.c:1651  */
+#line 1212 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 3036 "awkgram.c" /* yacc.c:1651  */
+#line 3068 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 71:
-#line 1188 "awkgram.y" /* yacc.c:1651  */
+#line 1214 "awkgram.y" /* yacc.c:1651  */
     {
                if ((yyvsp[-1]) == NULL)
                        (yyval) = list_create((yyvsp[0]));
                else
                        (yyval) = list_prepend((yyvsp[-1]), (yyvsp[0]));
          }
-#line 3047 "awkgram.c" /* yacc.c:1651  */
+#line 3079 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 72:
-#line 1195 "awkgram.y" /* yacc.c:1651  */
+#line 1221 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 3053 "awkgram.c" /* yacc.c:1651  */
+#line 3085 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 73:
-#line 1200 "awkgram.y" /* yacc.c:1651  */
+#line 1226 "awkgram.y" /* yacc.c:1651  */
     {
                INSTRUCTION *casestmt = (yyvsp[0]);
                if ((yyvsp[0]) == NULL)
@@ -3062,14 +3094,15 @@ regular_print:
                        (void) list_prepend(casestmt, 
instruction(Op_exec_count));
                (yyvsp[-4])->case_exp = (yyvsp[-3]);
                (yyvsp[-4])->case_stmt = casestmt;
+               (yyvsp[-4])->comment = (yyvsp[-1]);
                bcfree((yyvsp[-2]));
                (yyval) = (yyvsp[-4]);
          }
-#line 3069 "awkgram.c" /* yacc.c:1651  */
+#line 3102 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 74:
-#line 1212 "awkgram.y" /* yacc.c:1651  */
+#line 1239 "awkgram.y" /* yacc.c:1651  */
     {
                INSTRUCTION *casestmt = (yyvsp[0]);
                if ((yyvsp[0]) == NULL)
@@ -3078,19 +3111,20 @@ regular_print:
                        (void) list_prepend(casestmt, 
instruction(Op_exec_count));
                bcfree((yyvsp[-2]));
                (yyvsp[-3])->case_stmt = casestmt;
+               (yyvsp[-3])->comment = (yyvsp[-1]);
                (yyval) = (yyvsp[-3]);
          }
-#line 3084 "awkgram.c" /* yacc.c:1651  */
+#line 3118 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 75:
-#line 1226 "awkgram.y" /* yacc.c:1651  */
+#line 1254 "awkgram.y" /* yacc.c:1651  */
     {  (yyval) = (yyvsp[0]); }
-#line 3090 "awkgram.c" /* yacc.c:1651  */
+#line 3124 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 76:
-#line 1228 "awkgram.y" /* yacc.c:1651  */
+#line 1256 "awkgram.y" /* yacc.c:1651  */
     {
                NODE *n = (yyvsp[0])->memory;
                (void) force_number(n);
@@ -3098,28 +3132,28 @@ regular_print:
                bcfree((yyvsp[-1]));
                (yyval) = (yyvsp[0]);
          }
-#line 3102 "awkgram.c" /* yacc.c:1651  */
+#line 3136 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 77:
-#line 1236 "awkgram.y" /* yacc.c:1651  */
+#line 1264 "awkgram.y" /* yacc.c:1651  */
     {
                NODE *n = (yyvsp[0])->lasti->memory;
                bcfree((yyvsp[-1]));
                add_sign_to_num(n, '+');
                (yyval) = (yyvsp[0]);
          }
-#line 3113 "awkgram.c" /* yacc.c:1651  */
+#line 3147 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 78:
-#line 1243 "awkgram.y" /* yacc.c:1651  */
+#line 1271 "awkgram.y" /* yacc.c:1651  */
     {  (yyval) = (yyvsp[0]); }
-#line 3119 "awkgram.c" /* yacc.c:1651  */
+#line 3153 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 79:
-#line 1245 "awkgram.y" /* yacc.c:1651  */
+#line 1273 "awkgram.y" /* yacc.c:1651  */
     {
                if ((yyvsp[0])->memory->type == Node_regex)
                        (yyvsp[0])->opcode = Op_push_re;
@@ -3127,57 +3161,57 @@ regular_print:
                        (yyvsp[0])->opcode = Op_push;
                (yyval) = (yyvsp[0]);
          }
-#line 3131 "awkgram.c" /* yacc.c:1651  */
+#line 3165 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 80:
-#line 1253 "awkgram.y" /* yacc.c:1651  */
+#line 1281 "awkgram.y" /* yacc.c:1651  */
     {
                assert(((yyvsp[0])->memory->flags & REGEX) == REGEX);
                (yyvsp[0])->opcode = Op_push_re;
                (yyval) = (yyvsp[0]);
          }
-#line 3141 "awkgram.c" /* yacc.c:1651  */
+#line 3175 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 81:
-#line 1262 "awkgram.y" /* yacc.c:1651  */
+#line 1290 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3147 "awkgram.c" /* yacc.c:1651  */
+#line 3181 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 82:
-#line 1264 "awkgram.y" /* yacc.c:1651  */
+#line 1292 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3153 "awkgram.c" /* yacc.c:1651  */
+#line 3187 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 84:
-#line 1274 "awkgram.y" /* yacc.c:1651  */
+#line 1302 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = (yyvsp[-1]);
          }
-#line 3161 "awkgram.c" /* yacc.c:1651  */
+#line 3195 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 85:
-#line 1281 "awkgram.y" /* yacc.c:1651  */
+#line 1309 "awkgram.y" /* yacc.c:1651  */
     {
                in_print = false;
                in_parens = 0;
                (yyval) = NULL;
          }
-#line 3171 "awkgram.c" /* yacc.c:1651  */
+#line 3205 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 86:
-#line 1286 "awkgram.y" /* yacc.c:1651  */
+#line 1314 "awkgram.y" /* yacc.c:1651  */
     { in_print = false; in_parens = 0; }
-#line 3177 "awkgram.c" /* yacc.c:1651  */
+#line 3211 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 87:
-#line 1287 "awkgram.y" /* yacc.c:1651  */
+#line 1315 "awkgram.y" /* yacc.c:1651  */
     {
                if ((yyvsp[-2])->redir_type == redirect_twoway
                        && (yyvsp[0])->lasti->opcode == Op_K_getline_redir
@@ -3187,21 +3221,21 @@ regular_print:
                        lintwarn(_("concatenation as I/O `>' redirection target 
is ambiguous"));
                (yyval) = list_prepend((yyvsp[0]), (yyvsp[-2]));
          }
-#line 3191 "awkgram.c" /* yacc.c:1651  */
+#line 3225 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 88:
-#line 1300 "awkgram.y" /* yacc.c:1651  */
+#line 1328 "awkgram.y" /* yacc.c:1651  */
     {
                if ((yyvsp[-1]) != NULL)
                        (yyvsp[-5])->comment = (yyvsp[-1]);
                (yyval) = mk_condition((yyvsp[-3]), (yyvsp[-5]), (yyvsp[0]), 
NULL, NULL);
          }
-#line 3201 "awkgram.c" /* yacc.c:1651  */
+#line 3235 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 89:
-#line 1307 "awkgram.y" /* yacc.c:1651  */
+#line 1335 "awkgram.y" /* yacc.c:1651  */
     {
                if ((yyvsp[-4]) != NULL)
                        (yyvsp[-8])->comment = (yyvsp[-4]);
@@ -3209,17 +3243,17 @@ regular_print:
                        (yyvsp[-2])->comment = (yyvsp[-1]);
                (yyval) = mk_condition((yyvsp[-6]), (yyvsp[-8]), (yyvsp[-3]), 
(yyvsp[-2]), (yyvsp[0]));
          }
-#line 3213 "awkgram.c" /* yacc.c:1651  */
+#line 3247 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 90:
-#line 1317 "awkgram.y" /* yacc.c:1651  */
+#line 1345 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3219 "awkgram.c" /* yacc.c:1651  */
+#line 3253 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 91:
-#line 1319 "awkgram.y" /* yacc.c:1651  */
+#line 1347 "awkgram.y" /* yacc.c:1651  */
     {
                if ((yyvsp[-1]) != NULL && (yyvsp[0]) != NULL) {
                        if ((yyvsp[-1])->memory->comment_type == EOL_COMMENT) {
@@ -3237,59 +3271,59 @@ regular_print:
                } else
                        (yyval) = NULL;
          }
-#line 3241 "awkgram.c" /* yacc.c:1651  */
+#line 3275 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 92:
-#line 1340 "awkgram.y" /* yacc.c:1651  */
+#line 1368 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 3247 "awkgram.c" /* yacc.c:1651  */
+#line 3281 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 93:
-#line 1342 "awkgram.y" /* yacc.c:1651  */
+#line 1370 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3253 "awkgram.c" /* yacc.c:1651  */
+#line 3287 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 94:
-#line 1347 "awkgram.y" /* yacc.c:1651  */
+#line 1375 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 3259 "awkgram.c" /* yacc.c:1651  */
+#line 3293 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 95:
-#line 1349 "awkgram.y" /* yacc.c:1651  */
+#line 1377 "awkgram.y" /* yacc.c:1651  */
     {
                bcfree((yyvsp[-1]));
                (yyval) = (yyvsp[0]);
          }
-#line 3268 "awkgram.c" /* yacc.c:1651  */
+#line 3302 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 96:
-#line 1357 "awkgram.y" /* yacc.c:1651  */
+#line 1385 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 3274 "awkgram.c" /* yacc.c:1651  */
+#line 3308 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 97:
-#line 1359 "awkgram.y" /* yacc.c:1651  */
+#line 1387 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3280 "awkgram.c" /* yacc.c:1651  */
+#line 3314 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 98:
-#line 1364 "awkgram.y" /* yacc.c:1651  */
+#line 1392 "awkgram.y" /* yacc.c:1651  */
     {
                (yyvsp[0])->param_count = 0;
                (yyval) = list_create((yyvsp[0]));
          }
-#line 3289 "awkgram.c" /* yacc.c:1651  */
+#line 3323 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 99:
-#line 1369 "awkgram.y" /* yacc.c:1651  */
+#line 1397 "awkgram.y" /* yacc.c:1651  */
     {
                if ((yyvsp[-2]) != NULL && (yyvsp[0]) != NULL) {
                        (yyvsp[0])->param_count = 
(yyvsp[-2])->lasti->param_count + 1;
@@ -3306,74 +3340,74 @@ regular_print:
                } else
                        (yyval) = NULL;
          }
-#line 3310 "awkgram.c" /* yacc.c:1651  */
+#line 3344 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 100:
-#line 1386 "awkgram.y" /* yacc.c:1651  */
+#line 1414 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 3316 "awkgram.c" /* yacc.c:1651  */
+#line 3350 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 101:
-#line 1388 "awkgram.y" /* yacc.c:1651  */
+#line 1416 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[-1]); }
-#line 3322 "awkgram.c" /* yacc.c:1651  */
+#line 3356 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 102:
-#line 1390 "awkgram.y" /* yacc.c:1651  */
+#line 1418 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[-2]); }
-#line 3328 "awkgram.c" /* yacc.c:1651  */
+#line 3362 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 103:
-#line 1396 "awkgram.y" /* yacc.c:1651  */
+#line 1424 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 3334 "awkgram.c" /* yacc.c:1651  */
+#line 3368 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 104:
-#line 1398 "awkgram.y" /* yacc.c:1651  */
+#line 1426 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3340 "awkgram.c" /* yacc.c:1651  */
+#line 3374 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 105:
-#line 1403 "awkgram.y" /* yacc.c:1651  */
+#line 1431 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 3346 "awkgram.c" /* yacc.c:1651  */
+#line 3380 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 106:
-#line 1405 "awkgram.y" /* yacc.c:1651  */
+#line 1433 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3352 "awkgram.c" /* yacc.c:1651  */
+#line 3386 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 107:
-#line 1410 "awkgram.y" /* yacc.c:1651  */
+#line 1438 "awkgram.y" /* yacc.c:1651  */
     {  (yyval) = mk_expression_list(NULL, (yyvsp[0])); }
-#line 3358 "awkgram.c" /* yacc.c:1651  */
+#line 3392 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 108:
-#line 1412 "awkgram.y" /* yacc.c:1651  */
+#line 1440 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
                yyerrok;
          }
-#line 3367 "awkgram.c" /* yacc.c:1651  */
+#line 3401 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 109:
-#line 1417 "awkgram.y" /* yacc.c:1651  */
+#line 1445 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 3373 "awkgram.c" /* yacc.c:1651  */
+#line 3407 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 110:
-#line 1419 "awkgram.y" /* yacc.c:1651  */
+#line 1447 "awkgram.y" /* yacc.c:1651  */
     {
                /*
                 * Returning the expression list instead of NULL lets
@@ -3381,62 +3415,62 @@ regular_print:
                 */
                (yyval) = (yyvsp[-1]);
          }
-#line 3385 "awkgram.c" /* yacc.c:1651  */
+#line 3419 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 111:
-#line 1427 "awkgram.y" /* yacc.c:1651  */
+#line 1455 "awkgram.y" /* yacc.c:1651  */
     {
                /* Ditto */
                (yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
          }
-#line 3394 "awkgram.c" /* yacc.c:1651  */
+#line 3428 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 112:
-#line 1432 "awkgram.y" /* yacc.c:1651  */
+#line 1460 "awkgram.y" /* yacc.c:1651  */
     {
                /* Ditto */
                (yyval) = (yyvsp[-2]);
          }
-#line 3403 "awkgram.c" /* yacc.c:1651  */
+#line 3437 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 113:
-#line 1440 "awkgram.y" /* yacc.c:1651  */
+#line 1468 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 3409 "awkgram.c" /* yacc.c:1651  */
+#line 3443 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 114:
-#line 1442 "awkgram.y" /* yacc.c:1651  */
+#line 1470 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3415 "awkgram.c" /* yacc.c:1651  */
+#line 3449 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 115:
-#line 1447 "awkgram.y" /* yacc.c:1651  */
+#line 1475 "awkgram.y" /* yacc.c:1651  */
     {  (yyval) = mk_expression_list(NULL, (yyvsp[0])); }
-#line 3421 "awkgram.c" /* yacc.c:1651  */
+#line 3455 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 116:
-#line 1449 "awkgram.y" /* yacc.c:1651  */
+#line 1477 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
                yyerrok;
          }
-#line 3430 "awkgram.c" /* yacc.c:1651  */
+#line 3464 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 117:
-#line 1454 "awkgram.y" /* yacc.c:1651  */
+#line 1482 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 3436 "awkgram.c" /* yacc.c:1651  */
+#line 3470 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 118:
-#line 1456 "awkgram.y" /* yacc.c:1651  */
+#line 1484 "awkgram.y" /* yacc.c:1651  */
     {
                /*
                 * Returning the expression list instead of NULL lets
@@ -3444,72 +3478,72 @@ regular_print:
                 */
                (yyval) = (yyvsp[-1]);
          }
-#line 3448 "awkgram.c" /* yacc.c:1651  */
+#line 3482 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 119:
-#line 1464 "awkgram.y" /* yacc.c:1651  */
+#line 1492 "awkgram.y" /* yacc.c:1651  */
     {
                /* Ditto */
                (yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
          }
-#line 3457 "awkgram.c" /* yacc.c:1651  */
+#line 3491 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 120:
-#line 1469 "awkgram.y" /* yacc.c:1651  */
+#line 1497 "awkgram.y" /* yacc.c:1651  */
     {
                /* Ditto */
                (yyval) = (yyvsp[-2]);
          }
-#line 3466 "awkgram.c" /* yacc.c:1651  */
+#line 3500 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 121:
-#line 1476 "awkgram.y" /* yacc.c:1651  */
+#line 1504 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3472 "awkgram.c" /* yacc.c:1651  */
+#line 3506 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 122:
-#line 1477 "awkgram.y" /* yacc.c:1651  */
+#line 1505 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = list_create((yyvsp[0])); }
-#line 3478 "awkgram.c" /* yacc.c:1651  */
+#line 3512 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 123:
-#line 1483 "awkgram.y" /* yacc.c:1651  */
+#line 1511 "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 3489 "awkgram.c" /* yacc.c:1651  */
+#line 3523 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 124:
-#line 1490 "awkgram.y" /* yacc.c:1651  */
+#line 1518 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = mk_assignment((yyvsp[-2]), list_create((yyvsp[0])), 
(yyvsp[-1]));
          }
-#line 3497 "awkgram.c" /* yacc.c:1651  */
+#line 3531 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 125:
-#line 1494 "awkgram.y" /* yacc.c:1651  */
+#line 1522 "awkgram.y" /* yacc.c:1651  */
     {  (yyval) = mk_boolean((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3503 "awkgram.c" /* yacc.c:1651  */
+#line 3537 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 126:
-#line 1496 "awkgram.y" /* yacc.c:1651  */
+#line 1524 "awkgram.y" /* yacc.c:1651  */
     {  (yyval) = mk_boolean((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3509 "awkgram.c" /* yacc.c:1651  */
+#line 3543 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 127:
-#line 1498 "awkgram.y" /* yacc.c:1651  */
+#line 1526 "awkgram.y" /* yacc.c:1651  */
     {
                if ((yyvsp[-2])->lasti->opcode == Op_match_rec)
                        warning_ln((yyvsp[-1])->source_line,
@@ -3522,11 +3556,11 @@ regular_print:
                bcfree((yyvsp[0]));
                (yyval) = list_append((yyvsp[-2]), (yyvsp[-1]));
          }
-#line 3526 "awkgram.c" /* yacc.c:1651  */
+#line 3560 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 128:
-#line 1511 "awkgram.y" /* yacc.c:1651  */
+#line 1539 "awkgram.y" /* yacc.c:1651  */
     {
                if ((yyvsp[-2])->lasti->opcode == Op_match_rec)
                        warning_ln((yyvsp[-1])->source_line,
@@ -3543,11 +3577,11 @@ regular_print:
                        (yyval) = list_append(list_merge((yyvsp[-2]), 
(yyvsp[0])), (yyvsp[-1]));
                }
          }
-#line 3547 "awkgram.c" /* yacc.c:1651  */
+#line 3581 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 129:
-#line 1528 "awkgram.y" /* yacc.c:1651  */
+#line 1556 "awkgram.y" /* yacc.c:1651  */
     {
                if (do_lint_old)
                        warning_ln((yyvsp[-1])->source_line,
@@ -3557,91 +3591,91 @@ regular_print:
                (yyvsp[-1])->expr_count = 1;
                (yyval) = list_append(list_merge((yyvsp[-2]), (yyvsp[0])), 
(yyvsp[-1]));
          }
-#line 3561 "awkgram.c" /* yacc.c:1651  */
+#line 3595 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 130:
-#line 1538 "awkgram.y" /* yacc.c:1651  */
+#line 1566 "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 3572 "awkgram.c" /* yacc.c:1651  */
+#line 3606 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 131:
-#line 1545 "awkgram.y" /* yacc.c:1651  */
+#line 1573 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = mk_condition((yyvsp[-4]), (yyvsp[-3]), (yyvsp[-2]), 
(yyvsp[-1]), (yyvsp[0])); }
-#line 3578 "awkgram.c" /* yacc.c:1651  */
+#line 3612 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 132:
-#line 1547 "awkgram.y" /* yacc.c:1651  */
+#line 1575 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3584 "awkgram.c" /* yacc.c:1651  */
+#line 3618 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 133:
-#line 1552 "awkgram.y" /* yacc.c:1651  */
+#line 1580 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3590 "awkgram.c" /* yacc.c:1651  */
+#line 3624 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 134:
-#line 1554 "awkgram.y" /* yacc.c:1651  */
+#line 1582 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3596 "awkgram.c" /* yacc.c:1651  */
+#line 3630 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 135:
-#line 1556 "awkgram.y" /* yacc.c:1651  */
+#line 1584 "awkgram.y" /* yacc.c:1651  */
     {
                (yyvsp[0])->opcode = Op_assign_quotient;
                (yyval) = (yyvsp[0]);
          }
-#line 3605 "awkgram.c" /* yacc.c:1651  */
+#line 3639 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 136:
-#line 1564 "awkgram.y" /* yacc.c:1651  */
+#line 1592 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3611 "awkgram.c" /* yacc.c:1651  */
+#line 3645 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 137:
-#line 1566 "awkgram.y" /* yacc.c:1651  */
+#line 1594 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3617 "awkgram.c" /* yacc.c:1651  */
+#line 3651 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 138:
-#line 1571 "awkgram.y" /* yacc.c:1651  */
+#line 1599 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3623 "awkgram.c" /* yacc.c:1651  */
+#line 3657 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 139:
-#line 1573 "awkgram.y" /* yacc.c:1651  */
+#line 1601 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3629 "awkgram.c" /* yacc.c:1651  */
+#line 3663 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 140:
-#line 1578 "awkgram.y" /* yacc.c:1651  */
+#line 1606 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3635 "awkgram.c" /* yacc.c:1651  */
+#line 3669 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 141:
-#line 1580 "awkgram.y" /* yacc.c:1651  */
+#line 1608 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 3641 "awkgram.c" /* yacc.c:1651  */
+#line 3675 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 142:
-#line 1582 "awkgram.y" /* yacc.c:1651  */
+#line 1610 "awkgram.y" /* yacc.c:1651  */
     {
                int count = 2;
                bool is_simple_var = false;
@@ -3695,47 +3729,47 @@ regular_print:
                                max_args = count;
                }
          }
-#line 3699 "awkgram.c" /* yacc.c:1651  */
+#line 3733 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 144:
-#line 1641 "awkgram.y" /* yacc.c:1651  */
+#line 1669 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3705 "awkgram.c" /* yacc.c:1651  */
+#line 3739 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 145:
-#line 1643 "awkgram.y" /* yacc.c:1651  */
+#line 1671 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3711 "awkgram.c" /* yacc.c:1651  */
+#line 3745 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 146:
-#line 1645 "awkgram.y" /* yacc.c:1651  */
+#line 1673 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3717 "awkgram.c" /* yacc.c:1651  */
+#line 3751 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 147:
-#line 1647 "awkgram.y" /* yacc.c:1651  */
+#line 1675 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3723 "awkgram.c" /* yacc.c:1651  */
+#line 3757 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 148:
-#line 1649 "awkgram.y" /* yacc.c:1651  */
+#line 1677 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3729 "awkgram.c" /* yacc.c:1651  */
+#line 3763 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 149:
-#line 1651 "awkgram.y" /* yacc.c:1651  */
+#line 1679 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3735 "awkgram.c" /* yacc.c:1651  */
+#line 3769 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 150:
-#line 1653 "awkgram.y" /* yacc.c:1651  */
+#line 1681 "awkgram.y" /* yacc.c:1651  */
     {
                /*
                 * In BEGINFILE/ENDFILE, allow `getline [var] < file'
@@ -3749,29 +3783,29 @@ regular_print:
                                _("non-redirected `getline' undefined inside 
END action"));
                (yyval) = mk_getline((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]), 
redirect_input);
          }
-#line 3753 "awkgram.c" /* yacc.c:1651  */
+#line 3787 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 151:
-#line 1667 "awkgram.y" /* yacc.c:1651  */
+#line 1695 "awkgram.y" /* yacc.c:1651  */
     {
                (yyvsp[0])->opcode = Op_postincrement;
                (yyval) = mk_assignment((yyvsp[-1]), NULL, (yyvsp[0]));
          }
-#line 3762 "awkgram.c" /* yacc.c:1651  */
+#line 3796 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 152:
-#line 1672 "awkgram.y" /* yacc.c:1651  */
+#line 1700 "awkgram.y" /* yacc.c:1651  */
     {
                (yyvsp[0])->opcode = Op_postdecrement;
                (yyval) = mk_assignment((yyvsp[-1]), NULL, (yyvsp[0]));
          }
-#line 3771 "awkgram.c" /* yacc.c:1651  */
+#line 3805 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 153:
-#line 1677 "awkgram.y" /* yacc.c:1651  */
+#line 1705 "awkgram.y" /* yacc.c:1651  */
     {
                if (do_lint_old) {
                    warning_ln((yyvsp[-1])->source_line,
@@ -3791,64 +3825,64 @@ regular_print:
                        (yyval) = list_append(list_merge(t, (yyvsp[0])), 
(yyvsp[-1]));
                }
          }
-#line 3795 "awkgram.c" /* yacc.c:1651  */
+#line 3829 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 154:
-#line 1702 "awkgram.y" /* yacc.c:1651  */
+#line 1730 "awkgram.y" /* yacc.c:1651  */
     {
                  (yyval) = mk_getline((yyvsp[-1]), (yyvsp[0]), (yyvsp[-3]), 
(yyvsp[-2])->redir_type);
                  bcfree((yyvsp[-2]));
                }
-#line 3804 "awkgram.c" /* yacc.c:1651  */
+#line 3838 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 155:
-#line 1708 "awkgram.y" /* yacc.c:1651  */
+#line 1736 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3810 "awkgram.c" /* yacc.c:1651  */
+#line 3844 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 156:
-#line 1710 "awkgram.y" /* yacc.c:1651  */
+#line 1738 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3816 "awkgram.c" /* yacc.c:1651  */
+#line 3850 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 157:
-#line 1712 "awkgram.y" /* yacc.c:1651  */
+#line 1740 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3822 "awkgram.c" /* yacc.c:1651  */
+#line 3856 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 158:
-#line 1714 "awkgram.y" /* yacc.c:1651  */
+#line 1742 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3828 "awkgram.c" /* yacc.c:1651  */
+#line 3862 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 159:
-#line 1716 "awkgram.y" /* yacc.c:1651  */
+#line 1744 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3834 "awkgram.c" /* yacc.c:1651  */
+#line 3868 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 160:
-#line 1718 "awkgram.y" /* yacc.c:1651  */
+#line 1746 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3840 "awkgram.c" /* yacc.c:1651  */
+#line 3874 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 161:
-#line 1723 "awkgram.y" /* yacc.c:1651  */
+#line 1751 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = list_create((yyvsp[0]));
          }
-#line 3848 "awkgram.c" /* yacc.c:1651  */
+#line 3882 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 162:
-#line 1727 "awkgram.y" /* yacc.c:1651  */
+#line 1755 "awkgram.y" /* yacc.c:1651  */
     {
                if ((yyvsp[0])->opcode == Op_match_rec) {
                        (yyvsp[0])->opcode = Op_nomatch;
@@ -3880,11 +3914,11 @@ regular_print:
                        }
                }
           }
-#line 3884 "awkgram.c" /* yacc.c:1651  */
+#line 3918 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 163:
-#line 1759 "awkgram.y" /* yacc.c:1651  */
+#line 1787 "awkgram.y" /* yacc.c:1651  */
     {
                // Always include. Allows us to lint warn on
                // print "foo" > "bar" 1
@@ -3892,31 +3926,31 @@ regular_print:
                // print "foo" > ("bar" 1)
                (yyval) = list_append((yyvsp[-1]), bcalloc(Op_parens, 1, 
sourceline));
          }
-#line 3896 "awkgram.c" /* yacc.c:1651  */
+#line 3930 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 164:
-#line 1767 "awkgram.y" /* yacc.c:1651  */
+#line 1795 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = snode((yyvsp[-1]), (yyvsp[-3]));
                if ((yyval) == NULL)
                        YYABORT;
          }
-#line 3906 "awkgram.c" /* yacc.c:1651  */
+#line 3940 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 165:
-#line 1773 "awkgram.y" /* yacc.c:1651  */
+#line 1801 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = snode((yyvsp[-1]), (yyvsp[-3]));
                if ((yyval) == NULL)
                        YYABORT;
          }
-#line 3916 "awkgram.c" /* yacc.c:1651  */
+#line 3950 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 166:
-#line 1779 "awkgram.y" /* yacc.c:1651  */
+#line 1807 "awkgram.y" /* yacc.c:1651  */
     {
                static bool warned = false;
 
@@ -3929,45 +3963,45 @@ regular_print:
                if ((yyval) == NULL)
                        YYABORT;
          }
-#line 3933 "awkgram.c" /* yacc.c:1651  */
+#line 3967 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 169:
-#line 1794 "awkgram.y" /* yacc.c:1651  */
+#line 1822 "awkgram.y" /* yacc.c:1651  */
     {
                (yyvsp[-1])->opcode = Op_preincrement;
                (yyval) = mk_assignment((yyvsp[0]), NULL, (yyvsp[-1]));
          }
-#line 3942 "awkgram.c" /* yacc.c:1651  */
+#line 3976 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 170:
-#line 1799 "awkgram.y" /* yacc.c:1651  */
+#line 1827 "awkgram.y" /* yacc.c:1651  */
     {
                (yyvsp[-1])->opcode = Op_predecrement;
                (yyval) = mk_assignment((yyvsp[0]), NULL, (yyvsp[-1]));
          }
-#line 3951 "awkgram.c" /* yacc.c:1651  */
+#line 3985 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 171:
-#line 1804 "awkgram.y" /* yacc.c:1651  */
+#line 1832 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = list_create((yyvsp[0]));
          }
-#line 3959 "awkgram.c" /* yacc.c:1651  */
+#line 3993 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 172:
-#line 1808 "awkgram.y" /* yacc.c:1651  */
+#line 1836 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = list_create((yyvsp[0]));
          }
-#line 3967 "awkgram.c" /* yacc.c:1651  */
+#line 4001 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 173:
-#line 1812 "awkgram.y" /* yacc.c:1651  */
+#line 1840 "awkgram.y" /* yacc.c:1651  */
     {
                if ((yyvsp[0])->lasti->opcode == Op_push_i
                        && ((yyvsp[0])->lasti->memory->flags & STRING) == 0
@@ -3982,11 +4016,11 @@ regular_print:
                        (yyval) = list_append((yyvsp[0]), (yyvsp[-1]));
                }
          }
-#line 3986 "awkgram.c" /* yacc.c:1651  */
+#line 4020 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 174:
-#line 1827 "awkgram.y" /* yacc.c:1651  */
+#line 1855 "awkgram.y" /* yacc.c:1651  */
     {
                if ((yyvsp[0])->lasti->opcode == Op_push_i
                        && ((yyvsp[0])->lasti->memory->flags & STRING) == 0
@@ -4004,20 +4038,20 @@ regular_print:
                        (yyval) = list_append((yyvsp[0]), (yyvsp[-1]));
                }
          }
-#line 4008 "awkgram.c" /* yacc.c:1651  */
+#line 4042 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 175:
-#line 1848 "awkgram.y" /* yacc.c:1651  */
+#line 1876 "awkgram.y" /* yacc.c:1651  */
     {
                func_use((yyvsp[0])->lasti->func_name, FUNC_USE);
                (yyval) = (yyvsp[0]);
          }
-#line 4017 "awkgram.c" /* yacc.c:1651  */
+#line 4051 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 176:
-#line 1853 "awkgram.y" /* yacc.c:1651  */
+#line 1881 "awkgram.y" /* yacc.c:1651  */
     {
                /* indirect function call */
                INSTRUCTION *f, *t;
@@ -4051,11 +4085,11 @@ regular_print:
                (yyval) = list_prepend((yyvsp[0]), t);
                at_seen = false;
          }
-#line 4055 "awkgram.c" /* yacc.c:1651  */
+#line 4089 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 177:
-#line 1890 "awkgram.y" /* yacc.c:1651  */
+#line 1918 "awkgram.y" /* yacc.c:1651  */
     {
                NODE *n;
 
@@ -4080,49 +4114,49 @@ regular_print:
                        (yyval) = list_append(t, (yyvsp[-3]));
                }
          }
-#line 4084 "awkgram.c" /* yacc.c:1651  */
+#line 4118 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 178:
-#line 1918 "awkgram.y" /* yacc.c:1651  */
+#line 1946 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 4090 "awkgram.c" /* yacc.c:1651  */
+#line 4124 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 179:
-#line 1920 "awkgram.y" /* yacc.c:1651  */
+#line 1948 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 4096 "awkgram.c" /* yacc.c:1651  */
+#line 4130 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 180:
-#line 1925 "awkgram.y" /* yacc.c:1651  */
+#line 1953 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 4102 "awkgram.c" /* yacc.c:1651  */
+#line 4136 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 181:
-#line 1927 "awkgram.y" /* yacc.c:1651  */
+#line 1955 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[-1]); }
-#line 4108 "awkgram.c" /* yacc.c:1651  */
+#line 4142 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 182:
-#line 1932 "awkgram.y" /* yacc.c:1651  */
+#line 1960 "awkgram.y" /* yacc.c:1651  */
     {  (yyval) = (yyvsp[0]); }
-#line 4114 "awkgram.c" /* yacc.c:1651  */
+#line 4148 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 183:
-#line 1934 "awkgram.y" /* yacc.c:1651  */
+#line 1962 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = list_merge((yyvsp[-1]), (yyvsp[0]));
          }
-#line 4122 "awkgram.c" /* yacc.c:1651  */
+#line 4156 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 184:
-#line 1941 "awkgram.y" /* yacc.c:1651  */
+#line 1969 "awkgram.y" /* yacc.c:1651  */
     {
                INSTRUCTION *ip = (yyvsp[0])->lasti;
                int count = ip->sub_count;      /* # of SUBSEP-seperated 
expressions */
@@ -4136,11 +4170,11 @@ regular_print:
                sub_counter++;  /* count # of dimensions */
                (yyval) = (yyvsp[0]);
          }
-#line 4140 "awkgram.c" /* yacc.c:1651  */
+#line 4174 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 185:
-#line 1958 "awkgram.y" /* yacc.c:1651  */
+#line 1986 "awkgram.y" /* yacc.c:1651  */
     {
                INSTRUCTION *t = (yyvsp[-1]);
                if ((yyvsp[-1]) == NULL) {
@@ -4154,31 +4188,31 @@ regular_print:
                        (yyvsp[0])->sub_count = count_expressions(&t, false);
                (yyval) = list_append(t, (yyvsp[0]));
          }
-#line 4158 "awkgram.c" /* yacc.c:1651  */
+#line 4192 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 186:
-#line 1975 "awkgram.y" /* yacc.c:1651  */
+#line 2003 "awkgram.y" /* yacc.c:1651  */
     {  (yyval) = (yyvsp[0]); }
-#line 4164 "awkgram.c" /* yacc.c:1651  */
+#line 4198 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 187:
-#line 1977 "awkgram.y" /* yacc.c:1651  */
+#line 2005 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = list_merge((yyvsp[-1]), (yyvsp[0]));
          }
-#line 4172 "awkgram.c" /* yacc.c:1651  */
+#line 4206 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 188:
-#line 1984 "awkgram.y" /* yacc.c:1651  */
+#line 2012 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[-1]); }
-#line 4178 "awkgram.c" /* yacc.c:1651  */
+#line 4212 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 189:
-#line 1989 "awkgram.y" /* yacc.c:1651  */
+#line 2017 "awkgram.y" /* yacc.c:1651  */
     {
                char *var_name = (yyvsp[0])->lextok;
 
@@ -4186,22 +4220,22 @@ regular_print:
                (yyvsp[0])->memory = variable((yyvsp[0])->source_line, 
var_name, Node_var_new);
                (yyval) = list_create((yyvsp[0]));
          }
-#line 4190 "awkgram.c" /* yacc.c:1651  */
+#line 4224 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 190:
-#line 1997 "awkgram.y" /* yacc.c:1651  */
+#line 2025 "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 4201 "awkgram.c" /* yacc.c:1651  */
+#line 4235 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 191:
-#line 2007 "awkgram.y" /* yacc.c:1651  */
+#line 2035 "awkgram.y" /* yacc.c:1651  */
     {
                INSTRUCTION *ip = (yyvsp[0])->nexti;
                if (ip->opcode == Op_push
@@ -4213,85 +4247,85 @@ regular_print:
                } else
                        (yyval) = (yyvsp[0]);
          }
-#line 4217 "awkgram.c" /* yacc.c:1651  */
+#line 4251 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 192:
-#line 2019 "awkgram.y" /* yacc.c:1651  */
+#line 2047 "awkgram.y" /* yacc.c:1651  */
     {
                (yyval) = list_append((yyvsp[-1]), (yyvsp[-2]));
                if ((yyvsp[0]) != NULL)
                        mk_assignment((yyvsp[-1]), NULL, (yyvsp[0]));
          }
-#line 4227 "awkgram.c" /* yacc.c:1651  */
+#line 4261 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 193:
-#line 2028 "awkgram.y" /* yacc.c:1651  */
+#line 2056 "awkgram.y" /* yacc.c:1651  */
     {
                (yyvsp[0])->opcode = Op_postincrement;
          }
-#line 4235 "awkgram.c" /* yacc.c:1651  */
+#line 4269 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 194:
-#line 2032 "awkgram.y" /* yacc.c:1651  */
+#line 2060 "awkgram.y" /* yacc.c:1651  */
     {
                (yyvsp[0])->opcode = Op_postdecrement;
          }
-#line 4243 "awkgram.c" /* yacc.c:1651  */
+#line 4277 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 195:
-#line 2036 "awkgram.y" /* yacc.c:1651  */
+#line 2064 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 4249 "awkgram.c" /* yacc.c:1651  */
+#line 4283 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 196:
-#line 2040 "awkgram.y" /* yacc.c:1651  */
+#line 2068 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); }
-#line 4255 "awkgram.c" /* yacc.c:1651  */
+#line 4289 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 197:
-#line 2044 "awkgram.y" /* yacc.c:1651  */
+#line 2072 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); yyerrok; }
-#line 4261 "awkgram.c" /* yacc.c:1651  */
+#line 4295 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 198:
-#line 2048 "awkgram.y" /* yacc.c:1651  */
+#line 2076 "awkgram.y" /* yacc.c:1651  */
     { yyerrok; }
-#line 4267 "awkgram.c" /* yacc.c:1651  */
+#line 4301 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 199:
-#line 2053 "awkgram.y" /* yacc.c:1651  */
+#line 2081 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = NULL; }
-#line 4273 "awkgram.c" /* yacc.c:1651  */
+#line 4307 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 201:
-#line 2058 "awkgram.y" /* yacc.c:1651  */
+#line 2086 "awkgram.y" /* yacc.c:1651  */
     { yyerrok; }
-#line 4279 "awkgram.c" /* yacc.c:1651  */
+#line 4313 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 202:
-#line 2062 "awkgram.y" /* yacc.c:1651  */
+#line 2090 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); yyerrok; }
-#line 4285 "awkgram.c" /* yacc.c:1651  */
+#line 4319 "awkgram.c" /* yacc.c:1651  */
     break;
 
   case 203:
-#line 2066 "awkgram.y" /* yacc.c:1651  */
+#line 2094 "awkgram.y" /* yacc.c:1651  */
     { (yyval) = (yyvsp[0]); yyerrok; }
-#line 4291 "awkgram.c" /* yacc.c:1651  */
+#line 4325 "awkgram.c" /* yacc.c:1651  */
     break;
 
 
-#line 4295 "awkgram.c" /* yacc.c:1651  */
+#line 4329 "awkgram.c" /* yacc.c:1651  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -4519,7 +4553,7 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 2068 "awkgram.y" /* yacc.c:1910  */
+#line 2096 "awkgram.y" /* yacc.c:1910  */
 
 
 struct token {
@@ -5811,6 +5845,7 @@ yylex(void)
        bool intlstr = false;
        AWKNUM d;
        bool collecting_typed_regexp = false;
+       static int qm_col_count = 0;
 
 #define GET_INSTRUCTION(op) bcalloc(op, 1, sourceline)
 
@@ -6062,13 +6097,18 @@ retry:
                }
                break;
 
-       case ':':
        case '?':
+               qm_col_count++;
+               // fall through
+       case ':':
                yylval = GET_INSTRUCTION(Op_cond_exp);
-               if (! do_posix) {
-                       INSTRUCTION *new_comment = NULL;
-                       allow_newline(& new_comment);
-                       yylval->comment = new_comment;
+               if (c == ':' && qm_col_count > 0) {
+                       if (do_posix) {
+                               INSTRUCTION *new_comment = NULL;
+                               allow_newline(& new_comment);
+                               yylval->comment = new_comment;
+                       }
+                       qm_col_count--;
                }
                return lasttok = c;
 
diff --git a/awkgram.y b/awkgram.y
index 08292ee..ba5e091 100644
--- a/awkgram.y
+++ b/awkgram.y
@@ -1,21 +1,20 @@
-/* ALSO TODO:
- * Fix debug.c
- */
-/* working on statement_term */
+/* working on statement_term and opt_nls */
 /*
 TODO:
--- After && and ||
 -- Get comments from all instances of opt_nls
 -- Get comments from all instances of l_brace
 -- Get comments from all instances of r_brace
 -- Review statement lists and handling of statement_term
--- case part of switch statement
+-- for(;;) statement
+-- for(iggy in fo) statement
 DONE:
 -- Get comments from all instances of nls
 -- After , in parameter list
 -- After ? and :
 -- switch statement
 -- After , in a range expression in a pattern
+-- After && and ||
+-- case part of switch statement
 */
 /*
  * awkgram.y --- yacc/bison parser
@@ -268,8 +267,11 @@ rule
                } else if ($1 == NULL) {
                        msg(_("each rule must have a pattern or an action 
part"));
                        errcount++;
-               } else          /* pattern rule with non-empty pattern */
+               } else {        /* pattern rule with non-empty pattern */
+                       if ($2 != NULL)
+                               list_append($1, $2);
                        (void) append_rule($1, NULL);
+               }
          }
        | function_prologue action
          {
@@ -284,7 +286,7 @@ rule
                at_seen = false;
                if ($4 != NULL) {
                        warning(_("comments on address@hidden' statements will 
be lost"));
-                       /* FIXME: Free memory, it should be a list */
+                       bcfree($4);
                }
                yyerrok;
          }
@@ -294,7 +296,7 @@ rule
                at_seen = false;
                if ($4 != NULL) {
                        warning(_("comments on address@hidden' statements will 
be lost"));
-                       /* FIXME: Free memory, it should be a list */
+                       bcfree($4);
                }
                yyerrok;
          }
@@ -839,6 +841,8 @@ statement
                                bcfree($3);
                                bcfree($4);
                                bcfree($5);
+                               if ($7 != NULL)
+                                       $8 = list_prepend($8, $7);
                                $$ = $8;
                        } else
                                goto regular_loop;
@@ -896,8 +900,12 @@ regular_loop:
                                ($1 + 1)->forloop_body = ip->lasti;
                        }
 
-                       if ($8 != NULL)
+                       if ($8 != NULL) {
+                               if ($7 != NULL)
+                                       $8 = list_prepend($8, $7);
                                (void) list_merge(ip, $8);
+                       } else if ($7 != NULL)
+                               (void) list_append(ip, $7);
 
                        (void) list_append(ip, instruction(Op_jmp));
                        ip->lasti->target_jmp = $4;
@@ -939,6 +947,8 @@ non_compound_stmt
                                _("`break' is not allowed outside a loop or 
switch"));
                $1->target_jmp = NULL;
                $$ = list_create($1);
+               if ($2 != NULL)
+                       $$ = list_append($$, $2);
          }
        | LEX_CONTINUE statement_term
          {
@@ -947,6 +957,8 @@ non_compound_stmt
                                _("`continue' is not allowed outside a loop"));
                $1->target_jmp = NULL;
                $$ = list_create($1);
+               if ($2 != NULL)
+                       $$ = list_append($$, $2);
          }
        | LEX_NEXT statement_term
          {
@@ -956,6 +968,8 @@ non_compound_stmt
                                _("`next' used in %s action"), ruletab[rule]);
                $1->target_jmp = ip_rec;
                $$ = list_create($1);
+               if ($2 != NULL)
+                       $$ = list_append($$, $2);
          }
        | LEX_NEXTFILE statement_term
          {
@@ -967,6 +981,8 @@ non_compound_stmt
                $1->target_newfile = ip_newfile;
                $1->target_endfile = ip_endfile;
                $$ = list_create($1);
+               if ($2 != NULL)
+                       $$ = list_append($$, $2);
          }
        | LEX_EXIT opt_exp statement_term
          {
@@ -982,6 +998,8 @@ non_compound_stmt
                        $$->nexti->memory = dupnode(Nnull_string);
                } else
                        $$ = list_append($2, $1);
+               if ($3 != NULL)
+                       $$ = list_append($$, $3);
          }
        | LEX_RETURN
          {
@@ -994,8 +1012,16 @@ non_compound_stmt
                        $$->nexti->memory = dupnode(Nnull_string);
                } else
                        $$ = list_append($3, $1);
+               if ($4 != NULL)
+                       $$ = list_append($$, $4);
          }
        | simple_stmt statement_term
+         {
+               if ($2 != NULL)
+                       $$ = list_append($1, $2);
+               else
+                       $$ = $1;
+         }
        ;
 
        /*
@@ -1205,6 +1231,7 @@ case_statement
                        (void) list_prepend(casestmt, 
instruction(Op_exec_count));
                $1->case_exp = $2;
                $1->case_stmt = casestmt;
+               $1->comment = $4;
                bcfree($3);
                $$ = $1;
          }
@@ -1217,6 +1244,7 @@ case_statement
                        (void) list_prepend(casestmt, 
instruction(Op_exec_count));
                bcfree($2);
                $1->case_stmt = casestmt;
+               $1->comment = $3;
                $$ = $1;
          }
        ;
@@ -3356,6 +3384,7 @@ yylex(void)
        bool intlstr = false;
        AWKNUM d;
        bool collecting_typed_regexp = false;
+       static int qm_col_count = 0;
 
 #define GET_INSTRUCTION(op) bcalloc(op, 1, sourceline)
 
@@ -3607,13 +3636,18 @@ retry:
                }
                break;
 
-       case ':':
        case '?':
+               qm_col_count++;
+               // fall through
+       case ':':
                yylval = GET_INSTRUCTION(Op_cond_exp);
-               if (! do_posix) {
-                       INSTRUCTION *new_comment = NULL;
-                       allow_newline(& new_comment);
-                       yylval->comment = new_comment;
+               if (c == ':' && qm_col_count > 0) {
+                       if (do_posix) {
+                               INSTRUCTION *new_comment = NULL;
+                               allow_newline(& new_comment);
+                               yylval->comment = new_comment;
+                       }
+                       qm_col_count--;
                }
                return lasttok = c;
 
diff --git a/debug.c b/debug.c
index e43300b..91ed8cf 100644
--- a/debug.c
+++ b/debug.c
@@ -3847,7 +3847,12 @@ print_instruction(INSTRUCTION *pc, Func_print 
print_func, FILE *fp, int in_dump)
                break;
 
        case Op_K_default:
-               print_func(fp, "[stmt_start = %p] [stmt_end = %p]\n", 
pc->stmt_start, pc->stmt_end);
+               print_func(fp, "[stmt_start = %p] [stmt_end = %p]", 
pc->stmt_start, pc->stmt_end);
+               if (pc->comment) {
+                       print_func(fp, " [comment = %p]\n", pc->comment);
+                       print_instruction(pc->comment, print_func, fp, in_dump);
+               } else
+                       print_func(fp, "\n");
                break;
 
        case Op_var_update:
@@ -3939,8 +3944,13 @@ print_instruction(INSTRUCTION *pc, Func_print 
print_func, FILE *fp, int in_dump)
                break;
 
        case Op_K_case:
-               print_func(fp, "[target_jmp = %p] [match_exp = %s]\n",
+               print_func(fp, "[target_jmp = %p] [match_exp = %s]",
                                                pc->target_jmp, (pc + 
1)->match_exp ? "true" : "false");
+               if (pc->comment) {
+                       print_func(fp, " [comment = %p]\n", pc->comment);
+                       print_instruction(pc->comment, print_func, fp, in_dump);
+               } else
+                       print_func(fp, "\n");
                break;
 
        case Op_arrayfor_incr:
@@ -4059,11 +4069,11 @@ print_instruction(INSTRUCTION *pc, Func_print 
print_func, FILE *fp, int in_dump)
                print_func(fp, " [comment_type = %s]",
                        pc->memory->comment_type == EOL_COMMENT ?
                                                "EOL" : "BLOCK");
-               if (pc->comment)
-                       print_func(fp, " [comment = %p]", pc->comment);
-               print_func(fp, "\n", pc->comment);
-               if (pc->comment)
+               if (pc->comment) {
+                       print_func(fp, " [comment = %p]\n", pc->comment);
                        print_instruction(pc->comment, print_func, fp, in_dump);
+               } else
+                       print_func(fp, "\n");
                break;
 
        case Op_push_i:
diff --git a/profile.c b/profile.c
index e438028..e6a528d 100644
--- a/profile.c
+++ b/profile.c
@@ -246,7 +246,7 @@ pprint(INSTRUCTION *startp, INSTRUCTION *endp, int flags)
 
                        if (rule != Rule) {
                                /* Allow for pre-non-rule-block comment  */
-                               if (pc->nexti != (pc +1)->firsti
+                               if (pc->nexti != (pc+1)->firsti
                                    && pc->nexti->opcode == Op_comment
                                    && pc->nexti->memory->comment_type == 
BLOCK_COMMENT)
                                        print_comment(pc->nexti, -1);
@@ -945,13 +945,19 @@ cleanup:
                        if (pc->opcode == Op_K_case) {
                                t1 = pp_pop();
                                fprintf(prof_fp, "%s %s:", op2str(pc->opcode), 
t1->pp_str);
-                               pc = end_line(pc);
                                pp_free(t1);
-                       } else {
+                       } else
                                fprintf(prof_fp, "%s:", op2str(pc->opcode));
-                               pc = end_line(pc);
-                       }
+
                        indent_in();
+                       if (pc->comment != NULL) {
+                               if (pc->comment->memory->comment_type == 
EOL_COMMENT)
+                                       fprintf(prof_fp, "\t%s", 
pc->comment->memory->stptr);
+                               else {
+                                       fprintf(prof_fp, "\n");
+                                       print_comment(pc->comment, 
indent_level);
+                               }
+                       }
                        pprint(pc->stmt_start->nexti, pc->stmt_end->nexti, 
NO_PPRINT_FLAGS);
                        indent_out();
                        break;

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

Summary of changes:
 ChangeLog |  10 +
 awkgram.c | 866 ++++++++++++++++++++++++++++++++------------------------------
 awkgram.y |  64 +++--
 debug.c   |  22 +-
 profile.c |  18 +-
 5 files changed, 540 insertions(+), 440 deletions(-)


hooks/post-receive
-- 
gawk



reply via email to

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