gawk-diffs
[Top][All Lists]
Advanced

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

[gawk-diffs] [SCM] gawk branch, master, updated. gawk-4.1.0-1245-g902b25


From: Arnold Robbins
Subject: [gawk-diffs] [SCM] gawk branch, master, updated. gawk-4.1.0-1245-g902b25a
Date: Tue, 31 Mar 2015 19:32:56 +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, master has been updated
       via  902b25a40d5cc612dd7a0becb27a5a48afa49716 (commit)
       via  9730efeabb2116fdf7e93b4553825ba147f5f523 (commit)
       via  c3d61778cf747143535320affee0612c4c6d4eb8 (commit)
       via  0ed7e09458bdb6185586a8a0bec747b2f800ca16 (commit)
       via  67d5cc4c4034f16a2390e30d8e988713e5aedb68 (commit)
       via  a47af3141cf4a6b43e20db872e2b45ff9abb071f (commit)
       via  2ee1a928483f4fe4f594aebc5c1f8da1253c28b9 (commit)
       via  080694ae82635e76992158591b39a06af7363da0 (commit)
       via  75459887958f5246bc5126261ec92c8f4d366a47 (commit)
       via  02856054ac25477e5913bdee1632d8cb11a184cd (commit)
       via  59514868fde1190f719e78d4c4b91bd14a321541 (commit)
      from  2bdaa6b89e00984d79305ba1066cf98c5674b556 (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=902b25a40d5cc612dd7a0becb27a5a48afa49716

commit 902b25a40d5cc612dd7a0becb27a5a48afa49716
Merge: 2bdaa6b 9730efe
Author: Arnold D. Robbins <address@hidden>
Date:   Tue Mar 31 22:32:44 2015 +0300

    Merge branch 'gawk-4.1-stable'

diff --cc ChangeLog
index b2e0214,53f2545..9b2490b
--- a/ChangeLog
+++ b/ChangeLog
@@@ -1,18 -1,45 +1,54 @@@
+ 2015-03-31         Arnold D. Robbins     <address@hidden>
+ 
+       * awk.h (call_sub): Renamed from call_sub_func.
+       (call_match, call_split_func): Declare.
+       * builtin.c (call_sub): Renamed from call_sub_func.
+       (call_match, call_split_func): New functions.
+       * interpret.h (r_interpret): Call new functions as appropriate.
+       * node.c (r_unref): Revert change to handle Node_regex, not needed.
+ 
+ 2015-03-31         Arnold D. Robbins     <address@hidden>
+ 
+       * awk.h (r_get_field): Declare.
+       * builtin.c (call_sub_func): Rearrange the stack to be what
+       the buitin function expects.
+       * eval.c (r_get_field): Make extern.
+ 
 +2015-03-27         Arnold D. Robbins     <address@hidden>
 +
 +      * io.c (redirect): Change not_string from int to bool.
 +      * gawkapi.c (api_get_file): Minor stylistic improvements.
 +      * NEWS: Updated for retryable I/O and new API function.
 +
+ 2015-03-24         Arnold D. Robbins     <address@hidden>
+ 
+       * awkgram.y (make_regnode): Make extern.
+       * awk.h (make_regnode): Declare.
+       * builtin.c (call_sub_func): Start on reworking the stack to
+       be what do_sub() expects. Still needs work.
+       * interpret.h (r_interpret): Add a cast in comparison with do_sub().
+       * node.c (r_unref): Handle Node_regex nodes.
+ 
  2015-03-24         Andrew J. Schorr     <address@hidden>
  
        * interpret.h (r_interpret): When Op_K_exit has an argument of
        Nnull_string, do not update exit_val, since no value was supplied.
  
 +2015-03-24         Arnold D. Robbins     <address@hidden>
 +
 +      * awk.h, gawkapi.c, io.c: Minor code reformatting.
 +
+ 2015-03-20         Arnold D. Robbins     <address@hidden>
+ 
+       Start on fixing indirect calls of builtins.
+ 
+       * awk.h (call_sub_func): Add declaration.
+       * awkgram.y (lookup_builtin): Handle length, sub functions.
+       (install_builtin): Handle length function.
+       * builtin.c (call_sub_func): New function.
+       * interpret.h (r_interpret): If calling do_sub, do it through
+       call_sub_func().
 ->>>>>>> feature/fix-indirect-call
+ 
  2015-03-18         Arnold D. Robbins     <address@hidden>
  
        * config.guess, config.sub: Updated, from libtool 2.4.6.
diff --cc awkgram.c
index 78e915a,fcde256..40f5d28
--- a/awkgram.c
+++ b/awkgram.c
@@@ -203,7 -191,7 +202,7 @@@ extern double fmod(double x, double y)
  
  #define YYSTYPE INSTRUCTION *
  
- #line 207 "awkgram.c" /* yacc.c:339  */
 -#line 195 "awkgram.c" /* yacc.c:339  */
++#line 206 "awkgram.c" /* yacc.c:339  */
  
  # ifndef YY_NULLPTR
  #  if defined __cplusplus && 201103L <= __cplusplus
@@@ -357,7 -345,7 +356,7 @@@ int yyparse (void)
  
  /* Copy the second part of user declarations.  */
  
- #line 361 "awkgram.c" /* yacc.c:358  */
 -#line 349 "awkgram.c" /* yacc.c:358  */
++#line 360 "awkgram.c" /* yacc.c:358  */
  
  #ifdef short
  # undef short
@@@ -659,25 -647,25 +658,25 @@@ static const yytype_uint8 yytranslate[
    /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
  static const yytype_uint16 yyrline[] =
  {
-        0,   206,   206,   208,   213,   214,   218,   230,   235,   246,
-      252,   258,   267,   275,   277,   282,   290,   292,   298,   306,
-      316,   346,   360,   374,   382,   393,   405,   407,   409,   415,
-      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,
-      958,   958,  1056,  1056,  1089,  1119,  1125,  1126,  1132,  1133,
-     1140,  1145,  1157,  1171,  1173,  1181,  1186,  1188,  1196,  1198,
-     1207,  1208,  1216,  1221,  1221,  1232,  1236,  1244,  1245,  1248,
-     1250,  1255,  1256,  1265,  1266,  1271,  1276,  1282,  1284,  1286,
-     1293,  1294,  1300,  1301,  1306,  1308,  1313,  1315,  1323,  1328,
-     1337,  1344,  1346,  1348,  1364,  1374,  1381,  1383,  1388,  1390,
-     1392,  1400,  1402,  1407,  1409,  1414,  1416,  1418,  1468,  1470,
-     1472,  1474,  1476,  1478,  1480,  1482,  1496,  1501,  1506,  1531,
-     1537,  1539,  1541,  1543,  1545,  1547,  1552,  1556,  1588,  1590,
-     1596,  1602,  1615,  1616,  1617,  1622,  1627,  1631,  1635,  1650,
-     1663,  1668,  1705,  1734,  1735,  1741,  1742,  1747,  1749,  1756,
-     1773,  1790,  1792,  1799,  1804,  1812,  1822,  1834,  1843,  1847,
-     1851,  1855,  1859,  1863,  1866,  1868,  1872,  1876,  1880
 -       0,   194,   194,   196,   201,   202,   206,   218,   222,   233,
 -     239,   245,   254,   262,   264,   269,   277,   279,   285,   286,
 -     288,   314,   325,   336,   342,   351,   361,   363,   365,   371,
 -     379,   380,   384,   403,   402,   436,   438,   443,   444,   457,
 -     462,   463,   467,   469,   471,   478,   568,   610,   652,   765,
 -     772,   779,   789,   798,   807,   816,   827,   843,   842,   866,
 -     878,   878,   976,   976,  1009,  1039,  1045,  1046,  1052,  1053,
 -    1060,  1065,  1077,  1091,  1093,  1101,  1106,  1108,  1116,  1118,
 -    1127,  1128,  1136,  1141,  1141,  1152,  1156,  1164,  1165,  1168,
 -    1170,  1175,  1176,  1185,  1186,  1191,  1196,  1202,  1204,  1206,
 -    1213,  1214,  1220,  1221,  1226,  1228,  1233,  1235,  1243,  1248,
 -    1257,  1264,  1266,  1268,  1284,  1294,  1301,  1303,  1308,  1310,
 -    1312,  1320,  1322,  1327,  1329,  1334,  1336,  1338,  1388,  1390,
 -    1392,  1394,  1396,  1398,  1400,  1402,  1416,  1421,  1426,  1451,
 -    1457,  1459,  1461,  1463,  1465,  1467,  1472,  1476,  1508,  1510,
 -    1516,  1522,  1535,  1536,  1537,  1542,  1547,  1551,  1555,  1570,
 -    1583,  1588,  1625,  1654,  1655,  1661,  1662,  1667,  1669,  1676,
 -    1693,  1710,  1712,  1719,  1724,  1732,  1742,  1754,  1763,  1767,
 -    1771,  1775,  1779,  1783,  1786,  1788,  1792,  1796,  1800
++       0,   205,   205,   207,   212,   213,   217,   229,   234,   245,
++     251,   257,   266,   274,   276,   281,   289,   291,   297,   305,
++     315,   345,   359,   373,   381,   392,   404,   406,   408,   414,
++     422,   423,   427,   462,   461,   495,   497,   502,   508,   536,
++     541,   542,   546,   548,   550,   557,   647,   689,   731,   844,
++     851,   858,   868,   877,   886,   895,   906,   922,   921,   945,
++     957,   957,  1055,  1055,  1088,  1118,  1124,  1125,  1131,  1132,
++    1139,  1144,  1156,  1170,  1172,  1180,  1185,  1187,  1195,  1197,
++    1206,  1207,  1215,  1220,  1220,  1231,  1235,  1243,  1244,  1247,
++    1249,  1254,  1255,  1264,  1265,  1270,  1275,  1281,  1283,  1285,
++    1292,  1293,  1299,  1300,  1305,  1307,  1312,  1314,  1322,  1327,
++    1336,  1343,  1345,  1347,  1363,  1373,  1380,  1382,  1387,  1389,
++    1391,  1399,  1401,  1406,  1408,  1413,  1415,  1417,  1467,  1469,
++    1471,  1473,  1475,  1477,  1479,  1481,  1495,  1500,  1505,  1530,
++    1536,  1538,  1540,  1542,  1544,  1546,  1551,  1555,  1587,  1589,
++    1595,  1601,  1614,  1615,  1616,  1621,  1626,  1630,  1634,  1649,
++    1662,  1667,  1704,  1733,  1734,  1740,  1741,  1746,  1748,  1755,
++    1772,  1789,  1791,  1798,  1803,  1811,  1821,  1833,  1842,  1846,
++    1850,  1854,  1858,  1862,  1865,  1867,  1871,  1875,  1879
  };
  #endif
  
@@@ -1850,24 -1838,24 +1849,24 @@@ yyreduce
    switch (yyn)
      {
          case 3:
- #line 209 "awkgram.y" /* yacc.c:1646  */
 -#line 197 "awkgram.y" /* yacc.c:1646  */
++#line 208 "awkgram.y" /* yacc.c:1646  */
      {
                rule = 0;
                yyerrok;
          }
- #line 1859 "awkgram.c" /* yacc.c:1646  */
 -#line 1847 "awkgram.c" /* yacc.c:1646  */
++#line 1858 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 5:
- #line 215 "awkgram.y" /* yacc.c:1646  */
 -#line 203 "awkgram.y" /* yacc.c:1646  */
++#line 214 "awkgram.y" /* yacc.c:1646  */
      {
                next_sourcefile();
          }
- #line 1867 "awkgram.c" /* yacc.c:1646  */
 -#line 1855 "awkgram.c" /* yacc.c:1646  */
++#line 1866 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 6:
- #line 219 "awkgram.y" /* yacc.c:1646  */
 -#line 207 "awkgram.y" /* yacc.c:1646  */
++#line 218 "awkgram.y" /* yacc.c:1646  */
      {
                rule = 0;
                /*
@@@ -1876,20 -1864,19 +1875,20 @@@
                 */
                /* yyerrok; */
          }
- #line 1880 "awkgram.c" /* yacc.c:1646  */
 -#line 1868 "awkgram.c" /* yacc.c:1646  */
++#line 1879 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 7:
- #line 231 "awkgram.y" /* yacc.c:1646  */
 -#line 219 "awkgram.y" /* yacc.c:1646  */
++#line 230 "awkgram.y" /* yacc.c:1646  */
      {
                (void) append_rule((yyvsp[-1]), (yyvsp[0]));
 +              first_rule = false;
          }
- #line 1889 "awkgram.c" /* yacc.c:1646  */
 -#line 1876 "awkgram.c" /* yacc.c:1646  */
++#line 1888 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 8:
- #line 236 "awkgram.y" /* yacc.c:1646  */
 -#line 223 "awkgram.y" /* yacc.c:1646  */
++#line 235 "awkgram.y" /* yacc.c:1646  */
      {
                if (rule != Rule) {
                        msg(_("%s blocks must have an action part"), 
ruletab[rule]);
@@@ -1900,41 -1887,41 +1899,41 @@@
                } else          /* pattern rule with non-empty pattern */
                        (void) append_rule((yyvsp[-1]), NULL);
          }
- #line 1904 "awkgram.c" /* yacc.c:1646  */
 -#line 1891 "awkgram.c" /* yacc.c:1646  */
++#line 1903 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 9:
- #line 247 "awkgram.y" /* yacc.c:1646  */
 -#line 234 "awkgram.y" /* yacc.c:1646  */
++#line 246 "awkgram.y" /* yacc.c:1646  */
      {
                in_function = NULL;
                (void) mk_function((yyvsp[-1]), (yyvsp[0]));
                yyerrok;
          }
- #line 1914 "awkgram.c" /* yacc.c:1646  */
 -#line 1901 "awkgram.c" /* yacc.c:1646  */
++#line 1913 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 10:
- #line 253 "awkgram.y" /* yacc.c:1646  */
 -#line 240 "awkgram.y" /* yacc.c:1646  */
++#line 252 "awkgram.y" /* yacc.c:1646  */
      {
                want_source = false;
                at_seen = false;
                yyerrok;
          }
- #line 1924 "awkgram.c" /* yacc.c:1646  */
 -#line 1911 "awkgram.c" /* yacc.c:1646  */
++#line 1923 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 11:
- #line 259 "awkgram.y" /* yacc.c:1646  */
 -#line 246 "awkgram.y" /* yacc.c:1646  */
++#line 258 "awkgram.y" /* yacc.c:1646  */
      {
                want_source = false;
                at_seen = false;
                yyerrok;
          }
- #line 1934 "awkgram.c" /* yacc.c:1646  */
 -#line 1921 "awkgram.c" /* yacc.c:1646  */
++#line 1933 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 12:
- #line 268 "awkgram.y" /* yacc.c:1646  */
 -#line 255 "awkgram.y" /* yacc.c:1646  */
++#line 267 "awkgram.y" /* yacc.c:1646  */
      {
                if (include_source((yyvsp[0])) < 0)
                        YYABORT;
@@@ -1942,23 -1929,23 +1941,23 @@@
                bcfree((yyvsp[0]));
                (yyval) = NULL;
          }
- #line 1946 "awkgram.c" /* yacc.c:1646  */
 -#line 1933 "awkgram.c" /* yacc.c:1646  */
++#line 1945 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 13:
- #line 276 "awkgram.y" /* yacc.c:1646  */
 -#line 263 "awkgram.y" /* yacc.c:1646  */
++#line 275 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 1952 "awkgram.c" /* yacc.c:1646  */
 -#line 1939 "awkgram.c" /* yacc.c:1646  */
++#line 1951 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 14:
- #line 278 "awkgram.y" /* yacc.c:1646  */
 -#line 265 "awkgram.y" /* yacc.c:1646  */
++#line 277 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 1958 "awkgram.c" /* yacc.c:1646  */
 -#line 1945 "awkgram.c" /* yacc.c:1646  */
++#line 1957 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 15:
- #line 283 "awkgram.y" /* yacc.c:1646  */
 -#line 270 "awkgram.y" /* yacc.c:1646  */
++#line 282 "awkgram.y" /* yacc.c:1646  */
      {
                if (load_library((yyvsp[0])) < 0)
                        YYABORT;
@@@ -1966,49 -1953,35 +1965,49 @@@
                bcfree((yyvsp[0]));
                (yyval) = NULL;
          }
- #line 1970 "awkgram.c" /* yacc.c:1646  */
 -#line 1957 "awkgram.c" /* yacc.c:1646  */
++#line 1969 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 16:
- #line 291 "awkgram.y" /* yacc.c:1646  */
 -#line 278 "awkgram.y" /* yacc.c:1646  */
++#line 290 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 1976 "awkgram.c" /* yacc.c:1646  */
 -#line 1963 "awkgram.c" /* yacc.c:1646  */
++#line 1975 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 17:
- #line 293 "awkgram.y" /* yacc.c:1646  */
 -#line 280 "awkgram.y" /* yacc.c:1646  */
++#line 292 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 1982 "awkgram.c" /* yacc.c:1646  */
 -#line 1969 "awkgram.c" /* yacc.c:1646  */
++#line 1981 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 18:
- #line 298 "awkgram.y" /* yacc.c:1646  */
 -#line 285 "awkgram.y" /* yacc.c:1646  */
 -    { (yyval) = NULL; rule = Rule; }
 -#line 1975 "awkgram.c" /* yacc.c:1646  */
++#line 297 "awkgram.y" /* yacc.c:1646  */
 +    {
 +              rule = Rule;
 +              if (comment != NULL) {
 +                      (yyval) = list_create(comment);
 +                      comment = NULL;
 +              } else
 +                      (yyval) = NULL;
 +        }
- #line 1995 "awkgram.c" /* yacc.c:1646  */
++#line 1994 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 19:
- #line 307 "awkgram.y" /* yacc.c:1646  */
 -#line 287 "awkgram.y" /* yacc.c:1646  */
 -    { (yyval) = (yyvsp[0]); rule = Rule; }
 -#line 1981 "awkgram.c" /* yacc.c:1646  */
++#line 306 "awkgram.y" /* yacc.c:1646  */
 +    {
 +              rule = Rule;
 +              if (comment != NULL) {
 +                      (yyval) = list_prepend((yyvsp[0]), comment);
 +                      comment = NULL;
 +              } else
 +                      (yyval) = (yyvsp[0]);
 +        }
- #line 2008 "awkgram.c" /* yacc.c:1646  */
++#line 2007 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 20:
- #line 317 "awkgram.y" /* yacc.c:1646  */
 -#line 289 "awkgram.y" /* yacc.c:1646  */
++#line 316 "awkgram.y" /* yacc.c:1646  */
      {
                INSTRUCTION *tp;
  
@@@ -2031,139 -2004,107 +2030,139 @@@
                        ((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 2042 "awkgram.c" /* yacc.c:1646  */
 -#line 2011 "awkgram.c" /* yacc.c:1646  */
++#line 2041 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 21:
- #line 347 "awkgram.y" /* yacc.c:1646  */
 -#line 315 "awkgram.y" /* yacc.c:1646  */
++#line 346 "awkgram.y" /* yacc.c:1646  */
      {
                static int begin_seen = 0;
 +
 +              func_first = false;
                if (do_lint_old && ++begin_seen == 2)
                        warning_ln((yyvsp[0])->source_line,
                                _("old awk does not support multiple `BEGIN' or 
`END' rules"));
  
                (yyvsp[0])->in_rule = rule = BEGIN;
                (yyvsp[0])->source_file = source;
 +              check_comment();
                (yyval) = (yyvsp[0]);
          }
- #line 2060 "awkgram.c" /* yacc.c:1646  */
 -#line 2026 "awkgram.c" /* yacc.c:1646  */
++#line 2059 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 22:
- #line 361 "awkgram.y" /* yacc.c:1646  */
 -#line 326 "awkgram.y" /* yacc.c:1646  */
++#line 360 "awkgram.y" /* yacc.c:1646  */
      {
                static int end_seen = 0;
 +
 +              func_first = false;
                if (do_lint_old && ++end_seen == 2)
                        warning_ln((yyvsp[0])->source_line,
                                _("old awk does not support multiple `BEGIN' or 
`END' rules"));
  
                (yyvsp[0])->in_rule = rule = END;
                (yyvsp[0])->source_file = source;
 +              check_comment();
                (yyval) = (yyvsp[0]);
          }
- #line 2078 "awkgram.c" /* yacc.c:1646  */
 -#line 2041 "awkgram.c" /* yacc.c:1646  */
++#line 2077 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 23:
- #line 375 "awkgram.y" /* yacc.c:1646  */
 -#line 337 "awkgram.y" /* yacc.c:1646  */
++#line 374 "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 2090 "awkgram.c" /* yacc.c:1646  */
 -#line 2051 "awkgram.c" /* yacc.c:1646  */
++#line 2089 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 24:
- #line 383 "awkgram.y" /* yacc.c:1646  */
 -#line 343 "awkgram.y" /* yacc.c:1646  */
++#line 382 "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 2102 "awkgram.c" /* yacc.c:1646  */
 -#line 2061 "awkgram.c" /* yacc.c:1646  */
++#line 2101 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 25:
- #line 394 "awkgram.y" /* yacc.c:1646  */
 -#line 352 "awkgram.y" /* yacc.c:1646  */
++#line 393 "awkgram.y" /* yacc.c:1646  */
      {
 +              INSTRUCTION *ip;
                if ((yyvsp[-3]) == NULL)
 -                      (yyval) = list_create(instruction(Op_no_op));
 +                      ip = list_create(instruction(Op_no_op));
                else
 -                      (yyval) = (yyvsp[-3]);
 +                      ip = (yyvsp[-3]);
 +              (yyval) = ip;
          }
- #line 2115 "awkgram.c" /* yacc.c:1646  */
 -#line 2072 "awkgram.c" /* yacc.c:1646  */
++#line 2114 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 26:
- #line 406 "awkgram.y" /* yacc.c:1646  */
 -#line 362 "awkgram.y" /* yacc.c:1646  */
++#line 405 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 2121 "awkgram.c" /* yacc.c:1646  */
 -#line 2078 "awkgram.c" /* yacc.c:1646  */
++#line 2120 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 27:
- #line 408 "awkgram.y" /* yacc.c:1646  */
 -#line 364 "awkgram.y" /* yacc.c:1646  */
++#line 407 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 2127 "awkgram.c" /* yacc.c:1646  */
 -#line 2084 "awkgram.c" /* yacc.c:1646  */
++#line 2126 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 28:
- #line 410 "awkgram.y" /* yacc.c:1646  */
 -#line 366 "awkgram.y" /* yacc.c:1646  */
++#line 409 "awkgram.y" /* yacc.c:1646  */
      {
                yyerror(_("`%s' is a built-in function, it cannot be 
redefined"),
                                        tokstart);
                YYABORT;
          }
- #line 2137 "awkgram.c" /* yacc.c:1646  */
 -#line 2094 "awkgram.c" /* yacc.c:1646  */
++#line 2136 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 29:
- #line 416 "awkgram.y" /* yacc.c:1646  */
 -#line 372 "awkgram.y" /* yacc.c:1646  */
++#line 415 "awkgram.y" /* yacc.c:1646  */
      {
                (yyval) = (yyvsp[0]);
                at_seen = false;
          }
- #line 2146 "awkgram.c" /* yacc.c:1646  */
 -#line 2103 "awkgram.c" /* yacc.c:1646  */
++#line 2145 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 32:
- #line 429 "awkgram.y" /* yacc.c:1646  */
 -#line 385 "awkgram.y" /* yacc.c:1646  */
++#line 428 "awkgram.y" /* yacc.c:1646  */
      {
 +              /*
 +               *  treat any comments between BOF and the first function
 +               *  definition (with no intervening BEGIN etc block) as
 +               *  program comments.  Special kludge: iff there are more
 +               *  than one such comments, treat the last as a function
 +               *  comment.
 +               */
 +              if (comment != NULL && func_first
 +                  && strstr(comment->memory->stptr, "\n\n") != NULL)
 +                      split_comment();
 +              /* save any other pre-function comment as function comment  */
 +              if (comment != NULL) {
 +                      function_comment = comment;
 +                      comment = NULL;
 +              }
 +              func_first = false;
                (yyvsp[-5])->source_file = source;
                if (install_function((yyvsp[-4])->lextok, (yyvsp[-5]), 
(yyvsp[-2])) < 0)
                        YYABORT;
@@@ -2173,17 -2114,17 +2172,17 @@@
                /* $4 already free'd in install_function */
                (yyval) = (yyvsp[-5]);
          }
- #line 2177 "awkgram.c" /* yacc.c:1646  */
 -#line 2118 "awkgram.c" /* yacc.c:1646  */
++#line 2176 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 33:
- #line 463 "awkgram.y" /* yacc.c:1646  */
 -#line 403 "awkgram.y" /* yacc.c:1646  */
++#line 462 "awkgram.y" /* yacc.c:1646  */
      { want_regexp = true; }
- #line 2183 "awkgram.c" /* yacc.c:1646  */
 -#line 2124 "awkgram.c" /* yacc.c:1646  */
++#line 2182 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 34:
- #line 465 "awkgram.y" /* yacc.c:1646  */
 -#line 405 "awkgram.y" /* yacc.c:1646  */
++#line 464 "awkgram.y" /* yacc.c:1646  */
      {
                  NODE *n, *exp;
                  char *re;
@@@ -2212,89 -2153,69 +2211,89 @@@
                  (yyval)->opcode = Op_match_rec;
                  (yyval)->memory = n;
                }
- #line 2216 "awkgram.c" /* yacc.c:1646  */
 -#line 2157 "awkgram.c" /* yacc.c:1646  */
++#line 2215 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 35:
- #line 497 "awkgram.y" /* yacc.c:1646  */
 -#line 437 "awkgram.y" /* yacc.c:1646  */
++#line 496 "awkgram.y" /* yacc.c:1646  */
      { bcfree((yyvsp[0])); }
- #line 2222 "awkgram.c" /* yacc.c:1646  */
 -#line 2163 "awkgram.c" /* yacc.c:1646  */
++#line 2221 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 37:
- #line 503 "awkgram.y" /* yacc.c:1646  */
 -#line 443 "awkgram.y" /* yacc.c:1646  */
 -    { (yyval) = NULL; }
 -#line 2169 "awkgram.c" /* yacc.c:1646  */
++#line 502 "awkgram.y" /* yacc.c:1646  */
 +    {
 +              if (comment != NULL) {
 +                      (yyval) = list_create(comment);
 +                      comment = NULL;
 +              } else (yyval) = NULL;
 +        }
- #line 2233 "awkgram.c" /* yacc.c:1646  */
++#line 2232 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 38:
- #line 510 "awkgram.y" /* yacc.c:1646  */
 -#line 445 "awkgram.y" /* yacc.c:1646  */
++#line 509 "awkgram.y" /* yacc.c:1646  */
      {
 -              if ((yyvsp[0]) == NULL)
 -                      (yyval) = (yyvsp[-1]);
 -              else {
 +              if ((yyvsp[0]) == NULL) {
 +                      if (comment == NULL)
 +                              (yyval) = (yyvsp[-1]);
 +                      else {
 +                              (yyval) = list_append((yyvsp[-1]), comment);
 +                              comment = NULL;
 +                      }
 +              } else {
                        add_lint((yyvsp[0]), LINT_no_effect);
 -                      if ((yyvsp[-1]) == NULL)
 -                              (yyval) = (yyvsp[0]);
 -                      else
 +                      if ((yyvsp[-1]) == NULL) {
 +                              if (comment == NULL)
 +                                      (yyval) = (yyvsp[0]);
 +                              else {
 +                                      (yyval) = list_append((yyvsp[0]), 
comment);
 +                                      comment = NULL;
 +                              }
 +                      } else {
 +                              if (comment != NULL) {
 +                                      list_append((yyvsp[0]), comment);
 +                                      comment = NULL;
 +                              }
                                (yyval) = list_merge((yyvsp[-1]), (yyvsp[0]));
 +                      }
                }
 -          yyerrok;
 +              yyerrok;
          }
- #line 2265 "awkgram.c" /* yacc.c:1646  */
 -#line 2186 "awkgram.c" /* yacc.c:1646  */
++#line 2264 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 39:
- #line 538 "awkgram.y" /* yacc.c:1646  */
 -#line 458 "awkgram.y" /* yacc.c:1646  */
++#line 537 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 2271 "awkgram.c" /* yacc.c:1646  */
 -#line 2192 "awkgram.c" /* yacc.c:1646  */
++#line 2270 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 42:
- #line 548 "awkgram.y" /* yacc.c:1646  */
 -#line 468 "awkgram.y" /* yacc.c:1646  */
++#line 547 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 2277 "awkgram.c" /* yacc.c:1646  */
 -#line 2198 "awkgram.c" /* yacc.c:1646  */
++#line 2276 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 43:
- #line 550 "awkgram.y" /* yacc.c:1646  */
 -#line 470 "awkgram.y" /* yacc.c:1646  */
++#line 549 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[-1]); }
- #line 2283 "awkgram.c" /* yacc.c:1646  */
 -#line 2204 "awkgram.c" /* yacc.c:1646  */
++#line 2282 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 44:
- #line 552 "awkgram.y" /* yacc.c:1646  */
 -#line 472 "awkgram.y" /* yacc.c:1646  */
++#line 551 "awkgram.y" /* yacc.c:1646  */
      {
                if (do_pretty_print)
                        (yyval) = list_prepend((yyvsp[0]), 
instruction(Op_exec_count));
                else
                        (yyval) = (yyvsp[0]);
          }
- #line 2294 "awkgram.c" /* yacc.c:1646  */
 -#line 2215 "awkgram.c" /* yacc.c:1646  */
++#line 2293 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 45:
- #line 559 "awkgram.y" /* yacc.c:1646  */
 -#line 479 "awkgram.y" /* yacc.c:1646  */
++#line 558 "awkgram.y" /* yacc.c:1646  */
      {
                INSTRUCTION *dflt, *curr = NULL, *cexp, *cstmt;
                INSTRUCTION *ip, *nextc, *tbreak;
@@@ -2384,11 -2305,11 +2383,11 @@@
                break_allowed--;                        
                fix_break_continue(ip, tbreak, NULL);
          }
- #line 2388 "awkgram.c" /* yacc.c:1646  */
 -#line 2309 "awkgram.c" /* yacc.c:1646  */
++#line 2387 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 46:
- #line 649 "awkgram.y" /* yacc.c:1646  */
 -#line 569 "awkgram.y" /* yacc.c:1646  */
++#line 648 "awkgram.y" /* yacc.c:1646  */
      { 
                /*
                 *    -----------------
@@@ -2430,11 -2351,11 +2429,11 @@@
                continue_allowed--;
                fix_break_continue(ip, tbreak, tcont);
          }
- #line 2434 "awkgram.c" /* yacc.c:1646  */
 -#line 2355 "awkgram.c" /* yacc.c:1646  */
++#line 2433 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 47:
- #line 691 "awkgram.y" /* yacc.c:1646  */
 -#line 611 "awkgram.y" /* yacc.c:1646  */
++#line 690 "awkgram.y" /* yacc.c:1646  */
      {
                /*
                 *    -----------------
@@@ -2476,11 -2397,11 +2475,11 @@@
                } /* else
                        $1 and $4 are NULLs */
          }
- #line 2480 "awkgram.c" /* yacc.c:1646  */
 -#line 2401 "awkgram.c" /* yacc.c:1646  */
++#line 2479 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 48:
- #line 733 "awkgram.y" /* yacc.c:1646  */
 -#line 653 "awkgram.y" /* yacc.c:1646  */
++#line 732 "awkgram.y" /* yacc.c:1646  */
      {
                INSTRUCTION *ip;
                char *var_name = (yyvsp[-5])->lextok;
@@@ -2593,44 -2514,44 +2592,44 @@@ regular_loop
                break_allowed--;
                continue_allowed--;
          }
- #line 2597 "awkgram.c" /* yacc.c:1646  */
 -#line 2518 "awkgram.c" /* yacc.c:1646  */
++#line 2596 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 49:
- #line 846 "awkgram.y" /* yacc.c:1646  */
 -#line 766 "awkgram.y" /* yacc.c:1646  */
++#line 845 "awkgram.y" /* yacc.c:1646  */
      {
                (yyval) = mk_for_loop((yyvsp[-11]), (yyvsp[-9]), (yyvsp[-6]), 
(yyvsp[-3]), (yyvsp[0]));
  
                break_allowed--;
                continue_allowed--;
          }
- #line 2608 "awkgram.c" /* yacc.c:1646  */
 -#line 2529 "awkgram.c" /* yacc.c:1646  */
++#line 2607 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 50:
- #line 853 "awkgram.y" /* yacc.c:1646  */
 -#line 773 "awkgram.y" /* yacc.c:1646  */
++#line 852 "awkgram.y" /* yacc.c:1646  */
      {
                (yyval) = mk_for_loop((yyvsp[-10]), (yyvsp[-8]), (INSTRUCTION 
*) NULL, (yyvsp[-3]), (yyvsp[0]));
  
                break_allowed--;
                continue_allowed--;
          }
- #line 2619 "awkgram.c" /* yacc.c:1646  */
 -#line 2540 "awkgram.c" /* yacc.c:1646  */
++#line 2618 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 51:
- #line 860 "awkgram.y" /* yacc.c:1646  */
 -#line 780 "awkgram.y" /* yacc.c:1646  */
++#line 859 "awkgram.y" /* yacc.c:1646  */
      {
                if (do_pretty_print)
                        (yyval) = list_prepend((yyvsp[0]), 
instruction(Op_exec_count));
                else
                        (yyval) = (yyvsp[0]);
          }
- #line 2630 "awkgram.c" /* yacc.c:1646  */
 -#line 2551 "awkgram.c" /* yacc.c:1646  */
++#line 2629 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 52:
- #line 870 "awkgram.y" /* yacc.c:1646  */
 -#line 790 "awkgram.y" /* yacc.c:1646  */
++#line 869 "awkgram.y" /* yacc.c:1646  */
      { 
                if (! break_allowed)
                        error_ln((yyvsp[-1])->source_line,
@@@ -2639,11 -2560,11 +2638,11 @@@
                (yyval) = list_create((yyvsp[-1]));
  
          }
- #line 2643 "awkgram.c" /* yacc.c:1646  */
 -#line 2564 "awkgram.c" /* yacc.c:1646  */
++#line 2642 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 53:
- #line 879 "awkgram.y" /* yacc.c:1646  */
 -#line 799 "awkgram.y" /* yacc.c:1646  */
++#line 878 "awkgram.y" /* yacc.c:1646  */
      {
                if (! continue_allowed)
                        error_ln((yyvsp[-1])->source_line,
@@@ -2652,11 -2573,11 +2651,11 @@@
                (yyval) = list_create((yyvsp[-1]));
  
          }
- #line 2656 "awkgram.c" /* yacc.c:1646  */
 -#line 2577 "awkgram.c" /* yacc.c:1646  */
++#line 2655 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 54:
- #line 888 "awkgram.y" /* yacc.c:1646  */
 -#line 808 "awkgram.y" /* yacc.c:1646  */
++#line 887 "awkgram.y" /* yacc.c:1646  */
      {
                /* if inside function (rule = 0), resolve context at run-time */
                if (rule && rule != Rule)
@@@ -2665,11 -2586,11 +2664,11 @@@
                (yyvsp[-1])->target_jmp = ip_rec;
                (yyval) = list_create((yyvsp[-1]));
          }
- #line 2669 "awkgram.c" /* yacc.c:1646  */
 -#line 2590 "awkgram.c" /* yacc.c:1646  */
++#line 2668 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 55:
- #line 897 "awkgram.y" /* yacc.c:1646  */
 -#line 817 "awkgram.y" /* yacc.c:1646  */
++#line 896 "awkgram.y" /* yacc.c:1646  */
      {
                /* if inside function (rule = 0), resolve context at run-time */
                if (rule == BEGIN || rule == END || rule == ENDFILE)
@@@ -2680,11 -2601,11 +2679,11 @@@
                (yyvsp[-1])->target_endfile = ip_endfile;
                (yyval) = list_create((yyvsp[-1]));
          }
- #line 2684 "awkgram.c" /* yacc.c:1646  */
 -#line 2605 "awkgram.c" /* yacc.c:1646  */
++#line 2683 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 56:
- #line 908 "awkgram.y" /* yacc.c:1646  */
 -#line 828 "awkgram.y" /* yacc.c:1646  */
++#line 907 "awkgram.y" /* yacc.c:1646  */
      {
                /* Initialize the two possible jump targets, the actual target
                 * is resolved at run-time. 
@@@ -2699,20 -2620,20 +2698,20 @@@
                } else
                        (yyval) = list_append((yyvsp[-1]), (yyvsp[-2]));
          }
- #line 2703 "awkgram.c" /* yacc.c:1646  */
 -#line 2624 "awkgram.c" /* yacc.c:1646  */
++#line 2702 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 57:
- #line 923 "awkgram.y" /* yacc.c:1646  */
 -#line 843 "awkgram.y" /* yacc.c:1646  */
++#line 922 "awkgram.y" /* yacc.c:1646  */
      {
                if (! in_function)
                        yyerror(_("`return' used outside function context"));
          }
- #line 2712 "awkgram.c" /* yacc.c:1646  */
 -#line 2633 "awkgram.c" /* yacc.c:1646  */
++#line 2711 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 58:
- #line 926 "awkgram.y" /* yacc.c:1646  */
 -#line 846 "awkgram.y" /* yacc.c:1646  */
++#line 925 "awkgram.y" /* yacc.c:1646  */
      {
                if ((yyvsp[-1]) == NULL) {
                        (yyval) = list_create((yyvsp[-3]));
@@@ -2733,17 -2654,17 +2732,17 @@@
                        (yyval) = list_append((yyvsp[-1]), (yyvsp[-3]));
                }
          }
- #line 2737 "awkgram.c" /* yacc.c:1646  */
 -#line 2658 "awkgram.c" /* yacc.c:1646  */
++#line 2736 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 60:
- #line 958 "awkgram.y" /* yacc.c:1646  */
 -#line 878 "awkgram.y" /* yacc.c:1646  */
++#line 957 "awkgram.y" /* yacc.c:1646  */
      { in_print = true; in_parens = 0; }
- #line 2743 "awkgram.c" /* yacc.c:1646  */
 -#line 2664 "awkgram.c" /* yacc.c:1646  */
++#line 2742 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 61:
- #line 959 "awkgram.y" /* yacc.c:1646  */
 -#line 879 "awkgram.y" /* yacc.c:1646  */
++#line 958 "awkgram.y" /* yacc.c:1646  */
      {
                /*
                 * Optimization: plain `print' has no expression list, so $3 is 
null.
@@@ -2840,17 -2761,17 +2839,17 @@@ regular_print
                        }
                }
          }
- #line 2844 "awkgram.c" /* yacc.c:1646  */
 -#line 2765 "awkgram.c" /* yacc.c:1646  */
++#line 2843 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 62:
- #line 1056 "awkgram.y" /* yacc.c:1646  */
 -#line 976 "awkgram.y" /* yacc.c:1646  */
++#line 1055 "awkgram.y" /* yacc.c:1646  */
      { sub_counter = 0; }
- #line 2850 "awkgram.c" /* yacc.c:1646  */
 -#line 2771 "awkgram.c" /* yacc.c:1646  */
++#line 2849 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 63:
- #line 1057 "awkgram.y" /* yacc.c:1646  */
 -#line 977 "awkgram.y" /* yacc.c:1646  */
++#line 1056 "awkgram.y" /* yacc.c:1646  */
      {
                char *arr = (yyvsp[-2])->lextok;
  
@@@ -2883,11 -2804,11 +2882,11 @@@
                        (yyval) = list_append(list_append((yyvsp[0]), 
(yyvsp[-2])), (yyvsp[-3]));
                }
          }
- #line 2887 "awkgram.c" /* yacc.c:1646  */
 -#line 2808 "awkgram.c" /* yacc.c:1646  */
++#line 2886 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 64:
- #line 1094 "awkgram.y" /* yacc.c:1646  */
 -#line 1014 "awkgram.y" /* yacc.c:1646  */
++#line 1093 "awkgram.y" /* yacc.c:1646  */
      {
                static bool warned = false;
                char *arr = (yyvsp[-1])->lextok;
@@@ -2913,52 -2834,52 +2912,52 @@@
                                fatal(_("`delete' is not allowed with 
FUNCTAB"));
                }
          }
- #line 2917 "awkgram.c" /* yacc.c:1646  */
 -#line 2838 "awkgram.c" /* yacc.c:1646  */
++#line 2916 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 65:
- #line 1120 "awkgram.y" /* yacc.c:1646  */
 -#line 1040 "awkgram.y" /* yacc.c:1646  */
++#line 1119 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = optimize_assignment((yyvsp[0])); }
- #line 2923 "awkgram.c" /* yacc.c:1646  */
 -#line 2844 "awkgram.c" /* yacc.c:1646  */
++#line 2922 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 66:
- #line 1125 "awkgram.y" /* yacc.c:1646  */
 -#line 1045 "awkgram.y" /* yacc.c:1646  */
++#line 1124 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 2929 "awkgram.c" /* yacc.c:1646  */
 -#line 2850 "awkgram.c" /* yacc.c:1646  */
++#line 2928 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 67:
- #line 1127 "awkgram.y" /* yacc.c:1646  */
 -#line 1047 "awkgram.y" /* yacc.c:1646  */
++#line 1126 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 2935 "awkgram.c" /* yacc.c:1646  */
 -#line 2856 "awkgram.c" /* yacc.c:1646  */
++#line 2934 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 68:
- #line 1132 "awkgram.y" /* yacc.c:1646  */
 -#line 1052 "awkgram.y" /* yacc.c:1646  */
++#line 1131 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 2941 "awkgram.c" /* yacc.c:1646  */
 -#line 2862 "awkgram.c" /* yacc.c:1646  */
++#line 2940 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 69:
- #line 1134 "awkgram.y" /* yacc.c:1646  */
 -#line 1054 "awkgram.y" /* yacc.c:1646  */
++#line 1133 "awkgram.y" /* yacc.c:1646  */
      {
                if ((yyvsp[-1]) == NULL)
                        (yyval) = list_create((yyvsp[0]));
                else
                        (yyval) = list_prepend((yyvsp[-1]), (yyvsp[0]));
          }
- #line 2952 "awkgram.c" /* yacc.c:1646  */
 -#line 2873 "awkgram.c" /* yacc.c:1646  */
++#line 2951 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 70:
- #line 1141 "awkgram.y" /* yacc.c:1646  */
 -#line 1061 "awkgram.y" /* yacc.c:1646  */
++#line 1140 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 2958 "awkgram.c" /* yacc.c:1646  */
 -#line 2879 "awkgram.c" /* yacc.c:1646  */
++#line 2957 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 71:
- #line 1146 "awkgram.y" /* yacc.c:1646  */
 -#line 1066 "awkgram.y" /* yacc.c:1646  */
++#line 1145 "awkgram.y" /* yacc.c:1646  */
      {
                INSTRUCTION *casestmt = (yyvsp[0]);
                if ((yyvsp[0]) == NULL)
@@@ -2970,11 -2891,11 +2969,11 @@@
                bcfree((yyvsp[-2]));
                (yyval) = (yyvsp[-4]);
          }
- #line 2974 "awkgram.c" /* yacc.c:1646  */
 -#line 2895 "awkgram.c" /* yacc.c:1646  */
++#line 2973 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 72:
- #line 1158 "awkgram.y" /* yacc.c:1646  */
 -#line 1078 "awkgram.y" /* yacc.c:1646  */
++#line 1157 "awkgram.y" /* yacc.c:1646  */
      {
                INSTRUCTION *casestmt = (yyvsp[0]);
                if ((yyvsp[0]) == NULL)
@@@ -2985,17 -2906,17 +2984,17 @@@
                (yyvsp[-3])->case_stmt = casestmt;
                (yyval) = (yyvsp[-3]);
          }
- #line 2989 "awkgram.c" /* yacc.c:1646  */
 -#line 2910 "awkgram.c" /* yacc.c:1646  */
++#line 2988 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 73:
- #line 1172 "awkgram.y" /* yacc.c:1646  */
 -#line 1092 "awkgram.y" /* yacc.c:1646  */
++#line 1171 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 2995 "awkgram.c" /* yacc.c:1646  */
 -#line 2916 "awkgram.c" /* yacc.c:1646  */
++#line 2994 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 74:
- #line 1174 "awkgram.y" /* yacc.c:1646  */
 -#line 1094 "awkgram.y" /* yacc.c:1646  */
++#line 1173 "awkgram.y" /* yacc.c:1646  */
      { 
                NODE *n = (yyvsp[0])->memory;
                (void) force_number(n);
@@@ -3003,71 -2924,71 +3002,71 @@@
                bcfree((yyvsp[-1]));
                (yyval) = (yyvsp[0]);
          }
- #line 3007 "awkgram.c" /* yacc.c:1646  */
 -#line 2928 "awkgram.c" /* yacc.c:1646  */
++#line 3006 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 75:
- #line 1182 "awkgram.y" /* yacc.c:1646  */
 -#line 1102 "awkgram.y" /* yacc.c:1646  */
++#line 1181 "awkgram.y" /* yacc.c:1646  */
      {
                bcfree((yyvsp[-1]));
                (yyval) = (yyvsp[0]);
          }
- #line 3016 "awkgram.c" /* yacc.c:1646  */
 -#line 2937 "awkgram.c" /* yacc.c:1646  */
++#line 3015 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 76:
- #line 1187 "awkgram.y" /* yacc.c:1646  */
 -#line 1107 "awkgram.y" /* yacc.c:1646  */
++#line 1186 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3022 "awkgram.c" /* yacc.c:1646  */
 -#line 2943 "awkgram.c" /* yacc.c:1646  */
++#line 3021 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 77:
- #line 1189 "awkgram.y" /* yacc.c:1646  */
 -#line 1109 "awkgram.y" /* yacc.c:1646  */
++#line 1188 "awkgram.y" /* yacc.c:1646  */
      {
                (yyvsp[0])->opcode = Op_push_re;
                (yyval) = (yyvsp[0]);
          }
- #line 3031 "awkgram.c" /* yacc.c:1646  */
 -#line 2952 "awkgram.c" /* yacc.c:1646  */
++#line 3030 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 78:
- #line 1197 "awkgram.y" /* yacc.c:1646  */
 -#line 1117 "awkgram.y" /* yacc.c:1646  */
++#line 1196 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3037 "awkgram.c" /* yacc.c:1646  */
 -#line 2958 "awkgram.c" /* yacc.c:1646  */
++#line 3036 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 79:
- #line 1199 "awkgram.y" /* yacc.c:1646  */
 -#line 1119 "awkgram.y" /* yacc.c:1646  */
++#line 1198 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3043 "awkgram.c" /* yacc.c:1646  */
 -#line 2964 "awkgram.c" /* yacc.c:1646  */
++#line 3042 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 81:
- #line 1209 "awkgram.y" /* yacc.c:1646  */
 -#line 1129 "awkgram.y" /* yacc.c:1646  */
++#line 1208 "awkgram.y" /* yacc.c:1646  */
      {
                (yyval) = (yyvsp[-1]);
          }
- #line 3051 "awkgram.c" /* yacc.c:1646  */
 -#line 2972 "awkgram.c" /* yacc.c:1646  */
++#line 3050 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 82:
- #line 1216 "awkgram.y" /* yacc.c:1646  */
 -#line 1136 "awkgram.y" /* yacc.c:1646  */
++#line 1215 "awkgram.y" /* yacc.c:1646  */
      {
                in_print = false;
                in_parens = 0;
                (yyval) = NULL;
          }
- #line 3061 "awkgram.c" /* yacc.c:1646  */
 -#line 2982 "awkgram.c" /* yacc.c:1646  */
++#line 3060 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 83:
- #line 1221 "awkgram.y" /* yacc.c:1646  */
 -#line 1141 "awkgram.y" /* yacc.c:1646  */
++#line 1220 "awkgram.y" /* yacc.c:1646  */
      { in_print = false; in_parens = 0; }
- #line 3067 "awkgram.c" /* yacc.c:1646  */
 -#line 2988 "awkgram.c" /* yacc.c:1646  */
++#line 3066 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 84:
- #line 1222 "awkgram.y" /* yacc.c:1646  */
 -#line 1142 "awkgram.y" /* yacc.c:1646  */
++#line 1221 "awkgram.y" /* yacc.c:1646  */
      {
                if ((yyvsp[-2])->redir_type == redirect_twoway
                        && (yyvsp[0])->lasti->opcode == Op_K_getline_redir
@@@ -3075,136 -2996,136 +3074,136 @@@
                        yyerror(_("multistage two-way pipelines don't work"));
                (yyval) = list_prepend((yyvsp[0]), (yyvsp[-2]));
          }
- #line 3079 "awkgram.c" /* yacc.c:1646  */
 -#line 3000 "awkgram.c" /* yacc.c:1646  */
++#line 3078 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 85:
- #line 1233 "awkgram.y" /* yacc.c:1646  */
 -#line 1153 "awkgram.y" /* yacc.c:1646  */
++#line 1232 "awkgram.y" /* yacc.c:1646  */
      {
                (yyval) = mk_condition((yyvsp[-3]), (yyvsp[-5]), (yyvsp[0]), 
NULL, NULL);
          }
- #line 3087 "awkgram.c" /* yacc.c:1646  */
 -#line 3008 "awkgram.c" /* yacc.c:1646  */
++#line 3086 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 86:
- #line 1238 "awkgram.y" /* yacc.c:1646  */
 -#line 1158 "awkgram.y" /* yacc.c:1646  */
++#line 1237 "awkgram.y" /* yacc.c:1646  */
      {
                (yyval) = mk_condition((yyvsp[-6]), (yyvsp[-8]), (yyvsp[-3]), 
(yyvsp[-2]), (yyvsp[0]));
          }
- #line 3095 "awkgram.c" /* yacc.c:1646  */
 -#line 3016 "awkgram.c" /* yacc.c:1646  */
++#line 3094 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 91:
- #line 1255 "awkgram.y" /* yacc.c:1646  */
 -#line 1175 "awkgram.y" /* yacc.c:1646  */
++#line 1254 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 3101 "awkgram.c" /* yacc.c:1646  */
 -#line 3022 "awkgram.c" /* yacc.c:1646  */
++#line 3100 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 92:
- #line 1257 "awkgram.y" /* yacc.c:1646  */
 -#line 1177 "awkgram.y" /* yacc.c:1646  */
++#line 1256 "awkgram.y" /* yacc.c:1646  */
      {
                bcfree((yyvsp[-1]));
                (yyval) = (yyvsp[0]);
          }
- #line 3110 "awkgram.c" /* yacc.c:1646  */
 -#line 3031 "awkgram.c" /* yacc.c:1646  */
++#line 3109 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 93:
- #line 1265 "awkgram.y" /* yacc.c:1646  */
 -#line 1185 "awkgram.y" /* yacc.c:1646  */
++#line 1264 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 3116 "awkgram.c" /* yacc.c:1646  */
 -#line 3037 "awkgram.c" /* yacc.c:1646  */
++#line 3115 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 94:
- #line 1267 "awkgram.y" /* yacc.c:1646  */
 -#line 1187 "awkgram.y" /* yacc.c:1646  */
 -    { (yyval) = (yyvsp[0]) ; }
 -#line 3043 "awkgram.c" /* yacc.c:1646  */
++#line 1266 "awkgram.y" /* yacc.c:1646  */
 +    { (yyval) = (yyvsp[0]); }
- #line 3122 "awkgram.c" /* yacc.c:1646  */
++#line 3121 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 95:
- #line 1272 "awkgram.y" /* yacc.c:1646  */
 -#line 1192 "awkgram.y" /* yacc.c:1646  */
++#line 1271 "awkgram.y" /* yacc.c:1646  */
      {
                (yyvsp[0])->param_count = 0;
                (yyval) = list_create((yyvsp[0]));
          }
- #line 3131 "awkgram.c" /* yacc.c:1646  */
 -#line 3052 "awkgram.c" /* yacc.c:1646  */
++#line 3130 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 96:
- #line 1277 "awkgram.y" /* yacc.c:1646  */
 -#line 1197 "awkgram.y" /* yacc.c:1646  */
++#line 1276 "awkgram.y" /* yacc.c:1646  */
      {
                (yyvsp[0])->param_count =  (yyvsp[-2])->lasti->param_count + 1;
                (yyval) = list_append((yyvsp[-2]), (yyvsp[0]));
                yyerrok;
          }
- #line 3141 "awkgram.c" /* yacc.c:1646  */
 -#line 3062 "awkgram.c" /* yacc.c:1646  */
++#line 3140 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 97:
- #line 1283 "awkgram.y" /* yacc.c:1646  */
 -#line 1203 "awkgram.y" /* yacc.c:1646  */
++#line 1282 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 3147 "awkgram.c" /* yacc.c:1646  */
 -#line 3068 "awkgram.c" /* yacc.c:1646  */
++#line 3146 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 98:
- #line 1285 "awkgram.y" /* yacc.c:1646  */
 -#line 1205 "awkgram.y" /* yacc.c:1646  */
++#line 1284 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[-1]); }
- #line 3153 "awkgram.c" /* yacc.c:1646  */
 -#line 3074 "awkgram.c" /* yacc.c:1646  */
++#line 3152 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 99:
- #line 1287 "awkgram.y" /* yacc.c:1646  */
 -#line 1207 "awkgram.y" /* yacc.c:1646  */
++#line 1286 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[-2]); }
- #line 3159 "awkgram.c" /* yacc.c:1646  */
 -#line 3080 "awkgram.c" /* yacc.c:1646  */
++#line 3158 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 100:
- #line 1293 "awkgram.y" /* yacc.c:1646  */
 -#line 1213 "awkgram.y" /* yacc.c:1646  */
++#line 1292 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 3165 "awkgram.c" /* yacc.c:1646  */
 -#line 3086 "awkgram.c" /* yacc.c:1646  */
++#line 3164 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 101:
- #line 1295 "awkgram.y" /* yacc.c:1646  */
 -#line 1215 "awkgram.y" /* yacc.c:1646  */
++#line 1294 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3171 "awkgram.c" /* yacc.c:1646  */
 -#line 3092 "awkgram.c" /* yacc.c:1646  */
++#line 3170 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 102:
- #line 1300 "awkgram.y" /* yacc.c:1646  */
 -#line 1220 "awkgram.y" /* yacc.c:1646  */
++#line 1299 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 3177 "awkgram.c" /* yacc.c:1646  */
 -#line 3098 "awkgram.c" /* yacc.c:1646  */
++#line 3176 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 103:
- #line 1302 "awkgram.y" /* yacc.c:1646  */
 -#line 1222 "awkgram.y" /* yacc.c:1646  */
++#line 1301 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3183 "awkgram.c" /* yacc.c:1646  */
 -#line 3104 "awkgram.c" /* yacc.c:1646  */
++#line 3182 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 104:
- #line 1307 "awkgram.y" /* yacc.c:1646  */
 -#line 1227 "awkgram.y" /* yacc.c:1646  */
++#line 1306 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = mk_expression_list(NULL, (yyvsp[0])); }
- #line 3189 "awkgram.c" /* yacc.c:1646  */
 -#line 3110 "awkgram.c" /* yacc.c:1646  */
++#line 3188 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 105:
- #line 1309 "awkgram.y" /* yacc.c:1646  */
 -#line 1229 "awkgram.y" /* yacc.c:1646  */
++#line 1308 "awkgram.y" /* yacc.c:1646  */
      {
                (yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
                yyerrok;
          }
- #line 3198 "awkgram.c" /* yacc.c:1646  */
 -#line 3119 "awkgram.c" /* yacc.c:1646  */
++#line 3197 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 106:
- #line 1314 "awkgram.y" /* yacc.c:1646  */
 -#line 1234 "awkgram.y" /* yacc.c:1646  */
++#line 1313 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 3204 "awkgram.c" /* yacc.c:1646  */
 -#line 3125 "awkgram.c" /* yacc.c:1646  */
++#line 3203 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 107:
- #line 1316 "awkgram.y" /* yacc.c:1646  */
 -#line 1236 "awkgram.y" /* yacc.c:1646  */
++#line 1315 "awkgram.y" /* yacc.c:1646  */
      {
                /*
                 * Returning the expression list instead of NULL lets
@@@ -3212,52 -3133,52 +3211,52 @@@
                 */
                (yyval) = (yyvsp[-1]);
          }
- #line 3216 "awkgram.c" /* yacc.c:1646  */
 -#line 3137 "awkgram.c" /* yacc.c:1646  */
++#line 3215 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 108:
- #line 1324 "awkgram.y" /* yacc.c:1646  */
 -#line 1244 "awkgram.y" /* yacc.c:1646  */
++#line 1323 "awkgram.y" /* yacc.c:1646  */
      {
                /* Ditto */
                (yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
          }
- #line 3225 "awkgram.c" /* yacc.c:1646  */
 -#line 3146 "awkgram.c" /* yacc.c:1646  */
++#line 3224 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 109:
- #line 1329 "awkgram.y" /* yacc.c:1646  */
 -#line 1249 "awkgram.y" /* yacc.c:1646  */
++#line 1328 "awkgram.y" /* yacc.c:1646  */
      {
                /* Ditto */
                (yyval) = (yyvsp[-2]);
          }
- #line 3234 "awkgram.c" /* yacc.c:1646  */
 -#line 3155 "awkgram.c" /* yacc.c:1646  */
++#line 3233 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 110:
- #line 1338 "awkgram.y" /* yacc.c:1646  */
 -#line 1258 "awkgram.y" /* yacc.c:1646  */
++#line 1337 "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 3245 "awkgram.c" /* yacc.c:1646  */
 -#line 3166 "awkgram.c" /* yacc.c:1646  */
++#line 3244 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 111:
- #line 1345 "awkgram.y" /* yacc.c:1646  */
 -#line 1265 "awkgram.y" /* yacc.c:1646  */
++#line 1344 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = mk_boolean((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
- #line 3251 "awkgram.c" /* yacc.c:1646  */
 -#line 3172 "awkgram.c" /* yacc.c:1646  */
++#line 3250 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 112:
- #line 1347 "awkgram.y" /* yacc.c:1646  */
 -#line 1267 "awkgram.y" /* yacc.c:1646  */
++#line 1346 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = mk_boolean((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
- #line 3257 "awkgram.c" /* yacc.c:1646  */
 -#line 3178 "awkgram.c" /* yacc.c:1646  */
++#line 3256 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 113:
- #line 1349 "awkgram.y" /* yacc.c:1646  */
 -#line 1269 "awkgram.y" /* yacc.c:1646  */
++#line 1348 "awkgram.y" /* yacc.c:1646  */
      {
                if ((yyvsp[-2])->lasti->opcode == Op_match_rec)
                        warning_ln((yyvsp[-1])->source_line,
@@@ -3273,11 -3194,11 +3272,11 @@@
                        (yyval) = list_append(list_merge((yyvsp[-2]), 
(yyvsp[0])), (yyvsp[-1]));
                }
          }
- #line 3277 "awkgram.c" /* yacc.c:1646  */
 -#line 3198 "awkgram.c" /* yacc.c:1646  */
++#line 3276 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 114:
- #line 1365 "awkgram.y" /* yacc.c:1646  */
 -#line 1285 "awkgram.y" /* yacc.c:1646  */
++#line 1364 "awkgram.y" /* yacc.c:1646  */
      {
                if (do_lint_old)
                        warning_ln((yyvsp[-1])->source_line,
@@@ -3287,91 -3208,91 +3286,91 @@@
                (yyvsp[-1])->expr_count = 1;
                (yyval) = list_append(list_merge((yyvsp[-2]), (yyvsp[0])), 
(yyvsp[-1]));
          }
- #line 3291 "awkgram.c" /* yacc.c:1646  */
 -#line 3212 "awkgram.c" /* yacc.c:1646  */
++#line 3290 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 115:
- #line 1375 "awkgram.y" /* yacc.c:1646  */
 -#line 1295 "awkgram.y" /* yacc.c:1646  */
++#line 1374 "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 3302 "awkgram.c" /* yacc.c:1646  */
 -#line 3223 "awkgram.c" /* yacc.c:1646  */
++#line 3301 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 116:
- #line 1382 "awkgram.y" /* yacc.c:1646  */
 -#line 1302 "awkgram.y" /* yacc.c:1646  */
++#line 1381 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = mk_condition((yyvsp[-4]), (yyvsp[-3]), (yyvsp[-2]), 
(yyvsp[-1]), (yyvsp[0])); }
- #line 3308 "awkgram.c" /* yacc.c:1646  */
 -#line 3229 "awkgram.c" /* yacc.c:1646  */
++#line 3307 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 117:
- #line 1384 "awkgram.y" /* yacc.c:1646  */
 -#line 1304 "awkgram.y" /* yacc.c:1646  */
++#line 1383 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3314 "awkgram.c" /* yacc.c:1646  */
 -#line 3235 "awkgram.c" /* yacc.c:1646  */
++#line 3313 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 118:
- #line 1389 "awkgram.y" /* yacc.c:1646  */
 -#line 1309 "awkgram.y" /* yacc.c:1646  */
++#line 1388 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3320 "awkgram.c" /* yacc.c:1646  */
 -#line 3241 "awkgram.c" /* yacc.c:1646  */
++#line 3319 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 119:
- #line 1391 "awkgram.y" /* yacc.c:1646  */
 -#line 1311 "awkgram.y" /* yacc.c:1646  */
++#line 1390 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3326 "awkgram.c" /* yacc.c:1646  */
 -#line 3247 "awkgram.c" /* yacc.c:1646  */
++#line 3325 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 120:
- #line 1393 "awkgram.y" /* yacc.c:1646  */
 -#line 1313 "awkgram.y" /* yacc.c:1646  */
++#line 1392 "awkgram.y" /* yacc.c:1646  */
      { 
                (yyvsp[0])->opcode = Op_assign_quotient;
                (yyval) = (yyvsp[0]);
          }
- #line 3335 "awkgram.c" /* yacc.c:1646  */
 -#line 3256 "awkgram.c" /* yacc.c:1646  */
++#line 3334 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 121:
- #line 1401 "awkgram.y" /* yacc.c:1646  */
 -#line 1321 "awkgram.y" /* yacc.c:1646  */
++#line 1400 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3341 "awkgram.c" /* yacc.c:1646  */
 -#line 3262 "awkgram.c" /* yacc.c:1646  */
++#line 3340 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 122:
- #line 1403 "awkgram.y" /* yacc.c:1646  */
 -#line 1323 "awkgram.y" /* yacc.c:1646  */
++#line 1402 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3347 "awkgram.c" /* yacc.c:1646  */
 -#line 3268 "awkgram.c" /* yacc.c:1646  */
++#line 3346 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 123:
- #line 1408 "awkgram.y" /* yacc.c:1646  */
 -#line 1328 "awkgram.y" /* yacc.c:1646  */
++#line 1407 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3353 "awkgram.c" /* yacc.c:1646  */
 -#line 3274 "awkgram.c" /* yacc.c:1646  */
++#line 3352 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 124:
- #line 1410 "awkgram.y" /* yacc.c:1646  */
 -#line 1330 "awkgram.y" /* yacc.c:1646  */
++#line 1409 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3359 "awkgram.c" /* yacc.c:1646  */
 -#line 3280 "awkgram.c" /* yacc.c:1646  */
++#line 3358 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 125:
- #line 1415 "awkgram.y" /* yacc.c:1646  */
 -#line 1335 "awkgram.y" /* yacc.c:1646  */
++#line 1414 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3365 "awkgram.c" /* yacc.c:1646  */
 -#line 3286 "awkgram.c" /* yacc.c:1646  */
++#line 3364 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 126:
- #line 1417 "awkgram.y" /* yacc.c:1646  */
 -#line 1337 "awkgram.y" /* yacc.c:1646  */
++#line 1416 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3371 "awkgram.c" /* yacc.c:1646  */
 -#line 3292 "awkgram.c" /* yacc.c:1646  */
++#line 3370 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 127:
- #line 1419 "awkgram.y" /* yacc.c:1646  */
 -#line 1339 "awkgram.y" /* yacc.c:1646  */
++#line 1418 "awkgram.y" /* yacc.c:1646  */
      {
                int count = 2;
                bool is_simple_var = false;
@@@ -3418,47 -3339,47 +3417,47 @@@
                                max_args = count;
                }
          }
- #line 3422 "awkgram.c" /* yacc.c:1646  */
 -#line 3343 "awkgram.c" /* yacc.c:1646  */
++#line 3421 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 129:
- #line 1471 "awkgram.y" /* yacc.c:1646  */
 -#line 1391 "awkgram.y" /* yacc.c:1646  */
++#line 1470 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
- #line 3428 "awkgram.c" /* yacc.c:1646  */
 -#line 3349 "awkgram.c" /* yacc.c:1646  */
++#line 3427 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 130:
- #line 1473 "awkgram.y" /* yacc.c:1646  */
 -#line 1393 "awkgram.y" /* yacc.c:1646  */
++#line 1472 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
- #line 3434 "awkgram.c" /* yacc.c:1646  */
 -#line 3355 "awkgram.c" /* yacc.c:1646  */
++#line 3433 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 131:
- #line 1475 "awkgram.y" /* yacc.c:1646  */
 -#line 1395 "awkgram.y" /* yacc.c:1646  */
++#line 1474 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
- #line 3440 "awkgram.c" /* yacc.c:1646  */
 -#line 3361 "awkgram.c" /* yacc.c:1646  */
++#line 3439 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 132:
- #line 1477 "awkgram.y" /* yacc.c:1646  */
 -#line 1397 "awkgram.y" /* yacc.c:1646  */
++#line 1476 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
- #line 3446 "awkgram.c" /* yacc.c:1646  */
 -#line 3367 "awkgram.c" /* yacc.c:1646  */
++#line 3445 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 133:
- #line 1479 "awkgram.y" /* yacc.c:1646  */
 -#line 1399 "awkgram.y" /* yacc.c:1646  */
++#line 1478 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
- #line 3452 "awkgram.c" /* yacc.c:1646  */
 -#line 3373 "awkgram.c" /* yacc.c:1646  */
++#line 3451 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 134:
- #line 1481 "awkgram.y" /* yacc.c:1646  */
 -#line 1401 "awkgram.y" /* yacc.c:1646  */
++#line 1480 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
- #line 3458 "awkgram.c" /* yacc.c:1646  */
 -#line 3379 "awkgram.c" /* yacc.c:1646  */
++#line 3457 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 135:
- #line 1483 "awkgram.y" /* yacc.c:1646  */
 -#line 1403 "awkgram.y" /* yacc.c:1646  */
++#line 1482 "awkgram.y" /* yacc.c:1646  */
      {
                /*
                 * In BEGINFILE/ENDFILE, allow `getline [var] < file'
@@@ -3472,29 -3393,29 +3471,29 @@@
                                _("non-redirected `getline' undefined inside 
END action"));
                (yyval) = mk_getline((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]), 
redirect_input);
          }
- #line 3476 "awkgram.c" /* yacc.c:1646  */
 -#line 3397 "awkgram.c" /* yacc.c:1646  */
++#line 3475 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 136:
- #line 1497 "awkgram.y" /* yacc.c:1646  */
 -#line 1417 "awkgram.y" /* yacc.c:1646  */
++#line 1496 "awkgram.y" /* yacc.c:1646  */
      {
                (yyvsp[0])->opcode = Op_postincrement;
                (yyval) = mk_assignment((yyvsp[-1]), NULL, (yyvsp[0]));
          }
- #line 3485 "awkgram.c" /* yacc.c:1646  */
 -#line 3406 "awkgram.c" /* yacc.c:1646  */
++#line 3484 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 137:
- #line 1502 "awkgram.y" /* yacc.c:1646  */
 -#line 1422 "awkgram.y" /* yacc.c:1646  */
++#line 1501 "awkgram.y" /* yacc.c:1646  */
      {
                (yyvsp[0])->opcode = Op_postdecrement;
                (yyval) = mk_assignment((yyvsp[-1]), NULL, (yyvsp[0]));
          }
- #line 3494 "awkgram.c" /* yacc.c:1646  */
 -#line 3415 "awkgram.c" /* yacc.c:1646  */
++#line 3493 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 138:
- #line 1507 "awkgram.y" /* yacc.c:1646  */
 -#line 1427 "awkgram.y" /* yacc.c:1646  */
++#line 1506 "awkgram.y" /* yacc.c:1646  */
      {
                if (do_lint_old) {
                    warning_ln((yyvsp[-1])->source_line,
@@@ -3514,64 -3435,64 +3513,64 @@@
                        (yyval) = list_append(list_merge(t, (yyvsp[0])), 
(yyvsp[-1]));
                }
          }
- #line 3518 "awkgram.c" /* yacc.c:1646  */
 -#line 3439 "awkgram.c" /* yacc.c:1646  */
++#line 3517 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 139:
- #line 1532 "awkgram.y" /* yacc.c:1646  */
 -#line 1452 "awkgram.y" /* yacc.c:1646  */
++#line 1531 "awkgram.y" /* yacc.c:1646  */
      {
                  (yyval) = mk_getline((yyvsp[-1]), (yyvsp[0]), (yyvsp[-3]), 
(yyvsp[-2])->redir_type);
                  bcfree((yyvsp[-2]));
                }
- #line 3527 "awkgram.c" /* yacc.c:1646  */
 -#line 3448 "awkgram.c" /* yacc.c:1646  */
++#line 3526 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 140:
- #line 1538 "awkgram.y" /* yacc.c:1646  */
 -#line 1458 "awkgram.y" /* yacc.c:1646  */
++#line 1537 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
- #line 3533 "awkgram.c" /* yacc.c:1646  */
 -#line 3454 "awkgram.c" /* yacc.c:1646  */
++#line 3532 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 141:
- #line 1540 "awkgram.y" /* yacc.c:1646  */
 -#line 1460 "awkgram.y" /* yacc.c:1646  */
++#line 1539 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
- #line 3539 "awkgram.c" /* yacc.c:1646  */
 -#line 3460 "awkgram.c" /* yacc.c:1646  */
++#line 3538 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 142:
- #line 1542 "awkgram.y" /* yacc.c:1646  */
 -#line 1462 "awkgram.y" /* yacc.c:1646  */
++#line 1541 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
- #line 3545 "awkgram.c" /* yacc.c:1646  */
 -#line 3466 "awkgram.c" /* yacc.c:1646  */
++#line 3544 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 143:
- #line 1544 "awkgram.y" /* yacc.c:1646  */
 -#line 1464 "awkgram.y" /* yacc.c:1646  */
++#line 1543 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
- #line 3551 "awkgram.c" /* yacc.c:1646  */
 -#line 3472 "awkgram.c" /* yacc.c:1646  */
++#line 3550 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 144:
- #line 1546 "awkgram.y" /* yacc.c:1646  */
 -#line 1466 "awkgram.y" /* yacc.c:1646  */
++#line 1545 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
- #line 3557 "awkgram.c" /* yacc.c:1646  */
 -#line 3478 "awkgram.c" /* yacc.c:1646  */
++#line 3556 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 145:
- #line 1548 "awkgram.y" /* yacc.c:1646  */
 -#line 1468 "awkgram.y" /* yacc.c:1646  */
++#line 1547 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
- #line 3563 "awkgram.c" /* yacc.c:1646  */
 -#line 3484 "awkgram.c" /* yacc.c:1646  */
++#line 3562 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 146:
- #line 1553 "awkgram.y" /* yacc.c:1646  */
 -#line 1473 "awkgram.y" /* yacc.c:1646  */
++#line 1552 "awkgram.y" /* yacc.c:1646  */
      {
                (yyval) = list_create((yyvsp[0]));
          }
- #line 3571 "awkgram.c" /* yacc.c:1646  */
 -#line 3492 "awkgram.c" /* yacc.c:1646  */
++#line 3570 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 147:
- #line 1557 "awkgram.y" /* yacc.c:1646  */
 -#line 1477 "awkgram.y" /* yacc.c:1646  */
++#line 1556 "awkgram.y" /* yacc.c:1646  */
      {
                if ((yyvsp[0])->opcode == Op_match_rec) {
                        (yyvsp[0])->opcode = Op_nomatch;
@@@ -3603,37 -3524,37 +3602,37 @@@
                        }
                }
           }
- #line 3607 "awkgram.c" /* yacc.c:1646  */
 -#line 3528 "awkgram.c" /* yacc.c:1646  */
++#line 3606 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 148:
- #line 1589 "awkgram.y" /* yacc.c:1646  */
 -#line 1509 "awkgram.y" /* yacc.c:1646  */
++#line 1588 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[-1]); }
- #line 3613 "awkgram.c" /* yacc.c:1646  */
 -#line 3534 "awkgram.c" /* yacc.c:1646  */
++#line 3612 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 149:
- #line 1591 "awkgram.y" /* yacc.c:1646  */
 -#line 1511 "awkgram.y" /* yacc.c:1646  */
++#line 1590 "awkgram.y" /* yacc.c:1646  */
      {
                (yyval) = snode((yyvsp[-1]), (yyvsp[-3]));
                if ((yyval) == NULL)
                        YYABORT;
          }
- #line 3623 "awkgram.c" /* yacc.c:1646  */
 -#line 3544 "awkgram.c" /* yacc.c:1646  */
++#line 3622 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 150:
- #line 1597 "awkgram.y" /* yacc.c:1646  */
 -#line 1517 "awkgram.y" /* yacc.c:1646  */
++#line 1596 "awkgram.y" /* yacc.c:1646  */
      {
                (yyval) = snode((yyvsp[-1]), (yyvsp[-3]));
                if ((yyval) == NULL)
                        YYABORT;
          }
- #line 3633 "awkgram.c" /* yacc.c:1646  */
 -#line 3554 "awkgram.c" /* yacc.c:1646  */
++#line 3632 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 151:
- #line 1603 "awkgram.y" /* yacc.c:1646  */
 -#line 1523 "awkgram.y" /* yacc.c:1646  */
++#line 1602 "awkgram.y" /* yacc.c:1646  */
      {
                static bool warned = false;
  
@@@ -3646,45 -3567,45 +3645,45 @@@
                if ((yyval) == NULL)
                        YYABORT;
          }
- #line 3650 "awkgram.c" /* yacc.c:1646  */
 -#line 3571 "awkgram.c" /* yacc.c:1646  */
++#line 3649 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 154:
- #line 1618 "awkgram.y" /* yacc.c:1646  */
 -#line 1538 "awkgram.y" /* yacc.c:1646  */
++#line 1617 "awkgram.y" /* yacc.c:1646  */
      {
                (yyvsp[-1])->opcode = Op_preincrement;
                (yyval) = mk_assignment((yyvsp[0]), NULL, (yyvsp[-1]));
          }
- #line 3659 "awkgram.c" /* yacc.c:1646  */
 -#line 3580 "awkgram.c" /* yacc.c:1646  */
++#line 3658 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 155:
- #line 1623 "awkgram.y" /* yacc.c:1646  */
 -#line 1543 "awkgram.y" /* yacc.c:1646  */
++#line 1622 "awkgram.y" /* yacc.c:1646  */
      {
                (yyvsp[-1])->opcode = Op_predecrement;
                (yyval) = mk_assignment((yyvsp[0]), NULL, (yyvsp[-1]));
          }
- #line 3668 "awkgram.c" /* yacc.c:1646  */
 -#line 3589 "awkgram.c" /* yacc.c:1646  */
++#line 3667 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 156:
- #line 1628 "awkgram.y" /* yacc.c:1646  */
 -#line 1548 "awkgram.y" /* yacc.c:1646  */
++#line 1627 "awkgram.y" /* yacc.c:1646  */
      {
                (yyval) = list_create((yyvsp[0]));
          }
- #line 3676 "awkgram.c" /* yacc.c:1646  */
 -#line 3597 "awkgram.c" /* yacc.c:1646  */
++#line 3675 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 157:
- #line 1632 "awkgram.y" /* yacc.c:1646  */
 -#line 1552 "awkgram.y" /* yacc.c:1646  */
++#line 1631 "awkgram.y" /* yacc.c:1646  */
      {
                (yyval) = list_create((yyvsp[0]));
          }
- #line 3684 "awkgram.c" /* yacc.c:1646  */
 -#line 3605 "awkgram.c" /* yacc.c:1646  */
++#line 3683 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 158:
- #line 1636 "awkgram.y" /* yacc.c:1646  */
 -#line 1556 "awkgram.y" /* yacc.c:1646  */
++#line 1635 "awkgram.y" /* yacc.c:1646  */
      {
                if ((yyvsp[0])->lasti->opcode == Op_push_i
                        && ((yyvsp[0])->lasti->memory->flags & (STRCUR|STRING)) 
== 0
@@@ -3699,11 -3620,11 +3698,11 @@@
                        (yyval) = list_append((yyvsp[0]), (yyvsp[-1]));
                }
          }
- #line 3703 "awkgram.c" /* yacc.c:1646  */
 -#line 3624 "awkgram.c" /* yacc.c:1646  */
++#line 3702 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 159:
- #line 1651 "awkgram.y" /* yacc.c:1646  */
 -#line 1571 "awkgram.y" /* yacc.c:1646  */
++#line 1650 "awkgram.y" /* yacc.c:1646  */
      {
            /*
             * was: $$ = $2
@@@ -3713,20 -3634,20 +3712,20 @@@
                (yyvsp[-1])->memory = make_number(0.0);
                (yyval) = list_append((yyvsp[0]), (yyvsp[-1]));
          }
- #line 3717 "awkgram.c" /* yacc.c:1646  */
 -#line 3638 "awkgram.c" /* yacc.c:1646  */
++#line 3716 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 160:
- #line 1664 "awkgram.y" /* yacc.c:1646  */
 -#line 1584 "awkgram.y" /* yacc.c:1646  */
++#line 1663 "awkgram.y" /* yacc.c:1646  */
      {
                func_use((yyvsp[0])->lasti->func_name, FUNC_USE);
                (yyval) = (yyvsp[0]);
          }
- #line 3726 "awkgram.c" /* yacc.c:1646  */
 -#line 3647 "awkgram.c" /* yacc.c:1646  */
++#line 3725 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 161:
- #line 1669 "awkgram.y" /* yacc.c:1646  */
 -#line 1589 "awkgram.y" /* yacc.c:1646  */
++#line 1668 "awkgram.y" /* yacc.c:1646  */
      {
                /* indirect function call */
                INSTRUCTION *f, *t;
@@@ -3760,11 -3681,11 +3759,11 @@@
                (yyval) = list_prepend((yyvsp[0]), t);
                at_seen = false;
          }
- #line 3764 "awkgram.c" /* yacc.c:1646  */
 -#line 3685 "awkgram.c" /* yacc.c:1646  */
++#line 3763 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 162:
- #line 1706 "awkgram.y" /* yacc.c:1646  */
 -#line 1626 "awkgram.y" /* yacc.c:1646  */
++#line 1705 "awkgram.y" /* yacc.c:1646  */
      {
                NODE *n;
  
@@@ -3789,49 -3710,49 +3788,49 @@@
                        (yyval) = list_append(t, (yyvsp[-3]));
                }
          }
- #line 3793 "awkgram.c" /* yacc.c:1646  */
 -#line 3714 "awkgram.c" /* yacc.c:1646  */
++#line 3792 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 163:
- #line 1734 "awkgram.y" /* yacc.c:1646  */
 -#line 1654 "awkgram.y" /* yacc.c:1646  */
++#line 1733 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 3799 "awkgram.c" /* yacc.c:1646  */
 -#line 3720 "awkgram.c" /* yacc.c:1646  */
++#line 3798 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 164:
- #line 1736 "awkgram.y" /* yacc.c:1646  */
 -#line 1656 "awkgram.y" /* yacc.c:1646  */
++#line 1735 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3805 "awkgram.c" /* yacc.c:1646  */
 -#line 3726 "awkgram.c" /* yacc.c:1646  */
++#line 3804 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 165:
- #line 1741 "awkgram.y" /* yacc.c:1646  */
 -#line 1661 "awkgram.y" /* yacc.c:1646  */
++#line 1740 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 3811 "awkgram.c" /* yacc.c:1646  */
 -#line 3732 "awkgram.c" /* yacc.c:1646  */
++#line 3810 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 166:
- #line 1743 "awkgram.y" /* yacc.c:1646  */
 -#line 1663 "awkgram.y" /* yacc.c:1646  */
++#line 1742 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[-1]); }
- #line 3817 "awkgram.c" /* yacc.c:1646  */
 -#line 3738 "awkgram.c" /* yacc.c:1646  */
++#line 3816 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 167:
- #line 1748 "awkgram.y" /* yacc.c:1646  */
 -#line 1668 "awkgram.y" /* yacc.c:1646  */
++#line 1747 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3823 "awkgram.c" /* yacc.c:1646  */
 -#line 3744 "awkgram.c" /* yacc.c:1646  */
++#line 3822 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 168:
- #line 1750 "awkgram.y" /* yacc.c:1646  */
 -#line 1670 "awkgram.y" /* yacc.c:1646  */
++#line 1749 "awkgram.y" /* yacc.c:1646  */
      {
                (yyval) = list_merge((yyvsp[-1]), (yyvsp[0]));
          }
- #line 3831 "awkgram.c" /* yacc.c:1646  */
 -#line 3752 "awkgram.c" /* yacc.c:1646  */
++#line 3830 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 169:
- #line 1757 "awkgram.y" /* yacc.c:1646  */
 -#line 1677 "awkgram.y" /* yacc.c:1646  */
++#line 1756 "awkgram.y" /* yacc.c:1646  */
      {
                INSTRUCTION *ip = (yyvsp[0])->lasti; 
                int count = ip->sub_count;      /* # of SUBSEP-seperated 
expressions */
@@@ -3845,11 -3766,11 +3844,11 @@@
                sub_counter++;  /* count # of dimensions */
                (yyval) = (yyvsp[0]);
          }
- #line 3849 "awkgram.c" /* yacc.c:1646  */
 -#line 3770 "awkgram.c" /* yacc.c:1646  */
++#line 3848 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 170:
- #line 1774 "awkgram.y" /* yacc.c:1646  */
 -#line 1694 "awkgram.y" /* yacc.c:1646  */
++#line 1773 "awkgram.y" /* yacc.c:1646  */
      {
                INSTRUCTION *t = (yyvsp[-1]);
                if ((yyvsp[-1]) == NULL) {
@@@ -3863,31 -3784,31 +3862,31 @@@
                        (yyvsp[0])->sub_count = count_expressions(&t, false);
                (yyval) = list_append(t, (yyvsp[0]));
          }
- #line 3867 "awkgram.c" /* yacc.c:1646  */
 -#line 3788 "awkgram.c" /* yacc.c:1646  */
++#line 3866 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 171:
- #line 1791 "awkgram.y" /* yacc.c:1646  */
 -#line 1711 "awkgram.y" /* yacc.c:1646  */
++#line 1790 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3873 "awkgram.c" /* yacc.c:1646  */
 -#line 3794 "awkgram.c" /* yacc.c:1646  */
++#line 3872 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 172:
- #line 1793 "awkgram.y" /* yacc.c:1646  */
 -#line 1713 "awkgram.y" /* yacc.c:1646  */
++#line 1792 "awkgram.y" /* yacc.c:1646  */
      {
                (yyval) = list_merge((yyvsp[-1]), (yyvsp[0]));
          }
- #line 3881 "awkgram.c" /* yacc.c:1646  */
 -#line 3802 "awkgram.c" /* yacc.c:1646  */
++#line 3880 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 173:
- #line 1800 "awkgram.y" /* yacc.c:1646  */
 -#line 1720 "awkgram.y" /* yacc.c:1646  */
++#line 1799 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[-1]); }
- #line 3887 "awkgram.c" /* yacc.c:1646  */
 -#line 3808 "awkgram.c" /* yacc.c:1646  */
++#line 3886 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 174:
- #line 1805 "awkgram.y" /* yacc.c:1646  */
 -#line 1725 "awkgram.y" /* yacc.c:1646  */
++#line 1804 "awkgram.y" /* yacc.c:1646  */
      {
                char *var_name = (yyvsp[0])->lextok;
  
@@@ -3895,22 -3816,22 +3894,22 @@@
                (yyvsp[0])->memory = variable((yyvsp[0])->source_line, 
var_name, Node_var_new);
                (yyval) = list_create((yyvsp[0]));
          }
- #line 3899 "awkgram.c" /* yacc.c:1646  */
 -#line 3820 "awkgram.c" /* yacc.c:1646  */
++#line 3898 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 175:
- #line 1813 "awkgram.y" /* yacc.c:1646  */
 -#line 1733 "awkgram.y" /* yacc.c:1646  */
++#line 1812 "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 3910 "awkgram.c" /* yacc.c:1646  */
 -#line 3831 "awkgram.c" /* yacc.c:1646  */
++#line 3909 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 176:
- #line 1823 "awkgram.y" /* yacc.c:1646  */
 -#line 1743 "awkgram.y" /* yacc.c:1646  */
++#line 1822 "awkgram.y" /* yacc.c:1646  */
      {
                INSTRUCTION *ip = (yyvsp[0])->nexti;
                if (ip->opcode == Op_push
@@@ -3922,73 -3843,73 +3921,73 @@@
                } else
                        (yyval) = (yyvsp[0]);
          }
- #line 3926 "awkgram.c" /* yacc.c:1646  */
 -#line 3847 "awkgram.c" /* yacc.c:1646  */
++#line 3925 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 177:
- #line 1835 "awkgram.y" /* yacc.c:1646  */
 -#line 1755 "awkgram.y" /* yacc.c:1646  */
++#line 1834 "awkgram.y" /* yacc.c:1646  */
      {
                (yyval) = list_append((yyvsp[-1]), (yyvsp[-2]));
                if ((yyvsp[0]) != NULL)
                        mk_assignment((yyvsp[-1]), NULL, (yyvsp[0]));
          }
- #line 3936 "awkgram.c" /* yacc.c:1646  */
 -#line 3857 "awkgram.c" /* yacc.c:1646  */
++#line 3935 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 178:
- #line 1844 "awkgram.y" /* yacc.c:1646  */
 -#line 1764 "awkgram.y" /* yacc.c:1646  */
++#line 1843 "awkgram.y" /* yacc.c:1646  */
      {
                (yyvsp[0])->opcode = Op_postincrement;
          }
- #line 3944 "awkgram.c" /* yacc.c:1646  */
 -#line 3865 "awkgram.c" /* yacc.c:1646  */
++#line 3943 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 179:
- #line 1848 "awkgram.y" /* yacc.c:1646  */
 -#line 1768 "awkgram.y" /* yacc.c:1646  */
++#line 1847 "awkgram.y" /* yacc.c:1646  */
      {
                (yyvsp[0])->opcode = Op_postdecrement;
          }
- #line 3952 "awkgram.c" /* yacc.c:1646  */
 -#line 3873 "awkgram.c" /* yacc.c:1646  */
++#line 3951 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 180:
- #line 1851 "awkgram.y" /* yacc.c:1646  */
 -#line 1771 "awkgram.y" /* yacc.c:1646  */
++#line 1850 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 3958 "awkgram.c" /* yacc.c:1646  */
 -#line 3879 "awkgram.c" /* yacc.c:1646  */
++#line 3957 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 182:
- #line 1859 "awkgram.y" /* yacc.c:1646  */
 -#line 1779 "awkgram.y" /* yacc.c:1646  */
++#line 1858 "awkgram.y" /* yacc.c:1646  */
      { yyerrok; }
- #line 3964 "awkgram.c" /* yacc.c:1646  */
 -#line 3885 "awkgram.c" /* yacc.c:1646  */
++#line 3963 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 183:
- #line 1863 "awkgram.y" /* yacc.c:1646  */
 -#line 1783 "awkgram.y" /* yacc.c:1646  */
++#line 1862 "awkgram.y" /* yacc.c:1646  */
      { yyerrok; }
- #line 3970 "awkgram.c" /* yacc.c:1646  */
 -#line 3891 "awkgram.c" /* yacc.c:1646  */
++#line 3969 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 186:
- #line 1872 "awkgram.y" /* yacc.c:1646  */
 -#line 1792 "awkgram.y" /* yacc.c:1646  */
++#line 1871 "awkgram.y" /* yacc.c:1646  */
      { yyerrok; }
- #line 3976 "awkgram.c" /* yacc.c:1646  */
 -#line 3897 "awkgram.c" /* yacc.c:1646  */
++#line 3975 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 187:
- #line 1876 "awkgram.y" /* yacc.c:1646  */
 -#line 1796 "awkgram.y" /* yacc.c:1646  */
++#line 1875 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); yyerrok; }
- #line 3982 "awkgram.c" /* yacc.c:1646  */
 -#line 3903 "awkgram.c" /* yacc.c:1646  */
++#line 3981 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 188:
- #line 1880 "awkgram.y" /* yacc.c:1646  */
 -#line 1800 "awkgram.y" /* yacc.c:1646  */
++#line 1879 "awkgram.y" /* yacc.c:1646  */
      { yyerrok; }
- #line 3988 "awkgram.c" /* yacc.c:1646  */
 -#line 3909 "awkgram.c" /* yacc.c:1646  */
++#line 3987 "awkgram.c" /* yacc.c:1646  */
      break;
  
  
- #line 3992 "awkgram.c" /* yacc.c:1646  */
 -#line 3913 "awkgram.c" /* yacc.c:1646  */
++#line 3991 "awkgram.c" /* yacc.c:1646  */
        default: break;
      }
    /* User semantic actions sometimes alter yychar, and that requires
@@@ -4216,7 -4137,7 +4215,7 @@@ yyreturn
  #endif
    return yyresult;
  }
- #line 1882 "awkgram.y" /* yacc.c:1906  */
 -#line 1802 "awkgram.y" /* yacc.c:1906  */
++#line 1881 "awkgram.y" /* yacc.c:1906  */
  
  
  struct token {
diff --cc doc/ChangeLog
index 08c91bd,982db16..e41bf15
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@@ -1,11 -1,9 +1,13 @@@
  2015-03-31         Arnold D. Robbins     <address@hidden>
  
-       * gawktexi.in: Minor edits.
+       * gawktexi.in: Update discussion of calling built-in functions
+       indirectly. Small additional fix relating to rand(). Thanks
+       to Antonio Colombo.
  
 +2015-03-27         Arnold D. Robbins     <address@hidden>
 +
 +      * gawktexi.in: Minor edits.
 +
  2015-03-24         Arnold D. Robbins     <address@hidden>
  
        * gawktexi.in: Minor fixes from Antonio Colombo and new exercise
diff --cc doc/gawk.info
index a208f83,b927b44..24a4a63
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@@ -34888,563 -34518,559 +34896,563 @@@ Inde
  
  Tag Table:
  Node: Top1204
 -Node: Foreword342156
 -Node: Foreword446600
 -Node: Preface48131
 -Ref: Preface-Footnote-151002
 -Ref: Preface-Footnote-251109
 -Ref: Preface-Footnote-351342
 -Node: History51484
 -Node: Names53835
 -Ref: Names-Footnote-154929
 -Node: This Manual55075
 -Ref: This Manual-Footnote-161575
 -Node: Conventions61675
 -Node: Manual History64012
 -Ref: Manual History-Footnote-167005
 -Ref: Manual History-Footnote-267046
 -Node: How To Contribute67120
 -Node: Acknowledgments68249
 -Node: Getting Started73115
 -Node: Running gawk75554
 -Node: One-shot76744
 -Node: Read Terminal78008
 -Node: Long80039
 -Node: Executable Scripts81552
 -Ref: Executable Scripts-Footnote-184341
 -Node: Comments84444
 -Node: Quoting86926
 -Node: DOS Quoting92444
 -Node: Sample Data Files93119
 -Node: Very Simple95714
 -Node: Two Rules100613
 -Node: More Complex102499
 -Node: Statements/Lines105361
 -Ref: Statements/Lines-Footnote-1109816
 -Node: Other Features110081
 -Node: When111017
 -Ref: When-Footnote-1112771
 -Node: Intro Summary112836
 -Node: Invoking Gawk113720
 -Node: Command Line115234
 -Node: Options116032
 -Ref: Options-Footnote-1131954
 -Ref: Options-Footnote-2132183
 -Node: Other Arguments132208
 -Node: Naming Standard Input135156
 -Node: Environment Variables136249
 -Node: AWKPATH Variable136807
 -Ref: AWKPATH Variable-Footnote-1140104
 -Ref: AWKPATH Variable-Footnote-2140149
 -Node: AWKLIBPATH Variable140409
 -Node: Other Environment Variables141552
 -Node: Exit Status145310
 -Node: Include Files145986
 -Node: Loading Shared Libraries149575
 -Node: Obsolete151002
 -Node: Undocumented151694
 -Node: Invoking Summary151961
 -Node: Regexp153624
 -Node: Regexp Usage155078
 -Node: Escape Sequences157115
 -Node: Regexp Operators163125
 -Ref: Regexp Operators-Footnote-1170535
 -Ref: Regexp Operators-Footnote-2170682
 -Node: Bracket Expressions170780
 -Ref: table-char-classes172795
 -Node: Leftmost Longest175737
 -Node: Computed Regexps177039
 -Node: GNU Regexp Operators180468
 -Node: Case-sensitivity184140
 -Ref: Case-sensitivity-Footnote-1187025
 -Ref: Case-sensitivity-Footnote-2187260
 -Node: Regexp Summary187368
 -Node: Reading Files188835
 -Node: Records190928
 -Node: awk split records191661
 -Node: gawk split records196590
 -Ref: gawk split records-Footnote-1201129
 -Node: Fields201166
 -Ref: Fields-Footnote-1203944
 -Node: Nonconstant Fields204030
 -Ref: Nonconstant Fields-Footnote-1206268
 -Node: Changing Fields206471
 -Node: Field Separators212402
 -Node: Default Field Splitting215106
 -Node: Regexp Field Splitting216223
 -Node: Single Character Fields219573
 -Node: Command Line Field Separator220632
 -Node: Full Line Fields223849
 -Ref: Full Line Fields-Footnote-1225370
 -Ref: Full Line Fields-Footnote-2225416
 -Node: Field Splitting Summary225517
 -Node: Constant Size227591
 -Node: Splitting By Content232170
 -Ref: Splitting By Content-Footnote-1236135
 -Node: Multiple Line236298
 -Ref: Multiple Line-Footnote-1242179
 -Node: Getline242358
 -Node: Plain Getline244565
 -Node: Getline/Variable247205
 -Node: Getline/File248354
 -Node: Getline/Variable/File249739
 -Ref: Getline/Variable/File-Footnote-1251342
 -Node: Getline/Pipe251429
 -Node: Getline/Variable/Pipe254107
 -Node: Getline/Coprocess255238
 -Node: Getline/Variable/Coprocess256502
 -Node: Getline Notes257241
 -Node: Getline Summary260035
 -Ref: table-getline-variants260447
 -Node: Read Timeout261276
 -Ref: Read Timeout-Footnote-1265113
 -Node: Command-line directories265171
 -Node: Input Summary266076
 -Node: Input Exercises269461
 -Node: Printing270189
 -Node: Print271966
 -Node: Print Examples273423
 -Node: Output Separators276202
 -Node: OFMT278220
 -Node: Printf279575
 -Node: Basic Printf280360
 -Node: Control Letters281932
 -Node: Format Modifiers285917
 -Node: Printf Examples291923
 -Node: Redirection294409
 -Node: Special FD301247
 -Ref: Special FD-Footnote-1304413
 -Node: Special Files304487
 -Node: Other Inherited Files305104
 -Node: Special Network306104
 -Node: Special Caveats306966
 -Node: Close Files And Pipes307915
 -Ref: Close Files And Pipes-Footnote-1315106
 -Ref: Close Files And Pipes-Footnote-2315254
 -Node: Output Summary315404
 -Node: Output Exercises316402
 -Node: Expressions317082
 -Node: Values318271
 -Node: Constants318948
 -Node: Scalar Constants319639
 -Ref: Scalar Constants-Footnote-1320501
 -Node: Nondecimal-numbers320751
 -Node: Regexp Constants323761
 -Node: Using Constant Regexps324287
 -Node: Variables327450
 -Node: Using Variables328107
 -Node: Assignment Options330018
 -Node: Conversion331893
 -Node: Strings And Numbers332417
 -Ref: Strings And Numbers-Footnote-1335482
 -Node: Locale influences conversions335591
 -Ref: table-locale-affects338337
 -Node: All Operators338929
 -Node: Arithmetic Ops339558
 -Node: Concatenation342063
 -Ref: Concatenation-Footnote-1344882
 -Node: Assignment Ops344989
 -Ref: table-assign-ops349968
 -Node: Increment Ops351278
 -Node: Truth Values and Conditions354709
 -Node: Truth Values355792
 -Node: Typing and Comparison356841
 -Node: Variable Typing357657
 -Node: Comparison Operators361324
 -Ref: table-relational-ops361734
 -Node: POSIX String Comparison365229
 -Ref: POSIX String Comparison-Footnote-1366301
 -Node: Boolean Ops366440
 -Ref: Boolean Ops-Footnote-1370918
 -Node: Conditional Exp371009
 -Node: Function Calls372747
 -Node: Precedence376627
 -Node: Locales380287
 -Node: Expressions Summary381919
 -Node: Patterns and Actions384490
 -Node: Pattern Overview385610
 -Node: Regexp Patterns387289
 -Node: Expression Patterns387832
 -Node: Ranges391612
 -Node: BEGIN/END394719
 -Node: Using BEGIN/END395480
 -Ref: Using BEGIN/END-Footnote-1398216
 -Node: I/O And BEGIN/END398322
 -Node: BEGINFILE/ENDFILE400637
 -Node: Empty403534
 -Node: Using Shell Variables403851
 -Node: Action Overview406124
 -Node: Statements408450
 -Node: If Statement410298
 -Node: While Statement411793
 -Node: Do Statement413821
 -Node: For Statement414969
 -Node: Switch Statement418127
 -Node: Break Statement420509
 -Node: Continue Statement422602
 -Node: Next Statement424429
 -Node: Nextfile Statement426810
 -Node: Exit Statement429438
 -Node: Built-in Variables431849
 -Node: User-modified432982
 -Ref: User-modified-Footnote-1440616
 -Node: Auto-set440678
 -Ref: Auto-set-Footnote-1453730
 -Ref: Auto-set-Footnote-2453935
 -Node: ARGC and ARGV453991
 -Node: Pattern Action Summary458209
 -Node: Arrays460642
 -Node: Array Basics461971
 -Node: Array Intro462815
 -Ref: figure-array-elements464752
 -Ref: Array Intro-Footnote-1467375
 -Node: Reference to Elements467503
 -Node: Assigning Elements469965
 -Node: Array Example470456
 -Node: Scanning an Array472215
 -Node: Controlling Scanning475238
 -Ref: Controlling Scanning-Footnote-1480632
 -Node: Numeric Array Subscripts480948
 -Node: Uninitialized Subscripts483133
 -Node: Delete484750
 -Ref: Delete-Footnote-1487499
 -Node: Multidimensional487556
 -Node: Multiscanning490653
 -Node: Arrays of Arrays492242
 -Node: Arrays Summary496996
 -Node: Functions499087
 -Node: Built-in500126
 -Node: Calling Built-in501204
 -Node: Numeric Functions503199
 -Ref: Numeric Functions-Footnote-1507227
 -Ref: Numeric Functions-Footnote-2507584
 -Ref: Numeric Functions-Footnote-3507632
 -Node: String Functions507904
 -Ref: String Functions-Footnote-1531405
 -Ref: String Functions-Footnote-2531534
 -Ref: String Functions-Footnote-3531782
 -Node: Gory Details531869
 -Ref: table-sub-escapes533650
 -Ref: table-sub-proposed535165
 -Ref: table-posix-sub536527
 -Ref: table-gensub-escapes538064
 -Ref: Gory Details-Footnote-1538897
 -Node: I/O Functions539048
 -Ref: I/O Functions-Footnote-1546284
 -Node: Time Functions546431
 -Ref: Time Functions-Footnote-1556940
 -Ref: Time Functions-Footnote-2557008
 -Ref: Time Functions-Footnote-3557166
 -Ref: Time Functions-Footnote-4557277
 -Ref: Time Functions-Footnote-5557389
 -Ref: Time Functions-Footnote-6557616
 -Node: Bitwise Functions557882
 -Ref: table-bitwise-ops558444
 -Ref: Bitwise Functions-Footnote-1562772
 -Node: Type Functions562944
 -Node: I18N Functions564096
 -Node: User-defined565743
 -Node: Definition Syntax566548
 -Ref: Definition Syntax-Footnote-1572207
 -Node: Function Example572278
 -Ref: Function Example-Footnote-1575199
 -Node: Function Caveats575221
 -Node: Calling A Function575739
 -Node: Variable Scope576697
 -Node: Pass By Value/Reference579690
 -Node: Return Statement583187
 -Node: Dynamic Typing586166
 -Node: Indirect Calls587095
 -Ref: Indirect Calls-Footnote-1597338
 -Node: Functions Summary597466
 -Node: Library Functions600168
 -Ref: Library Functions-Footnote-1603776
 -Ref: Library Functions-Footnote-2603919
 -Node: Library Names604090
 -Ref: Library Names-Footnote-1607548
 -Ref: Library Names-Footnote-2607771
 -Node: General Functions607857
 -Node: Strtonum Function608960
 -Node: Assert Function611982
 -Node: Round Function615306
 -Node: Cliff Random Function616847
 -Node: Ordinal Functions617863
 -Ref: Ordinal Functions-Footnote-1620926
 -Ref: Ordinal Functions-Footnote-2621178
 -Node: Join Function621389
 -Ref: Join Function-Footnote-1623159
 -Node: Getlocaltime Function623359
 -Node: Readfile Function627103
 -Node: Shell Quoting629075
 -Node: Data File Management630476
 -Node: Filetrans Function631108
 -Node: Rewind Function635204
 -Node: File Checking636590
 -Ref: File Checking-Footnote-1637923
 -Node: Empty Files638124
 -Node: Ignoring Assigns640103
 -Node: Getopt Function641653
 -Ref: Getopt Function-Footnote-1653117
 -Node: Passwd Functions653317
 -Ref: Passwd Functions-Footnote-1662157
 -Node: Group Functions662245
 -Ref: Group Functions-Footnote-1670142
 -Node: Walking Arrays670347
 -Node: Library Functions Summary673353
 -Node: Library Exercises674755
 -Node: Sample Programs676035
 -Node: Running Examples676805
 -Node: Clones677533
 -Node: Cut Program678757
 -Node: Egrep Program688477
 -Ref: Egrep Program-Footnote-1695980
 -Node: Id Program696090
 -Node: Split Program699766
 -Ref: Split Program-Footnote-1703220
 -Node: Tee Program703348
 -Node: Uniq Program706137
 -Node: Wc Program713556
 -Ref: Wc Program-Footnote-1717806
 -Node: Miscellaneous Programs717900
 -Node: Dupword Program719113
 -Node: Alarm Program721144
 -Node: Translate Program725949
 -Ref: Translate Program-Footnote-1730512
 -Node: Labels Program730782
 -Ref: Labels Program-Footnote-1734133
 -Node: Word Sorting734217
 -Node: History Sorting738287
 -Node: Extract Program740122
 -Node: Simple Sed747646
 -Node: Igawk Program750716
 -Ref: Igawk Program-Footnote-1765042
 -Ref: Igawk Program-Footnote-2765243
 -Ref: Igawk Program-Footnote-3765365
 -Node: Anagram Program765480
 -Node: Signature Program768541
 -Node: Programs Summary769788
 -Node: Programs Exercises771009
 -Ref: Programs Exercises-Footnote-1775140
 -Node: Advanced Features775231
 -Node: Nondecimal Data777213
 -Node: Array Sorting778803
 -Node: Controlling Array Traversal779503
 -Ref: Controlling Array Traversal-Footnote-1787869
 -Node: Array Sorting Functions787987
 -Ref: Array Sorting Functions-Footnote-1791873
 -Node: Two-way I/O792069
 -Ref: Two-way I/O-Footnote-1797014
 -Ref: Two-way I/O-Footnote-2797200
 -Node: TCP/IP Networking797282
 -Node: Profiling800154
 -Node: Advanced Features Summary807695
 -Node: Internationalization809628
 -Node: I18N and L10N811108
 -Node: Explaining gettext811794
 -Ref: Explaining gettext-Footnote-1816819
 -Ref: Explaining gettext-Footnote-2817003
 -Node: Programmer i18n817168
 -Ref: Programmer i18n-Footnote-1822044
 -Node: Translator i18n822093
 -Node: String Extraction822887
 -Ref: String Extraction-Footnote-1824018
 -Node: Printf Ordering824104
 -Ref: Printf Ordering-Footnote-1826890
 -Node: I18N Portability826954
 -Ref: I18N Portability-Footnote-1829410
 -Node: I18N Example829473
 -Ref: I18N Example-Footnote-1832276
 -Node: Gawk I18N832348
 -Node: I18N Summary832992
 -Node: Debugger834332
 -Node: Debugging835354
 -Node: Debugging Concepts835795
 -Node: Debugging Terms837605
 -Node: Awk Debugging840177
 -Node: Sample Debugging Session841083
 -Node: Debugger Invocation841617
 -Node: Finding The Bug843002
 -Node: List of Debugger Commands849481
 -Node: Breakpoint Control850813
 -Node: Debugger Execution Control854490
 -Node: Viewing And Changing Data857849
 -Node: Execution Stack861225
 -Node: Debugger Info862860
 -Node: Miscellaneous Debugger Commands866905
 -Node: Readline Support871906
 -Node: Limitations872800
 -Node: Debugging Summary874915
 -Node: Arbitrary Precision Arithmetic876089
 -Node: Computer Arithmetic877505
 -Ref: table-numeric-ranges881082
 -Ref: Computer Arithmetic-Footnote-1881606
 -Node: Math Definitions881663
 -Ref: table-ieee-formats884958
 -Ref: Math Definitions-Footnote-1885562
 -Node: MPFR features885667
 -Node: FP Math Caution887338
 -Ref: FP Math Caution-Footnote-1888388
 -Node: Inexactness of computations888757
 -Node: Inexact representation889716
 -Node: Comparing FP Values891074
 -Node: Errors accumulate892156
 -Node: Getting Accuracy893588
 -Node: Try To Round896292
 -Node: Setting precision897191
 -Ref: table-predefined-precision-strings897875
 -Node: Setting the rounding mode899704
 -Ref: table-gawk-rounding-modes900068
 -Ref: Setting the rounding mode-Footnote-1903520
 -Node: Arbitrary Precision Integers903699
 -Ref: Arbitrary Precision Integers-Footnote-1906683
 -Node: POSIX Floating Point Problems906832
 -Ref: POSIX Floating Point Problems-Footnote-1910711
 -Node: Floating point summary910749
 -Node: Dynamic Extensions912936
 -Node: Extension Intro914488
 -Node: Plugin License915753
 -Node: Extension Mechanism Outline916550
 -Ref: figure-load-extension916978
 -Ref: figure-register-new-function918458
 -Ref: figure-call-new-function919462
 -Node: Extension API Description921449
 -Node: Extension API Functions Introduction922899
 -Node: General Data Types927720
 -Ref: General Data Types-Footnote-1933620
 -Node: Memory Allocation Functions933919
 -Ref: Memory Allocation Functions-Footnote-1936758
 -Node: Constructor Functions936857
 -Node: Registration Functions938596
 -Node: Extension Functions939281
 -Node: Exit Callback Functions941578
 -Node: Extension Version String942826
 -Node: Input Parsers943489
 -Node: Output Wrappers953364
 -Node: Two-way processors957877
 -Node: Printing Messages960140
 -Ref: Printing Messages-Footnote-1961216
 -Node: Updating `ERRNO'961368
 -Node: Requesting Values962108
 -Ref: table-value-types-returned962835
 -Node: Accessing Parameters963792
 -Node: Symbol Table Access965026
 -Node: Symbol table by name965540
 -Node: Symbol table by cookie967560
 -Ref: Symbol table by cookie-Footnote-1971705
 -Node: Cached values971768
 -Ref: Cached values-Footnote-1975264
 -Node: Array Manipulation975355
 -Ref: Array Manipulation-Footnote-1976453
 -Node: Array Data Types976490
 -Ref: Array Data Types-Footnote-1979145
 -Node: Array Functions979237
 -Node: Flattening Arrays983096
 -Node: Creating Arrays989998
 -Node: Extension API Variables994769
 -Node: Extension Versioning995405
 -Node: Extension API Informational Variables997296
 -Node: Extension API Boilerplate998361
 -Node: Finding Extensions1002170
 -Node: Extension Example1002730
 -Node: Internal File Description1003502
 -Node: Internal File Ops1007569
 -Ref: Internal File Ops-Footnote-11019320
 -Node: Using Internal File Ops1019460
 -Ref: Using Internal File Ops-Footnote-11021843
 -Node: Extension Samples1022116
 -Node: Extension Sample File Functions1023644
 -Node: Extension Sample Fnmatch1031325
 -Node: Extension Sample Fork1032813
 -Node: Extension Sample Inplace1034028
 -Node: Extension Sample Ord1036114
 -Node: Extension Sample Readdir1036950
 -Ref: table-readdir-file-types1037827
 -Node: Extension Sample Revout1038638
 -Node: Extension Sample Rev2way1039227
 -Node: Extension Sample Read write array1039967
 -Node: Extension Sample Readfile1041907
 -Node: Extension Sample Time1043002
 -Node: Extension Sample API Tests1044350
 -Node: gawkextlib1044841
 -Node: Extension summary1047519
 -Node: Extension Exercises1051208
 -Node: Language History1052704
 -Node: V7/SVR3.11054360
 -Node: SVR41056513
 -Node: POSIX1057947
 -Node: BTL1059328
 -Node: POSIX/GNU1060059
 -Node: Feature History1065580
 -Node: Common Extensions1078678
 -Node: Ranges and Locales1080050
 -Ref: Ranges and Locales-Footnote-11084669
 -Ref: Ranges and Locales-Footnote-21084696
 -Ref: Ranges and Locales-Footnote-31084931
 -Node: Contributors1085152
 -Node: History summary1090692
 -Node: Installation1092071
 -Node: Gawk Distribution1093017
 -Node: Getting1093501
 -Node: Extracting1094324
 -Node: Distribution contents1095961
 -Node: Unix Installation1101715
 -Node: Quick Installation1102332
 -Node: Additional Configuration Options1104756
 -Node: Configuration Philosophy1106559
 -Node: Non-Unix Installation1108928
 -Node: PC Installation1109386
 -Node: PC Binary Installation1110706
 -Node: PC Compiling1112554
 -Ref: PC Compiling-Footnote-11115575
 -Node: PC Testing1115684
 -Node: PC Using1116860
 -Node: Cygwin1120975
 -Node: MSYS1121745
 -Node: VMS Installation1122246
 -Node: VMS Compilation1123038
 -Ref: VMS Compilation-Footnote-11124267
 -Node: VMS Dynamic Extensions1124325
 -Node: VMS Installation Details1126009
 -Node: VMS Running1128260
 -Node: VMS GNV1131100
 -Node: VMS Old Gawk1131835
 -Node: Bugs1132305
 -Node: Other Versions1136194
 -Node: Installation summary1142628
 -Node: Notes1143687
 -Node: Compatibility Mode1144552
 -Node: Additions1145334
 -Node: Accessing The Source1146259
 -Node: Adding Code1147694
 -Node: New Ports1153851
 -Node: Derived Files1158333
 -Ref: Derived Files-Footnote-11163808
 -Ref: Derived Files-Footnote-21163842
 -Ref: Derived Files-Footnote-31164438
 -Node: Future Extensions1164552
 -Node: Implementation Limitations1165158
 -Node: Extension Design1166406
 -Node: Old Extension Problems1167560
 -Ref: Old Extension Problems-Footnote-11169077
 -Node: Extension New Mechanism Goals1169134
 -Ref: Extension New Mechanism Goals-Footnote-11172494
 -Node: Extension Other Design Decisions1172683
 -Node: Extension Future Growth1174791
 -Node: Old Extension Mechanism1175627
 -Node: Notes summary1177389
 -Node: Basic Concepts1178575
 -Node: Basic High Level1179256
 -Ref: figure-general-flow1179528
 -Ref: figure-process-flow1180127
 -Ref: Basic High Level-Footnote-11183356
 -Node: Basic Data Typing1183541
 -Node: Glossary1186869
 -Node: Copying1218798
 -Node: GNU Free Documentation License1256354
 -Node: Index1281490
 +Node: Foreword342451
 +Node: Foreword446895
 +Node: Preface48426
 +Ref: Preface-Footnote-151297
 +Ref: Preface-Footnote-251404
 +Ref: Preface-Footnote-351637
 +Node: History51779
 +Node: Names54130
 +Ref: Names-Footnote-155224
 +Node: This Manual55370
 +Ref: This Manual-Footnote-161870
 +Node: Conventions61970
 +Node: Manual History64307
 +Ref: Manual History-Footnote-167300
 +Ref: Manual History-Footnote-267341
 +Node: How To Contribute67415
 +Node: Acknowledgments68544
 +Node: Getting Started73410
 +Node: Running gawk75849
 +Node: One-shot77039
 +Node: Read Terminal78303
 +Node: Long80334
 +Node: Executable Scripts81847
 +Ref: Executable Scripts-Footnote-184636
 +Node: Comments84739
 +Node: Quoting87221
 +Node: DOS Quoting92739
 +Node: Sample Data Files93414
 +Node: Very Simple96009
 +Node: Two Rules100908
 +Node: More Complex102794
 +Node: Statements/Lines105656
 +Ref: Statements/Lines-Footnote-1110111
 +Node: Other Features110376
 +Node: When111312
 +Ref: When-Footnote-1113066
 +Node: Intro Summary113131
 +Node: Invoking Gawk114015
 +Node: Command Line115529
 +Node: Options116327
 +Ref: Options-Footnote-1132122
 +Ref: Options-Footnote-2132351
 +Node: Other Arguments132376
 +Node: Naming Standard Input135324
 +Node: Environment Variables136417
 +Node: AWKPATH Variable136975
 +Ref: AWKPATH Variable-Footnote-1140382
 +Ref: AWKPATH Variable-Footnote-2140427
 +Node: AWKLIBPATH Variable140687
 +Node: Other Environment Variables141943
 +Node: Exit Status145574
 +Node: Include Files146250
 +Node: Loading Shared Libraries149839
 +Node: Obsolete151266
 +Node: Undocumented151958
 +Node: Invoking Summary152225
 +Node: Regexp153888
 +Node: Regexp Usage155342
 +Node: Escape Sequences157379
 +Node: Regexp Operators163608
 +Ref: Regexp Operators-Footnote-1171018
 +Ref: Regexp Operators-Footnote-2171165
 +Node: Bracket Expressions171263
 +Ref: table-char-classes173278
 +Node: Leftmost Longest176220
 +Node: Computed Regexps177522
 +Node: GNU Regexp Operators180951
 +Node: Case-sensitivity184623
 +Ref: Case-sensitivity-Footnote-1187508
 +Ref: Case-sensitivity-Footnote-2187743
 +Node: Regexp Summary187851
 +Node: Reading Files189318
 +Node: Records191480
 +Node: awk split records192213
 +Node: gawk split records197142
 +Ref: gawk split records-Footnote-1201681
 +Node: Fields201718
 +Ref: Fields-Footnote-1204496
 +Node: Nonconstant Fields204582
 +Ref: Nonconstant Fields-Footnote-1206820
 +Node: Changing Fields207023
 +Node: Field Separators212954
 +Node: Default Field Splitting215658
 +Node: Regexp Field Splitting216775
 +Node: Single Character Fields220125
 +Node: Command Line Field Separator221184
 +Node: Full Line Fields224401
 +Ref: Full Line Fields-Footnote-1225922
 +Ref: Full Line Fields-Footnote-2225968
 +Node: Field Splitting Summary226069
 +Node: Constant Size228143
 +Node: Splitting By Content232722
 +Ref: Splitting By Content-Footnote-1236687
 +Node: Multiple Line236850
 +Ref: Multiple Line-Footnote-1242731
 +Node: Getline242910
 +Node: Plain Getline245380
 +Node: Getline/Variable248020
 +Node: Getline/File249169
 +Node: Getline/Variable/File250554
 +Ref: Getline/Variable/File-Footnote-1252157
 +Node: Getline/Pipe252244
 +Node: Getline/Variable/Pipe254922
 +Node: Getline/Coprocess256053
 +Node: Getline/Variable/Coprocess257317
 +Node: Getline Notes258056
 +Node: Getline Summary260850
 +Ref: table-getline-variants261262
 +Node: Read Timeout262091
 +Ref: Read Timeout-Footnote-1265994
 +Node: Retrying Input266052
 +Node: Command-line directories267251
 +Node: Input Summary268158
 +Node: Input Exercises271543
 +Node: Printing272271
 +Node: Print274106
 +Node: Print Examples275563
 +Node: Output Separators278342
 +Node: OFMT280360
 +Node: Printf281715
 +Node: Basic Printf282500
 +Node: Control Letters284072
 +Node: Format Modifiers288057
 +Node: Printf Examples294063
 +Node: Redirection296549
 +Node: Special FD303387
 +Ref: Special FD-Footnote-1306553
 +Node: Special Files306627
 +Node: Other Inherited Files307244
 +Node: Special Network308244
 +Node: Special Caveats309106
 +Node: Close Files And Pipes310055
 +Ref: Close Files And Pipes-Footnote-1317240
 +Ref: Close Files And Pipes-Footnote-2317388
 +Node: Nonfatal317538
 +Node: Output Summary319863
 +Node: Output Exercises321084
 +Node: Expressions321764
 +Node: Values322953
 +Node: Constants323630
 +Node: Scalar Constants324321
 +Ref: Scalar Constants-Footnote-1325183
 +Node: Nondecimal-numbers325433
 +Node: Regexp Constants328443
 +Node: Using Constant Regexps328969
 +Node: Variables332132
 +Node: Using Variables332789
 +Node: Assignment Options334700
 +Node: Conversion336575
 +Node: Strings And Numbers337099
 +Ref: Strings And Numbers-Footnote-1340164
 +Node: Locale influences conversions340273
 +Ref: table-locale-affects343019
 +Node: All Operators343611
 +Node: Arithmetic Ops344240
 +Node: Concatenation346745
 +Ref: Concatenation-Footnote-1349564
 +Node: Assignment Ops349671
 +Ref: table-assign-ops354650
 +Node: Increment Ops355960
 +Node: Truth Values and Conditions359391
 +Node: Truth Values360474
 +Node: Typing and Comparison361523
 +Node: Variable Typing362339
 +Node: Comparison Operators366006
 +Ref: table-relational-ops366416
 +Node: POSIX String Comparison369911
 +Ref: POSIX String Comparison-Footnote-1370983
 +Node: Boolean Ops371122
 +Ref: Boolean Ops-Footnote-1375600
 +Node: Conditional Exp375691
 +Node: Function Calls377429
 +Node: Precedence381309
 +Node: Locales384969
 +Node: Expressions Summary386601
 +Node: Patterns and Actions389172
 +Node: Pattern Overview390292
 +Node: Regexp Patterns391971
 +Node: Expression Patterns392514
 +Node: Ranges396294
 +Node: BEGIN/END399401
 +Node: Using BEGIN/END400162
 +Ref: Using BEGIN/END-Footnote-1402898
 +Node: I/O And BEGIN/END403004
 +Node: BEGINFILE/ENDFILE405319
 +Node: Empty408216
 +Node: Using Shell Variables408533
 +Node: Action Overview410806
 +Node: Statements413132
 +Node: If Statement414980
 +Node: While Statement416475
 +Node: Do Statement418503
 +Node: For Statement419651
 +Node: Switch Statement422809
 +Node: Break Statement425191
 +Node: Continue Statement427284
 +Node: Next Statement429111
 +Node: Nextfile Statement431492
 +Node: Exit Statement434120
 +Node: Built-in Variables436531
 +Node: User-modified437664
 +Ref: User-modified-Footnote-1445298
 +Node: Auto-set445360
 +Ref: Auto-set-Footnote-1459593
 +Ref: Auto-set-Footnote-2459798
 +Node: ARGC and ARGV459854
 +Node: Pattern Action Summary464072
 +Node: Arrays466505
 +Node: Array Basics467834
 +Node: Array Intro468678
 +Ref: figure-array-elements470615
 +Ref: Array Intro-Footnote-1473238
 +Node: Reference to Elements473366
 +Node: Assigning Elements475828
 +Node: Array Example476319
 +Node: Scanning an Array478078
 +Node: Controlling Scanning481101
 +Ref: Controlling Scanning-Footnote-1486495
 +Node: Numeric Array Subscripts486811
 +Node: Uninitialized Subscripts488996
 +Node: Delete490613
 +Ref: Delete-Footnote-1493362
 +Node: Multidimensional493419
 +Node: Multiscanning496516
 +Node: Arrays of Arrays498105
 +Node: Arrays Summary502859
 +Node: Functions504950
 +Node: Built-in505989
 +Node: Calling Built-in507067
 +Node: Numeric Functions509062
- Ref: Numeric Functions-Footnote-1513880
- Ref: Numeric Functions-Footnote-2514237
- Ref: Numeric Functions-Footnote-3514285
- Node: String Functions514557
- Ref: String Functions-Footnote-1538058
- Ref: String Functions-Footnote-2538187
- Ref: String Functions-Footnote-3538435
- Node: Gory Details538522
- Ref: table-sub-escapes540303
- Ref: table-sub-proposed541818
- Ref: table-posix-sub543180
- Ref: table-gensub-escapes544717
- Ref: Gory Details-Footnote-1545550
- Node: I/O Functions545701
- Ref: I/O Functions-Footnote-1552937
- Node: Time Functions553084
- Ref: Time Functions-Footnote-1563593
- Ref: Time Functions-Footnote-2563661
- Ref: Time Functions-Footnote-3563819
- Ref: Time Functions-Footnote-4563930
- Ref: Time Functions-Footnote-5564042
- Ref: Time Functions-Footnote-6564269
- Node: Bitwise Functions564535
- Ref: table-bitwise-ops565097
- Ref: Bitwise Functions-Footnote-1569425
- Node: Type Functions569597
- Node: I18N Functions570749
- Node: User-defined572396
- Node: Definition Syntax573201
- Ref: Definition Syntax-Footnote-1578860
- Node: Function Example578931
- Ref: Function Example-Footnote-1581852
- Node: Function Caveats581874
- Node: Calling A Function582392
- Node: Variable Scope583350
- Node: Pass By Value/Reference586343
- Node: Return Statement589840
- Node: Dynamic Typing592819
- Node: Indirect Calls593748
- Ref: Indirect Calls-Footnote-1603613
- Node: Functions Summary603741
- Node: Library Functions606443
- Ref: Library Functions-Footnote-1610051
- Ref: Library Functions-Footnote-2610194
- Node: Library Names610365
- Ref: Library Names-Footnote-1613823
- Ref: Library Names-Footnote-2614046
- Node: General Functions614132
- Node: Strtonum Function615235
- Node: Assert Function618257
- Node: Round Function621581
- Node: Cliff Random Function623122
- Node: Ordinal Functions624138
- Ref: Ordinal Functions-Footnote-1627201
- Ref: Ordinal Functions-Footnote-2627453
- Node: Join Function627664
- Ref: Join Function-Footnote-1629434
- Node: Getlocaltime Function629634
- Node: Readfile Function633378
- Node: Shell Quoting635350
- Node: Data File Management636751
- Node: Filetrans Function637383
- Node: Rewind Function641479
- Node: File Checking642865
- Ref: File Checking-Footnote-1644198
- Node: Empty Files644399
- Node: Ignoring Assigns646378
- Node: Getopt Function647928
- Ref: Getopt Function-Footnote-1659392
- Node: Passwd Functions659592
- Ref: Passwd Functions-Footnote-1668432
- Node: Group Functions668520
- Ref: Group Functions-Footnote-1676417
- Node: Walking Arrays676622
- Node: Library Functions Summary679628
- Node: Library Exercises681030
- Node: Sample Programs682310
- Node: Running Examples683080
- Node: Clones683808
- Node: Cut Program685032
- Node: Egrep Program694752
- Ref: Egrep Program-Footnote-1702255
- Node: Id Program702365
- Node: Split Program706041
- Ref: Split Program-Footnote-1709495
- Node: Tee Program709623
- Node: Uniq Program712412
- Node: Wc Program719831
- Ref: Wc Program-Footnote-1724081
- Node: Miscellaneous Programs724175
- Node: Dupword Program725388
- Node: Alarm Program727419
- Node: Translate Program732224
- Ref: Translate Program-Footnote-1736787
- Node: Labels Program737057
- Ref: Labels Program-Footnote-1740408
- Node: Word Sorting740492
- Node: History Sorting744562
- Node: Extract Program746397
- Node: Simple Sed753921
- Node: Igawk Program756991
- Ref: Igawk Program-Footnote-1771317
- Ref: Igawk Program-Footnote-2771518
- Ref: Igawk Program-Footnote-3771640
- Node: Anagram Program771755
- Node: Signature Program774816
- Node: Programs Summary776063
- Node: Programs Exercises777284
- Ref: Programs Exercises-Footnote-1781415
- Node: Advanced Features781506
- Node: Nondecimal Data783488
- Node: Array Sorting785078
- Node: Controlling Array Traversal785778
- Ref: Controlling Array Traversal-Footnote-1794144
- Node: Array Sorting Functions794262
- Ref: Array Sorting Functions-Footnote-1798148
- Node: Two-way I/O798344
- Ref: Two-way I/O-Footnote-1803289
- Ref: Two-way I/O-Footnote-2803475
- Node: TCP/IP Networking803557
- Node: Profiling806429
- Node: Advanced Features Summary814700
- Node: Internationalization816633
- Node: I18N and L10N818113
- Node: Explaining gettext818799
- Ref: Explaining gettext-Footnote-1823824
- Ref: Explaining gettext-Footnote-2824008
- Node: Programmer i18n824173
- Ref: Programmer i18n-Footnote-1829049
- Node: Translator i18n829098
- Node: String Extraction829892
- Ref: String Extraction-Footnote-1831023
- Node: Printf Ordering831109
- Ref: Printf Ordering-Footnote-1833895
- Node: I18N Portability833959
- Ref: I18N Portability-Footnote-1836415
- Node: I18N Example836478
- Ref: I18N Example-Footnote-1839281
- Node: Gawk I18N839353
- Node: I18N Summary839997
- Node: Debugger841337
- Node: Debugging842359
- Node: Debugging Concepts842800
- Node: Debugging Terms844610
- Node: Awk Debugging847182
- Node: Sample Debugging Session848088
- Node: Debugger Invocation848622
- Node: Finding The Bug850007
- Node: List of Debugger Commands856486
- Node: Breakpoint Control857818
- Node: Debugger Execution Control861495
- Node: Viewing And Changing Data864854
- Node: Execution Stack868230
- Node: Debugger Info869865
- Node: Miscellaneous Debugger Commands873910
- Node: Readline Support878911
- Node: Limitations879805
- Node: Debugging Summary881920
- Node: Arbitrary Precision Arithmetic883094
- Node: Computer Arithmetic884510
- Ref: table-numeric-ranges888087
- Ref: Computer Arithmetic-Footnote-1888611
- Node: Math Definitions888668
- Ref: table-ieee-formats891963
- Ref: Math Definitions-Footnote-1892567
- Node: MPFR features892672
- Node: FP Math Caution894343
- Ref: FP Math Caution-Footnote-1895393
- Node: Inexactness of computations895762
- Node: Inexact representation896721
- Node: Comparing FP Values898079
- Node: Errors accumulate899161
- Node: Getting Accuracy900593
- Node: Try To Round903297
- Node: Setting precision904196
- Ref: table-predefined-precision-strings904880
- Node: Setting the rounding mode906709
- Ref: table-gawk-rounding-modes907073
- Ref: Setting the rounding mode-Footnote-1910525
- Node: Arbitrary Precision Integers910704
- Ref: Arbitrary Precision Integers-Footnote-1915602
- Node: POSIX Floating Point Problems915751
- Ref: POSIX Floating Point Problems-Footnote-1919630
- Node: Floating point summary919668
- Node: Dynamic Extensions921855
- Node: Extension Intro923407
- Node: Plugin License924672
- Node: Extension Mechanism Outline925469
- Ref: figure-load-extension925897
- Ref: figure-register-new-function927377
- Ref: figure-call-new-function928381
- Node: Extension API Description930368
- Node: Extension API Functions Introduction931902
- Node: General Data Types936771
- Ref: General Data Types-Footnote-1942671
- Node: Memory Allocation Functions942970
- Ref: Memory Allocation Functions-Footnote-1945809
- Node: Constructor Functions945908
- Node: Registration Functions947647
- Node: Extension Functions948332
- Node: Exit Callback Functions950629
- Node: Extension Version String951877
- Node: Input Parsers952540
- Node: Output Wrappers962415
- Node: Two-way processors966928
- Node: Printing Messages969191
- Ref: Printing Messages-Footnote-1970267
- Node: Updating `ERRNO'970419
- Node: Requesting Values971159
- Ref: table-value-types-returned971886
- Node: Accessing Parameters972843
- Node: Symbol Table Access974077
- Node: Symbol table by name974591
- Node: Symbol table by cookie976611
- Ref: Symbol table by cookie-Footnote-1980756
- Node: Cached values980819
- Ref: Cached values-Footnote-1984315
- Node: Array Manipulation984406
- Ref: Array Manipulation-Footnote-1985496
- Node: Array Data Types985533
- Ref: Array Data Types-Footnote-1988188
- Node: Array Functions988280
- Node: Flattening Arrays992139
- Node: Creating Arrays999041
- Node: Redirection API1003812
- Node: Extension API Variables1006637
- Node: Extension Versioning1007270
- Node: Extension API Informational Variables1009161
- Node: Extension API Boilerplate1010226
- Node: Finding Extensions1014035
- Node: Extension Example1014595
- Node: Internal File Description1015367
- Node: Internal File Ops1019434
- Ref: Internal File Ops-Footnote-11031185
- Node: Using Internal File Ops1031325
- Ref: Using Internal File Ops-Footnote-11033708
- Node: Extension Samples1033981
- Node: Extension Sample File Functions1035509
- Node: Extension Sample Fnmatch1043190
- Node: Extension Sample Fork1044678
- Node: Extension Sample Inplace1045893
- Node: Extension Sample Ord1047979
- Node: Extension Sample Readdir1048815
- Ref: table-readdir-file-types1049692
- Node: Extension Sample Revout1050503
- Node: Extension Sample Rev2way1051092
- Node: Extension Sample Read write array1051832
- Node: Extension Sample Readfile1053772
- Node: Extension Sample Time1054867
- Node: Extension Sample API Tests1056215
- Node: gawkextlib1056706
- Node: Extension summary1059407
- Node: Extension Exercises1063096
- Node: Language History1064592
- Node: V7/SVR3.11066248
- Node: SVR41068401
- Node: POSIX1069835
- Node: BTL1071216
- Node: POSIX/GNU1071947
- Node: Feature History1077783
- Node: Common Extensions1091577
- Node: Ranges and Locales1092949
- Ref: Ranges and Locales-Footnote-11097568
- Ref: Ranges and Locales-Footnote-21097595
- Ref: Ranges and Locales-Footnote-31097830
- Node: Contributors1098051
- Node: History summary1103591
- Node: Installation1104970
- Node: Gawk Distribution1105916
- Node: Getting1106400
- Node: Extracting1107223
- Node: Distribution contents1108860
- Node: Unix Installation1114962
- Node: Quick Installation1115645
- Node: Shell Startup Files1118056
- Node: Additional Configuration Options1119135
- Node: Configuration Philosophy1120939
- Node: Non-Unix Installation1123308
- Node: PC Installation1123766
- Node: PC Binary Installation1125086
- Node: PC Compiling1126934
- Ref: PC Compiling-Footnote-11129955
- Node: PC Testing1130064
- Node: PC Using1131240
- Node: Cygwin1135355
- Node: MSYS1136125
- Node: VMS Installation1136626
- Node: VMS Compilation1137418
- Ref: VMS Compilation-Footnote-11138647
- Node: VMS Dynamic Extensions1138705
- Node: VMS Installation Details1140389
- Node: VMS Running1142640
- Node: VMS GNV1145480
- Node: VMS Old Gawk1146215
- Node: Bugs1146685
- Node: Other Versions1150574
- Node: Installation summary1157008
- Node: Notes1158067
- Node: Compatibility Mode1158932
- Node: Additions1159714
- Node: Accessing The Source1160639
- Node: Adding Code1162074
- Node: New Ports1168231
- Node: Derived Files1172713
- Ref: Derived Files-Footnote-11178188
- Ref: Derived Files-Footnote-21178222
- Ref: Derived Files-Footnote-31178818
- Node: Future Extensions1178932
- Node: Implementation Limitations1179538
- Node: Extension Design1180786
- Node: Old Extension Problems1181940
- Ref: Old Extension Problems-Footnote-11183457
- Node: Extension New Mechanism Goals1183514
- Ref: Extension New Mechanism Goals-Footnote-11186874
- Node: Extension Other Design Decisions1187063
- Node: Extension Future Growth1189171
- Node: Old Extension Mechanism1190007
- Node: Notes summary1191769
- Node: Basic Concepts1192955
- Node: Basic High Level1193636
- Ref: figure-general-flow1193908
- Ref: figure-process-flow1194507
- Ref: Basic High Level-Footnote-11197736
- Node: Basic Data Typing1197921
- Node: Glossary1201249
- Node: Copying1233178
- Node: GNU Free Documentation License1270734
- Node: Index1295870
++Ref: Numeric Functions-Footnote-1513892
++Ref: Numeric Functions-Footnote-2514249
++Ref: Numeric Functions-Footnote-3514297
++Node: String Functions514569
++Ref: String Functions-Footnote-1538070
++Ref: String Functions-Footnote-2538199
++Ref: String Functions-Footnote-3538447
++Node: Gory Details538534
++Ref: table-sub-escapes540315
++Ref: table-sub-proposed541830
++Ref: table-posix-sub543192
++Ref: table-gensub-escapes544729
++Ref: Gory Details-Footnote-1545562
++Node: I/O Functions545713
++Ref: I/O Functions-Footnote-1552949
++Node: Time Functions553096
++Ref: Time Functions-Footnote-1563605
++Ref: Time Functions-Footnote-2563673
++Ref: Time Functions-Footnote-3563831
++Ref: Time Functions-Footnote-4563942
++Ref: Time Functions-Footnote-5564054
++Ref: Time Functions-Footnote-6564281
++Node: Bitwise Functions564547
++Ref: table-bitwise-ops565109
++Ref: Bitwise Functions-Footnote-1569437
++Node: Type Functions569609
++Node: I18N Functions570761
++Node: User-defined572408
++Node: Definition Syntax573213
++Ref: Definition Syntax-Footnote-1578872
++Node: Function Example578943
++Ref: Function Example-Footnote-1581864
++Node: Function Caveats581886
++Node: Calling A Function582404
++Node: Variable Scope583362
++Node: Pass By Value/Reference586355
++Node: Return Statement589852
++Node: Dynamic Typing592831
++Node: Indirect Calls593760
++Ref: Indirect Calls-Footnote-1604003
++Node: Functions Summary604131
++Node: Library Functions606833
++Ref: Library Functions-Footnote-1610441
++Ref: Library Functions-Footnote-2610584
++Node: Library Names610755
++Ref: Library Names-Footnote-1614213
++Ref: Library Names-Footnote-2614436
++Node: General Functions614522
++Node: Strtonum Function615625
++Node: Assert Function618647
++Node: Round Function621971
++Node: Cliff Random Function623512
++Node: Ordinal Functions624528
++Ref: Ordinal Functions-Footnote-1627591
++Ref: Ordinal Functions-Footnote-2627843
++Node: Join Function628054
++Ref: Join Function-Footnote-1629824
++Node: Getlocaltime Function630024
++Node: Readfile Function633768
++Node: Shell Quoting635740
++Node: Data File Management637141
++Node: Filetrans Function637773
++Node: Rewind Function641869
++Node: File Checking643255
++Ref: File Checking-Footnote-1644588
++Node: Empty Files644789
++Node: Ignoring Assigns646768
++Node: Getopt Function648318
++Ref: Getopt Function-Footnote-1659782
++Node: Passwd Functions659982
++Ref: Passwd Functions-Footnote-1668822
++Node: Group Functions668910
++Ref: Group Functions-Footnote-1676807
++Node: Walking Arrays677012
++Node: Library Functions Summary680018
++Node: Library Exercises681420
++Node: Sample Programs682700
++Node: Running Examples683470
++Node: Clones684198
++Node: Cut Program685422
++Node: Egrep Program695142
++Ref: Egrep Program-Footnote-1702645
++Node: Id Program702755
++Node: Split Program706431
++Ref: Split Program-Footnote-1709885
++Node: Tee Program710013
++Node: Uniq Program712802
++Node: Wc Program720221
++Ref: Wc Program-Footnote-1724471
++Node: Miscellaneous Programs724565
++Node: Dupword Program725778
++Node: Alarm Program727809
++Node: Translate Program732614
++Ref: Translate Program-Footnote-1737177
++Node: Labels Program737447
++Ref: Labels Program-Footnote-1740798
++Node: Word Sorting740882
++Node: History Sorting744952
++Node: Extract Program746787
++Node: Simple Sed754311
++Node: Igawk Program757381
++Ref: Igawk Program-Footnote-1771707
++Ref: Igawk Program-Footnote-2771908
++Ref: Igawk Program-Footnote-3772030
++Node: Anagram Program772145
++Node: Signature Program775206
++Node: Programs Summary776453
++Node: Programs Exercises777674
++Ref: Programs Exercises-Footnote-1781805
++Node: Advanced Features781896
++Node: Nondecimal Data783878
++Node: Array Sorting785468
++Node: Controlling Array Traversal786168
++Ref: Controlling Array Traversal-Footnote-1794534
++Node: Array Sorting Functions794652
++Ref: Array Sorting Functions-Footnote-1798538
++Node: Two-way I/O798734
++Ref: Two-way I/O-Footnote-1803679
++Ref: Two-way I/O-Footnote-2803865
++Node: TCP/IP Networking803947
++Node: Profiling806819
++Node: Advanced Features Summary815090
++Node: Internationalization817023
++Node: I18N and L10N818503
++Node: Explaining gettext819189
++Ref: Explaining gettext-Footnote-1824214
++Ref: Explaining gettext-Footnote-2824398
++Node: Programmer i18n824563
++Ref: Programmer i18n-Footnote-1829439
++Node: Translator i18n829488
++Node: String Extraction830282
++Ref: String Extraction-Footnote-1831413
++Node: Printf Ordering831499
++Ref: Printf Ordering-Footnote-1834285
++Node: I18N Portability834349
++Ref: I18N Portability-Footnote-1836805
++Node: I18N Example836868
++Ref: I18N Example-Footnote-1839671
++Node: Gawk I18N839743
++Node: I18N Summary840387
++Node: Debugger841727
++Node: Debugging842749
++Node: Debugging Concepts843190
++Node: Debugging Terms845000
++Node: Awk Debugging847572
++Node: Sample Debugging Session848478
++Node: Debugger Invocation849012
++Node: Finding The Bug850397
++Node: List of Debugger Commands856876
++Node: Breakpoint Control858208
++Node: Debugger Execution Control861885
++Node: Viewing And Changing Data865244
++Node: Execution Stack868620
++Node: Debugger Info870255
++Node: Miscellaneous Debugger Commands874300
++Node: Readline Support879301
++Node: Limitations880195
++Node: Debugging Summary882310
++Node: Arbitrary Precision Arithmetic883484
++Node: Computer Arithmetic884900
++Ref: table-numeric-ranges888477
++Ref: Computer Arithmetic-Footnote-1889001
++Node: Math Definitions889058
++Ref: table-ieee-formats892353
++Ref: Math Definitions-Footnote-1892957
++Node: MPFR features893062
++Node: FP Math Caution894733
++Ref: FP Math Caution-Footnote-1895783
++Node: Inexactness of computations896152
++Node: Inexact representation897111
++Node: Comparing FP Values898469
++Node: Errors accumulate899551
++Node: Getting Accuracy900983
++Node: Try To Round903687
++Node: Setting precision904586
++Ref: table-predefined-precision-strings905270
++Node: Setting the rounding mode907099
++Ref: table-gawk-rounding-modes907463
++Ref: Setting the rounding mode-Footnote-1910915
++Node: Arbitrary Precision Integers911094
++Ref: Arbitrary Precision Integers-Footnote-1915992
++Node: POSIX Floating Point Problems916141
++Ref: POSIX Floating Point Problems-Footnote-1920020
++Node: Floating point summary920058
++Node: Dynamic Extensions922245
++Node: Extension Intro923797
++Node: Plugin License925062
++Node: Extension Mechanism Outline925859
++Ref: figure-load-extension926287
++Ref: figure-register-new-function927767
++Ref: figure-call-new-function928771
++Node: Extension API Description930758
++Node: Extension API Functions Introduction932292
++Node: General Data Types937161
++Ref: General Data Types-Footnote-1943061
++Node: Memory Allocation Functions943360
++Ref: Memory Allocation Functions-Footnote-1946199
++Node: Constructor Functions946298
++Node: Registration Functions948037
++Node: Extension Functions948722
++Node: Exit Callback Functions951019
++Node: Extension Version String952267
++Node: Input Parsers952930
++Node: Output Wrappers962805
++Node: Two-way processors967318
++Node: Printing Messages969581
++Ref: Printing Messages-Footnote-1970657
++Node: Updating `ERRNO'970809
++Node: Requesting Values971549
++Ref: table-value-types-returned972276
++Node: Accessing Parameters973233
++Node: Symbol Table Access974467
++Node: Symbol table by name974981
++Node: Symbol table by cookie977001
++Ref: Symbol table by cookie-Footnote-1981146
++Node: Cached values981209
++Ref: Cached values-Footnote-1984705
++Node: Array Manipulation984796
++Ref: Array Manipulation-Footnote-1985886
++Node: Array Data Types985923
++Ref: Array Data Types-Footnote-1988578
++Node: Array Functions988670
++Node: Flattening Arrays992529
++Node: Creating Arrays999431
++Node: Redirection API1004202
++Node: Extension API Variables1007027
++Node: Extension Versioning1007660
++Node: Extension API Informational Variables1009551
++Node: Extension API Boilerplate1010616
++Node: Finding Extensions1014425
++Node: Extension Example1014985
++Node: Internal File Description1015757
++Node: Internal File Ops1019824
++Ref: Internal File Ops-Footnote-11031575
++Node: Using Internal File Ops1031715
++Ref: Using Internal File Ops-Footnote-11034098
++Node: Extension Samples1034371
++Node: Extension Sample File Functions1035899
++Node: Extension Sample Fnmatch1043580
++Node: Extension Sample Fork1045068
++Node: Extension Sample Inplace1046283
++Node: Extension Sample Ord1048369
++Node: Extension Sample Readdir1049205
++Ref: table-readdir-file-types1050082
++Node: Extension Sample Revout1050893
++Node: Extension Sample Rev2way1051482
++Node: Extension Sample Read write array1052222
++Node: Extension Sample Readfile1054162
++Node: Extension Sample Time1055257
++Node: Extension Sample API Tests1056605
++Node: gawkextlib1057096
++Node: Extension summary1059797
++Node: Extension Exercises1063486
++Node: Language History1064982
++Node: V7/SVR3.11066638
++Node: SVR41068791
++Node: POSIX1070225
++Node: BTL1071606
++Node: POSIX/GNU1072337
++Node: Feature History1078173
++Node: Common Extensions1091967
++Node: Ranges and Locales1093339
++Ref: Ranges and Locales-Footnote-11097958
++Ref: Ranges and Locales-Footnote-21097985
++Ref: Ranges and Locales-Footnote-31098220
++Node: Contributors1098441
++Node: History summary1103981
++Node: Installation1105360
++Node: Gawk Distribution1106306
++Node: Getting1106790
++Node: Extracting1107613
++Node: Distribution contents1109250
++Node: Unix Installation1115352
++Node: Quick Installation1116035
++Node: Shell Startup Files1118446
++Node: Additional Configuration Options1119525
++Node: Configuration Philosophy1121329
++Node: Non-Unix Installation1123698
++Node: PC Installation1124156
++Node: PC Binary Installation1125476
++Node: PC Compiling1127324
++Ref: PC Compiling-Footnote-11130345
++Node: PC Testing1130454
++Node: PC Using1131630
++Node: Cygwin1135745
++Node: MSYS1136515
++Node: VMS Installation1137016
++Node: VMS Compilation1137808
++Ref: VMS Compilation-Footnote-11139037
++Node: VMS Dynamic Extensions1139095
++Node: VMS Installation Details1140779
++Node: VMS Running1143030
++Node: VMS GNV1145870
++Node: VMS Old Gawk1146605
++Node: Bugs1147075
++Node: Other Versions1150964
++Node: Installation summary1157398
++Node: Notes1158457
++Node: Compatibility Mode1159322
++Node: Additions1160104
++Node: Accessing The Source1161029
++Node: Adding Code1162464
++Node: New Ports1168621
++Node: Derived Files1173103
++Ref: Derived Files-Footnote-11178578
++Ref: Derived Files-Footnote-21178612
++Ref: Derived Files-Footnote-31179208
++Node: Future Extensions1179322
++Node: Implementation Limitations1179928
++Node: Extension Design1181176
++Node: Old Extension Problems1182330
++Ref: Old Extension Problems-Footnote-11183847
++Node: Extension New Mechanism Goals1183904
++Ref: Extension New Mechanism Goals-Footnote-11187264
++Node: Extension Other Design Decisions1187453
++Node: Extension Future Growth1189561
++Node: Old Extension Mechanism1190397
++Node: Notes summary1192159
++Node: Basic Concepts1193345
++Node: Basic High Level1194026
++Ref: figure-general-flow1194298
++Ref: figure-process-flow1194897
++Ref: Basic High Level-Footnote-11198126
++Node: Basic Data Typing1198311
++Node: Glossary1201639
++Node: Copying1233568
++Node: GNU Free Documentation License1271124
++Node: Index1296260
  
  End Tag Table
diff --cc test/ChangeLog
index 8aedf6f,292e961..0c21218
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@@ -1,10 -1,12 +1,19 @@@
+ 2015-03-31         Arnold D. Robbins     <address@hidden>
+ 
+       * Makefile.am (indirectbuiltin): New test.
+       * indirectbuiltin.awk, indirectbuiltin.ok: New files.
+ 
 +2015-03-27         Arnold D. Robbins     <address@hidden>
 +
 +      * Makefile.am: Remove defvar test and reference to files; test
 +      code moved into extension/testext.c.
 +      * defvar.awk, defvar.ok: Removed.
 +      * testext.ok: Updated.
 +
+ 2015-03-24         Arnold D. Robbins     <address@hidden>
+ 
+       * id.ok: Update after fixes in code.
+ 
  2015-03-24         Andrew J. Schorr     <address@hidden>
  
        * Makefile.am (EXTRA_DIST): Add exitval3.awk and exitval3.ok.

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

Summary of changes:
 ChangeLog                |   36 +++
 awk.h                    |    5 +
 awkgram.c                |  739 +++++++++++++++++++++++-----------------------
 awkgram.y                |   21 +-
 builtin.c                |  140 +++++++++
 doc/ChangeLog            |    4 +-
 doc/gawk.info            |  676 +++++++++++++++++++++---------------------
 doc/gawk.texi            |   25 ++-
 doc/gawktexi.in          |   25 ++-
 eval.c                   |    2 +-
 interpret.h              |   10 +-
 test/ChangeLog           |    9 +
 test/Makefile.am         |    4 +-
 test/Makefile.in         |    9 +-
 test/Maketests           |    5 +
 test/id.ok               |    1 +
 test/indirectbuiltin.awk |  371 +++++++++++++++++++++++
 test/indirectbuiltin.ok  |   43 +++
 18 files changed, 1407 insertions(+), 718 deletions(-)
 create mode 100644 test/indirectbuiltin.awk
 create mode 100644 test/indirectbuiltin.ok


hooks/post-receive
-- 
gawk



reply via email to

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