gawk-diffs
[Top][All Lists]
Advanced

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

[SCM] gawk branch, zos-debug, updated. gawk-4.1.0-4261-g0ec90df


From: Arnold Robbins
Subject: [SCM] gawk branch, zos-debug, updated. gawk-4.1.0-4261-g0ec90df
Date: Thu, 3 Jun 2021 05:02:43 -0400 (EDT)

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

The branch, zos-debug has been updated
       via  0ec90df0341da36d7c9986d5c8646d9422fe3550 (commit)
      from  273fe0737301a18018540bc6195c85825115131b (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=0ec90df0341da36d7c9986d5c8646d9422fe3550

commit 0ec90df0341da36d7c9986d5c8646d9422fe3550
Author: Arnold D. Robbins <arnold@skeeve.com>
Date:   Thu Jun 3 12:02:33 2021 +0300

    Add more prints.

diff --git a/awk.h b/awk.h
index 2ab25bf..43c044c 100644
--- a/awk.h
+++ b/awk.h
@@ -1227,6 +1227,8 @@ extern const char awk_namespace[];        /* "awk" */
 extern const char *current_namespace;
 extern bool namespace_changed;
 
+extern NODE *watched;
+
 /* ------------------------- Runtime stack -------------------------------- */
 
 typedef union stack_item {
diff --git a/awkgram.c b/awkgram.c
index 861affe..cc6f764 100644
--- a/awkgram.c
+++ b/awkgram.c
@@ -79,6 +79,8 @@
 #define signed /**/
 #endif
 
+NODE *watched = 0;
+
 static void yyerror(const char *m, ...) ATTRIBUTE_PRINTF_1;
 static void error_ln(int line, const char *m, ...) ATTRIBUTE_PRINTF_2;
 static void lintwarn_ln(int line, const char *m, ...) ATTRIBUTE_PRINTF_2;
@@ -233,7 +235,7 @@ extern double fmod(double x, double y);
 
 #define YYSTYPE INSTRUCTION *
 
-#line 237 "awkgram.c"
+#line 239 "awkgram.c"
 
 # ifndef YY_CAST
 #  ifdef __cplusplus
@@ -927,27 +929,27 @@ static const yytype_int8 yytranslate[] =
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_int16 yyrline[] =
 {
-       0,   233,   233,   234,   239,   249,   253,   265,   273,   287,
-     298,   308,   318,   331,   341,   343,   348,   358,   360,   365,
-     367,   369,   375,   379,   384,   414,   426,   438,   444,   453,
-     471,   472,   483,   489,   497,   498,   502,   502,   536,   535,
-     569,   584,   586,   591,   592,   612,   617,   618,   622,   633,
-     638,   645,   753,   804,   854,   980,  1002,  1023,  1033,  1043,
-    1053,  1064,  1077,  1095,  1094,  1111,  1129,  1129,  1231,  1231,
-    1270,  1300,  1308,  1309,  1315,  1316,  1323,  1328,  1341,  1356,
-    1358,  1366,  1373,  1375,  1383,  1392,  1394,  1403,  1404,  1412,
-    1417,  1417,  1430,  1437,  1450,  1454,  1476,  1477,  1483,  1484,
-    1493,  1494,  1499,  1504,  1521,  1523,  1525,  1532,  1533,  1539,
-    1540,  1545,  1547,  1554,  1556,  1564,  1569,  1580,  1581,  1586,
-    1588,  1595,  1597,  1605,  1610,  1620,  1621,  1626,  1627,  1632,
-    1639,  1643,  1645,  1647,  1660,  1677,  1687,  1694,  1696,  1701,
-    1703,  1705,  1713,  1715,  1720,  1722,  1727,  1729,  1731,  1788,
-    1790,  1792,  1794,  1796,  1798,  1800,  1802,  1816,  1821,  1826,
-    1852,  1858,  1860,  1862,  1864,  1866,  1868,  1873,  1877,  1909,
-    1917,  1923,  1929,  1942,  1943,  1944,  1949,  1954,  1958,  1962,
-    1977,  1998,  2003,  2040,  2077,  2078,  2084,  2085,  2090,  2092,
-    2099,  2116,  2133,  2135,  2142,  2147,  2153,  2164,  2176,  2185,
-    2189,  2194,  2198,  2202,  2206,  2211,  2212,  2216,  2220,  2224
+       0,   235,   235,   236,   241,   251,   255,   267,   275,   289,
+     300,   310,   320,   333,   343,   345,   350,   360,   362,   367,
+     369,   371,   377,   381,   386,   416,   428,   440,   446,   455,
+     473,   474,   485,   491,   499,   500,   504,   504,   538,   537,
+     571,   586,   588,   593,   594,   614,   619,   620,   624,   635,
+     640,   647,   755,   806,   856,   982,  1004,  1025,  1035,  1045,
+    1055,  1066,  1079,  1097,  1096,  1113,  1131,  1131,  1233,  1233,
+    1276,  1306,  1314,  1315,  1321,  1322,  1329,  1334,  1347,  1362,
+    1364,  1372,  1379,  1381,  1389,  1398,  1400,  1409,  1410,  1418,
+    1423,  1423,  1436,  1443,  1456,  1460,  1482,  1483,  1489,  1490,
+    1499,  1500,  1505,  1510,  1527,  1529,  1531,  1538,  1539,  1545,
+    1546,  1551,  1553,  1560,  1562,  1570,  1575,  1586,  1587,  1592,
+    1594,  1601,  1603,  1611,  1616,  1626,  1627,  1632,  1633,  1638,
+    1645,  1649,  1651,  1653,  1666,  1683,  1693,  1700,  1702,  1707,
+    1709,  1711,  1719,  1721,  1726,  1728,  1733,  1735,  1737,  1794,
+    1796,  1798,  1800,  1802,  1804,  1806,  1808,  1822,  1827,  1832,
+    1858,  1864,  1866,  1868,  1870,  1872,  1874,  1879,  1883,  1915,
+    1923,  1929,  1935,  1948,  1949,  1950,  1955,  1960,  1964,  1968,
+    1983,  2004,  2009,  2046,  2083,  2084,  2090,  2091,  2096,  2098,
+    2105,  2122,  2139,  2141,  2148,  2153,  2159,  2170,  2182,  2191,
+    2195,  2200,  2204,  2208,  2212,  2217,  2218,  2222,  2226,  2230
 };
 #endif
 
@@ -1949,22 +1951,22 @@ yyreduce:
   switch (yyn)
     {
   case 2: /* program: %empty  */
-#line 233 "awkgram.y"
+#line 235 "awkgram.y"
           { yyval = NULL; }
-#line 1955 "awkgram.c"
+#line 1957 "awkgram.c"
     break;
 
   case 3: /* program: program rule  */
-#line 235 "awkgram.y"
+#line 237 "awkgram.y"
           {
                rule = 0;
                yyerrok;
          }
-#line 1964 "awkgram.c"
+#line 1966 "awkgram.c"
     break;
 
   case 4: /* program: program nls  */
-#line 240 "awkgram.y"
+#line 242 "awkgram.y"
           {
                if (yyvsp[0] != NULL) {
                        if (yyvsp[-1] == NULL)
@@ -1974,19 +1976,19 @@ yyreduce:
                }
                yyval = yyvsp[-1];
          }
-#line 1978 "awkgram.c"
+#line 1980 "awkgram.c"
     break;
 
   case 5: /* program: program LEX_EOF  */
-#line 250 "awkgram.y"
+#line 252 "awkgram.y"
           {
                next_sourcefile();
          }
-#line 1986 "awkgram.c"
+#line 1988 "awkgram.c"
     break;
 
   case 6: /* program: program error  */
-#line 254 "awkgram.y"
+#line 256 "awkgram.y"
           {
                rule = 0;
                /*
@@ -1995,11 +1997,11 @@ yyreduce:
                 */
                /* yyerrok; */
          }
-#line 1999 "awkgram.c"
+#line 2001 "awkgram.c"
     break;
 
   case 7: /* rule: pattern action  */
-#line 266 "awkgram.y"
+#line 268 "awkgram.y"
           {
                (void) append_rule(yyvsp[-1], yyvsp[0]);
                if (pending_comment != NULL) {
@@ -2007,11 +2009,11 @@ yyreduce:
                        pending_comment = NULL;
                }
          }
-#line 2011 "awkgram.c"
+#line 2013 "awkgram.c"
     break;
 
   case 8: /* rule: pattern statement_term  */
-#line 274 "awkgram.y"
+#line 276 "awkgram.y"
           {
                if (rule != Rule) {
                        msg(_("%s blocks must have an action part"), 
ruletab[rule]);
@@ -2025,11 +2027,11 @@ yyreduce:
                        (void) append_rule(yyvsp[-1], NULL);
                }
          }
-#line 2029 "awkgram.c"
+#line 2031 "awkgram.c"
     break;
 
   case 9: /* rule: function_prologue action  */
-#line 288 "awkgram.y"
+#line 290 "awkgram.y"
           {
                in_function = false;
                (void) mk_function(yyvsp[-1], yyvsp[0]);
@@ -2040,11 +2042,11 @@ yyreduce:
                }
                yyerrok;
          }
-#line 2044 "awkgram.c"
+#line 2046 "awkgram.c"
     break;
 
   case 10: /* rule: '@' LEX_INCLUDE source statement_term  */
-#line 299 "awkgram.y"
+#line 301 "awkgram.y"
           {
                want_source = false;
                at_seen = false;
@@ -2054,11 +2056,11 @@ yyreduce:
                }
                yyerrok;
          }
-#line 2058 "awkgram.c"
+#line 2060 "awkgram.c"
     break;
 
   case 11: /* rule: '@' LEX_LOAD library statement_term  */
-#line 309 "awkgram.y"
+#line 311 "awkgram.y"
           {
                want_source = false;
                at_seen = false;
@@ -2068,11 +2070,11 @@ yyreduce:
                }
                yyerrok;
          }
-#line 2072 "awkgram.c"
+#line 2074 "awkgram.c"
     break;
 
   case 12: /* rule: '@' LEX_NAMESPACE namespace statement_term  */
-#line 319 "awkgram.y"
+#line 321 "awkgram.y"
           {
                want_source = false;
                at_seen = false;
@@ -2082,11 +2084,11 @@ yyreduce:
 
                yyerrok;
          }
-#line 2086 "awkgram.c"
+#line 2088 "awkgram.c"
     break;
 
   case 13: /* source: FILENAME  */
-#line 332 "awkgram.y"
+#line 334 "awkgram.y"
           {
                void *srcfile = NULL;
 
@@ -2096,23 +2098,23 @@ yyreduce:
                bcfree(yyvsp[0]);
                yyval = (INSTRUCTION *) srcfile;
          }
-#line 2100 "awkgram.c"
+#line 2102 "awkgram.c"
     break;
 
   case 14: /* source: FILENAME error  */
-#line 342 "awkgram.y"
+#line 344 "awkgram.y"
           { yyval = NULL; }
-#line 2106 "awkgram.c"
+#line 2108 "awkgram.c"
     break;
 
   case 15: /* source: error  */
-#line 344 "awkgram.y"
+#line 346 "awkgram.y"
           { yyval = NULL; }
-#line 2112 "awkgram.c"
+#line 2114 "awkgram.c"
     break;
 
   case 16: /* library: FILENAME  */
-#line 349 "awkgram.y"
+#line 351 "awkgram.y"
           {
                void *srcfile;
 
@@ -2122,58 +2124,58 @@ yyreduce:
                bcfree(yyvsp[0]);
                yyval = (INSTRUCTION *) srcfile;
          }
-#line 2126 "awkgram.c"
+#line 2128 "awkgram.c"
     break;
 
   case 17: /* library: FILENAME error  */
-#line 359 "awkgram.y"
+#line 361 "awkgram.y"
           { yyval = NULL; }
-#line 2132 "awkgram.c"
+#line 2134 "awkgram.c"
     break;
 
   case 18: /* library: error  */
-#line 361 "awkgram.y"
+#line 363 "awkgram.y"
           { yyval = NULL; }
-#line 2138 "awkgram.c"
+#line 2140 "awkgram.c"
     break;
 
   case 19: /* namespace: FILENAME  */
-#line 366 "awkgram.y"
+#line 368 "awkgram.y"
           { yyval = yyvsp[0]; }
-#line 2144 "awkgram.c"
+#line 2146 "awkgram.c"
     break;
 
   case 20: /* namespace: FILENAME error  */
-#line 368 "awkgram.y"
+#line 370 "awkgram.y"
           { yyval = NULL; }
-#line 2150 "awkgram.c"
+#line 2152 "awkgram.c"
     break;
 
   case 21: /* namespace: error  */
-#line 370 "awkgram.y"
+#line 372 "awkgram.y"
           { yyval = NULL; }
-#line 2156 "awkgram.c"
+#line 2158 "awkgram.c"
     break;
 
   case 22: /* pattern: %empty  */
-#line 375 "awkgram.y"
+#line 377 "awkgram.y"
           {
                rule = Rule;
                yyval = NULL;
          }
-#line 2165 "awkgram.c"
+#line 2167 "awkgram.c"
     break;
 
   case 23: /* pattern: exp  */
-#line 380 "awkgram.y"
+#line 382 "awkgram.y"
           {
                rule = Rule;
          }
-#line 2173 "awkgram.c"
+#line 2175 "awkgram.c"
     break;
 
   case 24: /* pattern: exp comma exp  */
-#line 385 "awkgram.y"
+#line 387 "awkgram.y"
           {
                INSTRUCTION *tp;
 
@@ -2203,11 +2205,11 @@ yyreduce:
                        yyval = list_append(list_merge(yyvsp[-2], yyvsp[0]), 
tp);
                rule = Rule;
          }
-#line 2207 "awkgram.c"
+#line 2209 "awkgram.c"
     break;
 
   case 25: /* pattern: LEX_BEGIN  */
-#line 415 "awkgram.y"
+#line 417 "awkgram.y"
           {
                static int begin_seen = 0;
 
@@ -2219,11 +2221,11 @@ yyreduce:
                yyvsp[0]->source_file = source;
                yyval = yyvsp[0];
          }
-#line 2223 "awkgram.c"
+#line 2225 "awkgram.c"
     break;
 
   case 26: /* pattern: LEX_END  */
-#line 427 "awkgram.y"
+#line 429 "awkgram.y"
           {
                static int end_seen = 0;
 
@@ -2235,31 +2237,31 @@ yyreduce:
                yyvsp[0]->source_file = source;
                yyval = yyvsp[0];
          }
-#line 2239 "awkgram.c"
+#line 2241 "awkgram.c"
     break;
 
   case 27: /* pattern: LEX_BEGINFILE  */
-#line 439 "awkgram.y"
+#line 441 "awkgram.y"
           {
                yyvsp[0]->in_rule = rule = BEGINFILE;
                yyvsp[0]->source_file = source;
                yyval = yyvsp[0];
          }
-#line 2249 "awkgram.c"
+#line 2251 "awkgram.c"
     break;
 
   case 28: /* pattern: LEX_ENDFILE  */
-#line 445 "awkgram.y"
+#line 447 "awkgram.y"
           {
                yyvsp[0]->in_rule = rule = ENDFILE;
                yyvsp[0]->source_file = source;
                yyval = yyvsp[0];
          }
-#line 2259 "awkgram.c"
+#line 2261 "awkgram.c"
     break;
 
   case 29: /* action: l_brace statements r_brace opt_semi opt_nls  */
-#line 454 "awkgram.y"
+#line 456 "awkgram.y"
           {
                INSTRUCTION *ip = make_braced_statements(yyvsp[-4], yyvsp[-3], 
yyvsp[-2]);
 
@@ -2274,11 +2276,11 @@ yyreduce:
 
                yyval = ip;
          }
-#line 2278 "awkgram.c"
+#line 2280 "awkgram.c"
     break;
 
   case 31: /* func_name: FUNC_CALL  */
-#line 473 "awkgram.y"
+#line 475 "awkgram.y"
           {
                const char *name = yyvsp[0]->lextok;
                char *qname = qualify_name(name, strlen(name));
@@ -2289,36 +2291,36 @@ yyreduce:
                }
                yyval = yyvsp[0];
          }
-#line 2293 "awkgram.c"
+#line 2295 "awkgram.c"
     break;
 
   case 32: /* func_name: lex_builtin  */
-#line 484 "awkgram.y"
+#line 486 "awkgram.y"
           {
                yyerror(_("`%s' is a built-in function, it cannot be 
redefined"),
                                        tokstart);
                YYABORT;
          }
-#line 2303 "awkgram.c"
+#line 2305 "awkgram.c"
     break;
 
   case 33: /* func_name: '@' LEX_EVAL  */
-#line 490 "awkgram.y"
+#line 492 "awkgram.y"
           {
                yyval = yyvsp[0];
                at_seen = false;
          }
-#line 2312 "awkgram.c"
+#line 2314 "awkgram.c"
     break;
 
   case 36: /* $@1: %empty  */
-#line 502 "awkgram.y"
+#line 504 "awkgram.y"
                                      { want_param_names = FUNC_HEADER; }
-#line 2318 "awkgram.c"
+#line 2320 "awkgram.c"
     break;
 
   case 37: /* function_prologue: LEX_FUNCTION func_name '(' $@1 opt_param_list 
r_paren opt_nls  */
-#line 503 "awkgram.y"
+#line 505 "awkgram.y"
           {
                INSTRUCTION *func_comment = NULL;
                // Merge any comments found in the parameter list with those
@@ -2344,17 +2346,17 @@ yyreduce:
                yyval = yyvsp[-6];
                want_param_names = FUNC_BODY;
          }
-#line 2348 "awkgram.c"
+#line 2350 "awkgram.c"
     break;
 
   case 38: /* $@2: %empty  */
-#line 536 "awkgram.y"
+#line 538 "awkgram.y"
                 { want_regexp = true; }
-#line 2354 "awkgram.c"
+#line 2356 "awkgram.c"
     break;
 
   case 39: /* regexp: a_slash $@2 REGEXP  */
-#line 538 "awkgram.y"
+#line 540 "awkgram.y"
                 {
                  NODE *n, *exp;
                  char *re;
@@ -2383,11 +2385,11 @@ yyreduce:
                  yyval->opcode = Op_match_rec;
                  yyval->memory = n;
                }
-#line 2387 "awkgram.c"
+#line 2389 "awkgram.c"
     break;
 
   case 40: /* typed_regexp: TYPED_REGEXP  */
-#line 570 "awkgram.y"
+#line 572 "awkgram.y"
                 {
                  char *re;
                  size_t len;
@@ -2400,23 +2402,23 @@ yyreduce:
                  yyval->opcode = Op_push_re;
                  yyval->memory = make_typed_regex(re, len);
                }
-#line 2404 "awkgram.c"
+#line 2406 "awkgram.c"
     break;
 
   case 41: /* a_slash: '/'  */
-#line 585 "awkgram.y"
+#line 587 "awkgram.y"
           { bcfree(yyvsp[0]); }
-#line 2410 "awkgram.c"
+#line 2412 "awkgram.c"
     break;
 
   case 43: /* statements: %empty  */
-#line 591 "awkgram.y"
+#line 593 "awkgram.y"
           { yyval = NULL; }
-#line 2416 "awkgram.c"
+#line 2418 "awkgram.c"
     break;
 
   case 44: /* statements: statements statement  */
-#line 593 "awkgram.y"
+#line 595 "awkgram.y"
           {
                if (yyvsp[0] == NULL) {
                        yyval = yyvsp[-1];
@@ -2436,29 +2438,29 @@ yyreduce:
 
                yyerrok;
          }
-#line 2440 "awkgram.c"
+#line 2442 "awkgram.c"
     break;
 
   case 45: /* statements: statements error  */
-#line 613 "awkgram.y"
+#line 615 "awkgram.y"
           {    yyval = NULL; }
-#line 2446 "awkgram.c"
+#line 2448 "awkgram.c"
     break;
 
   case 46: /* statement_term: nls  */
-#line 617 "awkgram.y"
+#line 619 "awkgram.y"
                         { yyval = yyvsp[0]; }
-#line 2452 "awkgram.c"
+#line 2454 "awkgram.c"
     break;
 
   case 47: /* statement_term: semi opt_nls  */
-#line 618 "awkgram.y"
+#line 620 "awkgram.y"
                         { yyval = yyvsp[0]; }
-#line 2458 "awkgram.c"
+#line 2460 "awkgram.c"
     break;
 
   case 48: /* statement: semi opt_nls  */
-#line 623 "awkgram.y"
+#line 625 "awkgram.y"
           {
                if (yyvsp[0] != NULL) {
                        INSTRUCTION *ip;
@@ -2469,31 +2471,31 @@ yyreduce:
                } else
                        yyval = NULL;
          }
-#line 2473 "awkgram.c"
+#line 2475 "awkgram.c"
     break;
 
   case 49: /* statement: l_brace statements r_brace  */
-#line 634 "awkgram.y"
+#line 636 "awkgram.y"
           {
                trailing_comment = yyvsp[0];    // NULL or comment
                yyval = make_braced_statements(yyvsp[-2], yyvsp[-1], yyvsp[0]);
          }
-#line 2482 "awkgram.c"
+#line 2484 "awkgram.c"
     break;
 
   case 50: /* statement: if_statement  */
-#line 639 "awkgram.y"
+#line 641 "awkgram.y"
           {
                if (do_pretty_print)
                        yyval = list_prepend(yyvsp[0], 
instruction(Op_exec_count));
                else
                        yyval = yyvsp[0];
          }
-#line 2493 "awkgram.c"
+#line 2495 "awkgram.c"
     break;
 
   case 51: /* statement: LEX_SWITCH '(' exp r_paren opt_nls l_brace 
case_statements opt_nls r_brace  */
-#line 646 "awkgram.y"
+#line 648 "awkgram.y"
           {
                INSTRUCTION *dflt, *curr = NULL, *cexp, *cstmt;
                INSTRUCTION *ip, *nextc, *tbreak;
@@ -2601,11 +2603,11 @@ yyreduce:
                break_allowed--;
                fix_break_continue(ip, tbreak, NULL);
          }
-#line 2605 "awkgram.c"
+#line 2607 "awkgram.c"
     break;
 
   case 52: /* statement: LEX_WHILE '(' exp r_paren opt_nls statement  */
-#line 754 "awkgram.y"
+#line 756 "awkgram.y"
           {
                /*
                 *    -----------------
@@ -2656,11 +2658,11 @@ yyreduce:
                continue_allowed--;
                fix_break_continue(ip, tbreak, tcont);
          }
-#line 2660 "awkgram.c"
+#line 2662 "awkgram.c"
     break;
 
   case 53: /* statement: LEX_DO opt_nls statement LEX_WHILE '(' exp r_paren 
opt_nls  */
-#line 805 "awkgram.y"
+#line 807 "awkgram.y"
           {
                /*
                 *    -----------------
@@ -2710,11 +2712,11 @@ yyreduce:
                /* else
                        $1 and $4 are NULLs */
          }
-#line 2714 "awkgram.c"
+#line 2716 "awkgram.c"
     break;
 
   case 54: /* statement: LEX_FOR '(' NAME LEX_IN simple_variable r_paren 
opt_nls statement  */
-#line 855 "awkgram.y"
+#line 857 "awkgram.y"
           {
                INSTRUCTION *ip;
                char *var_name = yyvsp[-5]->lextok;
@@ -2840,11 +2842,11 @@ regular_loop:
                break_allowed--;
                continue_allowed--;
          }
-#line 2844 "awkgram.c"
+#line 2846 "awkgram.c"
     break;
 
   case 55: /* statement: LEX_FOR '(' opt_simple_stmt semi opt_nls exp semi 
opt_nls opt_simple_stmt r_paren opt_nls statement  */
-#line 981 "awkgram.y"
+#line 983 "awkgram.y"
           {
                if (yyvsp[-7] != NULL) {
                        merge_comments(yyvsp[-7], NULL);
@@ -2866,11 +2868,11 @@ regular_loop:
                break_allowed--;
                continue_allowed--;
          }
-#line 2870 "awkgram.c"
+#line 2872 "awkgram.c"
     break;
 
   case 56: /* statement: LEX_FOR '(' opt_simple_stmt semi opt_nls semi opt_nls 
opt_simple_stmt r_paren opt_nls statement  */
-#line 1003 "awkgram.y"
+#line 1005 "awkgram.y"
           {
                if (yyvsp[-6] != NULL) {
                        merge_comments(yyvsp[-6], NULL);
@@ -2891,22 +2893,22 @@ regular_loop:
                break_allowed--;
                continue_allowed--;
          }
-#line 2895 "awkgram.c"
+#line 2897 "awkgram.c"
     break;
 
   case 57: /* statement: non_compound_stmt  */
-#line 1024 "awkgram.y"
+#line 1026 "awkgram.y"
           {
                if (do_pretty_print)
                        yyval = list_prepend(yyvsp[0], 
instruction(Op_exec_count));
                else
                        yyval = yyvsp[0];
          }
-#line 2906 "awkgram.c"
+#line 2908 "awkgram.c"
     break;
 
   case 58: /* non_compound_stmt: LEX_BREAK statement_term  */
-#line 1034 "awkgram.y"
+#line 1036 "awkgram.y"
           {
                if (! break_allowed)
                        error_ln(yyvsp[-1]->source_line,
@@ -2916,11 +2918,11 @@ regular_loop:
                if (yyvsp[0] != NULL)
                        yyval = list_append(yyval, yyvsp[0]);
          }
-#line 2920 "awkgram.c"
+#line 2922 "awkgram.c"
     break;
 
   case 59: /* non_compound_stmt: LEX_CONTINUE statement_term  */
-#line 1044 "awkgram.y"
+#line 1046 "awkgram.y"
           {
                if (! continue_allowed)
                        error_ln(yyvsp[-1]->source_line,
@@ -2930,11 +2932,11 @@ regular_loop:
                if (yyvsp[0] != NULL)
                        yyval = list_append(yyval, yyvsp[0]);
          }
-#line 2934 "awkgram.c"
+#line 2936 "awkgram.c"
     break;
 
   case 60: /* non_compound_stmt: LEX_NEXT statement_term  */
-#line 1054 "awkgram.y"
+#line 1056 "awkgram.y"
           {
                /* if inside function (rule = 0), resolve context at run-time */
                if (rule && rule != Rule)
@@ -2945,11 +2947,11 @@ regular_loop:
                if (yyvsp[0] != NULL)
                        yyval = list_append(yyval, yyvsp[0]);
          }
-#line 2949 "awkgram.c"
+#line 2951 "awkgram.c"
     break;
 
   case 61: /* non_compound_stmt: LEX_NEXTFILE statement_term  */
-#line 1065 "awkgram.y"
+#line 1067 "awkgram.y"
           {
                /* if inside function (rule = 0), resolve context at run-time */
                if (rule == BEGIN || rule == END || rule == ENDFILE)
@@ -2962,11 +2964,11 @@ regular_loop:
                if (yyvsp[0] != NULL)
                        yyval = list_append(yyval, yyvsp[0]);
          }
-#line 2966 "awkgram.c"
+#line 2968 "awkgram.c"
     break;
 
   case 62: /* non_compound_stmt: LEX_EXIT opt_exp statement_term  */
-#line 1078 "awkgram.y"
+#line 1080 "awkgram.y"
           {
                /* Initialize the two possible jump targets, the actual target
                 * is resolved at run-time.
@@ -2983,20 +2985,20 @@ regular_loop:
                if (yyvsp[0] != NULL)
                        yyval = list_append(yyval, yyvsp[0]);
          }
-#line 2987 "awkgram.c"
+#line 2989 "awkgram.c"
     break;
 
   case 63: /* $@3: %empty  */
-#line 1095 "awkgram.y"
+#line 1097 "awkgram.y"
           {
                if (! in_function)
                        yyerror(_("`return' used outside function context"));
          }
-#line 2996 "awkgram.c"
+#line 2998 "awkgram.c"
     break;
 
   case 64: /* non_compound_stmt: LEX_RETURN $@3 opt_fcall_exp statement_term  
*/
-#line 1098 "awkgram.y"
+#line 1100 "awkgram.y"
                                          {
                if (called_from_eval)
                        yyvsp[-3]->opcode = Op_K_return_from_eval;
@@ -3010,28 +3012,28 @@ regular_loop:
                if (yyvsp[0] != NULL)
                        yyval = list_append(yyval, yyvsp[0]);
          }
-#line 3014 "awkgram.c"
+#line 3016 "awkgram.c"
     break;
 
   case 65: /* non_compound_stmt: simple_stmt statement_term  */
-#line 1112 "awkgram.y"
+#line 1114 "awkgram.y"
           {
                if (yyvsp[0] != NULL)
                        yyval = list_append(yyvsp[-1], yyvsp[0]);
                else
                        yyval = yyvsp[-1];
          }
-#line 3025 "awkgram.c"
+#line 3027 "awkgram.c"
     break;
 
   case 66: /* $@4: %empty  */
-#line 1129 "awkgram.y"
+#line 1131 "awkgram.y"
                 { in_print = true; in_parens = 0; }
-#line 3031 "awkgram.c"
+#line 3033 "awkgram.c"
     break;
 
   case 67: /* simple_stmt: print $@4 print_expression_list output_redir  */
-#line 1130 "awkgram.y"
+#line 1132 "awkgram.y"
           {
                /*
                 * Optimization: plain `print' has no expression list, so $3 is 
null.
@@ -3132,17 +3134,17 @@ regular_print:
                        }
                }
          }
-#line 3136 "awkgram.c"
+#line 3138 "awkgram.c"
     break;
 
   case 68: /* $@5: %empty  */
-#line 1231 "awkgram.y"
+#line 1233 "awkgram.y"
                           { sub_counter = 0; }
-#line 3142 "awkgram.c"
+#line 3144 "awkgram.c"
     break;
 
   case 69: /* simple_stmt: LEX_DELETE NAME $@5 delete_subscript_list  */
-#line 1232 "awkgram.y"
+#line 1234 "awkgram.y"
           {
                char *arr = yyvsp[-2]->lextok;
                extern void print_instruction(INSTRUCTION *pc, Func_print 
print_func, FILE *fp, int in_dump);
@@ -3151,6 +3153,10 @@ regular_print:
 
                yyvsp[-2]->opcode = Op_push_array;
                yyvsp[-2]->memory = variable(yyvsp[-2]->source_line, arr, 
Node_var_new);
+               if (trace) {
+                       watched = yyvsp[-2]->memory;
+                       fprintf(stderr, "ref_count = %d\n", watched->valref);
+               }
                if (trace) print_instruction((INSTRUCTION *) yyvsp[-2],
                        fprintf, stderr, true);
                if (trace) fprintf(stderr, "\t-- memory = %#p\n", 
yyvsp[-2]->memory);
@@ -3181,11 +3187,11 @@ regular_print:
                        yyval = list_append(list_append(yyvsp[0], yyvsp[-2]), 
yyvsp[-3]);
                }
          }
-#line 3185 "awkgram.c"
+#line 3191 "awkgram.c"
     break;
 
   case 70: /* simple_stmt: LEX_DELETE '(' NAME ')'  */
-#line 1275 "awkgram.y"
+#line 1281 "awkgram.y"
           {
                static bool warned = false;
                char *arr = yyvsp[-1]->lextok;
@@ -3211,54 +3217,54 @@ regular_print:
                                fatal(_("`delete' is not allowed with 
FUNCTAB"));
                }
          }
-#line 3215 "awkgram.c"
+#line 3221 "awkgram.c"
     break;
 
   case 71: /* simple_stmt: exp  */
-#line 1301 "awkgram.y"
+#line 1307 "awkgram.y"
           {
                yyval = optimize_assignment(yyvsp[0]);
          }
-#line 3223 "awkgram.c"
+#line 3229 "awkgram.c"
     break;
 
   case 72: /* opt_simple_stmt: %empty  */
-#line 1308 "awkgram.y"
+#line 1314 "awkgram.y"
           { yyval = NULL; }
-#line 3229 "awkgram.c"
+#line 3235 "awkgram.c"
     break;
 
   case 73: /* opt_simple_stmt: simple_stmt  */
-#line 1310 "awkgram.y"
+#line 1316 "awkgram.y"
           { yyval = yyvsp[0]; }
-#line 3235 "awkgram.c"
+#line 3241 "awkgram.c"
     break;
 
   case 74: /* case_statements: %empty  */
-#line 1315 "awkgram.y"
+#line 1321 "awkgram.y"
           { yyval = NULL; }
-#line 3241 "awkgram.c"
+#line 3247 "awkgram.c"
     break;
 
   case 75: /* case_statements: case_statements case_statement  */
-#line 1317 "awkgram.y"
+#line 1323 "awkgram.y"
           {
                if (yyvsp[-1] == NULL)
                        yyval = list_create(yyvsp[0]);
                else
                        yyval = list_prepend(yyvsp[-1], yyvsp[0]);
          }
-#line 3252 "awkgram.c"
+#line 3258 "awkgram.c"
     break;
 
   case 76: /* case_statements: case_statements error  */
-#line 1324 "awkgram.y"
+#line 1330 "awkgram.y"
           { yyval = NULL; }
-#line 3258 "awkgram.c"
+#line 3264 "awkgram.c"
     break;
 
   case 77: /* case_statement: LEX_CASE case_value colon opt_nls statements  */
-#line 1329 "awkgram.y"
+#line 1335 "awkgram.y"
           {
                INSTRUCTION *casestmt = yyvsp[0];
                if (yyvsp[0] == NULL)
@@ -3271,11 +3277,11 @@ regular_print:
                bcfree(yyvsp[-2]);
                yyval = yyvsp[-4];
          }
-#line 3275 "awkgram.c"
+#line 3281 "awkgram.c"
     break;
 
   case 78: /* case_statement: LEX_DEFAULT colon opt_nls statements  */
-#line 1342 "awkgram.y"
+#line 1348 "awkgram.y"
           {
                INSTRUCTION *casestmt = yyvsp[0];
                if (yyvsp[0] == NULL)
@@ -3287,17 +3293,17 @@ regular_print:
                yyvsp[-3]->comment = yyvsp[-1];
                yyval = yyvsp[-3];
          }
-#line 3291 "awkgram.c"
+#line 3297 "awkgram.c"
     break;
 
   case 79: /* case_value: YNUMBER  */
-#line 1357 "awkgram.y"
+#line 1363 "awkgram.y"
           {    yyval = yyvsp[0]; }
-#line 3297 "awkgram.c"
+#line 3303 "awkgram.c"
     break;
 
   case 80: /* case_value: '-' YNUMBER  */
-#line 1359 "awkgram.y"
+#line 1365 "awkgram.y"
           {
                NODE *n = yyvsp[0]->memory;
                (void) force_number(n);
@@ -3305,28 +3311,28 @@ regular_print:
                bcfree(yyvsp[-1]);
                yyval = yyvsp[0];
          }
-#line 3309 "awkgram.c"
+#line 3315 "awkgram.c"
     break;
 
   case 81: /* case_value: '+' YNUMBER  */
-#line 1367 "awkgram.y"
+#line 1373 "awkgram.y"
           {
                NODE *n = yyvsp[0]->lasti->memory;
                bcfree(yyvsp[-1]);
                add_sign_to_num(n, '+');
                yyval = yyvsp[0];
          }
-#line 3320 "awkgram.c"
+#line 3326 "awkgram.c"
     break;
 
   case 82: /* case_value: YSTRING  */
-#line 1374 "awkgram.y"
+#line 1380 "awkgram.y"
           {    yyval = yyvsp[0]; }
-#line 3326 "awkgram.c"
+#line 3332 "awkgram.c"
     break;
 
   case 83: /* case_value: regexp  */
-#line 1376 "awkgram.y"
+#line 1382 "awkgram.y"
           {
                if (yyvsp[0]->memory->type == Node_regex)
                        yyvsp[0]->opcode = Op_push_re;
@@ -3334,57 +3340,57 @@ regular_print:
                        yyvsp[0]->opcode = Op_push;
                yyval = yyvsp[0];
          }
-#line 3338 "awkgram.c"
+#line 3344 "awkgram.c"
     break;
 
   case 84: /* case_value: typed_regexp  */
-#line 1384 "awkgram.y"
+#line 1390 "awkgram.y"
           {
                assert((yyvsp[0]->memory->flags & REGEX) == REGEX);
                yyvsp[0]->opcode = Op_push_re;
                yyval = yyvsp[0];
          }
-#line 3348 "awkgram.c"
+#line 3354 "awkgram.c"
     break;
 
   case 85: /* print: LEX_PRINT  */
-#line 1393 "awkgram.y"
+#line 1399 "awkgram.y"
           { yyval = yyvsp[0]; }
-#line 3354 "awkgram.c"
+#line 3360 "awkgram.c"
     break;
 
   case 86: /* print: LEX_PRINTF  */
-#line 1395 "awkgram.y"
+#line 1401 "awkgram.y"
           { yyval = yyvsp[0]; }
-#line 3360 "awkgram.c"
+#line 3366 "awkgram.c"
     break;
 
   case 88: /* print_expression_list: '(' expression_list r_paren  */
-#line 1405 "awkgram.y"
+#line 1411 "awkgram.y"
           {
                yyval = yyvsp[-1];
          }
-#line 3368 "awkgram.c"
+#line 3374 "awkgram.c"
     break;
 
   case 89: /* output_redir: %empty  */
-#line 1412 "awkgram.y"
+#line 1418 "awkgram.y"
           {
                in_print = false;
                in_parens = 0;
                yyval = NULL;
          }
-#line 3378 "awkgram.c"
+#line 3384 "awkgram.c"
     break;
 
   case 90: /* $@6: %empty  */
-#line 1417 "awkgram.y"
+#line 1423 "awkgram.y"
                  { in_print = false; in_parens = 0; }
-#line 3384 "awkgram.c"
+#line 3390 "awkgram.c"
     break;
 
   case 91: /* output_redir: IO_OUT $@6 common_exp  */
-#line 1418 "awkgram.y"
+#line 1424 "awkgram.y"
           {
                if (yyvsp[-2]->redir_type == redirect_twoway
                        && yyvsp[0]->lasti->opcode == Op_K_getline_redir
@@ -3394,22 +3400,22 @@ regular_print:
                        lintwarn(_("concatenation as I/O `>' redirection target 
is ambiguous"));
                yyval = list_prepend(yyvsp[0], yyvsp[-2]);
          }
-#line 3398 "awkgram.c"
+#line 3404 "awkgram.c"
     break;
 
   case 92: /* if_statement: LEX_IF '(' exp r_paren opt_nls statement  */
-#line 1431 "awkgram.y"
+#line 1437 "awkgram.y"
           {
                if (yyvsp[-1] != NULL)
                        yyvsp[-5]->comment = yyvsp[-1];
                add_lint(yyvsp[-3], LINT_assign_in_cond);
                yyval = mk_condition(yyvsp[-3], yyvsp[-5], yyvsp[0], NULL, 
NULL);
          }
-#line 3409 "awkgram.c"
+#line 3415 "awkgram.c"
     break;
 
   case 93: /* if_statement: LEX_IF '(' exp r_paren opt_nls statement LEX_ELSE 
opt_nls statement  */
-#line 1439 "awkgram.y"
+#line 1445 "awkgram.y"
           {
                if (yyvsp[-4] != NULL)
                        yyvsp[-8]->comment = yyvsp[-4];
@@ -3418,19 +3424,19 @@ regular_print:
                add_lint(yyvsp[-6], LINT_assign_in_cond);
                yyval = mk_condition(yyvsp[-6], yyvsp[-8], yyvsp[-3], 
yyvsp[-2], yyvsp[0]);
          }
-#line 3422 "awkgram.c"
+#line 3428 "awkgram.c"
     break;
 
   case 94: /* nls: NEWLINE  */
-#line 1451 "awkgram.y"
+#line 1457 "awkgram.y"
           {
                yyval = yyvsp[0];
          }
-#line 3430 "awkgram.c"
+#line 3436 "awkgram.c"
     break;
 
   case 95: /* nls: nls NEWLINE  */
-#line 1455 "awkgram.y"
+#line 1461 "awkgram.y"
           {
                if (yyvsp[-1] != NULL && yyvsp[0] != NULL) {
                        if (yyvsp[-1]->memory->comment_type == EOL_COMMENT) {
@@ -3448,59 +3454,59 @@ regular_print:
                } else
                        yyval = NULL;
          }
-#line 3452 "awkgram.c"
+#line 3458 "awkgram.c"
     break;
 
   case 96: /* opt_nls: %empty  */
-#line 1476 "awkgram.y"
+#line 1482 "awkgram.y"
           { yyval = NULL; }
-#line 3458 "awkgram.c"
+#line 3464 "awkgram.c"
     break;
 
   case 97: /* opt_nls: nls  */
-#line 1478 "awkgram.y"
+#line 1484 "awkgram.y"
           { yyval = yyvsp[0]; }
-#line 3464 "awkgram.c"
+#line 3470 "awkgram.c"
     break;
 
   case 98: /* input_redir: %empty  */
-#line 1483 "awkgram.y"
+#line 1489 "awkgram.y"
           { yyval = NULL; }
-#line 3470 "awkgram.c"
+#line 3476 "awkgram.c"
     break;
 
   case 99: /* input_redir: '<' simp_exp  */
-#line 1485 "awkgram.y"
+#line 1491 "awkgram.y"
           {
                bcfree(yyvsp[-1]);
                yyval = yyvsp[0];
          }
-#line 3479 "awkgram.c"
+#line 3485 "awkgram.c"
     break;
 
   case 100: /* opt_param_list: %empty  */
-#line 1493 "awkgram.y"
+#line 1499 "awkgram.y"
           { yyval = NULL; }
-#line 3485 "awkgram.c"
+#line 3491 "awkgram.c"
     break;
 
   case 101: /* opt_param_list: param_list  */
-#line 1495 "awkgram.y"
+#line 1501 "awkgram.y"
           { yyval = yyvsp[0]; }
-#line 3491 "awkgram.c"
+#line 3497 "awkgram.c"
     break;
 
   case 102: /* param_list: NAME  */
-#line 1500 "awkgram.y"
+#line 1506 "awkgram.y"
           {
                yyvsp[0]->param_count = 0;
                yyval = list_create(yyvsp[0]);
          }
-#line 3500 "awkgram.c"
+#line 3506 "awkgram.c"
     break;
 
   case 103: /* param_list: param_list comma NAME  */
-#line 1505 "awkgram.y"
+#line 1511 "awkgram.y"
           {
                if (yyvsp[-2] != NULL && yyvsp[0] != NULL) {
                        yyvsp[0]->param_count = yyvsp[-2]->lasti->param_count + 
1;
@@ -3517,76 +3523,76 @@ regular_print:
                } else
                        yyval = NULL;
          }
-#line 3521 "awkgram.c"
+#line 3527 "awkgram.c"
     break;
 
   case 104: /* param_list: error  */
-#line 1522 "awkgram.y"
+#line 1528 "awkgram.y"
           { yyval = NULL; }
-#line 3527 "awkgram.c"
+#line 3533 "awkgram.c"
     break;
 
   case 105: /* param_list: param_list error  */
-#line 1524 "awkgram.y"
+#line 1530 "awkgram.y"
           { yyval = yyvsp[-1]; }
-#line 3533 "awkgram.c"
+#line 3539 "awkgram.c"
     break;
 
   case 106: /* param_list: param_list comma error  */
-#line 1526 "awkgram.y"
+#line 1532 "awkgram.y"
           { yyval = yyvsp[-2]; }
-#line 3539 "awkgram.c"
+#line 3545 "awkgram.c"
     break;
 
   case 107: /* opt_exp: %empty  */
-#line 1532 "awkgram.y"
+#line 1538 "awkgram.y"
           { yyval = NULL; }
-#line 3545 "awkgram.c"
+#line 3551 "awkgram.c"
     break;
 
   case 108: /* opt_exp: exp  */
-#line 1534 "awkgram.y"
+#line 1540 "awkgram.y"
           { yyval = yyvsp[0]; }
-#line 3551 "awkgram.c"
+#line 3557 "awkgram.c"
     break;
 
   case 109: /* opt_expression_list: %empty  */
-#line 1539 "awkgram.y"
+#line 1545 "awkgram.y"
           { yyval = NULL; }
-#line 3557 "awkgram.c"
+#line 3563 "awkgram.c"
     break;
 
   case 110: /* opt_expression_list: expression_list  */
-#line 1541 "awkgram.y"
+#line 1547 "awkgram.y"
           { yyval = yyvsp[0]; }
-#line 3563 "awkgram.c"
+#line 3569 "awkgram.c"
     break;
 
   case 111: /* expression_list: exp  */
-#line 1546 "awkgram.y"
+#line 1552 "awkgram.y"
           {    yyval = mk_expression_list(NULL, yyvsp[0]); }
-#line 3569 "awkgram.c"
+#line 3575 "awkgram.c"
     break;
 
   case 112: /* expression_list: expression_list comma exp  */
-#line 1548 "awkgram.y"
+#line 1554 "awkgram.y"
           {
                if (yyvsp[-1] != NULL)
                        yyvsp[-2]->lasti->comment = yyvsp[-1];
                yyval = mk_expression_list(yyvsp[-2], yyvsp[0]);
                yyerrok;
          }
-#line 3580 "awkgram.c"
+#line 3586 "awkgram.c"
     break;
 
   case 113: /* expression_list: error  */
-#line 1555 "awkgram.y"
+#line 1561 "awkgram.y"
           { yyval = NULL; }
-#line 3586 "awkgram.c"
+#line 3592 "awkgram.c"
     break;
 
   case 114: /* expression_list: expression_list error  */
-#line 1557 "awkgram.y"
+#line 1563 "awkgram.y"
           {
                /*
                 * Returning the expression list instead of NULL lets
@@ -3594,66 +3600,66 @@ regular_print:
                 */
                yyval = yyvsp[-1];
          }
-#line 3598 "awkgram.c"
+#line 3604 "awkgram.c"
     break;
 
   case 115: /* expression_list: expression_list error exp  */
-#line 1565 "awkgram.y"
+#line 1571 "awkgram.y"
           {
                /* Ditto */
                yyval = mk_expression_list(yyvsp[-2], yyvsp[0]);
          }
-#line 3607 "awkgram.c"
+#line 3613 "awkgram.c"
     break;
 
   case 116: /* expression_list: expression_list comma error  */
-#line 1570 "awkgram.y"
+#line 1576 "awkgram.y"
           {
                /* Ditto */
                if (yyvsp[-1] != NULL)
                        yyvsp[-2]->lasti->comment = yyvsp[-1];
                yyval = yyvsp[-2];
          }
-#line 3618 "awkgram.c"
+#line 3624 "awkgram.c"
     break;
 
   case 117: /* opt_fcall_expression_list: %empty  */
-#line 1580 "awkgram.y"
+#line 1586 "awkgram.y"
           { yyval = NULL; }
-#line 3624 "awkgram.c"
+#line 3630 "awkgram.c"
     break;
 
   case 118: /* opt_fcall_expression_list: fcall_expression_list  */
-#line 1582 "awkgram.y"
+#line 1588 "awkgram.y"
           { yyval = yyvsp[0]; }
-#line 3630 "awkgram.c"
+#line 3636 "awkgram.c"
     break;
 
   case 119: /* fcall_expression_list: fcall_exp  */
-#line 1587 "awkgram.y"
+#line 1593 "awkgram.y"
           {    yyval = mk_expression_list(NULL, yyvsp[0]); }
-#line 3636 "awkgram.c"
+#line 3642 "awkgram.c"
     break;
 
   case 120: /* fcall_expression_list: fcall_expression_list comma fcall_exp  */
-#line 1589 "awkgram.y"
+#line 1595 "awkgram.y"
           {
                if (yyvsp[-1] != NULL)
                        yyvsp[-2]->lasti->comment = yyvsp[-1];
                yyval = mk_expression_list(yyvsp[-2], yyvsp[0]);
                yyerrok;
          }
-#line 3647 "awkgram.c"
+#line 3653 "awkgram.c"
     break;
 
   case 121: /* fcall_expression_list: error  */
-#line 1596 "awkgram.y"
+#line 1602 "awkgram.y"
           { yyval = NULL; }
-#line 3653 "awkgram.c"
+#line 3659 "awkgram.c"
     break;
 
   case 122: /* fcall_expression_list: fcall_expression_list error  */
-#line 1598 "awkgram.y"
+#line 1604 "awkgram.y"
           {
                /*
                 * Returning the expression list instead of NULL lets
@@ -3661,86 +3667,86 @@ regular_print:
                 */
                yyval = yyvsp[-1];
          }
-#line 3665 "awkgram.c"
+#line 3671 "awkgram.c"
     break;
 
   case 123: /* fcall_expression_list: fcall_expression_list error fcall_exp  */
-#line 1606 "awkgram.y"
+#line 1612 "awkgram.y"
           {
                /* Ditto */
                yyval = mk_expression_list(yyvsp[-2], yyvsp[0]);
          }
-#line 3674 "awkgram.c"
+#line 3680 "awkgram.c"
     break;
 
   case 124: /* fcall_expression_list: fcall_expression_list comma error  */
-#line 1611 "awkgram.y"
+#line 1617 "awkgram.y"
           {
                /* Ditto */
                if (yyvsp[-1] != NULL)
                        yyvsp[-2]->comment = yyvsp[-1];
                yyval = yyvsp[-2];
          }
-#line 3685 "awkgram.c"
+#line 3691 "awkgram.c"
     break;
 
   case 125: /* fcall_exp: exp  */
-#line 1620 "awkgram.y"
+#line 1626 "awkgram.y"
               { yyval = yyvsp[0]; }
-#line 3691 "awkgram.c"
+#line 3697 "awkgram.c"
     break;
 
   case 126: /* fcall_exp: typed_regexp  */
-#line 1621 "awkgram.y"
+#line 1627 "awkgram.y"
                        { yyval = list_create(yyvsp[0]); }
-#line 3697 "awkgram.c"
+#line 3703 "awkgram.c"
     break;
 
   case 127: /* opt_fcall_exp: %empty  */
-#line 1626 "awkgram.y"
+#line 1632 "awkgram.y"
           { yyval = NULL; }
-#line 3703 "awkgram.c"
+#line 3709 "awkgram.c"
     break;
 
   case 128: /* opt_fcall_exp: fcall_exp  */
-#line 1627 "awkgram.y"
+#line 1633 "awkgram.y"
                     { yyval = yyvsp[0]; }
-#line 3709 "awkgram.c"
+#line 3715 "awkgram.c"
     break;
 
   case 129: /* exp: variable assign_operator exp  */
-#line 1633 "awkgram.y"
+#line 1639 "awkgram.y"
           {
                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 3720 "awkgram.c"
+#line 3726 "awkgram.c"
     break;
 
   case 130: /* exp: variable ASSIGN typed_regexp  */
-#line 1640 "awkgram.y"
+#line 1646 "awkgram.y"
           {
                yyval = mk_assignment(yyvsp[-2], list_create(yyvsp[0]), 
yyvsp[-1]);
          }
-#line 3728 "awkgram.c"
+#line 3734 "awkgram.c"
     break;
 
   case 131: /* exp: exp LEX_AND exp  */
-#line 1644 "awkgram.y"
+#line 1650 "awkgram.y"
           {    yyval = mk_boolean(yyvsp[-2], yyvsp[0], yyvsp[-1]); }
-#line 3734 "awkgram.c"
+#line 3740 "awkgram.c"
     break;
 
   case 132: /* exp: exp LEX_OR exp  */
-#line 1646 "awkgram.y"
+#line 1652 "awkgram.y"
           {    yyval = mk_boolean(yyvsp[-2], yyvsp[0], yyvsp[-1]); }
-#line 3740 "awkgram.c"
+#line 3746 "awkgram.c"
     break;
 
   case 133: /* exp: exp MATCHOP typed_regexp  */
-#line 1648 "awkgram.y"
+#line 1654 "awkgram.y"
           {
                if (yyvsp[-2]->lasti->opcode == Op_match_rec)
                        warning_ln(yyvsp[-1]->source_line,
@@ -3753,11 +3759,11 @@ regular_print:
                bcfree(yyvsp[0]);
                yyval = list_append(yyvsp[-2], yyvsp[-1]);
          }
-#line 3757 "awkgram.c"
+#line 3763 "awkgram.c"
     break;
 
   case 134: /* exp: exp MATCHOP exp  */
-#line 1661 "awkgram.y"
+#line 1667 "awkgram.y"
           {
                if (yyvsp[-2]->lasti->opcode == Op_match_rec)
                        warning_ln(yyvsp[-1]->source_line,
@@ -3774,11 +3780,11 @@ regular_print:
                        yyval = list_append(list_merge(yyvsp[-2], yyvsp[0]), 
yyvsp[-1]);
                }
          }
-#line 3778 "awkgram.c"
+#line 3784 "awkgram.c"
     break;
 
   case 135: /* exp: exp LEX_IN simple_variable  */
-#line 1678 "awkgram.y"
+#line 1684 "awkgram.y"
           {
                if (do_lint_old)
                        lintwarn_ln(yyvsp[-1]->source_line,
@@ -3788,91 +3794,91 @@ regular_print:
                yyvsp[-1]->expr_count = 1;
                yyval = list_append(list_merge(yyvsp[-2], yyvsp[0]), yyvsp[-1]);
          }
-#line 3792 "awkgram.c"
+#line 3798 "awkgram.c"
     break;
 
   case 136: /* exp: exp a_relop exp  */
-#line 1688 "awkgram.y"
+#line 1694 "awkgram.y"
           {
                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 3803 "awkgram.c"
+#line 3809 "awkgram.c"
     break;
 
   case 137: /* exp: exp '?' exp ':' exp  */
-#line 1695 "awkgram.y"
+#line 1701 "awkgram.y"
           { yyval = mk_condition(yyvsp[-4], yyvsp[-3], yyvsp[-2], yyvsp[-1], 
yyvsp[0]); }
-#line 3809 "awkgram.c"
+#line 3815 "awkgram.c"
     break;
 
   case 138: /* exp: common_exp  */
-#line 1697 "awkgram.y"
+#line 1703 "awkgram.y"
           { yyval = yyvsp[0]; }
-#line 3815 "awkgram.c"
+#line 3821 "awkgram.c"
     break;
 
   case 139: /* assign_operator: ASSIGN  */
-#line 1702 "awkgram.y"
+#line 1708 "awkgram.y"
           { yyval = yyvsp[0]; }
-#line 3821 "awkgram.c"
+#line 3827 "awkgram.c"
     break;
 
   case 140: /* assign_operator: ASSIGNOP  */
-#line 1704 "awkgram.y"
+#line 1710 "awkgram.y"
           { yyval = yyvsp[0]; }
-#line 3827 "awkgram.c"
+#line 3833 "awkgram.c"
     break;
 
   case 141: /* assign_operator: SLASH_BEFORE_EQUAL ASSIGN  */
-#line 1706 "awkgram.y"
+#line 1712 "awkgram.y"
           {
                yyvsp[0]->opcode = Op_assign_quotient;
                yyval = yyvsp[0];
          }
-#line 3836 "awkgram.c"
+#line 3842 "awkgram.c"
     break;
 
   case 142: /* relop_or_less: RELOP  */
-#line 1714 "awkgram.y"
+#line 1720 "awkgram.y"
           { yyval = yyvsp[0]; }
-#line 3842 "awkgram.c"
+#line 3848 "awkgram.c"
     break;
 
   case 143: /* relop_or_less: '<'  */
-#line 1716 "awkgram.y"
+#line 1722 "awkgram.y"
           { yyval = yyvsp[0]; }
-#line 3848 "awkgram.c"
+#line 3854 "awkgram.c"
     break;
 
   case 144: /* a_relop: relop_or_less  */
-#line 1721 "awkgram.y"
+#line 1727 "awkgram.y"
           { yyval = yyvsp[0]; }
-#line 3854 "awkgram.c"
+#line 3860 "awkgram.c"
     break;
 
   case 145: /* a_relop: '>'  */
-#line 1723 "awkgram.y"
+#line 1729 "awkgram.y"
           { yyval = yyvsp[0]; }
-#line 3860 "awkgram.c"
+#line 3866 "awkgram.c"
     break;
 
   case 146: /* common_exp: simp_exp  */
-#line 1728 "awkgram.y"
+#line 1734 "awkgram.y"
           { yyval = yyvsp[0]; }
-#line 3866 "awkgram.c"
+#line 3872 "awkgram.c"
     break;
 
   case 147: /* common_exp: simp_exp_nc  */
-#line 1730 "awkgram.y"
+#line 1736 "awkgram.y"
           { yyval = yyvsp[0]; }
-#line 3872 "awkgram.c"
+#line 3878 "awkgram.c"
     break;
 
   case 148: /* common_exp: common_exp simp_exp  */
-#line 1732 "awkgram.y"
+#line 1738 "awkgram.y"
           {
                int count = 2;
                bool is_simple_var = false;
@@ -3926,47 +3932,47 @@ regular_print:
                                max_args = count;
                }
          }
-#line 3930 "awkgram.c"
+#line 3936 "awkgram.c"
     break;
 
   case 150: /* simp_exp: simp_exp '^' simp_exp  */
-#line 1791 "awkgram.y"
+#line 1797 "awkgram.y"
           { yyval = mk_binary(yyvsp[-2], yyvsp[0], yyvsp[-1]); }
-#line 3936 "awkgram.c"
+#line 3942 "awkgram.c"
     break;
 
   case 151: /* simp_exp: simp_exp '*' simp_exp  */
-#line 1793 "awkgram.y"
+#line 1799 "awkgram.y"
           { yyval = mk_binary(yyvsp[-2], yyvsp[0], yyvsp[-1]); }
-#line 3942 "awkgram.c"
+#line 3948 "awkgram.c"
     break;
 
   case 152: /* simp_exp: simp_exp '/' simp_exp  */
-#line 1795 "awkgram.y"
+#line 1801 "awkgram.y"
           { yyval = mk_binary(yyvsp[-2], yyvsp[0], yyvsp[-1]); }
-#line 3948 "awkgram.c"
+#line 3954 "awkgram.c"
     break;
 
   case 153: /* simp_exp: simp_exp '%' simp_exp  */
-#line 1797 "awkgram.y"
+#line 1803 "awkgram.y"
           { yyval = mk_binary(yyvsp[-2], yyvsp[0], yyvsp[-1]); }
-#line 3954 "awkgram.c"
+#line 3960 "awkgram.c"
     break;
 
   case 154: /* simp_exp: simp_exp '+' simp_exp  */
-#line 1799 "awkgram.y"
+#line 1805 "awkgram.y"
           { yyval = mk_binary(yyvsp[-2], yyvsp[0], yyvsp[-1]); }
-#line 3960 "awkgram.c"
+#line 3966 "awkgram.c"
     break;
 
   case 155: /* simp_exp: simp_exp '-' simp_exp  */
-#line 1801 "awkgram.y"
+#line 1807 "awkgram.y"
           { yyval = mk_binary(yyvsp[-2], yyvsp[0], yyvsp[-1]); }
-#line 3966 "awkgram.c"
+#line 3972 "awkgram.c"
     break;
 
   case 156: /* simp_exp: LEX_GETLINE opt_variable input_redir  */
-#line 1803 "awkgram.y"
+#line 1809 "awkgram.y"
           {
                /*
                 * In BEGINFILE/ENDFILE, allow `getline [var] < file'
@@ -3980,29 +3986,29 @@ regular_print:
                                _("non-redirected `getline' undefined inside 
END action"));
                yyval = mk_getline(yyvsp[-2], yyvsp[-1], yyvsp[0], 
redirect_input);
          }
-#line 3984 "awkgram.c"
+#line 3990 "awkgram.c"
     break;
 
   case 157: /* simp_exp: variable INCREMENT  */
-#line 1817 "awkgram.y"
+#line 1823 "awkgram.y"
           {
                yyvsp[0]->opcode = Op_postincrement;
                yyval = mk_assignment(yyvsp[-1], NULL, yyvsp[0]);
          }
-#line 3993 "awkgram.c"
+#line 3999 "awkgram.c"
     break;
 
   case 158: /* simp_exp: variable DECREMENT  */
-#line 1822 "awkgram.y"
+#line 1828 "awkgram.y"
           {
                yyvsp[0]->opcode = Op_postdecrement;
                yyval = mk_assignment(yyvsp[-1], NULL, yyvsp[0]);
          }
-#line 4002 "awkgram.c"
+#line 4008 "awkgram.c"
     break;
 
   case 159: /* simp_exp: '(' expression_list r_paren LEX_IN simple_variable  */
-#line 1827 "awkgram.y"
+#line 1833 "awkgram.y"
           {
                if (do_lint_old) {
                    /* first one is warning so that second one comes out if 
warnings are fatal */
@@ -4023,64 +4029,64 @@ regular_print:
                        yyval = list_append(list_merge(t, yyvsp[0]), yyvsp[-1]);
                }
          }
-#line 4027 "awkgram.c"
+#line 4033 "awkgram.c"
     break;
 
   case 160: /* simp_exp_nc: common_exp IO_IN LEX_GETLINE opt_variable  */
-#line 1853 "awkgram.y"
+#line 1859 "awkgram.y"
                 {
                  yyval = mk_getline(yyvsp[-1], yyvsp[0], yyvsp[-3], 
yyvsp[-2]->redir_type);
                  bcfree(yyvsp[-2]);
                }
-#line 4036 "awkgram.c"
+#line 4042 "awkgram.c"
     break;
 
   case 161: /* simp_exp_nc: simp_exp_nc '^' simp_exp  */
-#line 1859 "awkgram.y"
+#line 1865 "awkgram.y"
           { yyval = mk_binary(yyvsp[-2], yyvsp[0], yyvsp[-1]); }
-#line 4042 "awkgram.c"
+#line 4048 "awkgram.c"
     break;
 
   case 162: /* simp_exp_nc: simp_exp_nc '*' simp_exp  */
-#line 1861 "awkgram.y"
+#line 1867 "awkgram.y"
           { yyval = mk_binary(yyvsp[-2], yyvsp[0], yyvsp[-1]); }
-#line 4048 "awkgram.c"
+#line 4054 "awkgram.c"
     break;
 
   case 163: /* simp_exp_nc: simp_exp_nc '/' simp_exp  */
-#line 1863 "awkgram.y"
+#line 1869 "awkgram.y"
           { yyval = mk_binary(yyvsp[-2], yyvsp[0], yyvsp[-1]); }
-#line 4054 "awkgram.c"
+#line 4060 "awkgram.c"
     break;
 
   case 164: /* simp_exp_nc: simp_exp_nc '%' simp_exp  */
-#line 1865 "awkgram.y"
+#line 1871 "awkgram.y"
           { yyval = mk_binary(yyvsp[-2], yyvsp[0], yyvsp[-1]); }
-#line 4060 "awkgram.c"
+#line 4066 "awkgram.c"
     break;
 
   case 165: /* simp_exp_nc: simp_exp_nc '+' simp_exp  */
-#line 1867 "awkgram.y"
+#line 1873 "awkgram.y"
           { yyval = mk_binary(yyvsp[-2], yyvsp[0], yyvsp[-1]); }
-#line 4066 "awkgram.c"
+#line 4072 "awkgram.c"
     break;
 
   case 166: /* simp_exp_nc: simp_exp_nc '-' simp_exp  */
-#line 1869 "awkgram.y"
+#line 1875 "awkgram.y"
           { yyval = mk_binary(yyvsp[-2], yyvsp[0], yyvsp[-1]); }
-#line 4072 "awkgram.c"
+#line 4078 "awkgram.c"
     break;
 
   case 167: /* non_post_simp_exp: regexp  */
-#line 1874 "awkgram.y"
+#line 1880 "awkgram.y"
           {
                yyval = list_create(yyvsp[0]);
          }
-#line 4080 "awkgram.c"
+#line 4086 "awkgram.c"
     break;
 
   case 168: /* non_post_simp_exp: '!' simp_exp  */
-#line 1878 "awkgram.y"
+#line 1884 "awkgram.y"
           {
                if (yyvsp[0]->opcode == Op_match_rec) {
                        yyvsp[0]->opcode = Op_nomatch;
@@ -4112,11 +4118,11 @@ regular_print:
                        }
                }
           }
-#line 4116 "awkgram.c"
+#line 4122 "awkgram.c"
     break;
 
   case 169: /* non_post_simp_exp: '(' exp r_paren  */
-#line 1910 "awkgram.y"
+#line 1916 "awkgram.y"
           {
                // Always include. Allows us to lint warn on
                // print "foo" > "bar" 1
@@ -4124,31 +4130,31 @@ regular_print:
                // print "foo" > ("bar" 1)
                yyval = list_append(yyvsp[-1], bcalloc(Op_parens, 1, 
sourceline));
          }
-#line 4128 "awkgram.c"
+#line 4134 "awkgram.c"
     break;
 
   case 170: /* non_post_simp_exp: LEX_BUILTIN '(' opt_fcall_expression_list 
r_paren  */
-#line 1918 "awkgram.y"
+#line 1924 "awkgram.y"
           {
                yyval = snode(yyvsp[-1], yyvsp[-3]);
                if (yyval == NULL)
                        YYABORT;
          }
-#line 4138 "awkgram.c"
+#line 4144 "awkgram.c"
     break;
 
   case 171: /* non_post_simp_exp: LEX_LENGTH '(' opt_fcall_expression_list 
r_paren  */
-#line 1924 "awkgram.y"
+#line 1930 "awkgram.y"
           {
                yyval = snode(yyvsp[-1], yyvsp[-3]);
                if (yyval == NULL)
                        YYABORT;
          }
-#line 4148 "awkgram.c"
+#line 4154 "awkgram.c"
     break;
 
   case 172: /* non_post_simp_exp: LEX_LENGTH  */
-#line 1930 "awkgram.y"
+#line 1936 "awkgram.y"
           {
                static bool warned = false;
 
@@ -4161,45 +4167,45 @@ regular_print:
                if (yyval == NULL)
                        YYABORT;
          }
-#line 4165 "awkgram.c"
+#line 4171 "awkgram.c"
     break;
 
   case 175: /* non_post_simp_exp: INCREMENT variable  */
-#line 1945 "awkgram.y"
+#line 1951 "awkgram.y"
           {
                yyvsp[-1]->opcode = Op_preincrement;
                yyval = mk_assignment(yyvsp[0], NULL, yyvsp[-1]);
          }
-#line 4174 "awkgram.c"
+#line 4180 "awkgram.c"
     break;
 
   case 176: /* non_post_simp_exp: DECREMENT variable  */
-#line 1950 "awkgram.y"
+#line 1956 "awkgram.y"
           {
                yyvsp[-1]->opcode = Op_predecrement;
                yyval = mk_assignment(yyvsp[0], NULL, yyvsp[-1]);
          }
-#line 4183 "awkgram.c"
+#line 4189 "awkgram.c"
     break;
 
   case 177: /* non_post_simp_exp: YNUMBER  */
-#line 1955 "awkgram.y"
+#line 1961 "awkgram.y"
           {
                yyval = list_create(yyvsp[0]);
          }
-#line 4191 "awkgram.c"
+#line 4197 "awkgram.c"
     break;
 
   case 178: /* non_post_simp_exp: YSTRING  */
-#line 1959 "awkgram.y"
+#line 1965 "awkgram.y"
           {
                yyval = list_create(yyvsp[0]);
          }
-#line 4199 "awkgram.c"
+#line 4205 "awkgram.c"
     break;
 
   case 179: /* non_post_simp_exp: '-' simp_exp  */
-#line 1963 "awkgram.y"
+#line 1969 "awkgram.y"
           {
                if (yyvsp[0]->lasti->opcode == Op_push_i
                        && (yyvsp[0]->lasti->memory->flags & STRING) == 0
@@ -4214,11 +4220,11 @@ regular_print:
                        yyval = list_append(yyvsp[0], yyvsp[-1]);
                }
          }
-#line 4218 "awkgram.c"
+#line 4224 "awkgram.c"
     break;
 
   case 180: /* non_post_simp_exp: '+' simp_exp  */
-#line 1978 "awkgram.y"
+#line 1984 "awkgram.y"
           {
                if (yyvsp[0]->lasti->opcode == Op_push_i
                        && (yyvsp[0]->lasti->memory->flags & STRING) == 0
@@ -4236,20 +4242,20 @@ regular_print:
                        yyval = list_append(yyvsp[0], yyvsp[-1]);
                }
          }
-#line 4240 "awkgram.c"
+#line 4246 "awkgram.c"
     break;
 
   case 181: /* func_call: direct_func_call  */
-#line 1999 "awkgram.y"
+#line 2005 "awkgram.y"
           {
                func_use(yyvsp[0]->lasti->func_name, FUNC_USE);
                yyval = yyvsp[0];
          }
-#line 4249 "awkgram.c"
+#line 4255 "awkgram.c"
     break;
 
   case 182: /* func_call: '@' direct_func_call  */
-#line 2004 "awkgram.y"
+#line 2010 "awkgram.y"
           {
                /* indirect function call */
                INSTRUCTION *f, *t;
@@ -4283,11 +4289,11 @@ regular_print:
                yyval = list_prepend(yyvsp[0], t);
                at_seen = false;
          }
-#line 4287 "awkgram.c"
+#line 4293 "awkgram.c"
     break;
 
   case 183: /* direct_func_call: FUNC_CALL '(' opt_fcall_expression_list 
r_paren  */
-#line 2041 "awkgram.y"
+#line 2047 "awkgram.y"
           {
                NODE *n;
                char *name = yyvsp[-3]->func_name;
@@ -4320,49 +4326,49 @@ regular_print:
                        yyval = list_append(t, yyvsp[-3]);
                }
          }
-#line 4324 "awkgram.c"
+#line 4330 "awkgram.c"
     break;
 
   case 184: /* opt_variable: %empty  */
-#line 2077 "awkgram.y"
+#line 2083 "awkgram.y"
           { yyval = NULL; }
-#line 4330 "awkgram.c"
+#line 4336 "awkgram.c"
     break;
 
   case 185: /* opt_variable: variable  */
-#line 2079 "awkgram.y"
+#line 2085 "awkgram.y"
           { yyval = yyvsp[0]; }
-#line 4336 "awkgram.c"
+#line 4342 "awkgram.c"
     break;
 
   case 186: /* delete_subscript_list: %empty  */
-#line 2084 "awkgram.y"
+#line 2090 "awkgram.y"
           { yyval = NULL; }
-#line 4342 "awkgram.c"
+#line 4348 "awkgram.c"
     break;
 
   case 187: /* delete_subscript_list: delete_subscript SUBSCRIPT  */
-#line 2086 "awkgram.y"
+#line 2092 "awkgram.y"
           { yyval = yyvsp[-1]; }
-#line 4348 "awkgram.c"
+#line 4354 "awkgram.c"
     break;
 
   case 188: /* delete_subscript: delete_exp_list  */
-#line 2091 "awkgram.y"
+#line 2097 "awkgram.y"
           {    yyval = yyvsp[0]; }
-#line 4354 "awkgram.c"
+#line 4360 "awkgram.c"
     break;
 
   case 189: /* delete_subscript: delete_subscript delete_exp_list  */
-#line 2093 "awkgram.y"
+#line 2099 "awkgram.y"
           {
                yyval = list_merge(yyvsp[-1], yyvsp[0]);
          }
-#line 4362 "awkgram.c"
+#line 4368 "awkgram.c"
     break;
 
   case 190: /* delete_exp_list: bracketed_exp_list  */
-#line 2100 "awkgram.y"
+#line 2106 "awkgram.y"
           {
                INSTRUCTION *ip = yyvsp[0]->lasti;
                int count = ip->sub_count;      /* # of SUBSEP-seperated 
expressions */
@@ -4376,11 +4382,11 @@ regular_print:
                sub_counter++;  /* count # of dimensions */
                yyval = yyvsp[0];
          }
-#line 4380 "awkgram.c"
+#line 4386 "awkgram.c"
     break;
 
   case 191: /* bracketed_exp_list: '[' expression_list ']'  */
-#line 2117 "awkgram.y"
+#line 2123 "awkgram.y"
           {
                INSTRUCTION *t = yyvsp[-1];
                if (yyvsp[-1] == NULL) {
@@ -4394,41 +4400,41 @@ regular_print:
                        yyvsp[0]->sub_count = count_expressions(&t, false);
                yyval = list_append(t, yyvsp[0]);
          }
-#line 4398 "awkgram.c"
+#line 4404 "awkgram.c"
     break;
 
   case 192: /* subscript: bracketed_exp_list  */
-#line 2134 "awkgram.y"
+#line 2140 "awkgram.y"
           {    yyval = yyvsp[0]; }
-#line 4404 "awkgram.c"
+#line 4410 "awkgram.c"
     break;
 
   case 193: /* subscript: subscript bracketed_exp_list  */
-#line 2136 "awkgram.y"
+#line 2142 "awkgram.y"
           {
                yyval = list_merge(yyvsp[-1], yyvsp[0]);
          }
-#line 4412 "awkgram.c"
+#line 4418 "awkgram.c"
     break;
 
   case 194: /* subscript_list: subscript SUBSCRIPT  */
-#line 2143 "awkgram.y"
+#line 2149 "awkgram.y"
           { yyval = yyvsp[-1]; }
-#line 4418 "awkgram.c"
+#line 4424 "awkgram.c"
     break;
 
   case 195: /* simple_variable: NAME  */
-#line 2148 "awkgram.y"
+#line 2154 "awkgram.y"
           {
                yyvsp[0]->opcode = Op_push;
                yyvsp[0]->memory = variable(yyvsp[0]->source_line, 
yyvsp[0]->lextok, Node_var_new);
                yyval = list_create(yyvsp[0]);
          }
-#line 4428 "awkgram.c"
+#line 4434 "awkgram.c"
     break;
 
   case 196: /* simple_variable: NAME subscript_list  */
-#line 2154 "awkgram.y"
+#line 2160 "awkgram.y"
           {
                char *arr = yyvsp[-1]->lextok;
 
@@ -4436,11 +4442,11 @@ regular_print:
                yyvsp[-1]->opcode = Op_push_array;
                yyval = list_prepend(yyvsp[0], yyvsp[-1]);
          }
-#line 4440 "awkgram.c"
+#line 4446 "awkgram.c"
     break;
 
   case 197: /* variable: simple_variable  */
-#line 2165 "awkgram.y"
+#line 2171 "awkgram.y"
           {
                INSTRUCTION *ip = yyvsp[0]->nexti;
                if (ip->opcode == Op_push
@@ -4452,85 +4458,85 @@ regular_print:
                } else
                        yyval = yyvsp[0];
          }
-#line 4456 "awkgram.c"
+#line 4462 "awkgram.c"
     break;
 
   case 198: /* variable: '$' non_post_simp_exp opt_incdec  */
-#line 2177 "awkgram.y"
+#line 2183 "awkgram.y"
           {
                yyval = list_append(yyvsp[-1], yyvsp[-2]);
                if (yyvsp[0] != NULL)
                        mk_assignment(yyvsp[-1], NULL, yyvsp[0]);
          }
-#line 4466 "awkgram.c"
+#line 4472 "awkgram.c"
     break;
 
   case 199: /* opt_incdec: INCREMENT  */
-#line 2186 "awkgram.y"
+#line 2192 "awkgram.y"
           {
                yyvsp[0]->opcode = Op_postincrement;
          }
-#line 4474 "awkgram.c"
+#line 4480 "awkgram.c"
     break;
 
   case 200: /* opt_incdec: DECREMENT  */
-#line 2190 "awkgram.y"
+#line 2196 "awkgram.y"
           {
                yyvsp[0]->opcode = Op_postdecrement;
          }
-#line 4482 "awkgram.c"
+#line 4488 "awkgram.c"
     break;
 
   case 201: /* opt_incdec: %empty  */
-#line 2194 "awkgram.y"
+#line 2200 "awkgram.y"
           { yyval = NULL; }
-#line 4488 "awkgram.c"
+#line 4494 "awkgram.c"
     break;
 
   case 202: /* l_brace: '{' opt_nls  */
-#line 2198 "awkgram.y"
+#line 2204 "awkgram.y"
                       { yyval = yyvsp[0]; }
-#line 4494 "awkgram.c"
+#line 4500 "awkgram.c"
     break;
 
   case 203: /* r_brace: '}' opt_nls  */
-#line 2202 "awkgram.y"
+#line 2208 "awkgram.y"
                         { yyval = yyvsp[0]; yyerrok; }
-#line 4500 "awkgram.c"
+#line 4506 "awkgram.c"
     break;
 
   case 204: /* r_paren: ')'  */
-#line 2206 "awkgram.y"
+#line 2212 "awkgram.y"
               { yyerrok; }
-#line 4506 "awkgram.c"
+#line 4512 "awkgram.c"
     break;
 
   case 205: /* opt_semi: %empty  */
-#line 2211 "awkgram.y"
+#line 2217 "awkgram.y"
           { yyval = NULL; }
-#line 4512 "awkgram.c"
+#line 4518 "awkgram.c"
     break;
 
   case 207: /* semi: ';'  */
-#line 2216 "awkgram.y"
+#line 2222 "awkgram.y"
                 { yyerrok; }
-#line 4518 "awkgram.c"
+#line 4524 "awkgram.c"
     break;
 
   case 208: /* colon: ':'  */
-#line 2220 "awkgram.y"
+#line 2226 "awkgram.y"
                 { yyval = yyvsp[0]; yyerrok; }
-#line 4524 "awkgram.c"
+#line 4530 "awkgram.c"
     break;
 
   case 209: /* comma: ',' opt_nls  */
-#line 2224 "awkgram.y"
+#line 2230 "awkgram.y"
                         { yyval = yyvsp[0]; yyerrok; }
-#line 4530 "awkgram.c"
+#line 4536 "awkgram.c"
     break;
 
 
-#line 4534 "awkgram.c"
+#line 4540 "awkgram.c"
 
       default: break;
     }
@@ -4724,7 +4730,7 @@ yyreturn:
   return yyresult;
 }
 
-#line 2226 "awkgram.y"
+#line 2232 "awkgram.y"
 
 
 struct token {
diff --git a/awkgram.y b/awkgram.y
index 087a586..7618f22 100644
--- a/awkgram.y
+++ b/awkgram.y
@@ -34,6 +34,8 @@
 #define signed /**/
 #endif
 
+NODE *watched = 0;
+
 static void yyerror(const char *m, ...) ATTRIBUTE_PRINTF_1;
 static void error_ln(int line, const char *m, ...) ATTRIBUTE_PRINTF_2;
 static void lintwarn_ln(int line, const char *m, ...) ATTRIBUTE_PRINTF_2;
@@ -1237,6 +1239,10 @@ regular_print:
 
                $2->opcode = Op_push_array;
                $2->memory = variable($2->source_line, arr, Node_var_new);
+               if (trace) {
+                       watched = $2->memory;
+                       fprintf(stderr, "ref_count = %d\n", watched->valref);
+               }
                if (trace) print_instruction((INSTRUCTION *) $2,
                        fprintf, stderr, true);
                if (trace) fprintf(stderr, "\t-- memory = %#p\n", $2->memory);
diff --git a/profile.c b/profile.c
index 849924e..007098b 100644
--- a/profile.c
+++ b/profile.c
@@ -351,6 +351,8 @@ pprint(INSTRUCTION *startp, INSTRUCTION *endp, int flags)
                case Op_push_lhs:
                case Op_push_param:
                case Op_push_array:
+                       m = pc->memory;
+                       fprintf(stderr, "in profile.c, ref_count = %d\n", 
pc->memory->valref);
                case Op_push:
                case Op_push_arg:
                case Op_push_arg_untyped:
@@ -376,6 +378,8 @@ pprint(INSTRUCTION *startp, INSTRUCTION *endp, int flags)
                        default:
                                fprintf(stderr, "Got unexpected type %s, memory 
= %#p\n", nodetype2str(m->type), pc->memory);
                                print_instruction(pc, fprintf, stderr, true);
+                               fprintf(stderr, "in profile.c, ref_count = 
%d\n", pc->memory->valref);
+
                                cant_happen();
                        }
 

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

Summary of changes:
 awk.h     |   2 +
 awkgram.c | 850 +++++++++++++++++++++++++++++++-------------------------------
 awkgram.y |   6 +
 profile.c |   4 +
 4 files changed, 440 insertions(+), 422 deletions(-)


hooks/post-receive
-- 
gawk



reply via email to

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