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-1989-g662a50


From: Arnold Robbins
Subject: [gawk-diffs] [SCM] gawk branch, master, updated. gawk-4.1.0-1989-g662a502
Date: Tue, 11 Oct 2016 11:36:11 +0000 (UTC)

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  662a50264f770f5bd972bee0e1980b9cb08ff41d (commit)
      from  2acb7e752d79c8c57098461c00d2a1022e761b55 (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=662a50264f770f5bd972bee0e1980b9cb08ff41d

commit 662a50264f770f5bd972bee0e1980b9cb08ff41d
Author: Arnold D. Robbins <address@hidden>
Date:   Tue Oct 11 14:35:45 2016 +0300

    Use original input text of numbers when pretty printing.

diff --git a/ChangeLog b/ChangeLog
index 1efa7a6..eed758c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2016-10-11         Arnold D. Robbins     <address@hidden>
+
+       * awk.h (NUMCONSTSTR): New flag value.
+       * awkgram.y (make_profile_number): New function. Use it
+       wherever we make a number.  This calls make_number and then, if
+       pretty printing, save the original string value and sets NUMCONSTSTR.
+       (negate_num): If NUNCONSTSTR set, update the saved string value.
+       * profile.c (pp_number): Assert NUMCONSSTR set, use that value.
+       Remove previous code.
+
 2016-09-24  Eli Zaretskii  <address@hidden>
 
        * debug.c (restart) [__MINGW32__]: Cast 2nd argument of execvp to
diff --git a/awk.h b/awk.h
index 2353700..827d550 100644
--- a/awk.h
+++ b/awk.h
@@ -459,6 +459,7 @@ typedef struct exp_node {
 #              define  HALFHAT         0x10000       /* half-capacity Hashed 
Array Tree;
                                                      * See cint_array.c */
 #              define  XARRAY          0x20000
+#              define  NUMCONSTSTR     0x40000 /* have string value for 
numeric constant */
 } NODE;
 
 #define vname sub.nodep.name
diff --git a/awkgram.c b/awkgram.c
index e1aeb21..b7ad577 100644
--- a/awkgram.c
+++ b/awkgram.c
@@ -97,6 +97,7 @@ static int include_source(INSTRUCTION *file);
 static int load_library(INSTRUCTION *file);
 static void next_sourcefile(void);
 static char *tokexpand(void);
+static NODE *make_profile_number(double d, const char *str, size_t len);
 
 #define instruction(t) bcalloc(t, 1, 0)
 
@@ -210,7 +211,7 @@ extern double fmod(double x, double y);
 
 #define YYSTYPE INSTRUCTION *
 
-#line 214 "awkgram.c" /* yacc.c:339  */
+#line 215 "awkgram.c" /* yacc.c:339  */
 
 # ifndef YY_NULLPTR
 #  if defined __cplusplus && 201103L <= __cplusplus
@@ -364,7 +365,7 @@ int yyparse (void);
 
 /* Copy the second part of user declarations.  */
 
-#line 368 "awkgram.c" /* yacc.c:358  */
+#line 369 "awkgram.c" /* yacc.c:358  */
 
 #ifdef short
 # undef short
@@ -666,26 +667,26 @@ static const yytype_uint8 yytranslate[] =
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   213,   213,   215,   220,   221,   225,   237,   242,   253,
-     260,   266,   275,   283,   285,   290,   298,   300,   306,   314,
-     324,   354,   368,   382,   390,   401,   413,   415,   417,   423,
-     431,   432,   436,   436,   482,   481,   515,   517,   522,   532,
-     579,   584,   585,   589,   591,   593,   600,   690,   732,   774,
-     887,   894,   901,   912,   922,   932,   942,   954,   971,   970,
-     995,  1007,  1007,  1106,  1106,  1140,  1171,  1180,  1181,  1187,
-    1188,  1195,  1200,  1212,  1226,  1228,  1236,  1241,  1243,  1254,
-    1256,  1265,  1266,  1274,  1279,  1279,  1290,  1294,  1302,  1303,
-    1306,  1308,  1313,  1314,  1323,  1324,  1329,  1334,  1343,  1345,
-    1347,  1354,  1355,  1361,  1362,  1367,  1369,  1374,  1376,  1384,
-    1389,  1398,  1399,  1404,  1406,  1411,  1413,  1421,  1426,  1434,
-    1439,  1446,  1448,  1450,  1467,  1477,  1484,  1486,  1491,  1493,
-    1495,  1503,  1505,  1510,  1512,  1517,  1519,  1521,  1577,  1579,
-    1581,  1583,  1585,  1587,  1589,  1591,  1605,  1610,  1615,  1640,
-    1646,  1648,  1650,  1652,  1654,  1656,  1661,  1665,  1697,  1699,
-    1705,  1711,  1724,  1725,  1726,  1731,  1736,  1740,  1744,  1759,
-    1772,  1777,  1814,  1843,  1844,  1850,  1851,  1856,  1858,  1865,
-    1882,  1899,  1901,  1908,  1913,  1921,  1931,  1943,  1952,  1956,
-    1960,  1964,  1968,  1972,  1975,  1977,  1981,  1985,  1989
+       0,   214,   214,   216,   221,   222,   226,   238,   243,   254,
+     261,   267,   276,   284,   286,   291,   299,   301,   307,   315,
+     325,   355,   369,   383,   391,   402,   414,   416,   418,   424,
+     432,   433,   437,   437,   483,   482,   516,   518,   523,   533,
+     580,   585,   586,   590,   592,   594,   601,   691,   733,   775,
+     888,   895,   902,   913,   923,   933,   943,   955,   972,   971,
+     996,  1008,  1008,  1107,  1107,  1141,  1172,  1181,  1182,  1188,
+    1189,  1196,  1201,  1213,  1227,  1229,  1237,  1242,  1244,  1255,
+    1257,  1266,  1267,  1275,  1280,  1280,  1291,  1295,  1303,  1304,
+    1307,  1309,  1314,  1315,  1324,  1325,  1330,  1335,  1344,  1346,
+    1348,  1355,  1356,  1362,  1363,  1368,  1370,  1375,  1377,  1385,
+    1390,  1399,  1400,  1405,  1407,  1412,  1414,  1422,  1427,  1435,
+    1440,  1447,  1449,  1451,  1468,  1478,  1485,  1487,  1492,  1494,
+    1496,  1504,  1506,  1511,  1513,  1518,  1520,  1522,  1578,  1580,
+    1582,  1584,  1586,  1588,  1590,  1592,  1606,  1611,  1616,  1641,
+    1647,  1649,  1651,  1653,  1655,  1657,  1662,  1666,  1698,  1700,
+    1706,  1712,  1725,  1726,  1727,  1732,  1737,  1741,  1745,  1760,
+    1773,  1778,  1815,  1844,  1845,  1851,  1852,  1857,  1859,  1866,
+    1883,  1900,  1902,  1909,  1914,  1922,  1932,  1944,  1953,  1957,
+    1961,  1965,  1969,  1973,  1976,  1978,  1982,  1986,  1990
 };
 #endif
 
@@ -1862,24 +1863,24 @@ yyreduce:
   switch (yyn)
     {
         case 3:
-#line 216 "awkgram.y" /* yacc.c:1646  */
+#line 217 "awkgram.y" /* yacc.c:1646  */
     {
                rule = 0;
                yyerrok;
          }
-#line 1871 "awkgram.c" /* yacc.c:1646  */
+#line 1872 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 5:
-#line 222 "awkgram.y" /* yacc.c:1646  */
+#line 223 "awkgram.y" /* yacc.c:1646  */
     {
                next_sourcefile();
          }
-#line 1879 "awkgram.c" /* yacc.c:1646  */
+#line 1880 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 6:
-#line 226 "awkgram.y" /* yacc.c:1646  */
+#line 227 "awkgram.y" /* yacc.c:1646  */
     {
                rule = 0;
                /*
@@ -1888,20 +1889,20 @@ yyreduce:
                 */
                /* yyerrok; */
          }
-#line 1892 "awkgram.c" /* yacc.c:1646  */
+#line 1893 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 7:
-#line 238 "awkgram.y" /* yacc.c:1646  */
+#line 239 "awkgram.y" /* yacc.c:1646  */
     {
                (void) append_rule((yyvsp[-1]), (yyvsp[0]));
                first_rule = false;
          }
-#line 1901 "awkgram.c" /* yacc.c:1646  */
+#line 1902 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 8:
-#line 243 "awkgram.y" /* yacc.c:1646  */
+#line 244 "awkgram.y" /* yacc.c:1646  */
     {
                if (rule != Rule) {
                        msg(_("%s blocks must have an action part"), 
ruletab[rule]);
@@ -1912,42 +1913,42 @@ yyreduce:
                } else          /* pattern rule with non-empty pattern */
                        (void) append_rule((yyvsp[-1]), NULL);
          }
-#line 1916 "awkgram.c" /* yacc.c:1646  */
+#line 1917 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 9:
-#line 254 "awkgram.y" /* yacc.c:1646  */
+#line 255 "awkgram.y" /* yacc.c:1646  */
     {
                in_function = NULL;
                (void) mk_function((yyvsp[-1]), (yyvsp[0]));
                want_param_names = DONT_CHECK;
                yyerrok;
          }
-#line 1927 "awkgram.c" /* yacc.c:1646  */
+#line 1928 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 10:
-#line 261 "awkgram.y" /* yacc.c:1646  */
+#line 262 "awkgram.y" /* yacc.c:1646  */
     {
                want_source = false;
                at_seen = false;
                yyerrok;
          }
-#line 1937 "awkgram.c" /* yacc.c:1646  */
+#line 1938 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 11:
-#line 267 "awkgram.y" /* yacc.c:1646  */
+#line 268 "awkgram.y" /* yacc.c:1646  */
     {
                want_source = false;
                at_seen = false;
                yyerrok;
          }
-#line 1947 "awkgram.c" /* yacc.c:1646  */
+#line 1948 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 12:
-#line 276 "awkgram.y" /* yacc.c:1646  */
+#line 277 "awkgram.y" /* yacc.c:1646  */
     {
                if (include_source((yyvsp[0])) < 0)
                        YYABORT;
@@ -1955,23 +1956,23 @@ yyreduce:
                bcfree((yyvsp[0]));
                (yyval) = NULL;
          }
-#line 1959 "awkgram.c" /* yacc.c:1646  */
+#line 1960 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 13:
-#line 284 "awkgram.y" /* yacc.c:1646  */
+#line 285 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 1965 "awkgram.c" /* yacc.c:1646  */
+#line 1966 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 14:
-#line 286 "awkgram.y" /* yacc.c:1646  */
+#line 287 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 1971 "awkgram.c" /* yacc.c:1646  */
+#line 1972 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 15:
-#line 291 "awkgram.y" /* yacc.c:1646  */
+#line 292 "awkgram.y" /* yacc.c:1646  */
     {
                if (load_library((yyvsp[0])) < 0)
                        YYABORT;
@@ -1979,23 +1980,23 @@ yyreduce:
                bcfree((yyvsp[0]));
                (yyval) = NULL;
          }
-#line 1983 "awkgram.c" /* yacc.c:1646  */
+#line 1984 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 16:
-#line 299 "awkgram.y" /* yacc.c:1646  */
+#line 300 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 1989 "awkgram.c" /* yacc.c:1646  */
+#line 1990 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 17:
-#line 301 "awkgram.y" /* yacc.c:1646  */
+#line 302 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 1995 "awkgram.c" /* yacc.c:1646  */
+#line 1996 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 18:
-#line 306 "awkgram.y" /* yacc.c:1646  */
+#line 307 "awkgram.y" /* yacc.c:1646  */
     {
                rule = Rule;
                if (comment != NULL) {
@@ -2004,11 +2005,11 @@ yyreduce:
                } else
                        (yyval) = NULL;
          }
-#line 2008 "awkgram.c" /* yacc.c:1646  */
+#line 2009 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 19:
-#line 315 "awkgram.y" /* yacc.c:1646  */
+#line 316 "awkgram.y" /* yacc.c:1646  */
     {
                rule = Rule;
                if (comment != NULL) {
@@ -2017,11 +2018,11 @@ yyreduce:
                } else
                        (yyval) = (yyvsp[0]);
          }
-#line 2021 "awkgram.c" /* yacc.c:1646  */
+#line 2022 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 20:
-#line 325 "awkgram.y" /* yacc.c:1646  */
+#line 326 "awkgram.y" /* yacc.c:1646  */
     {
                INSTRUCTION *tp;
 
@@ -2051,11 +2052,11 @@ yyreduce:
                        (yyval) = list_append(list_merge((yyvsp[-3]), 
(yyvsp[0])), tp);
                rule = Rule;
          }
-#line 2055 "awkgram.c" /* yacc.c:1646  */
+#line 2056 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 21:
-#line 355 "awkgram.y" /* yacc.c:1646  */
+#line 356 "awkgram.y" /* yacc.c:1646  */
     {
                static int begin_seen = 0;
 
@@ -2069,11 +2070,11 @@ yyreduce:
                check_comment();
                (yyval) = (yyvsp[0]);
          }
-#line 2073 "awkgram.c" /* yacc.c:1646  */
+#line 2074 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 22:
-#line 369 "awkgram.y" /* yacc.c:1646  */
+#line 370 "awkgram.y" /* yacc.c:1646  */
     {
                static int end_seen = 0;
 
@@ -2087,11 +2088,11 @@ yyreduce:
                check_comment();
                (yyval) = (yyvsp[0]);
          }
-#line 2091 "awkgram.c" /* yacc.c:1646  */
+#line 2092 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 23:
-#line 383 "awkgram.y" /* yacc.c:1646  */
+#line 384 "awkgram.y" /* yacc.c:1646  */
     {
                func_first = false;
                (yyvsp[0])->in_rule = rule = BEGINFILE;
@@ -2099,11 +2100,11 @@ yyreduce:
                check_comment();
                (yyval) = (yyvsp[0]);
          }
-#line 2103 "awkgram.c" /* yacc.c:1646  */
+#line 2104 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 24:
-#line 391 "awkgram.y" /* yacc.c:1646  */
+#line 392 "awkgram.y" /* yacc.c:1646  */
     {
                func_first = false;
                (yyvsp[0])->in_rule = rule = ENDFILE;
@@ -2111,11 +2112,11 @@ yyreduce:
                check_comment();
                (yyval) = (yyvsp[0]);
          }
-#line 2115 "awkgram.c" /* yacc.c:1646  */
+#line 2116 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 25:
-#line 402 "awkgram.y" /* yacc.c:1646  */
+#line 403 "awkgram.y" /* yacc.c:1646  */
     {
                INSTRUCTION *ip;
                if ((yyvsp[-3]) == NULL)
@@ -2124,48 +2125,48 @@ yyreduce:
                        ip = (yyvsp[-3]);
                (yyval) = ip;
          }
-#line 2128 "awkgram.c" /* yacc.c:1646  */
+#line 2129 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 26:
-#line 414 "awkgram.y" /* yacc.c:1646  */
+#line 415 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 2134 "awkgram.c" /* yacc.c:1646  */
+#line 2135 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 27:
-#line 416 "awkgram.y" /* yacc.c:1646  */
+#line 417 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 2140 "awkgram.c" /* yacc.c:1646  */
+#line 2141 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 28:
-#line 418 "awkgram.y" /* yacc.c:1646  */
+#line 419 "awkgram.y" /* yacc.c:1646  */
     {
                yyerror(_("`%s' is a built-in function, it cannot be 
redefined"),
                                        tokstart);
                YYABORT;
          }
-#line 2150 "awkgram.c" /* yacc.c:1646  */
+#line 2151 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 29:
-#line 424 "awkgram.y" /* yacc.c:1646  */
+#line 425 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = (yyvsp[0]);
                at_seen = false;
          }
-#line 2159 "awkgram.c" /* yacc.c:1646  */
+#line 2160 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 32:
-#line 436 "awkgram.y" /* yacc.c:1646  */
+#line 437 "awkgram.y" /* yacc.c:1646  */
     { want_param_names = FUNC_HEADER; }
-#line 2165 "awkgram.c" /* yacc.c:1646  */
+#line 2166 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 33:
-#line 437 "awkgram.y" /* yacc.c:1646  */
+#line 438 "awkgram.y" /* yacc.c:1646  */
     {
                /*
                 *  treat any comments between BOF and the first function
@@ -2203,17 +2204,17 @@ yyreduce:
                (yyval) = (yyvsp[-6]);
                want_param_names = FUNC_BODY;
          }
-#line 2207 "awkgram.c" /* yacc.c:1646  */
+#line 2208 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 34:
-#line 482 "awkgram.y" /* yacc.c:1646  */
+#line 483 "awkgram.y" /* yacc.c:1646  */
     { want_regexp = true; }
-#line 2213 "awkgram.c" /* yacc.c:1646  */
+#line 2214 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 35:
-#line 484 "awkgram.y" /* yacc.c:1646  */
+#line 485 "awkgram.y" /* yacc.c:1646  */
     {
                  NODE *n, *exp;
                  char *re;
@@ -2242,17 +2243,17 @@ yyreduce:
                  (yyval)->opcode = Op_match_rec;
                  (yyval)->memory = n;
                }
-#line 2246 "awkgram.c" /* yacc.c:1646  */
+#line 2247 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 36:
-#line 516 "awkgram.y" /* yacc.c:1646  */
+#line 517 "awkgram.y" /* yacc.c:1646  */
     { bcfree((yyvsp[0])); }
-#line 2252 "awkgram.c" /* yacc.c:1646  */
+#line 2253 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 38:
-#line 522 "awkgram.y" /* yacc.c:1646  */
+#line 523 "awkgram.y" /* yacc.c:1646  */
     {
                if (prior_comment != NULL) {
                        (yyval) = list_create(prior_comment);
@@ -2263,11 +2264,11 @@ yyreduce:
                } else
                        (yyval) = NULL;
          }
-#line 2267 "awkgram.c" /* yacc.c:1646  */
+#line 2268 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 39:
-#line 533 "awkgram.y" /* yacc.c:1646  */
+#line 534 "awkgram.y" /* yacc.c:1646  */
     {
                if ((yyvsp[0]) == NULL) {
                        if (prior_comment != NULL) {
@@ -2314,40 +2315,40 @@ yyreduce:
                }
                yyerrok;
          }
-#line 2318 "awkgram.c" /* yacc.c:1646  */
+#line 2319 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 40:
-#line 580 "awkgram.y" /* yacc.c:1646  */
+#line 581 "awkgram.y" /* yacc.c:1646  */
     {  (yyval) = NULL; }
-#line 2324 "awkgram.c" /* yacc.c:1646  */
+#line 2325 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 43:
-#line 590 "awkgram.y" /* yacc.c:1646  */
+#line 591 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 2330 "awkgram.c" /* yacc.c:1646  */
+#line 2331 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 44:
-#line 592 "awkgram.y" /* yacc.c:1646  */
+#line 593 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[-1]); }
-#line 2336 "awkgram.c" /* yacc.c:1646  */
+#line 2337 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 45:
-#line 594 "awkgram.y" /* yacc.c:1646  */
+#line 595 "awkgram.y" /* yacc.c:1646  */
     {
                if (do_pretty_print)
                        (yyval) = list_prepend((yyvsp[0]), 
instruction(Op_exec_count));
                else
                        (yyval) = (yyvsp[0]);
          }
-#line 2347 "awkgram.c" /* yacc.c:1646  */
+#line 2348 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 46:
-#line 601 "awkgram.y" /* yacc.c:1646  */
+#line 602 "awkgram.y" /* yacc.c:1646  */
     {
                INSTRUCTION *dflt, *curr = NULL, *cexp, *cstmt;
                INSTRUCTION *ip, *nextc, *tbreak;
@@ -2437,11 +2438,11 @@ yyreduce:
                break_allowed--;                        
                fix_break_continue(ip, tbreak, NULL);
          }
-#line 2441 "awkgram.c" /* yacc.c:1646  */
+#line 2442 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 47:
-#line 691 "awkgram.y" /* yacc.c:1646  */
+#line 692 "awkgram.y" /* yacc.c:1646  */
     { 
                /*
                 *    -----------------
@@ -2483,11 +2484,11 @@ yyreduce:
                continue_allowed--;
                fix_break_continue(ip, tbreak, tcont);
          }
-#line 2487 "awkgram.c" /* yacc.c:1646  */
+#line 2488 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 48:
-#line 733 "awkgram.y" /* yacc.c:1646  */
+#line 734 "awkgram.y" /* yacc.c:1646  */
     {
                /*
                 *    -----------------
@@ -2529,11 +2530,11 @@ yyreduce:
                } /* else
                        $1 and $4 are NULLs */
          }
-#line 2533 "awkgram.c" /* yacc.c:1646  */
+#line 2534 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 49:
-#line 775 "awkgram.y" /* yacc.c:1646  */
+#line 776 "awkgram.y" /* yacc.c:1646  */
     {
                INSTRUCTION *ip;
                char *var_name = (yyvsp[-5])->lextok;
@@ -2646,33 +2647,33 @@ regular_loop:
                break_allowed--;
                continue_allowed--;
          }
-#line 2650 "awkgram.c" /* yacc.c:1646  */
+#line 2651 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 50:
-#line 888 "awkgram.y" /* yacc.c:1646  */
+#line 889 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = mk_for_loop((yyvsp[-11]), (yyvsp[-9]), (yyvsp[-6]), 
(yyvsp[-3]), (yyvsp[0]));
 
                break_allowed--;
                continue_allowed--;
          }
-#line 2661 "awkgram.c" /* yacc.c:1646  */
+#line 2662 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 51:
-#line 895 "awkgram.y" /* yacc.c:1646  */
+#line 896 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = mk_for_loop((yyvsp[-10]), (yyvsp[-8]), (INSTRUCTION 
*) NULL, (yyvsp[-3]), (yyvsp[0]));
 
                break_allowed--;
                continue_allowed--;
          }
-#line 2672 "awkgram.c" /* yacc.c:1646  */
+#line 2673 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 52:
-#line 902 "awkgram.y" /* yacc.c:1646  */
+#line 903 "awkgram.y" /* yacc.c:1646  */
     {
                if (do_pretty_print)
                        (yyval) = list_prepend((yyvsp[0]), 
instruction(Op_exec_count));
@@ -2680,11 +2681,11 @@ regular_loop:
                        (yyval) = (yyvsp[0]);
                (yyval) = add_pending_comment((yyval));
          }
-#line 2684 "awkgram.c" /* yacc.c:1646  */
+#line 2685 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 53:
-#line 913 "awkgram.y" /* yacc.c:1646  */
+#line 914 "awkgram.y" /* yacc.c:1646  */
     { 
                if (! break_allowed)
                        error_ln((yyvsp[-1])->source_line,
@@ -2694,11 +2695,11 @@ regular_loop:
                (yyval) = add_pending_comment((yyval));
 
          }
-#line 2698 "awkgram.c" /* yacc.c:1646  */
+#line 2699 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 54:
-#line 923 "awkgram.y" /* yacc.c:1646  */
+#line 924 "awkgram.y" /* yacc.c:1646  */
     {
                if (! continue_allowed)
                        error_ln((yyvsp[-1])->source_line,
@@ -2708,11 +2709,11 @@ regular_loop:
                (yyval) = add_pending_comment((yyval));
 
          }
-#line 2712 "awkgram.c" /* yacc.c:1646  */
+#line 2713 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 55:
-#line 933 "awkgram.y" /* yacc.c:1646  */
+#line 934 "awkgram.y" /* yacc.c:1646  */
     {
                /* if inside function (rule = 0), resolve context at run-time */
                if (rule && rule != Rule)
@@ -2722,11 +2723,11 @@ regular_loop:
                (yyval) = list_create((yyvsp[-1]));
                (yyval) = add_pending_comment((yyval));
          }
-#line 2726 "awkgram.c" /* yacc.c:1646  */
+#line 2727 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 56:
-#line 943 "awkgram.y" /* yacc.c:1646  */
+#line 944 "awkgram.y" /* yacc.c:1646  */
     {
                /* if inside function (rule = 0), resolve context at run-time */
                if (rule == BEGIN || rule == END || rule == ENDFILE)
@@ -2738,11 +2739,11 @@ regular_loop:
                (yyval) = list_create((yyvsp[-1]));
                (yyval) = add_pending_comment((yyval));
          }
-#line 2742 "awkgram.c" /* yacc.c:1646  */
+#line 2743 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 57:
-#line 955 "awkgram.y" /* yacc.c:1646  */
+#line 956 "awkgram.y" /* yacc.c:1646  */
     {
                /* Initialize the two possible jump targets, the actual target
                 * is resolved at run-time. 
@@ -2758,20 +2759,20 @@ regular_loop:
                        (yyval) = list_append((yyvsp[-1]), (yyvsp[-2]));
                (yyval) = add_pending_comment((yyval));
          }
-#line 2762 "awkgram.c" /* yacc.c:1646  */
+#line 2763 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 58:
-#line 971 "awkgram.y" /* yacc.c:1646  */
+#line 972 "awkgram.y" /* yacc.c:1646  */
     {
                if (! in_function)
                        yyerror(_("`return' used outside function context"));
          }
-#line 2771 "awkgram.c" /* yacc.c:1646  */
+#line 2772 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 59:
-#line 974 "awkgram.y" /* yacc.c:1646  */
+#line 975 "awkgram.y" /* yacc.c:1646  */
     {
                if ((yyvsp[-1]) == NULL) {
                        (yyval) = list_create((yyvsp[-3]));
@@ -2793,17 +2794,17 @@ regular_loop:
                }
                (yyval) = add_pending_comment((yyval));
          }
-#line 2797 "awkgram.c" /* yacc.c:1646  */
+#line 2798 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 61:
-#line 1007 "awkgram.y" /* yacc.c:1646  */
+#line 1008 "awkgram.y" /* yacc.c:1646  */
     { in_print = true; in_parens = 0; }
-#line 2803 "awkgram.c" /* yacc.c:1646  */
+#line 2804 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 62:
-#line 1008 "awkgram.y" /* yacc.c:1646  */
+#line 1009 "awkgram.y" /* yacc.c:1646  */
     {
                /*
                 * Optimization: plain `print' has no expression list, so $3 is 
null.
@@ -2901,17 +2902,17 @@ regular_print:
                }
                (yyval) = add_pending_comment((yyval));
          }
-#line 2905 "awkgram.c" /* yacc.c:1646  */
+#line 2906 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 63:
-#line 1106 "awkgram.y" /* yacc.c:1646  */
+#line 1107 "awkgram.y" /* yacc.c:1646  */
     { sub_counter = 0; }
-#line 2911 "awkgram.c" /* yacc.c:1646  */
+#line 2912 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 64:
-#line 1107 "awkgram.y" /* yacc.c:1646  */
+#line 1108 "awkgram.y" /* yacc.c:1646  */
     {
                char *arr = (yyvsp[-2])->lextok;
 
@@ -2945,11 +2946,11 @@ regular_print:
                }
                (yyval) = add_pending_comment((yyval));
          }
-#line 2949 "awkgram.c" /* yacc.c:1646  */
+#line 2950 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 65:
-#line 1145 "awkgram.y" /* yacc.c:1646  */
+#line 1146 "awkgram.y" /* yacc.c:1646  */
     {
                static bool warned = false;
                char *arr = (yyvsp[-1])->lextok;
@@ -2976,55 +2977,55 @@ regular_print:
                }
                (yyval) = add_pending_comment((yyval));
          }
-#line 2980 "awkgram.c" /* yacc.c:1646  */
+#line 2981 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 66:
-#line 1172 "awkgram.y" /* yacc.c:1646  */
+#line 1173 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = optimize_assignment((yyvsp[0]));
                (yyval) = add_pending_comment((yyval));
          }
-#line 2989 "awkgram.c" /* yacc.c:1646  */
+#line 2990 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 67:
-#line 1180 "awkgram.y" /* yacc.c:1646  */
+#line 1181 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 2995 "awkgram.c" /* yacc.c:1646  */
+#line 2996 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 68:
-#line 1182 "awkgram.y" /* yacc.c:1646  */
+#line 1183 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3001 "awkgram.c" /* yacc.c:1646  */
+#line 3002 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 69:
-#line 1187 "awkgram.y" /* yacc.c:1646  */
+#line 1188 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 3007 "awkgram.c" /* yacc.c:1646  */
+#line 3008 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 70:
-#line 1189 "awkgram.y" /* yacc.c:1646  */
+#line 1190 "awkgram.y" /* yacc.c:1646  */
     {
                if ((yyvsp[-1]) == NULL)
                        (yyval) = list_create((yyvsp[0]));
                else
                        (yyval) = list_prepend((yyvsp[-1]), (yyvsp[0]));
          }
-#line 3018 "awkgram.c" /* yacc.c:1646  */
+#line 3019 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 71:
-#line 1196 "awkgram.y" /* yacc.c:1646  */
+#line 1197 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 3024 "awkgram.c" /* yacc.c:1646  */
+#line 3025 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 72:
-#line 1201 "awkgram.y" /* yacc.c:1646  */
+#line 1202 "awkgram.y" /* yacc.c:1646  */
     {
                INSTRUCTION *casestmt = (yyvsp[0]);
                if ((yyvsp[0]) == NULL)
@@ -3036,11 +3037,11 @@ regular_print:
                bcfree((yyvsp[-2]));
                (yyval) = (yyvsp[-4]);
          }
-#line 3040 "awkgram.c" /* yacc.c:1646  */
+#line 3041 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 73:
-#line 1213 "awkgram.y" /* yacc.c:1646  */
+#line 1214 "awkgram.y" /* yacc.c:1646  */
     {
                INSTRUCTION *casestmt = (yyvsp[0]);
                if ((yyvsp[0]) == NULL)
@@ -3051,17 +3052,17 @@ regular_print:
                (yyvsp[-3])->case_stmt = casestmt;
                (yyval) = (yyvsp[-3]);
          }
-#line 3055 "awkgram.c" /* yacc.c:1646  */
+#line 3056 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 74:
-#line 1227 "awkgram.y" /* yacc.c:1646  */
+#line 1228 "awkgram.y" /* yacc.c:1646  */
     {  (yyval) = (yyvsp[0]); }
-#line 3061 "awkgram.c" /* yacc.c:1646  */
+#line 3062 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 75:
-#line 1229 "awkgram.y" /* yacc.c:1646  */
+#line 1230 "awkgram.y" /* yacc.c:1646  */
     { 
                NODE *n = (yyvsp[0])->memory;
                (void) force_number(n);
@@ -3069,26 +3070,26 @@ regular_print:
                bcfree((yyvsp[-1]));
                (yyval) = (yyvsp[0]);
          }
-#line 3073 "awkgram.c" /* yacc.c:1646  */
+#line 3074 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 76:
-#line 1237 "awkgram.y" /* yacc.c:1646  */
+#line 1238 "awkgram.y" /* yacc.c:1646  */
     {
                bcfree((yyvsp[-1]));
                (yyval) = (yyvsp[0]);
          }
-#line 3082 "awkgram.c" /* yacc.c:1646  */
+#line 3083 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 77:
-#line 1242 "awkgram.y" /* yacc.c:1646  */
+#line 1243 "awkgram.y" /* yacc.c:1646  */
     {  (yyval) = (yyvsp[0]); }
-#line 3088 "awkgram.c" /* yacc.c:1646  */
+#line 3089 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 78:
-#line 1244 "awkgram.y" /* yacc.c:1646  */
+#line 1245 "awkgram.y" /* yacc.c:1646  */
     {
                if ((yyvsp[0])->memory->type == Node_regex)
                        (yyvsp[0])->opcode = Op_push_re;
@@ -3096,47 +3097,47 @@ regular_print:
                        (yyvsp[0])->opcode = Op_push;
                (yyval) = (yyvsp[0]);
          }
-#line 3100 "awkgram.c" /* yacc.c:1646  */
+#line 3101 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 79:
-#line 1255 "awkgram.y" /* yacc.c:1646  */
+#line 1256 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3106 "awkgram.c" /* yacc.c:1646  */
+#line 3107 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 80:
-#line 1257 "awkgram.y" /* yacc.c:1646  */
+#line 1258 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3112 "awkgram.c" /* yacc.c:1646  */
+#line 3113 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 82:
-#line 1267 "awkgram.y" /* yacc.c:1646  */
+#line 1268 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = (yyvsp[-1]);
          }
-#line 3120 "awkgram.c" /* yacc.c:1646  */
+#line 3121 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 83:
-#line 1274 "awkgram.y" /* yacc.c:1646  */
+#line 1275 "awkgram.y" /* yacc.c:1646  */
     {
                in_print = false;
                in_parens = 0;
                (yyval) = NULL;
          }
-#line 3130 "awkgram.c" /* yacc.c:1646  */
+#line 3131 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 84:
-#line 1279 "awkgram.y" /* yacc.c:1646  */
+#line 1280 "awkgram.y" /* yacc.c:1646  */
     { in_print = false; in_parens = 0; }
-#line 3136 "awkgram.c" /* yacc.c:1646  */
+#line 3137 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 85:
-#line 1280 "awkgram.y" /* yacc.c:1646  */
+#line 1281 "awkgram.y" /* yacc.c:1646  */
     {
                if ((yyvsp[-2])->redir_type == redirect_twoway
                        && (yyvsp[0])->lasti->opcode == Op_K_getline_redir
@@ -3144,63 +3145,63 @@ regular_print:
                        yyerror(_("multistage two-way pipelines don't work"));
                (yyval) = list_prepend((yyvsp[0]), (yyvsp[-2]));
          }
-#line 3148 "awkgram.c" /* yacc.c:1646  */
+#line 3149 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 86:
-#line 1291 "awkgram.y" /* yacc.c:1646  */
+#line 1292 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = mk_condition((yyvsp[-3]), (yyvsp[-5]), (yyvsp[0]), 
NULL, NULL);
          }
-#line 3156 "awkgram.c" /* yacc.c:1646  */
+#line 3157 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 87:
-#line 1296 "awkgram.y" /* yacc.c:1646  */
+#line 1297 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = mk_condition((yyvsp[-6]), (yyvsp[-8]), (yyvsp[-3]), 
(yyvsp[-2]), (yyvsp[0]));
          }
-#line 3164 "awkgram.c" /* yacc.c:1646  */
+#line 3165 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 92:
-#line 1313 "awkgram.y" /* yacc.c:1646  */
+#line 1314 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 3170 "awkgram.c" /* yacc.c:1646  */
+#line 3171 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 93:
-#line 1315 "awkgram.y" /* yacc.c:1646  */
+#line 1316 "awkgram.y" /* yacc.c:1646  */
     {
                bcfree((yyvsp[-1]));
                (yyval) = (yyvsp[0]);
          }
-#line 3179 "awkgram.c" /* yacc.c:1646  */
+#line 3180 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 94:
-#line 1323 "awkgram.y" /* yacc.c:1646  */
+#line 1324 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 3185 "awkgram.c" /* yacc.c:1646  */
+#line 3186 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 95:
-#line 1325 "awkgram.y" /* yacc.c:1646  */
+#line 1326 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3191 "awkgram.c" /* yacc.c:1646  */
+#line 3192 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 96:
-#line 1330 "awkgram.y" /* yacc.c:1646  */
+#line 1331 "awkgram.y" /* yacc.c:1646  */
     {
                (yyvsp[0])->param_count = 0;
                (yyval) = list_create((yyvsp[0]));
          }
-#line 3200 "awkgram.c" /* yacc.c:1646  */
+#line 3201 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 97:
-#line 1335 "awkgram.y" /* yacc.c:1646  */
+#line 1336 "awkgram.y" /* yacc.c:1646  */
     {
                if ((yyvsp[-2]) != NULL && (yyvsp[0]) != NULL) {
                        (yyvsp[0])->param_count =  
(yyvsp[-2])->lasti->param_count + 1;
@@ -3209,74 +3210,74 @@ regular_print:
                } else
                        (yyval) = NULL;
          }
-#line 3213 "awkgram.c" /* yacc.c:1646  */
+#line 3214 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 98:
-#line 1344 "awkgram.y" /* yacc.c:1646  */
+#line 1345 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 3219 "awkgram.c" /* yacc.c:1646  */
+#line 3220 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 99:
-#line 1346 "awkgram.y" /* yacc.c:1646  */
+#line 1347 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[-1]); }
-#line 3225 "awkgram.c" /* yacc.c:1646  */
+#line 3226 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 100:
-#line 1348 "awkgram.y" /* yacc.c:1646  */
+#line 1349 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[-2]); }
-#line 3231 "awkgram.c" /* yacc.c:1646  */
+#line 3232 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 101:
-#line 1354 "awkgram.y" /* yacc.c:1646  */
+#line 1355 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 3237 "awkgram.c" /* yacc.c:1646  */
+#line 3238 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 102:
-#line 1356 "awkgram.y" /* yacc.c:1646  */
+#line 1357 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3243 "awkgram.c" /* yacc.c:1646  */
+#line 3244 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 103:
-#line 1361 "awkgram.y" /* yacc.c:1646  */
+#line 1362 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 3249 "awkgram.c" /* yacc.c:1646  */
+#line 3250 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 104:
-#line 1363 "awkgram.y" /* yacc.c:1646  */
+#line 1364 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3255 "awkgram.c" /* yacc.c:1646  */
+#line 3256 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 105:
-#line 1368 "awkgram.y" /* yacc.c:1646  */
+#line 1369 "awkgram.y" /* yacc.c:1646  */
     {  (yyval) = mk_expression_list(NULL, (yyvsp[0])); }
-#line 3261 "awkgram.c" /* yacc.c:1646  */
+#line 3262 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 106:
-#line 1370 "awkgram.y" /* yacc.c:1646  */
+#line 1371 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
                yyerrok;
          }
-#line 3270 "awkgram.c" /* yacc.c:1646  */
+#line 3271 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 107:
-#line 1375 "awkgram.y" /* yacc.c:1646  */
+#line 1376 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 3276 "awkgram.c" /* yacc.c:1646  */
+#line 3277 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 108:
-#line 1377 "awkgram.y" /* yacc.c:1646  */
+#line 1378 "awkgram.y" /* yacc.c:1646  */
     {
                /*
                 * Returning the expression list instead of NULL lets
@@ -3284,62 +3285,62 @@ regular_print:
                 */
                (yyval) = (yyvsp[-1]);
          }
-#line 3288 "awkgram.c" /* yacc.c:1646  */
+#line 3289 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 109:
-#line 1385 "awkgram.y" /* yacc.c:1646  */
+#line 1386 "awkgram.y" /* yacc.c:1646  */
     {
                /* Ditto */
                (yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
          }
-#line 3297 "awkgram.c" /* yacc.c:1646  */
+#line 3298 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 110:
-#line 1390 "awkgram.y" /* yacc.c:1646  */
+#line 1391 "awkgram.y" /* yacc.c:1646  */
     {
                /* Ditto */
                (yyval) = (yyvsp[-2]);
          }
-#line 3306 "awkgram.c" /* yacc.c:1646  */
+#line 3307 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 111:
-#line 1398 "awkgram.y" /* yacc.c:1646  */
+#line 1399 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 3312 "awkgram.c" /* yacc.c:1646  */
+#line 3313 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 112:
-#line 1400 "awkgram.y" /* yacc.c:1646  */
+#line 1401 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3318 "awkgram.c" /* yacc.c:1646  */
+#line 3319 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 113:
-#line 1405 "awkgram.y" /* yacc.c:1646  */
+#line 1406 "awkgram.y" /* yacc.c:1646  */
     {  (yyval) = mk_expression_list(NULL, (yyvsp[0])); }
-#line 3324 "awkgram.c" /* yacc.c:1646  */
+#line 3325 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 114:
-#line 1407 "awkgram.y" /* yacc.c:1646  */
+#line 1408 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
                yyerrok;
          }
-#line 3333 "awkgram.c" /* yacc.c:1646  */
+#line 3334 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 115:
-#line 1412 "awkgram.y" /* yacc.c:1646  */
+#line 1413 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 3339 "awkgram.c" /* yacc.c:1646  */
+#line 3340 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 116:
-#line 1414 "awkgram.y" /* yacc.c:1646  */
+#line 1415 "awkgram.y" /* yacc.c:1646  */
     {
                /*
                 * Returning the expression list instead of NULL lets
@@ -3347,58 +3348,58 @@ regular_print:
                 */
                (yyval) = (yyvsp[-1]);
          }
-#line 3351 "awkgram.c" /* yacc.c:1646  */
+#line 3352 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 117:
-#line 1422 "awkgram.y" /* yacc.c:1646  */
+#line 1423 "awkgram.y" /* yacc.c:1646  */
     {
                /* Ditto */
                (yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
          }
-#line 3360 "awkgram.c" /* yacc.c:1646  */
+#line 3361 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 118:
-#line 1427 "awkgram.y" /* yacc.c:1646  */
+#line 1428 "awkgram.y" /* yacc.c:1646  */
     {
                /* Ditto */
                (yyval) = (yyvsp[-2]);
          }
-#line 3369 "awkgram.c" /* yacc.c:1646  */
+#line 3370 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 119:
-#line 1434 "awkgram.y" /* yacc.c:1646  */
+#line 1435 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3375 "awkgram.c" /* yacc.c:1646  */
+#line 3376 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 120:
-#line 1440 "awkgram.y" /* yacc.c:1646  */
+#line 1441 "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 3386 "awkgram.c" /* yacc.c:1646  */
+#line 3387 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 121:
-#line 1447 "awkgram.y" /* yacc.c:1646  */
+#line 1448 "awkgram.y" /* yacc.c:1646  */
     {  (yyval) = mk_boolean((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3392 "awkgram.c" /* yacc.c:1646  */
+#line 3393 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 122:
-#line 1449 "awkgram.y" /* yacc.c:1646  */
+#line 1450 "awkgram.y" /* yacc.c:1646  */
     {  (yyval) = mk_boolean((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3398 "awkgram.c" /* yacc.c:1646  */
+#line 3399 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 123:
-#line 1451 "awkgram.y" /* yacc.c:1646  */
+#line 1452 "awkgram.y" /* yacc.c:1646  */
     {
                if ((yyvsp[-2])->lasti->opcode == Op_match_rec)
                        warning_ln((yyvsp[-1])->source_line,
@@ -3415,11 +3416,11 @@ regular_print:
                        (yyval) = list_append(list_merge((yyvsp[-2]), 
(yyvsp[0])), (yyvsp[-1]));
                }
          }
-#line 3419 "awkgram.c" /* yacc.c:1646  */
+#line 3420 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 124:
-#line 1468 "awkgram.y" /* yacc.c:1646  */
+#line 1469 "awkgram.y" /* yacc.c:1646  */
     {
                if (do_lint_old)
                        warning_ln((yyvsp[-1])->source_line,
@@ -3429,91 +3430,91 @@ regular_print:
                (yyvsp[-1])->expr_count = 1;
                (yyval) = list_append(list_merge((yyvsp[-2]), (yyvsp[0])), 
(yyvsp[-1]));
          }
-#line 3433 "awkgram.c" /* yacc.c:1646  */
+#line 3434 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 125:
-#line 1478 "awkgram.y" /* yacc.c:1646  */
+#line 1479 "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 3444 "awkgram.c" /* yacc.c:1646  */
+#line 3445 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 126:
-#line 1485 "awkgram.y" /* yacc.c:1646  */
+#line 1486 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_condition((yyvsp[-4]), (yyvsp[-3]), (yyvsp[-2]), 
(yyvsp[-1]), (yyvsp[0])); }
-#line 3450 "awkgram.c" /* yacc.c:1646  */
+#line 3451 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 127:
-#line 1487 "awkgram.y" /* yacc.c:1646  */
+#line 1488 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3456 "awkgram.c" /* yacc.c:1646  */
+#line 3457 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 128:
-#line 1492 "awkgram.y" /* yacc.c:1646  */
+#line 1493 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3462 "awkgram.c" /* yacc.c:1646  */
+#line 3463 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 129:
-#line 1494 "awkgram.y" /* yacc.c:1646  */
+#line 1495 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3468 "awkgram.c" /* yacc.c:1646  */
+#line 3469 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 130:
-#line 1496 "awkgram.y" /* yacc.c:1646  */
+#line 1497 "awkgram.y" /* yacc.c:1646  */
     {  
                (yyvsp[0])->opcode = Op_assign_quotient;
                (yyval) = (yyvsp[0]);
          }
-#line 3477 "awkgram.c" /* yacc.c:1646  */
+#line 3478 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 131:
-#line 1504 "awkgram.y" /* yacc.c:1646  */
+#line 1505 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3483 "awkgram.c" /* yacc.c:1646  */
+#line 3484 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 132:
-#line 1506 "awkgram.y" /* yacc.c:1646  */
+#line 1507 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3489 "awkgram.c" /* yacc.c:1646  */
+#line 3490 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 133:
-#line 1511 "awkgram.y" /* yacc.c:1646  */
+#line 1512 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3495 "awkgram.c" /* yacc.c:1646  */
+#line 3496 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 134:
-#line 1513 "awkgram.y" /* yacc.c:1646  */
+#line 1514 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3501 "awkgram.c" /* yacc.c:1646  */
+#line 3502 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 135:
-#line 1518 "awkgram.y" /* yacc.c:1646  */
+#line 1519 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3507 "awkgram.c" /* yacc.c:1646  */
+#line 3508 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 136:
-#line 1520 "awkgram.y" /* yacc.c:1646  */
+#line 1521 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3513 "awkgram.c" /* yacc.c:1646  */
+#line 3514 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 137:
-#line 1522 "awkgram.y" /* yacc.c:1646  */
+#line 1523 "awkgram.y" /* yacc.c:1646  */
     {
                int count = 2;
                bool is_simple_var = false;
@@ -3566,47 +3567,47 @@ regular_print:
                                max_args = count;
                }
          }
-#line 3570 "awkgram.c" /* yacc.c:1646  */
+#line 3571 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 139:
-#line 1580 "awkgram.y" /* yacc.c:1646  */
+#line 1581 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3576 "awkgram.c" /* yacc.c:1646  */
+#line 3577 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 140:
-#line 1582 "awkgram.y" /* yacc.c:1646  */
+#line 1583 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3582 "awkgram.c" /* yacc.c:1646  */
+#line 3583 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 141:
-#line 1584 "awkgram.y" /* yacc.c:1646  */
+#line 1585 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3588 "awkgram.c" /* yacc.c:1646  */
+#line 3589 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 142:
-#line 1586 "awkgram.y" /* yacc.c:1646  */
+#line 1587 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3594 "awkgram.c" /* yacc.c:1646  */
+#line 3595 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 143:
-#line 1588 "awkgram.y" /* yacc.c:1646  */
+#line 1589 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3600 "awkgram.c" /* yacc.c:1646  */
+#line 3601 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 144:
-#line 1590 "awkgram.y" /* yacc.c:1646  */
+#line 1591 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3606 "awkgram.c" /* yacc.c:1646  */
+#line 3607 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 145:
-#line 1592 "awkgram.y" /* yacc.c:1646  */
+#line 1593 "awkgram.y" /* yacc.c:1646  */
     {
                /*
                 * In BEGINFILE/ENDFILE, allow `getline [var] < file'
@@ -3620,29 +3621,29 @@ regular_print:
                                _("non-redirected `getline' undefined inside 
END action"));
                (yyval) = mk_getline((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]), 
redirect_input);
          }
-#line 3624 "awkgram.c" /* yacc.c:1646  */
+#line 3625 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 146:
-#line 1606 "awkgram.y" /* yacc.c:1646  */
+#line 1607 "awkgram.y" /* yacc.c:1646  */
     {
                (yyvsp[0])->opcode = Op_postincrement;
                (yyval) = mk_assignment((yyvsp[-1]), NULL, (yyvsp[0]));
          }
-#line 3633 "awkgram.c" /* yacc.c:1646  */
+#line 3634 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 147:
-#line 1611 "awkgram.y" /* yacc.c:1646  */
+#line 1612 "awkgram.y" /* yacc.c:1646  */
     {
                (yyvsp[0])->opcode = Op_postdecrement;
                (yyval) = mk_assignment((yyvsp[-1]), NULL, (yyvsp[0]));
          }
-#line 3642 "awkgram.c" /* yacc.c:1646  */
+#line 3643 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 148:
-#line 1616 "awkgram.y" /* yacc.c:1646  */
+#line 1617 "awkgram.y" /* yacc.c:1646  */
     {
                if (do_lint_old) {
                    warning_ln((yyvsp[-1])->source_line,
@@ -3662,69 +3663,69 @@ regular_print:
                        (yyval) = list_append(list_merge(t, (yyvsp[0])), 
(yyvsp[-1]));
                }
          }
-#line 3666 "awkgram.c" /* yacc.c:1646  */
+#line 3667 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 149:
-#line 1641 "awkgram.y" /* yacc.c:1646  */
+#line 1642 "awkgram.y" /* yacc.c:1646  */
     {
                  (yyval) = mk_getline((yyvsp[-1]), (yyvsp[0]), (yyvsp[-3]), 
(yyvsp[-2])->redir_type);
                  bcfree((yyvsp[-2]));
                }
-#line 3675 "awkgram.c" /* yacc.c:1646  */
+#line 3676 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 150:
-#line 1647 "awkgram.y" /* yacc.c:1646  */
+#line 1648 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3681 "awkgram.c" /* yacc.c:1646  */
+#line 3682 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 151:
-#line 1649 "awkgram.y" /* yacc.c:1646  */
+#line 1650 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3687 "awkgram.c" /* yacc.c:1646  */
+#line 3688 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 152:
-#line 1651 "awkgram.y" /* yacc.c:1646  */
+#line 1652 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3693 "awkgram.c" /* yacc.c:1646  */
+#line 3694 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 153:
-#line 1653 "awkgram.y" /* yacc.c:1646  */
+#line 1654 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3699 "awkgram.c" /* yacc.c:1646  */
+#line 3700 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 154:
-#line 1655 "awkgram.y" /* yacc.c:1646  */
+#line 1656 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3705 "awkgram.c" /* yacc.c:1646  */
+#line 3706 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 155:
-#line 1657 "awkgram.y" /* yacc.c:1646  */
+#line 1658 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3711 "awkgram.c" /* yacc.c:1646  */
+#line 3712 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 156:
-#line 1662 "awkgram.y" /* yacc.c:1646  */
+#line 1663 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = list_create((yyvsp[0]));
          }
-#line 3719 "awkgram.c" /* yacc.c:1646  */
+#line 3720 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 157:
-#line 1666 "awkgram.y" /* yacc.c:1646  */
+#line 1667 "awkgram.y" /* yacc.c:1646  */
     {
                if ((yyvsp[0])->opcode == Op_match_rec) {
                        (yyvsp[0])->opcode = Op_nomatch;
                        (yyvsp[-1])->opcode = Op_push_i;
-                       (yyvsp[-1])->memory = make_number(0.0); 
+                       (yyvsp[-1])->memory = make_profile_number(0.0, "0", 1);
                        (yyval) = 
list_append(list_append(list_create((yyvsp[-1])),
                                                instruction(Op_field_spec)), 
(yyvsp[0]));
                } else {
@@ -3751,37 +3752,37 @@ regular_print:
                        }
                }
           }
-#line 3755 "awkgram.c" /* yacc.c:1646  */
+#line 3756 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 158:
-#line 1698 "awkgram.y" /* yacc.c:1646  */
+#line 1699 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[-1]); }
-#line 3761 "awkgram.c" /* yacc.c:1646  */
+#line 3762 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 159:
-#line 1700 "awkgram.y" /* yacc.c:1646  */
+#line 1701 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = snode((yyvsp[-1]), (yyvsp[-3]));
                if ((yyval) == NULL)
                        YYABORT;
          }
-#line 3771 "awkgram.c" /* yacc.c:1646  */
+#line 3772 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 160:
-#line 1706 "awkgram.y" /* yacc.c:1646  */
+#line 1707 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = snode((yyvsp[-1]), (yyvsp[-3]));
                if ((yyval) == NULL)
                        YYABORT;
          }
-#line 3781 "awkgram.c" /* yacc.c:1646  */
+#line 3782 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 161:
-#line 1712 "awkgram.y" /* yacc.c:1646  */
+#line 1713 "awkgram.y" /* yacc.c:1646  */
     {
                static bool warned = false;
 
@@ -3794,45 +3795,45 @@ regular_print:
                if ((yyval) == NULL)
                        YYABORT;
          }
-#line 3798 "awkgram.c" /* yacc.c:1646  */
+#line 3799 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 164:
-#line 1727 "awkgram.y" /* yacc.c:1646  */
+#line 1728 "awkgram.y" /* yacc.c:1646  */
     {
                (yyvsp[-1])->opcode = Op_preincrement;
                (yyval) = mk_assignment((yyvsp[0]), NULL, (yyvsp[-1]));
          }
-#line 3807 "awkgram.c" /* yacc.c:1646  */
+#line 3808 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 165:
-#line 1732 "awkgram.y" /* yacc.c:1646  */
+#line 1733 "awkgram.y" /* yacc.c:1646  */
     {
                (yyvsp[-1])->opcode = Op_predecrement;
                (yyval) = mk_assignment((yyvsp[0]), NULL, (yyvsp[-1]));
          }
-#line 3816 "awkgram.c" /* yacc.c:1646  */
+#line 3817 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 166:
-#line 1737 "awkgram.y" /* yacc.c:1646  */
+#line 1738 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = list_create((yyvsp[0]));
          }
-#line 3824 "awkgram.c" /* yacc.c:1646  */
+#line 3825 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 167:
-#line 1741 "awkgram.y" /* yacc.c:1646  */
+#line 1742 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = list_create((yyvsp[0]));
          }
-#line 3832 "awkgram.c" /* yacc.c:1646  */
+#line 3833 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 168:
-#line 1745 "awkgram.y" /* yacc.c:1646  */
+#line 1746 "awkgram.y" /* yacc.c:1646  */
     {
                if ((yyvsp[0])->lasti->opcode == Op_push_i
                        && ((yyvsp[0])->lasti->memory->flags & STRING) == 0
@@ -3847,34 +3848,34 @@ regular_print:
                        (yyval) = list_append((yyvsp[0]), (yyvsp[-1]));
                }
          }
-#line 3851 "awkgram.c" /* yacc.c:1646  */
+#line 3852 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 169:
-#line 1760 "awkgram.y" /* yacc.c:1646  */
+#line 1761 "awkgram.y" /* yacc.c:1646  */
     {
            /*
             * was: $$ = $2
             * POSIX semantics: force a conversion to numeric type
             */
                (yyvsp[-1])->opcode = Op_plus_i;
-               (yyvsp[-1])->memory = make_number(0.0);
+               (yyvsp[-1])->memory = make_profile_number(0.0, "0", 1);
                (yyval) = list_append((yyvsp[0]), (yyvsp[-1]));
          }
-#line 3865 "awkgram.c" /* yacc.c:1646  */
+#line 3866 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 170:
-#line 1773 "awkgram.y" /* yacc.c:1646  */
+#line 1774 "awkgram.y" /* yacc.c:1646  */
     {
                func_use((yyvsp[0])->lasti->func_name, FUNC_USE);
                (yyval) = (yyvsp[0]);
          }
-#line 3874 "awkgram.c" /* yacc.c:1646  */
+#line 3875 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 171:
-#line 1778 "awkgram.y" /* yacc.c:1646  */
+#line 1779 "awkgram.y" /* yacc.c:1646  */
     {
                /* indirect function call */
                INSTRUCTION *f, *t;
@@ -3908,11 +3909,11 @@ regular_print:
                (yyval) = list_prepend((yyvsp[0]), t);
                at_seen = false;
          }
-#line 3912 "awkgram.c" /* yacc.c:1646  */
+#line 3913 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 172:
-#line 1815 "awkgram.y" /* yacc.c:1646  */
+#line 1816 "awkgram.y" /* yacc.c:1646  */
     {
                NODE *n;
 
@@ -3937,49 +3938,49 @@ regular_print:
                        (yyval) = list_append(t, (yyvsp[-3]));
                }
          }
-#line 3941 "awkgram.c" /* yacc.c:1646  */
+#line 3942 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 173:
-#line 1843 "awkgram.y" /* yacc.c:1646  */
+#line 1844 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 3947 "awkgram.c" /* yacc.c:1646  */
+#line 3948 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 174:
-#line 1845 "awkgram.y" /* yacc.c:1646  */
+#line 1846 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3953 "awkgram.c" /* yacc.c:1646  */
+#line 3954 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 175:
-#line 1850 "awkgram.y" /* yacc.c:1646  */
+#line 1851 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 3959 "awkgram.c" /* yacc.c:1646  */
+#line 3960 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 176:
-#line 1852 "awkgram.y" /* yacc.c:1646  */
+#line 1853 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[-1]); }
-#line 3965 "awkgram.c" /* yacc.c:1646  */
+#line 3966 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 177:
-#line 1857 "awkgram.y" /* yacc.c:1646  */
+#line 1858 "awkgram.y" /* yacc.c:1646  */
     {  (yyval) = (yyvsp[0]); }
-#line 3971 "awkgram.c" /* yacc.c:1646  */
+#line 3972 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 178:
-#line 1859 "awkgram.y" /* yacc.c:1646  */
+#line 1860 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = list_merge((yyvsp[-1]), (yyvsp[0]));
          }
-#line 3979 "awkgram.c" /* yacc.c:1646  */
+#line 3980 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 179:
-#line 1866 "awkgram.y" /* yacc.c:1646  */
+#line 1867 "awkgram.y" /* yacc.c:1646  */
     {
                INSTRUCTION *ip = (yyvsp[0])->lasti; 
                int count = ip->sub_count;      /* # of SUBSEP-seperated 
expressions */
@@ -3993,11 +3994,11 @@ regular_print:
                sub_counter++;  /* count # of dimensions */
                (yyval) = (yyvsp[0]);
          }
-#line 3997 "awkgram.c" /* yacc.c:1646  */
+#line 3998 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 180:
-#line 1883 "awkgram.y" /* yacc.c:1646  */
+#line 1884 "awkgram.y" /* yacc.c:1646  */
     {
                INSTRUCTION *t = (yyvsp[-1]);
                if ((yyvsp[-1]) == NULL) {
@@ -4011,31 +4012,31 @@ regular_print:
                        (yyvsp[0])->sub_count = count_expressions(&t, false);
                (yyval) = list_append(t, (yyvsp[0]));
          }
-#line 4015 "awkgram.c" /* yacc.c:1646  */
+#line 4016 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 181:
-#line 1900 "awkgram.y" /* yacc.c:1646  */
+#line 1901 "awkgram.y" /* yacc.c:1646  */
     {  (yyval) = (yyvsp[0]); }
-#line 4021 "awkgram.c" /* yacc.c:1646  */
+#line 4022 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 182:
-#line 1902 "awkgram.y" /* yacc.c:1646  */
+#line 1903 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = list_merge((yyvsp[-1]), (yyvsp[0]));
          }
-#line 4029 "awkgram.c" /* yacc.c:1646  */
+#line 4030 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 183:
-#line 1909 "awkgram.y" /* yacc.c:1646  */
+#line 1910 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[-1]); }
-#line 4035 "awkgram.c" /* yacc.c:1646  */
+#line 4036 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 184:
-#line 1914 "awkgram.y" /* yacc.c:1646  */
+#line 1915 "awkgram.y" /* yacc.c:1646  */
     {
                char *var_name = (yyvsp[0])->lextok;
 
@@ -4043,22 +4044,22 @@ regular_print:
                (yyvsp[0])->memory = variable((yyvsp[0])->source_line, 
var_name, Node_var_new);
                (yyval) = list_create((yyvsp[0]));
          }
-#line 4047 "awkgram.c" /* yacc.c:1646  */
+#line 4048 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 185:
-#line 1922 "awkgram.y" /* yacc.c:1646  */
+#line 1923 "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 4058 "awkgram.c" /* yacc.c:1646  */
+#line 4059 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 186:
-#line 1932 "awkgram.y" /* yacc.c:1646  */
+#line 1933 "awkgram.y" /* yacc.c:1646  */
     {
                INSTRUCTION *ip = (yyvsp[0])->nexti;
                if (ip->opcode == Op_push
@@ -4070,73 +4071,73 @@ regular_print:
                } else
                        (yyval) = (yyvsp[0]);
          }
-#line 4074 "awkgram.c" /* yacc.c:1646  */
+#line 4075 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 187:
-#line 1944 "awkgram.y" /* yacc.c:1646  */
+#line 1945 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = list_append((yyvsp[-1]), (yyvsp[-2]));
                if ((yyvsp[0]) != NULL)
                        mk_assignment((yyvsp[-1]), NULL, (yyvsp[0]));
          }
-#line 4084 "awkgram.c" /* yacc.c:1646  */
+#line 4085 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 188:
-#line 1953 "awkgram.y" /* yacc.c:1646  */
+#line 1954 "awkgram.y" /* yacc.c:1646  */
     {
                (yyvsp[0])->opcode = Op_postincrement;
          }
-#line 4092 "awkgram.c" /* yacc.c:1646  */
+#line 4093 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 189:
-#line 1957 "awkgram.y" /* yacc.c:1646  */
+#line 1958 "awkgram.y" /* yacc.c:1646  */
     {
                (yyvsp[0])->opcode = Op_postdecrement;
          }
-#line 4100 "awkgram.c" /* yacc.c:1646  */
+#line 4101 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 190:
-#line 1960 "awkgram.y" /* yacc.c:1646  */
+#line 1961 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 4106 "awkgram.c" /* yacc.c:1646  */
+#line 4107 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 192:
-#line 1968 "awkgram.y" /* yacc.c:1646  */
+#line 1969 "awkgram.y" /* yacc.c:1646  */
     { yyerrok; }
-#line 4112 "awkgram.c" /* yacc.c:1646  */
+#line 4113 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 193:
-#line 1972 "awkgram.y" /* yacc.c:1646  */
+#line 1973 "awkgram.y" /* yacc.c:1646  */
     { yyerrok; }
-#line 4118 "awkgram.c" /* yacc.c:1646  */
+#line 4119 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 196:
-#line 1981 "awkgram.y" /* yacc.c:1646  */
+#line 1982 "awkgram.y" /* yacc.c:1646  */
     { yyerrok; }
-#line 4124 "awkgram.c" /* yacc.c:1646  */
+#line 4125 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 197:
-#line 1985 "awkgram.y" /* yacc.c:1646  */
+#line 1986 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); yyerrok; }
-#line 4130 "awkgram.c" /* yacc.c:1646  */
+#line 4131 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 198:
-#line 1989 "awkgram.y" /* yacc.c:1646  */
+#line 1990 "awkgram.y" /* yacc.c:1646  */
     { yyerrok; }
-#line 4136 "awkgram.c" /* yacc.c:1646  */
+#line 4137 "awkgram.c" /* yacc.c:1646  */
     break;
 
 
-#line 4140 "awkgram.c" /* yacc.c:1646  */
+#line 4141 "awkgram.c" /* yacc.c:1646  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -4364,7 +4365,7 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 1991 "awkgram.y" /* yacc.c:1906  */
+#line 1992 "awkgram.y" /* yacc.c:1906  */
 
 
 struct token {
@@ -4529,6 +4530,17 @@ negate_num(NODE *n)
        int tval = 0;
 #endif
 
+       if ((n->flags & NUMCONSTSTR) != 0) {
+               char *s;
+
+               emalloc(s, char *, n->stlen + 1 + 1, "negate_num");
+               s[0] = '-';
+               strcpy(& s[1], n->stptr);
+               free(n->stptr);
+               n->stptr = s;
+               n->stlen++;
+       }
+
        if (! is_mpg_number(n)) {
                n->numbr = -n->numbr;
                return;
@@ -6317,6 +6329,11 @@ retry:
                                IEEE_FMT(r->mpg_numbr, tval);
                        }
                        yylval->memory = r;
+                       if (do_pretty_print) {
+                               yylval->memory->stptr = estrdup(tokstart, 
strlen(tokstart)-1);
+                               yylval->memory->stlen = strlen(tokstart)-1;
+                               yylval->memory->flags |= NUMCONSTSTR;
+                       }
                        return lasttok = YNUMBER;
                }
 #endif
@@ -6324,7 +6341,7 @@ retry:
                        d = nondec2awknum(tokstart, strlen(tokstart), NULL);
                else
                        d = atof(tokstart);
-               yylval->memory = make_number(d);
+               yylval->memory = make_profile_number(d, tokstart, 
strlen(tokstart) - 1);
                if (d <= INT32_MAX && d >= INT32_MIN && d == (int32_t) d)
                        yylval->memory->flags |= NUMINT;
                return lasttok = YNUMBER;
@@ -6634,7 +6651,7 @@ snode(INSTRUCTION *subn, INSTRUCTION *r)
                                INSTRUCTION *expr;
 
                                expr = list_create(instruction(Op_push_i));
-                               expr->nexti->memory = make_number(0.0);
+                               expr->nexti->memory = make_profile_number(0.0, 
"0", 1);
                                (void) mk_expression_list(subn,
                                                list_append(expr, 
instruction(Op_field_spec)));
                        }
@@ -6682,7 +6699,7 @@ snode(INSTRUCTION *subn, INSTRUCTION *r)
                        r->sub_flags |= GENSUB;
                        if (nexp == 3) {
                                ip = instruction(Op_push_i);
-                               ip->memory = make_number(0.0);
+                               ip->memory = make_profile_number(0.0, "0", 1);
                                (void) mk_expression_list(subn,
                                                list_append(list_create(ip), 
instruction(Op_field_spec)));
                        }
@@ -6711,7 +6728,7 @@ snode(INSTRUCTION *subn, INSTRUCTION *r)
                        list = list_create(r);
                        (void) list_prepend(list, instruction(Op_field_spec));
                        (void) list_prepend(list, instruction(Op_push_i));
-                       list->nexti->memory = make_number(0.0);
+                       list->nexti->memory = make_profile_number(0.0, "0", 1);
                        return list; 
                } else {
                        arg = subn->nexti;
@@ -7510,6 +7527,8 @@ mk_binary(INSTRUCTION *s1, INSTRUCTION *s2, INSTRUCTION 
*op)
                        }
 
                        op->opcode = Op_push_i;
+                       // We don't need to call make_profile_number() here 
since
+                       // optimizing is disabled when doing pretty printing.
                        op->memory = make_number(res);
                        unref(n1);
                        unref(n2);
@@ -8571,3 +8590,18 @@ is_identchar(int c)
 {
        return (is_alnum(c) || c == '_');
 }
+
+/* make_profile_number --- make a number that can be printed when profiling */
+
+static NODE *
+make_profile_number(double d, const char *str, size_t len)
+{
+       NODE *n = make_number(d);
+       if (do_pretty_print) {
+               n->stptr = estrdup(str, len);
+               n->stlen = len;
+               n->flags |= NUMCONSTSTR;
+       }
+
+       return n;
+}
diff --git a/awkgram.y b/awkgram.y
index fb44ba9..c81e295 100644
--- a/awkgram.y
+++ b/awkgram.y
@@ -57,6 +57,7 @@ static int include_source(INSTRUCTION *file);
 static int load_library(INSTRUCTION *file);
 static void next_sourcefile(void);
 static char *tokexpand(void);
+static NODE *make_profile_number(double d, const char *str, size_t len);
 
 #define instruction(t) bcalloc(t, 1, 0)
 
@@ -1667,7 +1668,7 @@ non_post_simp_exp
                if ($2->opcode == Op_match_rec) {
                        $2->opcode = Op_nomatch;
                        $1->opcode = Op_push_i;
-                       $1->memory = make_number(0.0);  
+                       $1->memory = make_profile_number(0.0, "0", 1);
                        $$ = list_append(list_append(list_create($1),
                                                instruction(Op_field_spec)), 
$2);
                } else {
@@ -1763,7 +1764,7 @@ non_post_simp_exp
             * POSIX semantics: force a conversion to numeric type
             */
                $1->opcode = Op_plus_i;
-               $1->memory = make_number(0.0);
+               $1->memory = make_profile_number(0.0, "0", 1);
                $$ = list_append($2, $1);
          }
        ;
@@ -2152,6 +2153,17 @@ negate_num(NODE *n)
        int tval = 0;
 #endif
 
+       if ((n->flags & NUMCONSTSTR) != 0) {
+               char *s;
+
+               emalloc(s, char *, n->stlen + 1 + 1, "negate_num");
+               s[0] = '-';
+               strcpy(& s[1], n->stptr);
+               free(n->stptr);
+               n->stptr = s;
+               n->stlen++;
+       }
+
        if (! is_mpg_number(n)) {
                n->numbr = -n->numbr;
                return;
@@ -3940,6 +3952,11 @@ retry:
                                IEEE_FMT(r->mpg_numbr, tval);
                        }
                        yylval->memory = r;
+                       if (do_pretty_print) {
+                               yylval->memory->stptr = estrdup(tokstart, 
strlen(tokstart)-1);
+                               yylval->memory->stlen = strlen(tokstart)-1;
+                               yylval->memory->flags |= NUMCONSTSTR;
+                       }
                        return lasttok = YNUMBER;
                }
 #endif
@@ -3947,7 +3964,7 @@ retry:
                        d = nondec2awknum(tokstart, strlen(tokstart), NULL);
                else
                        d = atof(tokstart);
-               yylval->memory = make_number(d);
+               yylval->memory = make_profile_number(d, tokstart, 
strlen(tokstart) - 1);
                if (d <= INT32_MAX && d >= INT32_MIN && d == (int32_t) d)
                        yylval->memory->flags |= NUMINT;
                return lasttok = YNUMBER;
@@ -4257,7 +4274,7 @@ snode(INSTRUCTION *subn, INSTRUCTION *r)
                                INSTRUCTION *expr;
 
                                expr = list_create(instruction(Op_push_i));
-                               expr->nexti->memory = make_number(0.0);
+                               expr->nexti->memory = make_profile_number(0.0, 
"0", 1);
                                (void) mk_expression_list(subn,
                                                list_append(expr, 
instruction(Op_field_spec)));
                        }
@@ -4305,7 +4322,7 @@ snode(INSTRUCTION *subn, INSTRUCTION *r)
                        r->sub_flags |= GENSUB;
                        if (nexp == 3) {
                                ip = instruction(Op_push_i);
-                               ip->memory = make_number(0.0);
+                               ip->memory = make_profile_number(0.0, "0", 1);
                                (void) mk_expression_list(subn,
                                                list_append(list_create(ip), 
instruction(Op_field_spec)));
                        }
@@ -4334,7 +4351,7 @@ snode(INSTRUCTION *subn, INSTRUCTION *r)
                        list = list_create(r);
                        (void) list_prepend(list, instruction(Op_field_spec));
                        (void) list_prepend(list, instruction(Op_push_i));
-                       list->nexti->memory = make_number(0.0);
+                       list->nexti->memory = make_profile_number(0.0, "0", 1);
                        return list; 
                } else {
                        arg = subn->nexti;
@@ -5133,6 +5150,8 @@ mk_binary(INSTRUCTION *s1, INSTRUCTION *s2, INSTRUCTION 
*op)
                        }
 
                        op->opcode = Op_push_i;
+                       // We don't need to call make_profile_number() here 
since
+                       // optimizing is disabled when doing pretty printing.
                        op->memory = make_number(res);
                        unref(n1);
                        unref(n2);
@@ -6194,3 +6213,18 @@ is_identchar(int c)
 {
        return (is_alnum(c) || c == '_');
 }
+
+/* make_profile_number --- make a number that can be printed when profiling */
+
+static NODE *
+make_profile_number(double d, const char *str, size_t len)
+{
+       NODE *n = make_number(d);
+       if (do_pretty_print) {
+               n->stptr = estrdup(str, len);
+               n->stlen = len;
+               n->flags |= NUMCONSTSTR;
+       }
+
+       return n;
+}
diff --git a/profile.c b/profile.c
index 56df9e3..623da3f 100644
--- a/profile.c
+++ b/profile.c
@@ -1491,45 +1491,12 @@ pp_string_or_strong_regex(const char *in_str, size_t 
len, int delim, bool strong
 char *
 pp_number(NODE *n)
 {
-#define PP_PRECISION 6
        char *str;
 
-#ifdef HAVE_MPFR
-       size_t count;
-
-       if (is_mpg_float(n)) {
-               count = mpfr_get_prec(n->mpg_numbr) / 3;        /* ~ 3.22 
binary digits per decimal digit */
-               emalloc(str, char *, count, "pp_number");
-               /*
-                * 3/2015: Format string used to be "%0.*R*g". That padded
-                * with leading zeros. But it doesn't do that for regular
-                * numbers in the non-MPFR case.
-                */
-               mpfr_sprintf(str, "%.*R*g", PP_PRECISION, ROUND_MODE, 
n->mpg_numbr);
-       } else if (is_mpg_integer(n)) {
-               count = mpz_sizeinbase(n->mpg_i, 10) + 2;       /* +1 for sign, 
+1 for NUL at end */
-               emalloc(str, char *, count, "pp_number");
-               mpfr_sprintf(str, "%Zd", n->mpg_i);
-       } else
-#endif
-       {
-               /* Use format_val() to get integral values printed as integers 
*/
-               NODE *s;
-
-               getnode(s);
-               *s = *n;
-               s->flags &= ~STRCUR;
-
-               s = r_format_val("%.6g", 0, s);
-
-               s->stptr[s->stlen] = '\0';
-               str = s->stptr;
-
-               freenode(s);
-       }
-
+       assert((n->flags & NUMCONSTSTR) != 0);
+       emalloc(str, char *, n->stlen + 1, "pp_number");
+       strcpy(str, n->stptr);
        return str;
-#undef PP_PRECISION
 }
 
 /* pp_node --- pretty format a node */
diff --git a/test/ChangeLog b/test/ChangeLog
index a4d5baa..1080920 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,3 +1,7 @@
+2016-10-07         Arnold D. Robbins     <address@hidden>
+
+       * mpfrmemok1.ok: Update after code change.
+
 2016-09-09         Norihiro Tanaka      <address@hidden>
 
        * Makefile.am (anchor): New test.
diff --git a/test/mpfrmemok1.ok b/test/mpfrmemok1.ok
index 2389a2d..6bbd030 100644
--- a/test/mpfrmemok1.ok
+++ b/test/mpfrmemok1.ok
@@ -2,6 +2,6 @@
        # BEGIN rule(s)
 
        BEGIN {
-     1         v = 340282366920938463463374607431768211456
+     1         v = 0x0100000000000000000000000000000000
        }
 

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

Summary of changes:
 ChangeLog          |   10 +
 awk.h              |    1 +
 awkgram.c          |  806 +++++++++++++++++++++++++++-------------------------
 awkgram.y          |   46 ++-
 profile.c          |   39 +--
 test/ChangeLog     |    4 +
 test/mpfrmemok1.ok |    2 +-
 7 files changed, 479 insertions(+), 429 deletions(-)


hooks/post-receive
-- 
gawk



reply via email to

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