gawk-diffs
[Top][All Lists]
Advanced

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

[gawk-diffs] [SCM] gawk branch, feature/fix-ns-memleak, updated. gawk-4.


From: Arnold Robbins
Subject: [gawk-diffs] [SCM] gawk branch, feature/fix-ns-memleak, updated. gawk-4.1.0-3618-gfda51ca
Date: Fri, 25 Jan 2019 04:49:29 -0500 (EST)

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, feature/fix-ns-memleak has been updated
       via  fda51ca6fd0d9ad93bead9887ded0b07c90680fb (commit)
       via  eceb548b02f0d72ca6a6e9a68bfd615ac9549a64 (commit)
      from  378de9aa9e73d44d0172947c38be67c0bd78a0b0 (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=fda51ca6fd0d9ad93bead9887ded0b07c90680fb

commit fda51ca6fd0d9ad93bead9887ded0b07c90680fb
Author: Arnold D. Robbins <address@hidden>
Date:   Fri Jan 25 11:48:57 2019 +0200

    Update doc with caution about namespaces.

diff --git a/doc/ChangeLog b/doc/ChangeLog
index d285f88..66a0b54 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,8 @@
+2019-01-25         Arnold D. Robbins     <address@hidden>
+
+       * gawktexi.in (Namespaces): Add a cautionary note that the feature
+       is new and may still have dark corners and/or bugs.
+
 2019-01-18         Arnold D. Robbins     <address@hidden>
 
        * gawktexi.in: Finish up indexing changes.
diff --git a/doc/gawk.info b/doc/gawk.info
index 75cd6cb..4168fc6 100644
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@ -22734,6 +22734,11 @@ File: gawk.info,  Node: Namespaces,  Next: Arbitrary 
Precision Arithmetic,  Prev
 
 This major node describes a feature that is specific to 'gawk'.
 
+     CAUTION: This feature described in this chapter is new.  It is
+     entirely possible, and even likely, that there are dark corners (if
+     not bugs) still lurking within the implementation.  If you find any
+     such, please report them (*Note Bugs::).
+
 * Menu:
 
 * Global Namespace::            The global namespace in standard 'awk'.
@@ -37168,191 +37173,191 @@ Node: Readline Support916693
 Node: Limitations917589
 Node: Debugging Summary919698
 Node: Namespaces920977
-Node: Global Namespace921795
-Node: Qualified Names923193
-Node: Default Namespace924192
-Node: Changing The Namespace924933
-Node: Naming Rules926547
-Node: Internal Name Management928395
-Node: Namespace Example929437
-Node: Namespace And Features931999
-Node: Namespace Summary933434
-Node: Arbitrary Precision Arithmetic934911
-Node: Computer Arithmetic936398
-Ref: table-numeric-ranges940164
-Ref: table-floating-point-ranges940657
-Ref: Computer Arithmetic-Footnote-1941315
-Node: Math Definitions941372
-Ref: table-ieee-formats944688
-Ref: Math Definitions-Footnote-1945291
-Node: MPFR features945396
-Node: FP Math Caution947114
-Ref: FP Math Caution-Footnote-1948186
-Node: Inexactness of computations948555
-Node: Inexact representation949515
-Node: Comparing FP Values950875
-Node: Errors accumulate952116
-Node: Getting Accuracy953549
-Node: Try To Round956259
-Node: Setting precision957158
-Ref: table-predefined-precision-strings957855
-Node: Setting the rounding mode959685
-Ref: table-gawk-rounding-modes960059
-Ref: Setting the rounding mode-Footnote-1963990
-Node: Arbitrary Precision Integers964169
-Ref: Arbitrary Precision Integers-Footnote-1967344
-Node: Checking for MPFR967493
-Node: POSIX Floating Point Problems968967
-Ref: POSIX Floating Point Problems-Footnote-1973252
-Node: Floating point summary973290
-Node: Dynamic Extensions975480
-Node: Extension Intro977033
-Node: Plugin License978299
-Node: Extension Mechanism Outline979096
-Ref: figure-load-extension979535
-Ref: figure-register-new-function981100
-Ref: figure-call-new-function982192
-Node: Extension API Description984254
-Node: Extension API Functions Introduction985896
-Ref: table-api-std-headers987732
-Node: General Data Types991597
-Ref: General Data Types-Footnote-1999958
-Node: Memory Allocation Functions1000257
-Ref: Memory Allocation Functions-Footnote-11004467
-Node: Constructor Functions1004566
-Node: Registration Functions1008152
-Node: Extension Functions1008837
-Node: Exit Callback Functions1014159
-Node: Extension Version String1015409
-Node: Input Parsers1016072
-Node: Output Wrappers1028793
-Node: Two-way processors1033305
-Node: Printing Messages1035570
-Ref: Printing Messages-Footnote-11036741
-Node: Updating ERRNO1036894
-Node: Requesting Values1037633
-Ref: table-value-types-returned1038370
-Node: Accessing Parameters1039306
-Node: Symbol Table Access1040541
-Node: Symbol table by name1041053
-Ref: Symbol table by name-Footnote-11044077
-Node: Symbol table by cookie1044205
-Ref: Symbol table by cookie-Footnote-11048390
-Node: Cached values1048454
-Ref: Cached values-Footnote-11051990
-Node: Array Manipulation1052143
-Ref: Array Manipulation-Footnote-11053234
-Node: Array Data Types1053271
-Ref: Array Data Types-Footnote-11055929
-Node: Array Functions1056021
-Node: Flattening Arrays1060519
-Node: Creating Arrays1067495
-Node: Redirection API1072262
-Node: Extension API Variables1075095
-Node: Extension Versioning1075806
-Ref: gawk-api-version1076235
-Node: Extension GMP/MPFR Versioning1077966
-Node: Extension API Informational Variables1079594
-Node: Extension API Boilerplate1080667
-Node: Changes from API V11084641
-Node: Finding Extensions1086213
-Node: Extension Example1086772
-Node: Internal File Description1087570
-Node: Internal File Ops1091650
-Ref: Internal File Ops-Footnote-11103000
-Node: Using Internal File Ops1103140
-Ref: Using Internal File Ops-Footnote-11105523
-Node: Extension Samples1105797
-Node: Extension Sample File Functions1107326
-Node: Extension Sample Fnmatch1114975
-Node: Extension Sample Fork1116462
-Node: Extension Sample Inplace1117680
-Node: Extension Sample Ord1120984
-Node: Extension Sample Readdir1121820
-Ref: table-readdir-file-types1122709
-Node: Extension Sample Revout1123514
-Node: Extension Sample Rev2way1124103
-Node: Extension Sample Read write array1124843
-Node: Extension Sample Readfile1126785
-Node: Extension Sample Time1127880
-Node: Extension Sample API Tests1129228
-Node: gawkextlib1129720
-Node: Extension summary1132638
-Node: Extension Exercises1136340
-Node: Language History1137582
-Node: V7/SVR3.11139238
-Node: SVR41141390
-Node: POSIX1142824
-Node: BTL1144204
-Node: POSIX/GNU1144933
-Node: Feature History1150711
-Node: Common Extensions1166757
-Node: Ranges and Locales1168040
-Ref: Ranges and Locales-Footnote-11172656
-Ref: Ranges and Locales-Footnote-21172683
-Ref: Ranges and Locales-Footnote-31172918
-Node: Contributors1173139
-Node: History summary1179084
-Node: Installation1180464
-Node: Gawk Distribution1181408
-Node: Getting1181892
-Node: Extracting1182855
-Node: Distribution contents1184493
-Node: Unix Installation1190973
-Node: Quick Installation1191655
-Node: Shell Startup Files1194069
-Node: Additional Configuration Options1195158
-Node: Configuration Philosophy1197323
-Node: Non-Unix Installation1199692
-Node: PC Installation1200152
-Node: PC Binary Installation1200990
-Node: PC Compiling1201425
-Node: PC Using1202542
-Node: Cygwin1206095
-Node: MSYS1207194
-Node: VMS Installation1207695
-Node: VMS Compilation1208486
-Ref: VMS Compilation-Footnote-11209715
-Node: VMS Dynamic Extensions1209773
-Node: VMS Installation Details1211458
-Node: VMS Running1213711
-Node: VMS GNV1217990
-Node: VMS Old Gawk1218725
-Node: Bugs1219196
-Node: Bug address1219859
-Node: Usenet1222841
-Node: Maintainers1223845
-Node: Other Versions1225106
-Node: Installation summary1232020
-Node: Notes1233222
-Node: Compatibility Mode1234016
-Node: Additions1234798
-Node: Accessing The Source1235723
-Node: Adding Code1237160
-Node: New Ports1243379
-Node: Derived Files1247867
-Ref: Derived Files-Footnote-11253513
-Ref: Derived Files-Footnote-21253548
-Ref: Derived Files-Footnote-31254146
-Node: Future Extensions1254260
-Node: Implementation Limitations1254918
-Node: Extension Design1256101
-Node: Old Extension Problems1257245
-Ref: Old Extension Problems-Footnote-11258763
-Node: Extension New Mechanism Goals1258820
-Ref: Extension New Mechanism Goals-Footnote-11262184
-Node: Extension Other Design Decisions1262373
-Node: Extension Future Growth1264486
-Node: Notes summary1265322
-Node: Basic Concepts1266497
-Node: Basic High Level1267178
-Ref: figure-general-flow1267460
-Ref: figure-process-flow1268145
-Ref: Basic High Level-Footnote-11271446
-Node: Basic Data Typing1271631
-Node: Glossary1274959
-Node: Copying1306797
-Node: GNU Free Documentation License1344340
-Node: Index1369460
+Node: Global Namespace922056
+Node: Qualified Names923454
+Node: Default Namespace924453
+Node: Changing The Namespace925194
+Node: Naming Rules926808
+Node: Internal Name Management928656
+Node: Namespace Example929698
+Node: Namespace And Features932260
+Node: Namespace Summary933695
+Node: Arbitrary Precision Arithmetic935172
+Node: Computer Arithmetic936659
+Ref: table-numeric-ranges940425
+Ref: table-floating-point-ranges940918
+Ref: Computer Arithmetic-Footnote-1941576
+Node: Math Definitions941633
+Ref: table-ieee-formats944949
+Ref: Math Definitions-Footnote-1945552
+Node: MPFR features945657
+Node: FP Math Caution947375
+Ref: FP Math Caution-Footnote-1948447
+Node: Inexactness of computations948816
+Node: Inexact representation949776
+Node: Comparing FP Values951136
+Node: Errors accumulate952377
+Node: Getting Accuracy953810
+Node: Try To Round956520
+Node: Setting precision957419
+Ref: table-predefined-precision-strings958116
+Node: Setting the rounding mode959946
+Ref: table-gawk-rounding-modes960320
+Ref: Setting the rounding mode-Footnote-1964251
+Node: Arbitrary Precision Integers964430
+Ref: Arbitrary Precision Integers-Footnote-1967605
+Node: Checking for MPFR967754
+Node: POSIX Floating Point Problems969228
+Ref: POSIX Floating Point Problems-Footnote-1973513
+Node: Floating point summary973551
+Node: Dynamic Extensions975741
+Node: Extension Intro977294
+Node: Plugin License978560
+Node: Extension Mechanism Outline979357
+Ref: figure-load-extension979796
+Ref: figure-register-new-function981361
+Ref: figure-call-new-function982453
+Node: Extension API Description984515
+Node: Extension API Functions Introduction986157
+Ref: table-api-std-headers987993
+Node: General Data Types991858
+Ref: General Data Types-Footnote-11000219
+Node: Memory Allocation Functions1000518
+Ref: Memory Allocation Functions-Footnote-11004728
+Node: Constructor Functions1004827
+Node: Registration Functions1008413
+Node: Extension Functions1009098
+Node: Exit Callback Functions1014420
+Node: Extension Version String1015670
+Node: Input Parsers1016333
+Node: Output Wrappers1029054
+Node: Two-way processors1033566
+Node: Printing Messages1035831
+Ref: Printing Messages-Footnote-11037002
+Node: Updating ERRNO1037155
+Node: Requesting Values1037894
+Ref: table-value-types-returned1038631
+Node: Accessing Parameters1039567
+Node: Symbol Table Access1040802
+Node: Symbol table by name1041314
+Ref: Symbol table by name-Footnote-11044338
+Node: Symbol table by cookie1044466
+Ref: Symbol table by cookie-Footnote-11048651
+Node: Cached values1048715
+Ref: Cached values-Footnote-11052251
+Node: Array Manipulation1052404
+Ref: Array Manipulation-Footnote-11053495
+Node: Array Data Types1053532
+Ref: Array Data Types-Footnote-11056190
+Node: Array Functions1056282
+Node: Flattening Arrays1060780
+Node: Creating Arrays1067756
+Node: Redirection API1072523
+Node: Extension API Variables1075356
+Node: Extension Versioning1076067
+Ref: gawk-api-version1076496
+Node: Extension GMP/MPFR Versioning1078227
+Node: Extension API Informational Variables1079855
+Node: Extension API Boilerplate1080928
+Node: Changes from API V11084902
+Node: Finding Extensions1086474
+Node: Extension Example1087033
+Node: Internal File Description1087831
+Node: Internal File Ops1091911
+Ref: Internal File Ops-Footnote-11103261
+Node: Using Internal File Ops1103401
+Ref: Using Internal File Ops-Footnote-11105784
+Node: Extension Samples1106058
+Node: Extension Sample File Functions1107587
+Node: Extension Sample Fnmatch1115236
+Node: Extension Sample Fork1116723
+Node: Extension Sample Inplace1117941
+Node: Extension Sample Ord1121245
+Node: Extension Sample Readdir1122081
+Ref: table-readdir-file-types1122970
+Node: Extension Sample Revout1123775
+Node: Extension Sample Rev2way1124364
+Node: Extension Sample Read write array1125104
+Node: Extension Sample Readfile1127046
+Node: Extension Sample Time1128141
+Node: Extension Sample API Tests1129489
+Node: gawkextlib1129981
+Node: Extension summary1132899
+Node: Extension Exercises1136601
+Node: Language History1137843
+Node: V7/SVR3.11139499
+Node: SVR41141651
+Node: POSIX1143085
+Node: BTL1144465
+Node: POSIX/GNU1145194
+Node: Feature History1150972
+Node: Common Extensions1167018
+Node: Ranges and Locales1168301
+Ref: Ranges and Locales-Footnote-11172917
+Ref: Ranges and Locales-Footnote-21172944
+Ref: Ranges and Locales-Footnote-31173179
+Node: Contributors1173400
+Node: History summary1179345
+Node: Installation1180725
+Node: Gawk Distribution1181669
+Node: Getting1182153
+Node: Extracting1183116
+Node: Distribution contents1184754
+Node: Unix Installation1191234
+Node: Quick Installation1191916
+Node: Shell Startup Files1194330
+Node: Additional Configuration Options1195419
+Node: Configuration Philosophy1197584
+Node: Non-Unix Installation1199953
+Node: PC Installation1200413
+Node: PC Binary Installation1201251
+Node: PC Compiling1201686
+Node: PC Using1202803
+Node: Cygwin1206356
+Node: MSYS1207455
+Node: VMS Installation1207956
+Node: VMS Compilation1208747
+Ref: VMS Compilation-Footnote-11209976
+Node: VMS Dynamic Extensions1210034
+Node: VMS Installation Details1211719
+Node: VMS Running1213972
+Node: VMS GNV1218251
+Node: VMS Old Gawk1218986
+Node: Bugs1219457
+Node: Bug address1220120
+Node: Usenet1223102
+Node: Maintainers1224106
+Node: Other Versions1225367
+Node: Installation summary1232281
+Node: Notes1233483
+Node: Compatibility Mode1234277
+Node: Additions1235059
+Node: Accessing The Source1235984
+Node: Adding Code1237421
+Node: New Ports1243640
+Node: Derived Files1248128
+Ref: Derived Files-Footnote-11253774
+Ref: Derived Files-Footnote-21253809
+Ref: Derived Files-Footnote-31254407
+Node: Future Extensions1254521
+Node: Implementation Limitations1255179
+Node: Extension Design1256362
+Node: Old Extension Problems1257506
+Ref: Old Extension Problems-Footnote-11259024
+Node: Extension New Mechanism Goals1259081
+Ref: Extension New Mechanism Goals-Footnote-11262445
+Node: Extension Other Design Decisions1262634
+Node: Extension Future Growth1264747
+Node: Notes summary1265583
+Node: Basic Concepts1266758
+Node: Basic High Level1267439
+Ref: figure-general-flow1267721
+Ref: figure-process-flow1268406
+Ref: Basic High Level-Footnote-11271707
+Node: Basic Data Typing1271892
+Node: Glossary1275220
+Node: Copying1307058
+Node: GNU Free Documentation License1344601
+Node: Index1369721
 
 End Tag Table
diff --git a/doc/gawk.texi b/doc/gawk.texi
index cae7c39..e56ee61 100644
--- a/doc/gawk.texi
+++ b/doc/gawk.texi
@@ -31737,6 +31737,13 @@ program being debugged, but occasionally it can.
 
 This @value{CHAPTER} describes a feature that is specific to @command{gawk}.
 
address@hidden CAUTION
+This feature described in this chapter is new.  It is entirely
+possible, and even likely, that there are dark corners (if not bugs)
+still lurking within the implementation. If you find any such,
+please report them (@xref{Bugs}).
address@hidden quotation
+
 @menu
 * Global Namespace::            The global namespace in standard @command{awk}.
 * Qualified Names::             How to qualify names with a namespace.
diff --git a/doc/gawktexi.in b/doc/gawktexi.in
index ddbe8df..1b194ef 100644
--- a/doc/gawktexi.in
+++ b/doc/gawktexi.in
@@ -30749,6 +30749,13 @@ program being debugged, but occasionally it can.
 
 This @value{CHAPTER} describes a feature that is specific to @command{gawk}.
 
address@hidden CAUTION
+This feature described in this chapter is new.  It is entirely
+possible, and even likely, that there are dark corners (if not bugs)
+still lurking within the implementation. If you find any such,
+please report them (@xref{Bugs}).
address@hidden quotation
+
 @menu
 * Global Namespace::            The global namespace in standard @command{awk}.
 * Qualified Names::             How to qualify names with a namespace.

http://git.sv.gnu.org/cgit/gawk.git/commit/?id=eceb548b02f0d72ca6a6e9a68bfd615ac9549a64

commit eceb548b02f0d72ca6a6e9a68bfd615ac9549a64
Author: Arnold D. Robbins <address@hidden>
Date:   Fri Jan 25 11:47:18 2019 +0200

    Rework namespace handling to make simpler and correct. Add two test cases.

diff --git a/ChangeLog b/ChangeLog
index a85feb7..b89a9f6 100755
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,29 @@
+2019-01-24         Arnold D. Robbins     <address@hidden>
+
+       * awkgram.y (Grammar): Add new production `qualified_name' which
+       is NAME + qualification call. Use it everywhere that NAME was
+       used, except for function parameters.
+
+2019-01-23         Arnold D. Robbins     <address@hidden>
+
+       * profile.c (adjust_namespace): Check for all upper case
+       identifiers so we don't get things like awk::NF.
+
+2019-01-23         Arnold D. Robbins     <address@hidden>
+
+       * symtab.c (lookup): Remove second `do_qualify' parameter.
+       Remove calls to `fix_up_namespace'.  If name starts with
+       "awk::" just lookup the compnent name.
+       Adjust all calls to `lookup' in other files.
+       (install): Don't use `fix_up_namespace'.
+       (fix_up_namespace): Remove function.
+       * awk.h (lookup): Adjust declaration.
+
+2019-01-23         Arnold D. Robbins     <address@hidden>
+
+       * awkgram.y (qualify_name): Don't qualify a name if it's
+       a parameter.
+
 2019-01-21         Arnold D. Robbins     <address@hidden>
 
        * awkgram.y (Grammar): Use qualify_name for array subscript
diff --git a/array.c b/array.c
index 2cc7674..43f8471 100644
--- a/array.c
+++ b/array.c
@@ -1309,7 +1309,7 @@ assoc_list(NODE *symbol, const char *sort_str, 
sort_context_t sort_ctxt)
                if (sp == sort_str || *sp != '\0')
                        fatal(_("`%s' is invalid as a function name"), 
sort_str);
 
-               f = lookup(sort_str, false);
+               f = lookup(sort_str);
                if (f == NULL || f->type != Node_func)
                        fatal(_("sort comparison function `%s' is not 
defined"), sort_str);
 
diff --git a/awk.h b/awk.h
index 63e3cfa..a8a37f6 100644
--- a/awk.h
+++ b/awk.h
@@ -1714,7 +1714,7 @@ extern NODE *remove_symbol(NODE *r);
 extern void destroy_symbol(NODE *r);
 extern void release_symbols(NODE *symlist, int keep_globals);
 extern void append_symbol(NODE *r);
-extern NODE *lookup(const char *name, bool do_qualify);
+extern NODE *lookup(const char *name);
 extern NODE *make_params(char **pnames, int pcount);
 extern void install_params(NODE *func);
 extern void remove_params(NODE *func);
diff --git a/awkgram.c b/awkgram.c
index 3aaef97..a960844 100644
--- a/awkgram.c
+++ b/awkgram.c
@@ -621,16 +621,16 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  2
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1191
+#define YYLAST   1169
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  77
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  71
+#define YYNNTS  72
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  207
+#define YYNRULES  208
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  355
+#define YYNSTATES  356
 
 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
    by yylex, with out-of-bounds checking.  */
@@ -685,24 +685,24 @@ static const yytype_uint16 yyrline[] =
        0,   231,   231,   232,   237,   247,   251,   263,   271,   285,
      296,   306,   316,   329,   339,   341,   346,   356,   358,   363,
      365,   367,   373,   377,   382,   412,   424,   436,   442,   451,
-     469,   480,   491,   497,   505,   506,   510,   510,   544,   543,
-     577,   592,   594,   599,   600,   620,   625,   626,   630,   641,
-     646,   653,   761,   812,   862,   988,  1009,  1030,  1040,  1050,
-    1060,  1071,  1084,  1102,  1101,  1115,  1133,  1133,  1231,  1231,
-    1264,  1294,  1302,  1303,  1309,  1310,  1317,  1322,  1335,  1350,
-    1352,  1360,  1367,  1369,  1377,  1386,  1388,  1397,  1398,  1406,
-    1411,  1411,  1424,  1430,  1442,  1446,  1468,  1469,  1475,  1476,
-    1485,  1486,  1491,  1496,  1513,  1515,  1517,  1524,  1525,  1531,
-    1532,  1537,  1539,  1546,  1548,  1556,  1561,  1572,  1573,  1578,
-    1580,  1587,  1589,  1597,  1602,  1612,  1613,  1618,  1625,  1629,
-    1631,  1633,  1646,  1663,  1673,  1680,  1682,  1687,  1689,  1691,
-    1699,  1701,  1706,  1708,  1713,  1715,  1717,  1774,  1776,  1778,
-    1780,  1782,  1784,  1786,  1788,  1802,  1807,  1812,  1837,  1843,
-    1845,  1847,  1849,  1851,  1853,  1858,  1862,  1894,  1902,  1908,
-    1914,  1927,  1928,  1929,  1934,  1939,  1943,  1947,  1962,  1983,
-    1988,  2025,  2062,  2063,  2069,  2070,  2075,  2077,  2084,  2101,
-    2118,  2120,  2127,  2132,  2146,  2162,  2174,  2183,  2187,  2192,
-    2196,  2200,  2204,  2209,  2210,  2214,  2218,  2222
+     469,   483,   484,   495,   501,   509,   510,   514,   514,   548,
+     547,   581,   596,   598,   603,   604,   624,   629,   630,   634,
+     645,   650,   657,   765,   816,   866,   992,  1013,  1034,  1044,
+    1054,  1064,  1075,  1088,  1106,  1105,  1119,  1137,  1137,  1235,
+    1235,  1268,  1298,  1306,  1307,  1313,  1314,  1321,  1326,  1339,
+    1354,  1356,  1364,  1371,  1373,  1381,  1390,  1392,  1401,  1402,
+    1410,  1415,  1415,  1428,  1434,  1446,  1450,  1472,  1473,  1479,
+    1480,  1489,  1490,  1495,  1500,  1517,  1519,  1521,  1528,  1529,
+    1535,  1536,  1541,  1543,  1550,  1552,  1560,  1565,  1576,  1577,
+    1582,  1584,  1591,  1593,  1601,  1606,  1616,  1617,  1622,  1629,
+    1633,  1635,  1637,  1650,  1667,  1677,  1684,  1686,  1691,  1693,
+    1695,  1703,  1705,  1710,  1712,  1717,  1719,  1721,  1778,  1780,
+    1782,  1784,  1786,  1788,  1790,  1792,  1806,  1811,  1816,  1841,
+    1847,  1849,  1851,  1853,  1855,  1857,  1862,  1866,  1898,  1906,
+    1912,  1918,  1931,  1932,  1933,  1938,  1943,  1947,  1951,  1966,
+    1987,  1992,  2029,  2066,  2067,  2073,  2074,  2079,  2081,  2088,
+    2105,  2122,  2124,  2131,  2136,  2142,  2153,  2165,  2174,  2178,
+    2183,  2187,  2191,  2195,  2200,  2201,  2205,  2209,  2213
 };
 #endif
 
@@ -724,8 +724,8 @@ static const char *const yytname[] =
   "SLASH_BEFORE_EQUAL", "'?'", "':'", "','", "'<'", "'>'", "'+'", "'-'",
   "'*'", "'/'", "'%'", "'!'", "UNARY", "'^'", "'$'", "'('", "')'", "'@'",
   "'['", "']'", "'{'", "'}'", "';'", "$accept", "program", "rule",
-  "source", "library", "namespace", "pattern", "action", "func_name",
-  "lex_builtin", "function_prologue", "address@hidden", "regexp", 
"address@hidden",
+  "source", "library", "namespace", "pattern", "action", "qualified_name",
+  "func_name", "lex_builtin", "function_prologue", "address@hidden", "regexp", 
"address@hidden",
   "typed_regexp", "a_slash", "statements", "statement_term", "statement",
   "non_compound_stmt", "address@hidden", "simple_stmt", "address@hidden", 
"address@hidden",
   "opt_simple_stmt", "case_statements", "case_statement", "case_value",
@@ -758,56 +758,56 @@ static const yytype_uint16 yytoknum[] =
 };
 # endif
 
-#define YYPACT_NINF -283
+#define YYPACT_NINF -295
 
 #define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-283)))
+  (!!((Yystate) == (-295)))
 
-#define YYTABLE_NINF -119
+#define YYTABLE_NINF -120
 
 #define yytable_value_is_error(Yytable_value) \
-  (!!((Yytable_value) == (-119)))
+  (!!((Yytable_value) == (-120)))
 
   /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    -283,   316,  -283,  -283,   -45,   -28,  -283,  -283,  -283,  -283,
-     160,  -283,  -283,    23,    23,    23,   -39,   -18,  -283,  -283,
-    -283,  1047,  1047,  -283,  1047,  1075,   818,   257,  -283,    99,
-     -20,  -283,  -283,    11,  1017,   974,   378,   415,  -283,  -283,
-    -283,  -283,   329,   742,   818,  -283,     0,  -283,  -283,  -283,
-    -283,  -283,    25,     9,  -283,    22,  -283,  -283,  -283,   742,
-     742,    79,    46,    18,    46,    46,  1047,   114,  -283,  -283,
-      13,   286,    44,    47,    60,  -283,    94,  -283,  -283,  -283,
-      11,  -283,    94,  -283,   151,  -283,  -283,  1002,   162,  1047,
-    1047,  1047,    94,  -283,  -283,  -283,  1047,  1047,   132,   378,
-    1047,  1047,  1047,  1047,  1047,  1047,  1047,  1047,  1047,  1047,
-    1047,  1047,  -283,   170,  -283,  -283,   168,  1047,  -283,  -283,
-    -283,   116,    14,  -283,  1132,    76,  1132,  -283,  -283,  -283,
-    -283,  1047,  -283,   116,   116,   286,  -283,  -283,  -283,  1047,
-    -283,   144,   846,  -283,  -283,    34,    91,  -283,    39,    91,
-    -283,    59,    91,    11,  -283,   542,  -283,  -283,  -283,   145,
-    -283,   135,   580,  1113,  -283,   189,  1132,    23,   230,   230,
-      46,    46,    46,    46,   230,   230,    46,    46,    46,    46,
-    -283,  -283,  1132,  -283,  1002,   770,  -283,    27,   378,  -283,
-    -283,  1132,   162,  -283,  1132,  -283,  -283,  -283,  -283,  -283,
-    -283,  -283,   119,  -283,    12,   123,   126,    94,   128,    91,
-      91,  -283,  -283,    91,  1047,    91,    94,  -283,  -283,    91,
-    -283,  -283,  1132,  -283,   122,    94,  1047,  -283,  -283,  -283,
-    -283,  -283,  -283,   116,    73,  -283,  1047,  1047,  -283,   198,
-    1047,  1047,   660,   895,  -283,  -283,  -283,    91,  1132,  -283,
-    -283,  -283,   590,   542,    94,  -283,  -283,  1132,    94,  -283,
-      28,   286,    91,   -28,   141,   286,   286,   190,   -23,  -283,
-     122,  -283,   818,   205,  -283,   325,  -283,  -283,  -283,  -283,
-    -283,    94,  -283,  -283,   115,  -283,  -283,  -283,    94,    94,
-     153,   162,    94,    13,  -283,  -283,   660,  -283,  -283,   -20,
-     660,  1047,   116,   694,   144,  1047,   209,  -283,  -283,   286,
-      94,  1090,    94,   974,    94,   152,    94,   660,    94,   929,
-     660,  -283,   342,   176,  -283,   158,  -283,  -283,   929,   116,
-    -283,  -283,  -283,   236,   243,  -283,  -283,   176,  -283,    94,
-    -283,   116,    94,  -283,  -283,    94,  -283,    94,   660,  -283,
-     390,   660,  -283,   466,  -283
+    -295,   359,  -295,  -295,   -38,  -295,  -295,  -295,  -295,  -295,
+     172,  -295,  -295,    17,    17,    17,   -31,   -27,  -295,  -295,
+    -295,  1016,  1016,  -295,  1016,  1061,   861,   218,  -295,   -29,
+     -32,   -22,  -295,  -295,    84,  1076,   983,   354,   382,  -295,
+    -295,  -295,  -295,   325,   785,  -295,  -295,  -295,    18,  -295,
+      91,  -295,   113,  -295,  -295,  -295,   785,   785,   170,   115,
+      87,   115,   115,  1016,   114,  -295,  -295,    13,   273,    31,
+      70,   121,  -295,   127,  -295,  -295,  -295,    84,  -295,   127,
+     861,  -295,    22,  -295,  -295,   182,  -295,  -295,   971,   173,
+    1016,  1016,  1016,   127,  -295,  -295,  -295,  1016,  1016,   157,
+     354,  1016,  1016,  1016,  1016,  1016,  1016,  1016,  1016,  1016,
+    1016,  1016,  1016,  -295,   189,  -295,  -295,   195,  1016,  -295,
+    -295,  -295,   134,    66,  -295,  1110,  -295,  -295,  1016,  -295,
+     134,   134,   273,  -295,  -295,  -295,  1016,  -295,   175,   889,
+    -295,  -295,    45,   -17,  -295,    80,   -17,  -295,    81,   -17,
+      84,  -295,   585,  -295,    15,  1110,  -295,  -295,  -295,  -295,
+      19,  -295,   276,   190,  1099,  -295,   240,  1110,    17,   233,
+     233,   115,   115,   115,   115,   233,   233,   115,   115,   115,
+     115,  -295,  -295,  1110,  -295,   971,   813,    49,   354,  -295,
+    -295,  1110,   173,  -295,  1110,  -295,  -295,  -295,  -295,  -295,
+    -295,  -295,   142,  -295,    11,   158,   164,   127,   165,   -17,
+     -17,  -295,  -295,   -17,  1016,   -17,   127,  -295,  -295,   -17,
+    -295,  -295,  1110,  -295,   147,   127,  -295,  1016,  -295,  -295,
+    -295,  -295,  -295,  -295,   134,   129,  -295,  1016,  1016,   173,
+    -295,  1016,  1016,   703,   938,  -295,  -295,  -295,   -17,  1110,
+    -295,  -295,  -295,   633,   585,   127,  -295,  -295,  1110,   127,
+    -295,   124,   273,   -17,   174,   -32,   273,   273,   215,   -23,
+    -295,   147,  -295,   861,   235,  -295,    16,  -295,  -295,  -295,
+    -295,  -295,   127,  -295,  -295,  -295,    57,  -295,  -295,   127,
+     127,   188,   173,   127,    13,  -295,  -295,   703,  -295,  -295,
+     -22,   703,  1016,   134,   737,   175,  1016,   230,  -295,  -295,
+     273,   127,   251,   127,   983,   127,   153,   127,   703,   127,
+     938,   703,  -295,   154,   206,  -295,   193,  -295,  -295,   938,
+     134,  -295,  -295,  -295,   256,   257,  -295,  -295,   206,  -295,
+     127,  -295,   134,   127,  -295,  -295,   127,  -295,   127,   703,
+    -295,   433,   703,  -295,   509,  -295
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -815,68 +815,68 @@ static const yytype_int16 yypact[] =
      means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       2,     0,     1,     6,     0,   193,   175,   176,    25,    26,
-       0,    27,    28,   182,     0,     0,     0,   170,     5,    94,
-      42,     0,     0,    41,     0,     0,     0,     0,     3,     0,
-       0,   165,    38,     4,    23,   136,   144,   145,   147,   171,
-     179,   195,   172,     0,     0,   190,     0,   194,    31,    30,
-      34,    35,     0,     0,    32,    98,   183,   173,   174,     0,
-       0,     0,   178,   172,   177,   166,     0,   199,   172,   113,
-       0,   111,     0,     0,     0,   180,    96,   205,     7,     8,
-      46,    43,    96,     9,     0,    95,   140,     0,     0,     0,
-       0,     0,    96,   141,   143,   142,     0,     0,     0,   146,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   138,   137,   155,   156,     0,     0,   121,    40,
-     126,     0,     0,   119,   125,     0,   111,   192,   191,    33,
-      36,     0,   154,     0,     0,     0,   197,   198,   196,   114,
-     202,     0,     0,   167,    15,     0,     0,    18,     0,     0,
-      21,     0,     0,    97,   200,     0,    47,    39,   131,   132,
-     133,   129,   130,     0,   207,   134,    24,   182,   152,   153,
-     149,   150,   151,   148,   163,   164,   160,   161,   162,   159,
-     128,   139,   127,   181,   122,     0,   189,     0,    99,   168,
-     169,   115,     0,   116,   112,    14,    10,    17,    11,    20,
-      12,    45,     0,    63,     0,     0,     0,    96,     0,     0,
-       0,    85,    86,     0,   107,     0,    96,    44,    57,     0,
-      66,    50,    71,    43,   203,    96,     0,   158,   123,   124,
-     120,   104,   102,     0,     0,   157,     0,   107,    68,     0,
-       0,     0,     0,    72,    58,    59,    60,     0,   108,    61,
-     201,    65,     0,     0,    96,   204,    48,   135,    96,   105,
-       0,     0,     0,   184,     0,     0,     0,     0,   193,    73,
-       0,    62,     0,    89,    87,     0,    49,    29,    37,   106,
-     103,    96,    64,    69,     0,   186,   188,    70,    96,    96,
-       0,     0,    96,     0,    90,    67,     0,   185,   187,     0,
-       0,     0,     0,     0,    88,     0,    92,    74,    52,     0,
-      96,     0,    96,    91,    96,     0,    96,     0,    96,    72,
-       0,    76,     0,     0,    75,     0,    53,    54,    72,     0,
-      93,    79,    82,     0,     0,    83,    84,     0,   206,    96,
-      51,     0,    96,    81,    80,    96,    43,    96,     0,    43,
-       0,     0,    56,     0,    55
+       2,     0,     1,     6,     0,    30,   176,   177,    25,    26,
+       0,    27,    28,   183,     0,     0,     0,   171,     5,    95,
+      43,     0,     0,    42,     0,     0,     0,     0,     3,     0,
+     194,     0,   166,    39,     4,    23,   137,   145,   146,   148,
+     172,   180,   196,   173,     0,    32,    35,    36,     0,    31,
+       0,    33,    99,   184,   174,   175,     0,     0,     0,   179,
+     173,   178,   167,     0,   200,   173,   114,     0,   112,     0,
+       0,     0,   181,    97,   206,     7,     8,    47,    44,    97,
+       0,   191,     0,   195,     9,     0,    96,   141,     0,     0,
+       0,     0,     0,    97,   142,   144,   143,     0,     0,     0,
+     147,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   139,   138,   156,   157,     0,     0,   122,
+      41,   127,     0,     0,   120,   126,    34,    37,     0,   155,
+       0,     0,     0,   198,   199,   197,   115,   203,     0,     0,
+     168,    15,     0,     0,    18,     0,     0,    21,     0,     0,
+      98,   201,     0,    48,     0,   112,   193,   192,    40,   132,
+     133,   134,   130,   131,     0,   208,   135,    24,   183,   153,
+     154,   150,   151,   152,   149,   164,   165,   161,   162,   163,
+     160,   129,   140,   128,   182,   123,     0,     0,   100,   169,
+     170,   116,     0,   117,   113,    14,    10,    17,    11,    20,
+      12,    46,     0,    64,     0,     0,     0,    97,     0,     0,
+       0,    86,    87,     0,   108,     0,    97,    45,    58,     0,
+      67,    51,    72,    44,   204,    97,   190,     0,   159,   124,
+     125,   121,   105,   103,     0,     0,   158,     0,   108,     0,
+      69,     0,     0,     0,    73,    59,    60,    61,     0,   109,
+      62,   202,    66,     0,     0,    97,   205,    49,   136,    97,
+     106,     0,     0,     0,     0,   185,     0,     0,     0,   194,
+      74,     0,    63,     0,    90,    88,     0,    50,    29,    38,
+     107,   104,    97,    65,    71,    70,     0,   187,   189,    97,
+      97,     0,     0,    97,     0,    91,    68,     0,   186,   188,
+       0,     0,     0,     0,     0,    89,     0,    93,    75,    53,
+       0,    97,     0,    97,    92,    97,     0,    97,     0,    97,
+      73,     0,    77,     0,     0,    76,     0,    54,    55,    73,
+       0,    94,    80,    83,     0,     0,    84,    85,     0,   207,
+      97,    52,     0,    97,    82,    81,    97,    44,    97,     0,
+      44,     0,     0,    57,     0,    56
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -283,  -283,  -283,  -283,  -283,  -283,  -283,   226,  -283,  -283,
-    -283,  -283,   -63,  -283,   -77,  -283,  -215,   -73,   -30,  -283,
-    -283,  -234,  -283,  -283,  -282,  -283,  -283,  -283,  -283,  -283,
-    -283,  -283,  -283,     5,   -35,  -283,  -283,  -283,    24,  -283,
-     -43,   101,  -283,   -15,    -1,  -283,  -283,  -283,   -40,    17,
-    -283,   237,  -283,    -6,    96,  -283,  -283,   -16,   -42,  -283,
-    -283,   -81,    -2,  -283,   -27,  -186,   -65,  -283,   -62,   -68,
-      -8
+    -295,  -295,  -295,  -295,  -295,  -295,  -295,   242,    -9,  -295,
+    -295,  -295,  -295,   -52,  -295,   -84,  -295,  -195,   -95,  -127,
+    -295,  -295,  -236,  -295,  -295,  -294,  -295,  -295,  -295,  -295,
+    -295,  -295,  -295,  -295,   110,   -35,  -295,  -295,  -295,    37,
+    -295,   -70,   108,  -295,     7,    -1,  -295,  -295,  -295,   -21,
+      39,  -295,   262,  -295,     6,   150,  -295,  -295,     3,   -76,
+    -295,  -295,   -80,    -2,  -295,   -26,  -213,   -65,  -295,    36,
+     -36,   -28
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,     1,    28,   146,   149,   152,    29,    78,    53,    54,
-      30,   187,    31,    84,   120,    32,   155,    79,   217,   218,
-     237,   219,   252,   263,   270,   315,   324,   337,   220,   273,
-     295,   305,   221,   153,   154,   132,   233,   234,   247,   274,
-      70,   121,   122,   123,   222,   117,    95,    96,    35,    36,
-      37,    38,    39,    40,    55,   283,   284,   285,    45,    46,
-      47,    41,    42,   138,   223,   224,   143,   254,    82,   339,
-     142
+      -1,     1,    28,   143,   146,   149,    29,    75,    30,    50,
+      51,    31,   187,    32,    85,   121,    33,   152,    76,   217,
+     218,   238,   219,   253,   265,   271,   316,   325,   338,   220,
+     274,   296,   306,   221,   150,   151,   129,   234,   235,   248,
+     275,    67,   122,   123,   124,   222,   118,    96,    97,    36,
+      37,    38,    39,    40,    41,    52,   285,   286,   287,    81,
+      82,    83,    42,    43,   135,   223,   224,   140,   255,    79,
+     340,   139
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -884,250 +884,244 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      34,   125,    81,    81,   128,   141,    33,   160,   253,   269,
-     158,    56,    57,    58,   139,   184,   238,   127,   291,    63,
-      63,    75,    63,    68,    43,    71,    97,     5,   231,   279,
-      59,   232,   280,    63,    80,   195,   180,   329,    62,    64,
-     197,    65,   124,   126,    44,   144,   341,   156,   147,    44,
-     145,    60,    99,   148,    76,    75,   183,   164,   124,   124,
-     199,   150,   114,   115,    85,   135,   151,   276,   189,   190,
-      92,    92,    44,   196,   259,   129,   198,   139,   130,   200,
-     131,   239,     4,   140,  -118,   269,   159,   -13,   161,   162,
-     163,    25,   -16,   225,   269,   165,   166,  -100,    63,    63,
-      63,    63,    63,    63,    63,    63,    63,    63,    63,    63,
-     -13,   235,   -19,   105,   185,   -16,   182,   168,   169,   170,
-     171,   172,   173,   174,   175,   176,   177,   178,   179,    63,
-      92,   350,   297,    92,   353,   -19,   244,   245,   191,   340,
-     246,   194,   249,  -101,    19,    86,   251,    19,   188,   186,
-      87,    80,    19,   321,    80,    86,   157,    80,   136,   137,
-     133,   134,   255,    48,    49,    56,     5,    77,   258,   228,
-     230,   167,   242,    76,   271,    77,    88,   322,   323,   119,
-     225,   250,   181,   124,   124,   192,   140,    44,   236,   282,
-     256,   225,   240,    93,    94,   241,   281,   243,    77,  -119,
-     288,   289,   264,    93,    94,    19,    50,    51,   292,   275,
-     302,   287,   267,   248,    80,    80,   294,   290,    80,   277,
-      80,   286,   301,   278,    80,   257,   260,   -96,   304,   293,
-     314,    52,   338,   216,   225,   261,   248,   310,   225,   265,
-     266,   312,   286,   343,   316,   336,   296,  -119,  -119,   318,
-     344,   126,    80,   299,   300,   225,    83,   303,   225,   335,
-       4,   262,    67,   227,   342,   313,   306,    80,   298,   345,
-     308,    71,   307,     0,     0,   317,   347,   319,     0,   320,
-     325,   326,     0,   328,     0,     0,   225,   327,   225,   225,
-     330,   225,   102,   103,   104,     0,    86,   105,     0,     0,
-     309,    87,   311,    63,   346,     0,    72,   348,    73,    74,
-     349,    63,   351,     0,     0,     0,     2,     3,   352,     4,
-       5,   354,     0,     6,     7,     0,   139,    88,    89,    90,
-      99,     0,     0,     0,     8,     9,  -110,     0,     0,     0,
-       0,    91,   112,   113,    93,    94,     0,     0,     0,   331,
-     332,   119,    10,    11,    12,    13,   140,     0,     0,     0,
-      14,    15,    16,    17,    18,     0,     0,     0,     0,    19,
-      20,     0,     0,   114,   115,     0,    21,    22,  -110,    23,
-       0,    24,    92,   116,    25,    26,     0,    27,     0,     0,
-     -22,   201,   -22,     4,     5,  -110,    20,     6,     7,     0,
-       0,  -110,   333,   334,     0,    23,     0,     0,     0,     0,
-     202,     0,   203,   204,   205,   -78,   -78,   206,   207,   208,
-     209,   210,   211,   212,   213,   214,     0,     0,     0,    13,
-     215,     0,     0,     0,    14,    15,    16,    17,   100,   101,
-     102,   103,   104,   -78,    20,   105,     0,     0,     0,     0,
-      21,    22,     0,    23,     0,    24,     0,     0,    25,    26,
-       0,    61,     0,     0,    76,   -78,    77,   201,     0,     4,
-       5,     0,     0,     6,     7,   106,   107,   108,   109,   110,
-       0,     0,   111,     0,     0,     0,   202,     0,   203,   204,
-     205,   -77,   -77,   206,   207,   208,   209,   210,   211,   212,
-     213,   214,     0,     0,     0,    13,   215,     0,     0,     0,
-      14,    15,    16,    17,     0,     0,     0,     0,     0,   -77,
-      20,     0,     0,     0,     0,     0,    21,    22,     0,    23,
-       0,    24,     0,     0,    25,    26,     0,    61,     0,     0,
-      76,   -77,    77,   201,     0,     4,     5,     0,     0,     6,
-       7,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   202,     0,   203,   204,   205,     0,     0,   206,
-     207,   208,   209,   210,   211,   212,   213,   214,     0,     0,
-       0,    13,   215,     0,     0,     0,    14,    15,    16,    17,
-      86,    69,     0,     4,     5,    87,    20,     6,     7,     0,
-       0,  -109,    21,    22,     0,    23,     0,    24,     0,     0,
-      25,    26,     0,    61,     0,     0,    76,   216,    77,     0,
-       0,    88,    89,     0,     0,     0,     0,     0,     0,    13,
-       0,     0,     0,     0,    14,    15,    16,    17,    93,    94,
-       0,     0,     0,  -109,    20,     0,     0,     0,     0,     0,
-      21,    22,     0,    23,     0,    24,     0,     0,    25,   272,
-    -109,    61,     0,     4,     5,     0,  -109,     6,     7,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     202,     0,   203,   204,   205,     0,     0,   206,   207,   208,
-     209,   210,   211,   212,   213,   214,     0,     4,     5,    13,
-     215,     6,     7,     0,    14,    15,    16,    17,     0,     0,
-       0,     0,     0,     0,    20,     0,     0,     0,     0,     0,
-      21,    22,     0,    23,     0,    24,     0,     0,    25,    26,
-       0,    61,     0,    13,    76,     0,    77,     0,    14,    15,
-      16,    17,     0,   118,     0,     4,     5,     0,    20,     6,
-       7,   119,     0,     0,    21,    22,     0,    23,     0,    24,
-       0,     0,    25,    26,     0,    61,     0,     0,     0,     0,
-      77,   229,     0,     4,     5,     0,     0,     6,     7,   119,
-       0,    13,     0,     0,     0,     0,    14,    15,    16,    17,
-       0,     0,     0,     0,     0,     0,    20,     0,     0,     0,
-       0,     0,    21,    22,     0,    23,     0,    24,     0,    13,
-      25,    26,  -117,    61,    14,    15,    16,    17,     0,    69,
-       0,     4,     5,     0,    20,     6,     7,     0,     0,     0,
-      21,    22,     0,    23,     0,    24,     0,     0,    25,    26,
-       0,    61,     0,     0,     0,     0,     0,   193,     0,     4,
-       5,     0,     0,     6,     7,     0,     0,    13,     0,     0,
-       0,     0,    14,    15,    16,    17,     0,     0,     0,     0,
-       0,     0,    20,     0,     0,     0,     0,     0,    21,    22,
-       0,    23,     0,    24,     0,    13,    25,    26,     0,    61,
-      14,    15,    16,    17,     0,     0,     0,     0,     4,   268,
-      20,     0,     6,     7,     0,     0,    21,    22,     0,    23,
-       0,    24,     0,     0,    25,    26,     0,    61,   204,     0,
-       0,     0,     0,     0,     0,     0,     0,   211,   212,     0,
-       0,     0,     4,     5,    13,     0,     6,     7,     0,    14,
+      35,    49,   138,    78,   159,    78,   157,    98,   270,   161,
+     154,    53,    54,    55,   136,     5,   136,   136,   292,    60,
+      60,     5,    60,    65,    19,    68,   330,  -111,   254,    87,
+     181,    44,   141,    72,    60,   342,    19,   142,    56,   156,
+      80,   277,    57,   125,   153,    73,   195,    74,   196,    80,
+     232,   198,    73,   233,   200,   125,   125,   184,   165,    74,
+      59,    61,   132,    62,    72,   189,   190,   185,   126,  -111,
+      93,   144,    93,    93,   298,   100,   145,    94,    95,   155,
+     239,   197,   199,   137,   270,    25,  -111,   160,   226,   162,
+     163,   164,  -111,   270,    80,   186,   166,   167,   -13,    60,
+      60,    60,    60,    60,    60,    60,    60,    60,    60,    60,
+      60,    34,   236,   341,   245,   246,   268,   183,   247,  -101,
+     250,   -13,   147,    93,   252,   280,    60,   148,   281,    80,
+     260,   115,   116,   -16,   -19,   191,  -119,    86,   194,    77,
+     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
+     179,   180,   351,   272,   322,   354,   -16,   -19,   133,   134,
+     127,   332,   333,   120,   130,   131,    53,   188,   283,   259,
+     307,   128,   243,     4,   309,    45,     5,     5,   323,   324,
+      19,   251,   106,   276,   125,   125,    93,   158,   225,   288,
+     257,   328,   229,   231,   331,   240,   168,   282,   120,  -102,
+      87,   289,   290,   294,   137,    88,    19,   261,    20,   182,
+     288,   237,   303,   249,   334,   335,   192,    23,    46,    47,
+     278,     4,   353,    74,   279,   355,   258,   241,   -97,   305,
+     264,    89,    90,   242,   244,   269,   262,   249,   311,   337,
+     266,   267,   291,    48,   284,   317,   295,   297,    94,    95,
+    -120,   315,   155,    77,   300,   301,    77,   302,   304,    77,
+     256,    87,   339,   344,   345,   343,    88,    69,   216,    70,
+      71,   336,    68,    84,   308,   263,   318,   348,   320,   225,
+     321,   326,   327,    87,   329,   314,    87,    64,    88,   299,
+     225,    88,    89,    90,    91,   103,   104,   105,  -120,  -120,
+     106,   310,   346,   312,    60,   347,    92,   293,   349,    94,
+      95,   350,    60,   352,    89,    90,    91,    89,   228,    77,
+      77,     0,     0,    77,     0,    77,     0,    74,    92,    77,
+       0,    94,    95,   225,    94,    95,     0,   225,   113,   114,
+     313,     0,     0,   137,     0,     0,     0,     0,   319,     0,
+       0,     0,     0,   100,   225,     0,     0,   225,    77,     2,
+       3,     0,     4,     5,     0,     0,     6,     7,     0,   115,
+     116,     0,     0,    77,     0,     0,     0,     8,     9,   117,
+       0,     0,     0,     0,     0,   225,     0,   225,   225,     0,
+     225,     0,     0,     0,     0,    10,    11,    12,    13,     0,
+       0,     0,     0,    14,    15,    16,    17,    18,     0,     0,
+       0,     0,    19,    20,   101,   102,   103,   104,   105,    21,
+      22,   106,    23,     0,    24,     0,     0,    25,    26,     0,
+      27,     0,     0,   -22,   201,   -22,     4,     5,     0,     0,
+       6,     7,   107,   108,   109,   110,   111,     0,     0,   112,
+       0,     0,     0,   202,     0,   203,   204,   205,   -79,   -79,
+     206,   207,   208,   209,   210,   211,   212,   213,   214,     0,
+       0,     0,    13,   215,     0,     0,     0,    14,    15,    16,
+      17,     0,     0,     0,     0,     0,   -79,    20,     0,     0,
+       0,     0,     0,    21,    22,     0,    23,     0,    24,     0,
+       0,    25,    26,     0,    58,     0,     0,    73,   -79,    74,
+     201,     0,     4,     5,     0,     0,     6,     7,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   202,
+       0,   203,   204,   205,   -78,   -78,   206,   207,   208,   209,
+     210,   211,   212,   213,   214,     0,     0,     0,    13,   215,
+       0,     0,     0,    14,    15,    16,    17,     0,     0,     0,
+       0,     0,   -78,    20,     0,     0,     0,     0,     0,    21,
+      22,     0,    23,     0,    24,     0,     0,    25,    26,     0,
+      58,     0,     0,    73,   -78,    74,   201,     0,     4,     5,
+       0,     0,     6,     7,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   202,     0,   203,   204,   205,
+       0,     0,   206,   207,   208,   209,   210,   211,   212,   213,
+     214,     0,     0,     0,    13,   215,     0,     0,     0,    14,
+      15,    16,    17,     0,    66,     0,     4,     5,     0,    20,
+       6,     7,     0,     0,  -110,    21,    22,     0,    23,     0,
+      24,     0,     0,    25,    26,     0,    58,     0,     0,    73,
+     216,    74,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    13,     0,     0,     0,     0,    14,    15,    16,
+      17,     0,     0,     0,     0,     0,  -110,    20,     0,     0,
+       0,     0,     0,    21,    22,     0,    23,     0,    24,     0,
+       0,    25,   273,  -110,    58,     0,     4,     5,     0,  -110,
+       6,     7,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   202,     0,   203,   204,   205,     0,     0,
+     206,   207,   208,   209,   210,   211,   212,   213,   214,     0,
+       4,     5,    13,   215,     6,     7,     0,    14,    15,    16,
+      17,     0,     0,     0,     0,     0,     0,    20,     0,     0,
+       0,     0,     0,    21,    22,     0,    23,     0,    24,     0,
+       0,    25,    26,     0,    58,     0,    13,    73,     0,    74,
+       0,    14,    15,    16,    17,     0,   119,     0,     4,     5,
+       0,    20,     6,     7,   120,     0,     0,    21,    22,     0,
+      23,     0,    24,     0,     0,    25,    26,     0,    58,     0,
+       0,     0,     0,    74,   230,     0,     4,     5,     0,     0,
+       6,     7,   120,     0,    13,     0,     0,     0,     0,    14,
       15,    16,    17,     0,     0,     0,     0,     0,     0,    20,
-       0,     0,   204,     0,     0,    21,    22,     0,    23,     0,
-      24,   211,   212,    25,    26,     0,    61,     0,    13,     0,
-       0,     0,     0,    14,    15,    16,    17,     4,     5,     0,
-       0,     6,     7,    20,     0,     0,    98,     0,     0,    21,
+       0,     0,     0,     0,     0,    21,    22,     0,    23,     0,
+      24,     0,    13,    25,    26,  -118,    58,    14,    15,    16,
+      17,     0,    66,     0,     4,     5,     0,    20,     6,     7,
+       0,     0,     0,    21,    22,     0,    23,     0,    24,     0,
+       0,    25,    26,     0,    58,     0,     0,     0,     0,     0,
+     193,     0,     4,     5,     0,     0,     6,     7,     0,     0,
+      13,     0,     0,     0,     0,    14,    15,    16,    17,     0,
+       0,     0,     0,     0,     0,    20,     0,     0,     0,     0,
+       0,    21,    22,     0,    23,     0,    24,     0,    13,    25,
+      26,     0,    58,    14,    15,    16,    17,     0,     0,     0,
+       0,     4,     5,    20,     0,     6,     7,     0,     0,    21,
       22,     0,    23,     0,    24,     0,     0,    25,    26,     0,
-      61,     0,     0,     0,     0,     4,     5,     0,     0,     6,
-       7,   119,     0,    13,     0,     0,     0,     0,    14,    15,
-      16,    17,     0,     0,     0,     0,     0,    86,    20,     0,
-       0,     0,    87,     0,    21,    22,     0,    23,     0,    24,
-       0,    13,    25,    26,     0,    61,    14,    15,    16,    17,
-       4,     5,     0,     0,     6,     7,    20,     0,    88,    89,
-      90,     0,    21,    22,     0,    23,     0,    24,     0,     0,
-      25,    26,    91,    61,    92,    93,    94,     0,     4,     5,
-       0,     0,     6,     7,     0,     0,    13,     0,     0,     0,
-       0,    14,    15,    16,    17,     0,     0,     0,     0,     0,
-      86,    20,     0,     0,     0,    87,     0,    21,    22,     0,
-      23,     0,    24,     0,     0,    25,    26,     0,    61,    14,
-      15,    16,    17,    86,     0,     0,     0,     0,    87,    20,
-       0,    88,    89,    90,     0,    21,    22,     0,    23,     0,
-      24,     0,    86,    25,    66,    91,    61,    87,    93,    94,
-       0,     0,     0,     0,    88,    89,    90,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    77,     0,    91,   226,
-       0,    93,    94,    88,    89,    90,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    91,     0,     0,
-      93,    94
+      58,   204,     0,     0,     0,     0,     0,     0,     0,     0,
+     211,   212,     0,     0,     4,     5,     0,    13,     6,     7,
+     120,     0,    14,    15,    16,    17,     4,     5,     0,     0,
+       6,     7,    20,     0,     0,    99,     0,     0,    21,    22,
+       0,    23,     0,    24,     0,     0,    25,    26,     0,    58,
+      13,     0,     0,     0,     0,    14,    15,    16,    17,     4,
+       5,     0,    13,     6,     7,    20,     0,    14,    15,    16,
+      17,    21,    22,     0,    23,     0,    24,    20,     0,    25,
+      26,     0,    58,    21,    22,     0,    23,     0,    24,     0,
+       0,    25,    26,     0,    58,    13,     0,     0,     0,     0,
+      14,    15,    16,    17,     4,     5,     0,     0,     6,     7,
+      20,     0,     0,     0,     0,     0,    21,    22,     0,    23,
+       0,    24,     0,     0,    25,    26,    87,    58,     0,     0,
+       0,    88,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    14,    15,    16,    17,    87,
+       0,     0,     0,     0,    88,    20,     0,    89,    90,    91,
+      87,    21,    22,     0,    23,    88,    24,     0,     0,    25,
+      63,    92,    58,    93,    94,    95,     0,     0,     0,     0,
+      89,    90,    91,     0,     0,     0,     0,     0,     0,     0,
+       0,    89,    90,    91,    92,   227,     0,    94,    95,     0,
+       0,     0,     0,     0,     0,    92,     0,     0,    94,    95
 };
 
 static const yytype_int16 yycheck[] =
 {
-       1,    44,    29,    30,    46,    70,     1,    88,   223,   243,
-      87,    13,    14,    15,     1,     1,     4,    17,    41,    21,
-      22,    27,    24,    25,    69,    26,    34,     4,     1,     1,
-      69,     4,     4,    35,    29,     1,   113,   319,    21,    22,
-       1,    24,    43,    44,    72,     1,   328,    82,     1,    72,
-       6,    69,    35,     6,    74,    61,   121,    92,    59,    60,
-       1,     1,    44,    45,    53,    66,     6,   253,   133,   134,
-      57,    57,    72,   146,     1,    50,   149,     1,    69,   152,
-      58,    69,     3,    70,    70,   319,    87,    53,    89,    90,
-      91,    68,    53,   155,   328,    96,    97,    70,   100,   101,
+       1,    10,    67,    29,    88,    31,    82,    35,   244,    89,
+      80,    13,    14,    15,     1,     4,     1,     1,    41,    21,
+      22,     4,    24,    25,    53,    26,   320,    11,   223,    10,
+     114,    69,     1,    27,    36,   329,    53,     6,    69,    17,
+      72,   254,    69,    44,    79,    74,     1,    76,   143,    72,
+       1,   146,    74,     4,   149,    56,    57,   122,    93,    76,
+      21,    22,    63,    24,    58,   130,   131,     1,    50,    53,
+      57,     1,    57,    57,    17,    36,     6,    58,    59,    80,
+      69,     1,     1,    70,   320,    68,    70,    88,    73,    90,
+      91,    92,    76,   329,    72,   123,    97,    98,    53,   101,
      102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
-      76,   192,    53,    67,   122,    76,   117,   100,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,   110,   111,   131,
-      57,   346,    17,    57,   349,    76,   209,   210,   139,   325,
-     213,   142,   215,    70,    53,    10,   219,    53,   131,    73,
-      15,   146,    53,     1,   149,    10,     5,   152,    44,    45,
-      59,    60,   224,     3,     4,   167,     4,    76,   233,   184,
-     185,    39,   207,    74,   247,    76,    41,    25,    26,     9,
-     242,   216,    14,   184,   185,    41,    70,    72,    69,   262,
-     225,   253,    69,    58,    59,    69,   261,    69,    76,    10,
-     265,   266,     4,    58,    59,    53,    46,    47,   270,   252,
-     291,    70,   242,   214,   209,   210,    11,    27,   213,   254,
-     215,   263,    69,   258,   219,   226,   234,    75,   293,   272,
-      21,    71,    56,    75,   296,   236,   237,   302,   300,   240,
-     241,   303,   284,     7,   309,   322,   281,    58,    59,   311,
-       7,   252,   247,   288,   289,   317,    30,   292,   320,   322,
-       3,   237,    25,   167,   329,   305,   296,   262,   284,   337,
-     300,   272,   299,    -1,    -1,   310,   341,   312,    -1,   314,
-     315,   316,    -1,   318,    -1,    -1,   348,   317,   350,   351,
-     320,   353,    62,    63,    64,    -1,    10,    67,    -1,    -1,
-     301,    15,   303,   305,   339,    -1,    49,   342,    51,    52,
-     345,   313,   347,    -1,    -1,    -1,     0,     1,   348,     3,
-       4,   351,    -1,     7,     8,    -1,     1,    41,    42,    43,
-     313,    -1,    -1,    -1,    18,    19,    11,    -1,    -1,    -1,
-      -1,    55,    13,    14,    58,    59,    -1,    -1,    -1,     7,
-       8,     9,    36,    37,    38,    39,    70,    -1,    -1,    -1,
-      44,    45,    46,    47,    48,    -1,    -1,    -1,    -1,    53,
-      54,    -1,    -1,    44,    45,    -1,    60,    61,    53,    63,
-      -1,    65,    57,    54,    68,    69,    -1,    71,    -1,    -1,
-      74,     1,    76,     3,     4,    70,    54,     7,     8,    -1,
-      -1,    76,    60,    61,    -1,    63,    -1,    -1,    -1,    -1,
-      20,    -1,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    -1,    -1,    -1,    39,
-      40,    -1,    -1,    -1,    44,    45,    46,    47,    60,    61,
-      62,    63,    64,    53,    54,    67,    -1,    -1,    -1,    -1,
-      60,    61,    -1,    63,    -1,    65,    -1,    -1,    68,    69,
-      -1,    71,    -1,    -1,    74,    75,    76,     1,    -1,     3,
-       4,    -1,    -1,     7,     8,    60,    61,    62,    63,    64,
-      -1,    -1,    67,    -1,    -1,    -1,    20,    -1,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    -1,    -1,    -1,    39,    40,    -1,    -1,    -1,
-      44,    45,    46,    47,    -1,    -1,    -1,    -1,    -1,    53,
-      54,    -1,    -1,    -1,    -1,    -1,    60,    61,    -1,    63,
-      -1,    65,    -1,    -1,    68,    69,    -1,    71,    -1,    -1,
-      74,    75,    76,     1,    -1,     3,     4,    -1,    -1,     7,
-       8,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    20,    -1,    22,    23,    24,    -1,    -1,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    -1,    -1,
-      -1,    39,    40,    -1,    -1,    -1,    44,    45,    46,    47,
-      10,     1,    -1,     3,     4,    15,    54,     7,     8,    -1,
-      -1,    11,    60,    61,    -1,    63,    -1,    65,    -1,    -1,
-      68,    69,    -1,    71,    -1,    -1,    74,    75,    76,    -1,
-      -1,    41,    42,    -1,    -1,    -1,    -1,    -1,    -1,    39,
-      -1,    -1,    -1,    -1,    44,    45,    46,    47,    58,    59,
-      -1,    -1,    -1,    53,    54,    -1,    -1,    -1,    -1,    -1,
-      60,    61,    -1,    63,    -1,    65,    -1,    -1,    68,    69,
-      70,    71,    -1,     3,     4,    -1,    76,     7,     8,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      20,    -1,    22,    23,    24,    -1,    -1,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    -1,     3,     4,    39,
-      40,     7,     8,    -1,    44,    45,    46,    47,    -1,    -1,
-      -1,    -1,    -1,    -1,    54,    -1,    -1,    -1,    -1,    -1,
-      60,    61,    -1,    63,    -1,    65,    -1,    -1,    68,    69,
-      -1,    71,    -1,    39,    74,    -1,    76,    -1,    44,    45,
-      46,    47,    -1,     1,    -1,     3,     4,    -1,    54,     7,
-       8,     9,    -1,    -1,    60,    61,    -1,    63,    -1,    65,
-      -1,    -1,    68,    69,    -1,    71,    -1,    -1,    -1,    -1,
-      76,     1,    -1,     3,     4,    -1,    -1,     7,     8,     9,
-      -1,    39,    -1,    -1,    -1,    -1,    44,    45,    46,    47,
-      -1,    -1,    -1,    -1,    -1,    -1,    54,    -1,    -1,    -1,
-      -1,    -1,    60,    61,    -1,    63,    -1,    65,    -1,    39,
-      68,    69,    70,    71,    44,    45,    46,    47,    -1,     1,
-      -1,     3,     4,    -1,    54,     7,     8,    -1,    -1,    -1,
-      60,    61,    -1,    63,    -1,    65,    -1,    -1,    68,    69,
-      -1,    71,    -1,    -1,    -1,    -1,    -1,     1,    -1,     3,
-       4,    -1,    -1,     7,     8,    -1,    -1,    39,    -1,    -1,
-      -1,    -1,    44,    45,    46,    47,    -1,    -1,    -1,    -1,
-      -1,    -1,    54,    -1,    -1,    -1,    -1,    -1,    60,    61,
-      -1,    63,    -1,    65,    -1,    39,    68,    69,    -1,    71,
-      44,    45,    46,    47,    -1,    -1,    -1,    -1,     3,     4,
-      54,    -1,     7,     8,    -1,    -1,    60,    61,    -1,    63,
-      -1,    65,    -1,    -1,    68,    69,    -1,    71,    23,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    32,    33,    -1,
-      -1,    -1,     3,     4,    39,    -1,     7,     8,    -1,    44,
+     112,     1,   192,   326,   209,   210,   243,   118,   213,    70,
+     215,    76,     1,    57,   219,     1,   128,     6,     4,    72,
+       1,    44,    45,    53,    53,   136,    70,    53,   139,    29,
+     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
+     111,   112,   347,   248,     1,   350,    76,    76,    44,    45,
+      69,     7,     8,     9,    56,    57,   168,   128,   263,   234,
+     297,    58,   207,     3,   301,     3,     4,     4,    25,    26,
+      53,   216,    67,   253,   185,   186,    57,     5,   152,   265,
+     225,   318,   185,   186,   321,   204,    39,   262,     9,    70,
+      10,   266,   267,   273,    70,    15,    53,   235,    54,    14,
+     286,    69,   292,   214,    60,    61,    41,    63,    46,    47,
+     255,     3,   349,    76,   259,   352,   227,    69,    75,   294,
+     239,    41,    42,    69,    69,   244,   237,   238,   303,   323,
+     241,   242,    27,    71,    70,   310,    11,   282,    58,    59,
+      10,    21,   253,   143,   289,   290,   146,    69,   293,   149,
+     224,    10,    56,     7,     7,   330,    15,    49,    75,    51,
+      52,   323,   273,    31,   300,   238,   311,   342,   313,   243,
+     315,   316,   317,    10,   319,   306,    10,    25,    15,   286,
+     254,    15,    41,    42,    43,    62,    63,    64,    58,    59,
+      67,   302,   338,   304,   306,   340,    55,   271,   343,    58,
+      59,   346,   314,   348,    41,    42,    43,    41,   168,   209,
+     210,    -1,    -1,   213,    -1,   215,    -1,    76,    55,   219,
+      -1,    58,    59,   297,    58,    59,    -1,   301,    13,    14,
+     304,    -1,    -1,    70,    -1,    -1,    -1,    -1,   312,    -1,
+      -1,    -1,    -1,   314,   318,    -1,    -1,   321,   248,     0,
+       1,    -1,     3,     4,    -1,    -1,     7,     8,    -1,    44,
+      45,    -1,    -1,   263,    -1,    -1,    -1,    18,    19,    54,
+      -1,    -1,    -1,    -1,    -1,   349,    -1,   351,   352,    -1,
+     354,    -1,    -1,    -1,    -1,    36,    37,    38,    39,    -1,
+      -1,    -1,    -1,    44,    45,    46,    47,    48,    -1,    -1,
+      -1,    -1,    53,    54,    60,    61,    62,    63,    64,    60,
+      61,    67,    63,    -1,    65,    -1,    -1,    68,    69,    -1,
+      71,    -1,    -1,    74,     1,    76,     3,     4,    -1,    -1,
+       7,     8,    60,    61,    62,    63,    64,    -1,    -1,    67,
+      -1,    -1,    -1,    20,    -1,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    -1,
+      -1,    -1,    39,    40,    -1,    -1,    -1,    44,    45,    46,
+      47,    -1,    -1,    -1,    -1,    -1,    53,    54,    -1,    -1,
+      -1,    -1,    -1,    60,    61,    -1,    63,    -1,    65,    -1,
+      -1,    68,    69,    -1,    71,    -1,    -1,    74,    75,    76,
+       1,    -1,     3,     4,    -1,    -1,     7,     8,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    20,
+      -1,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    -1,    -1,    -1,    39,    40,
+      -1,    -1,    -1,    44,    45,    46,    47,    -1,    -1,    -1,
+      -1,    -1,    53,    54,    -1,    -1,    -1,    -1,    -1,    60,
+      61,    -1,    63,    -1,    65,    -1,    -1,    68,    69,    -1,
+      71,    -1,    -1,    74,    75,    76,     1,    -1,     3,     4,
+      -1,    -1,     7,     8,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    20,    -1,    22,    23,    24,
+      -1,    -1,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    -1,    -1,    -1,    39,    40,    -1,    -1,    -1,    44,
+      45,    46,    47,    -1,     1,    -1,     3,     4,    -1,    54,
+       7,     8,    -1,    -1,    11,    60,    61,    -1,    63,    -1,
+      65,    -1,    -1,    68,    69,    -1,    71,    -1,    -1,    74,
+      75,    76,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    39,    -1,    -1,    -1,    -1,    44,    45,    46,
+      47,    -1,    -1,    -1,    -1,    -1,    53,    54,    -1,    -1,
+      -1,    -1,    -1,    60,    61,    -1,    63,    -1,    65,    -1,
+      -1,    68,    69,    70,    71,    -1,     3,     4,    -1,    76,
+       7,     8,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    20,    -1,    22,    23,    24,    -1,    -1,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    -1,
+       3,     4,    39,    40,     7,     8,    -1,    44,    45,    46,
+      47,    -1,    -1,    -1,    -1,    -1,    -1,    54,    -1,    -1,
+      -1,    -1,    -1,    60,    61,    -1,    63,    -1,    65,    -1,
+      -1,    68,    69,    -1,    71,    -1,    39,    74,    -1,    76,
+      -1,    44,    45,    46,    47,    -1,     1,    -1,     3,     4,
+      -1,    54,     7,     8,     9,    -1,    -1,    60,    61,    -1,
+      63,    -1,    65,    -1,    -1,    68,    69,    -1,    71,    -1,
+      -1,    -1,    -1,    76,     1,    -1,     3,     4,    -1,    -1,
+       7,     8,     9,    -1,    39,    -1,    -1,    -1,    -1,    44,
       45,    46,    47,    -1,    -1,    -1,    -1,    -1,    -1,    54,
-      -1,    -1,    23,    -1,    -1,    60,    61,    -1,    63,    -1,
-      65,    32,    33,    68,    69,    -1,    71,    -1,    39,    -1,
-      -1,    -1,    -1,    44,    45,    46,    47,     3,     4,    -1,
-      -1,     7,     8,    54,    -1,    -1,    12,    -1,    -1,    60,
+      -1,    -1,    -1,    -1,    -1,    60,    61,    -1,    63,    -1,
+      65,    -1,    39,    68,    69,    70,    71,    44,    45,    46,
+      47,    -1,     1,    -1,     3,     4,    -1,    54,     7,     8,
+      -1,    -1,    -1,    60,    61,    -1,    63,    -1,    65,    -1,
+      -1,    68,    69,    -1,    71,    -1,    -1,    -1,    -1,    -1,
+       1,    -1,     3,     4,    -1,    -1,     7,     8,    -1,    -1,
+      39,    -1,    -1,    -1,    -1,    44,    45,    46,    47,    -1,
+      -1,    -1,    -1,    -1,    -1,    54,    -1,    -1,    -1,    -1,
+      -1,    60,    61,    -1,    63,    -1,    65,    -1,    39,    68,
+      69,    -1,    71,    44,    45,    46,    47,    -1,    -1,    -1,
+      -1,     3,     4,    54,    -1,     7,     8,    -1,    -1,    60,
       61,    -1,    63,    -1,    65,    -1,    -1,    68,    69,    -1,
-      71,    -1,    -1,    -1,    -1,     3,     4,    -1,    -1,     7,
-       8,     9,    -1,    39,    -1,    -1,    -1,    -1,    44,    45,
-      46,    47,    -1,    -1,    -1,    -1,    -1,    10,    54,    -1,
-      -1,    -1,    15,    -1,    60,    61,    -1,    63,    -1,    65,
-      -1,    39,    68,    69,    -1,    71,    44,    45,    46,    47,
-       3,     4,    -1,    -1,     7,     8,    54,    -1,    41,    42,
-      43,    -1,    60,    61,    -1,    63,    -1,    65,    -1,    -1,
-      68,    69,    55,    71,    57,    58,    59,    -1,     3,     4,
-      -1,    -1,     7,     8,    -1,    -1,    39,    -1,    -1,    -1,
-      -1,    44,    45,    46,    47,    -1,    -1,    -1,    -1,    -1,
-      10,    54,    -1,    -1,    -1,    15,    -1,    60,    61,    -1,
-      63,    -1,    65,    -1,    -1,    68,    69,    -1,    71,    44,
-      45,    46,    47,    10,    -1,    -1,    -1,    -1,    15,    54,
-      -1,    41,    42,    43,    -1,    60,    61,    -1,    63,    -1,
-      65,    -1,    10,    68,    69,    55,    71,    15,    58,    59,
-      -1,    -1,    -1,    -1,    41,    42,    43,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    76,    -1,    55,    56,
-      -1,    58,    59,    41,    42,    43,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    55,    -1,    -1,
-      58,    59
+      71,    23,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      32,    33,    -1,    -1,     3,     4,    -1,    39,     7,     8,
+       9,    -1,    44,    45,    46,    47,     3,     4,    -1,    -1,
+       7,     8,    54,    -1,    -1,    12,    -1,    -1,    60,    61,
+      -1,    63,    -1,    65,    -1,    -1,    68,    69,    -1,    71,
+      39,    -1,    -1,    -1,    -1,    44,    45,    46,    47,     3,
+       4,    -1,    39,     7,     8,    54,    -1,    44,    45,    46,
+      47,    60,    61,    -1,    63,    -1,    65,    54,    -1,    68,
+      69,    -1,    71,    60,    61,    -1,    63,    -1,    65,    -1,
+      -1,    68,    69,    -1,    71,    39,    -1,    -1,    -1,    -1,
+      44,    45,    46,    47,     3,     4,    -1,    -1,     7,     8,
+      54,    -1,    -1,    -1,    -1,    -1,    60,    61,    -1,    63,
+      -1,    65,    -1,    -1,    68,    69,    10,    71,    -1,    -1,
+      -1,    15,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    44,    45,    46,    47,    10,
+      -1,    -1,    -1,    -1,    15,    54,    -1,    41,    42,    43,
+      10,    60,    61,    -1,    63,    15,    65,    -1,    -1,    68,
+      69,    55,    71,    57,    58,    59,    -1,    -1,    -1,    -1,
+      41,    42,    43,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    41,    42,    43,    55,    56,    -1,    58,    59,    -1,
+      -1,    -1,    -1,    -1,    -1,    55,    -1,    -1,    58,    59
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1137,39 +1131,39 @@ static const yytype_uint8 yystos[] =
        0,    78,     0,     1,     3,     4,     7,     8,    18,    19,
       36,    37,    38,    39,    44,    45,    46,    47,    48,    53,
       54,    60,    61,    63,    65,    68,    69,    71,    79,    83,
-      87,    89,    92,   110,   121,   125,   126,   127,   128,   129,
-     130,   138,   139,    69,    72,   135,   136,   137,     3,     4,
-      46,    47,    71,    85,    86,   131,   139,   139,   139,    69,
-      69,    71,   126,   139,   126,   126,    69,   128,   139,     1,
-     117,   121,    49,    51,    52,   130,    74,    76,    84,    94,
-     110,   141,   145,    84,    90,    53,    10,    15,    41,    42,
-      43,    55,    57,    58,    59,   123,   124,   147,    12,   126,
-      60,    61,    62,    63,    64,    67,    60,    61,    62,    63,
-      64,    67,    13,    14,    44,    45,    54,   122,     1,     9,
-      91,   118,   119,   120,   121,   117,   121,    17,   135,    50,
-      69,    58,   112,   118,   118,   121,    44,    45,   140,     1,
-      70,   143,   147,   143,     1,     6,    80,     1,     6,    81,
-       1,     6,    82,   110,   111,    93,   111,     5,    91,   121,
-     138,   121,   121,   121,   111,   121,   121,    39,   126,   126,
-     126,   126,   126,   126,   126,   126,   126,   126,   126,   126,
-      91,    14,   121,   143,     1,   147,    73,    88,   126,   143,
-     143,   121,    41,     1,   121,     1,    94,     1,    94,     1,
-      94,     1,    20,    22,    23,    24,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    40,    75,    95,    96,    98,
-     105,   109,   121,   141,   142,   145,    56,   131,   120,     1,
-     120,     1,     4,   113,   114,   138,    69,    97,     4,    69,
-      69,    69,   111,    69,    94,    94,    94,   115,   121,    94,
-     111,    94,    99,    93,   144,   145,   111,   121,   143,     1,
-     147,   121,   115,   100,     4,   121,   121,    95,     4,    98,
-     101,    94,    69,   106,   116,   117,   142,   111,   111,     1,
-       4,   143,    94,   132,   133,   134,   135,    70,   143,   143,
-      27,    41,   145,   117,    11,   107,   111,    17,   134,   111,
-     111,    69,   138,   111,   143,   108,    95,   141,    95,   121,
-     143,   121,   145,   125,    21,   102,   143,   111,   145,   111,
-     111,     1,    25,    26,   103,   111,   111,    95,   111,   101,
-      95,     7,     8,    60,    61,    89,    91,   104,    56,   146,
-     142,   101,   143,     7,     7,   146,   111,   143,   111,   111,
-      93,   111,    95,    93,    95
+      85,    88,    90,    93,   111,   122,   126,   127,   128,   129,
+     130,   131,   139,   140,    69,     3,    46,    47,    71,    85,
+      86,    87,   132,   140,   140,   140,    69,    69,    71,   127,
+     140,   127,   127,    69,   129,   140,     1,   118,   122,    49,
+      51,    52,   131,    74,    76,    84,    95,   111,   142,   146,
+      72,   136,   137,   138,    84,    91,    53,    10,    15,    41,
+      42,    43,    55,    57,    58,    59,   124,   125,   148,    12,
+     127,    60,    61,    62,    63,    64,    67,    60,    61,    62,
+      63,    64,    67,    13,    14,    44,    45,    54,   123,     1,
+       9,    92,   119,   120,   121,   122,    50,    69,    58,   113,
+     119,   119,   122,    44,    45,   141,     1,    70,   144,   148,
+     144,     1,     6,    80,     1,     6,    81,     1,     6,    82,
+     111,   112,    94,   112,   118,   122,    17,   136,     5,    92,
+     122,   139,   122,   122,   122,   112,   122,   122,    39,   127,
+     127,   127,   127,   127,   127,   127,   127,   127,   127,   127,
+     127,    92,    14,   122,   144,     1,   148,    89,   127,   144,
+     144,   122,    41,     1,   122,     1,    95,     1,    95,     1,
+      95,     1,    20,    22,    23,    24,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    40,    75,    96,    97,    99,
+     106,   110,   122,   142,   143,   146,    73,    56,   132,   121,
+       1,   121,     1,     4,   114,   115,   139,    69,    98,    69,
+      85,    69,    69,   112,    69,    95,    95,    95,   116,   122,
+      95,   112,    95,   100,    94,   145,   146,   112,   122,   144,
+       1,   148,   122,   116,    85,   101,   122,   122,    96,    85,
+      99,   102,    95,    69,   107,   117,   118,   143,   112,   112,
+       1,     4,   144,    95,    70,   133,   134,   135,   136,   144,
+     144,    27,    41,   146,   118,    11,   108,   112,    17,   135,
+     112,   112,    69,   139,   112,   144,   109,    96,   142,    96,
+     122,   144,   122,   146,   126,    21,   103,   144,   112,   146,
+     112,   112,     1,    25,    26,   104,   112,   112,    96,   112,
+     102,    96,     7,     8,    60,    61,    90,    92,   105,    56,
+     147,   143,   102,   144,     7,     7,   147,   112,   144,   112,
+     112,    94,   112,    96,    94,    96
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
@@ -1178,24 +1172,24 @@ static const yytype_uint8 yyr1[] =
        0,    77,    78,    78,    78,    78,    78,    79,    79,    79,
       79,    79,    79,    80,    80,    80,    81,    81,    81,    82,
       82,    82,    83,    83,    83,    83,    83,    83,    83,    84,
-      85,    85,    85,    85,    86,    86,    88,    87,    90,    89,
-      91,    92,    92,    93,    93,    93,    94,    94,    95,    95,
-      95,    95,    95,    95,    95,    95,    95,    95,    96,    96,
-      96,    96,    96,    97,    96,    96,    99,    98,   100,    98,
-      98,    98,   101,   101,   102,   102,   102,   103,   103,   104,
-     104,   104,   104,   104,   104,   105,   105,   106,   106,   107,
-     108,   107,   109,   109,   110,   110,   111,   111,   112,   112,
-     113,   113,   114,   114,   114,   114,   114,   115,   115,   116,
-     116,   117,   117,   117,   117,   117,   117,   118,   118,   119,
-     119,   119,   119,   119,   119,   120,   120,   121,   121,   121,
-     121,   121,   121,   121,   121,   121,   121,   122,   122,   122,
-     123,   123,   124,   124,   125,   125,   125,   126,   126,   126,
-     126,   126,   126,   126,   126,   126,   126,   126,   127,   127,
-     127,   127,   127,   127,   127,   128,   128,   128,   128,   128,
-     128,   128,   128,   128,   128,   128,   128,   128,   128,   129,
-     129,   130,   131,   131,   132,   132,   133,   133,   134,   135,
-     136,   136,   137,   138,   138,   139,   139,   140,   140,   140,
-     141,   142,   143,   144,   144,   145,   146,   147
+      85,    86,    86,    86,    86,    87,    87,    89,    88,    91,
+      90,    92,    93,    93,    94,    94,    94,    95,    95,    96,
+      96,    96,    96,    96,    96,    96,    96,    96,    96,    97,
+      97,    97,    97,    97,    98,    97,    97,   100,    99,   101,
+      99,    99,    99,   102,   102,   103,   103,   103,   104,   104,
+     105,   105,   105,   105,   105,   105,   106,   106,   107,   107,
+     108,   109,   108,   110,   110,   111,   111,   112,   112,   113,
+     113,   114,   114,   115,   115,   115,   115,   115,   116,   116,
+     117,   117,   118,   118,   118,   118,   118,   118,   119,   119,
+     120,   120,   120,   120,   120,   120,   121,   121,   122,   122,
+     122,   122,   122,   122,   122,   122,   122,   122,   123,   123,
+     123,   124,   124,   125,   125,   126,   126,   126,   127,   127,
+     127,   127,   127,   127,   127,   127,   127,   127,   127,   128,
+     128,   128,   128,   128,   128,   128,   129,   129,   129,   129,
+     129,   129,   129,   129,   129,   129,   129,   129,   129,   129,
+     130,   130,   131,   132,   132,   133,   133,   134,   134,   135,
+     136,   137,   137,   138,   139,   139,   140,   140,   141,   141,
+     141,   142,   143,   144,   145,   145,   146,   147,   148
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -1204,24 +1198,24 @@ static const yytype_uint8 yyr2[] =
        0,     2,     0,     2,     2,     2,     2,     2,     2,     2,
        4,     4,     4,     1,     2,     1,     1,     2,     1,     1,
        2,     1,     0,     1,     3,     1,     1,     1,     1,     5,
-       1,     1,     1,     2,     1,     1,     0,     7,     0,     3,
-       1,     1,     1,     0,     2,     2,     1,     2,     2,     3,
-       1,     9,     6,     8,     8,    12,    11,     1,     2,     2,
-       2,     2,     3,     0,     4,     2,     0,     4,     0,     4,
-       4,     1,     0,     1,     0,     2,     2,     5,     4,     1,
-       2,     2,     1,     1,     1,     1,     1,     1,     3,     0,
-       0,     3,     6,     9,     1,     2,     0,     1,     0,     2,
-       0,     1,     1,     3,     1,     2,     3,     0,     1,     0,
-       1,     1,     3,     1,     2,     3,     3,     0,     1,     1,
-       3,     1,     2,     3,     3,     1,     1,     3,     3,     3,
-       3,     3,     3,     3,     3,     5,     1,     1,     1,     2,
-       1,     1,     1,     1,     1,     1,     2,     1,     3,     3,
-       3,     3,     3,     3,     3,     2,     2,     5,     4,     3,
-       3,     3,     3,     3,     3,     1,     2,     3,     4,     4,
-       1,     1,     1,     2,     2,     1,     1,     2,     2,     1,
-       2,     4,     0,     1,     0,     2,     1,     2,     1,     3,
-       1,     2,     2,     1,     2,     1,     3,     1,     1,     0,
-       2,     2,     1,     0,     1,     1,     1,     2
+       1,     1,     1,     1,     2,     1,     1,     0,     7,     0,
+       3,     1,     1,     1,     0,     2,     2,     1,     2,     2,
+       3,     1,     9,     6,     8,     8,    12,    11,     1,     2,
+       2,     2,     2,     3,     0,     4,     2,     0,     4,     0,
+       4,     4,     1,     0,     1,     0,     2,     2,     5,     4,
+       1,     2,     2,     1,     1,     1,     1,     1,     1,     3,
+       0,     0,     3,     6,     9,     1,     2,     0,     1,     0,
+       2,     0,     1,     1,     3,     1,     2,     3,     0,     1,
+       0,     1,     1,     3,     1,     2,     3,     3,     0,     1,
+       1,     3,     1,     2,     3,     3,     1,     1,     3,     3,
+       3,     3,     3,     3,     3,     3,     5,     1,     1,     1,
+       2,     1,     1,     1,     1,     1,     1,     2,     1,     3,
+       3,     3,     3,     3,     3,     3,     2,     2,     5,     4,
+       3,     3,     3,     3,     3,     3,     1,     2,     3,     4,
+       4,     1,     1,     1,     2,     2,     1,     1,     2,     2,
+       1,     2,     4,     0,     1,     0,     2,     1,     2,     1,
+       3,     1,     2,     2,     1,     2,     1,     3,     1,     1,
+       0,     2,     2,     1,     0,     1,     1,     1,     2
 };
 
 
@@ -1900,7 +1894,7 @@ yyreduce:
         case 2:
 #line 231 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = NULL; }
-#line 1904 "awkgram.c" /* yacc.c:1645  */
+#line 1898 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 3:
@@ -1909,7 +1903,7 @@ yyreduce:
                rule = 0;
                yyerrok;
          }
-#line 1913 "awkgram.c" /* yacc.c:1645  */
+#line 1907 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 4:
@@ -1923,7 +1917,7 @@ yyreduce:
                }
                (yyval) = (yyvsp[-1]);
          }
-#line 1927 "awkgram.c" /* yacc.c:1645  */
+#line 1921 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 5:
@@ -1931,7 +1925,7 @@ yyreduce:
     {
                next_sourcefile();
          }
-#line 1935 "awkgram.c" /* yacc.c:1645  */
+#line 1929 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 6:
@@ -1944,7 +1938,7 @@ yyreduce:
                 */
                /* yyerrok; */
          }
-#line 1948 "awkgram.c" /* yacc.c:1645  */
+#line 1942 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 7:
@@ -1956,7 +1950,7 @@ yyreduce:
                        pending_comment = NULL;
                }
          }
-#line 1960 "awkgram.c" /* yacc.c:1645  */
+#line 1954 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 8:
@@ -1974,7 +1968,7 @@ yyreduce:
                        (void) append_rule((yyvsp[-1]), NULL);
                }
          }
-#line 1978 "awkgram.c" /* yacc.c:1645  */
+#line 1972 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 9:
@@ -1989,7 +1983,7 @@ yyreduce:
                }
                yyerrok;
          }
-#line 1993 "awkgram.c" /* yacc.c:1645  */
+#line 1987 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 10:
@@ -2003,7 +1997,7 @@ yyreduce:
                }
                yyerrok;
          }
-#line 2007 "awkgram.c" /* yacc.c:1645  */
+#line 2001 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 11:
@@ -2017,7 +2011,7 @@ yyreduce:
                }
                yyerrok;
          }
-#line 2021 "awkgram.c" /* yacc.c:1645  */
+#line 2015 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 12:
@@ -2031,7 +2025,7 @@ yyreduce:
 
                yyerrok;
          }
-#line 2035 "awkgram.c" /* yacc.c:1645  */
+#line 2029 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 13:
@@ -2045,19 +2039,19 @@ yyreduce:
                bcfree((yyvsp[0]));
                (yyval) = (INSTRUCTION *) srcfile;
          }
-#line 2049 "awkgram.c" /* yacc.c:1645  */
+#line 2043 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 14:
 #line 340 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = NULL; }
-#line 2055 "awkgram.c" /* yacc.c:1645  */
+#line 2049 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 15:
 #line 342 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = NULL; }
-#line 2061 "awkgram.c" /* yacc.c:1645  */
+#line 2055 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 16:
@@ -2071,37 +2065,37 @@ yyreduce:
                bcfree((yyvsp[0]));
                (yyval) = (INSTRUCTION *) srcfile;
          }
-#line 2075 "awkgram.c" /* yacc.c:1645  */
+#line 2069 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 17:
 #line 357 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = NULL; }
-#line 2081 "awkgram.c" /* yacc.c:1645  */
+#line 2075 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 18:
 #line 359 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = NULL; }
-#line 2087 "awkgram.c" /* yacc.c:1645  */
+#line 2081 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 19:
 #line 364 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); }
-#line 2093 "awkgram.c" /* yacc.c:1645  */
+#line 2087 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 20:
 #line 366 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = NULL; }
-#line 2099 "awkgram.c" /* yacc.c:1645  */
+#line 2093 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 21:
 #line 368 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = NULL; }
-#line 2105 "awkgram.c" /* yacc.c:1645  */
+#line 2099 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 22:
@@ -2110,7 +2104,7 @@ yyreduce:
                rule = Rule;
                (yyval) = NULL;
          }
-#line 2114 "awkgram.c" /* yacc.c:1645  */
+#line 2108 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 23:
@@ -2118,7 +2112,7 @@ yyreduce:
     {
                rule = Rule;
          }
-#line 2122 "awkgram.c" /* yacc.c:1645  */
+#line 2116 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 24:
@@ -2152,7 +2146,7 @@ yyreduce:
                        (yyval) = list_append(list_merge((yyvsp[-2]), 
(yyvsp[0])), tp);
                rule = Rule;
          }
-#line 2156 "awkgram.c" /* yacc.c:1645  */
+#line 2150 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 25:
@@ -2168,7 +2162,7 @@ yyreduce:
                (yyvsp[0])->source_file = source;
                (yyval) = (yyvsp[0]);
          }
-#line 2172 "awkgram.c" /* yacc.c:1645  */
+#line 2166 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 26:
@@ -2184,7 +2178,7 @@ yyreduce:
                (yyvsp[0])->source_file = source;
                (yyval) = (yyvsp[0]);
          }
-#line 2188 "awkgram.c" /* yacc.c:1645  */
+#line 2182 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 27:
@@ -2194,7 +2188,7 @@ yyreduce:
                (yyvsp[0])->source_file = source;
                (yyval) = (yyvsp[0]);
          }
-#line 2198 "awkgram.c" /* yacc.c:1645  */
+#line 2192 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 28:
@@ -2204,7 +2198,7 @@ yyreduce:
                (yyvsp[0])->source_file = source;
                (yyval) = (yyvsp[0]);
          }
-#line 2208 "awkgram.c" /* yacc.c:1645  */
+#line 2202 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 29:
@@ -2223,7 +2217,7 @@ yyreduce:
 
                (yyval) = ip;
          }
-#line 2227 "awkgram.c" /* yacc.c:1645  */
+#line 2221 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 30:
@@ -2238,11 +2232,11 @@ yyreduce:
                }
                (yyval) = (yyvsp[0]);
          }
-#line 2242 "awkgram.c" /* yacc.c:1645  */
+#line 2236 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 31:
-#line 481 "awkgram.y" /* yacc.c:1645  */
+  case 32:
+#line 485 "awkgram.y" /* yacc.c:1645  */
     {
                const char *name = (yyvsp[0])->lextok;
                char *qname = qualify_name(name, strlen(name));
@@ -2253,36 +2247,36 @@ yyreduce:
                }
                (yyval) = (yyvsp[0]);
          }
-#line 2257 "awkgram.c" /* yacc.c:1645  */
+#line 2251 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 32:
-#line 492 "awkgram.y" /* yacc.c:1645  */
+  case 33:
+#line 496 "awkgram.y" /* yacc.c:1645  */
     {
                yyerror(_("`%s' is a built-in function, it cannot be 
redefined"),
                                        tokstart);
                YYABORT;
          }
-#line 2267 "awkgram.c" /* yacc.c:1645  */
+#line 2261 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 33:
-#line 498 "awkgram.y" /* yacc.c:1645  */
+  case 34:
+#line 502 "awkgram.y" /* yacc.c:1645  */
     {
                (yyval) = (yyvsp[0]);
                at_seen = false;
          }
-#line 2276 "awkgram.c" /* yacc.c:1645  */
+#line 2270 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 36:
-#line 510 "awkgram.y" /* yacc.c:1645  */
+  case 37:
+#line 514 "awkgram.y" /* yacc.c:1645  */
     { want_param_names = FUNC_HEADER; }
-#line 2282 "awkgram.c" /* yacc.c:1645  */
+#line 2276 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 37:
-#line 511 "awkgram.y" /* yacc.c:1645  */
+  case 38:
+#line 515 "awkgram.y" /* yacc.c:1645  */
     {
                INSTRUCTION *func_comment = NULL;
                // Merge any comments found in the parameter list with those
@@ -2308,17 +2302,17 @@ yyreduce:
                (yyval) = (yyvsp[-6]);
                want_param_names = FUNC_BODY;
          }
-#line 2312 "awkgram.c" /* yacc.c:1645  */
+#line 2306 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 38:
-#line 544 "awkgram.y" /* yacc.c:1645  */
+  case 39:
+#line 548 "awkgram.y" /* yacc.c:1645  */
     { want_regexp = true; }
-#line 2318 "awkgram.c" /* yacc.c:1645  */
+#line 2312 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 39:
-#line 546 "awkgram.y" /* yacc.c:1645  */
+  case 40:
+#line 550 "awkgram.y" /* yacc.c:1645  */
     {
                  NODE *n, *exp;
                  char *re;
@@ -2347,11 +2341,11 @@ yyreduce:
                  (yyval)->opcode = Op_match_rec;
                  (yyval)->memory = n;
                }
-#line 2351 "awkgram.c" /* yacc.c:1645  */
+#line 2345 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 40:
-#line 578 "awkgram.y" /* yacc.c:1645  */
+  case 41:
+#line 582 "awkgram.y" /* yacc.c:1645  */
     {
                  char *re;
                  size_t len;
@@ -2364,23 +2358,23 @@ yyreduce:
                  (yyval)->opcode = Op_push_re;
                  (yyval)->memory = make_typed_regex(re, len);
                }
-#line 2368 "awkgram.c" /* yacc.c:1645  */
+#line 2362 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 41:
-#line 593 "awkgram.y" /* yacc.c:1645  */
+  case 42:
+#line 597 "awkgram.y" /* yacc.c:1645  */
     { bcfree((yyvsp[0])); }
-#line 2374 "awkgram.c" /* yacc.c:1645  */
+#line 2368 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 43:
-#line 599 "awkgram.y" /* yacc.c:1645  */
+  case 44:
+#line 603 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = NULL; }
-#line 2380 "awkgram.c" /* yacc.c:1645  */
+#line 2374 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 44:
-#line 601 "awkgram.y" /* yacc.c:1645  */
+  case 45:
+#line 605 "awkgram.y" /* yacc.c:1645  */
     {
                if ((yyvsp[0]) == NULL) {
                        (yyval) = (yyvsp[-1]);
@@ -2400,29 +2394,29 @@ yyreduce:
 
                yyerrok;
          }
-#line 2404 "awkgram.c" /* yacc.c:1645  */
-    break;
-
-  case 45:
-#line 621 "awkgram.y" /* yacc.c:1645  */
-    {  (yyval) = NULL; }
-#line 2410 "awkgram.c" /* yacc.c:1645  */
+#line 2398 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 46:
 #line 625 "awkgram.y" /* yacc.c:1645  */
-    { (yyval) = (yyvsp[0]); }
-#line 2416 "awkgram.c" /* yacc.c:1645  */
+    {  (yyval) = NULL; }
+#line 2404 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 47:
-#line 626 "awkgram.y" /* yacc.c:1645  */
+#line 629 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); }
-#line 2422 "awkgram.c" /* yacc.c:1645  */
+#line 2410 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 48:
-#line 631 "awkgram.y" /* yacc.c:1645  */
+#line 630 "awkgram.y" /* yacc.c:1645  */
+    { (yyval) = (yyvsp[0]); }
+#line 2416 "awkgram.c" /* yacc.c:1645  */
+    break;
+
+  case 49:
+#line 635 "awkgram.y" /* yacc.c:1645  */
     {
                if ((yyvsp[0]) != NULL) {
                        INSTRUCTION *ip;
@@ -2433,31 +2427,31 @@ yyreduce:
                } else
                        (yyval) = NULL;
          }
-#line 2437 "awkgram.c" /* yacc.c:1645  */
+#line 2431 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 49:
-#line 642 "awkgram.y" /* yacc.c:1645  */
+  case 50:
+#line 646 "awkgram.y" /* yacc.c:1645  */
     {
                trailing_comment = (yyvsp[0]);  // NULL or comment
                (yyval) = make_braced_statements((yyvsp[-2]), (yyvsp[-1]), 
(yyvsp[0]));
          }
-#line 2446 "awkgram.c" /* yacc.c:1645  */
+#line 2440 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 50:
-#line 647 "awkgram.y" /* yacc.c:1645  */
+  case 51:
+#line 651 "awkgram.y" /* yacc.c:1645  */
     {
                if (do_pretty_print)
                        (yyval) = list_prepend((yyvsp[0]), 
instruction(Op_exec_count));
                else
                        (yyval) = (yyvsp[0]);
          }
-#line 2457 "awkgram.c" /* yacc.c:1645  */
+#line 2451 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 51:
-#line 654 "awkgram.y" /* yacc.c:1645  */
+  case 52:
+#line 658 "awkgram.y" /* yacc.c:1645  */
     {
                INSTRUCTION *dflt, *curr = NULL, *cexp, *cstmt;
                INSTRUCTION *ip, *nextc, *tbreak;
@@ -2565,11 +2559,11 @@ yyreduce:
                break_allowed--;
                fix_break_continue(ip, tbreak, NULL);
          }
-#line 2569 "awkgram.c" /* yacc.c:1645  */
+#line 2563 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 52:
-#line 762 "awkgram.y" /* yacc.c:1645  */
+  case 53:
+#line 766 "awkgram.y" /* yacc.c:1645  */
     {
                /*
                 *    -----------------
@@ -2620,11 +2614,11 @@ yyreduce:
                continue_allowed--;
                fix_break_continue(ip, tbreak, tcont);
          }
-#line 2624 "awkgram.c" /* yacc.c:1645  */
+#line 2618 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 53:
-#line 813 "awkgram.y" /* yacc.c:1645  */
+  case 54:
+#line 817 "awkgram.y" /* yacc.c:1645  */
     {
                /*
                 *    -----------------
@@ -2674,11 +2668,11 @@ yyreduce:
                /* else
                        $1 and $4 are NULLs */
          }
-#line 2678 "awkgram.c" /* yacc.c:1645  */
+#line 2672 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 54:
-#line 863 "awkgram.y" /* yacc.c:1645  */
+  case 55:
+#line 867 "awkgram.y" /* yacc.c:1645  */
     {
                INSTRUCTION *ip;
                char *var_name = (yyvsp[-5])->lextok;
@@ -2804,11 +2798,11 @@ regular_loop:
                break_allowed--;
                continue_allowed--;
          }
-#line 2808 "awkgram.c" /* yacc.c:1645  */
+#line 2802 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 55:
-#line 989 "awkgram.y" /* yacc.c:1645  */
+  case 56:
+#line 993 "awkgram.y" /* yacc.c:1645  */
     {
                if ((yyvsp[-7]) != NULL) {
                        merge_comments((yyvsp[-7]), NULL);
@@ -2829,11 +2823,11 @@ regular_loop:
                break_allowed--;
                continue_allowed--;
          }
-#line 2833 "awkgram.c" /* yacc.c:1645  */
+#line 2827 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 56:
-#line 1010 "awkgram.y" /* yacc.c:1645  */
+  case 57:
+#line 1014 "awkgram.y" /* yacc.c:1645  */
     {
                if ((yyvsp[-6]) != NULL) {
                        merge_comments((yyvsp[-6]), NULL);
@@ -2854,22 +2848,22 @@ regular_loop:
                break_allowed--;
                continue_allowed--;
          }
-#line 2858 "awkgram.c" /* yacc.c:1645  */
+#line 2852 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 57:
-#line 1031 "awkgram.y" /* yacc.c:1645  */
+  case 58:
+#line 1035 "awkgram.y" /* yacc.c:1645  */
     {
                if (do_pretty_print)
                        (yyval) = list_prepend((yyvsp[0]), 
instruction(Op_exec_count));
                else
                        (yyval) = (yyvsp[0]);
          }
-#line 2869 "awkgram.c" /* yacc.c:1645  */
+#line 2863 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 58:
-#line 1041 "awkgram.y" /* yacc.c:1645  */
+  case 59:
+#line 1045 "awkgram.y" /* yacc.c:1645  */
     {
                if (! break_allowed)
                        error_ln((yyvsp[-1])->source_line,
@@ -2879,11 +2873,11 @@ regular_loop:
                if ((yyvsp[0]) != NULL)
                        (yyval) = list_append((yyval), (yyvsp[0]));
          }
-#line 2883 "awkgram.c" /* yacc.c:1645  */
+#line 2877 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 59:
-#line 1051 "awkgram.y" /* yacc.c:1645  */
+  case 60:
+#line 1055 "awkgram.y" /* yacc.c:1645  */
     {
                if (! continue_allowed)
                        error_ln((yyvsp[-1])->source_line,
@@ -2893,11 +2887,11 @@ regular_loop:
                if ((yyvsp[0]) != NULL)
                        (yyval) = list_append((yyval), (yyvsp[0]));
          }
-#line 2897 "awkgram.c" /* yacc.c:1645  */
+#line 2891 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 60:
-#line 1061 "awkgram.y" /* yacc.c:1645  */
+  case 61:
+#line 1065 "awkgram.y" /* yacc.c:1645  */
     {
                /* if inside function (rule = 0), resolve context at run-time */
                if (rule && rule != Rule)
@@ -2908,11 +2902,11 @@ regular_loop:
                if ((yyvsp[0]) != NULL)
                        (yyval) = list_append((yyval), (yyvsp[0]));
          }
-#line 2912 "awkgram.c" /* yacc.c:1645  */
+#line 2906 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 61:
-#line 1072 "awkgram.y" /* yacc.c:1645  */
+  case 62:
+#line 1076 "awkgram.y" /* yacc.c:1645  */
     {
                /* if inside function (rule = 0), resolve context at run-time */
                if (rule == BEGIN || rule == END || rule == ENDFILE)
@@ -2925,11 +2919,11 @@ regular_loop:
                if ((yyvsp[0]) != NULL)
                        (yyval) = list_append((yyval), (yyvsp[0]));
          }
-#line 2929 "awkgram.c" /* yacc.c:1645  */
+#line 2923 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 62:
-#line 1085 "awkgram.y" /* yacc.c:1645  */
+  case 63:
+#line 1089 "awkgram.y" /* yacc.c:1645  */
     {
                /* Initialize the two possible jump targets, the actual target
                 * is resolved at run-time.
@@ -2946,20 +2940,20 @@ regular_loop:
                if ((yyvsp[0]) != NULL)
                        (yyval) = list_append((yyval), (yyvsp[0]));
          }
-#line 2950 "awkgram.c" /* yacc.c:1645  */
+#line 2944 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 63:
-#line 1102 "awkgram.y" /* yacc.c:1645  */
+  case 64:
+#line 1106 "awkgram.y" /* yacc.c:1645  */
     {
                if (! in_function)
                        yyerror(_("`return' used outside function context"));
          }
-#line 2959 "awkgram.c" /* yacc.c:1645  */
+#line 2953 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 64:
-#line 1105 "awkgram.y" /* yacc.c:1645  */
+  case 65:
+#line 1109 "awkgram.y" /* yacc.c:1645  */
     {
                if ((yyvsp[-1]) == NULL) {
                        (yyval) = list_create((yyvsp[-3]));
@@ -2970,28 +2964,28 @@ regular_loop:
                if ((yyvsp[0]) != NULL)
                        (yyval) = list_append((yyval), (yyvsp[0]));
          }
-#line 2974 "awkgram.c" /* yacc.c:1645  */
+#line 2968 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 65:
-#line 1116 "awkgram.y" /* yacc.c:1645  */
+  case 66:
+#line 1120 "awkgram.y" /* yacc.c:1645  */
     {
                if ((yyvsp[0]) != NULL)
                        (yyval) = list_append((yyvsp[-1]), (yyvsp[0]));
                else
                        (yyval) = (yyvsp[-1]);
          }
-#line 2985 "awkgram.c" /* yacc.c:1645  */
+#line 2979 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 66:
-#line 1133 "awkgram.y" /* yacc.c:1645  */
+  case 67:
+#line 1137 "awkgram.y" /* yacc.c:1645  */
     { in_print = true; in_parens = 0; }
-#line 2991 "awkgram.c" /* yacc.c:1645  */
+#line 2985 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 67:
-#line 1134 "awkgram.y" /* yacc.c:1645  */
+  case 68:
+#line 1138 "awkgram.y" /* yacc.c:1645  */
     {
                /*
                 * Optimization: plain `print' has no expression list, so $3 is 
null.
@@ -3088,17 +3082,17 @@ regular_print:
                        }
                }
          }
-#line 3092 "awkgram.c" /* yacc.c:1645  */
+#line 3086 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 68:
-#line 1231 "awkgram.y" /* yacc.c:1645  */
+  case 69:
+#line 1235 "awkgram.y" /* yacc.c:1645  */
     { sub_counter = 0; }
-#line 3098 "awkgram.c" /* yacc.c:1645  */
+#line 3092 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 69:
-#line 1232 "awkgram.y" /* yacc.c:1645  */
+  case 70:
+#line 1236 "awkgram.y" /* yacc.c:1645  */
     {
                char *arr = (yyvsp[-2])->lextok;
 
@@ -3131,11 +3125,11 @@ regular_print:
                        (yyval) = list_append(list_append((yyvsp[0]), 
(yyvsp[-2])), (yyvsp[-3]));
                }
          }
-#line 3135 "awkgram.c" /* yacc.c:1645  */
+#line 3129 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 70:
-#line 1269 "awkgram.y" /* yacc.c:1645  */
+  case 71:
+#line 1273 "awkgram.y" /* yacc.c:1645  */
     {
                static bool warned = false;
                char *arr = (yyvsp[-1])->lextok;
@@ -3161,54 +3155,54 @@ regular_print:
                                fatal(_("`delete' is not allowed with 
FUNCTAB"));
                }
          }
-#line 3165 "awkgram.c" /* yacc.c:1645  */
+#line 3159 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 71:
-#line 1295 "awkgram.y" /* yacc.c:1645  */
+  case 72:
+#line 1299 "awkgram.y" /* yacc.c:1645  */
     {
                (yyval) = optimize_assignment((yyvsp[0]));
          }
-#line 3173 "awkgram.c" /* yacc.c:1645  */
+#line 3167 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 72:
-#line 1302 "awkgram.y" /* yacc.c:1645  */
+  case 73:
+#line 1306 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = NULL; }
-#line 3179 "awkgram.c" /* yacc.c:1645  */
+#line 3173 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 73:
-#line 1304 "awkgram.y" /* yacc.c:1645  */
+  case 74:
+#line 1308 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); }
-#line 3185 "awkgram.c" /* yacc.c:1645  */
+#line 3179 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 74:
-#line 1309 "awkgram.y" /* yacc.c:1645  */
+  case 75:
+#line 1313 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = NULL; }
-#line 3191 "awkgram.c" /* yacc.c:1645  */
+#line 3185 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 75:
-#line 1311 "awkgram.y" /* yacc.c:1645  */
+  case 76:
+#line 1315 "awkgram.y" /* yacc.c:1645  */
     {
                if ((yyvsp[-1]) == NULL)
                        (yyval) = list_create((yyvsp[0]));
                else
                        (yyval) = list_prepend((yyvsp[-1]), (yyvsp[0]));
          }
-#line 3202 "awkgram.c" /* yacc.c:1645  */
+#line 3196 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 76:
-#line 1318 "awkgram.y" /* yacc.c:1645  */
+  case 77:
+#line 1322 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = NULL; }
-#line 3208 "awkgram.c" /* yacc.c:1645  */
+#line 3202 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 77:
-#line 1323 "awkgram.y" /* yacc.c:1645  */
+  case 78:
+#line 1327 "awkgram.y" /* yacc.c:1645  */
     {
                INSTRUCTION *casestmt = (yyvsp[0]);
                if ((yyvsp[0]) == NULL)
@@ -3221,11 +3215,11 @@ regular_print:
                bcfree((yyvsp[-2]));
                (yyval) = (yyvsp[-4]);
          }
-#line 3225 "awkgram.c" /* yacc.c:1645  */
+#line 3219 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 78:
-#line 1336 "awkgram.y" /* yacc.c:1645  */
+  case 79:
+#line 1340 "awkgram.y" /* yacc.c:1645  */
     {
                INSTRUCTION *casestmt = (yyvsp[0]);
                if ((yyvsp[0]) == NULL)
@@ -3237,17 +3231,17 @@ regular_print:
                (yyvsp[-3])->comment = (yyvsp[-1]);
                (yyval) = (yyvsp[-3]);
          }
-#line 3241 "awkgram.c" /* yacc.c:1645  */
+#line 3235 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 79:
-#line 1351 "awkgram.y" /* yacc.c:1645  */
+  case 80:
+#line 1355 "awkgram.y" /* yacc.c:1645  */
     {  (yyval) = (yyvsp[0]); }
-#line 3247 "awkgram.c" /* yacc.c:1645  */
+#line 3241 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 80:
-#line 1353 "awkgram.y" /* yacc.c:1645  */
+  case 81:
+#line 1357 "awkgram.y" /* yacc.c:1645  */
     {
                NODE *n = (yyvsp[0])->memory;
                (void) force_number(n);
@@ -3255,28 +3249,28 @@ regular_print:
                bcfree((yyvsp[-1]));
                (yyval) = (yyvsp[0]);
          }
-#line 3259 "awkgram.c" /* yacc.c:1645  */
+#line 3253 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 81:
-#line 1361 "awkgram.y" /* yacc.c:1645  */
+  case 82:
+#line 1365 "awkgram.y" /* yacc.c:1645  */
     {
                NODE *n = (yyvsp[0])->lasti->memory;
                bcfree((yyvsp[-1]));
                add_sign_to_num(n, '+');
                (yyval) = (yyvsp[0]);
          }
-#line 3270 "awkgram.c" /* yacc.c:1645  */
+#line 3264 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 82:
-#line 1368 "awkgram.y" /* yacc.c:1645  */
+  case 83:
+#line 1372 "awkgram.y" /* yacc.c:1645  */
     {  (yyval) = (yyvsp[0]); }
-#line 3276 "awkgram.c" /* yacc.c:1645  */
+#line 3270 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 83:
-#line 1370 "awkgram.y" /* yacc.c:1645  */
+  case 84:
+#line 1374 "awkgram.y" /* yacc.c:1645  */
     {
                if ((yyvsp[0])->memory->type == Node_regex)
                        (yyvsp[0])->opcode = Op_push_re;
@@ -3284,57 +3278,57 @@ regular_print:
                        (yyvsp[0])->opcode = Op_push;
                (yyval) = (yyvsp[0]);
          }
-#line 3288 "awkgram.c" /* yacc.c:1645  */
+#line 3282 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 84:
-#line 1378 "awkgram.y" /* yacc.c:1645  */
+  case 85:
+#line 1382 "awkgram.y" /* yacc.c:1645  */
     {
                assert(((yyvsp[0])->memory->flags & REGEX) == REGEX);
                (yyvsp[0])->opcode = Op_push_re;
                (yyval) = (yyvsp[0]);
          }
-#line 3298 "awkgram.c" /* yacc.c:1645  */
+#line 3292 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 85:
-#line 1387 "awkgram.y" /* yacc.c:1645  */
+  case 86:
+#line 1391 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); }
-#line 3304 "awkgram.c" /* yacc.c:1645  */
+#line 3298 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 86:
-#line 1389 "awkgram.y" /* yacc.c:1645  */
+  case 87:
+#line 1393 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); }
-#line 3310 "awkgram.c" /* yacc.c:1645  */
+#line 3304 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 88:
-#line 1399 "awkgram.y" /* yacc.c:1645  */
+  case 89:
+#line 1403 "awkgram.y" /* yacc.c:1645  */
     {
                (yyval) = (yyvsp[-1]);
          }
-#line 3318 "awkgram.c" /* yacc.c:1645  */
+#line 3312 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 89:
-#line 1406 "awkgram.y" /* yacc.c:1645  */
+  case 90:
+#line 1410 "awkgram.y" /* yacc.c:1645  */
     {
                in_print = false;
                in_parens = 0;
                (yyval) = NULL;
          }
-#line 3328 "awkgram.c" /* yacc.c:1645  */
+#line 3322 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 90:
-#line 1411 "awkgram.y" /* yacc.c:1645  */
+  case 91:
+#line 1415 "awkgram.y" /* yacc.c:1645  */
     { in_print = false; in_parens = 0; }
-#line 3334 "awkgram.c" /* yacc.c:1645  */
+#line 3328 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 91:
-#line 1412 "awkgram.y" /* yacc.c:1645  */
+  case 92:
+#line 1416 "awkgram.y" /* yacc.c:1645  */
     {
                if ((yyvsp[-2])->redir_type == redirect_twoway
                        && (yyvsp[0])->lasti->opcode == Op_K_getline_redir
@@ -3344,21 +3338,21 @@ regular_print:
                        lintwarn(_("concatenation as I/O `>' redirection target 
is ambiguous"));
                (yyval) = list_prepend((yyvsp[0]), (yyvsp[-2]));
          }
-#line 3348 "awkgram.c" /* yacc.c:1645  */
+#line 3342 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 92:
-#line 1425 "awkgram.y" /* yacc.c:1645  */
+  case 93:
+#line 1429 "awkgram.y" /* yacc.c:1645  */
     {
                if ((yyvsp[-1]) != NULL)
                        (yyvsp[-5])->comment = (yyvsp[-1]);
                (yyval) = mk_condition((yyvsp[-3]), (yyvsp[-5]), (yyvsp[0]), 
NULL, NULL);
          }
-#line 3358 "awkgram.c" /* yacc.c:1645  */
+#line 3352 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 93:
-#line 1432 "awkgram.y" /* yacc.c:1645  */
+  case 94:
+#line 1436 "awkgram.y" /* yacc.c:1645  */
     {
                if ((yyvsp[-4]) != NULL)
                        (yyvsp[-8])->comment = (yyvsp[-4]);
@@ -3366,19 +3360,19 @@ regular_print:
                        (yyvsp[-2])->comment = (yyvsp[-1]);
                (yyval) = mk_condition((yyvsp[-6]), (yyvsp[-8]), (yyvsp[-3]), 
(yyvsp[-2]), (yyvsp[0]));
          }
-#line 3370 "awkgram.c" /* yacc.c:1645  */
+#line 3364 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 94:
-#line 1443 "awkgram.y" /* yacc.c:1645  */
+  case 95:
+#line 1447 "awkgram.y" /* yacc.c:1645  */
     {
                (yyval) = (yyvsp[0]);
          }
-#line 3378 "awkgram.c" /* yacc.c:1645  */
+#line 3372 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 95:
-#line 1447 "awkgram.y" /* yacc.c:1645  */
+  case 96:
+#line 1451 "awkgram.y" /* yacc.c:1645  */
     {
                if ((yyvsp[-1]) != NULL && (yyvsp[0]) != NULL) {
                        if ((yyvsp[-1])->memory->comment_type == EOL_COMMENT) {
@@ -3396,59 +3390,59 @@ regular_print:
                } else
                        (yyval) = NULL;
          }
-#line 3400 "awkgram.c" /* yacc.c:1645  */
+#line 3394 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 96:
-#line 1468 "awkgram.y" /* yacc.c:1645  */
+  case 97:
+#line 1472 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = NULL; }
-#line 3406 "awkgram.c" /* yacc.c:1645  */
+#line 3400 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 97:
-#line 1470 "awkgram.y" /* yacc.c:1645  */
+  case 98:
+#line 1474 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); }
-#line 3412 "awkgram.c" /* yacc.c:1645  */
+#line 3406 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 98:
-#line 1475 "awkgram.y" /* yacc.c:1645  */
+  case 99:
+#line 1479 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = NULL; }
-#line 3418 "awkgram.c" /* yacc.c:1645  */
+#line 3412 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 99:
-#line 1477 "awkgram.y" /* yacc.c:1645  */
+  case 100:
+#line 1481 "awkgram.y" /* yacc.c:1645  */
     {
                bcfree((yyvsp[-1]));
                (yyval) = (yyvsp[0]);
          }
-#line 3427 "awkgram.c" /* yacc.c:1645  */
+#line 3421 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 100:
-#line 1485 "awkgram.y" /* yacc.c:1645  */
+  case 101:
+#line 1489 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = NULL; }
-#line 3433 "awkgram.c" /* yacc.c:1645  */
+#line 3427 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 101:
-#line 1487 "awkgram.y" /* yacc.c:1645  */
+  case 102:
+#line 1491 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); }
-#line 3439 "awkgram.c" /* yacc.c:1645  */
+#line 3433 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 102:
-#line 1492 "awkgram.y" /* yacc.c:1645  */
+  case 103:
+#line 1496 "awkgram.y" /* yacc.c:1645  */
     {
                (yyvsp[0])->param_count = 0;
                (yyval) = list_create((yyvsp[0]));
          }
-#line 3448 "awkgram.c" /* yacc.c:1645  */
+#line 3442 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 103:
-#line 1497 "awkgram.y" /* yacc.c:1645  */
+  case 104:
+#line 1501 "awkgram.y" /* yacc.c:1645  */
     {
                if ((yyvsp[-2]) != NULL && (yyvsp[0]) != NULL) {
                        (yyvsp[0])->param_count = 
(yyvsp[-2])->lasti->param_count + 1;
@@ -3465,76 +3459,76 @@ regular_print:
                } else
                        (yyval) = NULL;
          }
-#line 3469 "awkgram.c" /* yacc.c:1645  */
+#line 3463 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 104:
-#line 1514 "awkgram.y" /* yacc.c:1645  */
+  case 105:
+#line 1518 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = NULL; }
-#line 3475 "awkgram.c" /* yacc.c:1645  */
+#line 3469 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 105:
-#line 1516 "awkgram.y" /* yacc.c:1645  */
+  case 106:
+#line 1520 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[-1]); }
-#line 3481 "awkgram.c" /* yacc.c:1645  */
+#line 3475 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 106:
-#line 1518 "awkgram.y" /* yacc.c:1645  */
+  case 107:
+#line 1522 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[-2]); }
-#line 3487 "awkgram.c" /* yacc.c:1645  */
+#line 3481 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 107:
-#line 1524 "awkgram.y" /* yacc.c:1645  */
+  case 108:
+#line 1528 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = NULL; }
-#line 3493 "awkgram.c" /* yacc.c:1645  */
+#line 3487 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 108:
-#line 1526 "awkgram.y" /* yacc.c:1645  */
+  case 109:
+#line 1530 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); }
-#line 3499 "awkgram.c" /* yacc.c:1645  */
+#line 3493 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 109:
-#line 1531 "awkgram.y" /* yacc.c:1645  */
+  case 110:
+#line 1535 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = NULL; }
-#line 3505 "awkgram.c" /* yacc.c:1645  */
+#line 3499 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 110:
-#line 1533 "awkgram.y" /* yacc.c:1645  */
+  case 111:
+#line 1537 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); }
-#line 3511 "awkgram.c" /* yacc.c:1645  */
+#line 3505 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 111:
-#line 1538 "awkgram.y" /* yacc.c:1645  */
+  case 112:
+#line 1542 "awkgram.y" /* yacc.c:1645  */
     {  (yyval) = mk_expression_list(NULL, (yyvsp[0])); }
-#line 3517 "awkgram.c" /* yacc.c:1645  */
+#line 3511 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 112:
-#line 1540 "awkgram.y" /* yacc.c:1645  */
+  case 113:
+#line 1544 "awkgram.y" /* yacc.c:1645  */
     {
                if ((yyvsp[-1]) != NULL)
                        (yyvsp[-2])->lasti->comment = (yyvsp[-1]);
                (yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
                yyerrok;
          }
-#line 3528 "awkgram.c" /* yacc.c:1645  */
+#line 3522 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 113:
-#line 1547 "awkgram.y" /* yacc.c:1645  */
+  case 114:
+#line 1551 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = NULL; }
-#line 3534 "awkgram.c" /* yacc.c:1645  */
+#line 3528 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 114:
-#line 1549 "awkgram.y" /* yacc.c:1645  */
+  case 115:
+#line 1553 "awkgram.y" /* yacc.c:1645  */
     {
                /*
                 * Returning the expression list instead of NULL lets
@@ -3542,66 +3536,66 @@ regular_print:
                 */
                (yyval) = (yyvsp[-1]);
          }
-#line 3546 "awkgram.c" /* yacc.c:1645  */
+#line 3540 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 115:
-#line 1557 "awkgram.y" /* yacc.c:1645  */
+  case 116:
+#line 1561 "awkgram.y" /* yacc.c:1645  */
     {
                /* Ditto */
                (yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
          }
-#line 3555 "awkgram.c" /* yacc.c:1645  */
+#line 3549 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 116:
-#line 1562 "awkgram.y" /* yacc.c:1645  */
+  case 117:
+#line 1566 "awkgram.y" /* yacc.c:1645  */
     {
                /* Ditto */
                if ((yyvsp[-1]) != NULL)
                        (yyvsp[-2])->lasti->comment = (yyvsp[-1]);
                (yyval) = (yyvsp[-2]);
          }
-#line 3566 "awkgram.c" /* yacc.c:1645  */
+#line 3560 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 117:
-#line 1572 "awkgram.y" /* yacc.c:1645  */
+  case 118:
+#line 1576 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = NULL; }
-#line 3572 "awkgram.c" /* yacc.c:1645  */
+#line 3566 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 118:
-#line 1574 "awkgram.y" /* yacc.c:1645  */
+  case 119:
+#line 1578 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); }
-#line 3578 "awkgram.c" /* yacc.c:1645  */
+#line 3572 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 119:
-#line 1579 "awkgram.y" /* yacc.c:1645  */
+  case 120:
+#line 1583 "awkgram.y" /* yacc.c:1645  */
     {  (yyval) = mk_expression_list(NULL, (yyvsp[0])); }
-#line 3584 "awkgram.c" /* yacc.c:1645  */
+#line 3578 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 120:
-#line 1581 "awkgram.y" /* yacc.c:1645  */
+  case 121:
+#line 1585 "awkgram.y" /* yacc.c:1645  */
     {
                if ((yyvsp[-1]) != NULL)
                        (yyvsp[-2])->lasti->comment = (yyvsp[-1]);
                (yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
                yyerrok;
          }
-#line 3595 "awkgram.c" /* yacc.c:1645  */
+#line 3589 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 121:
-#line 1588 "awkgram.y" /* yacc.c:1645  */
+  case 122:
+#line 1592 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = NULL; }
-#line 3601 "awkgram.c" /* yacc.c:1645  */
+#line 3595 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 122:
-#line 1590 "awkgram.y" /* yacc.c:1645  */
+  case 123:
+#line 1594 "awkgram.y" /* yacc.c:1645  */
     {
                /*
                 * Returning the expression list instead of NULL lets
@@ -3609,74 +3603,74 @@ regular_print:
                 */
                (yyval) = (yyvsp[-1]);
          }
-#line 3613 "awkgram.c" /* yacc.c:1645  */
+#line 3607 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 123:
-#line 1598 "awkgram.y" /* yacc.c:1645  */
+  case 124:
+#line 1602 "awkgram.y" /* yacc.c:1645  */
     {
                /* Ditto */
                (yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
          }
-#line 3622 "awkgram.c" /* yacc.c:1645  */
+#line 3616 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 124:
-#line 1603 "awkgram.y" /* yacc.c:1645  */
+  case 125:
+#line 1607 "awkgram.y" /* yacc.c:1645  */
     {
                /* Ditto */
                if ((yyvsp[-1]) != NULL)
                        (yyvsp[-2])->comment = (yyvsp[-1]);
                (yyval) = (yyvsp[-2]);
          }
-#line 3633 "awkgram.c" /* yacc.c:1645  */
+#line 3627 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 125:
-#line 1612 "awkgram.y" /* yacc.c:1645  */
+  case 126:
+#line 1616 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); }
-#line 3639 "awkgram.c" /* yacc.c:1645  */
+#line 3633 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 126:
-#line 1613 "awkgram.y" /* yacc.c:1645  */
+  case 127:
+#line 1617 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = list_create((yyvsp[0])); }
-#line 3645 "awkgram.c" /* yacc.c:1645  */
+#line 3639 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 127:
-#line 1619 "awkgram.y" /* yacc.c:1645  */
+  case 128:
+#line 1623 "awkgram.y" /* yacc.c:1645  */
     {
                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 3656 "awkgram.c" /* yacc.c:1645  */
+#line 3650 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 128:
-#line 1626 "awkgram.y" /* yacc.c:1645  */
+  case 129:
+#line 1630 "awkgram.y" /* yacc.c:1645  */
     {
                (yyval) = mk_assignment((yyvsp[-2]), list_create((yyvsp[0])), 
(yyvsp[-1]));
          }
-#line 3664 "awkgram.c" /* yacc.c:1645  */
+#line 3658 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 129:
-#line 1630 "awkgram.y" /* yacc.c:1645  */
+  case 130:
+#line 1634 "awkgram.y" /* yacc.c:1645  */
     {  (yyval) = mk_boolean((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3670 "awkgram.c" /* yacc.c:1645  */
+#line 3664 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 130:
-#line 1632 "awkgram.y" /* yacc.c:1645  */
+  case 131:
+#line 1636 "awkgram.y" /* yacc.c:1645  */
     {  (yyval) = mk_boolean((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3676 "awkgram.c" /* yacc.c:1645  */
+#line 3670 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 131:
-#line 1634 "awkgram.y" /* yacc.c:1645  */
+  case 132:
+#line 1638 "awkgram.y" /* yacc.c:1645  */
     {
                if ((yyvsp[-2])->lasti->opcode == Op_match_rec)
                        warning_ln((yyvsp[-1])->source_line,
@@ -3689,11 +3683,11 @@ regular_print:
                bcfree((yyvsp[0]));
                (yyval) = list_append((yyvsp[-2]), (yyvsp[-1]));
          }
-#line 3693 "awkgram.c" /* yacc.c:1645  */
+#line 3687 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 132:
-#line 1647 "awkgram.y" /* yacc.c:1645  */
+  case 133:
+#line 1651 "awkgram.y" /* yacc.c:1645  */
     {
                if ((yyvsp[-2])->lasti->opcode == Op_match_rec)
                        warning_ln((yyvsp[-1])->source_line,
@@ -3710,11 +3704,11 @@ regular_print:
                        (yyval) = list_append(list_merge((yyvsp[-2]), 
(yyvsp[0])), (yyvsp[-1]));
                }
          }
-#line 3714 "awkgram.c" /* yacc.c:1645  */
+#line 3708 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 133:
-#line 1664 "awkgram.y" /* yacc.c:1645  */
+  case 134:
+#line 1668 "awkgram.y" /* yacc.c:1645  */
     {
                if (do_lint_old)
                        warning_ln((yyvsp[-1])->source_line,
@@ -3724,91 +3718,91 @@ regular_print:
                (yyvsp[-1])->expr_count = 1;
                (yyval) = list_append(list_merge((yyvsp[-2]), (yyvsp[0])), 
(yyvsp[-1]));
          }
-#line 3728 "awkgram.c" /* yacc.c:1645  */
+#line 3722 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 134:
-#line 1674 "awkgram.y" /* yacc.c:1645  */
+  case 135:
+#line 1678 "awkgram.y" /* yacc.c:1645  */
     {
                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 3739 "awkgram.c" /* yacc.c:1645  */
-    break;
-
-  case 135:
-#line 1681 "awkgram.y" /* yacc.c:1645  */
-    { (yyval) = mk_condition((yyvsp[-4]), (yyvsp[-3]), (yyvsp[-2]), 
(yyvsp[-1]), (yyvsp[0])); }
-#line 3745 "awkgram.c" /* yacc.c:1645  */
+#line 3733 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 136:
-#line 1683 "awkgram.y" /* yacc.c:1645  */
-    { (yyval) = (yyvsp[0]); }
-#line 3751 "awkgram.c" /* yacc.c:1645  */
+#line 1685 "awkgram.y" /* yacc.c:1645  */
+    { (yyval) = mk_condition((yyvsp[-4]), (yyvsp[-3]), (yyvsp[-2]), 
(yyvsp[-1]), (yyvsp[0])); }
+#line 3739 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 137:
-#line 1688 "awkgram.y" /* yacc.c:1645  */
+#line 1687 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); }
-#line 3757 "awkgram.c" /* yacc.c:1645  */
+#line 3745 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 138:
-#line 1690 "awkgram.y" /* yacc.c:1645  */
+#line 1692 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); }
-#line 3763 "awkgram.c" /* yacc.c:1645  */
+#line 3751 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 139:
-#line 1692 "awkgram.y" /* yacc.c:1645  */
+#line 1694 "awkgram.y" /* yacc.c:1645  */
+    { (yyval) = (yyvsp[0]); }
+#line 3757 "awkgram.c" /* yacc.c:1645  */
+    break;
+
+  case 140:
+#line 1696 "awkgram.y" /* yacc.c:1645  */
     {
                (yyvsp[0])->opcode = Op_assign_quotient;
                (yyval) = (yyvsp[0]);
          }
-#line 3772 "awkgram.c" /* yacc.c:1645  */
-    break;
-
-  case 140:
-#line 1700 "awkgram.y" /* yacc.c:1645  */
-    { (yyval) = (yyvsp[0]); }
-#line 3778 "awkgram.c" /* yacc.c:1645  */
+#line 3766 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 141:
-#line 1702 "awkgram.y" /* yacc.c:1645  */
+#line 1704 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); }
-#line 3784 "awkgram.c" /* yacc.c:1645  */
+#line 3772 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 142:
-#line 1707 "awkgram.y" /* yacc.c:1645  */
+#line 1706 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); }
-#line 3790 "awkgram.c" /* yacc.c:1645  */
+#line 3778 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 143:
-#line 1709 "awkgram.y" /* yacc.c:1645  */
+#line 1711 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); }
-#line 3796 "awkgram.c" /* yacc.c:1645  */
+#line 3784 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 144:
-#line 1714 "awkgram.y" /* yacc.c:1645  */
+#line 1713 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); }
-#line 3802 "awkgram.c" /* yacc.c:1645  */
+#line 3790 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 145:
-#line 1716 "awkgram.y" /* yacc.c:1645  */
+#line 1718 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); }
-#line 3808 "awkgram.c" /* yacc.c:1645  */
+#line 3796 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 146:
-#line 1718 "awkgram.y" /* yacc.c:1645  */
+#line 1720 "awkgram.y" /* yacc.c:1645  */
+    { (yyval) = (yyvsp[0]); }
+#line 3802 "awkgram.c" /* yacc.c:1645  */
+    break;
+
+  case 147:
+#line 1722 "awkgram.y" /* yacc.c:1645  */
     {
                int count = 2;
                bool is_simple_var = false;
@@ -3862,47 +3856,47 @@ regular_print:
                                max_args = count;
                }
          }
-#line 3866 "awkgram.c" /* yacc.c:1645  */
-    break;
-
-  case 148:
-#line 1777 "awkgram.y" /* yacc.c:1645  */
-    { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3872 "awkgram.c" /* yacc.c:1645  */
+#line 3860 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 149:
-#line 1779 "awkgram.y" /* yacc.c:1645  */
+#line 1781 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3878 "awkgram.c" /* yacc.c:1645  */
+#line 3866 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 150:
-#line 1781 "awkgram.y" /* yacc.c:1645  */
+#line 1783 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3884 "awkgram.c" /* yacc.c:1645  */
+#line 3872 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 151:
-#line 1783 "awkgram.y" /* yacc.c:1645  */
+#line 1785 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3890 "awkgram.c" /* yacc.c:1645  */
+#line 3878 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 152:
-#line 1785 "awkgram.y" /* yacc.c:1645  */
+#line 1787 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3896 "awkgram.c" /* yacc.c:1645  */
+#line 3884 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 153:
-#line 1787 "awkgram.y" /* yacc.c:1645  */
+#line 1789 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3902 "awkgram.c" /* yacc.c:1645  */
+#line 3890 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 154:
-#line 1789 "awkgram.y" /* yacc.c:1645  */
+#line 1791 "awkgram.y" /* yacc.c:1645  */
+    { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
+#line 3896 "awkgram.c" /* yacc.c:1645  */
+    break;
+
+  case 155:
+#line 1793 "awkgram.y" /* yacc.c:1645  */
     {
                /*
                 * In BEGINFILE/ENDFILE, allow `getline [var] < file'
@@ -3916,29 +3910,29 @@ regular_print:
                                _("non-redirected `getline' undefined inside 
END action"));
                (yyval) = mk_getline((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]), 
redirect_input);
          }
-#line 3920 "awkgram.c" /* yacc.c:1645  */
+#line 3914 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 155:
-#line 1803 "awkgram.y" /* yacc.c:1645  */
+  case 156:
+#line 1807 "awkgram.y" /* yacc.c:1645  */
     {
                (yyvsp[0])->opcode = Op_postincrement;
                (yyval) = mk_assignment((yyvsp[-1]), NULL, (yyvsp[0]));
          }
-#line 3929 "awkgram.c" /* yacc.c:1645  */
+#line 3923 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 156:
-#line 1808 "awkgram.y" /* yacc.c:1645  */
+  case 157:
+#line 1812 "awkgram.y" /* yacc.c:1645  */
     {
                (yyvsp[0])->opcode = Op_postdecrement;
                (yyval) = mk_assignment((yyvsp[-1]), NULL, (yyvsp[0]));
          }
-#line 3938 "awkgram.c" /* yacc.c:1645  */
+#line 3932 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 157:
-#line 1813 "awkgram.y" /* yacc.c:1645  */
+  case 158:
+#line 1817 "awkgram.y" /* yacc.c:1645  */
     {
                if (do_lint_old) {
                    warning_ln((yyvsp[-1])->source_line,
@@ -3958,64 +3952,64 @@ regular_print:
                        (yyval) = list_append(list_merge(t, (yyvsp[0])), 
(yyvsp[-1]));
                }
          }
-#line 3962 "awkgram.c" /* yacc.c:1645  */
+#line 3956 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 158:
-#line 1838 "awkgram.y" /* yacc.c:1645  */
+  case 159:
+#line 1842 "awkgram.y" /* yacc.c:1645  */
     {
                  (yyval) = mk_getline((yyvsp[-1]), (yyvsp[0]), (yyvsp[-3]), 
(yyvsp[-2])->redir_type);
                  bcfree((yyvsp[-2]));
                }
-#line 3971 "awkgram.c" /* yacc.c:1645  */
-    break;
-
-  case 159:
-#line 1844 "awkgram.y" /* yacc.c:1645  */
-    { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3977 "awkgram.c" /* yacc.c:1645  */
+#line 3965 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 160:
-#line 1846 "awkgram.y" /* yacc.c:1645  */
+#line 1848 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3983 "awkgram.c" /* yacc.c:1645  */
+#line 3971 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 161:
-#line 1848 "awkgram.y" /* yacc.c:1645  */
+#line 1850 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3989 "awkgram.c" /* yacc.c:1645  */
+#line 3977 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 162:
-#line 1850 "awkgram.y" /* yacc.c:1645  */
+#line 1852 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3995 "awkgram.c" /* yacc.c:1645  */
+#line 3983 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 163:
-#line 1852 "awkgram.y" /* yacc.c:1645  */
+#line 1854 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 4001 "awkgram.c" /* yacc.c:1645  */
+#line 3989 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 164:
-#line 1854 "awkgram.y" /* yacc.c:1645  */
+#line 1856 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 4007 "awkgram.c" /* yacc.c:1645  */
+#line 3995 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 165:
-#line 1859 "awkgram.y" /* yacc.c:1645  */
+#line 1858 "awkgram.y" /* yacc.c:1645  */
+    { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
+#line 4001 "awkgram.c" /* yacc.c:1645  */
+    break;
+
+  case 166:
+#line 1863 "awkgram.y" /* yacc.c:1645  */
     {
                (yyval) = list_create((yyvsp[0]));
          }
-#line 4015 "awkgram.c" /* yacc.c:1645  */
+#line 4009 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 166:
-#line 1863 "awkgram.y" /* yacc.c:1645  */
+  case 167:
+#line 1867 "awkgram.y" /* yacc.c:1645  */
     {
                if ((yyvsp[0])->opcode == Op_match_rec) {
                        (yyvsp[0])->opcode = Op_nomatch;
@@ -4047,11 +4041,11 @@ regular_print:
                        }
                }
           }
-#line 4051 "awkgram.c" /* yacc.c:1645  */
+#line 4045 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 167:
-#line 1895 "awkgram.y" /* yacc.c:1645  */
+  case 168:
+#line 1899 "awkgram.y" /* yacc.c:1645  */
     {
                // Always include. Allows us to lint warn on
                // print "foo" > "bar" 1
@@ -4059,31 +4053,31 @@ regular_print:
                // print "foo" > ("bar" 1)
                (yyval) = list_append((yyvsp[-1]), bcalloc(Op_parens, 1, 
sourceline));
          }
-#line 4063 "awkgram.c" /* yacc.c:1645  */
+#line 4057 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 168:
-#line 1903 "awkgram.y" /* yacc.c:1645  */
+  case 169:
+#line 1907 "awkgram.y" /* yacc.c:1645  */
     {
                (yyval) = snode((yyvsp[-1]), (yyvsp[-3]));
                if ((yyval) == NULL)
                        YYABORT;
          }
-#line 4073 "awkgram.c" /* yacc.c:1645  */
+#line 4067 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 169:
-#line 1909 "awkgram.y" /* yacc.c:1645  */
+  case 170:
+#line 1913 "awkgram.y" /* yacc.c:1645  */
     {
                (yyval) = snode((yyvsp[-1]), (yyvsp[-3]));
                if ((yyval) == NULL)
                        YYABORT;
          }
-#line 4083 "awkgram.c" /* yacc.c:1645  */
+#line 4077 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 170:
-#line 1915 "awkgram.y" /* yacc.c:1645  */
+  case 171:
+#line 1919 "awkgram.y" /* yacc.c:1645  */
     {
                static bool warned = false;
 
@@ -4096,45 +4090,45 @@ regular_print:
                if ((yyval) == NULL)
                        YYABORT;
          }
-#line 4100 "awkgram.c" /* yacc.c:1645  */
+#line 4094 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 173:
-#line 1930 "awkgram.y" /* yacc.c:1645  */
+  case 174:
+#line 1934 "awkgram.y" /* yacc.c:1645  */
     {
                (yyvsp[-1])->opcode = Op_preincrement;
                (yyval) = mk_assignment((yyvsp[0]), NULL, (yyvsp[-1]));
          }
-#line 4109 "awkgram.c" /* yacc.c:1645  */
+#line 4103 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 174:
-#line 1935 "awkgram.y" /* yacc.c:1645  */
+  case 175:
+#line 1939 "awkgram.y" /* yacc.c:1645  */
     {
                (yyvsp[-1])->opcode = Op_predecrement;
                (yyval) = mk_assignment((yyvsp[0]), NULL, (yyvsp[-1]));
          }
-#line 4118 "awkgram.c" /* yacc.c:1645  */
+#line 4112 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 175:
-#line 1940 "awkgram.y" /* yacc.c:1645  */
+  case 176:
+#line 1944 "awkgram.y" /* yacc.c:1645  */
     {
                (yyval) = list_create((yyvsp[0]));
          }
-#line 4126 "awkgram.c" /* yacc.c:1645  */
+#line 4120 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 176:
-#line 1944 "awkgram.y" /* yacc.c:1645  */
+  case 177:
+#line 1948 "awkgram.y" /* yacc.c:1645  */
     {
                (yyval) = list_create((yyvsp[0]));
          }
-#line 4134 "awkgram.c" /* yacc.c:1645  */
+#line 4128 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 177:
-#line 1948 "awkgram.y" /* yacc.c:1645  */
+  case 178:
+#line 1952 "awkgram.y" /* yacc.c:1645  */
     {
                if ((yyvsp[0])->lasti->opcode == Op_push_i
                        && ((yyvsp[0])->lasti->memory->flags & STRING) == 0
@@ -4149,11 +4143,11 @@ regular_print:
                        (yyval) = list_append((yyvsp[0]), (yyvsp[-1]));
                }
          }
-#line 4153 "awkgram.c" /* yacc.c:1645  */
+#line 4147 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 178:
-#line 1963 "awkgram.y" /* yacc.c:1645  */
+  case 179:
+#line 1967 "awkgram.y" /* yacc.c:1645  */
     {
                if ((yyvsp[0])->lasti->opcode == Op_push_i
                        && ((yyvsp[0])->lasti->memory->flags & STRING) == 0
@@ -4171,20 +4165,20 @@ regular_print:
                        (yyval) = list_append((yyvsp[0]), (yyvsp[-1]));
                }
          }
-#line 4175 "awkgram.c" /* yacc.c:1645  */
+#line 4169 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 179:
-#line 1984 "awkgram.y" /* yacc.c:1645  */
+  case 180:
+#line 1988 "awkgram.y" /* yacc.c:1645  */
     {
                func_use((yyvsp[0])->lasti->func_name, FUNC_USE);
                (yyval) = (yyvsp[0]);
          }
-#line 4184 "awkgram.c" /* yacc.c:1645  */
+#line 4178 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 180:
-#line 1989 "awkgram.y" /* yacc.c:1645  */
+  case 181:
+#line 1993 "awkgram.y" /* yacc.c:1645  */
     {
                /* indirect function call */
                INSTRUCTION *f, *t;
@@ -4218,11 +4212,11 @@ regular_print:
                (yyval) = list_prepend((yyvsp[0]), t);
                at_seen = false;
          }
-#line 4222 "awkgram.c" /* yacc.c:1645  */
+#line 4216 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 181:
-#line 2026 "awkgram.y" /* yacc.c:1645  */
+  case 182:
+#line 2030 "awkgram.y" /* yacc.c:1645  */
     {
                NODE *n;
                char *name = (yyvsp[-3])->func_name;
@@ -4234,7 +4228,7 @@ regular_print:
                }
 
                if (! at_seen) {
-                       n = lookup((yyvsp[-3])->func_name, true);
+                       n = lookup((yyvsp[-3])->func_name);
                        if (n != NULL && n->type != Node_func
                            && n->type != Node_ext_func) {
                                error_ln((yyvsp[-3])->source_line,
@@ -4255,49 +4249,49 @@ regular_print:
                        (yyval) = list_append(t, (yyvsp[-3]));
                }
          }
-#line 4259 "awkgram.c" /* yacc.c:1645  */
+#line 4253 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 182:
-#line 2062 "awkgram.y" /* yacc.c:1645  */
+  case 183:
+#line 2066 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = NULL; }
-#line 4265 "awkgram.c" /* yacc.c:1645  */
+#line 4259 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 183:
-#line 2064 "awkgram.y" /* yacc.c:1645  */
+  case 184:
+#line 2068 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); }
-#line 4271 "awkgram.c" /* yacc.c:1645  */
+#line 4265 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 184:
-#line 2069 "awkgram.y" /* yacc.c:1645  */
+  case 185:
+#line 2073 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = NULL; }
-#line 4277 "awkgram.c" /* yacc.c:1645  */
+#line 4271 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 185:
-#line 2071 "awkgram.y" /* yacc.c:1645  */
+  case 186:
+#line 2075 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[-1]); }
-#line 4283 "awkgram.c" /* yacc.c:1645  */
+#line 4277 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 186:
-#line 2076 "awkgram.y" /* yacc.c:1645  */
+  case 187:
+#line 2080 "awkgram.y" /* yacc.c:1645  */
     {  (yyval) = (yyvsp[0]); }
-#line 4289 "awkgram.c" /* yacc.c:1645  */
+#line 4283 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 187:
-#line 2078 "awkgram.y" /* yacc.c:1645  */
+  case 188:
+#line 2082 "awkgram.y" /* yacc.c:1645  */
     {
                (yyval) = list_merge((yyvsp[-1]), (yyvsp[0]));
          }
-#line 4297 "awkgram.c" /* yacc.c:1645  */
+#line 4291 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 188:
-#line 2085 "awkgram.y" /* yacc.c:1645  */
+  case 189:
+#line 2089 "awkgram.y" /* yacc.c:1645  */
     {
                INSTRUCTION *ip = (yyvsp[0])->lasti;
                int count = ip->sub_count;      /* # of SUBSEP-seperated 
expressions */
@@ -4311,11 +4305,11 @@ regular_print:
                sub_counter++;  /* count # of dimensions */
                (yyval) = (yyvsp[0]);
          }
-#line 4315 "awkgram.c" /* yacc.c:1645  */
+#line 4309 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 189:
-#line 2102 "awkgram.y" /* yacc.c:1645  */
+  case 190:
+#line 2106 "awkgram.y" /* yacc.c:1645  */
     {
                INSTRUCTION *t = (yyvsp[-1]);
                if ((yyvsp[-1]) == NULL) {
@@ -4329,66 +4323,53 @@ regular_print:
                        (yyvsp[0])->sub_count = count_expressions(&t, false);
                (yyval) = list_append(t, (yyvsp[0]));
          }
-#line 4333 "awkgram.c" /* yacc.c:1645  */
+#line 4327 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 190:
-#line 2119 "awkgram.y" /* yacc.c:1645  */
+  case 191:
+#line 2123 "awkgram.y" /* yacc.c:1645  */
     {  (yyval) = (yyvsp[0]); }
-#line 4339 "awkgram.c" /* yacc.c:1645  */
+#line 4333 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 191:
-#line 2121 "awkgram.y" /* yacc.c:1645  */
+  case 192:
+#line 2125 "awkgram.y" /* yacc.c:1645  */
     {
                (yyval) = list_merge((yyvsp[-1]), (yyvsp[0]));
          }
-#line 4347 "awkgram.c" /* yacc.c:1645  */
+#line 4341 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 192:
-#line 2128 "awkgram.y" /* yacc.c:1645  */
+  case 193:
+#line 2132 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[-1]); }
-#line 4353 "awkgram.c" /* yacc.c:1645  */
+#line 4347 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 193:
-#line 2133 "awkgram.y" /* yacc.c:1645  */
+  case 194:
+#line 2137 "awkgram.y" /* yacc.c:1645  */
     {
-               const char *name = (yyvsp[0])->lextok;
-               char *qname = qualify_name(name, strlen(name));
-
-               if (qname != name) {
-                       efree((void *)name);
-                       (yyvsp[0])->lextok = qname;
-               }
-
                (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 4371 "awkgram.c" /* yacc.c:1645  */
+#line 4357 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 194:
-#line 2147 "awkgram.y" /* yacc.c:1645  */
+  case 195:
+#line 2143 "awkgram.y" /* yacc.c:1645  */
     {
                char *arr = (yyvsp[-1])->lextok;
-               char *qname = qualify_name(arr, strlen(arr));
 
-               if (qname != arr) {
-                       efree((void *)arr);
-                       arr = (yyvsp[-1])->lextok = qname;
-               }
                (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 4388 "awkgram.c" /* yacc.c:1645  */
+#line 4369 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 195:
-#line 2163 "awkgram.y" /* yacc.c:1645  */
+  case 196:
+#line 2154 "awkgram.y" /* yacc.c:1645  */
     {
                INSTRUCTION *ip = (yyvsp[0])->nexti;
                if (ip->opcode == Op_push
@@ -4400,85 +4381,85 @@ regular_print:
                } else
                        (yyval) = (yyvsp[0]);
          }
-#line 4404 "awkgram.c" /* yacc.c:1645  */
+#line 4385 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 196:
-#line 2175 "awkgram.y" /* yacc.c:1645  */
+  case 197:
+#line 2166 "awkgram.y" /* yacc.c:1645  */
     {
                (yyval) = list_append((yyvsp[-1]), (yyvsp[-2]));
                if ((yyvsp[0]) != NULL)
                        mk_assignment((yyvsp[-1]), NULL, (yyvsp[0]));
          }
-#line 4414 "awkgram.c" /* yacc.c:1645  */
+#line 4395 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 197:
-#line 2184 "awkgram.y" /* yacc.c:1645  */
+  case 198:
+#line 2175 "awkgram.y" /* yacc.c:1645  */
     {
                (yyvsp[0])->opcode = Op_postincrement;
          }
-#line 4422 "awkgram.c" /* yacc.c:1645  */
+#line 4403 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 198:
-#line 2188 "awkgram.y" /* yacc.c:1645  */
+  case 199:
+#line 2179 "awkgram.y" /* yacc.c:1645  */
     {
                (yyvsp[0])->opcode = Op_postdecrement;
          }
-#line 4430 "awkgram.c" /* yacc.c:1645  */
+#line 4411 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 199:
-#line 2192 "awkgram.y" /* yacc.c:1645  */
+  case 200:
+#line 2183 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = NULL; }
-#line 4436 "awkgram.c" /* yacc.c:1645  */
+#line 4417 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 200:
-#line 2196 "awkgram.y" /* yacc.c:1645  */
+  case 201:
+#line 2187 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); }
-#line 4442 "awkgram.c" /* yacc.c:1645  */
+#line 4423 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 201:
-#line 2200 "awkgram.y" /* yacc.c:1645  */
+  case 202:
+#line 2191 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); yyerrok; }
-#line 4448 "awkgram.c" /* yacc.c:1645  */
+#line 4429 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 202:
-#line 2204 "awkgram.y" /* yacc.c:1645  */
+  case 203:
+#line 2195 "awkgram.y" /* yacc.c:1645  */
     { yyerrok; }
-#line 4454 "awkgram.c" /* yacc.c:1645  */
+#line 4435 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 203:
-#line 2209 "awkgram.y" /* yacc.c:1645  */
+  case 204:
+#line 2200 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = NULL; }
-#line 4460 "awkgram.c" /* yacc.c:1645  */
+#line 4441 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 205:
-#line 2214 "awkgram.y" /* yacc.c:1645  */
+  case 206:
+#line 2205 "awkgram.y" /* yacc.c:1645  */
     { yyerrok; }
-#line 4466 "awkgram.c" /* yacc.c:1645  */
+#line 4447 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 206:
-#line 2218 "awkgram.y" /* yacc.c:1645  */
+  case 207:
+#line 2209 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); yyerrok; }
-#line 4472 "awkgram.c" /* yacc.c:1645  */
+#line 4453 "awkgram.c" /* yacc.c:1645  */
     break;
 
-  case 207:
-#line 2222 "awkgram.y" /* yacc.c:1645  */
+  case 208:
+#line 2213 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); yyerrok; }
-#line 4478 "awkgram.c" /* yacc.c:1645  */
+#line 4459 "awkgram.c" /* yacc.c:1645  */
     break;
 
 
-#line 4482 "awkgram.c" /* yacc.c:1645  */
+#line 4463 "awkgram.c" /* yacc.c:1645  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -4705,7 +4686,7 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 2224 "awkgram.y" /* yacc.c:1903  */
+#line 2215 "awkgram.y" /* yacc.c:1903  */
 
 
 struct token {
@@ -6859,7 +6840,7 @@ retry:
                                goto out;
                        case FUNC_BODY:
                                /* in body, name must be in symbol table for it 
to be a parameter */
-                               if ((f = lookup(tokstart, false)) != NULL) {
+                               if ((f = lookup(tokstart)) != NULL) {
                                        if (f->type == Node_builtin_func)
                                                break;
                                        else
@@ -7355,7 +7336,7 @@ parms_shadow(INSTRUCTION *pc, bool *shadow)
         * about all shadowed parameters.
         */
        for (i = 0; i < pcount; i++) {
-               if (lookup(fp[i].param, false) != NULL) {
+               if (lookup(fp[i].param) != NULL) {
                        warning(
        _("function `%s': parameter `%s' shadows global variable"),
                                        fname, fp[i].param);
@@ -7523,7 +7504,7 @@ install_function(char *fname, INSTRUCTION *fi, 
INSTRUCTION *plist)
        NODE *r, *f;
        int pcount = 0;
 
-       r = lookup(fname, true);
+       r = lookup(fname);
        if (r != NULL) {
                error_ln(fi->source_line, _("function name `%s' previously 
defined"), fname);
                return -1;
@@ -7728,7 +7709,7 @@ variable(int location, char *name, NODETYPE type)
 {
        NODE *r;
 
-       if ((r = lookup(name, true)) != NULL) {
+       if ((r = lookup(name)) != NULL) {
                if (r->type == Node_func || r->type == Node_ext_func )
                        error_ln(location, _("function `%s' called with space 
between name and `(',\nor used as a variable or an array"),
                                r->vname);
@@ -9344,6 +9325,10 @@ qualify_name(const char *name, size_t len)
        if (strchr(name, ':') != NULL)  // already qualified
                return (char *) name;
 
+       NODE *p = lookup(name);
+       if (p != NULL && p->type == Node_param_list)
+               return (char *) name;
+
        if (current_namespace != awk_namespace && ! is_all_upper(name)) {
                size_t length = strlen(current_namespace) + 2 + len + 1;
                char *buf;
@@ -9354,6 +9339,5 @@ qualify_name(const char *name, size_t len)
                return buf;
        }
 
-       // is this right?
        return (char *) name;
 }
diff --git a/awkgram.y b/awkgram.y
index 6d3a975..22a8df7 100644
--- a/awkgram.y
+++ b/awkgram.y
@@ -465,7 +465,7 @@ action
          }
        ;
 
-func_name
+qualified_name
        : NAME
          {
                const char *name = $1->lextok;
@@ -477,6 +477,10 @@ func_name
                }
                $$ = $1;
          }
+       ;
+
+func_name
+       : qualified_name
        | FUNC_CALL
          {
                const char *name = $1->lextok;
@@ -859,7 +863,7 @@ statement
                /* else
                        $1 and $4 are NULLs */
          }
-       | LEX_FOR '(' NAME LEX_IN simple_variable r_paren opt_nls statement
+       | LEX_FOR '(' qualified_name LEX_IN simple_variable r_paren opt_nls 
statement
          {
                INSTRUCTION *ip;
                char *var_name = $3->lextok;
@@ -1228,7 +1232,7 @@ regular_print:
                }
          }
 
-       | LEX_DELETE NAME { sub_counter = 0; } delete_subscript_list
+       | LEX_DELETE qualified_name { sub_counter = 0; } delete_subscript_list
          {
                char *arr = $2->lextok;
 
@@ -1261,7 +1265,7 @@ regular_print:
                        $$ = list_append(list_append($4, $2), $1);
                }
          }
-       | LEX_DELETE '(' NAME ')'
+       | LEX_DELETE '(' qualified_name ')'
                  /*
                   * this is for tawk compatibility. maybe the warnings
                   * should always be done.
@@ -2034,7 +2038,7 @@ direct_func_call
                }
 
                if (! at_seen) {
-                       n = lookup($1->func_name, true);
+                       n = lookup($1->func_name);
                        if (n != NULL && n->type != Node_func
                            && n->type != Node_ext_func) {
                                error_ln($1->source_line,
@@ -2129,29 +2133,16 @@ subscript_list
        ;
 
 simple_variable
-       : NAME
+       : qualified_name
          {
-               const char *name = $1->lextok;
-               char *qname = qualify_name(name, strlen(name));
-
-               if (qname != name) {
-                       efree((void *)name);
-                       $1->lextok = qname;
-               }
-
                $1->opcode = Op_push;
                $1->memory = variable($1->source_line, $1->lextok, 
Node_var_new);
                $$ = list_create($1);
          }
-       | NAME subscript_list
+       | qualified_name subscript_list
          {
                char *arr = $1->lextok;
-               char *qname = qualify_name(arr, strlen(arr));
 
-               if (qname != arr) {
-                       efree((void *)arr);
-                       arr = $1->lextok = qname;
-               }
                $1->memory = variable($1->source_line, arr, Node_var_new);
                $1->opcode = Op_push_array;
                $$ = list_prepend($2, $1);
@@ -4374,7 +4365,7 @@ retry:
                                goto out;
                        case FUNC_BODY:
                                /* in body, name must be in symbol table for it 
to be a parameter */
-                               if ((f = lookup(tokstart, false)) != NULL) {
+                               if ((f = lookup(tokstart)) != NULL) {
                                        if (f->type == Node_builtin_func)
                                                break;
                                        else
@@ -4870,7 +4861,7 @@ parms_shadow(INSTRUCTION *pc, bool *shadow)
         * about all shadowed parameters.
         */
        for (i = 0; i < pcount; i++) {
-               if (lookup(fp[i].param, false) != NULL) {
+               if (lookup(fp[i].param) != NULL) {
                        warning(
        _("function `%s': parameter `%s' shadows global variable"),
                                        fname, fp[i].param);
@@ -5038,7 +5029,7 @@ install_function(char *fname, INSTRUCTION *fi, 
INSTRUCTION *plist)
        NODE *r, *f;
        int pcount = 0;
 
-       r = lookup(fname, true);
+       r = lookup(fname);
        if (r != NULL) {
                error_ln(fi->source_line, _("function name `%s' previously 
defined"), fname);
                return -1;
@@ -5243,7 +5234,7 @@ variable(int location, char *name, NODETYPE type)
 {
        NODE *r;
 
-       if ((r = lookup(name, true)) != NULL) {
+       if ((r = lookup(name)) != NULL) {
                if (r->type == Node_func || r->type == Node_ext_func )
                        error_ln(location, _("function `%s' called with space 
between name and `(',\nor used as a variable or an array"),
                                r->vname);
@@ -6859,6 +6850,10 @@ qualify_name(const char *name, size_t len)
        if (strchr(name, ':') != NULL)  // already qualified
                return (char *) name;
 
+       NODE *p = lookup(name);
+       if (p != NULL && p->type == Node_param_list)
+               return (char *) name;
+
        if (current_namespace != awk_namespace && ! is_all_upper(name)) {
                size_t length = strlen(current_namespace) + 2 + len + 1;
                char *buf;
@@ -6869,6 +6864,5 @@ qualify_name(const char *name, size_t len)
                return buf;
        }
 
-       // is this right?
        return (char *) name;
 }
diff --git a/command.c b/command.c
index b076530..c8ee163 100644
--- a/command.c
+++ b/command.c
@@ -1954,7 +1954,7 @@ yyreduce:
 #line 472 "command.y" /* yacc.c:1645  */
     {
                NODE *n;
-               n = lookup((yyvsp[0])->a_string, true);
+               n = lookup((yyvsp[0])->a_string);
                if (n == NULL || n->type != Node_func)
                        yyerror(_("no such function - \"%s\""), 
(yyvsp[0])->a_string);
                else {
diff --git a/command.y b/command.y
index 553a7c3..58880de 100644
--- a/command.y
+++ b/command.y
@@ -471,7 +471,7 @@ func_name
        : D_STRING
          {
                NODE *n;
-               n = lookup($1->a_string, true);
+               n = lookup($1->a_string);
                if (n == NULL || n->type != Node_func)
                        yyerror(_("no such function - \"%s\""), $1->a_string);
                else {
diff --git a/debug.c b/debug.c
index 05083a4..13ae1b7 100644
--- a/debug.c
+++ b/debug.c
@@ -1032,7 +1032,7 @@ NODE *find_symbol(const char *name, char **pname)
        if (prog_running)
                r = find_param(name, cur_frame, pname);
        if (r == NULL)
-               r = lookup(name, false); // for now, require fully qualified 
name
+               r = lookup(name); // for now, require fully qualified name
        if (r == NULL)
                fprintf(out_fp, _("no symbol `%s' in current context\n"), name);
        return r;
@@ -5608,7 +5608,7 @@ do_eval(CMDARG *arg, int cmd ATTRIBUTE_UNUSED)
                return false;
        }
 
-       f = lookup("@eval", false);
+       f = lookup("@eval");
        assert(f != NULL);
        if (this_func == NULL) {        /* in main */
                /* do a function call */
diff --git a/ext.c b/ext.c
index b72360f..36969b1 100644
--- a/ext.c
+++ b/ext.c
@@ -118,7 +118,7 @@ make_builtin(const char *name_space, const awk_ext_func_t 
*funcinfo)
                if (check_special(name) >= 0)
                        fatal(_("make_builtin: can't use gawk built-in `%s' as 
function name"), name);
 
-               f = lookup(name, false);
+               f = lookup(name);
                install_name = estrdup(name, strlen(name));
        } else {
                if (! is_valid_identifier(name_space))
@@ -135,7 +135,7 @@ make_builtin(const char *name_space, const awk_ext_func_t 
*funcinfo)
                sprintf(buf, "%s::%s", name_space, name);
                install_name = buf;
 
-               f = lookup(install_name, false);
+               f = lookup(install_name);
        }
 
        if (f != NULL) {
diff --git a/gawkapi.c b/gawkapi.c
index c76c7b5..9119239 100644
--- a/gawkapi.c
+++ b/gawkapi.c
@@ -1603,7 +1603,7 @@ ns_lookup(const char *name_space, const char *name, char 
**fullname)
        if (name_space[0] == '\0' || strcmp(name_space, awk_namespace) == 0) {
                if (fullname != NULL)
                        *fullname = estrdup(name, strlen(name));
-               return lookup(name, false);
+               return lookup(name);
        }
 
        size_t len = strlen(name_space) + 2 + strlen(name) + 1;
@@ -1611,7 +1611,7 @@ ns_lookup(const char *name_space, const char *name, char 
**fullname)
        emalloc(buf, char *, len, "ns_lookup");
        sprintf(buf, "%s::%s", name_space, name);
 
-       NODE *f = lookup(buf, false);
+       NODE *f = lookup(buf);
        if (fullname != NULL)
                *fullname = buf;
        else
diff --git a/interpret.h b/interpret.h
index e989667..720b583 100644
--- a/interpret.h
+++ b/interpret.h
@@ -1108,7 +1108,7 @@ match_re:
                                        ni = setup_frame(pc);
                                        JUMPTO(ni);     /* Op_func */
                                }
-                               f = lookup(t1->stptr, true);
+                               f = lookup(t1->stptr);
                        }
 
                        if (f == NULL) {
@@ -1172,7 +1172,7 @@ match_re:
                        /* retrieve function definition node */
                        f = pc->func_body;
                        if (f == NULL) {
-                               f = lookup(pc->func_name, true);
+                               f = lookup(pc->func_name);
                                if (f == NULL || (f->type != Node_func && 
f->type != Node_ext_func))
                                        fatal(_("function `%s' not defined"), 
pc->func_name);
                                pc->func_body = f;     /* save for next call */
diff --git a/main.c b/main.c
index 3d3af96..d75e987 100644
--- a/main.c
+++ b/main.c
@@ -1170,7 +1170,7 @@ arg_assign(char *arg, bool initing)
                fatal(_("cannot use gawk builtin `%s' as variable name"), arg);
 
        if (! initing) {
-               var = lookup(arg, false);
+               var = lookup(arg);
                if (var != NULL && var->type == Node_func)
                        fatal(_("cannot use function `%s' as variable name"), 
arg);
        }
diff --git a/profile.c b/profile.c
index ad0d337..1a1a1e9 100644
--- a/profile.c
+++ b/profile.c
@@ -2072,7 +2072,8 @@ adjust_namespace(char *name, bool *malloced)
        // unadorned name from symbol table, add awk:: if not in awk:: n.s.
        if (strchr(name, ':') == NULL &&
            current_namespace != awk_namespace &&       // can be equal if 
namespace never changed
-           strcmp(current_namespace, "awk") != 0) {
+           strcmp(current_namespace, "awk") != 0 &&
+           ! is_all_upper(name)) {
                char *buf;
                size_t len = 5 + strlen(name) + 1;
 
diff --git a/symbol.c b/symbol.c
index 5092a4a..16f214f 100644
--- a/symbol.c
+++ b/symbol.c
@@ -39,7 +39,6 @@ static void (*install_func)(NODE *) = NULL;
 static NODE *make_symbol(const char *name, NODETYPE type);
 static NODE *install(const char *name, NODE *parm, NODETYPE type);
 static void free_bcpool(INSTRUCTION_POOL *pl);
-static const char *fix_up_namespace(const char *name, bool *malloced);
 
 static AWK_CONTEXT *curr_ctxt = NULL;
 static int ctxt_level;
@@ -89,13 +88,12 @@ install_symbol(const char *name, NODETYPE type)
  */
 
 NODE *
-lookup(const char *name, bool do_qualify)
+lookup(const char *name)
 {
        NODE *n;
        NODE *tmp;
        NODE *tables[5];        /* manual init below, for z/OS */
        int i;
-       bool malloced = false;
 
        /* ``It's turtles, all the way down.'' */
        tables[0] = param_table;        /* parameters shadow everything */
@@ -104,11 +102,8 @@ lookup(const char *name, bool do_qualify)
        tables[3] = symbol_table;       /* then globals */
        tables[4] = NULL;
 
-       if (do_qualify)
-               name = fix_up_namespace(name, & malloced);
-
-       if (malloced)
-               tmp = make_str_node(name, strlen(name), ALREADY_MALLOCED);
+       if (strncmp(name, "awk::", 5) == 0)
+               tmp = make_string(name + 5, strlen(name) - 5);
        else
                tmp = make_string(name, strlen(name));
 
@@ -310,18 +305,8 @@ install(const char *name, NODE *parm, NODETYPE type)
        NODE *table;
        NODE *n_name;
        NODE *prev;
-       bool malloced = false;
 
-       if (type == Node_param_list) {
-               n_name = make_string(name, strlen(name));
-       } else {
-               name = fix_up_namespace(name, & malloced);
-
-               if (malloced)
-                       n_name = make_str_node(name, strlen(name), 
ALREADY_MALLOCED);
-               else
-                       n_name = make_string(name, strlen(name));
-       }
+       n_name = make_string(name, strlen(name));
 
        table = symbol_table;
 
@@ -988,40 +973,3 @@ is_all_upper(const char *name)
 
        return true;
 }
-
-/* fix_up_namespace --- qualify / dequalify a simple name */
-
-static const char *
-fix_up_namespace(const char *name, bool *malloced)
-{
-       static char awk_ns[] = "awk::";
-       const size_t awk_ns_len = sizeof(awk_ns) - 1;   // don't include 
trailing \0
-       char *cp;
-
-       assert(malloced != NULL);
-       *malloced = false;
-
-       // first, check if it's qualified
-       if ((cp = strchr(name, ':')) != NULL) {
-               // does it start with awk:: ?
-               if (strncmp(name, awk_ns, awk_ns_len) == 0)
-                       return cp + 2;  // just trailing part
-
-               // otherwise it's fully qualified, not in the awk n.s.
-               return name;
-       }
-
-       // not fully qualified
-       if (current_namespace == awk_namespace || is_all_upper(name))
-               return name;    // put it into awk namespace
-
-       // make it fully qualified
-       size_t len = strlen(current_namespace) + 2 + strlen(name) + 1;
-       char *buf = NULL;
-
-       emalloc(buf, char *, len, "fix_up_namespace");
-       sprintf(buf, "%s::%s", current_namespace, name);
-       *malloced = true;
-
-       return buf;
-}
diff --git a/test/ChangeLog b/test/ChangeLog
index 812f3fa..b835271 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,3 +1,17 @@
+2018-01-24         Arnold D. Robbins     <address@hidden>
+
+       * Makefile.am (EXTRA_DIST): New test: nsforloop.
+       * nsforloop.awk, nsforloop.ok: New files.
+
+2018-01-23         Arnold D. Robbins     <address@hidden>
+
+       * nsprof2.ok: Adjust after code changes.
+
+2018-01-23         Arnold D. Robbins     <address@hidden>
+
+       * Makefile.am (EXTRA_DIST): New test: nsfuncrecurse.
+       * nsfuncrecurse.awk, nsfuncrecurse.ok: New files.
+
 2019-01-09         Andrew J. Schorr     <address@hidden>
 
        * Makefile.am (EXTRA_DIST): New test: arraytype.
diff --git a/test/Makefile.am b/test/Makefile.am
index 0ffad9a..046d8c6 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -773,6 +773,10 @@ EXTRA_DIST = \
        nsbad.awk \
        nsbad.ok \
        nsbad_cmd.ok \
+       nsforloop.awk \
+       nsforloop.ok \
+       nsfuncrecurse.awk \
+       nsfuncrecurse.ok \
        nsindirect1.awk \
        nsindirect1.ok \
        nsindirect2.awk \
@@ -1327,7 +1331,7 @@ GAWK_EXT_TESTS = \
        lint lintexp lintindex lintint lintlength lintold lintset lintwarn \
        manyfiles match1 match2 match3 mbstr1 mbstr2 mixed1 mktime muldimposix \
        nastyparm negtime next nondec nondec2 nonfatal1 nonfatal2 nonfatal3 \
-       nsbad nsbad_cmd nsindirect1 nsindirect2 nsprof1 nsprof2 \
+       nsbad nsbad_cmd nsforloop nsfuncrecurse nsindirect1 nsindirect2 nsprof1 
nsprof2 \
        patsplit posix printfbad1 printfbad2 printfbad3 printfbad4 printhuge \
        procinfs profile0 profile1 profile2 profile3 profile4 profile5 profile6 
\
        profile7 profile8 profile9 profile10 profile11 pty1 pty2 \
diff --git a/test/Makefile.in b/test/Makefile.in
index c244c7a..e0fbd97 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -1031,6 +1031,10 @@ EXTRA_DIST = \
        nsbad.awk \
        nsbad.ok \
        nsbad_cmd.ok \
+       nsforloop.awk \
+       nsforloop.ok \
+       nsfuncrecurse.awk \
+       nsfuncrecurse.ok \
        nsindirect1.awk \
        nsindirect1.ok \
        nsindirect2.awk \
@@ -1585,7 +1589,7 @@ GAWK_EXT_TESTS = \
        lint lintexp lintindex lintint lintlength lintold lintset lintwarn \
        manyfiles match1 match2 match3 mbstr1 mbstr2 mixed1 mktime muldimposix \
        nastyparm negtime next nondec nondec2 nonfatal1 nonfatal2 nonfatal3 \
-       nsbad nsbad_cmd nsindirect1 nsindirect2 nsprof1 nsprof2 \
+       nsbad nsbad_cmd nsforloop nsfuncrecurse nsindirect1 nsindirect2 nsprof1 
nsprof2 \
        patsplit posix printfbad1 printfbad2 printfbad3 printfbad4 printhuge \
        procinfs profile0 profile1 profile2 profile3 profile4 profile5 profile6 
\
        profile7 profile8 profile9 profile10 profile11 pty1 pty2 \
@@ -1647,6 +1651,7 @@ NEED_POSIX = printf0 posix2008sub paramasfunc1 
paramasfunc2 muldimposix
 NEED_PRETTY = nsprof1 nsprof2 \
        profile4 profile5 profile8 profile9 profile10 profile11
 
+
 # List of tests that need --re-interval
 NEED_RE_INTERVAL = gsubtst3 reint reint2
 
@@ -4383,6 +4388,16 @@ nsbad:
        @AWKPATH="$(srcdir)" $(AWK) -f address@hidden  >_$@ 2>&1 || echo EXIT 
CODE: $$? >>_$@
        @-$(CMP) "$(srcdir)"/address@hidden _$@ && rm -f _$@
 
+nsforloop:
+       @echo $@
+       @AWKPATH="$(srcdir)" $(AWK) -f address@hidden  >_$@ 2>&1 || echo EXIT 
CODE: $$? >>_$@
+       @-$(CMP) "$(srcdir)"/address@hidden _$@ && rm -f _$@
+
+nsfuncrecurse:
+       @echo $@
+       @AWKPATH="$(srcdir)" $(AWK) -f address@hidden  >_$@ 2>&1 || echo EXIT 
CODE: $$? >>_$@
+       @-$(CMP) "$(srcdir)"/address@hidden _$@ && rm -f _$@
+
 nsindirect1:
        @echo $@
        @AWKPATH="$(srcdir)" $(AWK) -f address@hidden  >_$@ 2>&1 || echo EXIT 
CODE: $$? >>_$@
diff --git a/test/Maketests b/test/Maketests
index 7163b4a..84a0218 100644
--- a/test/Maketests
+++ b/test/Maketests
@@ -1678,6 +1678,16 @@ nsbad:
        @AWKPATH="$(srcdir)" $(AWK) -f address@hidden  >_$@ 2>&1 || echo EXIT 
CODE: $$? >>_$@
        @-$(CMP) "$(srcdir)"/address@hidden _$@ && rm -f _$@
 
+nsforloop:
+       @echo $@
+       @AWKPATH="$(srcdir)" $(AWK) -f address@hidden  >_$@ 2>&1 || echo EXIT 
CODE: $$? >>_$@
+       @-$(CMP) "$(srcdir)"/address@hidden _$@ && rm -f _$@
+
+nsfuncrecurse:
+       @echo $@
+       @AWKPATH="$(srcdir)" $(AWK) -f address@hidden  >_$@ 2>&1 || echo EXIT 
CODE: $$? >>_$@
+       @-$(CMP) "$(srcdir)"/address@hidden _$@ && rm -f _$@
+
 nsindirect1:
        @echo $@
        @AWKPATH="$(srcdir)" $(AWK) -f address@hidden  >_$@ 2>&1 || echo EXIT 
CODE: $$? >>_$@
diff --git a/test/nsforloop.awk b/test/nsforloop.awk
new file mode 100644
index 0000000..b050db6
--- /dev/null
+++ b/test/nsforloop.awk
@@ -0,0 +1,20 @@
address@hidden "foo"
+
+function test(v)
+{
+       print "-- 1"
+       for (i in Data)
+               print i
+
+       print "-- 2"
+       for (v in Data)
+               print v
+       print "-- 3"
+}
+
+BEGIN {
+       Data[1] = 1
+       Data[2] = 2
+
+       test()
+}
diff --git a/test/nsforloop.ok b/test/nsforloop.ok
new file mode 100644
index 0000000..b87cd3e
--- /dev/null
+++ b/test/nsforloop.ok
@@ -0,0 +1,7 @@
+-- 1
+1
+2
+-- 2
+1
+2
+-- 3
diff --git a/test/nsfuncrecurse.awk b/test/nsfuncrecurse.awk
new file mode 100644
index 0000000..1a006ce
--- /dev/null
+++ b/test/nsfuncrecurse.awk
@@ -0,0 +1,18 @@
address@hidden "foo"
+
+function test(v)
+{
+       if (v <= 0)
+               return
+
+       Level++
+       v--
+       printf("Level = %d, v = %d\n", Level, v)
+       test(v)
+       Level--
+}
+
+BEGIN {
+       Level = 0
+       test(5)
+}
diff --git a/test/nsfuncrecurse.ok b/test/nsfuncrecurse.ok
new file mode 100644
index 0000000..3dc76e4
--- /dev/null
+++ b/test/nsfuncrecurse.ok
@@ -0,0 +1,5 @@
+Level = 1, v = 4
+Level = 2, v = 3
+Level = 3, v = 2
+Level = 4, v = 1
+Level = 5, v = 0
diff --git a/test/nsindirect2.ok b/test/nsindirect2.ok
index 9b71cd9..c447220 100644
--- a/test/nsindirect2.ok
+++ b/test/nsindirect2.ok
@@ -1,4 +1,4 @@
-strftime() - this is not the function you are looking for
+strftime(from 'testing') - this is not the function you are looking for
 gensub = gensub
 iteration 1, got good result from systime
 iteration 2, got good result from systime
diff --git a/test/nsprof2.ok b/test/nsprof2.ok
index 1bb7882..5a86183 100644
--- a/test/nsprof2.ok
+++ b/test/nsprof2.ok
@@ -48,13 +48,13 @@ function Init(oldfs, oldrs, olddol0, pwcat, using_fw, 
using_fpat)
        if (Inited) {
                return 
        }
-       oldfs = awk::FS
-       oldrs = awk::RS
+       oldfs = FS
+       oldrs = RS
        olddol0 = $0
-       using_fw = (awk::PROCINFO["FS"] == "FIELDWIDTHS")
-       using_fpat = (awk::PROCINFO["FS"] == "FPAT")
-       awk::FS = ":"
-       awk::RS = "\n"
+       using_fw = (PROCINFO["FS"] == "FIELDWIDTHS")
+       using_fpat = (PROCINFO["FS"] == "FPAT")
+       FS = ":"
+       RS = "\n"
        pwcat = Awklib "pwcat"
        while ((pwcat | getline) > 0) {
                Byname[$1] = $0
@@ -64,12 +64,12 @@ function Init(oldfs, oldrs, olddol0, pwcat, using_fw, 
using_fpat)
        close(pwcat)
        Count = 0
        Inited = 1
-       awk::FS = oldfs
+       FS = oldfs
        if (using_fw) {
-               awk::FIELDWIDTHS = awk::FIELDWIDTHS
+               FIELDWIDTHS = FIELDWIDTHS
        } else if (using_fpat) {
-               awk::FPAT = awk::FPAT
+               FPAT = FPAT
        }
-       awk::RS = oldrs
+       RS = oldrs
        $0 = olddol0
 }

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

Summary of changes:
 ChangeLog              |   26 +
 array.c                |    2 +-
 awk.h                  |    2 +-
 awkgram.c              | 1920 ++++++++++++++++++++++++------------------------
 awkgram.y              |   44 +-
 command.c              |    2 +-
 command.y              |    2 +-
 debug.c                |    4 +-
 doc/ChangeLog          |    5 +
 doc/gawk.info          |  377 +++++-----
 doc/gawk.texi          |    7 +
 doc/gawktexi.in        |    7 +
 ext.c                  |    4 +-
 gawkapi.c              |    4 +-
 interpret.h            |    4 +-
 main.c                 |    2 +-
 profile.c              |    3 +-
 symbol.c               |   60 +-
 test/ChangeLog         |   14 +
 test/Makefile.am       |    6 +-
 test/Makefile.in       |   17 +-
 test/Maketests         |   10 +
 test/nsforloop.awk     |   20 +
 test/nsforloop.ok      |    7 +
 test/nsfuncrecurse.awk |   18 +
 test/nsfuncrecurse.ok  |    5 +
 test/nsindirect2.ok    |    2 +-
 test/nsprof2.ok        |   20 +-
 28 files changed, 1332 insertions(+), 1262 deletions(-)
 create mode 100644 test/nsforloop.awk
 create mode 100644 test/nsforloop.ok
 create mode 100644 test/nsfuncrecurse.awk
 create mode 100644 test/nsfuncrecurse.ok


hooks/post-receive
-- 
gawk



reply via email to

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