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-1068-g86cd3e


From: Arnold Robbins
Subject: [gawk-diffs] [SCM] gawk branch, master, updated. gawk-4.1.0-1068-g86cd3e2
Date: Fri, 30 Jan 2015 08:12:13 +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  86cd3e2cb5117c5800997d3bb363b6d5470be3ce (commit)
       via  1bd1b885c7dd16b5e4ab78c040312f6f7d742784 (commit)
      from  2fc1e9855f7983fb75a7f72d3ec97eec467e4709 (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=86cd3e2cb5117c5800997d3bb363b6d5470be3ce

commit 86cd3e2cb5117c5800997d3bb363b6d5470be3ce
Merge: 2fc1e98 1bd1b88
Author: Arnold D. Robbins <address@hidden>
Date:   Fri Jan 30 10:11:59 2015 +0200

    Merge branch 'gawk-4.1-stable'

diff --cc awkgram.c
index 733776c,9a9ca13..2d07115
--- a/awkgram.c
+++ b/awkgram.c
@@@ -124,9 -124,8 +124,10 @@@ static void check_funcs(void)
  
  static ssize_t read_one_line(int fd, void *buffer, size_t count);
  static int one_line_close(int fd);
 +static void split_comment(void);
 +static void check_comment(void);
  
+ static bool at_seen = false;
  static bool want_source = false;
  static bool want_regexp = false;      /* lexical scanning kludge */
  static char *in_function;             /* parsing kludge */
@@@ -201,7 -192,7 +202,7 @@@ extern double fmod(double x, double y)
  
  #define YYSTYPE INSTRUCTION *
  
- #line 205 "awkgram.c" /* yacc.c:339  */
 -#line 196 "awkgram.c" /* yacc.c:339  */
++#line 206 "awkgram.c" /* yacc.c:339  */
  
  # ifndef YY_NULLPTR
  #  if defined __cplusplus && 201103L <= __cplusplus
@@@ -355,7 -346,7 +356,7 @@@ int yyparse (void)
  
  /* Copy the second part of user declarations.  */
  
- #line 359 "awkgram.c" /* yacc.c:358  */
 -#line 350 "awkgram.c" /* yacc.c:358  */
++#line 360 "awkgram.c" /* yacc.c:358  */
  
  #ifdef short
  # undef short
@@@ -657,25 -648,25 +658,25 @@@ static const yytype_uint8 yytranslate[
    /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
  static const yytype_uint16 yyrline[] =
  {
-        0,   204,   204,   206,   211,   212,   216,   228,   233,   244,
-      250,   255,   263,   271,   273,   278,   286,   288,   294,   302,
-      312,   342,   356,   370,   378,   389,   401,   403,   405,   411,
-      416,   417,   421,   456,   455,   489,   491,   496,   502,   530,
-      535,   536,   540,   542,   544,   551,   641,   683,   725,   838,
-      845,   852,   862,   871,   880,   889,   900,   916,   915,   939,
-      951,   951,  1049,  1049,  1082,  1112,  1118,  1119,  1125,  1126,
-     1133,  1138,  1150,  1164,  1166,  1174,  1179,  1181,  1189,  1191,
-     1200,  1201,  1209,  1214,  1214,  1225,  1229,  1237,  1238,  1241,
-     1243,  1248,  1249,  1258,  1259,  1264,  1269,  1275,  1277,  1279,
-     1286,  1287,  1293,  1294,  1299,  1301,  1306,  1308,  1316,  1321,
-     1330,  1337,  1339,  1341,  1357,  1367,  1374,  1376,  1381,  1383,
-     1385,  1393,  1395,  1400,  1402,  1407,  1409,  1411,  1461,  1463,
-     1465,  1467,  1469,  1471,  1473,  1475,  1489,  1494,  1499,  1524,
-     1530,  1532,  1534,  1536,  1538,  1540,  1545,  1549,  1581,  1583,
-     1589,  1595,  1608,  1609,  1610,  1615,  1620,  1624,  1628,  1643,
-     1656,  1661,  1697,  1715,  1716,  1722,  1723,  1728,  1730,  1737,
-     1754,  1771,  1773,  1780,  1785,  1793,  1803,  1815,  1824,  1828,
-     1832,  1836,  1840,  1844,  1847,  1849,  1853,  1857,  1861
 -       0,   195,   195,   197,   202,   203,   207,   219,   223,   234,
 -     240,   246,   255,   263,   265,   270,   278,   280,   286,   287,
 -     289,   315,   326,   337,   343,   352,   362,   364,   366,   372,
 -     380,   381,   385,   404,   403,   437,   439,   444,   445,   458,
 -     463,   464,   468,   470,   472,   479,   569,   611,   653,   766,
 -     773,   780,   790,   799,   808,   817,   828,   844,   843,   867,
 -     879,   879,   977,   977,  1010,  1040,  1046,  1047,  1053,  1054,
 -    1061,  1066,  1078,  1092,  1094,  1102,  1107,  1109,  1117,  1119,
 -    1128,  1129,  1137,  1142,  1142,  1153,  1157,  1165,  1166,  1169,
 -    1171,  1176,  1177,  1186,  1187,  1192,  1197,  1203,  1205,  1207,
 -    1214,  1215,  1221,  1222,  1227,  1229,  1234,  1236,  1244,  1249,
 -    1258,  1265,  1267,  1269,  1285,  1295,  1302,  1304,  1309,  1311,
 -    1313,  1321,  1323,  1328,  1330,  1335,  1337,  1339,  1389,  1391,
 -    1393,  1395,  1397,  1399,  1401,  1403,  1417,  1422,  1427,  1452,
 -    1458,  1460,  1462,  1464,  1466,  1468,  1473,  1477,  1509,  1511,
 -    1517,  1523,  1536,  1537,  1538,  1543,  1548,  1552,  1556,  1571,
 -    1584,  1589,  1626,  1655,  1656,  1662,  1663,  1668,  1670,  1677,
 -    1694,  1711,  1713,  1720,  1725,  1733,  1743,  1755,  1764,  1768,
 -    1772,  1776,  1780,  1784,  1787,  1789,  1793,  1797,  1801
++       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
  
@@@ -1848,24 -1839,24 +1849,24 @@@ yyreduce
    switch (yyn)
      {
          case 3:
- #line 207 "awkgram.y" /* yacc.c:1646  */
 -#line 198 "awkgram.y" /* yacc.c:1646  */
++#line 208 "awkgram.y" /* yacc.c:1646  */
      {
                rule = 0;
                yyerrok;
          }
- #line 1857 "awkgram.c" /* yacc.c:1646  */
 -#line 1848 "awkgram.c" /* yacc.c:1646  */
++#line 1858 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 5:
- #line 213 "awkgram.y" /* yacc.c:1646  */
 -#line 204 "awkgram.y" /* yacc.c:1646  */
++#line 214 "awkgram.y" /* yacc.c:1646  */
      {
                next_sourcefile();
          }
- #line 1865 "awkgram.c" /* yacc.c:1646  */
 -#line 1856 "awkgram.c" /* yacc.c:1646  */
++#line 1866 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 6:
- #line 217 "awkgram.y" /* yacc.c:1646  */
 -#line 208 "awkgram.y" /* yacc.c:1646  */
++#line 218 "awkgram.y" /* yacc.c:1646  */
      {
                rule = 0;
                /*
@@@ -1874,20 -1865,19 +1875,20 @@@
                 */
                /* yyerrok; */
          }
- #line 1878 "awkgram.c" /* yacc.c:1646  */
 -#line 1869 "awkgram.c" /* yacc.c:1646  */
++#line 1879 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 7:
- #line 229 "awkgram.y" /* yacc.c:1646  */
 -#line 220 "awkgram.y" /* yacc.c:1646  */
++#line 230 "awkgram.y" /* yacc.c:1646  */
      {
                (void) append_rule((yyvsp[-1]), (yyvsp[0]));
 +              first_rule = false;
          }
- #line 1887 "awkgram.c" /* yacc.c:1646  */
 -#line 1877 "awkgram.c" /* yacc.c:1646  */
++#line 1888 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 8:
- #line 234 "awkgram.y" /* yacc.c:1646  */
 -#line 224 "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]);
@@@ -1898,39 -1888,41 +1899,41 @@@
                } else          /* pattern rule with non-empty pattern */
                        (void) append_rule((yyvsp[-1]), NULL);
          }
- #line 1902 "awkgram.c" /* yacc.c:1646  */
 -#line 1892 "awkgram.c" /* yacc.c:1646  */
++#line 1903 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 9:
- #line 245 "awkgram.y" /* yacc.c:1646  */
 -#line 235 "awkgram.y" /* yacc.c:1646  */
++#line 246 "awkgram.y" /* yacc.c:1646  */
      {
                in_function = NULL;
                (void) mk_function((yyvsp[-1]), (yyvsp[0]));
                yyerrok;
          }
- #line 1912 "awkgram.c" /* yacc.c:1646  */
 -#line 1902 "awkgram.c" /* yacc.c:1646  */
++#line 1913 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 10:
- #line 251 "awkgram.y" /* yacc.c:1646  */
 -#line 241 "awkgram.y" /* yacc.c:1646  */
++#line 252 "awkgram.y" /* yacc.c:1646  */
      {
                want_source = false;
+               at_seen = false;
                yyerrok;
          }
- #line 1921 "awkgram.c" /* yacc.c:1646  */
 -#line 1912 "awkgram.c" /* yacc.c:1646  */
++#line 1923 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 11:
- #line 256 "awkgram.y" /* yacc.c:1646  */
 -#line 247 "awkgram.y" /* yacc.c:1646  */
++#line 258 "awkgram.y" /* yacc.c:1646  */
      {
                want_source = false;
+               at_seen = false;
                yyerrok;
          }
- #line 1930 "awkgram.c" /* yacc.c:1646  */
 -#line 1922 "awkgram.c" /* yacc.c:1646  */
++#line 1933 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 12:
- #line 264 "awkgram.y" /* yacc.c:1646  */
 -#line 256 "awkgram.y" /* yacc.c:1646  */
++#line 267 "awkgram.y" /* yacc.c:1646  */
      {
                if (include_source((yyvsp[0])) < 0)
                        YYABORT;
@@@ -1938,23 -1930,23 +1941,23 @@@
                bcfree((yyvsp[0]));
                (yyval) = NULL;
          }
- #line 1942 "awkgram.c" /* yacc.c:1646  */
 -#line 1934 "awkgram.c" /* yacc.c:1646  */
++#line 1945 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 13:
- #line 272 "awkgram.y" /* yacc.c:1646  */
 -#line 264 "awkgram.y" /* yacc.c:1646  */
++#line 275 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 1948 "awkgram.c" /* yacc.c:1646  */
 -#line 1940 "awkgram.c" /* yacc.c:1646  */
++#line 1951 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 14:
- #line 274 "awkgram.y" /* yacc.c:1646  */
 -#line 266 "awkgram.y" /* yacc.c:1646  */
++#line 277 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 1954 "awkgram.c" /* yacc.c:1646  */
 -#line 1946 "awkgram.c" /* yacc.c:1646  */
++#line 1957 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 15:
- #line 279 "awkgram.y" /* yacc.c:1646  */
 -#line 271 "awkgram.y" /* yacc.c:1646  */
++#line 282 "awkgram.y" /* yacc.c:1646  */
      {
                if (load_library((yyvsp[0])) < 0)
                        YYABORT;
@@@ -1962,49 -1954,35 +1965,49 @@@
                bcfree((yyvsp[0]));
                (yyval) = NULL;
          }
- #line 1966 "awkgram.c" /* yacc.c:1646  */
 -#line 1958 "awkgram.c" /* yacc.c:1646  */
++#line 1969 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 16:
- #line 287 "awkgram.y" /* yacc.c:1646  */
 -#line 279 "awkgram.y" /* yacc.c:1646  */
++#line 290 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 1972 "awkgram.c" /* yacc.c:1646  */
 -#line 1964 "awkgram.c" /* yacc.c:1646  */
++#line 1975 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 17:
- #line 289 "awkgram.y" /* yacc.c:1646  */
 -#line 281 "awkgram.y" /* yacc.c:1646  */
++#line 292 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 1978 "awkgram.c" /* yacc.c:1646  */
 -#line 1970 "awkgram.c" /* yacc.c:1646  */
++#line 1981 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 18:
- #line 294 "awkgram.y" /* yacc.c:1646  */
 -#line 286 "awkgram.y" /* yacc.c:1646  */
 -    { (yyval) = NULL; rule = Rule; }
 -#line 1976 "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 1991 "awkgram.c" /* yacc.c:1646  */
++#line 1994 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 19:
- #line 303 "awkgram.y" /* yacc.c:1646  */
 -#line 288 "awkgram.y" /* yacc.c:1646  */
 -    { (yyval) = (yyvsp[0]); rule = Rule; }
 -#line 1982 "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 2004 "awkgram.c" /* yacc.c:1646  */
++#line 2007 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 20:
- #line 313 "awkgram.y" /* yacc.c:1646  */
 -#line 290 "awkgram.y" /* yacc.c:1646  */
++#line 316 "awkgram.y" /* yacc.c:1646  */
      {
                INSTRUCTION *tp;
  
@@@ -2027,136 -2005,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 2038 "awkgram.c" /* yacc.c:1646  */
 -#line 2012 "awkgram.c" /* yacc.c:1646  */
++#line 2041 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 21:
- #line 343 "awkgram.y" /* yacc.c:1646  */
 -#line 316 "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 2056 "awkgram.c" /* yacc.c:1646  */
 -#line 2027 "awkgram.c" /* yacc.c:1646  */
++#line 2059 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 22:
- #line 357 "awkgram.y" /* yacc.c:1646  */
 -#line 327 "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 2074 "awkgram.c" /* yacc.c:1646  */
 -#line 2042 "awkgram.c" /* yacc.c:1646  */
++#line 2077 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 23:
- #line 371 "awkgram.y" /* yacc.c:1646  */
 -#line 338 "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 2086 "awkgram.c" /* yacc.c:1646  */
 -#line 2052 "awkgram.c" /* yacc.c:1646  */
++#line 2089 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 24:
- #line 379 "awkgram.y" /* yacc.c:1646  */
 -#line 344 "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 2098 "awkgram.c" /* yacc.c:1646  */
 -#line 2062 "awkgram.c" /* yacc.c:1646  */
++#line 2101 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 25:
- #line 390 "awkgram.y" /* yacc.c:1646  */
 -#line 353 "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 2111 "awkgram.c" /* yacc.c:1646  */
 -#line 2073 "awkgram.c" /* yacc.c:1646  */
++#line 2114 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 26:
- #line 402 "awkgram.y" /* yacc.c:1646  */
 -#line 363 "awkgram.y" /* yacc.c:1646  */
++#line 405 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 2117 "awkgram.c" /* yacc.c:1646  */
 -#line 2079 "awkgram.c" /* yacc.c:1646  */
++#line 2120 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 27:
- #line 404 "awkgram.y" /* yacc.c:1646  */
 -#line 365 "awkgram.y" /* yacc.c:1646  */
++#line 407 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 2123 "awkgram.c" /* yacc.c:1646  */
 -#line 2085 "awkgram.c" /* yacc.c:1646  */
++#line 2126 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 28:
- #line 406 "awkgram.y" /* yacc.c:1646  */
 -#line 367 "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 2133 "awkgram.c" /* yacc.c:1646  */
 -#line 2095 "awkgram.c" /* yacc.c:1646  */
++#line 2136 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 29:
- #line 412 "awkgram.y" /* yacc.c:1646  */
-     { (yyval) = (yyvsp[0]); }
- #line 2139 "awkgram.c" /* yacc.c:1646  */
 -#line 373 "awkgram.y" /* yacc.c:1646  */
++#line 415 "awkgram.y" /* yacc.c:1646  */
+     {
+               (yyval) = (yyvsp[0]);
+               at_seen = false;
+         }
 -#line 2104 "awkgram.c" /* yacc.c:1646  */
++#line 2145 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 32:
- #line 422 "awkgram.y" /* yacc.c:1646  */
 -#line 386 "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;
@@@ -2166,17 -2115,17 +2172,17 @@@
                /* $4 already free'd in install_function */
                (yyval) = (yyvsp[-5]);
          }
- #line 2170 "awkgram.c" /* yacc.c:1646  */
 -#line 2119 "awkgram.c" /* yacc.c:1646  */
++#line 2176 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 33:
- #line 456 "awkgram.y" /* yacc.c:1646  */
 -#line 404 "awkgram.y" /* yacc.c:1646  */
++#line 462 "awkgram.y" /* yacc.c:1646  */
      { want_regexp = true; }
- #line 2176 "awkgram.c" /* yacc.c:1646  */
 -#line 2125 "awkgram.c" /* yacc.c:1646  */
++#line 2182 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 34:
- #line 458 "awkgram.y" /* yacc.c:1646  */
 -#line 406 "awkgram.y" /* yacc.c:1646  */
++#line 464 "awkgram.y" /* yacc.c:1646  */
      {
                  NODE *n, *exp;
                  char *re;
@@@ -2205,89 -2154,69 +2211,89 @@@
                  (yyval)->opcode = Op_match_rec;
                  (yyval)->memory = n;
                }
- #line 2209 "awkgram.c" /* yacc.c:1646  */
 -#line 2158 "awkgram.c" /* yacc.c:1646  */
++#line 2215 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 35:
- #line 490 "awkgram.y" /* yacc.c:1646  */
 -#line 438 "awkgram.y" /* yacc.c:1646  */
++#line 496 "awkgram.y" /* yacc.c:1646  */
      { bcfree((yyvsp[0])); }
- #line 2215 "awkgram.c" /* yacc.c:1646  */
 -#line 2164 "awkgram.c" /* yacc.c:1646  */
++#line 2221 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 37:
- #line 496 "awkgram.y" /* yacc.c:1646  */
 -#line 444 "awkgram.y" /* yacc.c:1646  */
 -    { (yyval) = NULL; }
 -#line 2170 "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 2226 "awkgram.c" /* yacc.c:1646  */
++#line 2232 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 38:
- #line 503 "awkgram.y" /* yacc.c:1646  */
 -#line 446 "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 2258 "awkgram.c" /* yacc.c:1646  */
 -#line 2187 "awkgram.c" /* yacc.c:1646  */
++#line 2264 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 39:
- #line 531 "awkgram.y" /* yacc.c:1646  */
 -#line 459 "awkgram.y" /* yacc.c:1646  */
++#line 537 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 2264 "awkgram.c" /* yacc.c:1646  */
 -#line 2193 "awkgram.c" /* yacc.c:1646  */
++#line 2270 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 42:
- #line 541 "awkgram.y" /* yacc.c:1646  */
 -#line 469 "awkgram.y" /* yacc.c:1646  */
++#line 547 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 2270 "awkgram.c" /* yacc.c:1646  */
 -#line 2199 "awkgram.c" /* yacc.c:1646  */
++#line 2276 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 43:
- #line 543 "awkgram.y" /* yacc.c:1646  */
 -#line 471 "awkgram.y" /* yacc.c:1646  */
++#line 549 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[-1]); }
- #line 2276 "awkgram.c" /* yacc.c:1646  */
 -#line 2205 "awkgram.c" /* yacc.c:1646  */
++#line 2282 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 44:
- #line 545 "awkgram.y" /* yacc.c:1646  */
 -#line 473 "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 2287 "awkgram.c" /* yacc.c:1646  */
 -#line 2216 "awkgram.c" /* yacc.c:1646  */
++#line 2293 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 45:
- #line 552 "awkgram.y" /* yacc.c:1646  */
 -#line 480 "awkgram.y" /* yacc.c:1646  */
++#line 558 "awkgram.y" /* yacc.c:1646  */
      {
                INSTRUCTION *dflt, *curr = NULL, *cexp, *cstmt;
                INSTRUCTION *ip, *nextc, *tbreak;
@@@ -2377,11 -2306,11 +2383,11 @@@
                break_allowed--;                        
                fix_break_continue(ip, tbreak, NULL);
          }
- #line 2381 "awkgram.c" /* yacc.c:1646  */
 -#line 2310 "awkgram.c" /* yacc.c:1646  */
++#line 2387 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 46:
- #line 642 "awkgram.y" /* yacc.c:1646  */
 -#line 570 "awkgram.y" /* yacc.c:1646  */
++#line 648 "awkgram.y" /* yacc.c:1646  */
      { 
                /*
                 *    -----------------
@@@ -2423,11 -2352,11 +2429,11 @@@
                continue_allowed--;
                fix_break_continue(ip, tbreak, tcont);
          }
- #line 2427 "awkgram.c" /* yacc.c:1646  */
 -#line 2356 "awkgram.c" /* yacc.c:1646  */
++#line 2433 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 47:
- #line 684 "awkgram.y" /* yacc.c:1646  */
 -#line 612 "awkgram.y" /* yacc.c:1646  */
++#line 690 "awkgram.y" /* yacc.c:1646  */
      {
                /*
                 *    -----------------
@@@ -2469,11 -2398,11 +2475,11 @@@
                } /* else
                        $1 and $4 are NULLs */
          }
- #line 2473 "awkgram.c" /* yacc.c:1646  */
 -#line 2402 "awkgram.c" /* yacc.c:1646  */
++#line 2479 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 48:
- #line 726 "awkgram.y" /* yacc.c:1646  */
 -#line 654 "awkgram.y" /* yacc.c:1646  */
++#line 732 "awkgram.y" /* yacc.c:1646  */
      {
                INSTRUCTION *ip;
                char *var_name = (yyvsp[-5])->lextok;
@@@ -2586,44 -2515,44 +2592,44 @@@ regular_loop
                break_allowed--;
                continue_allowed--;
          }
- #line 2590 "awkgram.c" /* yacc.c:1646  */
 -#line 2519 "awkgram.c" /* yacc.c:1646  */
++#line 2596 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 49:
- #line 839 "awkgram.y" /* yacc.c:1646  */
 -#line 767 "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 2601 "awkgram.c" /* yacc.c:1646  */
 -#line 2530 "awkgram.c" /* yacc.c:1646  */
++#line 2607 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 50:
- #line 846 "awkgram.y" /* yacc.c:1646  */
 -#line 774 "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 2612 "awkgram.c" /* yacc.c:1646  */
 -#line 2541 "awkgram.c" /* yacc.c:1646  */
++#line 2618 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 51:
- #line 853 "awkgram.y" /* yacc.c:1646  */
 -#line 781 "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 2623 "awkgram.c" /* yacc.c:1646  */
 -#line 2552 "awkgram.c" /* yacc.c:1646  */
++#line 2629 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 52:
- #line 863 "awkgram.y" /* yacc.c:1646  */
 -#line 791 "awkgram.y" /* yacc.c:1646  */
++#line 869 "awkgram.y" /* yacc.c:1646  */
      { 
                if (! break_allowed)
                        error_ln((yyvsp[-1])->source_line,
@@@ -2632,11 -2561,11 +2638,11 @@@
                (yyval) = list_create((yyvsp[-1]));
  
          }
- #line 2636 "awkgram.c" /* yacc.c:1646  */
 -#line 2565 "awkgram.c" /* yacc.c:1646  */
++#line 2642 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 53:
- #line 872 "awkgram.y" /* yacc.c:1646  */
 -#line 800 "awkgram.y" /* yacc.c:1646  */
++#line 878 "awkgram.y" /* yacc.c:1646  */
      {
                if (! continue_allowed)
                        error_ln((yyvsp[-1])->source_line,
@@@ -2645,11 -2574,11 +2651,11 @@@
                (yyval) = list_create((yyvsp[-1]));
  
          }
- #line 2649 "awkgram.c" /* yacc.c:1646  */
 -#line 2578 "awkgram.c" /* yacc.c:1646  */
++#line 2655 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 54:
- #line 881 "awkgram.y" /* yacc.c:1646  */
 -#line 809 "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)
@@@ -2658,11 -2587,11 +2664,11 @@@
                (yyvsp[-1])->target_jmp = ip_rec;
                (yyval) = list_create((yyvsp[-1]));
          }
- #line 2662 "awkgram.c" /* yacc.c:1646  */
 -#line 2591 "awkgram.c" /* yacc.c:1646  */
++#line 2668 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 55:
- #line 890 "awkgram.y" /* yacc.c:1646  */
 -#line 818 "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)
@@@ -2673,11 -2602,11 +2679,11 @@@
                (yyvsp[-1])->target_endfile = ip_endfile;
                (yyval) = list_create((yyvsp[-1]));
          }
- #line 2677 "awkgram.c" /* yacc.c:1646  */
 -#line 2606 "awkgram.c" /* yacc.c:1646  */
++#line 2683 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 56:
- #line 901 "awkgram.y" /* yacc.c:1646  */
 -#line 829 "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. 
@@@ -2692,20 -2621,20 +2698,20 @@@
                } else
                        (yyval) = list_append((yyvsp[-1]), (yyvsp[-2]));
          }
- #line 2696 "awkgram.c" /* yacc.c:1646  */
 -#line 2625 "awkgram.c" /* yacc.c:1646  */
++#line 2702 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 57:
- #line 916 "awkgram.y" /* yacc.c:1646  */
 -#line 844 "awkgram.y" /* yacc.c:1646  */
++#line 922 "awkgram.y" /* yacc.c:1646  */
      {
                if (! in_function)
                        yyerror(_("`return' used outside function context"));
          }
- #line 2705 "awkgram.c" /* yacc.c:1646  */
 -#line 2634 "awkgram.c" /* yacc.c:1646  */
++#line 2711 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 58:
- #line 919 "awkgram.y" /* yacc.c:1646  */
 -#line 847 "awkgram.y" /* yacc.c:1646  */
++#line 925 "awkgram.y" /* yacc.c:1646  */
      {
                if ((yyvsp[-1]) == NULL) {
                        (yyval) = list_create((yyvsp[-3]));
@@@ -2726,17 -2655,17 +2732,17 @@@
                        (yyval) = list_append((yyvsp[-1]), (yyvsp[-3]));
                }
          }
- #line 2730 "awkgram.c" /* yacc.c:1646  */
 -#line 2659 "awkgram.c" /* yacc.c:1646  */
++#line 2736 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 60:
- #line 951 "awkgram.y" /* yacc.c:1646  */
 -#line 879 "awkgram.y" /* yacc.c:1646  */
++#line 957 "awkgram.y" /* yacc.c:1646  */
      { in_print = true; in_parens = 0; }
- #line 2736 "awkgram.c" /* yacc.c:1646  */
 -#line 2665 "awkgram.c" /* yacc.c:1646  */
++#line 2742 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 61:
- #line 952 "awkgram.y" /* yacc.c:1646  */
 -#line 880 "awkgram.y" /* yacc.c:1646  */
++#line 958 "awkgram.y" /* yacc.c:1646  */
      {
                /*
                 * Optimization: plain `print' has no expression list, so $3 is 
null.
@@@ -2833,17 -2762,17 +2839,17 @@@ regular_print
                        }
                }
          }
- #line 2837 "awkgram.c" /* yacc.c:1646  */
 -#line 2766 "awkgram.c" /* yacc.c:1646  */
++#line 2843 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 62:
- #line 1049 "awkgram.y" /* yacc.c:1646  */
 -#line 977 "awkgram.y" /* yacc.c:1646  */
++#line 1055 "awkgram.y" /* yacc.c:1646  */
      { sub_counter = 0; }
- #line 2843 "awkgram.c" /* yacc.c:1646  */
 -#line 2772 "awkgram.c" /* yacc.c:1646  */
++#line 2849 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 63:
- #line 1050 "awkgram.y" /* yacc.c:1646  */
 -#line 978 "awkgram.y" /* yacc.c:1646  */
++#line 1056 "awkgram.y" /* yacc.c:1646  */
      {
                char *arr = (yyvsp[-2])->lextok;
  
@@@ -2876,11 -2805,11 +2882,11 @@@
                        (yyval) = list_append(list_append((yyvsp[0]), 
(yyvsp[-2])), (yyvsp[-3]));
                }
          }
- #line 2880 "awkgram.c" /* yacc.c:1646  */
 -#line 2809 "awkgram.c" /* yacc.c:1646  */
++#line 2886 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 64:
- #line 1087 "awkgram.y" /* yacc.c:1646  */
 -#line 1015 "awkgram.y" /* yacc.c:1646  */
++#line 1093 "awkgram.y" /* yacc.c:1646  */
      {
                static bool warned = false;
                char *arr = (yyvsp[-1])->lextok;
@@@ -2906,52 -2835,52 +2912,52 @@@
                                fatal(_("`delete' is not allowed with 
FUNCTAB"));
                }
          }
- #line 2910 "awkgram.c" /* yacc.c:1646  */
 -#line 2839 "awkgram.c" /* yacc.c:1646  */
++#line 2916 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 65:
- #line 1113 "awkgram.y" /* yacc.c:1646  */
 -#line 1041 "awkgram.y" /* yacc.c:1646  */
++#line 1119 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = optimize_assignment((yyvsp[0])); }
- #line 2916 "awkgram.c" /* yacc.c:1646  */
 -#line 2845 "awkgram.c" /* yacc.c:1646  */
++#line 2922 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 66:
- #line 1118 "awkgram.y" /* yacc.c:1646  */
 -#line 1046 "awkgram.y" /* yacc.c:1646  */
++#line 1124 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 2922 "awkgram.c" /* yacc.c:1646  */
 -#line 2851 "awkgram.c" /* yacc.c:1646  */
++#line 2928 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 67:
- #line 1120 "awkgram.y" /* yacc.c:1646  */
 -#line 1048 "awkgram.y" /* yacc.c:1646  */
++#line 1126 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 2928 "awkgram.c" /* yacc.c:1646  */
 -#line 2857 "awkgram.c" /* yacc.c:1646  */
++#line 2934 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 68:
- #line 1125 "awkgram.y" /* yacc.c:1646  */
 -#line 1053 "awkgram.y" /* yacc.c:1646  */
++#line 1131 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 2934 "awkgram.c" /* yacc.c:1646  */
 -#line 2863 "awkgram.c" /* yacc.c:1646  */
++#line 2940 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 69:
- #line 1127 "awkgram.y" /* yacc.c:1646  */
 -#line 1055 "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 2945 "awkgram.c" /* yacc.c:1646  */
 -#line 2874 "awkgram.c" /* yacc.c:1646  */
++#line 2951 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 70:
- #line 1134 "awkgram.y" /* yacc.c:1646  */
 -#line 1062 "awkgram.y" /* yacc.c:1646  */
++#line 1140 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 2951 "awkgram.c" /* yacc.c:1646  */
 -#line 2880 "awkgram.c" /* yacc.c:1646  */
++#line 2957 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 71:
- #line 1139 "awkgram.y" /* yacc.c:1646  */
 -#line 1067 "awkgram.y" /* yacc.c:1646  */
++#line 1145 "awkgram.y" /* yacc.c:1646  */
      {
                INSTRUCTION *casestmt = (yyvsp[0]);
                if ((yyvsp[0]) == NULL)
@@@ -2963,11 -2892,11 +2969,11 @@@
                bcfree((yyvsp[-2]));
                (yyval) = (yyvsp[-4]);
          }
- #line 2967 "awkgram.c" /* yacc.c:1646  */
 -#line 2896 "awkgram.c" /* yacc.c:1646  */
++#line 2973 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 72:
- #line 1151 "awkgram.y" /* yacc.c:1646  */
 -#line 1079 "awkgram.y" /* yacc.c:1646  */
++#line 1157 "awkgram.y" /* yacc.c:1646  */
      {
                INSTRUCTION *casestmt = (yyvsp[0]);
                if ((yyvsp[0]) == NULL)
@@@ -2978,17 -2907,17 +2984,17 @@@
                (yyvsp[-3])->case_stmt = casestmt;
                (yyval) = (yyvsp[-3]);
          }
- #line 2982 "awkgram.c" /* yacc.c:1646  */
 -#line 2911 "awkgram.c" /* yacc.c:1646  */
++#line 2988 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 73:
- #line 1165 "awkgram.y" /* yacc.c:1646  */
 -#line 1093 "awkgram.y" /* yacc.c:1646  */
++#line 1171 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 2988 "awkgram.c" /* yacc.c:1646  */
 -#line 2917 "awkgram.c" /* yacc.c:1646  */
++#line 2994 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 74:
- #line 1167 "awkgram.y" /* yacc.c:1646  */
 -#line 1095 "awkgram.y" /* yacc.c:1646  */
++#line 1173 "awkgram.y" /* yacc.c:1646  */
      { 
                NODE *n = (yyvsp[0])->memory;
                (void) force_number(n);
@@@ -2996,71 -2925,71 +3002,71 @@@
                bcfree((yyvsp[-1]));
                (yyval) = (yyvsp[0]);
          }
- #line 3000 "awkgram.c" /* yacc.c:1646  */
 -#line 2929 "awkgram.c" /* yacc.c:1646  */
++#line 3006 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 75:
- #line 1175 "awkgram.y" /* yacc.c:1646  */
 -#line 1103 "awkgram.y" /* yacc.c:1646  */
++#line 1181 "awkgram.y" /* yacc.c:1646  */
      {
                bcfree((yyvsp[-1]));
                (yyval) = (yyvsp[0]);
          }
- #line 3009 "awkgram.c" /* yacc.c:1646  */
 -#line 2938 "awkgram.c" /* yacc.c:1646  */
++#line 3015 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 76:
- #line 1180 "awkgram.y" /* yacc.c:1646  */
 -#line 1108 "awkgram.y" /* yacc.c:1646  */
++#line 1186 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3015 "awkgram.c" /* yacc.c:1646  */
 -#line 2944 "awkgram.c" /* yacc.c:1646  */
++#line 3021 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 77:
- #line 1182 "awkgram.y" /* yacc.c:1646  */
 -#line 1110 "awkgram.y" /* yacc.c:1646  */
++#line 1188 "awkgram.y" /* yacc.c:1646  */
      {
                (yyvsp[0])->opcode = Op_push_re;
                (yyval) = (yyvsp[0]);
          }
- #line 3024 "awkgram.c" /* yacc.c:1646  */
 -#line 2953 "awkgram.c" /* yacc.c:1646  */
++#line 3030 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 78:
- #line 1190 "awkgram.y" /* yacc.c:1646  */
 -#line 1118 "awkgram.y" /* yacc.c:1646  */
++#line 1196 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3030 "awkgram.c" /* yacc.c:1646  */
 -#line 2959 "awkgram.c" /* yacc.c:1646  */
++#line 3036 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 79:
- #line 1192 "awkgram.y" /* yacc.c:1646  */
 -#line 1120 "awkgram.y" /* yacc.c:1646  */
++#line 1198 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3036 "awkgram.c" /* yacc.c:1646  */
 -#line 2965 "awkgram.c" /* yacc.c:1646  */
++#line 3042 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 81:
- #line 1202 "awkgram.y" /* yacc.c:1646  */
 -#line 1130 "awkgram.y" /* yacc.c:1646  */
++#line 1208 "awkgram.y" /* yacc.c:1646  */
      {
                (yyval) = (yyvsp[-1]);
          }
- #line 3044 "awkgram.c" /* yacc.c:1646  */
 -#line 2973 "awkgram.c" /* yacc.c:1646  */
++#line 3050 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 82:
- #line 1209 "awkgram.y" /* yacc.c:1646  */
 -#line 1137 "awkgram.y" /* yacc.c:1646  */
++#line 1215 "awkgram.y" /* yacc.c:1646  */
      {
                in_print = false;
                in_parens = 0;
                (yyval) = NULL;
          }
- #line 3054 "awkgram.c" /* yacc.c:1646  */
 -#line 2983 "awkgram.c" /* yacc.c:1646  */
++#line 3060 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 83:
- #line 1214 "awkgram.y" /* yacc.c:1646  */
 -#line 1142 "awkgram.y" /* yacc.c:1646  */
++#line 1220 "awkgram.y" /* yacc.c:1646  */
      { in_print = false; in_parens = 0; }
- #line 3060 "awkgram.c" /* yacc.c:1646  */
 -#line 2989 "awkgram.c" /* yacc.c:1646  */
++#line 3066 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 84:
- #line 1215 "awkgram.y" /* yacc.c:1646  */
 -#line 1143 "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
@@@ -3068,136 -2997,136 +3074,136 @@@
                        yyerror(_("multistage two-way pipelines don't work"));
                (yyval) = list_prepend((yyvsp[0]), (yyvsp[-2]));
          }
- #line 3072 "awkgram.c" /* yacc.c:1646  */
 -#line 3001 "awkgram.c" /* yacc.c:1646  */
++#line 3078 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 85:
- #line 1226 "awkgram.y" /* yacc.c:1646  */
 -#line 1154 "awkgram.y" /* yacc.c:1646  */
++#line 1232 "awkgram.y" /* yacc.c:1646  */
      {
                (yyval) = mk_condition((yyvsp[-3]), (yyvsp[-5]), (yyvsp[0]), 
NULL, NULL);
          }
- #line 3080 "awkgram.c" /* yacc.c:1646  */
 -#line 3009 "awkgram.c" /* yacc.c:1646  */
++#line 3086 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 86:
- #line 1231 "awkgram.y" /* yacc.c:1646  */
 -#line 1159 "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 3088 "awkgram.c" /* yacc.c:1646  */
 -#line 3017 "awkgram.c" /* yacc.c:1646  */
++#line 3094 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 91:
- #line 1248 "awkgram.y" /* yacc.c:1646  */
 -#line 1176 "awkgram.y" /* yacc.c:1646  */
++#line 1254 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 3094 "awkgram.c" /* yacc.c:1646  */
 -#line 3023 "awkgram.c" /* yacc.c:1646  */
++#line 3100 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 92:
- #line 1250 "awkgram.y" /* yacc.c:1646  */
 -#line 1178 "awkgram.y" /* yacc.c:1646  */
++#line 1256 "awkgram.y" /* yacc.c:1646  */
      {
                bcfree((yyvsp[-1]));
                (yyval) = (yyvsp[0]);
          }
- #line 3103 "awkgram.c" /* yacc.c:1646  */
 -#line 3032 "awkgram.c" /* yacc.c:1646  */
++#line 3109 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 93:
- #line 1258 "awkgram.y" /* yacc.c:1646  */
 -#line 1186 "awkgram.y" /* yacc.c:1646  */
++#line 1264 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 3109 "awkgram.c" /* yacc.c:1646  */
 -#line 3038 "awkgram.c" /* yacc.c:1646  */
++#line 3115 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 94:
- #line 1260 "awkgram.y" /* yacc.c:1646  */
 -#line 1188 "awkgram.y" /* yacc.c:1646  */
 -    { (yyval) = (yyvsp[0]) ; }
 -#line 3044 "awkgram.c" /* yacc.c:1646  */
++#line 1266 "awkgram.y" /* yacc.c:1646  */
 +    { (yyval) = (yyvsp[0]); }
- #line 3115 "awkgram.c" /* yacc.c:1646  */
++#line 3121 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 95:
- #line 1265 "awkgram.y" /* yacc.c:1646  */
 -#line 1193 "awkgram.y" /* yacc.c:1646  */
++#line 1271 "awkgram.y" /* yacc.c:1646  */
      {
                (yyvsp[0])->param_count = 0;
                (yyval) = list_create((yyvsp[0]));
          }
- #line 3124 "awkgram.c" /* yacc.c:1646  */
 -#line 3053 "awkgram.c" /* yacc.c:1646  */
++#line 3130 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 96:
- #line 1270 "awkgram.y" /* yacc.c:1646  */
 -#line 1198 "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 3134 "awkgram.c" /* yacc.c:1646  */
 -#line 3063 "awkgram.c" /* yacc.c:1646  */
++#line 3140 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 97:
- #line 1276 "awkgram.y" /* yacc.c:1646  */
 -#line 1204 "awkgram.y" /* yacc.c:1646  */
++#line 1282 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 3140 "awkgram.c" /* yacc.c:1646  */
 -#line 3069 "awkgram.c" /* yacc.c:1646  */
++#line 3146 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 98:
- #line 1278 "awkgram.y" /* yacc.c:1646  */
 -#line 1206 "awkgram.y" /* yacc.c:1646  */
++#line 1284 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[-1]); }
- #line 3146 "awkgram.c" /* yacc.c:1646  */
 -#line 3075 "awkgram.c" /* yacc.c:1646  */
++#line 3152 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 99:
- #line 1280 "awkgram.y" /* yacc.c:1646  */
 -#line 1208 "awkgram.y" /* yacc.c:1646  */
++#line 1286 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[-2]); }
- #line 3152 "awkgram.c" /* yacc.c:1646  */
 -#line 3081 "awkgram.c" /* yacc.c:1646  */
++#line 3158 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 100:
- #line 1286 "awkgram.y" /* yacc.c:1646  */
 -#line 1214 "awkgram.y" /* yacc.c:1646  */
++#line 1292 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 3158 "awkgram.c" /* yacc.c:1646  */
 -#line 3087 "awkgram.c" /* yacc.c:1646  */
++#line 3164 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 101:
- #line 1288 "awkgram.y" /* yacc.c:1646  */
 -#line 1216 "awkgram.y" /* yacc.c:1646  */
++#line 1294 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3164 "awkgram.c" /* yacc.c:1646  */
 -#line 3093 "awkgram.c" /* yacc.c:1646  */
++#line 3170 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 102:
- #line 1293 "awkgram.y" /* yacc.c:1646  */
 -#line 1221 "awkgram.y" /* yacc.c:1646  */
++#line 1299 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 3170 "awkgram.c" /* yacc.c:1646  */
 -#line 3099 "awkgram.c" /* yacc.c:1646  */
++#line 3176 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 103:
- #line 1295 "awkgram.y" /* yacc.c:1646  */
 -#line 1223 "awkgram.y" /* yacc.c:1646  */
++#line 1301 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3176 "awkgram.c" /* yacc.c:1646  */
 -#line 3105 "awkgram.c" /* yacc.c:1646  */
++#line 3182 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 104:
- #line 1300 "awkgram.y" /* yacc.c:1646  */
 -#line 1228 "awkgram.y" /* yacc.c:1646  */
++#line 1306 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = mk_expression_list(NULL, (yyvsp[0])); }
- #line 3182 "awkgram.c" /* yacc.c:1646  */
 -#line 3111 "awkgram.c" /* yacc.c:1646  */
++#line 3188 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 105:
- #line 1302 "awkgram.y" /* yacc.c:1646  */
 -#line 1230 "awkgram.y" /* yacc.c:1646  */
++#line 1308 "awkgram.y" /* yacc.c:1646  */
      {
                (yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
                yyerrok;
          }
- #line 3191 "awkgram.c" /* yacc.c:1646  */
 -#line 3120 "awkgram.c" /* yacc.c:1646  */
++#line 3197 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 106:
- #line 1307 "awkgram.y" /* yacc.c:1646  */
 -#line 1235 "awkgram.y" /* yacc.c:1646  */
++#line 1313 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 3197 "awkgram.c" /* yacc.c:1646  */
 -#line 3126 "awkgram.c" /* yacc.c:1646  */
++#line 3203 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 107:
- #line 1309 "awkgram.y" /* yacc.c:1646  */
 -#line 1237 "awkgram.y" /* yacc.c:1646  */
++#line 1315 "awkgram.y" /* yacc.c:1646  */
      {
                /*
                 * Returning the expression list instead of NULL lets
@@@ -3205,52 -3134,52 +3211,52 @@@
                 */
                (yyval) = (yyvsp[-1]);
          }
- #line 3209 "awkgram.c" /* yacc.c:1646  */
 -#line 3138 "awkgram.c" /* yacc.c:1646  */
++#line 3215 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 108:
- #line 1317 "awkgram.y" /* yacc.c:1646  */
 -#line 1245 "awkgram.y" /* yacc.c:1646  */
++#line 1323 "awkgram.y" /* yacc.c:1646  */
      {
                /* Ditto */
                (yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
          }
- #line 3218 "awkgram.c" /* yacc.c:1646  */
 -#line 3147 "awkgram.c" /* yacc.c:1646  */
++#line 3224 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 109:
- #line 1322 "awkgram.y" /* yacc.c:1646  */
 -#line 1250 "awkgram.y" /* yacc.c:1646  */
++#line 1328 "awkgram.y" /* yacc.c:1646  */
      {
                /* Ditto */
                (yyval) = (yyvsp[-2]);
          }
- #line 3227 "awkgram.c" /* yacc.c:1646  */
 -#line 3156 "awkgram.c" /* yacc.c:1646  */
++#line 3233 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 110:
- #line 1331 "awkgram.y" /* yacc.c:1646  */
 -#line 1259 "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 3238 "awkgram.c" /* yacc.c:1646  */
 -#line 3167 "awkgram.c" /* yacc.c:1646  */
++#line 3244 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 111:
- #line 1338 "awkgram.y" /* yacc.c:1646  */
 -#line 1266 "awkgram.y" /* yacc.c:1646  */
++#line 1344 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = mk_boolean((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
- #line 3244 "awkgram.c" /* yacc.c:1646  */
 -#line 3173 "awkgram.c" /* yacc.c:1646  */
++#line 3250 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 112:
- #line 1340 "awkgram.y" /* yacc.c:1646  */
 -#line 1268 "awkgram.y" /* yacc.c:1646  */
++#line 1346 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = mk_boolean((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
- #line 3250 "awkgram.c" /* yacc.c:1646  */
 -#line 3179 "awkgram.c" /* yacc.c:1646  */
++#line 3256 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 113:
- #line 1342 "awkgram.y" /* yacc.c:1646  */
 -#line 1270 "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,
@@@ -3266,11 -3195,11 +3272,11 @@@
                        (yyval) = list_append(list_merge((yyvsp[-2]), 
(yyvsp[0])), (yyvsp[-1]));
                }
          }
- #line 3270 "awkgram.c" /* yacc.c:1646  */
 -#line 3199 "awkgram.c" /* yacc.c:1646  */
++#line 3276 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 114:
- #line 1358 "awkgram.y" /* yacc.c:1646  */
 -#line 1286 "awkgram.y" /* yacc.c:1646  */
++#line 1364 "awkgram.y" /* yacc.c:1646  */
      {
                if (do_lint_old)
                        warning_ln((yyvsp[-1])->source_line,
@@@ -3280,91 -3209,91 +3286,91 @@@
                (yyvsp[-1])->expr_count = 1;
                (yyval) = list_append(list_merge((yyvsp[-2]), (yyvsp[0])), 
(yyvsp[-1]));
          }
- #line 3284 "awkgram.c" /* yacc.c:1646  */
 -#line 3213 "awkgram.c" /* yacc.c:1646  */
++#line 3290 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 115:
- #line 1368 "awkgram.y" /* yacc.c:1646  */
 -#line 1296 "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 3295 "awkgram.c" /* yacc.c:1646  */
 -#line 3224 "awkgram.c" /* yacc.c:1646  */
++#line 3301 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 116:
- #line 1375 "awkgram.y" /* yacc.c:1646  */
 -#line 1303 "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 3301 "awkgram.c" /* yacc.c:1646  */
 -#line 3230 "awkgram.c" /* yacc.c:1646  */
++#line 3307 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 117:
- #line 1377 "awkgram.y" /* yacc.c:1646  */
 -#line 1305 "awkgram.y" /* yacc.c:1646  */
++#line 1383 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3307 "awkgram.c" /* yacc.c:1646  */
 -#line 3236 "awkgram.c" /* yacc.c:1646  */
++#line 3313 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 118:
- #line 1382 "awkgram.y" /* yacc.c:1646  */
 -#line 1310 "awkgram.y" /* yacc.c:1646  */
++#line 1388 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3313 "awkgram.c" /* yacc.c:1646  */
 -#line 3242 "awkgram.c" /* yacc.c:1646  */
++#line 3319 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 119:
- #line 1384 "awkgram.y" /* yacc.c:1646  */
 -#line 1312 "awkgram.y" /* yacc.c:1646  */
++#line 1390 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3319 "awkgram.c" /* yacc.c:1646  */
 -#line 3248 "awkgram.c" /* yacc.c:1646  */
++#line 3325 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 120:
- #line 1386 "awkgram.y" /* yacc.c:1646  */
 -#line 1314 "awkgram.y" /* yacc.c:1646  */
++#line 1392 "awkgram.y" /* yacc.c:1646  */
      { 
                (yyvsp[0])->opcode = Op_assign_quotient;
                (yyval) = (yyvsp[0]);
          }
- #line 3328 "awkgram.c" /* yacc.c:1646  */
 -#line 3257 "awkgram.c" /* yacc.c:1646  */
++#line 3334 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 121:
- #line 1394 "awkgram.y" /* yacc.c:1646  */
 -#line 1322 "awkgram.y" /* yacc.c:1646  */
++#line 1400 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3334 "awkgram.c" /* yacc.c:1646  */
 -#line 3263 "awkgram.c" /* yacc.c:1646  */
++#line 3340 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 122:
- #line 1396 "awkgram.y" /* yacc.c:1646  */
 -#line 1324 "awkgram.y" /* yacc.c:1646  */
++#line 1402 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3340 "awkgram.c" /* yacc.c:1646  */
 -#line 3269 "awkgram.c" /* yacc.c:1646  */
++#line 3346 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 123:
- #line 1401 "awkgram.y" /* yacc.c:1646  */
 -#line 1329 "awkgram.y" /* yacc.c:1646  */
++#line 1407 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3346 "awkgram.c" /* yacc.c:1646  */
 -#line 3275 "awkgram.c" /* yacc.c:1646  */
++#line 3352 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 124:
- #line 1403 "awkgram.y" /* yacc.c:1646  */
 -#line 1331 "awkgram.y" /* yacc.c:1646  */
++#line 1409 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3352 "awkgram.c" /* yacc.c:1646  */
 -#line 3281 "awkgram.c" /* yacc.c:1646  */
++#line 3358 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 125:
- #line 1408 "awkgram.y" /* yacc.c:1646  */
 -#line 1336 "awkgram.y" /* yacc.c:1646  */
++#line 1414 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3358 "awkgram.c" /* yacc.c:1646  */
 -#line 3287 "awkgram.c" /* yacc.c:1646  */
++#line 3364 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 126:
- #line 1410 "awkgram.y" /* yacc.c:1646  */
 -#line 1338 "awkgram.y" /* yacc.c:1646  */
++#line 1416 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3364 "awkgram.c" /* yacc.c:1646  */
 -#line 3293 "awkgram.c" /* yacc.c:1646  */
++#line 3370 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 127:
- #line 1412 "awkgram.y" /* yacc.c:1646  */
 -#line 1340 "awkgram.y" /* yacc.c:1646  */
++#line 1418 "awkgram.y" /* yacc.c:1646  */
      {
                int count = 2;
                bool is_simple_var = false;
@@@ -3411,47 -3340,47 +3417,47 @@@
                                max_args = count;
                }
          }
- #line 3415 "awkgram.c" /* yacc.c:1646  */
 -#line 3344 "awkgram.c" /* yacc.c:1646  */
++#line 3421 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 129:
- #line 1464 "awkgram.y" /* yacc.c:1646  */
 -#line 1392 "awkgram.y" /* yacc.c:1646  */
++#line 1470 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
- #line 3421 "awkgram.c" /* yacc.c:1646  */
 -#line 3350 "awkgram.c" /* yacc.c:1646  */
++#line 3427 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 130:
- #line 1466 "awkgram.y" /* yacc.c:1646  */
 -#line 1394 "awkgram.y" /* yacc.c:1646  */
++#line 1472 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
- #line 3427 "awkgram.c" /* yacc.c:1646  */
 -#line 3356 "awkgram.c" /* yacc.c:1646  */
++#line 3433 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 131:
- #line 1468 "awkgram.y" /* yacc.c:1646  */
 -#line 1396 "awkgram.y" /* yacc.c:1646  */
++#line 1474 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
- #line 3433 "awkgram.c" /* yacc.c:1646  */
 -#line 3362 "awkgram.c" /* yacc.c:1646  */
++#line 3439 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 132:
- #line 1470 "awkgram.y" /* yacc.c:1646  */
 -#line 1398 "awkgram.y" /* yacc.c:1646  */
++#line 1476 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
- #line 3439 "awkgram.c" /* yacc.c:1646  */
 -#line 3368 "awkgram.c" /* yacc.c:1646  */
++#line 3445 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 133:
- #line 1472 "awkgram.y" /* yacc.c:1646  */
 -#line 1400 "awkgram.y" /* yacc.c:1646  */
++#line 1478 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
- #line 3445 "awkgram.c" /* yacc.c:1646  */
 -#line 3374 "awkgram.c" /* yacc.c:1646  */
++#line 3451 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 134:
- #line 1474 "awkgram.y" /* yacc.c:1646  */
 -#line 1402 "awkgram.y" /* yacc.c:1646  */
++#line 1480 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
- #line 3451 "awkgram.c" /* yacc.c:1646  */
 -#line 3380 "awkgram.c" /* yacc.c:1646  */
++#line 3457 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 135:
- #line 1476 "awkgram.y" /* yacc.c:1646  */
 -#line 1404 "awkgram.y" /* yacc.c:1646  */
++#line 1482 "awkgram.y" /* yacc.c:1646  */
      {
                /*
                 * In BEGINFILE/ENDFILE, allow `getline [var] < file'
@@@ -3465,29 -3394,29 +3471,29 @@@
                                _("non-redirected `getline' undefined inside 
END action"));
                (yyval) = mk_getline((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]), 
redirect_input);
          }
- #line 3469 "awkgram.c" /* yacc.c:1646  */
 -#line 3398 "awkgram.c" /* yacc.c:1646  */
++#line 3475 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 136:
- #line 1490 "awkgram.y" /* yacc.c:1646  */
 -#line 1418 "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 3478 "awkgram.c" /* yacc.c:1646  */
 -#line 3407 "awkgram.c" /* yacc.c:1646  */
++#line 3484 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 137:
- #line 1495 "awkgram.y" /* yacc.c:1646  */
 -#line 1423 "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 3487 "awkgram.c" /* yacc.c:1646  */
 -#line 3416 "awkgram.c" /* yacc.c:1646  */
++#line 3493 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 138:
- #line 1500 "awkgram.y" /* yacc.c:1646  */
 -#line 1428 "awkgram.y" /* yacc.c:1646  */
++#line 1506 "awkgram.y" /* yacc.c:1646  */
      {
                if (do_lint_old) {
                    warning_ln((yyvsp[-1])->source_line,
@@@ -3507,64 -3436,64 +3513,64 @@@
                        (yyval) = list_append(list_merge(t, (yyvsp[0])), 
(yyvsp[-1]));
                }
          }
- #line 3511 "awkgram.c" /* yacc.c:1646  */
 -#line 3440 "awkgram.c" /* yacc.c:1646  */
++#line 3517 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 139:
- #line 1525 "awkgram.y" /* yacc.c:1646  */
 -#line 1453 "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 3520 "awkgram.c" /* yacc.c:1646  */
 -#line 3449 "awkgram.c" /* yacc.c:1646  */
++#line 3526 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 140:
- #line 1531 "awkgram.y" /* yacc.c:1646  */
 -#line 1459 "awkgram.y" /* yacc.c:1646  */
++#line 1537 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
- #line 3526 "awkgram.c" /* yacc.c:1646  */
 -#line 3455 "awkgram.c" /* yacc.c:1646  */
++#line 3532 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 141:
- #line 1533 "awkgram.y" /* yacc.c:1646  */
 -#line 1461 "awkgram.y" /* yacc.c:1646  */
++#line 1539 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
- #line 3532 "awkgram.c" /* yacc.c:1646  */
 -#line 3461 "awkgram.c" /* yacc.c:1646  */
++#line 3538 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 142:
- #line 1535 "awkgram.y" /* yacc.c:1646  */
 -#line 1463 "awkgram.y" /* yacc.c:1646  */
++#line 1541 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
- #line 3538 "awkgram.c" /* yacc.c:1646  */
 -#line 3467 "awkgram.c" /* yacc.c:1646  */
++#line 3544 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 143:
- #line 1537 "awkgram.y" /* yacc.c:1646  */
 -#line 1465 "awkgram.y" /* yacc.c:1646  */
++#line 1543 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
- #line 3544 "awkgram.c" /* yacc.c:1646  */
 -#line 3473 "awkgram.c" /* yacc.c:1646  */
++#line 3550 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 144:
- #line 1539 "awkgram.y" /* yacc.c:1646  */
 -#line 1467 "awkgram.y" /* yacc.c:1646  */
++#line 1545 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
- #line 3550 "awkgram.c" /* yacc.c:1646  */
 -#line 3479 "awkgram.c" /* yacc.c:1646  */
++#line 3556 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 145:
- #line 1541 "awkgram.y" /* yacc.c:1646  */
 -#line 1469 "awkgram.y" /* yacc.c:1646  */
++#line 1547 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
- #line 3556 "awkgram.c" /* yacc.c:1646  */
 -#line 3485 "awkgram.c" /* yacc.c:1646  */
++#line 3562 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 146:
- #line 1546 "awkgram.y" /* yacc.c:1646  */
 -#line 1474 "awkgram.y" /* yacc.c:1646  */
++#line 1552 "awkgram.y" /* yacc.c:1646  */
      {
                (yyval) = list_create((yyvsp[0]));
          }
- #line 3564 "awkgram.c" /* yacc.c:1646  */
 -#line 3493 "awkgram.c" /* yacc.c:1646  */
++#line 3570 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 147:
- #line 1550 "awkgram.y" /* yacc.c:1646  */
 -#line 1478 "awkgram.y" /* yacc.c:1646  */
++#line 1556 "awkgram.y" /* yacc.c:1646  */
      {
                if ((yyvsp[0])->opcode == Op_match_rec) {
                        (yyvsp[0])->opcode = Op_nomatch;
@@@ -3596,37 -3525,37 +3602,37 @@@
                        }
                }
           }
- #line 3600 "awkgram.c" /* yacc.c:1646  */
 -#line 3529 "awkgram.c" /* yacc.c:1646  */
++#line 3606 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 148:
- #line 1582 "awkgram.y" /* yacc.c:1646  */
 -#line 1510 "awkgram.y" /* yacc.c:1646  */
++#line 1588 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[-1]); }
- #line 3606 "awkgram.c" /* yacc.c:1646  */
 -#line 3535 "awkgram.c" /* yacc.c:1646  */
++#line 3612 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 149:
- #line 1584 "awkgram.y" /* yacc.c:1646  */
 -#line 1512 "awkgram.y" /* yacc.c:1646  */
++#line 1590 "awkgram.y" /* yacc.c:1646  */
      {
                (yyval) = snode((yyvsp[-1]), (yyvsp[-3]));
                if ((yyval) == NULL)
                        YYABORT;
          }
- #line 3616 "awkgram.c" /* yacc.c:1646  */
 -#line 3545 "awkgram.c" /* yacc.c:1646  */
++#line 3622 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 150:
- #line 1590 "awkgram.y" /* yacc.c:1646  */
 -#line 1518 "awkgram.y" /* yacc.c:1646  */
++#line 1596 "awkgram.y" /* yacc.c:1646  */
      {
                (yyval) = snode((yyvsp[-1]), (yyvsp[-3]));
                if ((yyval) == NULL)
                        YYABORT;
          }
- #line 3626 "awkgram.c" /* yacc.c:1646  */
 -#line 3555 "awkgram.c" /* yacc.c:1646  */
++#line 3632 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 151:
- #line 1596 "awkgram.y" /* yacc.c:1646  */
 -#line 1524 "awkgram.y" /* yacc.c:1646  */
++#line 1602 "awkgram.y" /* yacc.c:1646  */
      {
                static bool warned = false;
  
@@@ -3639,45 -3568,45 +3645,45 @@@
                if ((yyval) == NULL)
                        YYABORT;
          }
- #line 3643 "awkgram.c" /* yacc.c:1646  */
 -#line 3572 "awkgram.c" /* yacc.c:1646  */
++#line 3649 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 154:
- #line 1611 "awkgram.y" /* yacc.c:1646  */
 -#line 1539 "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 3652 "awkgram.c" /* yacc.c:1646  */
 -#line 3581 "awkgram.c" /* yacc.c:1646  */
++#line 3658 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 155:
- #line 1616 "awkgram.y" /* yacc.c:1646  */
 -#line 1544 "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 3661 "awkgram.c" /* yacc.c:1646  */
 -#line 3590 "awkgram.c" /* yacc.c:1646  */
++#line 3667 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 156:
- #line 1621 "awkgram.y" /* yacc.c:1646  */
 -#line 1549 "awkgram.y" /* yacc.c:1646  */
++#line 1627 "awkgram.y" /* yacc.c:1646  */
      {
                (yyval) = list_create((yyvsp[0]));
          }
- #line 3669 "awkgram.c" /* yacc.c:1646  */
 -#line 3598 "awkgram.c" /* yacc.c:1646  */
++#line 3675 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 157:
- #line 1625 "awkgram.y" /* yacc.c:1646  */
 -#line 1553 "awkgram.y" /* yacc.c:1646  */
++#line 1631 "awkgram.y" /* yacc.c:1646  */
      {
                (yyval) = list_create((yyvsp[0]));
          }
- #line 3677 "awkgram.c" /* yacc.c:1646  */
 -#line 3606 "awkgram.c" /* yacc.c:1646  */
++#line 3683 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 158:
- #line 1629 "awkgram.y" /* yacc.c:1646  */
 -#line 1557 "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
@@@ -3692,11 -3621,11 +3698,11 @@@
                        (yyval) = list_append((yyvsp[0]), (yyvsp[-1]));
                }
          }
- #line 3696 "awkgram.c" /* yacc.c:1646  */
 -#line 3625 "awkgram.c" /* yacc.c:1646  */
++#line 3702 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 159:
- #line 1644 "awkgram.y" /* yacc.c:1646  */
 -#line 1572 "awkgram.y" /* yacc.c:1646  */
++#line 1650 "awkgram.y" /* yacc.c:1646  */
      {
            /*
             * was: $$ = $2
@@@ -3706,20 -3635,20 +3712,20 @@@
                (yyvsp[-1])->memory = make_number(0.0);
                (yyval) = list_append((yyvsp[0]), (yyvsp[-1]));
          }
- #line 3710 "awkgram.c" /* yacc.c:1646  */
 -#line 3639 "awkgram.c" /* yacc.c:1646  */
++#line 3716 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 160:
- #line 1657 "awkgram.y" /* yacc.c:1646  */
 -#line 1585 "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 3719 "awkgram.c" /* yacc.c:1646  */
 -#line 3648 "awkgram.c" /* yacc.c:1646  */
++#line 3725 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 161:
- #line 1662 "awkgram.y" /* yacc.c:1646  */
 -#line 1590 "awkgram.y" /* yacc.c:1646  */
++#line 1668 "awkgram.y" /* yacc.c:1646  */
      {
                /* indirect function call */
                INSTRUCTION *f, *t;
@@@ -3751,13 -3680,25 +3757,25 @@@
                 */
  
                (yyval) = list_prepend((yyvsp[0]), t);
+               at_seen = false;
          }
- #line 3756 "awkgram.c" /* yacc.c:1646  */
 -#line 3686 "awkgram.c" /* yacc.c:1646  */
++#line 3763 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 162:
- #line 1698 "awkgram.y" /* yacc.c:1646  */
 -#line 1627 "awkgram.y" /* yacc.c:1646  */
++#line 1705 "awkgram.y" /* yacc.c:1646  */
      {
+               NODE *n;
+ 
+               if (! at_seen) {
+                       n = lookup((yyvsp[-3])->func_name);
+                       if (n != NULL && n->type != Node_func
+                           && n->type != Node_ext_func && n->type != 
Node_old_ext_func) {
+                               error_ln((yyvsp[-3])->source_line,
+                                       _("attempt to use non-function `%s' in 
function call"),
+                                               (yyvsp[-3])->func_name);
+                       }
+               }
                param_sanity((yyvsp[-1]));
                (yyvsp[-3])->opcode = Op_func_call;
                (yyvsp[-3])->func_body = NULL;
@@@ -3770,49 -3711,49 +3788,49 @@@
                        (yyval) = list_append(t, (yyvsp[-3]));
                }
          }
- #line 3774 "awkgram.c" /* yacc.c:1646  */
 -#line 3715 "awkgram.c" /* yacc.c:1646  */
++#line 3792 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 163:
- #line 1715 "awkgram.y" /* yacc.c:1646  */
 -#line 1655 "awkgram.y" /* yacc.c:1646  */
++#line 1733 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 3780 "awkgram.c" /* yacc.c:1646  */
 -#line 3721 "awkgram.c" /* yacc.c:1646  */
++#line 3798 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 164:
- #line 1717 "awkgram.y" /* yacc.c:1646  */
 -#line 1657 "awkgram.y" /* yacc.c:1646  */
++#line 1735 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3786 "awkgram.c" /* yacc.c:1646  */
 -#line 3727 "awkgram.c" /* yacc.c:1646  */
++#line 3804 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 165:
- #line 1722 "awkgram.y" /* yacc.c:1646  */
 -#line 1662 "awkgram.y" /* yacc.c:1646  */
++#line 1740 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 3792 "awkgram.c" /* yacc.c:1646  */
 -#line 3733 "awkgram.c" /* yacc.c:1646  */
++#line 3810 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 166:
- #line 1724 "awkgram.y" /* yacc.c:1646  */
 -#line 1664 "awkgram.y" /* yacc.c:1646  */
++#line 1742 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[-1]); }
- #line 3798 "awkgram.c" /* yacc.c:1646  */
 -#line 3739 "awkgram.c" /* yacc.c:1646  */
++#line 3816 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 167:
- #line 1729 "awkgram.y" /* yacc.c:1646  */
 -#line 1669 "awkgram.y" /* yacc.c:1646  */
++#line 1747 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3804 "awkgram.c" /* yacc.c:1646  */
 -#line 3745 "awkgram.c" /* yacc.c:1646  */
++#line 3822 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 168:
- #line 1731 "awkgram.y" /* yacc.c:1646  */
 -#line 1671 "awkgram.y" /* yacc.c:1646  */
++#line 1749 "awkgram.y" /* yacc.c:1646  */
      {
                (yyval) = list_merge((yyvsp[-1]), (yyvsp[0]));
          }
- #line 3812 "awkgram.c" /* yacc.c:1646  */
 -#line 3753 "awkgram.c" /* yacc.c:1646  */
++#line 3830 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 169:
- #line 1738 "awkgram.y" /* yacc.c:1646  */
 -#line 1678 "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 */
@@@ -3826,11 -3767,11 +3844,11 @@@
                sub_counter++;  /* count # of dimensions */
                (yyval) = (yyvsp[0]);
          }
- #line 3830 "awkgram.c" /* yacc.c:1646  */
 -#line 3771 "awkgram.c" /* yacc.c:1646  */
++#line 3848 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 170:
- #line 1755 "awkgram.y" /* yacc.c:1646  */
 -#line 1695 "awkgram.y" /* yacc.c:1646  */
++#line 1773 "awkgram.y" /* yacc.c:1646  */
      {
                INSTRUCTION *t = (yyvsp[-1]);
                if ((yyvsp[-1]) == NULL) {
@@@ -3844,31 -3785,31 +3862,31 @@@
                        (yyvsp[0])->sub_count = count_expressions(&t, false);
                (yyval) = list_append(t, (yyvsp[0]));
          }
- #line 3848 "awkgram.c" /* yacc.c:1646  */
 -#line 3789 "awkgram.c" /* yacc.c:1646  */
++#line 3866 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 171:
- #line 1772 "awkgram.y" /* yacc.c:1646  */
 -#line 1712 "awkgram.y" /* yacc.c:1646  */
++#line 1790 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); }
- #line 3854 "awkgram.c" /* yacc.c:1646  */
 -#line 3795 "awkgram.c" /* yacc.c:1646  */
++#line 3872 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 172:
- #line 1774 "awkgram.y" /* yacc.c:1646  */
 -#line 1714 "awkgram.y" /* yacc.c:1646  */
++#line 1792 "awkgram.y" /* yacc.c:1646  */
      {
                (yyval) = list_merge((yyvsp[-1]), (yyvsp[0]));
          }
- #line 3862 "awkgram.c" /* yacc.c:1646  */
 -#line 3803 "awkgram.c" /* yacc.c:1646  */
++#line 3880 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 173:
- #line 1781 "awkgram.y" /* yacc.c:1646  */
 -#line 1721 "awkgram.y" /* yacc.c:1646  */
++#line 1799 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[-1]); }
- #line 3868 "awkgram.c" /* yacc.c:1646  */
 -#line 3809 "awkgram.c" /* yacc.c:1646  */
++#line 3886 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 174:
- #line 1786 "awkgram.y" /* yacc.c:1646  */
 -#line 1726 "awkgram.y" /* yacc.c:1646  */
++#line 1804 "awkgram.y" /* yacc.c:1646  */
      {
                char *var_name = (yyvsp[0])->lextok;
  
@@@ -3876,22 -3817,22 +3894,22 @@@
                (yyvsp[0])->memory = variable((yyvsp[0])->source_line, 
var_name, Node_var_new);
                (yyval) = list_create((yyvsp[0]));
          }
- #line 3880 "awkgram.c" /* yacc.c:1646  */
 -#line 3821 "awkgram.c" /* yacc.c:1646  */
++#line 3898 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 175:
- #line 1794 "awkgram.y" /* yacc.c:1646  */
 -#line 1734 "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 3891 "awkgram.c" /* yacc.c:1646  */
 -#line 3832 "awkgram.c" /* yacc.c:1646  */
++#line 3909 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 176:
- #line 1804 "awkgram.y" /* yacc.c:1646  */
 -#line 1744 "awkgram.y" /* yacc.c:1646  */
++#line 1822 "awkgram.y" /* yacc.c:1646  */
      {
                INSTRUCTION *ip = (yyvsp[0])->nexti;
                if (ip->opcode == Op_push
@@@ -3903,73 -3844,73 +3921,73 @@@
                } else
                        (yyval) = (yyvsp[0]);
          }
- #line 3907 "awkgram.c" /* yacc.c:1646  */
 -#line 3848 "awkgram.c" /* yacc.c:1646  */
++#line 3925 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 177:
- #line 1816 "awkgram.y" /* yacc.c:1646  */
 -#line 1756 "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 3917 "awkgram.c" /* yacc.c:1646  */
 -#line 3858 "awkgram.c" /* yacc.c:1646  */
++#line 3935 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 178:
- #line 1825 "awkgram.y" /* yacc.c:1646  */
 -#line 1765 "awkgram.y" /* yacc.c:1646  */
++#line 1843 "awkgram.y" /* yacc.c:1646  */
      {
                (yyvsp[0])->opcode = Op_postincrement;
          }
- #line 3925 "awkgram.c" /* yacc.c:1646  */
 -#line 3866 "awkgram.c" /* yacc.c:1646  */
++#line 3943 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 179:
- #line 1829 "awkgram.y" /* yacc.c:1646  */
 -#line 1769 "awkgram.y" /* yacc.c:1646  */
++#line 1847 "awkgram.y" /* yacc.c:1646  */
      {
                (yyvsp[0])->opcode = Op_postdecrement;
          }
- #line 3933 "awkgram.c" /* yacc.c:1646  */
 -#line 3874 "awkgram.c" /* yacc.c:1646  */
++#line 3951 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 180:
- #line 1832 "awkgram.y" /* yacc.c:1646  */
 -#line 1772 "awkgram.y" /* yacc.c:1646  */
++#line 1850 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = NULL; }
- #line 3939 "awkgram.c" /* yacc.c:1646  */
 -#line 3880 "awkgram.c" /* yacc.c:1646  */
++#line 3957 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 182:
- #line 1840 "awkgram.y" /* yacc.c:1646  */
 -#line 1780 "awkgram.y" /* yacc.c:1646  */
++#line 1858 "awkgram.y" /* yacc.c:1646  */
      { yyerrok; }
- #line 3945 "awkgram.c" /* yacc.c:1646  */
 -#line 3886 "awkgram.c" /* yacc.c:1646  */
++#line 3963 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 183:
- #line 1844 "awkgram.y" /* yacc.c:1646  */
 -#line 1784 "awkgram.y" /* yacc.c:1646  */
++#line 1862 "awkgram.y" /* yacc.c:1646  */
      { yyerrok; }
- #line 3951 "awkgram.c" /* yacc.c:1646  */
 -#line 3892 "awkgram.c" /* yacc.c:1646  */
++#line 3969 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 186:
- #line 1853 "awkgram.y" /* yacc.c:1646  */
 -#line 1793 "awkgram.y" /* yacc.c:1646  */
++#line 1871 "awkgram.y" /* yacc.c:1646  */
      { yyerrok; }
- #line 3957 "awkgram.c" /* yacc.c:1646  */
 -#line 3898 "awkgram.c" /* yacc.c:1646  */
++#line 3975 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 187:
- #line 1857 "awkgram.y" /* yacc.c:1646  */
 -#line 1797 "awkgram.y" /* yacc.c:1646  */
++#line 1875 "awkgram.y" /* yacc.c:1646  */
      { (yyval) = (yyvsp[0]); yyerrok; }
- #line 3963 "awkgram.c" /* yacc.c:1646  */
 -#line 3904 "awkgram.c" /* yacc.c:1646  */
++#line 3981 "awkgram.c" /* yacc.c:1646  */
      break;
  
    case 188:
- #line 1861 "awkgram.y" /* yacc.c:1646  */
 -#line 1801 "awkgram.y" /* yacc.c:1646  */
++#line 1879 "awkgram.y" /* yacc.c:1646  */
      { yyerrok; }
- #line 3969 "awkgram.c" /* yacc.c:1646  */
 -#line 3910 "awkgram.c" /* yacc.c:1646  */
++#line 3987 "awkgram.c" /* yacc.c:1646  */
      break;
  
  
- #line 3973 "awkgram.c" /* yacc.c:1646  */
 -#line 3914 "awkgram.c" /* yacc.c:1646  */
++#line 3991 "awkgram.c" /* yacc.c:1646  */
        default: break;
      }
    /* User semantic actions sometimes alter yychar, and that requires
@@@ -4197,7 -4138,7 +4215,7 @@@ yyreturn
  #endif
    return yyresult;
  }
- #line 1863 "awkgram.y" /* yacc.c:1906  */
 -#line 1803 "awkgram.y" /* yacc.c:1906  */
++#line 1881 "awkgram.y" /* yacc.c:1906  */
  
  
  struct token {
diff --cc awkgram.y
index 5e3bade,55615c1..91ebe3b
--- a/awkgram.y
+++ b/awkgram.y
@@@ -84,9 -84,8 +84,10 @@@ static void check_funcs(void)
  
  static ssize_t read_one_line(int fd, void *buffer, size_t count);
  static int one_line_close(int fd);
 +static void split_comment(void);
 +static void check_comment(void);
  
+ static bool at_seen = false;
  static bool want_source = false;
  static bool want_regexp = false;      /* lexical scanning kludge */
  static char *in_function;             /* parsing kludge */
diff --cc doc/gawk.info
index caa2ead,4e975b1..1c74fc9
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@@ -34619,560 -34468,559 +34621,560 @@@ 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-154928
 -Node: This Manual55074
 -Ref: This Manual-Footnote-161574
 -Node: Conventions61674
 -Node: Manual History64011
 -Ref: Manual History-Footnote-167004
 -Ref: Manual History-Footnote-267045
 -Node: How To Contribute67119
 -Node: Acknowledgments68248
 -Node: Getting Started73065
 -Node: Running gawk75504
 -Node: One-shot76694
 -Node: Read Terminal77958
 -Node: Long79989
 -Node: Executable Scripts81502
 -Ref: Executable Scripts-Footnote-184291
 -Node: Comments84394
 -Node: Quoting86876
 -Node: DOS Quoting92394
 -Node: Sample Data Files93069
 -Node: Very Simple95664
 -Node: Two Rules100563
 -Node: More Complex102449
 -Node: Statements/Lines105311
 -Ref: Statements/Lines-Footnote-1109766
 -Node: Other Features110031
 -Node: When110967
 -Ref: When-Footnote-1112721
 -Node: Intro Summary112786
 -Node: Invoking Gawk113670
 -Node: Command Line115184
 -Node: Options115982
 -Ref: Options-Footnote-1131904
 -Ref: Options-Footnote-2132133
 -Node: Other Arguments132158
 -Node: Naming Standard Input135106
 -Node: Environment Variables136199
 -Node: AWKPATH Variable136757
 -Ref: AWKPATH Variable-Footnote-1140054
 -Ref: AWKPATH Variable-Footnote-2140099
 -Node: AWKLIBPATH Variable140359
 -Node: Other Environment Variables141502
 -Node: Exit Status145260
 -Node: Include Files145936
 -Node: Loading Shared Libraries149525
 -Node: Obsolete150952
 -Node: Undocumented151644
 -Node: Invoking Summary151911
 -Node: Regexp153574
 -Node: Regexp Usage155028
 -Node: Escape Sequences157065
 -Node: Regexp Operators163075
 -Ref: Regexp Operators-Footnote-1170485
 -Ref: Regexp Operators-Footnote-2170632
 -Node: Bracket Expressions170730
 -Ref: table-char-classes172745
 -Node: Leftmost Longest175687
 -Node: Computed Regexps176989
 -Node: GNU Regexp Operators180418
 -Node: Case-sensitivity184090
 -Ref: Case-sensitivity-Footnote-1186975
 -Ref: Case-sensitivity-Footnote-2187210
 -Node: Regexp Summary187318
 -Node: Reading Files188785
 -Node: Records190878
 -Node: awk split records191611
 -Node: gawk split records196540
 -Ref: gawk split records-Footnote-1201079
 -Node: Fields201116
 -Ref: Fields-Footnote-1203894
 -Node: Nonconstant Fields203980
 -Ref: Nonconstant Fields-Footnote-1206218
 -Node: Changing Fields206421
 -Node: Field Separators212352
 -Node: Default Field Splitting215056
 -Node: Regexp Field Splitting216173
 -Node: Single Character Fields219523
 -Node: Command Line Field Separator220582
 -Node: Full Line Fields223799
 -Ref: Full Line Fields-Footnote-1225320
 -Ref: Full Line Fields-Footnote-2225366
 -Node: Field Splitting Summary225467
 -Node: Constant Size227541
 -Node: Splitting By Content232124
 -Ref: Splitting By Content-Footnote-1236089
 -Node: Multiple Line236252
 -Ref: Multiple Line-Footnote-1242133
 -Node: Getline242312
 -Node: Plain Getline244519
 -Node: Getline/Variable247159
 -Node: Getline/File248308
 -Node: Getline/Variable/File249693
 -Ref: Getline/Variable/File-Footnote-1251296
 -Node: Getline/Pipe251383
 -Node: Getline/Variable/Pipe254061
 -Node: Getline/Coprocess255192
 -Node: Getline/Variable/Coprocess256456
 -Node: Getline Notes257195
 -Node: Getline Summary259989
 -Ref: table-getline-variants260401
 -Node: Read Timeout261230
 -Ref: Read Timeout-Footnote-1265067
 -Node: Command-line directories265125
 -Node: Input Summary266030
 -Node: Input Exercises269415
 -Node: Printing270143
 -Node: Print271920
 -Node: Print Examples273377
 -Node: Output Separators276156
 -Node: OFMT278174
 -Node: Printf279529
 -Node: Basic Printf280314
 -Node: Control Letters281886
 -Node: Format Modifiers285871
 -Node: Printf Examples291881
 -Node: Redirection294367
 -Node: Special FD301205
 -Ref: Special FD-Footnote-1304371
 -Node: Special Files304445
 -Node: Other Inherited Files305062
 -Node: Special Network306062
 -Node: Special Caveats306924
 -Node: Close Files And Pipes307873
 -Ref: Close Files And Pipes-Footnote-1315064
 -Ref: Close Files And Pipes-Footnote-2315212
 -Node: Output Summary315362
 -Node: Output Exercises316360
 -Node: Expressions317040
 -Node: Values318229
 -Node: Constants318906
 -Node: Scalar Constants319597
 -Ref: Scalar Constants-Footnote-1320459
 -Node: Nondecimal-numbers320709
 -Node: Regexp Constants323719
 -Node: Using Constant Regexps324245
 -Node: Variables327408
 -Node: Using Variables328065
 -Node: Assignment Options329976
 -Node: Conversion331851
 -Node: Strings And Numbers332375
 -Ref: Strings And Numbers-Footnote-1335440
 -Node: Locale influences conversions335549
 -Ref: table-locale-affects338295
 -Node: All Operators338887
 -Node: Arithmetic Ops339516
 -Node: Concatenation342021
 -Ref: Concatenation-Footnote-1344840
 -Node: Assignment Ops344947
 -Ref: table-assign-ops349926
 -Node: Increment Ops351236
 -Node: Truth Values and Conditions354667
 -Node: Truth Values355750
 -Node: Typing and Comparison356799
 -Node: Variable Typing357615
 -Node: Comparison Operators361282
 -Ref: table-relational-ops361692
 -Node: POSIX String Comparison365187
 -Ref: POSIX String Comparison-Footnote-1366259
 -Node: Boolean Ops366398
 -Ref: Boolean Ops-Footnote-1370876
 -Node: Conditional Exp370967
 -Node: Function Calls372705
 -Node: Precedence376585
 -Node: Locales380245
 -Node: Expressions Summary381877
 -Node: Patterns and Actions384448
 -Node: Pattern Overview385568
 -Node: Regexp Patterns387247
 -Node: Expression Patterns387790
 -Node: Ranges391499
 -Node: BEGIN/END394606
 -Node: Using BEGIN/END395367
 -Ref: Using BEGIN/END-Footnote-1398103
 -Node: I/O And BEGIN/END398209
 -Node: BEGINFILE/ENDFILE400524
 -Node: Empty403421
 -Node: Using Shell Variables403738
 -Node: Action Overview406011
 -Node: Statements408337
 -Node: If Statement410185
 -Node: While Statement411680
 -Node: Do Statement413708
 -Node: For Statement414856
 -Node: Switch Statement418014
 -Node: Break Statement420396
 -Node: Continue Statement422437
 -Node: Next Statement424264
 -Node: Nextfile Statement426645
 -Node: Exit Statement429273
 -Node: Built-in Variables431684
 -Node: User-modified432817
 -Ref: User-modified-Footnote-1440520
 -Node: Auto-set440582
 -Ref: Auto-set-Footnote-1453634
 -Ref: Auto-set-Footnote-2453839
 -Node: ARGC and ARGV453895
 -Node: Pattern Action Summary458113
 -Node: Arrays460546
 -Node: Array Basics461875
 -Node: Array Intro462719
 -Ref: figure-array-elements464653
 -Ref: Array Intro-Footnote-1467273
 -Node: Reference to Elements467401
 -Node: Assigning Elements469863
 -Node: Array Example470354
 -Node: Scanning an Array472113
 -Node: Controlling Scanning475133
 -Ref: Controlling Scanning-Footnote-1480527
 -Node: Numeric Array Subscripts480843
 -Node: Uninitialized Subscripts483028
 -Node: Delete484645
 -Ref: Delete-Footnote-1487394
 -Node: Multidimensional487451
 -Node: Multiscanning490548
 -Node: Arrays of Arrays492137
 -Node: Arrays Summary496891
 -Node: Functions498982
 -Node: Built-in500021
 -Node: Calling Built-in501099
 -Node: Numeric Functions503094
 -Ref: Numeric Functions-Footnote-1507110
 -Ref: Numeric Functions-Footnote-2507467
 -Ref: Numeric Functions-Footnote-3507515
 -Node: String Functions507787
 -Ref: String Functions-Footnote-1531288
 -Ref: String Functions-Footnote-2531417
 -Ref: String Functions-Footnote-3531665
 -Node: Gory Details531752
 -Ref: table-sub-escapes533533
 -Ref: table-sub-proposed535048
 -Ref: table-posix-sub536410
 -Ref: table-gensub-escapes537947
 -Ref: Gory Details-Footnote-1538780
 -Node: I/O Functions538931
 -Ref: I/O Functions-Footnote-1546167
 -Node: Time Functions546314
 -Ref: Time Functions-Footnote-1556823
 -Ref: Time Functions-Footnote-2556891
 -Ref: Time Functions-Footnote-3557049
 -Ref: Time Functions-Footnote-4557160
 -Ref: Time Functions-Footnote-5557272
 -Ref: Time Functions-Footnote-6557499
 -Node: Bitwise Functions557765
 -Ref: table-bitwise-ops558327
 -Ref: Bitwise Functions-Footnote-1562639
 -Node: Type Functions562811
 -Node: I18N Functions563962
 -Node: User-defined565607
 -Node: Definition Syntax566412
 -Ref: Definition Syntax-Footnote-1571911
 -Node: Function Example571982
 -Ref: Function Example-Footnote-1574901
 -Node: Function Caveats574923
 -Node: Calling A Function575441
 -Node: Variable Scope576399
 -Node: Pass By Value/Reference579387
 -Node: Return Statement582882
 -Node: Dynamic Typing585863
 -Node: Indirect Calls586792
 -Ref: Indirect Calls-Footnote-1598110
 -Node: Functions Summary598238
 -Node: Library Functions600940
 -Ref: Library Functions-Footnote-1604549
 -Ref: Library Functions-Footnote-2604692
 -Node: Library Names604863
 -Ref: Library Names-Footnote-1608317
 -Ref: Library Names-Footnote-2608540
 -Node: General Functions608626
 -Node: Strtonum Function609729
 -Node: Assert Function612751
 -Node: Round Function616075
 -Node: Cliff Random Function617616
 -Node: Ordinal Functions618632
 -Ref: Ordinal Functions-Footnote-1621695
 -Ref: Ordinal Functions-Footnote-2621947
 -Node: Join Function622158
 -Ref: Join Function-Footnote-1623927
 -Node: Getlocaltime Function624127
 -Node: Readfile Function627871
 -Node: Shell Quoting629841
 -Node: Data File Management631242
 -Node: Filetrans Function631874
 -Node: Rewind Function635930
 -Node: File Checking637317
 -Ref: File Checking-Footnote-1638649
 -Node: Empty Files638850
 -Node: Ignoring Assigns640829
 -Node: Getopt Function642380
 -Ref: Getopt Function-Footnote-1653842
 -Node: Passwd Functions654042
 -Ref: Passwd Functions-Footnote-1662879
 -Node: Group Functions662967
 -Ref: Group Functions-Footnote-1670861
 -Node: Walking Arrays671074
 -Node: Library Functions Summary672677
 -Node: Library Exercises674078
 -Node: Sample Programs675358
 -Node: Running Examples676128
 -Node: Clones676856
 -Node: Cut Program678080
 -Node: Egrep Program687799
 -Ref: Egrep Program-Footnote-1695297
 -Node: Id Program695407
 -Node: Split Program699052
 -Ref: Split Program-Footnote-1702500
 -Node: Tee Program702628
 -Node: Uniq Program705417
 -Node: Wc Program712836
 -Ref: Wc Program-Footnote-1717086
 -Node: Miscellaneous Programs717180
 -Node: Dupword Program718393
 -Node: Alarm Program720424
 -Node: Translate Program725228
 -Ref: Translate Program-Footnote-1729793
 -Node: Labels Program730063
 -Ref: Labels Program-Footnote-1733414
 -Node: Word Sorting733498
 -Node: History Sorting737569
 -Node: Extract Program739405
 -Node: Simple Sed746930
 -Node: Igawk Program749998
 -Ref: Igawk Program-Footnote-1764322
 -Ref: Igawk Program-Footnote-2764523
 -Ref: Igawk Program-Footnote-3764645
 -Node: Anagram Program764760
 -Node: Signature Program767817
 -Node: Programs Summary769064
 -Node: Programs Exercises770257
 -Ref: Programs Exercises-Footnote-1774388
 -Node: Advanced Features774479
 -Node: Nondecimal Data776427
 -Node: Array Sorting778017
 -Node: Controlling Array Traversal778714
 -Ref: Controlling Array Traversal-Footnote-1787047
 -Node: Array Sorting Functions787165
 -Ref: Array Sorting Functions-Footnote-1791054
 -Node: Two-way I/O791250
 -Ref: Two-way I/O-Footnote-1796195
 -Ref: Two-way I/O-Footnote-2796381
 -Node: TCP/IP Networking796463
 -Node: Profiling799336
 -Node: Advanced Features Summary806883
 -Node: Internationalization808816
 -Node: I18N and L10N810296
 -Node: Explaining gettext810982
 -Ref: Explaining gettext-Footnote-1816007
 -Ref: Explaining gettext-Footnote-2816191
 -Node: Programmer i18n816356
 -Ref: Programmer i18n-Footnote-1821222
 -Node: Translator i18n821271
 -Node: String Extraction822065
 -Ref: String Extraction-Footnote-1823196
 -Node: Printf Ordering823282
 -Ref: Printf Ordering-Footnote-1826068
 -Node: I18N Portability826132
 -Ref: I18N Portability-Footnote-1828587
 -Node: I18N Example828650
 -Ref: I18N Example-Footnote-1831453
 -Node: Gawk I18N831525
 -Node: I18N Summary832163
 -Node: Debugger833502
 -Node: Debugging834524
 -Node: Debugging Concepts834965
 -Node: Debugging Terms836818
 -Node: Awk Debugging839390
 -Node: Sample Debugging Session840284
 -Node: Debugger Invocation840804
 -Node: Finding The Bug842188
 -Node: List of Debugger Commands848663
 -Node: Breakpoint Control849996
 -Node: Debugger Execution Control853692
 -Node: Viewing And Changing Data857056
 -Node: Execution Stack860434
 -Node: Debugger Info862071
 -Node: Miscellaneous Debugger Commands866088
 -Node: Readline Support871117
 -Node: Limitations872009
 -Node: Debugging Summary874123
 -Node: Arbitrary Precision Arithmetic875291
 -Node: Computer Arithmetic876707
 -Ref: table-numeric-ranges880305
 -Ref: Computer Arithmetic-Footnote-1881164
 -Node: Math Definitions881221
 -Ref: table-ieee-formats884509
 -Ref: Math Definitions-Footnote-1885113
 -Node: MPFR features885218
 -Node: FP Math Caution886889
 -Ref: FP Math Caution-Footnote-1887939
 -Node: Inexactness of computations888308
 -Node: Inexact representation889267
 -Node: Comparing FP Values890624
 -Node: Errors accumulate891706
 -Node: Getting Accuracy893139
 -Node: Try To Round895801
 -Node: Setting precision896700
 -Ref: table-predefined-precision-strings897384
 -Node: Setting the rounding mode899173
 -Ref: table-gawk-rounding-modes899537
 -Ref: Setting the rounding mode-Footnote-1902992
 -Node: Arbitrary Precision Integers903171
 -Ref: Arbitrary Precision Integers-Footnote-1906157
 -Node: POSIX Floating Point Problems906306
 -Ref: POSIX Floating Point Problems-Footnote-1910179
 -Node: Floating point summary910217
 -Node: Dynamic Extensions912411
 -Node: Extension Intro913963
 -Node: Plugin License915229
 -Node: Extension Mechanism Outline916026
 -Ref: figure-load-extension916454
 -Ref: figure-register-new-function917934
 -Ref: figure-call-new-function918938
 -Node: Extension API Description920924
 -Node: Extension API Functions Introduction922374
 -Node: General Data Types927198
 -Ref: General Data Types-Footnote-1932937
 -Node: Memory Allocation Functions933236
 -Ref: Memory Allocation Functions-Footnote-1936075
 -Node: Constructor Functions936171
 -Node: Registration Functions937905
 -Node: Extension Functions938590
 -Node: Exit Callback Functions940887
 -Node: Extension Version String942135
 -Node: Input Parsers942800
 -Node: Output Wrappers952679
 -Node: Two-way processors957194
 -Node: Printing Messages959398
 -Ref: Printing Messages-Footnote-1960474
 -Node: Updating `ERRNO'960626
 -Node: Requesting Values961366
 -Ref: table-value-types-returned962094
 -Node: Accessing Parameters963051
 -Node: Symbol Table Access964282
 -Node: Symbol table by name964796
 -Node: Symbol table by cookie966777
 -Ref: Symbol table by cookie-Footnote-1970921
 -Node: Cached values970984
 -Ref: Cached values-Footnote-1974483
 -Node: Array Manipulation974574
 -Ref: Array Manipulation-Footnote-1975672
 -Node: Array Data Types975709
 -Ref: Array Data Types-Footnote-1978364
 -Node: Array Functions978456
 -Node: Flattening Arrays982310
 -Node: Creating Arrays989202
 -Node: Extension API Variables993973
 -Node: Extension Versioning994609
 -Node: Extension API Informational Variables996510
 -Node: Extension API Boilerplate997575
 -Node: Finding Extensions1001384
 -Node: Extension Example1001944
 -Node: Internal File Description1002716
 -Node: Internal File Ops1006783
 -Ref: Internal File Ops-Footnote-11018453
 -Node: Using Internal File Ops1018593
 -Ref: Using Internal File Ops-Footnote-11020976
 -Node: Extension Samples1021249
 -Node: Extension Sample File Functions1022775
 -Node: Extension Sample Fnmatch1030413
 -Node: Extension Sample Fork1031904
 -Node: Extension Sample Inplace1033119
 -Node: Extension Sample Ord1034794
 -Node: Extension Sample Readdir1035630
 -Ref: table-readdir-file-types1036506
 -Node: Extension Sample Revout1037317
 -Node: Extension Sample Rev2way1037907
 -Node: Extension Sample Read write array1038647
 -Node: Extension Sample Readfile1040587
 -Node: Extension Sample Time1041682
 -Node: Extension Sample API Tests1043031
 -Node: gawkextlib1043522
 -Node: Extension summary1046180
 -Node: Extension Exercises1049869
 -Node: Language History1050591
 -Node: V7/SVR3.11052247
 -Node: SVR41054428
 -Node: POSIX1055873
 -Node: BTL1057262
 -Node: POSIX/GNU1057996
 -Node: Feature History1063560
 -Node: Common Extensions1076658
 -Node: Ranges and Locales1077982
 -Ref: Ranges and Locales-Footnote-11082600
 -Ref: Ranges and Locales-Footnote-21082627
 -Ref: Ranges and Locales-Footnote-31082861
 -Node: Contributors1083082
 -Node: History summary1088623
 -Node: Installation1089993
 -Node: Gawk Distribution1090939
 -Node: Getting1091423
 -Node: Extracting1092246
 -Node: Distribution contents1093881
 -Node: Unix Installation1099598
 -Node: Quick Installation1100215
 -Node: Additional Configuration Options1102639
 -Node: Configuration Philosophy1104377
 -Node: Non-Unix Installation1106746
 -Node: PC Installation1107204
 -Node: PC Binary Installation1108523
 -Node: PC Compiling1110371
 -Ref: PC Compiling-Footnote-11113392
 -Node: PC Testing1113501
 -Node: PC Using1114677
 -Node: Cygwin1118792
 -Node: MSYS1119615
 -Node: VMS Installation1120115
 -Node: VMS Compilation1120907
 -Ref: VMS Compilation-Footnote-11122129
 -Node: VMS Dynamic Extensions1122187
 -Node: VMS Installation Details1123871
 -Node: VMS Running1126123
 -Node: VMS GNV1128959
 -Node: VMS Old Gawk1129693
 -Node: Bugs1130163
 -Node: Other Versions1134046
 -Node: Installation summary1140470
 -Node: Notes1141526
 -Node: Compatibility Mode1142391
 -Node: Additions1143173
 -Node: Accessing The Source1144098
 -Node: Adding Code1145533
 -Node: New Ports1151690
 -Node: Derived Files1156172
 -Ref: Derived Files-Footnote-11161647
 -Ref: Derived Files-Footnote-21161681
 -Ref: Derived Files-Footnote-31162277
 -Node: Future Extensions1162391
 -Node: Implementation Limitations1162997
 -Node: Extension Design1164245
 -Node: Old Extension Problems1165399
 -Ref: Old Extension Problems-Footnote-11166916
 -Node: Extension New Mechanism Goals1166973
 -Ref: Extension New Mechanism Goals-Footnote-11170333
 -Node: Extension Other Design Decisions1170522
 -Node: Extension Future Growth1172630
 -Node: Old Extension Mechanism1173466
 -Node: Notes summary1175228
 -Node: Basic Concepts1176414
 -Node: Basic High Level1177095
 -Ref: figure-general-flow1177367
 -Ref: figure-process-flow1177966
 -Ref: Basic High Level-Footnote-11181195
 -Node: Basic Data Typing1181380
 -Node: Glossary1184708
 -Node: Copying1216637
 -Node: GNU Free Documentation License1254193
 -Node: Index1279329
 +Node: Foreword342225
 +Node: Foreword446669
 +Node: Preface48200
 +Ref: Preface-Footnote-151071
 +Ref: Preface-Footnote-251178
 +Ref: Preface-Footnote-351411
 +Node: History51553
 +Node: Names53904
 +Ref: Names-Footnote-154997
 +Node: This Manual55143
 +Ref: This Manual-Footnote-161643
 +Node: Conventions61743
 +Node: Manual History64080
 +Ref: Manual History-Footnote-167073
 +Ref: Manual History-Footnote-267114
 +Node: How To Contribute67188
 +Node: Acknowledgments68317
 +Node: Getting Started73134
 +Node: Running gawk75573
 +Node: One-shot76763
 +Node: Read Terminal78027
 +Node: Long80058
 +Node: Executable Scripts81571
 +Ref: Executable Scripts-Footnote-184360
 +Node: Comments84463
 +Node: Quoting86945
 +Node: DOS Quoting92463
 +Node: Sample Data Files93138
 +Node: Very Simple95733
 +Node: Two Rules100632
 +Node: More Complex102518
 +Node: Statements/Lines105380
 +Ref: Statements/Lines-Footnote-1109835
 +Node: Other Features110100
 +Node: When111036
 +Ref: When-Footnote-1112790
 +Node: Intro Summary112855
 +Node: Invoking Gawk113739
 +Node: Command Line115253
 +Node: Options116051
 +Ref: Options-Footnote-1131846
 +Ref: Options-Footnote-2132075
 +Node: Other Arguments132100
 +Node: Naming Standard Input135048
 +Node: Environment Variables136141
 +Node: AWKPATH Variable136699
 +Ref: AWKPATH Variable-Footnote-1140106
 +Ref: AWKPATH Variable-Footnote-2140151
 +Node: AWKLIBPATH Variable140411
 +Node: Other Environment Variables141667
 +Node: Exit Status145185
 +Node: Include Files145861
 +Node: Loading Shared Libraries149450
 +Node: Obsolete150877
 +Node: Undocumented151569
 +Node: Invoking Summary151836
 +Node: Regexp153499
 +Node: Regexp Usage154953
 +Node: Escape Sequences156990
 +Node: Regexp Operators163230
 +Ref: Regexp Operators-Footnote-1170640
 +Ref: Regexp Operators-Footnote-2170787
 +Node: Bracket Expressions170885
 +Ref: table-char-classes172900
 +Node: Leftmost Longest175842
 +Node: Computed Regexps177144
 +Node: GNU Regexp Operators180573
 +Node: Case-sensitivity184245
 +Ref: Case-sensitivity-Footnote-1187130
 +Ref: Case-sensitivity-Footnote-2187365
 +Node: Regexp Summary187473
 +Node: Reading Files188940
 +Node: Records191033
 +Node: awk split records191766
 +Node: gawk split records196695
 +Ref: gawk split records-Footnote-1201234
 +Node: Fields201271
 +Ref: Fields-Footnote-1204049
 +Node: Nonconstant Fields204135
 +Ref: Nonconstant Fields-Footnote-1206373
 +Node: Changing Fields206576
 +Node: Field Separators212507
 +Node: Default Field Splitting215211
 +Node: Regexp Field Splitting216328
 +Node: Single Character Fields219678
 +Node: Command Line Field Separator220737
 +Node: Full Line Fields223954
 +Ref: Full Line Fields-Footnote-1225475
 +Ref: Full Line Fields-Footnote-2225521
 +Node: Field Splitting Summary225622
 +Node: Constant Size227696
 +Node: Splitting By Content232279
 +Ref: Splitting By Content-Footnote-1236244
 +Node: Multiple Line236407
 +Ref: Multiple Line-Footnote-1242288
 +Node: Getline242467
 +Node: Plain Getline244674
 +Node: Getline/Variable247314
 +Node: Getline/File248463
 +Node: Getline/Variable/File249848
 +Ref: Getline/Variable/File-Footnote-1251451
 +Node: Getline/Pipe251538
 +Node: Getline/Variable/Pipe254216
 +Node: Getline/Coprocess255347
 +Node: Getline/Variable/Coprocess256611
 +Node: Getline Notes257350
 +Node: Getline Summary260144
 +Ref: table-getline-variants260556
 +Node: Read Timeout261385
 +Ref: Read Timeout-Footnote-1265222
 +Node: Command-line directories265280
 +Node: Input Summary266185
 +Node: Input Exercises269570
 +Node: Printing270298
 +Node: Print272075
 +Node: Print Examples273532
 +Node: Output Separators276311
 +Node: OFMT278329
 +Node: Printf279684
 +Node: Basic Printf280469
 +Node: Control Letters282041
 +Node: Format Modifiers286026
 +Node: Printf Examples292036
 +Node: Redirection294522
 +Node: Special FD301360
 +Ref: Special FD-Footnote-1304526
 +Node: Special Files304600
 +Node: Other Inherited Files305217
 +Node: Special Network306217
 +Node: Special Caveats307079
 +Node: Close Files And Pipes308028
 +Ref: Close Files And Pipes-Footnote-1315219
 +Ref: Close Files And Pipes-Footnote-2315367
 +Node: Output Summary315517
 +Node: Output Exercises316515
 +Node: Expressions317195
 +Node: Values318384
 +Node: Constants319061
 +Node: Scalar Constants319752
 +Ref: Scalar Constants-Footnote-1320614
 +Node: Nondecimal-numbers320864
 +Node: Regexp Constants323874
 +Node: Using Constant Regexps324400
 +Node: Variables327563
 +Node: Using Variables328220
 +Node: Assignment Options330131
 +Node: Conversion332006
 +Node: Strings And Numbers332530
 +Ref: Strings And Numbers-Footnote-1335595
 +Node: Locale influences conversions335704
 +Ref: table-locale-affects338450
 +Node: All Operators339042
 +Node: Arithmetic Ops339671
 +Node: Concatenation342176
 +Ref: Concatenation-Footnote-1344995
 +Node: Assignment Ops345102
 +Ref: table-assign-ops350081
 +Node: Increment Ops351391
 +Node: Truth Values and Conditions354822
 +Node: Truth Values355905
 +Node: Typing and Comparison356954
 +Node: Variable Typing357770
 +Node: Comparison Operators361437
 +Ref: table-relational-ops361847
 +Node: POSIX String Comparison365342
 +Ref: POSIX String Comparison-Footnote-1366414
 +Node: Boolean Ops366553
 +Ref: Boolean Ops-Footnote-1371031
 +Node: Conditional Exp371122
 +Node: Function Calls372860
 +Node: Precedence376740
 +Node: Locales380400
 +Node: Expressions Summary382032
 +Node: Patterns and Actions384603
 +Node: Pattern Overview385723
 +Node: Regexp Patterns387402
 +Node: Expression Patterns387945
 +Node: Ranges391654
 +Node: BEGIN/END394761
 +Node: Using BEGIN/END395522
 +Ref: Using BEGIN/END-Footnote-1398258
 +Node: I/O And BEGIN/END398364
 +Node: BEGINFILE/ENDFILE400679
 +Node: Empty403576
 +Node: Using Shell Variables403893
 +Node: Action Overview406166
 +Node: Statements408492
 +Node: If Statement410340
 +Node: While Statement411835
 +Node: Do Statement413863
 +Node: For Statement415011
 +Node: Switch Statement418169
 +Node: Break Statement420551
 +Node: Continue Statement422592
 +Node: Next Statement424419
 +Node: Nextfile Statement426800
 +Node: Exit Statement429428
 +Node: Built-in Variables431839
 +Node: User-modified432972
 +Ref: User-modified-Footnote-1440675
 +Node: Auto-set440737
 +Ref: Auto-set-Footnote-1454446
 +Ref: Auto-set-Footnote-2454651
 +Node: ARGC and ARGV454707
 +Node: Pattern Action Summary458925
 +Node: Arrays461358
 +Node: Array Basics462687
 +Node: Array Intro463531
 +Ref: figure-array-elements465465
 +Ref: Array Intro-Footnote-1468085
 +Node: Reference to Elements468213
 +Node: Assigning Elements470675
 +Node: Array Example471166
 +Node: Scanning an Array472925
 +Node: Controlling Scanning475945
 +Ref: Controlling Scanning-Footnote-1481339
 +Node: Numeric Array Subscripts481655
 +Node: Uninitialized Subscripts483840
 +Node: Delete485457
 +Ref: Delete-Footnote-1488206
 +Node: Multidimensional488263
 +Node: Multiscanning491360
 +Node: Arrays of Arrays492949
 +Node: Arrays Summary497703
 +Node: Functions499794
 +Node: Built-in500833
 +Node: Calling Built-in501911
 +Node: Numeric Functions503906
 +Ref: Numeric Functions-Footnote-1508724
 +Ref: Numeric Functions-Footnote-2509081
 +Ref: Numeric Functions-Footnote-3509129
 +Node: String Functions509401
 +Ref: String Functions-Footnote-1532902
 +Ref: String Functions-Footnote-2533031
 +Ref: String Functions-Footnote-3533279
 +Node: Gory Details533366
 +Ref: table-sub-escapes535147
 +Ref: table-sub-proposed536662
 +Ref: table-posix-sub538024
 +Ref: table-gensub-escapes539561
 +Ref: Gory Details-Footnote-1540394
 +Node: I/O Functions540545
 +Ref: I/O Functions-Footnote-1547781
 +Node: Time Functions547928
 +Ref: Time Functions-Footnote-1558437
 +Ref: Time Functions-Footnote-2558505
 +Ref: Time Functions-Footnote-3558663
 +Ref: Time Functions-Footnote-4558774
 +Ref: Time Functions-Footnote-5558886
 +Ref: Time Functions-Footnote-6559113
 +Node: Bitwise Functions559379
 +Ref: table-bitwise-ops559941
 +Ref: Bitwise Functions-Footnote-1564253
 +Node: Type Functions564425
 +Node: I18N Functions565576
 +Node: User-defined567221
 +Node: Definition Syntax568026
- Ref: Definition Syntax-Footnote-1573433
- Node: Function Example573504
- Ref: Function Example-Footnote-1576423
- Node: Function Caveats576445
- Node: Calling A Function576963
- Node: Variable Scope577921
- Node: Pass By Value/Reference580909
- Node: Return Statement584404
- Node: Dynamic Typing587385
- Node: Indirect Calls588314
- Ref: Indirect Calls-Footnote-1599616
- Node: Functions Summary599744
- Node: Library Functions602446
- Ref: Library Functions-Footnote-1606055
- Ref: Library Functions-Footnote-2606198
- Node: Library Names606369
- Ref: Library Names-Footnote-1609823
- Ref: Library Names-Footnote-2610046
- Node: General Functions610132
- Node: Strtonum Function611235
- Node: Assert Function614257
- Node: Round Function617581
- Node: Cliff Random Function619122
- Node: Ordinal Functions620138
- Ref: Ordinal Functions-Footnote-1623201
- Ref: Ordinal Functions-Footnote-2623453
- Node: Join Function623664
- Ref: Join Function-Footnote-1625433
- Node: Getlocaltime Function625633
- Node: Readfile Function629377
- Node: Shell Quoting631347
- Node: Data File Management632748
- Node: Filetrans Function633380
- Node: Rewind Function637436
- Node: File Checking638823
- Ref: File Checking-Footnote-1640155
- Node: Empty Files640356
- Node: Ignoring Assigns642335
- Node: Getopt Function643886
- Ref: Getopt Function-Footnote-1655348
- Node: Passwd Functions655548
- Ref: Passwd Functions-Footnote-1664385
- Node: Group Functions664473
- Ref: Group Functions-Footnote-1672367
- Node: Walking Arrays672580
- Node: Library Functions Summary674183
- Node: Library Exercises675584
- Node: Sample Programs676864
- Node: Running Examples677634
- Node: Clones678362
- Node: Cut Program679586
- Node: Egrep Program689305
- Ref: Egrep Program-Footnote-1696803
- Node: Id Program696913
- Node: Split Program700558
- Ref: Split Program-Footnote-1704006
- Node: Tee Program704134
- Node: Uniq Program706923
- Node: Wc Program714342
- Ref: Wc Program-Footnote-1718592
- Node: Miscellaneous Programs718686
- Node: Dupword Program719899
- Node: Alarm Program721930
- Node: Translate Program726734
- Ref: Translate Program-Footnote-1731299
- Node: Labels Program731569
- Ref: Labels Program-Footnote-1734920
- Node: Word Sorting735004
- Node: History Sorting739075
- Node: Extract Program740911
- Node: Simple Sed748436
- Node: Igawk Program751504
- Ref: Igawk Program-Footnote-1765828
- Ref: Igawk Program-Footnote-2766029
- Ref: Igawk Program-Footnote-3766151
- Node: Anagram Program766266
- Node: Signature Program769323
- Node: Programs Summary770570
- Node: Programs Exercises771763
- Ref: Programs Exercises-Footnote-1775894
- Node: Advanced Features775985
- Node: Nondecimal Data777933
- Node: Array Sorting779523
- Node: Controlling Array Traversal780220
- Ref: Controlling Array Traversal-Footnote-1788553
- Node: Array Sorting Functions788671
- Ref: Array Sorting Functions-Footnote-1792560
- Node: Two-way I/O792756
- Ref: Two-way I/O-Footnote-1797701
- Ref: Two-way I/O-Footnote-2797887
- Node: TCP/IP Networking797969
- Node: Profiling800842
- Node: Advanced Features Summary809119
- Node: Internationalization811052
- Node: I18N and L10N812532
- Node: Explaining gettext813218
- Ref: Explaining gettext-Footnote-1818243
- Ref: Explaining gettext-Footnote-2818427
- Node: Programmer i18n818592
- Ref: Programmer i18n-Footnote-1823458
- Node: Translator i18n823507
- Node: String Extraction824301
- Ref: String Extraction-Footnote-1825432
- Node: Printf Ordering825518
- Ref: Printf Ordering-Footnote-1828304
- Node: I18N Portability828368
- Ref: I18N Portability-Footnote-1830823
- Node: I18N Example830886
- Ref: I18N Example-Footnote-1833689
- Node: Gawk I18N833761
- Node: I18N Summary834399
- Node: Debugger835738
- Node: Debugging836760
- Node: Debugging Concepts837201
- Node: Debugging Terms839054
- Node: Awk Debugging841626
- Node: Sample Debugging Session842520
- Node: Debugger Invocation843040
- Node: Finding The Bug844424
- Node: List of Debugger Commands850899
- Node: Breakpoint Control852232
- Node: Debugger Execution Control855928
- Node: Viewing And Changing Data859292
- Node: Execution Stack862670
- Node: Debugger Info864307
- Node: Miscellaneous Debugger Commands868324
- Node: Readline Support873353
- Node: Limitations874245
- Node: Debugging Summary876359
- Node: Arbitrary Precision Arithmetic877527
- Node: Computer Arithmetic878943
- Ref: table-numeric-ranges882541
- Ref: Computer Arithmetic-Footnote-1883400
- Node: Math Definitions883457
- Ref: table-ieee-formats886745
- Ref: Math Definitions-Footnote-1887349
- Node: MPFR features887454
- Node: FP Math Caution889125
- Ref: FP Math Caution-Footnote-1890175
- Node: Inexactness of computations890544
- Node: Inexact representation891503
- Node: Comparing FP Values892860
- Node: Errors accumulate893942
- Node: Getting Accuracy895375
- Node: Try To Round898037
- Node: Setting precision898936
- Ref: table-predefined-precision-strings899620
- Node: Setting the rounding mode901409
- Ref: table-gawk-rounding-modes901773
- Ref: Setting the rounding mode-Footnote-1905228
- Node: Arbitrary Precision Integers905407
- Ref: Arbitrary Precision Integers-Footnote-1910307
- Node: POSIX Floating Point Problems910456
- Ref: POSIX Floating Point Problems-Footnote-1914329
- Node: Floating point summary914367
- Node: Dynamic Extensions916561
- Node: Extension Intro918113
- Node: Plugin License919379
- Node: Extension Mechanism Outline920176
- Ref: figure-load-extension920604
- Ref: figure-register-new-function922084
- Ref: figure-call-new-function923088
- Node: Extension API Description925074
- Node: Extension API Functions Introduction926524
- Node: General Data Types931348
- Ref: General Data Types-Footnote-1937087
- Node: Memory Allocation Functions937386
- Ref: Memory Allocation Functions-Footnote-1940225
- Node: Constructor Functions940321
- Node: Registration Functions942055
- Node: Extension Functions942740
- Node: Exit Callback Functions945037
- Node: Extension Version String946285
- Node: Input Parsers946950
- Node: Output Wrappers956829
- Node: Two-way processors961344
- Node: Printing Messages963548
- Ref: Printing Messages-Footnote-1964624
- Node: Updating `ERRNO'964776
- Node: Requesting Values965516
- Ref: table-value-types-returned966244
- Node: Accessing Parameters967201
- Node: Symbol Table Access968432
- Node: Symbol table by name968946
- Node: Symbol table by cookie970927
- Ref: Symbol table by cookie-Footnote-1975071
- Node: Cached values975134
- Ref: Cached values-Footnote-1978633
- Node: Array Manipulation978724
- Ref: Array Manipulation-Footnote-1979822
- Node: Array Data Types979859
- Ref: Array Data Types-Footnote-1982514
- Node: Array Functions982606
- Node: Flattening Arrays986460
- Node: Creating Arrays993352
- Node: Extension API Variables998123
- Node: Extension Versioning998759
- Node: Extension API Informational Variables1000660
- Node: Extension API Boilerplate1001725
- Node: Finding Extensions1005534
- Node: Extension Example1006094
- Node: Internal File Description1006866
- Node: Internal File Ops1010933
- Ref: Internal File Ops-Footnote-11022603
- Node: Using Internal File Ops1022743
- Ref: Using Internal File Ops-Footnote-11025126
- Node: Extension Samples1025399
- Node: Extension Sample File Functions1026925
- Node: Extension Sample Fnmatch1034563
- Node: Extension Sample Fork1036054
- Node: Extension Sample Inplace1037269
- Node: Extension Sample Ord1038944
- Node: Extension Sample Readdir1039780
- Ref: table-readdir-file-types1040656
- Node: Extension Sample Revout1041467
- Node: Extension Sample Rev2way1042057
- Node: Extension Sample Read write array1042797
- Node: Extension Sample Readfile1044737
- Node: Extension Sample Time1045832
- Node: Extension Sample API Tests1047181
- Node: gawkextlib1047672
- Node: Extension summary1050330
- Node: Extension Exercises1054019
- Node: Language History1054741
- Node: V7/SVR3.11056397
- Node: SVR41058578
- Node: POSIX1060023
- Node: BTL1061412
- Node: POSIX/GNU1062146
- Node: Feature History1067770
- Node: Common Extensions1080868
- Node: Ranges and Locales1082192
- Ref: Ranges and Locales-Footnote-11086810
- Ref: Ranges and Locales-Footnote-21086837
- Ref: Ranges and Locales-Footnote-31087071
- Node: Contributors1087292
- Node: History summary1092833
- Node: Installation1094203
- Node: Gawk Distribution1095149
- Node: Getting1095633
- Node: Extracting1096456
- Node: Distribution contents1098091
- Node: Unix Installation1104156
- Node: Quick Installation1104839
- Node: Shell Startup Files1107250
- Node: Additional Configuration Options1108329
- Node: Configuration Philosophy1110068
- Node: Non-Unix Installation1112437
- Node: PC Installation1112895
- Node: PC Binary Installation1114214
- Node: PC Compiling1116062
- Ref: PC Compiling-Footnote-11119083
- Node: PC Testing1119192
- Node: PC Using1120368
- Node: Cygwin1124483
- Node: MSYS1125306
- Node: VMS Installation1125806
- Node: VMS Compilation1126598
- Ref: VMS Compilation-Footnote-11127820
- Node: VMS Dynamic Extensions1127878
- Node: VMS Installation Details1129562
- Node: VMS Running1131814
- Node: VMS GNV1134650
- Node: VMS Old Gawk1135384
- Node: Bugs1135854
- Node: Other Versions1139737
- Node: Installation summary1146161
- Node: Notes1147217
- Node: Compatibility Mode1148082
- Node: Additions1148864
- Node: Accessing The Source1149789
- Node: Adding Code1151224
- Node: New Ports1157381
- Node: Derived Files1161863
- Ref: Derived Files-Footnote-11167338
- Ref: Derived Files-Footnote-21167372
- Ref: Derived Files-Footnote-31167968
- Node: Future Extensions1168082
- Node: Implementation Limitations1168688
- Node: Extension Design1169936
- Node: Old Extension Problems1171090
- Ref: Old Extension Problems-Footnote-11172607
- Node: Extension New Mechanism Goals1172664
- Ref: Extension New Mechanism Goals-Footnote-11176024
- Node: Extension Other Design Decisions1176213
- Node: Extension Future Growth1178321
- Node: Old Extension Mechanism1179157
- Node: Notes summary1180919
- Node: Basic Concepts1182105
- Node: Basic High Level1182786
- Ref: figure-general-flow1183058
- Ref: figure-process-flow1183657
- Ref: Basic High Level-Footnote-11186886
- Node: Basic Data Typing1187071
- Node: Glossary1190399
- Node: Copying1222328
- Node: GNU Free Documentation License1259884
- Node: Index1285020
++Ref: Definition Syntax-Footnote-1573525
++Node: Function Example573596
++Ref: Function Example-Footnote-1576515
++Node: Function Caveats576537
++Node: Calling A Function577055
++Node: Variable Scope578013
++Node: Pass By Value/Reference581001
++Node: Return Statement584496
++Node: Dynamic Typing587477
++Node: Indirect Calls588406
++Ref: Indirect Calls-Footnote-1599724
++Node: Functions Summary599852
++Node: Library Functions602554
++Ref: Library Functions-Footnote-1606163
++Ref: Library Functions-Footnote-2606306
++Node: Library Names606477
++Ref: Library Names-Footnote-1609931
++Ref: Library Names-Footnote-2610154
++Node: General Functions610240
++Node: Strtonum Function611343
++Node: Assert Function614365
++Node: Round Function617689
++Node: Cliff Random Function619230
++Node: Ordinal Functions620246
++Ref: Ordinal Functions-Footnote-1623309
++Ref: Ordinal Functions-Footnote-2623561
++Node: Join Function623772
++Ref: Join Function-Footnote-1625541
++Node: Getlocaltime Function625741
++Node: Readfile Function629485
++Node: Shell Quoting631455
++Node: Data File Management632856
++Node: Filetrans Function633488
++Node: Rewind Function637544
++Node: File Checking638931
++Ref: File Checking-Footnote-1640263
++Node: Empty Files640464
++Node: Ignoring Assigns642443
++Node: Getopt Function643994
++Ref: Getopt Function-Footnote-1655456
++Node: Passwd Functions655656
++Ref: Passwd Functions-Footnote-1664493
++Node: Group Functions664581
++Ref: Group Functions-Footnote-1672475
++Node: Walking Arrays672688
++Node: Library Functions Summary674291
++Node: Library Exercises675692
++Node: Sample Programs676972
++Node: Running Examples677742
++Node: Clones678470
++Node: Cut Program679694
++Node: Egrep Program689413
++Ref: Egrep Program-Footnote-1696911
++Node: Id Program697021
++Node: Split Program700666
++Ref: Split Program-Footnote-1704114
++Node: Tee Program704242
++Node: Uniq Program707031
++Node: Wc Program714450
++Ref: Wc Program-Footnote-1718700
++Node: Miscellaneous Programs718794
++Node: Dupword Program720007
++Node: Alarm Program722038
++Node: Translate Program726842
++Ref: Translate Program-Footnote-1731407
++Node: Labels Program731677
++Ref: Labels Program-Footnote-1735028
++Node: Word Sorting735112
++Node: History Sorting739183
++Node: Extract Program741019
++Node: Simple Sed748544
++Node: Igawk Program751612
++Ref: Igawk Program-Footnote-1765936
++Ref: Igawk Program-Footnote-2766137
++Ref: Igawk Program-Footnote-3766259
++Node: Anagram Program766374
++Node: Signature Program769431
++Node: Programs Summary770678
++Node: Programs Exercises771871
++Ref: Programs Exercises-Footnote-1776002
++Node: Advanced Features776093
++Node: Nondecimal Data778041
++Node: Array Sorting779631
++Node: Controlling Array Traversal780328
++Ref: Controlling Array Traversal-Footnote-1788661
++Node: Array Sorting Functions788779
++Ref: Array Sorting Functions-Footnote-1792668
++Node: Two-way I/O792864
++Ref: Two-way I/O-Footnote-1797809
++Ref: Two-way I/O-Footnote-2797995
++Node: TCP/IP Networking798077
++Node: Profiling800950
++Node: Advanced Features Summary809227
++Node: Internationalization811160
++Node: I18N and L10N812640
++Node: Explaining gettext813326
++Ref: Explaining gettext-Footnote-1818351
++Ref: Explaining gettext-Footnote-2818535
++Node: Programmer i18n818700
++Ref: Programmer i18n-Footnote-1823566
++Node: Translator i18n823615
++Node: String Extraction824409
++Ref: String Extraction-Footnote-1825540
++Node: Printf Ordering825626
++Ref: Printf Ordering-Footnote-1828412
++Node: I18N Portability828476
++Ref: I18N Portability-Footnote-1830931
++Node: I18N Example830994
++Ref: I18N Example-Footnote-1833797
++Node: Gawk I18N833869
++Node: I18N Summary834507
++Node: Debugger835846
++Node: Debugging836868
++Node: Debugging Concepts837309
++Node: Debugging Terms839162
++Node: Awk Debugging841734
++Node: Sample Debugging Session842628
++Node: Debugger Invocation843148
++Node: Finding The Bug844532
++Node: List of Debugger Commands851007
++Node: Breakpoint Control852340
++Node: Debugger Execution Control856036
++Node: Viewing And Changing Data859400
++Node: Execution Stack862778
++Node: Debugger Info864415
++Node: Miscellaneous Debugger Commands868432
++Node: Readline Support873461
++Node: Limitations874353
++Node: Debugging Summary876467
++Node: Arbitrary Precision Arithmetic877635
++Node: Computer Arithmetic879051
++Ref: table-numeric-ranges882649
++Ref: Computer Arithmetic-Footnote-1883508
++Node: Math Definitions883565
++Ref: table-ieee-formats886853
++Ref: Math Definitions-Footnote-1887457
++Node: MPFR features887562
++Node: FP Math Caution889233
++Ref: FP Math Caution-Footnote-1890283
++Node: Inexactness of computations890652
++Node: Inexact representation891611
++Node: Comparing FP Values892968
++Node: Errors accumulate894050
++Node: Getting Accuracy895483
++Node: Try To Round898145
++Node: Setting precision899044
++Ref: table-predefined-precision-strings899728
++Node: Setting the rounding mode901517
++Ref: table-gawk-rounding-modes901881
++Ref: Setting the rounding mode-Footnote-1905336
++Node: Arbitrary Precision Integers905515
++Ref: Arbitrary Precision Integers-Footnote-1910415
++Node: POSIX Floating Point Problems910564
++Ref: POSIX Floating Point Problems-Footnote-1914437
++Node: Floating point summary914475
++Node: Dynamic Extensions916669
++Node: Extension Intro918221
++Node: Plugin License919487
++Node: Extension Mechanism Outline920284
++Ref: figure-load-extension920712
++Ref: figure-register-new-function922192
++Ref: figure-call-new-function923196
++Node: Extension API Description925182
++Node: Extension API Functions Introduction926632
++Node: General Data Types931456
++Ref: General Data Types-Footnote-1937195
++Node: Memory Allocation Functions937494
++Ref: Memory Allocation Functions-Footnote-1940333
++Node: Constructor Functions940429
++Node: Registration Functions942163
++Node: Extension Functions942848
++Node: Exit Callback Functions945145
++Node: Extension Version String946393
++Node: Input Parsers947058
++Node: Output Wrappers956937
++Node: Two-way processors961452
++Node: Printing Messages963656
++Ref: Printing Messages-Footnote-1964732
++Node: Updating `ERRNO'964884
++Node: Requesting Values965624
++Ref: table-value-types-returned966352
++Node: Accessing Parameters967309
++Node: Symbol Table Access968540
++Node: Symbol table by name969054
++Node: Symbol table by cookie971035
++Ref: Symbol table by cookie-Footnote-1975179
++Node: Cached values975242
++Ref: Cached values-Footnote-1978741
++Node: Array Manipulation978832
++Ref: Array Manipulation-Footnote-1979930
++Node: Array Data Types979967
++Ref: Array Data Types-Footnote-1982622
++Node: Array Functions982714
++Node: Flattening Arrays986568
++Node: Creating Arrays993460
++Node: Extension API Variables998231
++Node: Extension Versioning998867
++Node: Extension API Informational Variables1000768
++Node: Extension API Boilerplate1001833
++Node: Finding Extensions1005642
++Node: Extension Example1006202
++Node: Internal File Description1006974
++Node: Internal File Ops1011041
++Ref: Internal File Ops-Footnote-11022711
++Node: Using Internal File Ops1022851
++Ref: Using Internal File Ops-Footnote-11025234
++Node: Extension Samples1025507
++Node: Extension Sample File Functions1027033
++Node: Extension Sample Fnmatch1034671
++Node: Extension Sample Fork1036162
++Node: Extension Sample Inplace1037377
++Node: Extension Sample Ord1039052
++Node: Extension Sample Readdir1039888
++Ref: table-readdir-file-types1040764
++Node: Extension Sample Revout1041575
++Node: Extension Sample Rev2way1042165
++Node: Extension Sample Read write array1042905
++Node: Extension Sample Readfile1044845
++Node: Extension Sample Time1045940
++Node: Extension Sample API Tests1047289
++Node: gawkextlib1047780
++Node: Extension summary1050438
++Node: Extension Exercises1054127
++Node: Language History1054849
++Node: V7/SVR3.11056505
++Node: SVR41058686
++Node: POSIX1060131
++Node: BTL1061520
++Node: POSIX/GNU1062254
++Node: Feature History1067878
++Node: Common Extensions1080976
++Node: Ranges and Locales1082300
++Ref: Ranges and Locales-Footnote-11086918
++Ref: Ranges and Locales-Footnote-21086945
++Ref: Ranges and Locales-Footnote-31087179
++Node: Contributors1087400
++Node: History summary1092941
++Node: Installation1094311
++Node: Gawk Distribution1095257
++Node: Getting1095741
++Node: Extracting1096564
++Node: Distribution contents1098199
++Node: Unix Installation1104264
++Node: Quick Installation1104947
++Node: Shell Startup Files1107358
++Node: Additional Configuration Options1108437
++Node: Configuration Philosophy1110176
++Node: Non-Unix Installation1112545
++Node: PC Installation1113003
++Node: PC Binary Installation1114322
++Node: PC Compiling1116170
++Ref: PC Compiling-Footnote-11119191
++Node: PC Testing1119300
++Node: PC Using1120476
++Node: Cygwin1124591
++Node: MSYS1125414
++Node: VMS Installation1125914
++Node: VMS Compilation1126706
++Ref: VMS Compilation-Footnote-11127928
++Node: VMS Dynamic Extensions1127986
++Node: VMS Installation Details1129670
++Node: VMS Running1131922
++Node: VMS GNV1134758
++Node: VMS Old Gawk1135492
++Node: Bugs1135962
++Node: Other Versions1139845
++Node: Installation summary1146269
++Node: Notes1147325
++Node: Compatibility Mode1148190
++Node: Additions1148972
++Node: Accessing The Source1149897
++Node: Adding Code1151332
++Node: New Ports1157489
++Node: Derived Files1161971
++Ref: Derived Files-Footnote-11167446
++Ref: Derived Files-Footnote-21167480
++Ref: Derived Files-Footnote-31168076
++Node: Future Extensions1168190
++Node: Implementation Limitations1168796
++Node: Extension Design1170044
++Node: Old Extension Problems1171198
++Ref: Old Extension Problems-Footnote-11172715
++Node: Extension New Mechanism Goals1172772
++Ref: Extension New Mechanism Goals-Footnote-11176132
++Node: Extension Other Design Decisions1176321
++Node: Extension Future Growth1178429
++Node: Old Extension Mechanism1179265
++Node: Notes summary1181027
++Node: Basic Concepts1182213
++Node: Basic High Level1182894
++Ref: figure-general-flow1183166
++Ref: figure-process-flow1183765
++Ref: Basic High Level-Footnote-11186994
++Node: Basic Data Typing1187179
++Node: Glossary1190507
++Node: Copying1222436
++Node: GNU Free Documentation License1259992
++Node: Index1285128
  
  End Tag Table
diff --cc test/ChangeLog
index 1910502,97b3d40..ac03142
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@@ -1,13 -1,11 +1,21 @@@
+ 2015-01-30         Arnold D. Robbins     <address@hidden>
+ 
+       * Makefile.in (callparam, paramasfunc1, paramasfunc2): New tests.
+       * callparam.awk, callparam.ok: New files.
+       * paramasfunc1.awk, paramasfunc1.ok: New files.
+       * paramasfunc2.awk, paramasfunc2.ok: New files.
+       * exit.sh, indirectcall.awk: Update after code change.
+ 
 +2015-01-19         Arnold D. Robbins     <address@hidden>
 +
 +      * Makefile.am (profile8): Actually add the test and the files.
 +      Thanks to Hermann Peifer for the report.
 +
 +2015-01-16         Arnold D. Robbins     <address@hidden>
 +
 +      * Makefile.am (profile8): New test.
 +      * profile8.awk, profile8.ok: New files.
 +
  2015-01-14         Arnold D. Robbins     <address@hidden>
  
        * Makefile.am (dumpvars): Grep out ENVIRON and PROCINFO since

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

Summary of changes:
 ChangeLog             |   18 ++
 NEWS                  |   13 +-
 awk.h                 |    1 +
 awkgram.c             |  742 +++++++++++++++++++++++++------------------------
 awkgram.y             |   24 ++-
 doc/ChangeLog         |    5 +
 doc/gawk.info         |  634 +++++++++++++++++++++---------------------
 doc/gawk.texi         |   19 +-
 doc/gawktexi.in       |   19 +-
 symbol.c              |   55 ++++
 test/ChangeLog        |    8 +
 test/Makefile.am      |    9 +-
 test/Makefile.in      |   24 ++-
 test/Maketests        |   15 +
 test/callparam.awk    |    6 +
 test/callparam.ok     |    2 +
 test/exit.sh          |    2 +-
 test/indirectcall.awk |    8 +-
 test/paramasfunc1.awk |    9 +
 test/paramasfunc1.ok  |    3 +
 test/paramasfunc2.awk |   10 +
 test/paramasfunc2.ok  |    3 +
 22 files changed, 928 insertions(+), 701 deletions(-)
 create mode 100644 test/callparam.awk
 create mode 100644 test/callparam.ok
 create mode 100644 test/paramasfunc1.awk
 create mode 100644 test/paramasfunc1.ok
 create mode 100644 test/paramasfunc2.awk
 create mode 100644 test/paramasfunc2.ok


hooks/post-receive
-- 
gawk



reply via email to

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