gawk-diffs
[Top][All Lists]
Advanced

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

[gawk-diffs] [SCM] gawk branch, print-exp, updated. gawk-4.1.0-1028-ga88


From: Arnold Robbins
Subject: [gawk-diffs] [SCM] gawk branch, print-exp, updated. gawk-4.1.0-1028-ga88f91f
Date: Fri, 26 Dec 2014 07:57:58 +0000

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

The branch, print-exp has been updated
       via  a88f91fd9c89c618ea91150d79937f97626d7ef1 (commit)
       via  f19d6c877ef2e467965b6fec2561be8b8ca5db94 (commit)
       via  4160a0e1fe1aaf4919162010a33550bc22af9454 (commit)
       via  399ec4931adce151b7633f2b66b04d021d3ae78c (commit)
       via  45bba30a98164938c25b6ed3a574e5f8a175bbd7 (commit)
       via  5db85f61829f0b56001884c59c690200eb07742e (commit)
       via  734e898a91dc494506004c8c6a8057a363171bf1 (commit)
       via  969ee3cbf2255a508eca008c0b25d8a1f09bdeb3 (commit)
       via  0585c4e6f3d68846d56fe766675099b539e2cba9 (commit)
       via  5f4811bd1b91dd3b50a30a227e455738f5dcfe36 (commit)
       via  608116b9826d199c2df99d79fe6c0b39c4febb8b (commit)
       via  ba81a835d78656b966a81e3426af82ee903f97de (commit)
       via  06e47b84ed3eb2ec562ee9910d192853f351a0bc (commit)
       via  0d52289482d468c8566976d77c0c6a6a4e602add (commit)
       via  769d7886cceec048dcd4aa67236b5971891418c3 (commit)
       via  fa9d1a09cfe9e7386746a2c6523b5503d1b4aff9 (commit)
      from  3191df6b5489f596ca144ab00ca328cf5f685278 (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=a88f91fd9c89c618ea91150d79937f97626d7ef1

commit a88f91fd9c89c618ea91150d79937f97626d7ef1
Merge: 3191df6 f19d6c8
Author: Arnold D. Robbins <address@hidden>
Date:   Fri Dec 26 09:54:20 2014 +0200

    Merge branch 'master' into print-exp

diff --cc ChangeLog
index 75ef70b,b78fc06..ba7c032
--- a/ChangeLog
+++ b/ChangeLog
@@@ -1,43 -1,24 +1,67 @@@
++<<<<<<< HEAD
 +2014-12-09         Arnold D. Robbins     <address@hidden>
 +
 +      * builtin.c (do_printf): Allow for error return from redirect, pass
 +      in the can_fatal value.
 +      (do_print_rec, do_print): Ditto.
 +      * interpret.h (run_print_command): New function.
 +      (r_interpret): Use it in the right places.
 +      * io.c (redirect): Add boolean allow_fatal parameter. Use it.
 +      * profile.c (pprint): Handle expression versions of print - stack
 +      the results if needed.
 +
 +2014-12-08         Arnold D. Robbins     <address@hidden>
 +
 +      * awk.h: Additional codes for the expression versions of print,
 +      printf, and print_rec.
 +      (do_print, do_printf, do_print_rec): Return NODE *, take additional
 +      boolean parameter.
 +      * awkgram.y (yylex): Improve scanner hack some.
 +      (mk_print): Use the right opcodes.
 +      * builtin.c (efwrite): Return ssize_t which is number of bytes written.
 +      Add a parameter for if can fatal or not.
 +      (do_print): Return NODE with number bytes written; fatal based
 +      parameter setting.
 +      (do_printf): Ditto.
 +      (do_print_rec): Ditto.
 +      * eval.c (optypetab): Update.
 +      * interpret.h (r_interpret): Handle the different versions of
 +      print/printf: expression vs. statement. This could be cleaned
 +      up a bit more.
 +
 +2014-12-06         Arnold D. Robbins     <address@hidden>
 +
 +      Start on changes to allow print/printf to return a value.
 +
 +      * awkgram.y (LEX_PRINT_EXP, LEX_PRINTF_EXP): New tokens.
 +      (print_expression, print_exp): New non-terminals.
 +      (mk_print): New function.
 +      (exp -> print_expression): Add new production.
 +      (yylex): Ugly hack on the scanner to return the expression version
 +      of the tokens if not in a statement sort of context.
++=======
+ 2014-12-24         Arnold D. Robbins     <address@hidden>
+ 
+       * profile.c (pprint): Be sure to set ip2 in all paths
+       through the code. Thanks to GCC 4.9 for the warning.
+ 
+ 2014-12-12        Stephen Davies         <address@hidden>
+ 
+       Improve comment handling in pretty printing.
+ 
+       * awk.h (comment_type): New field in the node.
+       (EOL_COMMENT, FULL_COMMENT): New defines.
+       * awkgram.y (block_comment): New variable.
+       (check_comment): New function.
+       (grammar): Add code to handle comments as needed.
+       (get_comment): Now takes a flag indicating kind of comment.
+       (yylex): Collect comments appropriately.
+       (append_rule): Ditto.
+       * profile.c (pprint): Smarten up comment handling.
+       Have printing \n take comments into account.
+       (end_line): New function.
+       (pp_func): Better handling of function comments.
++>>>>>>> master
  
  2014-12-10         Arnold D. Robbins     <address@hidden>
  
diff --cc awkgram.c
index 2daae93,225cdb4..433ca3a
--- a/awkgram.c
+++ b/awkgram.c
@@@ -203,7 -205,7 +206,7 @@@ extern double fmod(double x, double y)
  
  #define YYSTYPE INSTRUCTION *
  
- #line 207 "awkgram.c" /* yacc.c:339  */
 -#line 209 "awkgram.c" /* yacc.c:339  */
++#line 210 "awkgram.c" /* yacc.c:339  */
  
  # ifndef YY_NULLPTR
  #  if defined __cplusplus && 201103L <= __cplusplus
@@@ -361,7 -359,7 +364,7 @@@ int yyparse (void)
  
  /* Copy the second part of user declarations.  */
  
- #line 365 "awkgram.c" /* yacc.c:358  */
 -#line 363 "awkgram.c" /* yacc.c:358  */
++#line 368 "awkgram.c" /* yacc.c:358  */
  
  #ifdef short
  # undef short
@@@ -664,26 -661,25 +667,26 @@@ static const yytype_uint8 yytranslate[
    /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
  static const yytype_uint16 yyrline[] =
  {
-        0,   207,   207,   209,   214,   215,   221,   233,   237,   248,
-      254,   259,   267,   275,   277,   282,   290,   292,   298,   306,
-      316,   342,   355,   368,   375,   385,   397,   399,   401,   407,
-      412,   413,   417,   452,   451,   485,   487,   492,   498,   526,
-      531,   532,   536,   538,   540,   547,   637,   679,   721,   834,
-      841,   848,   858,   867,   876,   885,   896,   912,   911,   935,
-      939,   939,   954,   954,   959,   959,   992,  1022,  1028,  1029,
-     1035,  1036,  1043,  1048,  1060,  1074,  1076,  1084,  1089,  1091,
-     1099,  1101,  1106,  1108,  1117,  1118,  1126,  1131,  1131,  1142,
-     1146,  1154,  1155,  1158,  1160,  1165,  1166,  1175,  1176,  1181,
-     1186,  1192,  1194,  1196,  1203,  1204,  1210,  1211,  1216,  1218,
-     1223,  1225,  1233,  1238,  1247,  1254,  1256,  1258,  1274,  1284,
-     1291,  1293,  1295,  1300,  1302,  1304,  1312,  1314,  1319,  1321,
-     1326,  1328,  1330,  1380,  1382,  1384,  1386,  1388,  1390,  1392,
-     1394,  1408,  1413,  1418,  1443,  1449,  1451,  1453,  1455,  1457,
-     1459,  1464,  1468,  1500,  1502,  1508,  1514,  1527,  1528,  1529,
-     1534,  1539,  1543,  1547,  1562,  1575,  1580,  1616,  1634,  1635,
-     1641,  1642,  1647,  1649,  1656,  1673,  1690,  1692,  1699,  1704,
-     1712,  1722,  1734,  1743,  1747,  1751,  1755,  1759,  1763,  1766,
-     1768,  1772,  1776,  1780
 -       0,   208,   208,   210,   215,   216,   222,   234,   238,   249,
 -     255,   260,   268,   276,   278,   283,   291,   293,   299,   307,
 -     317,   347,   361,   375,   383,   394,   406,   408,   410,   416,
 -     421,   422,   426,   461,   460,   494,   496,   501,   507,   535,
 -     540,   541,   545,   547,   549,   556,   646,   688,   730,   843,
 -     850,   857,   867,   876,   885,   894,   905,   921,   920,   944,
 -     956,   956,  1054,  1054,  1087,  1117,  1123,  1124,  1130,  1131,
 -    1138,  1143,  1155,  1169,  1171,  1179,  1184,  1186,  1194,  1196,
 -    1205,  1206,  1214,  1219,  1219,  1230,  1234,  1242,  1243,  1246,
 -    1248,  1253,  1254,  1263,  1264,  1269,  1274,  1280,  1282,  1284,
 -    1291,  1292,  1298,  1299,  1304,  1306,  1311,  1313,  1321,  1326,
 -    1335,  1342,  1344,  1346,  1362,  1372,  1379,  1381,  1386,  1388,
 -    1390,  1398,  1400,  1405,  1407,  1412,  1414,  1416,  1466,  1468,
 -    1470,  1472,  1474,  1476,  1478,  1480,  1494,  1499,  1504,  1529,
 -    1535,  1537,  1539,  1541,  1543,  1545,  1550,  1554,  1586,  1588,
 -    1594,  1600,  1613,  1614,  1615,  1620,  1625,  1629,  1633,  1648,
 -    1661,  1666,  1702,  1720,  1721,  1727,  1728,  1733,  1735,  1742,
 -    1759,  1776,  1778,  1785,  1790,  1798,  1808,  1820,  1829,  1833,
 -    1837,  1841,  1845,  1849,  1852,  1854,  1858,  1862,  1866
++       0,   210,   210,   212,   217,   218,   224,   236,   240,   251,
++     257,   262,   270,   278,   280,   285,   293,   295,   301,   309,
++     319,   349,   363,   377,   385,   396,   408,   410,   412,   418,
++     423,   424,   428,   463,   462,   496,   498,   503,   509,   537,
++     542,   543,   547,   549,   551,   558,   648,   690,   732,   845,
++     852,   859,   869,   878,   887,   896,   907,   923,   922,   946,
++     950,   950,   965,   965,   970,   970,  1003,  1033,  1039,  1040,
++    1046,  1047,  1054,  1059,  1071,  1085,  1087,  1095,  1100,  1102,
++    1110,  1112,  1117,  1119,  1128,  1129,  1137,  1142,  1142,  1153,
++    1157,  1165,  1166,  1169,  1171,  1176,  1177,  1186,  1187,  1192,
++    1197,  1203,  1205,  1207,  1214,  1215,  1221,  1222,  1227,  1229,
++    1234,  1236,  1244,  1249,  1258,  1265,  1267,  1269,  1285,  1295,
++    1302,  1304,  1306,  1311,  1313,  1315,  1323,  1325,  1330,  1332,
++    1337,  1339,  1341,  1391,  1393,  1395,  1397,  1399,  1401,  1403,
++    1405,  1419,  1424,  1429,  1454,  1460,  1462,  1464,  1466,  1468,
++    1470,  1475,  1479,  1511,  1513,  1519,  1525,  1538,  1539,  1540,
++    1545,  1550,  1554,  1558,  1573,  1586,  1591,  1627,  1645,  1646,
++    1652,  1653,  1658,  1660,  1667,  1684,  1701,  1703,  1710,  1715,
++    1723,  1733,  1745,  1754,  1758,  1762,  1766,  1770,  1774,  1777,
++    1779,  1783,  1787,  1791
  };
  #endif
  
@@@ -1903,26 -1852,26 +1906,26 @@@ yyreduce
    switch (yyn)
      {
          case 3:
- #line 210 "awkgram.y" /* yacc.c:1646  */
 -#line 211 "awkgram.y" /* yacc.c:1646  */
++#line 213 "awkgram.y" /* yacc.c:1646  */
      {
                rule = 0;
                yyerrok;
          }
- #line 1912 "awkgram.c" /* yacc.c:1646  */
 -#line 1861 "awkgram.c" /* yacc.c:1646  */
++#line 1915 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 5:
- #line 216 "awkgram.y" /* yacc.c:1646  */
 -#line 217 "awkgram.y" /* yacc.c:1646  */
++#line 219 "awkgram.y" /* yacc.c:1646  */
      {
                next_sourcefile();
                if (sourcefile == srcfiles)
                        process_deferred();
          }
- #line 1922 "awkgram.c" /* yacc.c:1646  */
 -#line 1871 "awkgram.c" /* yacc.c:1646  */
++#line 1925 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 6:
- #line 222 "awkgram.y" /* yacc.c:1646  */
 -#line 223 "awkgram.y" /* yacc.c:1646  */
++#line 225 "awkgram.y" /* yacc.c:1646  */
      {
                rule = 0;
                /*
@@@ -1931,19 -1880,19 +1934,19 @@@
                 */
                /* yyerrok; */
          }
- #line 1935 "awkgram.c" /* yacc.c:1646  */
 -#line 1884 "awkgram.c" /* yacc.c:1646  */
++#line 1938 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 7:
- #line 234 "awkgram.y" /* yacc.c:1646  */
 -#line 235 "awkgram.y" /* yacc.c:1646  */
++#line 237 "awkgram.y" /* yacc.c:1646  */
      {
                (void) append_rule((yyvsp[-1]), (yyvsp[0]));
          }
- #line 1943 "awkgram.c" /* yacc.c:1646  */
 -#line 1892 "awkgram.c" /* yacc.c:1646  */
++#line 1946 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 8:
- #line 238 "awkgram.y" /* yacc.c:1646  */
 -#line 239 "awkgram.y" /* yacc.c:1646  */
++#line 241 "awkgram.y" /* yacc.c:1646  */
      {
                if (rule != Rule) {
                        msg(_("%s blocks must have an action part"), 
ruletab[rule]);
@@@ -1954,39 -1903,39 +1957,39 @@@
                } else          /* pattern rule with non-empty pattern */
                        (void) append_rule((yyvsp[-1]), NULL);
          }
- #line 1958 "awkgram.c" /* yacc.c:1646  */
 -#line 1907 "awkgram.c" /* yacc.c:1646  */
++#line 1961 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 9:
- #line 249 "awkgram.y" /* yacc.c:1646  */
 -#line 250 "awkgram.y" /* yacc.c:1646  */
++#line 252 "awkgram.y" /* yacc.c:1646  */
      {
                in_function = NULL;
                (void) mk_function((yyvsp[-1]), (yyvsp[0]));
                yyerrok;
          }
- #line 1968 "awkgram.c" /* yacc.c:1646  */
 -#line 1917 "awkgram.c" /* yacc.c:1646  */
++#line 1971 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 10:
- #line 255 "awkgram.y" /* yacc.c:1646  */
 -#line 256 "awkgram.y" /* yacc.c:1646  */
++#line 258 "awkgram.y" /* yacc.c:1646  */
      {
                want_source = false;
                yyerrok;
          }
- #line 1977 "awkgram.c" /* yacc.c:1646  */
 -#line 1926 "awkgram.c" /* yacc.c:1646  */
++#line 1980 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 11:
- #line 260 "awkgram.y" /* yacc.c:1646  */
 -#line 261 "awkgram.y" /* yacc.c:1646  */
++#line 263 "awkgram.y" /* yacc.c:1646  */
      {
                want_source = false;
                yyerrok;
          }
- #line 1986 "awkgram.c" /* yacc.c:1646  */
 -#line 1935 "awkgram.c" /* yacc.c:1646  */
++#line 1989 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 12:
- #line 268 "awkgram.y" /* yacc.c:1646  */
 -#line 269 "awkgram.y" /* yacc.c:1646  */
++#line 271 "awkgram.y" /* yacc.c:1646  */
      {
                if (include_source((yyvsp[0])) < 0)
                        YYABORT;
@@@ -1994,23 -1943,23 +1997,23 @@@
                bcfree((yyvsp[0]));
                (yyval) = NULL;
          }
- #line 1998 "awkgram.c" /* yacc.c:1646  */
 -#line 1947 "awkgram.c" /* yacc.c:1646  */
++#line 2001 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 13:
- #line 276 "awkgram.y" /* yacc.c:1646  */
 -#line 277 "awkgram.y" /* yacc.c:1646  */
++#line 279 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 2004 "awkgram.c" /* yacc.c:1646  */
 -#line 1953 "awkgram.c" /* yacc.c:1646  */
++#line 2007 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 14:
- #line 278 "awkgram.y" /* yacc.c:1646  */
 -#line 279 "awkgram.y" /* yacc.c:1646  */
++#line 281 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 2010 "awkgram.c" /* yacc.c:1646  */
 -#line 1959 "awkgram.c" /* yacc.c:1646  */
++#line 2013 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 15:
- #line 283 "awkgram.y" /* yacc.c:1646  */
 -#line 284 "awkgram.y" /* yacc.c:1646  */
++#line 286 "awkgram.y" /* yacc.c:1646  */
      {
                if (load_library((yyvsp[0])) < 0)
                        YYABORT;
@@@ -2018,23 -1967,23 +2021,23 @@@
                bcfree((yyvsp[0]));
                (yyval) = NULL;
          }
- #line 2022 "awkgram.c" /* yacc.c:1646  */
 -#line 1971 "awkgram.c" /* yacc.c:1646  */
++#line 2025 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 16:
- #line 291 "awkgram.y" /* yacc.c:1646  */
 -#line 292 "awkgram.y" /* yacc.c:1646  */
++#line 294 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 2028 "awkgram.c" /* yacc.c:1646  */
 -#line 1977 "awkgram.c" /* yacc.c:1646  */
++#line 2031 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 17:
- #line 293 "awkgram.y" /* yacc.c:1646  */
 -#line 294 "awkgram.y" /* yacc.c:1646  */
++#line 296 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 2034 "awkgram.c" /* yacc.c:1646  */
 -#line 1983 "awkgram.c" /* yacc.c:1646  */
++#line 2037 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 18:
- #line 298 "awkgram.y" /* yacc.c:1646  */
 -#line 299 "awkgram.y" /* yacc.c:1646  */
++#line 301 "awkgram.y" /* yacc.c:1646  */
      {
                rule = Rule;
                if (comment != NULL) {
@@@ -2043,11 -1992,11 +2046,11 @@@
                } else
                        (yyval) = NULL;
          }
- #line 2047 "awkgram.c" /* yacc.c:1646  */
 -#line 1996 "awkgram.c" /* yacc.c:1646  */
++#line 2050 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 19:
- #line 307 "awkgram.y" /* yacc.c:1646  */
 -#line 308 "awkgram.y" /* yacc.c:1646  */
++#line 310 "awkgram.y" /* yacc.c:1646  */
      {
                rule = Rule;
                if (comment != NULL) {
@@@ -2056,11 -2005,11 +2059,11 @@@
                } else
                        (yyval) = (yyvsp[0]);
          }
- #line 2060 "awkgram.c" /* yacc.c:1646  */
 -#line 2009 "awkgram.c" /* yacc.c:1646  */
++#line 2063 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 20:
- #line 317 "awkgram.y" /* yacc.c:1646  */
 -#line 318 "awkgram.y" /* yacc.c:1646  */
++#line 320 "awkgram.y" /* yacc.c:1646  */
      {
                INSTRUCTION *tp;
  
@@@ -2083,14 -2032,18 +2086,18 @@@
                        ((yyvsp[-3])->nexti + 1)->condpair_left = 
(yyvsp[-3])->lasti;
                        ((yyvsp[-3])->nexti + 1)->condpair_right = 
(yyvsp[0])->lasti;
                }
-               (yyval) = list_append(list_merge((yyvsp[-3]), (yyvsp[0])), tp);
+               if (comment != NULL) {
+                       (yyval) = 
list_append(list_merge(list_prepend((yyvsp[-3]), comment), (yyvsp[0])), tp);
+                       comment = NULL;
+               } else
+                       (yyval) = list_append(list_merge((yyvsp[-3]), 
(yyvsp[0])), tp);
                rule = Rule;
          }
- #line 2090 "awkgram.c" /* yacc.c:1646  */
 -#line 2043 "awkgram.c" /* yacc.c:1646  */
++#line 2097 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 21:
- #line 343 "awkgram.y" /* yacc.c:1646  */
 -#line 348 "awkgram.y" /* yacc.c:1646  */
++#line 350 "awkgram.y" /* yacc.c:1646  */
      {
                static int begin_seen = 0;
  
@@@ -2101,13 -2054,14 +2108,14 @@@
  
                (yyvsp[0])->in_rule = rule = BEGIN;
                (yyvsp[0])->source_file = source;
+               check_comment();
                (yyval) = (yyvsp[0]);
          }
- #line 2107 "awkgram.c" /* yacc.c:1646  */
 -#line 2061 "awkgram.c" /* yacc.c:1646  */
++#line 2115 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 22:
- #line 356 "awkgram.y" /* yacc.c:1646  */
 -#line 362 "awkgram.y" /* yacc.c:1646  */
++#line 364 "awkgram.y" /* yacc.c:1646  */
      {
                static int end_seen = 0;
  
@@@ -2118,35 -2072,38 +2126,38 @@@
  
                (yyvsp[0])->in_rule = rule = END;
                (yyvsp[0])->source_file = source;
+               check_comment();
                (yyval) = (yyvsp[0]);
          }
- #line 2124 "awkgram.c" /* yacc.c:1646  */
 -#line 2079 "awkgram.c" /* yacc.c:1646  */
++#line 2133 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 23:
- #line 369 "awkgram.y" /* yacc.c:1646  */
 -#line 376 "awkgram.y" /* yacc.c:1646  */
++#line 378 "awkgram.y" /* yacc.c:1646  */
      {
                func_first = false;
                (yyvsp[0])->in_rule = rule = BEGINFILE;
                (yyvsp[0])->source_file = source;
+               check_comment();
                (yyval) = (yyvsp[0]);
          }
- #line 2135 "awkgram.c" /* yacc.c:1646  */
 -#line 2091 "awkgram.c" /* yacc.c:1646  */
++#line 2145 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 24:
- #line 376 "awkgram.y" /* yacc.c:1646  */
 -#line 384 "awkgram.y" /* yacc.c:1646  */
++#line 386 "awkgram.y" /* yacc.c:1646  */
      {
                func_first = false;
                (yyvsp[0])->in_rule = rule = ENDFILE;
                (yyvsp[0])->source_file = source;
+               check_comment();
                (yyval) = (yyvsp[0]);
          }
- #line 2146 "awkgram.c" /* yacc.c:1646  */
 -#line 2103 "awkgram.c" /* yacc.c:1646  */
++#line 2157 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 25:
- #line 386 "awkgram.y" /* yacc.c:1646  */
 -#line 395 "awkgram.y" /* yacc.c:1646  */
++#line 397 "awkgram.y" /* yacc.c:1646  */
      {
                INSTRUCTION *ip;
                if ((yyvsp[-3]) == NULL)
@@@ -2155,39 -2112,39 +2166,39 @@@
                        ip = (yyvsp[-3]);
                (yyval) = ip;
          }
- #line 2159 "awkgram.c" /* yacc.c:1646  */
 -#line 2116 "awkgram.c" /* yacc.c:1646  */
++#line 2170 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 26:
- #line 398 "awkgram.y" /* yacc.c:1646  */
 -#line 407 "awkgram.y" /* yacc.c:1646  */
++#line 409 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 2165 "awkgram.c" /* yacc.c:1646  */
 -#line 2122 "awkgram.c" /* yacc.c:1646  */
++#line 2176 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 27:
- #line 400 "awkgram.y" /* yacc.c:1646  */
 -#line 409 "awkgram.y" /* yacc.c:1646  */
++#line 411 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 2171 "awkgram.c" /* yacc.c:1646  */
 -#line 2128 "awkgram.c" /* yacc.c:1646  */
++#line 2182 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 28:
- #line 402 "awkgram.y" /* yacc.c:1646  */
 -#line 411 "awkgram.y" /* yacc.c:1646  */
++#line 413 "awkgram.y" /* yacc.c:1646  */
      {
                yyerror(_("`%s' is a built-in function, it cannot be 
redefined"),
                                        tokstart);
                YYABORT;
          }
- #line 2181 "awkgram.c" /* yacc.c:1646  */
 -#line 2138 "awkgram.c" /* yacc.c:1646  */
++#line 2192 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 29:
- #line 408 "awkgram.y" /* yacc.c:1646  */
 -#line 417 "awkgram.y" /* yacc.c:1646  */
++#line 419 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 2187 "awkgram.c" /* yacc.c:1646  */
 -#line 2144 "awkgram.c" /* yacc.c:1646  */
++#line 2198 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 32:
- #line 418 "awkgram.y" /* yacc.c:1646  */
 -#line 427 "awkgram.y" /* yacc.c:1646  */
++#line 429 "awkgram.y" /* yacc.c:1646  */
      {
                /*
                 *  treat any comments between BOF and the first function
@@@ -2214,17 -2171,17 +2225,17 @@@
                /* $4 already free'd in install_function */
                (yyval) = (yyvsp[-5]);
          }
- #line 2218 "awkgram.c" /* yacc.c:1646  */
 -#line 2175 "awkgram.c" /* yacc.c:1646  */
++#line 2229 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 33:
- #line 452 "awkgram.y" /* yacc.c:1646  */
 -#line 461 "awkgram.y" /* yacc.c:1646  */
++#line 463 "awkgram.y" /* yacc.c:1646  */
      { want_regexp = true; }
- #line 2224 "awkgram.c" /* yacc.c:1646  */
 -#line 2181 "awkgram.c" /* yacc.c:1646  */
++#line 2235 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 34:
- #line 454 "awkgram.y" /* yacc.c:1646  */
 -#line 463 "awkgram.y" /* yacc.c:1646  */
++#line 465 "awkgram.y" /* yacc.c:1646  */
      {
                  NODE *n, *exp;
                  char *re;
@@@ -2253,28 -2210,28 +2264,28 @@@
                  (yyval)->opcode = Op_match_rec;
                  (yyval)->memory = n;
                }
- #line 2257 "awkgram.c" /* yacc.c:1646  */
 -#line 2214 "awkgram.c" /* yacc.c:1646  */
++#line 2268 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 35:
- #line 486 "awkgram.y" /* yacc.c:1646  */
 -#line 495 "awkgram.y" /* yacc.c:1646  */
++#line 497 "awkgram.y" /* yacc.c:1646  */
      { bcfree((yyvsp[0])); }
- #line 2263 "awkgram.c" /* yacc.c:1646  */
 -#line 2220 "awkgram.c" /* yacc.c:1646  */
++#line 2274 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 37:
- #line 492 "awkgram.y" /* yacc.c:1646  */
 -#line 501 "awkgram.y" /* yacc.c:1646  */
++#line 503 "awkgram.y" /* yacc.c:1646  */
      {
                if (comment != NULL) {
                        (yyval) = list_create(comment);
                        comment = NULL;
                } else (yyval) = NULL;
          }
- #line 2274 "awkgram.c" /* yacc.c:1646  */
 -#line 2231 "awkgram.c" /* yacc.c:1646  */
++#line 2285 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 38:
- #line 499 "awkgram.y" /* yacc.c:1646  */
 -#line 508 "awkgram.y" /* yacc.c:1646  */
++#line 510 "awkgram.y" /* yacc.c:1646  */
      {
                if ((yyvsp[0]) == NULL) {
                        if (comment == NULL)
@@@ -2302,40 -2259,40 +2313,40 @@@
                }
                yyerrok;
          }
- #line 2306 "awkgram.c" /* yacc.c:1646  */
 -#line 2263 "awkgram.c" /* yacc.c:1646  */
++#line 2317 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 39:
- #line 527 "awkgram.y" /* yacc.c:1646  */
 -#line 536 "awkgram.y" /* yacc.c:1646  */
++#line 538 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 2312 "awkgram.c" /* yacc.c:1646  */
 -#line 2269 "awkgram.c" /* yacc.c:1646  */
++#line 2323 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 42:
- #line 537 "awkgram.y" /* yacc.c:1646  */
 -#line 546 "awkgram.y" /* yacc.c:1646  */
++#line 548 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 2318 "awkgram.c" /* yacc.c:1646  */
 -#line 2275 "awkgram.c" /* yacc.c:1646  */
++#line 2329 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 43:
- #line 539 "awkgram.y" /* yacc.c:1646  */
 -#line 548 "awkgram.y" /* yacc.c:1646  */
++#line 550 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[-1]); }
- #line 2324 "awkgram.c" /* yacc.c:1646  */
 -#line 2281 "awkgram.c" /* yacc.c:1646  */
++#line 2335 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 44:
- #line 541 "awkgram.y" /* yacc.c:1646  */
 -#line 550 "awkgram.y" /* yacc.c:1646  */
++#line 552 "awkgram.y" /* yacc.c:1646  */
      {
                if (do_pretty_print)
                        (yyval) = list_prepend((yyvsp[0]), 
instruction(Op_exec_count));
                else
                        (yyval) = (yyvsp[0]);
          }
- #line 2335 "awkgram.c" /* yacc.c:1646  */
 -#line 2292 "awkgram.c" /* yacc.c:1646  */
++#line 2346 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 45:
- #line 548 "awkgram.y" /* yacc.c:1646  */
 -#line 557 "awkgram.y" /* yacc.c:1646  */
++#line 559 "awkgram.y" /* yacc.c:1646  */
      {
                INSTRUCTION *dflt, *curr = NULL, *cexp, *cstmt;
                INSTRUCTION *ip, *nextc, *tbreak;
@@@ -2425,11 -2382,11 +2436,11 @@@
                break_allowed--;                        
                fix_break_continue(ip, tbreak, NULL);
          }
- #line 2429 "awkgram.c" /* yacc.c:1646  */
 -#line 2386 "awkgram.c" /* yacc.c:1646  */
++#line 2440 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 46:
- #line 638 "awkgram.y" /* yacc.c:1646  */
 -#line 647 "awkgram.y" /* yacc.c:1646  */
++#line 649 "awkgram.y" /* yacc.c:1646  */
      { 
                /*
                 *    -----------------
@@@ -2471,11 -2428,11 +2482,11 @@@
                continue_allowed--;
                fix_break_continue(ip, tbreak, tcont);
          }
- #line 2475 "awkgram.c" /* yacc.c:1646  */
 -#line 2432 "awkgram.c" /* yacc.c:1646  */
++#line 2486 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 47:
- #line 680 "awkgram.y" /* yacc.c:1646  */
 -#line 689 "awkgram.y" /* yacc.c:1646  */
++#line 691 "awkgram.y" /* yacc.c:1646  */
      {
                /*
                 *    -----------------
@@@ -2517,11 -2474,11 +2528,11 @@@
                } /* else
                        $1 and $4 are NULLs */
          }
- #line 2521 "awkgram.c" /* yacc.c:1646  */
 -#line 2478 "awkgram.c" /* yacc.c:1646  */
++#line 2532 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 48:
- #line 722 "awkgram.y" /* yacc.c:1646  */
 -#line 731 "awkgram.y" /* yacc.c:1646  */
++#line 733 "awkgram.y" /* yacc.c:1646  */
      {
                INSTRUCTION *ip;
                char *var_name = (yyvsp[-5])->lextok;
@@@ -2634,44 -2591,44 +2645,44 @@@ regular_loop
                break_allowed--;
                continue_allowed--;
          }
- #line 2638 "awkgram.c" /* yacc.c:1646  */
 -#line 2595 "awkgram.c" /* yacc.c:1646  */
++#line 2649 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 49:
- #line 835 "awkgram.y" /* yacc.c:1646  */
 -#line 844 "awkgram.y" /* yacc.c:1646  */
++#line 846 "awkgram.y" /* yacc.c:1646  */
      {
                (yyval) = mk_for_loop((yyvsp[-11]), (yyvsp[-9]), (yyvsp[-6]), 
(yyvsp[-3]), (yyvsp[0]));
  
                break_allowed--;
                continue_allowed--;
          }
- #line 2649 "awkgram.c" /* yacc.c:1646  */
 -#line 2606 "awkgram.c" /* yacc.c:1646  */
++#line 2660 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 50:
- #line 842 "awkgram.y" /* yacc.c:1646  */
 -#line 851 "awkgram.y" /* yacc.c:1646  */
++#line 853 "awkgram.y" /* yacc.c:1646  */
      {
                (yyval) = mk_for_loop((yyvsp[-10]), (yyvsp[-8]), (INSTRUCTION 
*) NULL, (yyvsp[-3]), (yyvsp[0]));
  
                break_allowed--;
                continue_allowed--;
          }
- #line 2660 "awkgram.c" /* yacc.c:1646  */
 -#line 2617 "awkgram.c" /* yacc.c:1646  */
++#line 2671 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 51:
- #line 849 "awkgram.y" /* yacc.c:1646  */
 -#line 858 "awkgram.y" /* yacc.c:1646  */
++#line 860 "awkgram.y" /* yacc.c:1646  */
      {
                if (do_pretty_print)
                        (yyval) = list_prepend((yyvsp[0]), 
instruction(Op_exec_count));
                else
                        (yyval) = (yyvsp[0]);
          }
- #line 2671 "awkgram.c" /* yacc.c:1646  */
 -#line 2628 "awkgram.c" /* yacc.c:1646  */
++#line 2682 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 52:
- #line 859 "awkgram.y" /* yacc.c:1646  */
 -#line 868 "awkgram.y" /* yacc.c:1646  */
++#line 870 "awkgram.y" /* yacc.c:1646  */
      { 
                if (! break_allowed)
                        error_ln((yyvsp[-1])->source_line,
@@@ -2680,11 -2637,11 +2691,11 @@@
                (yyval) = list_create((yyvsp[-1]));
  
          }
- #line 2684 "awkgram.c" /* yacc.c:1646  */
 -#line 2641 "awkgram.c" /* yacc.c:1646  */
++#line 2695 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 53:
- #line 868 "awkgram.y" /* yacc.c:1646  */
 -#line 877 "awkgram.y" /* yacc.c:1646  */
++#line 879 "awkgram.y" /* yacc.c:1646  */
      {
                if (! continue_allowed)
                        error_ln((yyvsp[-1])->source_line,
@@@ -2693,11 -2650,11 +2704,11 @@@
                (yyval) = list_create((yyvsp[-1]));
  
          }
- #line 2697 "awkgram.c" /* yacc.c:1646  */
 -#line 2654 "awkgram.c" /* yacc.c:1646  */
++#line 2708 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 54:
- #line 877 "awkgram.y" /* yacc.c:1646  */
 -#line 886 "awkgram.y" /* yacc.c:1646  */
++#line 888 "awkgram.y" /* yacc.c:1646  */
      {
                /* if inside function (rule = 0), resolve context at run-time */
                if (rule && rule != Rule)
@@@ -2706,11 -2663,11 +2717,11 @@@
                (yyvsp[-1])->target_jmp = ip_rec;
                (yyval) = list_create((yyvsp[-1]));
          }
- #line 2710 "awkgram.c" /* yacc.c:1646  */
 -#line 2667 "awkgram.c" /* yacc.c:1646  */
++#line 2721 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 55:
- #line 886 "awkgram.y" /* yacc.c:1646  */
 -#line 895 "awkgram.y" /* yacc.c:1646  */
++#line 897 "awkgram.y" /* yacc.c:1646  */
      {
                /* if inside function (rule = 0), resolve context at run-time */
                if (rule == BEGIN || rule == END || rule == ENDFILE)
@@@ -2721,11 -2678,11 +2732,11 @@@
                (yyvsp[-1])->target_endfile = ip_endfile;
                (yyval) = list_create((yyvsp[-1]));
          }
- #line 2725 "awkgram.c" /* yacc.c:1646  */
 -#line 2682 "awkgram.c" /* yacc.c:1646  */
++#line 2736 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 56:
- #line 897 "awkgram.y" /* yacc.c:1646  */
 -#line 906 "awkgram.y" /* yacc.c:1646  */
++#line 908 "awkgram.y" /* yacc.c:1646  */
      {
                /* Initialize the two possible jump targets, the actual target
                 * is resolved at run-time. 
@@@ -2740,20 -2697,20 +2751,20 @@@
                } else
                        (yyval) = list_append((yyvsp[-1]), (yyvsp[-2]));
          }
- #line 2744 "awkgram.c" /* yacc.c:1646  */
 -#line 2701 "awkgram.c" /* yacc.c:1646  */
++#line 2755 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 57:
- #line 912 "awkgram.y" /* yacc.c:1646  */
 -#line 921 "awkgram.y" /* yacc.c:1646  */
++#line 923 "awkgram.y" /* yacc.c:1646  */
      {
                if (! in_function)
                        yyerror(_("`return' used outside function context"));
          }
- #line 2753 "awkgram.c" /* yacc.c:1646  */
 -#line 2710 "awkgram.c" /* yacc.c:1646  */
++#line 2764 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 58:
- #line 915 "awkgram.y" /* yacc.c:1646  */
 -#line 924 "awkgram.y" /* yacc.c:1646  */
++#line 926 "awkgram.y" /* yacc.c:1646  */
      {
                if ((yyvsp[-1]) == NULL) {
                        (yyval) = list_create((yyvsp[-3]));
@@@ -2774,45 -2731,124 +2785,45 @@@
                        (yyval) = list_append((yyvsp[-1]), (yyvsp[-3]));
                }
          }
- #line 2778 "awkgram.c" /* yacc.c:1646  */
 -#line 2735 "awkgram.c" /* yacc.c:1646  */
++#line 2789 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 60:
- #line 939 "awkgram.y" /* yacc.c:1646  */
 -#line 956 "awkgram.y" /* yacc.c:1646  */
++#line 950 "awkgram.y" /* yacc.c:1646  */
      { in_print = true; in_parens = 0; }
- #line 2784 "awkgram.c" /* yacc.c:1646  */
 -#line 2741 "awkgram.c" /* yacc.c:1646  */
++#line 2795 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 61:
- #line 940 "awkgram.y" /* yacc.c:1646  */
 -#line 957 "awkgram.y" /* yacc.c:1646  */
++#line 951 "awkgram.y" /* yacc.c:1646  */
      {
 -              /*
 -               * Optimization: plain `print' has no expression list, so $3 is 
null.
 -               * If $3 is NULL or is a bytecode list for $0 use 
Op_K_print_rec,
 -               * which is faster for these two cases.
 -               */
 -
 -              if ((yyvsp[-3])->opcode == Op_K_print &&
 -                      ((yyvsp[-1]) == NULL
 -                              || ((yyvsp[-1])->lasti->opcode == Op_field_spec
 -                                      && (yyvsp[-1])->nexti->nexti->nexti == 
(yyvsp[-1])->lasti
 -                                      && (yyvsp[-1])->nexti->nexti->opcode == 
Op_push_i
 -                                      && 
(yyvsp[-1])->nexti->nexti->memory->type == Node_val)
 -                      )
 -              ) {
 -                      static bool warned = false;
 -                      /*   -----------------
 -                       *      output_redir
 -                       *    [ redirect exp ]
 -                       *   -----------------
 -                       *     expression_list
 -                       *   ------------------
 -                       *    [Op_K_print_rec | NULL | redir_type | expr_count]
 -                       */
 -
 -                      if ((yyvsp[-1]) != NULL) {
 -                              NODE *n = (yyvsp[-1])->nexti->nexti->memory;
 -
 -                              if (! iszero(n))
 -                                      goto regular_print;
 +              (yyval) = mk_print((yyvsp[-3]), (yyvsp[-1]), (yyvsp[0]));
 +        }
- #line 2792 "awkgram.c" /* yacc.c:1646  */
++#line 2803 "awkgram.c" /* yacc.c:1646  */
 +    break;
  
 -                              bcfree((yyvsp[-1])->lasti);                     
/* Op_field_spec */
 -                              unref(n);                               /* 
Node_val */
 -                              bcfree((yyvsp[-1])->nexti->nexti);              
/* Op_push_i */
 -                              bcfree((yyvsp[-1])->nexti);                     
/* Op_list */
 -                              bcfree((yyvsp[-1]));                            
/* Op_list */
 -                      } else {
 -                              if (do_lint && (rule == BEGIN || rule == END) 
&& ! warned) {
 -                                      warned = true;
 -                                      lintwarn_ln((yyvsp[-3])->source_line,
 -              _("plain `print' in BEGIN or END rule should probably be `print 
\"\"'"));
 -                              }
 -                      }
 +  case 62:
- #line 954 "awkgram.y" /* yacc.c:1646  */
++#line 965 "awkgram.y" /* yacc.c:1646  */
 +    { in_print = true; in_parens = 0; }
- #line 2798 "awkgram.c" /* yacc.c:1646  */
++#line 2809 "awkgram.c" /* yacc.c:1646  */
 +    break;
  
 -                      (yyvsp[-3])->expr_count = 0;
 -                      (yyvsp[-3])->opcode = Op_K_print_rec;
 -                      if ((yyvsp[0]) == NULL) {    /* no redircetion */
 -                              (yyvsp[-3])->redir_type = redirect_none;
 -                              (yyval) = list_create((yyvsp[-3]));
 -                      } else {
 -                              INSTRUCTION *ip;
 -                              ip = (yyvsp[0])->nexti;
 -                              (yyvsp[-3])->redir_type = ip->redir_type;
 -                              (yyvsp[0])->nexti = ip->nexti;
 -                              bcfree(ip);
 -                              (yyval) = list_append((yyvsp[0]), (yyvsp[-3]));
 -                      }
 -              } else {
 -                      /*   -----------------
 -                       *    [ output_redir    ]
 -                       *    [ redirect exp    ]
 -                       *   -----------------
 -                       *    [ expression_list ]
 -                       *   ------------------
 -                       *    [$1 | NULL | redir_type | expr_count]
 -                       *
 -                       */
 -regular_print:         
 -                      if ((yyvsp[0]) == NULL) {               /* no 
redirection */
 -                              if ((yyvsp[-1]) == NULL)        {       /* 
printf without arg */
 -                                      (yyvsp[-3])->expr_count = 0;
 -                                      (yyvsp[-3])->redir_type = redirect_none;
 -                                      (yyval) = list_create((yyvsp[-3]));
 -                              } else {
 -                                      INSTRUCTION *t = (yyvsp[-1]);
 -                                      (yyvsp[-3])->expr_count = 
count_expressions(&t, false);
 -                                      (yyvsp[-3])->redir_type = redirect_none;
 -                                      (yyval) = list_append(t, (yyvsp[-3]));
 -                              }
 -                      } else {
 -                              INSTRUCTION *ip;
 -                              ip = (yyvsp[0])->nexti;
 -                              (yyvsp[-3])->redir_type = ip->redir_type;
 -                              (yyvsp[0])->nexti = ip->nexti;
 -                              bcfree(ip);
 -                              if ((yyvsp[-1]) == NULL) {
 -                                      (yyvsp[-3])->expr_count = 0;
 -                                      (yyval) = list_append((yyvsp[0]), 
(yyvsp[-3]));
 -                              } else {
 -                                      INSTRUCTION *t = (yyvsp[-1]);
 -                                      (yyvsp[-3])->expr_count = 
count_expressions(&t, false);
 -                                      (yyval) = 
list_append(list_merge((yyvsp[0]), t), (yyvsp[-3]));
 -                              }
 -                      }
 -              }
 +  case 63:
- #line 955 "awkgram.y" /* yacc.c:1646  */
++#line 966 "awkgram.y" /* yacc.c:1646  */
 +    {
 +              (yyval) = mk_print((yyvsp[-3]), (yyvsp[-1]), (yyvsp[0]));
          }
- #line 2806 "awkgram.c" /* yacc.c:1646  */
 -#line 2842 "awkgram.c" /* yacc.c:1646  */
++#line 2817 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 62:
 -#line 1054 "awkgram.y" /* yacc.c:1646  */
 +  case 64:
- #line 959 "awkgram.y" /* yacc.c:1646  */
++#line 970 "awkgram.y" /* yacc.c:1646  */
      { sub_counter = 0; }
- #line 2812 "awkgram.c" /* yacc.c:1646  */
 -#line 2848 "awkgram.c" /* yacc.c:1646  */
++#line 2823 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 63:
 -#line 1055 "awkgram.y" /* yacc.c:1646  */
 +  case 65:
- #line 960 "awkgram.y" /* yacc.c:1646  */
++#line 971 "awkgram.y" /* yacc.c:1646  */
      {
                char *arr = (yyvsp[-2])->lextok;
  
@@@ -2845,11 -2881,11 +2856,11 @@@
                        (yyval) = list_append(list_append((yyvsp[0]), 
(yyvsp[-2])), (yyvsp[-3]));
                }
          }
- #line 2849 "awkgram.c" /* yacc.c:1646  */
 -#line 2885 "awkgram.c" /* yacc.c:1646  */
++#line 2860 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 64:
 -#line 1092 "awkgram.y" /* yacc.c:1646  */
 +  case 66:
- #line 997 "awkgram.y" /* yacc.c:1646  */
++#line 1008 "awkgram.y" /* yacc.c:1646  */
      {
                static bool warned = false;
                char *arr = (yyvsp[-1])->lextok;
@@@ -2875,52 -2911,52 +2886,52 @@@
                                fatal(_("`delete' is not allowed with 
FUNCTAB"));
                }
          }
- #line 2879 "awkgram.c" /* yacc.c:1646  */
 -#line 2915 "awkgram.c" /* yacc.c:1646  */
++#line 2890 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 65:
 -#line 1118 "awkgram.y" /* yacc.c:1646  */
 +  case 67:
- #line 1023 "awkgram.y" /* yacc.c:1646  */
++#line 1034 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = optimize_assignment((yyvsp[0])); }
- #line 2885 "awkgram.c" /* yacc.c:1646  */
 -#line 2921 "awkgram.c" /* yacc.c:1646  */
++#line 2896 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 66:
 -#line 1123 "awkgram.y" /* yacc.c:1646  */
 +  case 68:
- #line 1028 "awkgram.y" /* yacc.c:1646  */
++#line 1039 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 2891 "awkgram.c" /* yacc.c:1646  */
 -#line 2927 "awkgram.c" /* yacc.c:1646  */
++#line 2902 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 67:
 -#line 1125 "awkgram.y" /* yacc.c:1646  */
 +  case 69:
- #line 1030 "awkgram.y" /* yacc.c:1646  */
++#line 1041 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 2897 "awkgram.c" /* yacc.c:1646  */
 -#line 2933 "awkgram.c" /* yacc.c:1646  */
++#line 2908 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 68:
 -#line 1130 "awkgram.y" /* yacc.c:1646  */
 +  case 70:
- #line 1035 "awkgram.y" /* yacc.c:1646  */
++#line 1046 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 2903 "awkgram.c" /* yacc.c:1646  */
 -#line 2939 "awkgram.c" /* yacc.c:1646  */
++#line 2914 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 69:
 -#line 1132 "awkgram.y" /* yacc.c:1646  */
 +  case 71:
- #line 1037 "awkgram.y" /* yacc.c:1646  */
++#line 1048 "awkgram.y" /* yacc.c:1646  */
      {
                if ((yyvsp[-1]) == NULL)
                        (yyval) = list_create((yyvsp[0]));
                else
                        (yyval) = list_prepend((yyvsp[-1]), (yyvsp[0]));
          }
- #line 2914 "awkgram.c" /* yacc.c:1646  */
 -#line 2950 "awkgram.c" /* yacc.c:1646  */
++#line 2925 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 70:
 -#line 1139 "awkgram.y" /* yacc.c:1646  */
 +  case 72:
- #line 1044 "awkgram.y" /* yacc.c:1646  */
++#line 1055 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 2920 "awkgram.c" /* yacc.c:1646  */
 -#line 2956 "awkgram.c" /* yacc.c:1646  */
++#line 2931 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 71:
 -#line 1144 "awkgram.y" /* yacc.c:1646  */
 +  case 73:
- #line 1049 "awkgram.y" /* yacc.c:1646  */
++#line 1060 "awkgram.y" /* yacc.c:1646  */
      {
                INSTRUCTION *casestmt = (yyvsp[0]);
                if ((yyvsp[0]) == NULL)
@@@ -2932,11 -2968,11 +2943,11 @@@
                bcfree((yyvsp[-2]));
                (yyval) = (yyvsp[-4]);
          }
- #line 2936 "awkgram.c" /* yacc.c:1646  */
 -#line 2972 "awkgram.c" /* yacc.c:1646  */
++#line 2947 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 72:
 -#line 1156 "awkgram.y" /* yacc.c:1646  */
 +  case 74:
- #line 1061 "awkgram.y" /* yacc.c:1646  */
++#line 1072 "awkgram.y" /* yacc.c:1646  */
      {
                INSTRUCTION *casestmt = (yyvsp[0]);
                if ((yyvsp[0]) == NULL)
@@@ -2947,17 -2983,17 +2958,17 @@@
                (yyvsp[-3])->case_stmt = casestmt;
                (yyval) = (yyvsp[-3]);
          }
- #line 2951 "awkgram.c" /* yacc.c:1646  */
 -#line 2987 "awkgram.c" /* yacc.c:1646  */
++#line 2962 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 73:
 -#line 1170 "awkgram.y" /* yacc.c:1646  */
 +  case 75:
- #line 1075 "awkgram.y" /* yacc.c:1646  */
++#line 1086 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 2957 "awkgram.c" /* yacc.c:1646  */
 -#line 2993 "awkgram.c" /* yacc.c:1646  */
++#line 2968 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 74:
 -#line 1172 "awkgram.y" /* yacc.c:1646  */
 +  case 76:
- #line 1077 "awkgram.y" /* yacc.c:1646  */
++#line 1088 "awkgram.y" /* yacc.c:1646  */
      { 
                NODE *n = (yyvsp[0])->memory;
                (void) force_number(n);
@@@ -2965,83 -3001,71 +2976,83 @@@
                bcfree((yyvsp[-1]));
                (yyval) = (yyvsp[0]);
          }
- #line 2969 "awkgram.c" /* yacc.c:1646  */
 -#line 3005 "awkgram.c" /* yacc.c:1646  */
++#line 2980 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 75:
 -#line 1180 "awkgram.y" /* yacc.c:1646  */
 +  case 77:
- #line 1085 "awkgram.y" /* yacc.c:1646  */
++#line 1096 "awkgram.y" /* yacc.c:1646  */
      {
                bcfree((yyvsp[-1]));
                (yyval) = (yyvsp[0]);
          }
- #line 2978 "awkgram.c" /* yacc.c:1646  */
 -#line 3014 "awkgram.c" /* yacc.c:1646  */
++#line 2989 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 76:
 -#line 1185 "awkgram.y" /* yacc.c:1646  */
 +  case 78:
- #line 1090 "awkgram.y" /* yacc.c:1646  */
++#line 1101 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 2984 "awkgram.c" /* yacc.c:1646  */
 -#line 3020 "awkgram.c" /* yacc.c:1646  */
++#line 2995 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 77:
 -#line 1187 "awkgram.y" /* yacc.c:1646  */
 +  case 79:
- #line 1092 "awkgram.y" /* yacc.c:1646  */
++#line 1103 "awkgram.y" /* yacc.c:1646  */
      {
                (yyvsp[0])->opcode = Op_push_re;
                (yyval) = (yyvsp[0]);
          }
- #line 2993 "awkgram.c" /* yacc.c:1646  */
 -#line 3029 "awkgram.c" /* yacc.c:1646  */
++#line 3004 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 78:
 -#line 1195 "awkgram.y" /* yacc.c:1646  */
 +  case 80:
- #line 1100 "awkgram.y" /* yacc.c:1646  */
++#line 1111 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 2999 "awkgram.c" /* yacc.c:1646  */
 -#line 3035 "awkgram.c" /* yacc.c:1646  */
++#line 3010 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 79:
 -#line 1197 "awkgram.y" /* yacc.c:1646  */
 +  case 81:
- #line 1102 "awkgram.y" /* yacc.c:1646  */
++#line 1113 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3005 "awkgram.c" /* yacc.c:1646  */
 -#line 3041 "awkgram.c" /* yacc.c:1646  */
++#line 3016 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 81:
 -#line 1207 "awkgram.y" /* yacc.c:1646  */
 +  case 82:
- #line 1107 "awkgram.y" /* yacc.c:1646  */
++#line 1118 "awkgram.y" /* yacc.c:1646  */
 +    { (yyval) = (yyvsp[0]); }
- #line 3011 "awkgram.c" /* yacc.c:1646  */
++#line 3022 "awkgram.c" /* yacc.c:1646  */
 +    break;
 +
 +  case 83:
- #line 1109 "awkgram.y" /* yacc.c:1646  */
++#line 1120 "awkgram.y" /* yacc.c:1646  */
 +    { (yyval) = (yyvsp[0]); }
- #line 3017 "awkgram.c" /* yacc.c:1646  */
++#line 3028 "awkgram.c" /* yacc.c:1646  */
 +    break;
 +
 +  case 85:
- #line 1119 "awkgram.y" /* yacc.c:1646  */
++#line 1130 "awkgram.y" /* yacc.c:1646  */
      {
                (yyval) = (yyvsp[-1]);
          }
- #line 3025 "awkgram.c" /* yacc.c:1646  */
 -#line 3049 "awkgram.c" /* yacc.c:1646  */
++#line 3036 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 82:
 -#line 1214 "awkgram.y" /* yacc.c:1646  */
 +  case 86:
- #line 1126 "awkgram.y" /* yacc.c:1646  */
++#line 1137 "awkgram.y" /* yacc.c:1646  */
      {
                in_print = false;
                in_parens = 0;
                (yyval) = NULL;
          }
- #line 3035 "awkgram.c" /* yacc.c:1646  */
 -#line 3059 "awkgram.c" /* yacc.c:1646  */
++#line 3046 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 83:
 -#line 1219 "awkgram.y" /* yacc.c:1646  */
 +  case 87:
- #line 1131 "awkgram.y" /* yacc.c:1646  */
++#line 1142 "awkgram.y" /* yacc.c:1646  */
      { in_print = false; in_parens = 0; }
- #line 3041 "awkgram.c" /* yacc.c:1646  */
 -#line 3065 "awkgram.c" /* yacc.c:1646  */
++#line 3052 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 84:
 -#line 1220 "awkgram.y" /* yacc.c:1646  */
 +  case 88:
- #line 1132 "awkgram.y" /* yacc.c:1646  */
++#line 1143 "awkgram.y" /* yacc.c:1646  */
      {
                if ((yyvsp[-2])->redir_type == redirect_twoway
                        && (yyvsp[0])->lasti->opcode == Op_K_getline_redir
@@@ -3049,136 -3073,136 +3060,136 @@@
                        yyerror(_("multistage two-way pipelines don't work"));
                (yyval) = list_prepend((yyvsp[0]), (yyvsp[-2]));
          }
- #line 3053 "awkgram.c" /* yacc.c:1646  */
 -#line 3077 "awkgram.c" /* yacc.c:1646  */
++#line 3064 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 85:
 -#line 1231 "awkgram.y" /* yacc.c:1646  */
 +  case 89:
- #line 1143 "awkgram.y" /* yacc.c:1646  */
++#line 1154 "awkgram.y" /* yacc.c:1646  */
      {
                (yyval) = mk_condition((yyvsp[-3]), (yyvsp[-5]), (yyvsp[0]), 
NULL, NULL);
          }
- #line 3061 "awkgram.c" /* yacc.c:1646  */
 -#line 3085 "awkgram.c" /* yacc.c:1646  */
++#line 3072 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 86:
 -#line 1236 "awkgram.y" /* yacc.c:1646  */
 +  case 90:
- #line 1148 "awkgram.y" /* yacc.c:1646  */
++#line 1159 "awkgram.y" /* yacc.c:1646  */
      {
                (yyval) = mk_condition((yyvsp[-6]), (yyvsp[-8]), (yyvsp[-3]), 
(yyvsp[-2]), (yyvsp[0]));
          }
- #line 3069 "awkgram.c" /* yacc.c:1646  */
 -#line 3093 "awkgram.c" /* yacc.c:1646  */
++#line 3080 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 91:
 -#line 1253 "awkgram.y" /* yacc.c:1646  */
 +  case 95:
- #line 1165 "awkgram.y" /* yacc.c:1646  */
++#line 1176 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 3075 "awkgram.c" /* yacc.c:1646  */
 -#line 3099 "awkgram.c" /* yacc.c:1646  */
++#line 3086 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 92:
 -#line 1255 "awkgram.y" /* yacc.c:1646  */
 +  case 96:
- #line 1167 "awkgram.y" /* yacc.c:1646  */
++#line 1178 "awkgram.y" /* yacc.c:1646  */
      {
                bcfree((yyvsp[-1]));
                (yyval) = (yyvsp[0]);
          }
- #line 3084 "awkgram.c" /* yacc.c:1646  */
 -#line 3108 "awkgram.c" /* yacc.c:1646  */
++#line 3095 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 93:
 -#line 1263 "awkgram.y" /* yacc.c:1646  */
 +  case 97:
- #line 1175 "awkgram.y" /* yacc.c:1646  */
++#line 1186 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 3090 "awkgram.c" /* yacc.c:1646  */
 -#line 3114 "awkgram.c" /* yacc.c:1646  */
++#line 3101 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 94:
 -#line 1265 "awkgram.y" /* yacc.c:1646  */
 +  case 98:
- #line 1177 "awkgram.y" /* yacc.c:1646  */
++#line 1188 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3096 "awkgram.c" /* yacc.c:1646  */
 -#line 3120 "awkgram.c" /* yacc.c:1646  */
++#line 3107 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 95:
 -#line 1270 "awkgram.y" /* yacc.c:1646  */
 +  case 99:
- #line 1182 "awkgram.y" /* yacc.c:1646  */
++#line 1193 "awkgram.y" /* yacc.c:1646  */
      {
                (yyvsp[0])->param_count = 0;
                (yyval) = list_create((yyvsp[0]));
          }
- #line 3105 "awkgram.c" /* yacc.c:1646  */
 -#line 3129 "awkgram.c" /* yacc.c:1646  */
++#line 3116 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 96:
 -#line 1275 "awkgram.y" /* yacc.c:1646  */
 +  case 100:
- #line 1187 "awkgram.y" /* yacc.c:1646  */
++#line 1198 "awkgram.y" /* yacc.c:1646  */
      {
                (yyvsp[0])->param_count =  (yyvsp[-2])->lasti->param_count + 1;
                (yyval) = list_append((yyvsp[-2]), (yyvsp[0]));
                yyerrok;
          }
- #line 3115 "awkgram.c" /* yacc.c:1646  */
 -#line 3139 "awkgram.c" /* yacc.c:1646  */
++#line 3126 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 97:
 -#line 1281 "awkgram.y" /* yacc.c:1646  */
 +  case 101:
- #line 1193 "awkgram.y" /* yacc.c:1646  */
++#line 1204 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 3121 "awkgram.c" /* yacc.c:1646  */
 -#line 3145 "awkgram.c" /* yacc.c:1646  */
++#line 3132 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 98:
 -#line 1283 "awkgram.y" /* yacc.c:1646  */
 +  case 102:
- #line 1195 "awkgram.y" /* yacc.c:1646  */
++#line 1206 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[-1]); }
- #line 3127 "awkgram.c" /* yacc.c:1646  */
 -#line 3151 "awkgram.c" /* yacc.c:1646  */
++#line 3138 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 99:
 -#line 1285 "awkgram.y" /* yacc.c:1646  */
 +  case 103:
- #line 1197 "awkgram.y" /* yacc.c:1646  */
++#line 1208 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[-2]); }
- #line 3133 "awkgram.c" /* yacc.c:1646  */
 -#line 3157 "awkgram.c" /* yacc.c:1646  */
++#line 3144 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 100:
 -#line 1291 "awkgram.y" /* yacc.c:1646  */
 +  case 104:
- #line 1203 "awkgram.y" /* yacc.c:1646  */
++#line 1214 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 3139 "awkgram.c" /* yacc.c:1646  */
 -#line 3163 "awkgram.c" /* yacc.c:1646  */
++#line 3150 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 101:
 -#line 1293 "awkgram.y" /* yacc.c:1646  */
 +  case 105:
- #line 1205 "awkgram.y" /* yacc.c:1646  */
++#line 1216 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3145 "awkgram.c" /* yacc.c:1646  */
 -#line 3169 "awkgram.c" /* yacc.c:1646  */
++#line 3156 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 102:
 -#line 1298 "awkgram.y" /* yacc.c:1646  */
 +  case 106:
- #line 1210 "awkgram.y" /* yacc.c:1646  */
++#line 1221 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 3151 "awkgram.c" /* yacc.c:1646  */
 -#line 3175 "awkgram.c" /* yacc.c:1646  */
++#line 3162 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 103:
 -#line 1300 "awkgram.y" /* yacc.c:1646  */
 +  case 107:
- #line 1212 "awkgram.y" /* yacc.c:1646  */
++#line 1223 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3157 "awkgram.c" /* yacc.c:1646  */
 -#line 3181 "awkgram.c" /* yacc.c:1646  */
++#line 3168 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 104:
 -#line 1305 "awkgram.y" /* yacc.c:1646  */
 +  case 108:
- #line 1217 "awkgram.y" /* yacc.c:1646  */
++#line 1228 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = mk_expression_list(NULL, (yyvsp[0])); }
- #line 3163 "awkgram.c" /* yacc.c:1646  */
 -#line 3187 "awkgram.c" /* yacc.c:1646  */
++#line 3174 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 105:
 -#line 1307 "awkgram.y" /* yacc.c:1646  */
 +  case 109:
- #line 1219 "awkgram.y" /* yacc.c:1646  */
++#line 1230 "awkgram.y" /* yacc.c:1646  */
      {
                (yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
                yyerrok;
          }
- #line 3172 "awkgram.c" /* yacc.c:1646  */
 -#line 3196 "awkgram.c" /* yacc.c:1646  */
++#line 3183 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 106:
 -#line 1312 "awkgram.y" /* yacc.c:1646  */
 +  case 110:
- #line 1224 "awkgram.y" /* yacc.c:1646  */
++#line 1235 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 3178 "awkgram.c" /* yacc.c:1646  */
 -#line 3202 "awkgram.c" /* yacc.c:1646  */
++#line 3189 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 107:
 -#line 1314 "awkgram.y" /* yacc.c:1646  */
 +  case 111:
- #line 1226 "awkgram.y" /* yacc.c:1646  */
++#line 1237 "awkgram.y" /* yacc.c:1646  */
      {
                /*
                 * Returning the expression list instead of NULL lets
@@@ -3186,52 -3210,52 +3197,52 @@@
                 */
                (yyval) = (yyvsp[-1]);
          }
- #line 3190 "awkgram.c" /* yacc.c:1646  */
 -#line 3214 "awkgram.c" /* yacc.c:1646  */
++#line 3201 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 108:
 -#line 1322 "awkgram.y" /* yacc.c:1646  */
 +  case 112:
- #line 1234 "awkgram.y" /* yacc.c:1646  */
++#line 1245 "awkgram.y" /* yacc.c:1646  */
      {
                /* Ditto */
                (yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
          }
- #line 3199 "awkgram.c" /* yacc.c:1646  */
 -#line 3223 "awkgram.c" /* yacc.c:1646  */
++#line 3210 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 109:
 -#line 1327 "awkgram.y" /* yacc.c:1646  */
 +  case 113:
- #line 1239 "awkgram.y" /* yacc.c:1646  */
++#line 1250 "awkgram.y" /* yacc.c:1646  */
      {
                /* Ditto */
                (yyval) = (yyvsp[-2]);
          }
- #line 3208 "awkgram.c" /* yacc.c:1646  */
 -#line 3232 "awkgram.c" /* yacc.c:1646  */
++#line 3219 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 110:
 -#line 1336 "awkgram.y" /* yacc.c:1646  */
 +  case 114:
- #line 1248 "awkgram.y" /* yacc.c:1646  */
++#line 1259 "awkgram.y" /* yacc.c:1646  */
      {
                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 3219 "awkgram.c" /* yacc.c:1646  */
 -#line 3243 "awkgram.c" /* yacc.c:1646  */
++#line 3230 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 111:
 -#line 1343 "awkgram.y" /* yacc.c:1646  */
 +  case 115:
- #line 1255 "awkgram.y" /* yacc.c:1646  */
++#line 1266 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = mk_boolean((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
- #line 3225 "awkgram.c" /* yacc.c:1646  */
 -#line 3249 "awkgram.c" /* yacc.c:1646  */
++#line 3236 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 112:
 -#line 1345 "awkgram.y" /* yacc.c:1646  */
 +  case 116:
- #line 1257 "awkgram.y" /* yacc.c:1646  */
++#line 1268 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = mk_boolean((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
- #line 3231 "awkgram.c" /* yacc.c:1646  */
 -#line 3255 "awkgram.c" /* yacc.c:1646  */
++#line 3242 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 113:
 -#line 1347 "awkgram.y" /* yacc.c:1646  */
 +  case 117:
- #line 1259 "awkgram.y" /* yacc.c:1646  */
++#line 1270 "awkgram.y" /* yacc.c:1646  */
      {
                if ((yyvsp[-2])->lasti->opcode == Op_match_rec)
                        warning_ln((yyvsp[-1])->source_line,
@@@ -3247,11 -3271,11 +3258,11 @@@
                        (yyval) = list_append(list_merge((yyvsp[-2]), 
(yyvsp[0])), (yyvsp[-1]));
                }
          }
- #line 3251 "awkgram.c" /* yacc.c:1646  */
 -#line 3275 "awkgram.c" /* yacc.c:1646  */
++#line 3262 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 114:
 -#line 1363 "awkgram.y" /* yacc.c:1646  */
 +  case 118:
- #line 1275 "awkgram.y" /* yacc.c:1646  */
++#line 1286 "awkgram.y" /* yacc.c:1646  */
      {
                if (do_lint_old)
                        warning_ln((yyvsp[-1])->source_line,
@@@ -3261,97 -3285,91 +3272,97 @@@
                (yyvsp[-1])->expr_count = 1;
                (yyval) = list_append(list_merge((yyvsp[-2]), (yyvsp[0])), 
(yyvsp[-1]));
          }
- #line 3265 "awkgram.c" /* yacc.c:1646  */
 -#line 3289 "awkgram.c" /* yacc.c:1646  */
++#line 3276 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 115:
 -#line 1373 "awkgram.y" /* yacc.c:1646  */
 +  case 119:
- #line 1285 "awkgram.y" /* yacc.c:1646  */
++#line 1296 "awkgram.y" /* yacc.c:1646  */
      {
                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 3276 "awkgram.c" /* yacc.c:1646  */
 -#line 3300 "awkgram.c" /* yacc.c:1646  */
++#line 3287 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 116:
 -#line 1380 "awkgram.y" /* yacc.c:1646  */
 +  case 120:
- #line 1292 "awkgram.y" /* yacc.c:1646  */
++#line 1303 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = mk_condition((yyvsp[-4]), (yyvsp[-3]), (yyvsp[-2]), 
(yyvsp[-1]), (yyvsp[0])); }
- #line 3282 "awkgram.c" /* yacc.c:1646  */
 -#line 3306 "awkgram.c" /* yacc.c:1646  */
++#line 3293 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 117:
 -#line 1382 "awkgram.y" /* yacc.c:1646  */
 +  case 121:
- #line 1294 "awkgram.y" /* yacc.c:1646  */
++#line 1305 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3288 "awkgram.c" /* yacc.c:1646  */
 -#line 3312 "awkgram.c" /* yacc.c:1646  */
++#line 3299 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 118:
 -#line 1387 "awkgram.y" /* yacc.c:1646  */
 +  case 122:
- #line 1296 "awkgram.y" /* yacc.c:1646  */
++#line 1307 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3294 "awkgram.c" /* yacc.c:1646  */
 -#line 3318 "awkgram.c" /* yacc.c:1646  */
++#line 3305 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 119:
 -#line 1389 "awkgram.y" /* yacc.c:1646  */
 +  case 123:
- #line 1301 "awkgram.y" /* yacc.c:1646  */
++#line 1312 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3300 "awkgram.c" /* yacc.c:1646  */
 -#line 3324 "awkgram.c" /* yacc.c:1646  */
++#line 3311 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 120:
 -#line 1391 "awkgram.y" /* yacc.c:1646  */
 +  case 124:
- #line 1303 "awkgram.y" /* yacc.c:1646  */
++#line 1314 "awkgram.y" /* yacc.c:1646  */
 +    { (yyval) = (yyvsp[0]); }
- #line 3306 "awkgram.c" /* yacc.c:1646  */
++#line 3317 "awkgram.c" /* yacc.c:1646  */
 +    break;
 +
 +  case 125:
- #line 1305 "awkgram.y" /* yacc.c:1646  */
++#line 1316 "awkgram.y" /* yacc.c:1646  */
      { 
                (yyvsp[0])->opcode = Op_assign_quotient;
                (yyval) = (yyvsp[0]);
          }
- #line 3315 "awkgram.c" /* yacc.c:1646  */
 -#line 3333 "awkgram.c" /* yacc.c:1646  */
++#line 3326 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 121:
 -#line 1399 "awkgram.y" /* yacc.c:1646  */
 +  case 126:
- #line 1313 "awkgram.y" /* yacc.c:1646  */
++#line 1324 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3321 "awkgram.c" /* yacc.c:1646  */
 -#line 3339 "awkgram.c" /* yacc.c:1646  */
++#line 3332 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 122:
 -#line 1401 "awkgram.y" /* yacc.c:1646  */
 +  case 127:
- #line 1315 "awkgram.y" /* yacc.c:1646  */
++#line 1326 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3327 "awkgram.c" /* yacc.c:1646  */
 -#line 3345 "awkgram.c" /* yacc.c:1646  */
++#line 3338 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 123:
 -#line 1406 "awkgram.y" /* yacc.c:1646  */
 +  case 128:
- #line 1320 "awkgram.y" /* yacc.c:1646  */
++#line 1331 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3333 "awkgram.c" /* yacc.c:1646  */
 -#line 3351 "awkgram.c" /* yacc.c:1646  */
++#line 3344 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 124:
 -#line 1408 "awkgram.y" /* yacc.c:1646  */
 +  case 129:
- #line 1322 "awkgram.y" /* yacc.c:1646  */
++#line 1333 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3339 "awkgram.c" /* yacc.c:1646  */
 -#line 3357 "awkgram.c" /* yacc.c:1646  */
++#line 3350 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 125:
 -#line 1413 "awkgram.y" /* yacc.c:1646  */
 +  case 130:
- #line 1327 "awkgram.y" /* yacc.c:1646  */
++#line 1338 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3345 "awkgram.c" /* yacc.c:1646  */
 -#line 3363 "awkgram.c" /* yacc.c:1646  */
++#line 3356 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 126:
 -#line 1415 "awkgram.y" /* yacc.c:1646  */
 +  case 131:
- #line 1329 "awkgram.y" /* yacc.c:1646  */
++#line 1340 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3351 "awkgram.c" /* yacc.c:1646  */
 -#line 3369 "awkgram.c" /* yacc.c:1646  */
++#line 3362 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 127:
 -#line 1417 "awkgram.y" /* yacc.c:1646  */
 +  case 132:
- #line 1331 "awkgram.y" /* yacc.c:1646  */
++#line 1342 "awkgram.y" /* yacc.c:1646  */
      {
                int count = 2;
                bool is_simple_var = false;
@@@ -3398,47 -3416,47 +3409,47 @@@
                                max_args = count;
                }
          }
- #line 3402 "awkgram.c" /* yacc.c:1646  */
 -#line 3420 "awkgram.c" /* yacc.c:1646  */
++#line 3413 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 129:
 -#line 1469 "awkgram.y" /* yacc.c:1646  */
 +  case 134:
- #line 1383 "awkgram.y" /* yacc.c:1646  */
++#line 1394 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
- #line 3408 "awkgram.c" /* yacc.c:1646  */
 -#line 3426 "awkgram.c" /* yacc.c:1646  */
++#line 3419 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 130:
 -#line 1471 "awkgram.y" /* yacc.c:1646  */
 +  case 135:
- #line 1385 "awkgram.y" /* yacc.c:1646  */
++#line 1396 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
- #line 3414 "awkgram.c" /* yacc.c:1646  */
 -#line 3432 "awkgram.c" /* yacc.c:1646  */
++#line 3425 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 131:
 -#line 1473 "awkgram.y" /* yacc.c:1646  */
 +  case 136:
- #line 1387 "awkgram.y" /* yacc.c:1646  */
++#line 1398 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
- #line 3420 "awkgram.c" /* yacc.c:1646  */
 -#line 3438 "awkgram.c" /* yacc.c:1646  */
++#line 3431 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 132:
 -#line 1475 "awkgram.y" /* yacc.c:1646  */
 +  case 137:
- #line 1389 "awkgram.y" /* yacc.c:1646  */
++#line 1400 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
- #line 3426 "awkgram.c" /* yacc.c:1646  */
 -#line 3444 "awkgram.c" /* yacc.c:1646  */
++#line 3437 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 133:
 -#line 1477 "awkgram.y" /* yacc.c:1646  */
 +  case 138:
- #line 1391 "awkgram.y" /* yacc.c:1646  */
++#line 1402 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
- #line 3432 "awkgram.c" /* yacc.c:1646  */
 -#line 3450 "awkgram.c" /* yacc.c:1646  */
++#line 3443 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 134:
 -#line 1479 "awkgram.y" /* yacc.c:1646  */
 +  case 139:
- #line 1393 "awkgram.y" /* yacc.c:1646  */
++#line 1404 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
- #line 3438 "awkgram.c" /* yacc.c:1646  */
 -#line 3456 "awkgram.c" /* yacc.c:1646  */
++#line 3449 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 135:
 -#line 1481 "awkgram.y" /* yacc.c:1646  */
 +  case 140:
- #line 1395 "awkgram.y" /* yacc.c:1646  */
++#line 1406 "awkgram.y" /* yacc.c:1646  */
      {
                /*
                 * In BEGINFILE/ENDFILE, allow `getline [var] < file'
@@@ -3452,29 -3470,29 +3463,29 @@@
                                _("non-redirected `getline' undefined inside 
END action"));
                (yyval) = mk_getline((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]), 
redirect_input);
          }
- #line 3456 "awkgram.c" /* yacc.c:1646  */
 -#line 3474 "awkgram.c" /* yacc.c:1646  */
++#line 3467 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 136:
 -#line 1495 "awkgram.y" /* yacc.c:1646  */
 +  case 141:
- #line 1409 "awkgram.y" /* yacc.c:1646  */
++#line 1420 "awkgram.y" /* yacc.c:1646  */
      {
                (yyvsp[0])->opcode = Op_postincrement;
                (yyval) = mk_assignment((yyvsp[-1]), NULL, (yyvsp[0]));
          }
- #line 3465 "awkgram.c" /* yacc.c:1646  */
 -#line 3483 "awkgram.c" /* yacc.c:1646  */
++#line 3476 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 137:
 -#line 1500 "awkgram.y" /* yacc.c:1646  */
 +  case 142:
- #line 1414 "awkgram.y" /* yacc.c:1646  */
++#line 1425 "awkgram.y" /* yacc.c:1646  */
      {
                (yyvsp[0])->opcode = Op_postdecrement;
                (yyval) = mk_assignment((yyvsp[-1]), NULL, (yyvsp[0]));
          }
- #line 3474 "awkgram.c" /* yacc.c:1646  */
 -#line 3492 "awkgram.c" /* yacc.c:1646  */
++#line 3485 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 138:
 -#line 1505 "awkgram.y" /* yacc.c:1646  */
 +  case 143:
- #line 1419 "awkgram.y" /* yacc.c:1646  */
++#line 1430 "awkgram.y" /* yacc.c:1646  */
      {
                if (do_lint_old) {
                    warning_ln((yyvsp[-1])->source_line,
@@@ -3494,64 -3512,64 +3505,64 @@@
                        (yyval) = list_append(list_merge(t, (yyvsp[0])), 
(yyvsp[-1]));
                }
          }
- #line 3498 "awkgram.c" /* yacc.c:1646  */
 -#line 3516 "awkgram.c" /* yacc.c:1646  */
++#line 3509 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 139:
 -#line 1530 "awkgram.y" /* yacc.c:1646  */
 +  case 144:
- #line 1444 "awkgram.y" /* yacc.c:1646  */
++#line 1455 "awkgram.y" /* yacc.c:1646  */
      {
                  (yyval) = mk_getline((yyvsp[-1]), (yyvsp[0]), (yyvsp[-3]), 
(yyvsp[-2])->redir_type);
                  bcfree((yyvsp[-2]));
                }
- #line 3507 "awkgram.c" /* yacc.c:1646  */
 -#line 3525 "awkgram.c" /* yacc.c:1646  */
++#line 3518 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 140:
 -#line 1536 "awkgram.y" /* yacc.c:1646  */
 +  case 145:
- #line 1450 "awkgram.y" /* yacc.c:1646  */
++#line 1461 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
- #line 3513 "awkgram.c" /* yacc.c:1646  */
 -#line 3531 "awkgram.c" /* yacc.c:1646  */
++#line 3524 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 141:
 -#line 1538 "awkgram.y" /* yacc.c:1646  */
 +  case 146:
- #line 1452 "awkgram.y" /* yacc.c:1646  */
++#line 1463 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
- #line 3519 "awkgram.c" /* yacc.c:1646  */
 -#line 3537 "awkgram.c" /* yacc.c:1646  */
++#line 3530 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 142:
 -#line 1540 "awkgram.y" /* yacc.c:1646  */
 +  case 147:
- #line 1454 "awkgram.y" /* yacc.c:1646  */
++#line 1465 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
- #line 3525 "awkgram.c" /* yacc.c:1646  */
 -#line 3543 "awkgram.c" /* yacc.c:1646  */
++#line 3536 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 143:
 -#line 1542 "awkgram.y" /* yacc.c:1646  */
 +  case 148:
- #line 1456 "awkgram.y" /* yacc.c:1646  */
++#line 1467 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
- #line 3531 "awkgram.c" /* yacc.c:1646  */
 -#line 3549 "awkgram.c" /* yacc.c:1646  */
++#line 3542 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 144:
 -#line 1544 "awkgram.y" /* yacc.c:1646  */
 +  case 149:
- #line 1458 "awkgram.y" /* yacc.c:1646  */
++#line 1469 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
- #line 3537 "awkgram.c" /* yacc.c:1646  */
 -#line 3555 "awkgram.c" /* yacc.c:1646  */
++#line 3548 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 145:
 -#line 1546 "awkgram.y" /* yacc.c:1646  */
 +  case 150:
- #line 1460 "awkgram.y" /* yacc.c:1646  */
++#line 1471 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
- #line 3543 "awkgram.c" /* yacc.c:1646  */
 -#line 3561 "awkgram.c" /* yacc.c:1646  */
++#line 3554 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 146:
 -#line 1551 "awkgram.y" /* yacc.c:1646  */
 +  case 151:
- #line 1465 "awkgram.y" /* yacc.c:1646  */
++#line 1476 "awkgram.y" /* yacc.c:1646  */
      {
                (yyval) = list_create((yyvsp[0]));
          }
- #line 3551 "awkgram.c" /* yacc.c:1646  */
 -#line 3569 "awkgram.c" /* yacc.c:1646  */
++#line 3562 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 147:
 -#line 1555 "awkgram.y" /* yacc.c:1646  */
 +  case 152:
- #line 1469 "awkgram.y" /* yacc.c:1646  */
++#line 1480 "awkgram.y" /* yacc.c:1646  */
      {
                if ((yyvsp[0])->opcode == Op_match_rec) {
                        (yyvsp[0])->opcode = Op_nomatch;
@@@ -3583,37 -3601,37 +3594,37 @@@
                        }
                }
           }
- #line 3587 "awkgram.c" /* yacc.c:1646  */
 -#line 3605 "awkgram.c" /* yacc.c:1646  */
++#line 3598 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 148:
 -#line 1587 "awkgram.y" /* yacc.c:1646  */
 +  case 153:
- #line 1501 "awkgram.y" /* yacc.c:1646  */
++#line 1512 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[-1]); }
- #line 3593 "awkgram.c" /* yacc.c:1646  */
 -#line 3611 "awkgram.c" /* yacc.c:1646  */
++#line 3604 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 149:
 -#line 1589 "awkgram.y" /* yacc.c:1646  */
 +  case 154:
- #line 1503 "awkgram.y" /* yacc.c:1646  */
++#line 1514 "awkgram.y" /* yacc.c:1646  */
      {
                (yyval) = snode((yyvsp[-1]), (yyvsp[-3]));
                if ((yyval) == NULL)
                        YYABORT;
          }
- #line 3603 "awkgram.c" /* yacc.c:1646  */
 -#line 3621 "awkgram.c" /* yacc.c:1646  */
++#line 3614 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 150:
 -#line 1595 "awkgram.y" /* yacc.c:1646  */
 +  case 155:
- #line 1509 "awkgram.y" /* yacc.c:1646  */
++#line 1520 "awkgram.y" /* yacc.c:1646  */
      {
                (yyval) = snode((yyvsp[-1]), (yyvsp[-3]));
                if ((yyval) == NULL)
                        YYABORT;
          }
- #line 3613 "awkgram.c" /* yacc.c:1646  */
 -#line 3631 "awkgram.c" /* yacc.c:1646  */
++#line 3624 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 151:
 -#line 1601 "awkgram.y" /* yacc.c:1646  */
 +  case 156:
- #line 1515 "awkgram.y" /* yacc.c:1646  */
++#line 1526 "awkgram.y" /* yacc.c:1646  */
      {
                static bool warned = false;
  
@@@ -3626,45 -3644,45 +3637,45 @@@
                if ((yyval) == NULL)
                        YYABORT;
          }
- #line 3630 "awkgram.c" /* yacc.c:1646  */
 -#line 3648 "awkgram.c" /* yacc.c:1646  */
++#line 3641 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 154:
 -#line 1616 "awkgram.y" /* yacc.c:1646  */
 +  case 159:
- #line 1530 "awkgram.y" /* yacc.c:1646  */
++#line 1541 "awkgram.y" /* yacc.c:1646  */
      {
                (yyvsp[-1])->opcode = Op_preincrement;
                (yyval) = mk_assignment((yyvsp[0]), NULL, (yyvsp[-1]));
          }
- #line 3639 "awkgram.c" /* yacc.c:1646  */
 -#line 3657 "awkgram.c" /* yacc.c:1646  */
++#line 3650 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 155:
 -#line 1621 "awkgram.y" /* yacc.c:1646  */
 +  case 160:
- #line 1535 "awkgram.y" /* yacc.c:1646  */
++#line 1546 "awkgram.y" /* yacc.c:1646  */
      {
                (yyvsp[-1])->opcode = Op_predecrement;
                (yyval) = mk_assignment((yyvsp[0]), NULL, (yyvsp[-1]));
          }
- #line 3648 "awkgram.c" /* yacc.c:1646  */
 -#line 3666 "awkgram.c" /* yacc.c:1646  */
++#line 3659 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 156:
 -#line 1626 "awkgram.y" /* yacc.c:1646  */
 +  case 161:
- #line 1540 "awkgram.y" /* yacc.c:1646  */
++#line 1551 "awkgram.y" /* yacc.c:1646  */
      {
                (yyval) = list_create((yyvsp[0]));
          }
- #line 3656 "awkgram.c" /* yacc.c:1646  */
 -#line 3674 "awkgram.c" /* yacc.c:1646  */
++#line 3667 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 157:
 -#line 1630 "awkgram.y" /* yacc.c:1646  */
 +  case 162:
- #line 1544 "awkgram.y" /* yacc.c:1646  */
++#line 1555 "awkgram.y" /* yacc.c:1646  */
      {
                (yyval) = list_create((yyvsp[0]));
          }
- #line 3664 "awkgram.c" /* yacc.c:1646  */
 -#line 3682 "awkgram.c" /* yacc.c:1646  */
++#line 3675 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 158:
 -#line 1634 "awkgram.y" /* yacc.c:1646  */
 +  case 163:
- #line 1548 "awkgram.y" /* yacc.c:1646  */
++#line 1559 "awkgram.y" /* yacc.c:1646  */
      {
                if ((yyvsp[0])->lasti->opcode == Op_push_i
                        && ((yyvsp[0])->lasti->memory->flags & (STRCUR|STRING)) 
== 0
@@@ -3679,11 -3697,11 +3690,11 @@@
                        (yyval) = list_append((yyvsp[0]), (yyvsp[-1]));
                }
          }
- #line 3683 "awkgram.c" /* yacc.c:1646  */
 -#line 3701 "awkgram.c" /* yacc.c:1646  */
++#line 3694 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 159:
 -#line 1649 "awkgram.y" /* yacc.c:1646  */
 +  case 164:
- #line 1563 "awkgram.y" /* yacc.c:1646  */
++#line 1574 "awkgram.y" /* yacc.c:1646  */
      {
            /*
             * was: $$ = $2
@@@ -3693,20 -3711,20 +3704,20 @@@
                (yyvsp[-1])->memory = make_number(0.0);
                (yyval) = list_append((yyvsp[0]), (yyvsp[-1]));
          }
- #line 3697 "awkgram.c" /* yacc.c:1646  */
 -#line 3715 "awkgram.c" /* yacc.c:1646  */
++#line 3708 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 160:
 -#line 1662 "awkgram.y" /* yacc.c:1646  */
 +  case 165:
- #line 1576 "awkgram.y" /* yacc.c:1646  */
++#line 1587 "awkgram.y" /* yacc.c:1646  */
      {
                func_use((yyvsp[0])->lasti->func_name, FUNC_USE);
                (yyval) = (yyvsp[0]);
          }
- #line 3706 "awkgram.c" /* yacc.c:1646  */
 -#line 3724 "awkgram.c" /* yacc.c:1646  */
++#line 3717 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 161:
 -#line 1667 "awkgram.y" /* yacc.c:1646  */
 +  case 166:
- #line 1581 "awkgram.y" /* yacc.c:1646  */
++#line 1592 "awkgram.y" /* yacc.c:1646  */
      {
                /* indirect function call */
                INSTRUCTION *f, *t;
@@@ -3739,11 -3757,11 +3750,11 @@@
  
                (yyval) = list_prepend((yyvsp[0]), t);
          }
- #line 3743 "awkgram.c" /* yacc.c:1646  */
 -#line 3761 "awkgram.c" /* yacc.c:1646  */
++#line 3754 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 162:
 -#line 1703 "awkgram.y" /* yacc.c:1646  */
 +  case 167:
- #line 1617 "awkgram.y" /* yacc.c:1646  */
++#line 1628 "awkgram.y" /* yacc.c:1646  */
      {
                param_sanity((yyvsp[-1]));
                (yyvsp[-3])->opcode = Op_func_call;
@@@ -3757,49 -3775,49 +3768,49 @@@
                        (yyval) = list_append(t, (yyvsp[-3]));
                }
          }
- #line 3761 "awkgram.c" /* yacc.c:1646  */
 -#line 3779 "awkgram.c" /* yacc.c:1646  */
++#line 3772 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 163:
 -#line 1720 "awkgram.y" /* yacc.c:1646  */
 +  case 168:
- #line 1634 "awkgram.y" /* yacc.c:1646  */
++#line 1645 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 3767 "awkgram.c" /* yacc.c:1646  */
 -#line 3785 "awkgram.c" /* yacc.c:1646  */
++#line 3778 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 164:
 -#line 1722 "awkgram.y" /* yacc.c:1646  */
 +  case 169:
- #line 1636 "awkgram.y" /* yacc.c:1646  */
++#line 1647 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3773 "awkgram.c" /* yacc.c:1646  */
 -#line 3791 "awkgram.c" /* yacc.c:1646  */
++#line 3784 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 165:
 -#line 1727 "awkgram.y" /* yacc.c:1646  */
 +  case 170:
- #line 1641 "awkgram.y" /* yacc.c:1646  */
++#line 1652 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 3779 "awkgram.c" /* yacc.c:1646  */
 -#line 3797 "awkgram.c" /* yacc.c:1646  */
++#line 3790 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 166:
 -#line 1729 "awkgram.y" /* yacc.c:1646  */
 +  case 171:
- #line 1643 "awkgram.y" /* yacc.c:1646  */
++#line 1654 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[-1]); }
- #line 3785 "awkgram.c" /* yacc.c:1646  */
 -#line 3803 "awkgram.c" /* yacc.c:1646  */
++#line 3796 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 167:
 -#line 1734 "awkgram.y" /* yacc.c:1646  */
 +  case 172:
- #line 1648 "awkgram.y" /* yacc.c:1646  */
++#line 1659 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3791 "awkgram.c" /* yacc.c:1646  */
 -#line 3809 "awkgram.c" /* yacc.c:1646  */
++#line 3802 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 168:
 -#line 1736 "awkgram.y" /* yacc.c:1646  */
 +  case 173:
- #line 1650 "awkgram.y" /* yacc.c:1646  */
++#line 1661 "awkgram.y" /* yacc.c:1646  */
      {
                (yyval) = list_merge((yyvsp[-1]), (yyvsp[0]));
          }
- #line 3799 "awkgram.c" /* yacc.c:1646  */
 -#line 3817 "awkgram.c" /* yacc.c:1646  */
++#line 3810 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 169:
 -#line 1743 "awkgram.y" /* yacc.c:1646  */
 +  case 174:
- #line 1657 "awkgram.y" /* yacc.c:1646  */
++#line 1668 "awkgram.y" /* yacc.c:1646  */
      {
                INSTRUCTION *ip = (yyvsp[0])->lasti; 
                int count = ip->sub_count;      /* # of SUBSEP-seperated 
expressions */
@@@ -3813,11 -3831,11 +3824,11 @@@
                sub_counter++;  /* count # of dimensions */
                (yyval) = (yyvsp[0]);
          }
- #line 3817 "awkgram.c" /* yacc.c:1646  */
 -#line 3835 "awkgram.c" /* yacc.c:1646  */
++#line 3828 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 170:
 -#line 1760 "awkgram.y" /* yacc.c:1646  */
 +  case 175:
- #line 1674 "awkgram.y" /* yacc.c:1646  */
++#line 1685 "awkgram.y" /* yacc.c:1646  */
      {
                INSTRUCTION *t = (yyvsp[-1]);
                if ((yyvsp[-1]) == NULL) {
@@@ -3831,31 -3849,31 +3842,31 @@@
                        (yyvsp[0])->sub_count = count_expressions(&t, false);
                (yyval) = list_append(t, (yyvsp[0]));
          }
- #line 3835 "awkgram.c" /* yacc.c:1646  */
 -#line 3853 "awkgram.c" /* yacc.c:1646  */
++#line 3846 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 171:
 -#line 1777 "awkgram.y" /* yacc.c:1646  */
 +  case 176:
- #line 1691 "awkgram.y" /* yacc.c:1646  */
++#line 1702 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3841 "awkgram.c" /* yacc.c:1646  */
 -#line 3859 "awkgram.c" /* yacc.c:1646  */
++#line 3852 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 172:
 -#line 1779 "awkgram.y" /* yacc.c:1646  */
 +  case 177:
- #line 1693 "awkgram.y" /* yacc.c:1646  */
++#line 1704 "awkgram.y" /* yacc.c:1646  */
      {
                (yyval) = list_merge((yyvsp[-1]), (yyvsp[0]));
          }
- #line 3849 "awkgram.c" /* yacc.c:1646  */
 -#line 3867 "awkgram.c" /* yacc.c:1646  */
++#line 3860 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 173:
 -#line 1786 "awkgram.y" /* yacc.c:1646  */
 +  case 178:
- #line 1700 "awkgram.y" /* yacc.c:1646  */
++#line 1711 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[-1]); }
- #line 3855 "awkgram.c" /* yacc.c:1646  */
 -#line 3873 "awkgram.c" /* yacc.c:1646  */
++#line 3866 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 174:
 -#line 1791 "awkgram.y" /* yacc.c:1646  */
 +  case 179:
- #line 1705 "awkgram.y" /* yacc.c:1646  */
++#line 1716 "awkgram.y" /* yacc.c:1646  */
      {
                char *var_name = (yyvsp[0])->lextok;
  
@@@ -3863,22 -3881,22 +3874,22 @@@
                (yyvsp[0])->memory = variable((yyvsp[0])->source_line, 
var_name, Node_var_new);
                (yyval) = list_create((yyvsp[0]));
          }
- #line 3867 "awkgram.c" /* yacc.c:1646  */
 -#line 3885 "awkgram.c" /* yacc.c:1646  */
++#line 3878 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 175:
 -#line 1799 "awkgram.y" /* yacc.c:1646  */
 +  case 180:
- #line 1713 "awkgram.y" /* yacc.c:1646  */
++#line 1724 "awkgram.y" /* yacc.c:1646  */
      {
                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 3878 "awkgram.c" /* yacc.c:1646  */
 -#line 3896 "awkgram.c" /* yacc.c:1646  */
++#line 3889 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 176:
 -#line 1809 "awkgram.y" /* yacc.c:1646  */
 +  case 181:
- #line 1723 "awkgram.y" /* yacc.c:1646  */
++#line 1734 "awkgram.y" /* yacc.c:1646  */
      {
                INSTRUCTION *ip = (yyvsp[0])->nexti;
                if (ip->opcode == Op_push
@@@ -3890,73 -3908,73 +3901,73 @@@
                } else
                        (yyval) = (yyvsp[0]);
          }
- #line 3894 "awkgram.c" /* yacc.c:1646  */
 -#line 3912 "awkgram.c" /* yacc.c:1646  */
++#line 3905 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 177:
 -#line 1821 "awkgram.y" /* yacc.c:1646  */
 +  case 182:
- #line 1735 "awkgram.y" /* yacc.c:1646  */
++#line 1746 "awkgram.y" /* yacc.c:1646  */
      {
                (yyval) = list_append((yyvsp[-1]), (yyvsp[-2]));
                if ((yyvsp[0]) != NULL)
                        mk_assignment((yyvsp[-1]), NULL, (yyvsp[0]));
          }
- #line 3904 "awkgram.c" /* yacc.c:1646  */
 -#line 3922 "awkgram.c" /* yacc.c:1646  */
++#line 3915 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 178:
 -#line 1830 "awkgram.y" /* yacc.c:1646  */
 +  case 183:
- #line 1744 "awkgram.y" /* yacc.c:1646  */
++#line 1755 "awkgram.y" /* yacc.c:1646  */
      {
                (yyvsp[0])->opcode = Op_postincrement;
          }
- #line 3912 "awkgram.c" /* yacc.c:1646  */
 -#line 3930 "awkgram.c" /* yacc.c:1646  */
++#line 3923 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 179:
 -#line 1834 "awkgram.y" /* yacc.c:1646  */
 +  case 184:
- #line 1748 "awkgram.y" /* yacc.c:1646  */
++#line 1759 "awkgram.y" /* yacc.c:1646  */
      {
                (yyvsp[0])->opcode = Op_postdecrement;
          }
- #line 3920 "awkgram.c" /* yacc.c:1646  */
 -#line 3938 "awkgram.c" /* yacc.c:1646  */
++#line 3931 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 180:
 -#line 1837 "awkgram.y" /* yacc.c:1646  */
 +  case 185:
- #line 1751 "awkgram.y" /* yacc.c:1646  */
++#line 1762 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 3926 "awkgram.c" /* yacc.c:1646  */
 -#line 3944 "awkgram.c" /* yacc.c:1646  */
++#line 3937 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 182:
 -#line 1845 "awkgram.y" /* yacc.c:1646  */
 +  case 187:
- #line 1759 "awkgram.y" /* yacc.c:1646  */
++#line 1770 "awkgram.y" /* yacc.c:1646  */
      { yyerrok; }
- #line 3932 "awkgram.c" /* yacc.c:1646  */
 -#line 3950 "awkgram.c" /* yacc.c:1646  */
++#line 3943 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 183:
 -#line 1849 "awkgram.y" /* yacc.c:1646  */
 +  case 188:
- #line 1763 "awkgram.y" /* yacc.c:1646  */
++#line 1774 "awkgram.y" /* yacc.c:1646  */
      { yyerrok; }
- #line 3938 "awkgram.c" /* yacc.c:1646  */
 -#line 3956 "awkgram.c" /* yacc.c:1646  */
++#line 3949 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 186:
 -#line 1858 "awkgram.y" /* yacc.c:1646  */
 +  case 191:
- #line 1772 "awkgram.y" /* yacc.c:1646  */
++#line 1783 "awkgram.y" /* yacc.c:1646  */
      { yyerrok; }
- #line 3944 "awkgram.c" /* yacc.c:1646  */
 -#line 3962 "awkgram.c" /* yacc.c:1646  */
++#line 3955 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 187:
 -#line 1862 "awkgram.y" /* yacc.c:1646  */
 +  case 192:
- #line 1776 "awkgram.y" /* yacc.c:1646  */
++#line 1787 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); yyerrok; }
- #line 3950 "awkgram.c" /* yacc.c:1646  */
 -#line 3968 "awkgram.c" /* yacc.c:1646  */
++#line 3961 "awkgram.c" /* yacc.c:1646  */
      break;
  
 -  case 188:
 -#line 1866 "awkgram.y" /* yacc.c:1646  */
 +  case 193:
- #line 1780 "awkgram.y" /* yacc.c:1646  */
++#line 1791 "awkgram.y" /* yacc.c:1646  */
      { yyerrok; }
- #line 3956 "awkgram.c" /* yacc.c:1646  */
 -#line 3974 "awkgram.c" /* yacc.c:1646  */
++#line 3967 "awkgram.c" /* yacc.c:1646  */
      break;
  
  
- #line 3960 "awkgram.c" /* yacc.c:1646  */
 -#line 3978 "awkgram.c" /* yacc.c:1646  */
++#line 3971 "awkgram.c" /* yacc.c:1646  */
        default: break;
      }
    /* User semantic actions sometimes alter yychar, and that requires
@@@ -4184,7 -4202,7 +4195,7 @@@ yyreturn
  #endif
    return yyresult;
  }
- #line 1782 "awkgram.y" /* yacc.c:1906  */
 -#line 1868 "awkgram.y" /* yacc.c:1906  */
++#line 1793 "awkgram.y" /* yacc.c:1906  */
  
  
  struct token {
diff --cc doc/gawk.info
index 83763f4,e501b29..26dc45e
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@@ -34468,559 -34455,558 +34471,559 @@@ Tag Table
  Node: Top1204
  Node: Foreword342225
  Node: Foreword446667
- Node: Preface48100
- Ref: Preface-Footnote-150971
- Ref: Preface-Footnote-251078
- Ref: Preface-Footnote-351311
- Node: History51453
- Node: Names53799
- Ref: Names-Footnote-154893
- Node: This Manual55039
- Ref: This Manual-Footnote-161526
- Node: Conventions61626
- Node: Manual History63964
- Ref: Manual History-Footnote-166946
- Ref: Manual History-Footnote-266987
- Node: How To Contribute67061
- Node: Acknowledgments68190
- Node: Getting Started72995
- Node: Running gawk75428
- Node: One-shot76618
- Node: Read Terminal77866
- Node: Long79893
- Node: Executable Scripts81409
- Ref: Executable Scripts-Footnote-184198
- Node: Comments84301
- Node: Quoting86783
- Node: DOS Quoting92307
- Node: Sample Data Files92982
- Node: Very Simple95577
- Node: Two Rules100475
- Node: More Complex102361
- Node: Statements/Lines105223
- Ref: Statements/Lines-Footnote-1109678
- Node: Other Features109943
- Node: When110874
- Ref: When-Footnote-1112628
- Node: Intro Summary112693
- Node: Invoking Gawk113576
- Node: Command Line115090
- Node: Options115888
- Ref: Options-Footnote-1131692
- Ref: Options-Footnote-2131921
- Node: Other Arguments131946
- Node: Naming Standard Input134894
- Node: Environment Variables135987
- Node: AWKPATH Variable136545
- Ref: AWKPATH Variable-Footnote-1139958
- Ref: AWKPATH Variable-Footnote-2140003
- Node: AWKLIBPATH Variable140263
- Node: Other Environment Variables141519
- Node: Exit Status145007
- Node: Include Files145683
- Node: Loading Shared Libraries149280
- Node: Obsolete150707
- Node: Undocumented151404
- Node: Invoking Summary151671
- Node: Regexp153335
- Node: Regexp Usage154789
- Node: Escape Sequences156826
- Node: Regexp Operators163067
- Ref: Regexp Operators-Footnote-1170493
- Ref: Regexp Operators-Footnote-2170640
- Node: Bracket Expressions170738
- Ref: table-char-classes172753
- Node: Leftmost Longest175677
- Node: Computed Regexps176979
- Node: GNU Regexp Operators180376
- Node: Case-sensitivity184049
- Ref: Case-sensitivity-Footnote-1186934
- Ref: Case-sensitivity-Footnote-2187169
- Node: Regexp Summary187277
- Node: Reading Files188744
- Node: Records190838
- Node: awk split records191571
- Node: gawk split records196486
- Ref: gawk split records-Footnote-1201030
- Node: Fields201067
- Ref: Fields-Footnote-1203843
- Node: Nonconstant Fields203929
- Ref: Nonconstant Fields-Footnote-1206172
- Node: Changing Fields206376
- Node: Field Separators212305
- Node: Default Field Splitting215010
- Node: Regexp Field Splitting216127
- Node: Single Character Fields219477
- Node: Command Line Field Separator220536
- Node: Full Line Fields223748
- Ref: Full Line Fields-Footnote-1225265
- Ref: Full Line Fields-Footnote-2225311
- Node: Field Splitting Summary225412
- Node: Constant Size227486
- Node: Splitting By Content232075
- Ref: Splitting By Content-Footnote-1236069
- Node: Multiple Line236232
- Ref: Multiple Line-Footnote-1242118
- Node: Getline242297
- Node: Plain Getline244509
- Node: Getline/Variable247149
- Node: Getline/File248297
- Node: Getline/Variable/File249681
- Ref: Getline/Variable/File-Footnote-1251284
- Node: Getline/Pipe251371
- Node: Getline/Variable/Pipe254054
- Node: Getline/Coprocess255185
- Node: Getline/Variable/Coprocess256437
- Node: Getline Notes257176
- Node: Getline Summary259968
- Ref: table-getline-variants260380
- Node: Read Timeout261209
- Ref: Read Timeout-Footnote-1265034
- Node: Command-line directories265092
- Node: Input Summary265997
- Node: Input Exercises269298
- Node: Printing270026
- Node: Print271863
- Node: Print Examples273320
- Node: Output Separators276099
- Node: OFMT278117
- Node: Printf279471
- Node: Basic Printf280256
- Node: Control Letters281826
- Node: Format Modifiers285809
- Node: Printf Examples291818
- Node: Redirection294304
- Node: Special FD301145
- Ref: Special FD-Footnote-1304305
- Node: Special Files304379
- Node: Other Inherited Files304996
- Node: Special Network305996
- Node: Special Caveats306858
- Node: Close Files And Pipes307809
- Ref: Close Files And Pipes-Footnote-1314996
- Ref: Close Files And Pipes-Footnote-2315144
- Node: Print Return Values315294
- Node: Output Summary315848
- Node: Output Exercises316844
- Node: Expressions317524
- Node: Values318709
- Node: Constants319387
- Node: Scalar Constants320078
- Ref: Scalar Constants-Footnote-1320937
- Node: Nondecimal-numbers321187
- Node: Regexp Constants324205
- Node: Using Constant Regexps324730
- Node: Variables327873
- Node: Using Variables328528
- Node: Assignment Options330439
- Node: Conversion332314
- Node: Strings And Numbers332838
- Ref: Strings And Numbers-Footnote-1335903
- Node: Locale influences conversions336012
- Ref: table-locale-affects338759
- Node: All Operators339347
- Node: Arithmetic Ops339977
- Node: Concatenation342482
- Ref: Concatenation-Footnote-1345301
- Node: Assignment Ops345407
- Ref: table-assign-ops350386
- Node: Increment Ops351658
- Node: Truth Values and Conditions355096
- Node: Truth Values356181
- Node: Typing and Comparison357230
- Node: Variable Typing358040
- Node: Comparison Operators361693
- Ref: table-relational-ops362103
- Node: POSIX String Comparison365598
- Ref: POSIX String Comparison-Footnote-1366670
- Node: Boolean Ops366808
- Ref: Boolean Ops-Footnote-1371287
- Node: Conditional Exp371378
- Node: Function Calls373105
- Node: Precedence376985
- Node: Locales380646
- Node: Expressions Summary382278
- Node: Patterns and Actions384838
- Node: Pattern Overview385958
- Node: Regexp Patterns387637
- Node: Expression Patterns388180
- Node: Ranges391890
- Node: BEGIN/END394996
- Node: Using BEGIN/END395757
- Ref: Using BEGIN/END-Footnote-1398491
- Node: I/O And BEGIN/END398597
- Node: BEGINFILE/ENDFILE400911
- Node: Empty403812
- Node: Using Shell Variables404129
- Node: Action Overview406402
- Node: Statements408728
- Node: If Statement410576
- Node: While Statement412071
- Node: Do Statement414100
- Node: For Statement415244
- Node: Switch Statement418401
- Node: Break Statement420783
- Node: Continue Statement422824
- Node: Next Statement424651
- Node: Nextfile Statement427032
- Node: Exit Statement429662
- Node: Built-in Variables432065
- Node: User-modified433198
- Ref: User-modified-Footnote-1440879
- Node: Auto-set440941
- Ref: Auto-set-Footnote-1454633
- Ref: Auto-set-Footnote-2454838
- Node: ARGC and ARGV454894
- Node: Pattern Action Summary459112
- Node: Arrays461539
- Node: Array Basics462868
- Node: Array Intro463712
- Ref: figure-array-elements465676
- Ref: Array Intro-Footnote-1468202
- Node: Reference to Elements468330
- Node: Assigning Elements470782
- Node: Array Example471273
- Node: Scanning an Array473031
- Node: Controlling Scanning476047
- Ref: Controlling Scanning-Footnote-1481243
- Node: Numeric Array Subscripts481559
- Node: Uninitialized Subscripts483744
- Node: Delete485361
- Ref: Delete-Footnote-1488104
- Node: Multidimensional488161
- Node: Multiscanning491258
- Node: Arrays of Arrays492847
- Node: Arrays Summary497606
- Node: Functions499698
- Node: Built-in500597
- Node: Calling Built-in501675
- Node: Numeric Functions503666
- Ref: Numeric Functions-Footnote-1508485
- Ref: Numeric Functions-Footnote-2508842
- Ref: Numeric Functions-Footnote-3508890
- Node: String Functions509162
- Ref: String Functions-Footnote-1532637
- Ref: String Functions-Footnote-2532766
- Ref: String Functions-Footnote-3533014
- Node: Gory Details533101
- Ref: table-sub-escapes534882
- Ref: table-sub-proposed536402
- Ref: table-posix-sub537766
- Ref: table-gensub-escapes539302
- Ref: Gory Details-Footnote-1540134
- Node: I/O Functions540285
- Ref: I/O Functions-Footnote-1547503
- Node: Time Functions547650
- Ref: Time Functions-Footnote-1558138
- Ref: Time Functions-Footnote-2558206
- Ref: Time Functions-Footnote-3558364
- Ref: Time Functions-Footnote-4558475
- Ref: Time Functions-Footnote-5558587
- Ref: Time Functions-Footnote-6558814
- Node: Bitwise Functions559080
- Ref: table-bitwise-ops559642
- Ref: Bitwise Functions-Footnote-1563951
- Node: Type Functions564120
- Node: I18N Functions565271
- Node: User-defined566916
- Node: Definition Syntax567721
- Ref: Definition Syntax-Footnote-1573128
- Node: Function Example573199
- Ref: Function Example-Footnote-1576118
- Node: Function Caveats576140
- Node: Calling A Function576658
- Node: Variable Scope577616
- Node: Pass By Value/Reference580604
- Node: Return Statement584099
- Node: Dynamic Typing587080
- Node: Indirect Calls588009
- Ref: Indirect Calls-Footnote-1599311
- Node: Functions Summary599439
- Node: Library Functions602141
- Ref: Library Functions-Footnote-1605750
- Ref: Library Functions-Footnote-2605893
- Node: Library Names606064
- Ref: Library Names-Footnote-1609518
- Ref: Library Names-Footnote-2609741
- Node: General Functions609827
- Node: Strtonum Function610930
- Node: Assert Function613952
- Node: Round Function617276
- Node: Cliff Random Function618817
- Node: Ordinal Functions619833
- Ref: Ordinal Functions-Footnote-1622896
- Ref: Ordinal Functions-Footnote-2623148
- Node: Join Function623359
- Ref: Join Function-Footnote-1625128
- Node: Getlocaltime Function625328
- Node: Readfile Function629072
- Node: Shell Quoting631042
- Node: Data File Management632443
- Node: Filetrans Function633075
- Node: Rewind Function637131
- Node: File Checking638518
- Ref: File Checking-Footnote-1639850
- Node: Empty Files640051
- Node: Ignoring Assigns642030
- Node: Getopt Function643581
- Ref: Getopt Function-Footnote-1655043
- Node: Passwd Functions655243
- Ref: Passwd Functions-Footnote-1664080
- Node: Group Functions664168
- Ref: Group Functions-Footnote-1672062
- Node: Walking Arrays672275
- Node: Library Functions Summary673878
- Node: Library Exercises675279
- Node: Sample Programs676559
- Node: Running Examples677329
- Node: Clones678057
- Node: Cut Program679281
- Node: Egrep Program689000
- Ref: Egrep Program-Footnote-1696498
- Node: Id Program696608
- Node: Split Program700253
- Ref: Split Program-Footnote-1703701
- Node: Tee Program703829
- Node: Uniq Program706618
- Node: Wc Program714037
- Ref: Wc Program-Footnote-1718287
- Node: Miscellaneous Programs718381
- Node: Dupword Program719594
- Node: Alarm Program721625
- Node: Translate Program726429
- Ref: Translate Program-Footnote-1730994
- Node: Labels Program731264
- Ref: Labels Program-Footnote-1734615
- Node: Word Sorting734699
- Node: History Sorting738770
- Node: Extract Program740606
- Node: Simple Sed748131
- Node: Igawk Program751199
- Ref: Igawk Program-Footnote-1765523
- Ref: Igawk Program-Footnote-2765724
- Ref: Igawk Program-Footnote-3765846
- Node: Anagram Program765961
- Node: Signature Program769018
- Node: Programs Summary770265
- Node: Programs Exercises771458
- Ref: Programs Exercises-Footnote-1775589
- Node: Advanced Features775680
- Node: Nondecimal Data777628
- Node: Array Sorting779218
- Node: Controlling Array Traversal779915
- Ref: Controlling Array Traversal-Footnote-1788248
- Node: Array Sorting Functions788366
- Ref: Array Sorting Functions-Footnote-1792255
- Node: Two-way I/O792451
- Ref: Two-way I/O-Footnote-1797396
- Ref: Two-way I/O-Footnote-2797582
- Node: TCP/IP Networking797664
- Node: Profiling800537
- Node: Advanced Features Summary808814
- Node: Internationalization810747
- Node: I18N and L10N812227
- Node: Explaining gettext812913
- Ref: Explaining gettext-Footnote-1817938
- Ref: Explaining gettext-Footnote-2818122
- Node: Programmer i18n818287
- Ref: Programmer i18n-Footnote-1823153
- Node: Translator i18n823202
- Node: String Extraction823996
- Ref: String Extraction-Footnote-1825127
- Node: Printf Ordering825213
- Ref: Printf Ordering-Footnote-1827999
- Node: I18N Portability828063
- Ref: I18N Portability-Footnote-1830518
- Node: I18N Example830581
- Ref: I18N Example-Footnote-1833384
- Node: Gawk I18N833456
- Node: I18N Summary834094
- Node: Debugger835433
- Node: Debugging836455
- Node: Debugging Concepts836896
- Node: Debugging Terms838749
- Node: Awk Debugging841321
- Node: Sample Debugging Session842215
- Node: Debugger Invocation842735
- Node: Finding The Bug844119
- Node: List of Debugger Commands850594
- Node: Breakpoint Control851927
- Node: Debugger Execution Control855623
- Node: Viewing And Changing Data858987
- Node: Execution Stack862365
- Node: Debugger Info864002
- Node: Miscellaneous Debugger Commands868019
- Node: Readline Support873048
- Node: Limitations873940
- Node: Debugging Summary876054
- Node: Arbitrary Precision Arithmetic877222
- Node: Computer Arithmetic878638
- Ref: table-numeric-ranges882236
- Ref: Computer Arithmetic-Footnote-1883095
- Node: Math Definitions883152
- Ref: table-ieee-formats886440
- Ref: Math Definitions-Footnote-1887044
- Node: MPFR features887149
- Node: FP Math Caution888820
- Ref: FP Math Caution-Footnote-1889870
- Node: Inexactness of computations890239
- Node: Inexact representation891198
- Node: Comparing FP Values892555
- Node: Errors accumulate893637
- Node: Getting Accuracy895070
- Node: Try To Round897732
- Node: Setting precision898631
- Ref: table-predefined-precision-strings899315
- Node: Setting the rounding mode901104
- Ref: table-gawk-rounding-modes901468
- Ref: Setting the rounding mode-Footnote-1904923
- Node: Arbitrary Precision Integers905102
- Ref: Arbitrary Precision Integers-Footnote-1910001
- Node: POSIX Floating Point Problems910150
- Ref: POSIX Floating Point Problems-Footnote-1914023
- Node: Floating point summary914061
- Node: Dynamic Extensions916255
- Node: Extension Intro917807
- Node: Plugin License919073
- Node: Extension Mechanism Outline919870
- Ref: figure-load-extension920298
- Ref: figure-register-new-function921778
- Ref: figure-call-new-function922782
- Node: Extension API Description924768
- Node: Extension API Functions Introduction926218
- Node: General Data Types931042
- Ref: General Data Types-Footnote-1936781
- Node: Memory Allocation Functions937080
- Ref: Memory Allocation Functions-Footnote-1939919
- Node: Constructor Functions940015
- Node: Registration Functions941749
- Node: Extension Functions942434
- Node: Exit Callback Functions944731
- Node: Extension Version String945979
- Node: Input Parsers946644
- Node: Output Wrappers956523
- Node: Two-way processors961038
- Node: Printing Messages963242
- Ref: Printing Messages-Footnote-1964318
- Node: Updating `ERRNO'964470
- Node: Requesting Values965210
- Ref: table-value-types-returned965938
- Node: Accessing Parameters966895
- Node: Symbol Table Access968126
- Node: Symbol table by name968640
- Node: Symbol table by cookie970621
- Ref: Symbol table by cookie-Footnote-1974765
- Node: Cached values974828
- Ref: Cached values-Footnote-1978327
- Node: Array Manipulation978418
- Ref: Array Manipulation-Footnote-1979516
- Node: Array Data Types979553
- Ref: Array Data Types-Footnote-1982208
- Node: Array Functions982300
- Node: Flattening Arrays986154
- Node: Creating Arrays993046
- Node: Extension API Variables997817
- Node: Extension Versioning998453
- Node: Extension API Informational Variables1000354
- Node: Extension API Boilerplate1001419
- Node: Finding Extensions1005228
- Node: Extension Example1005788
- Node: Internal File Description1006560
- Node: Internal File Ops1010627
- Ref: Internal File Ops-Footnote-11022297
- Node: Using Internal File Ops1022437
- Ref: Using Internal File Ops-Footnote-11024820
- Node: Extension Samples1025093
- Node: Extension Sample File Functions1026619
- Node: Extension Sample Fnmatch1034257
- Node: Extension Sample Fork1035748
- Node: Extension Sample Inplace1036963
- Node: Extension Sample Ord1038638
- Node: Extension Sample Readdir1039474
- Ref: table-readdir-file-types1040350
- Node: Extension Sample Revout1041161
- Node: Extension Sample Rev2way1041751
- Node: Extension Sample Read write array1042491
- Node: Extension Sample Readfile1044431
- Node: Extension Sample Time1045526
- Node: Extension Sample API Tests1046875
- Node: gawkextlib1047366
- Node: Extension summary1050024
- Node: Extension Exercises1053713
- Node: Language History1054435
- Node: V7/SVR3.11056091
- Node: SVR41058272
- Node: POSIX1059717
- Node: BTL1061106
- Node: POSIX/GNU1061840
- Node: Feature History1067464
- Node: Common Extensions1080562
- Node: Ranges and Locales1081886
- Ref: Ranges and Locales-Footnote-11086504
- Ref: Ranges and Locales-Footnote-21086531
- Ref: Ranges and Locales-Footnote-31086765
- Node: Contributors1086986
- Node: History summary1092527
- Node: Installation1093897
- Node: Gawk Distribution1094843
- Node: Getting1095327
- Node: Extracting1096150
- Node: Distribution contents1097785
- Node: Unix Installation1103850
- Node: Quick Installation1104533
- Node: Shell Startup Files1106944
- Node: Additional Configuration Options1108023
- Node: Configuration Philosophy1109762
- Node: Non-Unix Installation1112131
- Node: PC Installation1112589
- Node: PC Binary Installation1113908
- Node: PC Compiling1115756
- Ref: PC Compiling-Footnote-11118777
- Node: PC Testing1118886
- Node: PC Using1120062
- Node: Cygwin1124177
- Node: MSYS1125000
- Node: VMS Installation1125500
- Node: VMS Compilation1126292
- Ref: VMS Compilation-Footnote-11127514
- Node: VMS Dynamic Extensions1127572
- Node: VMS Installation Details1129256
- Node: VMS Running1131508
- Node: VMS GNV1134344
- Node: VMS Old Gawk1135078
- Node: Bugs1135548
- Node: Other Versions1139431
- Node: Installation summary1145859
- Node: Notes1146915
- Node: Compatibility Mode1147780
- Node: Additions1148562
- Node: Accessing The Source1149487
- Node: Adding Code1150923
- Node: New Ports1157088
- Node: Derived Files1161570
- Ref: Derived Files-Footnote-11167045
- Ref: Derived Files-Footnote-21167079
- Ref: Derived Files-Footnote-31167675
- Node: Future Extensions1167789
- Node: Implementation Limitations1168395
- Node: Extension Design1169643
- Node: Old Extension Problems1170797
- Ref: Old Extension Problems-Footnote-11172314
- Node: Extension New Mechanism Goals1172371
- Ref: Extension New Mechanism Goals-Footnote-11175731
- Node: Extension Other Design Decisions1175920
- Node: Extension Future Growth1178028
- Node: Old Extension Mechanism1178864
- Node: Notes summary1180626
- Node: Basic Concepts1181812
- Node: Basic High Level1182493
- Ref: figure-general-flow1182765
- Ref: figure-process-flow1183364
- Ref: Basic High Level-Footnote-11186593
- Node: Basic Data Typing1186778
- Node: Glossary1190106
- Node: Copying1215264
- Node: GNU Free Documentation License1252820
- Node: Index1277956
+ Node: Preface48189
+ Ref: Preface-Footnote-151060
+ Ref: Preface-Footnote-251167
+ Ref: Preface-Footnote-351400
+ Node: History51542
+ Node: Names53888
+ Ref: Names-Footnote-154982
+ Node: This Manual55128
+ Ref: This Manual-Footnote-161615
+ Node: Conventions61715
+ Node: Manual History64053
+ Ref: Manual History-Footnote-167035
+ Ref: Manual History-Footnote-267076
+ Node: How To Contribute67150
+ Node: Acknowledgments68279
+ Node: Getting Started73084
+ Node: Running gawk75517
+ Node: One-shot76707
+ Node: Read Terminal77955
+ Node: Long79982
+ Node: Executable Scripts81498
+ Ref: Executable Scripts-Footnote-184287
+ Node: Comments84390
+ Node: Quoting86872
+ Node: DOS Quoting92396
+ Node: Sample Data Files93071
+ Node: Very Simple95666
+ Node: Two Rules100564
+ Node: More Complex102450
+ Node: Statements/Lines105312
+ Ref: Statements/Lines-Footnote-1109767
+ Node: Other Features110032
+ Node: When110963
+ Ref: When-Footnote-1112717
+ Node: Intro Summary112782
+ Node: Invoking Gawk113665
+ Node: Command Line115179
+ Node: Options115977
+ Ref: Options-Footnote-1131781
+ Ref: Options-Footnote-2132010
+ Node: Other Arguments132035
+ Node: Naming Standard Input134983
+ Node: Environment Variables136076
+ Node: AWKPATH Variable136634
+ Ref: AWKPATH Variable-Footnote-1140047
+ Ref: AWKPATH Variable-Footnote-2140092
+ Node: AWKLIBPATH Variable140352
+ Node: Other Environment Variables141608
+ Node: Exit Status145096
+ Node: Include Files145772
+ Node: Loading Shared Libraries149369
+ Node: Obsolete150796
+ Node: Undocumented151493
+ Node: Invoking Summary151760
+ Node: Regexp153424
+ Node: Regexp Usage154878
+ Node: Escape Sequences156915
+ Node: Regexp Operators163156
+ Ref: Regexp Operators-Footnote-1170582
+ Ref: Regexp Operators-Footnote-2170729
+ Node: Bracket Expressions170827
+ Ref: table-char-classes172842
+ Node: Leftmost Longest175766
+ Node: Computed Regexps177068
+ Node: GNU Regexp Operators180465
+ Node: Case-sensitivity184138
+ Ref: Case-sensitivity-Footnote-1187023
+ Ref: Case-sensitivity-Footnote-2187258
+ Node: Regexp Summary187366
+ Node: Reading Files188833
+ Node: Records190927
+ Node: awk split records191660
+ Node: gawk split records196575
+ Ref: gawk split records-Footnote-1201119
+ Node: Fields201156
+ Ref: Fields-Footnote-1203932
+ Node: Nonconstant Fields204018
+ Ref: Nonconstant Fields-Footnote-1206261
+ Node: Changing Fields206465
+ Node: Field Separators212394
+ Node: Default Field Splitting215099
+ Node: Regexp Field Splitting216216
+ Node: Single Character Fields219566
+ Node: Command Line Field Separator220625
+ Node: Full Line Fields223837
+ Ref: Full Line Fields-Footnote-1225354
+ Ref: Full Line Fields-Footnote-2225400
+ Node: Field Splitting Summary225501
+ Node: Constant Size227575
+ Node: Splitting By Content232164
+ Ref: Splitting By Content-Footnote-1236158
+ Node: Multiple Line236321
+ Ref: Multiple Line-Footnote-1242207
+ Node: Getline242386
+ Node: Plain Getline244598
+ Node: Getline/Variable247238
+ Node: Getline/File248386
+ Node: Getline/Variable/File249770
+ Ref: Getline/Variable/File-Footnote-1251373
+ Node: Getline/Pipe251460
+ Node: Getline/Variable/Pipe254143
+ Node: Getline/Coprocess255274
+ Node: Getline/Variable/Coprocess256526
+ Node: Getline Notes257265
+ Node: Getline Summary260057
+ Ref: table-getline-variants260469
+ Node: Read Timeout261298
+ Ref: Read Timeout-Footnote-1265123
+ Node: Command-line directories265181
+ Node: Input Summary266086
+ Node: Input Exercises269387
+ Node: Printing270115
 -Node: Print271892
 -Node: Print Examples273349
 -Node: Output Separators276128
 -Node: OFMT278146
 -Node: Printf279500
 -Node: Basic Printf280285
 -Node: Control Letters281855
 -Node: Format Modifiers285838
 -Node: Printf Examples291847
 -Node: Redirection294333
 -Node: Special FD301174
 -Ref: Special FD-Footnote-1304334
 -Node: Special Files304408
 -Node: Other Inherited Files305025
 -Node: Special Network306025
 -Node: Special Caveats306887
 -Node: Close Files And Pipes307838
 -Ref: Close Files And Pipes-Footnote-1315020
 -Ref: Close Files And Pipes-Footnote-2315168
 -Node: Output Summary315318
 -Node: Output Exercises316316
 -Node: Expressions316996
 -Node: Values318181
 -Node: Constants318859
 -Node: Scalar Constants319550
 -Ref: Scalar Constants-Footnote-1320409
 -Node: Nondecimal-numbers320659
 -Node: Regexp Constants323677
 -Node: Using Constant Regexps324202
 -Node: Variables327345
 -Node: Using Variables328000
 -Node: Assignment Options329911
 -Node: Conversion331786
 -Node: Strings And Numbers332310
 -Ref: Strings And Numbers-Footnote-1335375
 -Node: Locale influences conversions335484
 -Ref: table-locale-affects338231
 -Node: All Operators338819
 -Node: Arithmetic Ops339449
 -Node: Concatenation341954
 -Ref: Concatenation-Footnote-1344773
 -Node: Assignment Ops344879
 -Ref: table-assign-ops349858
 -Node: Increment Ops351130
 -Node: Truth Values and Conditions354568
 -Node: Truth Values355653
 -Node: Typing and Comparison356702
 -Node: Variable Typing357512
 -Node: Comparison Operators361165
 -Ref: table-relational-ops361575
 -Node: POSIX String Comparison365070
 -Ref: POSIX String Comparison-Footnote-1366142
 -Node: Boolean Ops366280
 -Ref: Boolean Ops-Footnote-1370759
 -Node: Conditional Exp370850
 -Node: Function Calls372577
 -Node: Precedence376457
 -Node: Locales380118
 -Node: Expressions Summary381750
 -Node: Patterns and Actions384310
 -Node: Pattern Overview385430
 -Node: Regexp Patterns387109
 -Node: Expression Patterns387652
 -Node: Ranges391362
 -Node: BEGIN/END394468
 -Node: Using BEGIN/END395229
 -Ref: Using BEGIN/END-Footnote-1397963
 -Node: I/O And BEGIN/END398069
 -Node: BEGINFILE/ENDFILE400383
 -Node: Empty403284
 -Node: Using Shell Variables403601
 -Node: Action Overview405874
 -Node: Statements408200
 -Node: If Statement410048
 -Node: While Statement411543
 -Node: Do Statement413572
 -Node: For Statement414716
 -Node: Switch Statement417873
 -Node: Break Statement420255
 -Node: Continue Statement422296
 -Node: Next Statement424123
 -Node: Nextfile Statement426504
 -Node: Exit Statement429134
 -Node: Built-in Variables431537
 -Node: User-modified432670
 -Ref: User-modified-Footnote-1440351
 -Node: Auto-set440413
 -Ref: Auto-set-Footnote-1454105
 -Ref: Auto-set-Footnote-2454310
 -Node: ARGC and ARGV454366
 -Node: Pattern Action Summary458584
 -Node: Arrays461011
 -Node: Array Basics462340
 -Node: Array Intro463184
 -Ref: figure-array-elements465148
 -Ref: Array Intro-Footnote-1467674
 -Node: Reference to Elements467802
 -Node: Assigning Elements470254
 -Node: Array Example470745
 -Node: Scanning an Array472503
 -Node: Controlling Scanning475519
 -Ref: Controlling Scanning-Footnote-1480715
 -Node: Numeric Array Subscripts481031
 -Node: Uninitialized Subscripts483216
 -Node: Delete484833
 -Ref: Delete-Footnote-1487576
 -Node: Multidimensional487633
 -Node: Multiscanning490730
 -Node: Arrays of Arrays492319
 -Node: Arrays Summary497078
 -Node: Functions499170
 -Node: Built-in500069
 -Node: Calling Built-in501147
 -Node: Numeric Functions503138
 -Ref: Numeric Functions-Footnote-1507957
 -Ref: Numeric Functions-Footnote-2508314
 -Ref: Numeric Functions-Footnote-3508362
 -Node: String Functions508634
 -Ref: String Functions-Footnote-1532109
 -Ref: String Functions-Footnote-2532238
 -Ref: String Functions-Footnote-3532486
 -Node: Gory Details532573
 -Ref: table-sub-escapes534354
 -Ref: table-sub-proposed535874
 -Ref: table-posix-sub537238
 -Ref: table-gensub-escapes538774
 -Ref: Gory Details-Footnote-1539606
 -Node: I/O Functions539757
 -Ref: I/O Functions-Footnote-1546975
 -Node: Time Functions547122
 -Ref: Time Functions-Footnote-1557610
 -Ref: Time Functions-Footnote-2557678
 -Ref: Time Functions-Footnote-3557836
 -Ref: Time Functions-Footnote-4557947
 -Ref: Time Functions-Footnote-5558059
 -Ref: Time Functions-Footnote-6558286
 -Node: Bitwise Functions558552
 -Ref: table-bitwise-ops559114
 -Ref: Bitwise Functions-Footnote-1563423
 -Node: Type Functions563592
 -Node: I18N Functions564743
 -Node: User-defined566388
 -Node: Definition Syntax567193
 -Ref: Definition Syntax-Footnote-1572600
 -Node: Function Example572671
 -Ref: Function Example-Footnote-1575590
 -Node: Function Caveats575612
 -Node: Calling A Function576130
 -Node: Variable Scope577088
 -Node: Pass By Value/Reference580076
 -Node: Return Statement583571
 -Node: Dynamic Typing586552
 -Node: Indirect Calls587481
 -Ref: Indirect Calls-Footnote-1598783
 -Node: Functions Summary598911
 -Node: Library Functions601613
 -Ref: Library Functions-Footnote-1605222
 -Ref: Library Functions-Footnote-2605365
 -Node: Library Names605536
 -Ref: Library Names-Footnote-1608990
 -Ref: Library Names-Footnote-2609213
 -Node: General Functions609299
 -Node: Strtonum Function610402
 -Node: Assert Function613424
 -Node: Round Function616748
 -Node: Cliff Random Function618289
 -Node: Ordinal Functions619305
 -Ref: Ordinal Functions-Footnote-1622368
 -Ref: Ordinal Functions-Footnote-2622620
 -Node: Join Function622831
 -Ref: Join Function-Footnote-1624600
 -Node: Getlocaltime Function624800
 -Node: Readfile Function628544
 -Node: Shell Quoting630514
 -Node: Data File Management631915
 -Node: Filetrans Function632547
 -Node: Rewind Function636603
 -Node: File Checking637990
 -Ref: File Checking-Footnote-1639322
 -Node: Empty Files639523
 -Node: Ignoring Assigns641502
 -Node: Getopt Function643053
 -Ref: Getopt Function-Footnote-1654515
 -Node: Passwd Functions654715
 -Ref: Passwd Functions-Footnote-1663552
 -Node: Group Functions663640
 -Ref: Group Functions-Footnote-1671534
 -Node: Walking Arrays671747
 -Node: Library Functions Summary673350
 -Node: Library Exercises674751
 -Node: Sample Programs676031
 -Node: Running Examples676801
 -Node: Clones677529
 -Node: Cut Program678753
 -Node: Egrep Program688472
 -Ref: Egrep Program-Footnote-1695970
 -Node: Id Program696080
 -Node: Split Program699725
 -Ref: Split Program-Footnote-1703173
 -Node: Tee Program703301
 -Node: Uniq Program706090
 -Node: Wc Program713509
 -Ref: Wc Program-Footnote-1717759
 -Node: Miscellaneous Programs717853
 -Node: Dupword Program719066
 -Node: Alarm Program721097
 -Node: Translate Program725901
 -Ref: Translate Program-Footnote-1730466
 -Node: Labels Program730736
 -Ref: Labels Program-Footnote-1734087
 -Node: Word Sorting734171
 -Node: History Sorting738242
 -Node: Extract Program740078
 -Node: Simple Sed747603
 -Node: Igawk Program750671
 -Ref: Igawk Program-Footnote-1764995
 -Ref: Igawk Program-Footnote-2765196
 -Ref: Igawk Program-Footnote-3765318
 -Node: Anagram Program765433
 -Node: Signature Program768490
 -Node: Programs Summary769737
 -Node: Programs Exercises770930
 -Ref: Programs Exercises-Footnote-1775061
 -Node: Advanced Features775152
 -Node: Nondecimal Data777100
 -Node: Array Sorting778690
 -Node: Controlling Array Traversal779387
 -Ref: Controlling Array Traversal-Footnote-1787720
 -Node: Array Sorting Functions787838
 -Ref: Array Sorting Functions-Footnote-1791727
 -Node: Two-way I/O791923
 -Ref: Two-way I/O-Footnote-1796868
 -Ref: Two-way I/O-Footnote-2797054
 -Node: TCP/IP Networking797136
 -Node: Profiling800009
 -Node: Advanced Features Summary808286
 -Node: Internationalization810219
 -Node: I18N and L10N811699
 -Node: Explaining gettext812385
 -Ref: Explaining gettext-Footnote-1817410
 -Ref: Explaining gettext-Footnote-2817594
 -Node: Programmer i18n817759
 -Ref: Programmer i18n-Footnote-1822625
 -Node: Translator i18n822674
 -Node: String Extraction823468
 -Ref: String Extraction-Footnote-1824599
 -Node: Printf Ordering824685
 -Ref: Printf Ordering-Footnote-1827471
 -Node: I18N Portability827535
 -Ref: I18N Portability-Footnote-1829990
 -Node: I18N Example830053
 -Ref: I18N Example-Footnote-1832856
 -Node: Gawk I18N832928
 -Node: I18N Summary833566
 -Node: Debugger834905
 -Node: Debugging835927
 -Node: Debugging Concepts836368
 -Node: Debugging Terms838221
 -Node: Awk Debugging840793
 -Node: Sample Debugging Session841687
 -Node: Debugger Invocation842207
 -Node: Finding The Bug843591
 -Node: List of Debugger Commands850066
 -Node: Breakpoint Control851399
 -Node: Debugger Execution Control855095
 -Node: Viewing And Changing Data858459
 -Node: Execution Stack861837
 -Node: Debugger Info863474
 -Node: Miscellaneous Debugger Commands867491
 -Node: Readline Support872520
 -Node: Limitations873412
 -Node: Debugging Summary875526
 -Node: Arbitrary Precision Arithmetic876694
 -Node: Computer Arithmetic878110
 -Ref: table-numeric-ranges881708
 -Ref: Computer Arithmetic-Footnote-1882567
 -Node: Math Definitions882624
 -Ref: table-ieee-formats885912
 -Ref: Math Definitions-Footnote-1886516
 -Node: MPFR features886621
 -Node: FP Math Caution888292
 -Ref: FP Math Caution-Footnote-1889342
 -Node: Inexactness of computations889711
 -Node: Inexact representation890670
 -Node: Comparing FP Values892027
 -Node: Errors accumulate893109
 -Node: Getting Accuracy894542
 -Node: Try To Round897204
 -Node: Setting precision898103
 -Ref: table-predefined-precision-strings898787
 -Node: Setting the rounding mode900576
 -Ref: table-gawk-rounding-modes900940
 -Ref: Setting the rounding mode-Footnote-1904395
 -Node: Arbitrary Precision Integers904574
 -Ref: Arbitrary Precision Integers-Footnote-1909473
 -Node: POSIX Floating Point Problems909622
 -Ref: POSIX Floating Point Problems-Footnote-1913495
 -Node: Floating point summary913533
 -Node: Dynamic Extensions915727
 -Node: Extension Intro917279
 -Node: Plugin License918545
 -Node: Extension Mechanism Outline919342
 -Ref: figure-load-extension919770
 -Ref: figure-register-new-function921250
 -Ref: figure-call-new-function922254
 -Node: Extension API Description924240
 -Node: Extension API Functions Introduction925690
 -Node: General Data Types930514
 -Ref: General Data Types-Footnote-1936253
 -Node: Memory Allocation Functions936552
 -Ref: Memory Allocation Functions-Footnote-1939391
 -Node: Constructor Functions939487
 -Node: Registration Functions941221
 -Node: Extension Functions941906
 -Node: Exit Callback Functions944203
 -Node: Extension Version String945451
 -Node: Input Parsers946116
 -Node: Output Wrappers955995
 -Node: Two-way processors960510
 -Node: Printing Messages962714
 -Ref: Printing Messages-Footnote-1963790
 -Node: Updating `ERRNO'963942
 -Node: Requesting Values964682
 -Ref: table-value-types-returned965410
 -Node: Accessing Parameters966367
 -Node: Symbol Table Access967598
 -Node: Symbol table by name968112
 -Node: Symbol table by cookie970093
 -Ref: Symbol table by cookie-Footnote-1974237
 -Node: Cached values974300
 -Ref: Cached values-Footnote-1977799
 -Node: Array Manipulation977890
 -Ref: Array Manipulation-Footnote-1978988
 -Node: Array Data Types979025
 -Ref: Array Data Types-Footnote-1981680
 -Node: Array Functions981772
 -Node: Flattening Arrays985626
 -Node: Creating Arrays992518
 -Node: Extension API Variables997289
 -Node: Extension Versioning997925
 -Node: Extension API Informational Variables999826
 -Node: Extension API Boilerplate1000891
 -Node: Finding Extensions1004700
 -Node: Extension Example1005260
 -Node: Internal File Description1006032
 -Node: Internal File Ops1010099
 -Ref: Internal File Ops-Footnote-11021769
 -Node: Using Internal File Ops1021909
 -Ref: Using Internal File Ops-Footnote-11024292
 -Node: Extension Samples1024565
 -Node: Extension Sample File Functions1026091
 -Node: Extension Sample Fnmatch1033729
 -Node: Extension Sample Fork1035220
 -Node: Extension Sample Inplace1036435
 -Node: Extension Sample Ord1038110
 -Node: Extension Sample Readdir1038946
 -Ref: table-readdir-file-types1039822
 -Node: Extension Sample Revout1040633
 -Node: Extension Sample Rev2way1041223
 -Node: Extension Sample Read write array1041963
 -Node: Extension Sample Readfile1043903
 -Node: Extension Sample Time1044998
 -Node: Extension Sample API Tests1046347
 -Node: gawkextlib1046838
 -Node: Extension summary1049496
 -Node: Extension Exercises1053185
 -Node: Language History1053907
 -Node: V7/SVR3.11055563
 -Node: SVR41057744
 -Node: POSIX1059189
 -Node: BTL1060578
 -Node: POSIX/GNU1061312
 -Node: Feature History1066936
 -Node: Common Extensions1080034
 -Node: Ranges and Locales1081358
 -Ref: Ranges and Locales-Footnote-11085976
 -Ref: Ranges and Locales-Footnote-21086003
 -Ref: Ranges and Locales-Footnote-31086237
 -Node: Contributors1086458
 -Node: History summary1091999
 -Node: Installation1093369
 -Node: Gawk Distribution1094315
 -Node: Getting1094799
 -Node: Extracting1095622
 -Node: Distribution contents1097257
 -Node: Unix Installation1103322
 -Node: Quick Installation1104005
 -Node: Shell Startup Files1106416
 -Node: Additional Configuration Options1107495
 -Node: Configuration Philosophy1109234
 -Node: Non-Unix Installation1111603
 -Node: PC Installation1112061
 -Node: PC Binary Installation1113380
 -Node: PC Compiling1115228
 -Ref: PC Compiling-Footnote-11118249
 -Node: PC Testing1118358
 -Node: PC Using1119534
 -Node: Cygwin1123649
 -Node: MSYS1124472
 -Node: VMS Installation1124972
 -Node: VMS Compilation1125764
 -Ref: VMS Compilation-Footnote-11126986
 -Node: VMS Dynamic Extensions1127044
 -Node: VMS Installation Details1128728
 -Node: VMS Running1130980
 -Node: VMS GNV1133816
 -Node: VMS Old Gawk1134550
 -Node: Bugs1135020
 -Node: Other Versions1138903
 -Node: Installation summary1145331
 -Node: Notes1146387
 -Node: Compatibility Mode1147252
 -Node: Additions1148034
 -Node: Accessing The Source1148959
 -Node: Adding Code1150395
 -Node: New Ports1156560
 -Node: Derived Files1161042
 -Ref: Derived Files-Footnote-11166517
 -Ref: Derived Files-Footnote-21166551
 -Ref: Derived Files-Footnote-31167147
 -Node: Future Extensions1167261
 -Node: Implementation Limitations1167867
 -Node: Extension Design1169115
 -Node: Old Extension Problems1170269
 -Ref: Old Extension Problems-Footnote-11171786
 -Node: Extension New Mechanism Goals1171843
 -Ref: Extension New Mechanism Goals-Footnote-11175203
 -Node: Extension Other Design Decisions1175392
 -Node: Extension Future Growth1177500
 -Node: Old Extension Mechanism1178336
 -Node: Notes summary1180098
 -Node: Basic Concepts1181284
 -Node: Basic High Level1181965
 -Ref: figure-general-flow1182237
 -Ref: figure-process-flow1182836
 -Ref: Basic High Level-Footnote-11186065
 -Node: Basic Data Typing1186250
 -Node: Glossary1189578
 -Node: Copying1214736
 -Node: GNU Free Documentation License1252292
 -Node: Index1277428
++Node: Print271952
++Node: Print Examples273409
++Node: Output Separators276188
++Node: OFMT278206
++Node: Printf279560
++Node: Basic Printf280345
++Node: Control Letters281915
++Node: Format Modifiers285898
++Node: Printf Examples291907
++Node: Redirection294393
++Node: Special FD301234
++Ref: Special FD-Footnote-1304394
++Node: Special Files304468
++Node: Other Inherited Files305085
++Node: Special Network306085
++Node: Special Caveats306947
++Node: Close Files And Pipes307898
++Ref: Close Files And Pipes-Footnote-1315085
++Ref: Close Files And Pipes-Footnote-2315233
++Node: Print Return Values315383
++Node: Output Summary315937
++Node: Output Exercises316933
++Node: Expressions317613
++Node: Values318798
++Node: Constants319476
++Node: Scalar Constants320167
++Ref: Scalar Constants-Footnote-1321026
++Node: Nondecimal-numbers321276
++Node: Regexp Constants324294
++Node: Using Constant Regexps324819
++Node: Variables327962
++Node: Using Variables328617
++Node: Assignment Options330528
++Node: Conversion332403
++Node: Strings And Numbers332927
++Ref: Strings And Numbers-Footnote-1335992
++Node: Locale influences conversions336101
++Ref: table-locale-affects338848
++Node: All Operators339436
++Node: Arithmetic Ops340066
++Node: Concatenation342571
++Ref: Concatenation-Footnote-1345390
++Node: Assignment Ops345496
++Ref: table-assign-ops350475
++Node: Increment Ops351747
++Node: Truth Values and Conditions355185
++Node: Truth Values356270
++Node: Typing and Comparison357319
++Node: Variable Typing358129
++Node: Comparison Operators361782
++Ref: table-relational-ops362192
++Node: POSIX String Comparison365687
++Ref: POSIX String Comparison-Footnote-1366759
++Node: Boolean Ops366897
++Ref: Boolean Ops-Footnote-1371376
++Node: Conditional Exp371467
++Node: Function Calls373194
++Node: Precedence377074
++Node: Locales380735
++Node: Expressions Summary382367
++Node: Patterns and Actions384927
++Node: Pattern Overview386047
++Node: Regexp Patterns387726
++Node: Expression Patterns388269
++Node: Ranges391979
++Node: BEGIN/END395085
++Node: Using BEGIN/END395846
++Ref: Using BEGIN/END-Footnote-1398580
++Node: I/O And BEGIN/END398686
++Node: BEGINFILE/ENDFILE401000
++Node: Empty403901
++Node: Using Shell Variables404218
++Node: Action Overview406491
++Node: Statements408817
++Node: If Statement410665
++Node: While Statement412160
++Node: Do Statement414189
++Node: For Statement415333
++Node: Switch Statement418490
++Node: Break Statement420872
++Node: Continue Statement422913
++Node: Next Statement424740
++Node: Nextfile Statement427121
++Node: Exit Statement429751
++Node: Built-in Variables432154
++Node: User-modified433287
++Ref: User-modified-Footnote-1440968
++Node: Auto-set441030
++Ref: Auto-set-Footnote-1454722
++Ref: Auto-set-Footnote-2454927
++Node: ARGC and ARGV454983
++Node: Pattern Action Summary459201
++Node: Arrays461628
++Node: Array Basics462957
++Node: Array Intro463801
++Ref: figure-array-elements465765
++Ref: Array Intro-Footnote-1468291
++Node: Reference to Elements468419
++Node: Assigning Elements470871
++Node: Array Example471362
++Node: Scanning an Array473120
++Node: Controlling Scanning476136
++Ref: Controlling Scanning-Footnote-1481332
++Node: Numeric Array Subscripts481648
++Node: Uninitialized Subscripts483833
++Node: Delete485450
++Ref: Delete-Footnote-1488193
++Node: Multidimensional488250
++Node: Multiscanning491347
++Node: Arrays of Arrays492936
++Node: Arrays Summary497695
++Node: Functions499787
++Node: Built-in500686
++Node: Calling Built-in501764
++Node: Numeric Functions503755
++Ref: Numeric Functions-Footnote-1508574
++Ref: Numeric Functions-Footnote-2508931
++Ref: Numeric Functions-Footnote-3508979
++Node: String Functions509251
++Ref: String Functions-Footnote-1532726
++Ref: String Functions-Footnote-2532855
++Ref: String Functions-Footnote-3533103
++Node: Gory Details533190
++Ref: table-sub-escapes534971
++Ref: table-sub-proposed536491
++Ref: table-posix-sub537855
++Ref: table-gensub-escapes539391
++Ref: Gory Details-Footnote-1540223
++Node: I/O Functions540374
++Ref: I/O Functions-Footnote-1547592
++Node: Time Functions547739
++Ref: Time Functions-Footnote-1558227
++Ref: Time Functions-Footnote-2558295
++Ref: Time Functions-Footnote-3558453
++Ref: Time Functions-Footnote-4558564
++Ref: Time Functions-Footnote-5558676
++Ref: Time Functions-Footnote-6558903
++Node: Bitwise Functions559169
++Ref: table-bitwise-ops559731
++Ref: Bitwise Functions-Footnote-1564040
++Node: Type Functions564209
++Node: I18N Functions565360
++Node: User-defined567005
++Node: Definition Syntax567810
++Ref: Definition Syntax-Footnote-1573217
++Node: Function Example573288
++Ref: Function Example-Footnote-1576207
++Node: Function Caveats576229
++Node: Calling A Function576747
++Node: Variable Scope577705
++Node: Pass By Value/Reference580693
++Node: Return Statement584188
++Node: Dynamic Typing587169
++Node: Indirect Calls588098
++Ref: Indirect Calls-Footnote-1599400
++Node: Functions Summary599528
++Node: Library Functions602230
++Ref: Library Functions-Footnote-1605839
++Ref: Library Functions-Footnote-2605982
++Node: Library Names606153
++Ref: Library Names-Footnote-1609607
++Ref: Library Names-Footnote-2609830
++Node: General Functions609916
++Node: Strtonum Function611019
++Node: Assert Function614041
++Node: Round Function617365
++Node: Cliff Random Function618906
++Node: Ordinal Functions619922
++Ref: Ordinal Functions-Footnote-1622985
++Ref: Ordinal Functions-Footnote-2623237
++Node: Join Function623448
++Ref: Join Function-Footnote-1625217
++Node: Getlocaltime Function625417
++Node: Readfile Function629161
++Node: Shell Quoting631131
++Node: Data File Management632532
++Node: Filetrans Function633164
++Node: Rewind Function637220
++Node: File Checking638607
++Ref: File Checking-Footnote-1639939
++Node: Empty Files640140
++Node: Ignoring Assigns642119
++Node: Getopt Function643670
++Ref: Getopt Function-Footnote-1655132
++Node: Passwd Functions655332
++Ref: Passwd Functions-Footnote-1664169
++Node: Group Functions664257
++Ref: Group Functions-Footnote-1672151
++Node: Walking Arrays672364
++Node: Library Functions Summary673967
++Node: Library Exercises675368
++Node: Sample Programs676648
++Node: Running Examples677418
++Node: Clones678146
++Node: Cut Program679370
++Node: Egrep Program689089
++Ref: Egrep Program-Footnote-1696587
++Node: Id Program696697
++Node: Split Program700342
++Ref: Split Program-Footnote-1703790
++Node: Tee Program703918
++Node: Uniq Program706707
++Node: Wc Program714126
++Ref: Wc Program-Footnote-1718376
++Node: Miscellaneous Programs718470
++Node: Dupword Program719683
++Node: Alarm Program721714
++Node: Translate Program726518
++Ref: Translate Program-Footnote-1731083
++Node: Labels Program731353
++Ref: Labels Program-Footnote-1734704
++Node: Word Sorting734788
++Node: History Sorting738859
++Node: Extract Program740695
++Node: Simple Sed748220
++Node: Igawk Program751288
++Ref: Igawk Program-Footnote-1765612
++Ref: Igawk Program-Footnote-2765813
++Ref: Igawk Program-Footnote-3765935
++Node: Anagram Program766050
++Node: Signature Program769107
++Node: Programs Summary770354
++Node: Programs Exercises771547
++Ref: Programs Exercises-Footnote-1775678
++Node: Advanced Features775769
++Node: Nondecimal Data777717
++Node: Array Sorting779307
++Node: Controlling Array Traversal780004
++Ref: Controlling Array Traversal-Footnote-1788337
++Node: Array Sorting Functions788455
++Ref: Array Sorting Functions-Footnote-1792344
++Node: Two-way I/O792540
++Ref: Two-way I/O-Footnote-1797485
++Ref: Two-way I/O-Footnote-2797671
++Node: TCP/IP Networking797753
++Node: Profiling800626
++Node: Advanced Features Summary808903
++Node: Internationalization810836
++Node: I18N and L10N812316
++Node: Explaining gettext813002
++Ref: Explaining gettext-Footnote-1818027
++Ref: Explaining gettext-Footnote-2818211
++Node: Programmer i18n818376
++Ref: Programmer i18n-Footnote-1823242
++Node: Translator i18n823291
++Node: String Extraction824085
++Ref: String Extraction-Footnote-1825216
++Node: Printf Ordering825302
++Ref: Printf Ordering-Footnote-1828088
++Node: I18N Portability828152
++Ref: I18N Portability-Footnote-1830607
++Node: I18N Example830670
++Ref: I18N Example-Footnote-1833473
++Node: Gawk I18N833545
++Node: I18N Summary834183
++Node: Debugger835522
++Node: Debugging836544
++Node: Debugging Concepts836985
++Node: Debugging Terms838838
++Node: Awk Debugging841410
++Node: Sample Debugging Session842304
++Node: Debugger Invocation842824
++Node: Finding The Bug844208
++Node: List of Debugger Commands850683
++Node: Breakpoint Control852016
++Node: Debugger Execution Control855712
++Node: Viewing And Changing Data859076
++Node: Execution Stack862454
++Node: Debugger Info864091
++Node: Miscellaneous Debugger Commands868108
++Node: Readline Support873137
++Node: Limitations874029
++Node: Debugging Summary876143
++Node: Arbitrary Precision Arithmetic877311
++Node: Computer Arithmetic878727
++Ref: table-numeric-ranges882325
++Ref: Computer Arithmetic-Footnote-1883184
++Node: Math Definitions883241
++Ref: table-ieee-formats886529
++Ref: Math Definitions-Footnote-1887133
++Node: MPFR features887238
++Node: FP Math Caution888909
++Ref: FP Math Caution-Footnote-1889959
++Node: Inexactness of computations890328
++Node: Inexact representation891287
++Node: Comparing FP Values892644
++Node: Errors accumulate893726
++Node: Getting Accuracy895159
++Node: Try To Round897821
++Node: Setting precision898720
++Ref: table-predefined-precision-strings899404
++Node: Setting the rounding mode901193
++Ref: table-gawk-rounding-modes901557
++Ref: Setting the rounding mode-Footnote-1905012
++Node: Arbitrary Precision Integers905191
++Ref: Arbitrary Precision Integers-Footnote-1910090
++Node: POSIX Floating Point Problems910239
++Ref: POSIX Floating Point Problems-Footnote-1914112
++Node: Floating point summary914150
++Node: Dynamic Extensions916344
++Node: Extension Intro917896
++Node: Plugin License919162
++Node: Extension Mechanism Outline919959
++Ref: figure-load-extension920387
++Ref: figure-register-new-function921867
++Ref: figure-call-new-function922871
++Node: Extension API Description924857
++Node: Extension API Functions Introduction926307
++Node: General Data Types931131
++Ref: General Data Types-Footnote-1936870
++Node: Memory Allocation Functions937169
++Ref: Memory Allocation Functions-Footnote-1940008
++Node: Constructor Functions940104
++Node: Registration Functions941838
++Node: Extension Functions942523
++Node: Exit Callback Functions944820
++Node: Extension Version String946068
++Node: Input Parsers946733
++Node: Output Wrappers956612
++Node: Two-way processors961127
++Node: Printing Messages963331
++Ref: Printing Messages-Footnote-1964407
++Node: Updating `ERRNO'964559
++Node: Requesting Values965299
++Ref: table-value-types-returned966027
++Node: Accessing Parameters966984
++Node: Symbol Table Access968215
++Node: Symbol table by name968729
++Node: Symbol table by cookie970710
++Ref: Symbol table by cookie-Footnote-1974854
++Node: Cached values974917
++Ref: Cached values-Footnote-1978416
++Node: Array Manipulation978507
++Ref: Array Manipulation-Footnote-1979605
++Node: Array Data Types979642
++Ref: Array Data Types-Footnote-1982297
++Node: Array Functions982389
++Node: Flattening Arrays986243
++Node: Creating Arrays993135
++Node: Extension API Variables997906
++Node: Extension Versioning998542
++Node: Extension API Informational Variables1000443
++Node: Extension API Boilerplate1001508
++Node: Finding Extensions1005317
++Node: Extension Example1005877
++Node: Internal File Description1006649
++Node: Internal File Ops1010716
++Ref: Internal File Ops-Footnote-11022386
++Node: Using Internal File Ops1022526
++Ref: Using Internal File Ops-Footnote-11024909
++Node: Extension Samples1025182
++Node: Extension Sample File Functions1026708
++Node: Extension Sample Fnmatch1034346
++Node: Extension Sample Fork1035837
++Node: Extension Sample Inplace1037052
++Node: Extension Sample Ord1038727
++Node: Extension Sample Readdir1039563
++Ref: table-readdir-file-types1040439
++Node: Extension Sample Revout1041250
++Node: Extension Sample Rev2way1041840
++Node: Extension Sample Read write array1042580
++Node: Extension Sample Readfile1044520
++Node: Extension Sample Time1045615
++Node: Extension Sample API Tests1046964
++Node: gawkextlib1047455
++Node: Extension summary1050113
++Node: Extension Exercises1053802
++Node: Language History1054524
++Node: V7/SVR3.11056180
++Node: SVR41058361
++Node: POSIX1059806
++Node: BTL1061195
++Node: POSIX/GNU1061929
++Node: Feature History1067553
++Node: Common Extensions1080651
++Node: Ranges and Locales1081975
++Ref: Ranges and Locales-Footnote-11086593
++Ref: Ranges and Locales-Footnote-21086620
++Ref: Ranges and Locales-Footnote-31086854
++Node: Contributors1087075
++Node: History summary1092616
++Node: Installation1093986
++Node: Gawk Distribution1094932
++Node: Getting1095416
++Node: Extracting1096239
++Node: Distribution contents1097874
++Node: Unix Installation1103939
++Node: Quick Installation1104622
++Node: Shell Startup Files1107033
++Node: Additional Configuration Options1108112
++Node: Configuration Philosophy1109851
++Node: Non-Unix Installation1112220
++Node: PC Installation1112678
++Node: PC Binary Installation1113997
++Node: PC Compiling1115845
++Ref: PC Compiling-Footnote-11118866
++Node: PC Testing1118975
++Node: PC Using1120151
++Node: Cygwin1124266
++Node: MSYS1125089
++Node: VMS Installation1125589
++Node: VMS Compilation1126381
++Ref: VMS Compilation-Footnote-11127603
++Node: VMS Dynamic Extensions1127661
++Node: VMS Installation Details1129345
++Node: VMS Running1131597
++Node: VMS GNV1134433
++Node: VMS Old Gawk1135167
++Node: Bugs1135637
++Node: Other Versions1139520
++Node: Installation summary1145948
++Node: Notes1147004
++Node: Compatibility Mode1147869
++Node: Additions1148651
++Node: Accessing The Source1149576
++Node: Adding Code1151012
++Node: New Ports1157177
++Node: Derived Files1161659
++Ref: Derived Files-Footnote-11167134
++Ref: Derived Files-Footnote-21167168
++Ref: Derived Files-Footnote-31167764
++Node: Future Extensions1167878
++Node: Implementation Limitations1168484
++Node: Extension Design1169732
++Node: Old Extension Problems1170886
++Ref: Old Extension Problems-Footnote-11172403
++Node: Extension New Mechanism Goals1172460
++Ref: Extension New Mechanism Goals-Footnote-11175820
++Node: Extension Other Design Decisions1176009
++Node: Extension Future Growth1178117
++Node: Old Extension Mechanism1178953
++Node: Notes summary1180715
++Node: Basic Concepts1181901
++Node: Basic High Level1182582
++Ref: figure-general-flow1182854
++Ref: figure-process-flow1183453
++Ref: Basic High Level-Footnote-11186682
++Node: Basic Data Typing1186867
++Node: Glossary1190195
++Node: Copying1215353
++Node: GNU Free Documentation License1252909
++Node: Index1278045
  
  End Tag Table
diff --cc profile.c
index 549d483,233bca0..5983cee
--- a/profile.c
+++ b/profile.c
@@@ -180,9 -182,7 +182,8 @@@ pprint(INSTRUCTION *startp, INSTRUCTIO
        NODE *m;
        char *tmp;
        int rule;
-       long lind;
        static int rule_count[MAXRULE];
 +      bool print_exp = false;
  
        for (pc = startp; pc != endp; pc = pc->nexti) {
                if (pc->source_line > 0)
@@@ -588,24 -592,14 +600,24 @@@ cleanup
                                t1 = pp_pop();
                                if (is_binary(t1->type))
                                        pp_parenthesize(t1);
 -                              fprintf(prof_fp, "%s%s%s%s", op2str(pc->opcode),
 -                                                      tmp, 
redir2str(pc->redir_type), t1->pp_str);
 +                              str2 = pp_group3(op2str(pc->opcode),
 +                                                      tmp, 
redir2str(pc->redir_type));
 +                              str = pp_group3("", str2, t1->pp_str);
 +                              efree(str2);
                                pp_free(t1);
                        } else
 -                              fprintf(prof_fp, "%s%s", op2str(pc->opcode), 
tmp);
 +                              str = pp_group3("", op2str(pc->opcode), tmp);
 +
                        efree(tmp);
 -                      if (! in_for_header)
 -                              end_line(pc);
 +                      if (print_exp) {
 +                              pp_push(pc->opcode, str, CAN_FREE);
 +                      } else {
 +                              fprintf(prof_fp, "%s", str);
 +                              efree(str);
 +                              if (! in_for_header)
-                                       fprintf(prof_fp, "\n");
++                                      end_line(pc);
 +                      }
 +                      print_exp = false;
                        break;
  
                case Op_push_re:

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

Summary of changes:
 ChangeLog         |   24 ++
 awk.h             |    5 +
 awkgram.c         |  810 +++++++++++++++++++-----------------
 awkgram.y         |   70 +++-
 doc/ChangeLog     |   17 +
 doc/gawk.info     | 1185 +++++++++++++++++++++++++++--------------------------
 doc/gawk.texi     |  109 +++---
 doc/gawktexi.in   |  109 +++---
 doc/texinfo.tex   |  123 ++++--
 po/it.po          | 1146 ++++++++++++++++++++++++++-------------------------
 profile.c         |  182 +++++----
 test/ChangeLog    |   16 +
 test/Makefile.am  |    7 +-
 test/Makefile.in  |   12 +-
 test/Maketests    |    5 +
 test/badbuild.awk |    6 +
 test/badbuild.in  |    1 +
 test/badbuild.ok  |    3 +
 test/profile5.ok  |  707 +++++++++++++++++---------------
 19 files changed, 2425 insertions(+), 2112 deletions(-)
 create mode 100644 test/badbuild.awk
 create mode 100644 test/badbuild.in
 create mode 100644 test/badbuild.ok


hooks/post-receive
-- 
gawk



reply via email to

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