gawk-diffs
[Top][All Lists]
Advanced

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

[gawk-diffs] [SCM] gawk branch, feature/namespaces, updated. gawk-4.1.0-


From: Arnold Robbins
Subject: [gawk-diffs] [SCM] gawk branch, feature/namespaces, updated. gawk-4.1.0-2642-g0c83ff3
Date: Thu, 20 Jul 2017 14:10:13 -0400 (EDT)

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

The branch, feature/namespaces has been updated
       via  0c83ff34eb8411eb0775dfa5a56e588a0adee03b (commit)
       via  9c4c19a3f18706a85681373f49d7028e53bd5524 (commit)
      from  18f627717a1799d564711e1ac103904e4100072c (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=0c83ff34eb8411eb0775dfa5a56e588a0adee03b

commit 0c83ff34eb8411eb0775dfa5a56e588a0adee03b
Author: Arnold D. Robbins <address@hidden>
Date:   Thu Jul 20 21:09:27 2017 +0300

    Rework inplace extension to use namespaces. Update doc and tests.

diff --git a/awklib/eg/lib/inplace.awk b/awklib/eg/lib/inplace.awk
index 505be76..01ce64c 100644
--- a/awklib/eg/lib/inplace.awk
+++ b/awklib/eg/lib/inplace.awk
@@ -2,8 +2,8 @@
 
 @load "inplace"
 
-# Please set INPLACE_SUFFIX to make a backup copy.  For example, you may
-# want to set INPLACE_SUFFIX to .bak on the command line or in a BEGIN rule.
+# Please set inplace::suffix to make a backup copy.  For example, you may
+# want to set inplace::suffix to .bak on the command line or in a BEGIN rule.
 
 # By default, each filename on the command line will be edited inplace.
 # But you can selectively disable this by adding an inplace=0 argument
@@ -11,23 +11,25 @@
 # reenable it later on the commandline by putting inplace=1 before files
 # that you wish to be subject to inplace editing.
 
-# N.B. We call inplace_end() in the BEGINFILE and END rules so that any
+# N.B. We call inplace::end() in the BEGINFILE and END rules so that any
 # actions in an ENDFILE rule will be redirected as expected.
 
address@hidden "inplace"
+
 BEGIN {
-    inplace = 1         # enabled by default
+    enable = 1         # enabled by default
 }
 
 BEGINFILE {
-    if (_inplace_filename != "")
-        inplace_end(_inplace_filename, INPLACE_SUFFIX)
-    if (inplace)
-        inplace_begin(_inplace_filename = FILENAME, INPLACE_SUFFIX)
+    if (filename != "")
+        end(filename, suffix)
+    if (enable)
+        begin(filename = FILENAME, suffix)
     else
-        _inplace_filename = ""
+        filename = ""
 }
 
 END {
-    if (_inplace_filename != "")
-        inplace_end(_inplace_filename, INPLACE_SUFFIX)
+    if (filename != "")
+        end(filename, suffix)
 }
diff --git a/doc/ChangeLog b/doc/ChangeLog
index 15c17ff..782b937 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,8 @@
+2017-07-20         Arnold D. Robbins     <address@hidden>
+
+       * gawktexi.in (Extension Sample Inplace): Rework to use the
+       "inplace" namespace.
+
 2017-07-19         Arnold D. Robbins     <address@hidden>
 
        * gawktexi.in (Namespaces): Cleanup, new section on naming rules
diff --git a/doc/gawk.info b/doc/gawk.info
index 98d7930..29de8e7 100644
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@ -27195,14 +27195,16 @@ File: gawk.info,  Node: Extension Sample Inplace,  
Next: Extension Sample Ord,
 
 The 'inplace' extension emulates GNU 'sed''s '-i' option, which performs
 "in-place" editing of each input file.  It uses the bundled
-'inplace.awk' include file to invoke the extension properly:
+'inplace.awk' include file to invoke the extension properly.  This
+extension makes use of the namespace facility to place all the variables
+and functions in the 'inplace' namespace (*note Namespaces::):
 
      # inplace --- load and invoke the inplace extension.
 
      @load "inplace"
 
-     # Please set INPLACE_SUFFIX to make a backup copy.  For example, you may
-     # want to set INPLACE_SUFFIX to .bak on the command line or in a BEGIN 
rule.
+     # Please set inplace::suffix to make a backup copy.  For example, you may
+     # want to set inplace::suffix to .bak on the command line or in a BEGIN 
rule.
 
      # By default, each filename on the command line will be edited inplace.
      # But you can selectively disable this by adding an inplace=0 argument
@@ -27210,44 +27212,46 @@ The 'inplace' extension emulates GNU 'sed''s '-i' 
option, which performs
      # reenable it later on the commandline by putting inplace=1 before files
      # that you wish to be subject to inplace editing.
 
-     # N.B. We call inplace_end() in the BEGINFILE and END rules so that any
+     # N.B. We call inplace::end() in the BEGINFILE and END rules so that any
      # actions in an ENDFILE rule will be redirected as expected.
 
+     @namespace "inplace"
+
      BEGIN {
-         inplace = 1         # enabled by default
+         enable = 1         # enabled by default
      }
 
      BEGINFILE {
-         if (_inplace_filename != "")
-             inplace_end(_inplace_filename, INPLACE_SUFFIX)
-         if (inplace)
-             inplace_begin(_inplace_filename = FILENAME, INPLACE_SUFFIX)
+         if (filename != "")
+             end(filename, suffix)
+         if (enable)
+             begin(filename = FILENAME, suffix)
          else
-             _inplace_filename = ""
+             filename = ""
      }
 
      END {
-         if (_inplace_filename != "")
-             inplace_end(_inplace_filename, INPLACE_SUFFIX)
+         if (filename != "")
+             end(filename, suffix)
      }
 
    For each regular file that is processed, the extension redirects
 standard output to a temporary file configured to have the same owner
 and permissions as the original.  After the file has been processed, the
 extension restores standard output to its original destination.  If
-'INPLACE_SUFFIX' is not an empty string, the original file is linked to
+'inplace::suffix' is not an empty string, the original file is linked to
 a backup file name created by appending that suffix.  Finally, the
 temporary file is renamed to the original file name.
 
    Note that the use of this feature can be controlled by placing
-'inplace=0' on the command-line prior to listing files that should not
-be processed this way.  You can reenable inplace editing by adding an
-'inplace=1' argument prior to files that should be subject to inplace
-editing.
+'inplace::enable=0' on the command-line prior to listing files that
+should not be processed this way.  You can reenable inplace editing by
+adding an 'inplace::enable=1' argument prior to files that should be
+subject to inplace editing.
 
-   The '_inplace_filename' variable serves to keep track of the current
-filename so as to not invoke 'inplace_end()' before processing the first
-file.
+   The 'inplace::filename' variable serves to keep track of the current
+filename so as to not invoke 'inplace::end()' before processing the
+first file.
 
    If any error occurs, the extension issues a fatal error to terminate
 processing immediately without damaging the original file.
@@ -27258,7 +27262,7 @@ processing immediately without damaging the original 
file.
 
    To keep a backup copy of the original files, try this:
 
-     $ gawk -i inplace -v INPLACE_SUFFIX=.bak '{ gsub(/foo/, "bar") }
+     $ gawk -i inplace -v inplace::suffix=.bak '{ gsub(/foo/, "bar") }
      > { print }' file1 file2 file3
 
    Please note that, while the extension does attempt to preserve
@@ -36664,93 +36668,93 @@ Node: Extension Sample File Functions1091062
 Node: Extension Sample Fnmatch1098711
 Node: Extension Sample Fork1100198
 Node: Extension Sample Inplace1101416
-Node: Extension Sample Ord1104633
-Node: Extension Sample Readdir1105469
-Ref: table-readdir-file-types1106358
-Node: Extension Sample Revout1107163
-Node: Extension Sample Rev2way1107752
-Node: Extension Sample Read write array1108492
-Node: Extension Sample Readfile1110434
-Node: Extension Sample Time1111529
-Node: Extension Sample API Tests1112877
-Node: gawkextlib1113369
-Node: Extension summary1115816
-Node: Extension Exercises1119518
-Node: Language History1121016
-Node: V7/SVR3.11122672
-Node: SVR41124824
-Node: POSIX1126258
-Node: BTL1127637
-Node: POSIX/GNU1128366
-Node: Feature History1134258
-Node: Common Extensions1148682
-Node: Ranges and Locales1149965
-Ref: Ranges and Locales-Footnote-11154581
-Ref: Ranges and Locales-Footnote-21154608
-Ref: Ranges and Locales-Footnote-31154843
-Node: Contributors1155064
-Node: History summary1160624
-Node: Installation1162004
-Node: Gawk Distribution1162948
-Node: Getting1163432
-Node: Extracting1164393
-Node: Distribution contents1166031
-Node: Unix Installation1172373
-Node: Quick Installation1173055
-Node: Shell Startup Files1175469
-Node: Additional Configuration Options1176558
-Node: Configuration Philosophy1178547
-Node: Non-Unix Installation1180916
-Node: PC Installation1181376
-Node: PC Binary Installation1182214
-Node: PC Compiling1182649
-Node: PC Using1183766
-Node: Cygwin1186811
-Node: MSYS1187581
-Node: VMS Installation1188082
-Node: VMS Compilation1188873
-Ref: VMS Compilation-Footnote-11190102
-Node: VMS Dynamic Extensions1190160
-Node: VMS Installation Details1191845
-Node: VMS Running1194098
-Node: VMS GNV1198377
-Node: VMS Old Gawk1199112
-Node: Bugs1199583
-Node: Bug address1200246
-Node: Usenet1202643
-Node: Maintainers1203420
-Node: Other Versions1204796
-Node: Installation summary1211380
-Node: Notes1212415
-Node: Compatibility Mode1213280
-Node: Additions1214062
-Node: Accessing The Source1214987
-Node: Adding Code1216422
-Node: New Ports1222640
-Node: Derived Files1227128
-Ref: Derived Files-Footnote-11232613
-Ref: Derived Files-Footnote-21232648
-Ref: Derived Files-Footnote-31233246
-Node: Future Extensions1233360
-Node: Implementation Limitations1234018
-Node: Extension Design1235201
-Node: Old Extension Problems1236355
-Ref: Old Extension Problems-Footnote-11237873
-Node: Extension New Mechanism Goals1237930
-Ref: Extension New Mechanism Goals-Footnote-11241294
-Node: Extension Other Design Decisions1241483
-Node: Extension Future Growth1243596
-Node: Old Extension Mechanism1244432
-Node: Notes summary1246195
-Node: Basic Concepts1247377
-Node: Basic High Level1248058
-Ref: figure-general-flow1248340
-Ref: figure-process-flow1249025
-Ref: Basic High Level-Footnote-11252326
-Node: Basic Data Typing1252511
-Node: Glossary1255839
-Node: Copying1287786
-Node: GNU Free Documentation License1325325
-Node: Index1350443
+Node: Extension Sample Ord1104720
+Node: Extension Sample Readdir1105556
+Ref: table-readdir-file-types1106445
+Node: Extension Sample Revout1107250
+Node: Extension Sample Rev2way1107839
+Node: Extension Sample Read write array1108579
+Node: Extension Sample Readfile1110521
+Node: Extension Sample Time1111616
+Node: Extension Sample API Tests1112964
+Node: gawkextlib1113456
+Node: Extension summary1115903
+Node: Extension Exercises1119605
+Node: Language History1121103
+Node: V7/SVR3.11122759
+Node: SVR41124911
+Node: POSIX1126345
+Node: BTL1127724
+Node: POSIX/GNU1128453
+Node: Feature History1134345
+Node: Common Extensions1148769
+Node: Ranges and Locales1150052
+Ref: Ranges and Locales-Footnote-11154668
+Ref: Ranges and Locales-Footnote-21154695
+Ref: Ranges and Locales-Footnote-31154930
+Node: Contributors1155151
+Node: History summary1160711
+Node: Installation1162091
+Node: Gawk Distribution1163035
+Node: Getting1163519
+Node: Extracting1164480
+Node: Distribution contents1166118
+Node: Unix Installation1172460
+Node: Quick Installation1173142
+Node: Shell Startup Files1175556
+Node: Additional Configuration Options1176645
+Node: Configuration Philosophy1178634
+Node: Non-Unix Installation1181003
+Node: PC Installation1181463
+Node: PC Binary Installation1182301
+Node: PC Compiling1182736
+Node: PC Using1183853
+Node: Cygwin1186898
+Node: MSYS1187668
+Node: VMS Installation1188169
+Node: VMS Compilation1188960
+Ref: VMS Compilation-Footnote-11190189
+Node: VMS Dynamic Extensions1190247
+Node: VMS Installation Details1191932
+Node: VMS Running1194185
+Node: VMS GNV1198464
+Node: VMS Old Gawk1199199
+Node: Bugs1199670
+Node: Bug address1200333
+Node: Usenet1202730
+Node: Maintainers1203507
+Node: Other Versions1204883
+Node: Installation summary1211467
+Node: Notes1212502
+Node: Compatibility Mode1213367
+Node: Additions1214149
+Node: Accessing The Source1215074
+Node: Adding Code1216509
+Node: New Ports1222727
+Node: Derived Files1227215
+Ref: Derived Files-Footnote-11232700
+Ref: Derived Files-Footnote-21232735
+Ref: Derived Files-Footnote-31233333
+Node: Future Extensions1233447
+Node: Implementation Limitations1234105
+Node: Extension Design1235288
+Node: Old Extension Problems1236442
+Ref: Old Extension Problems-Footnote-11237960
+Node: Extension New Mechanism Goals1238017
+Ref: Extension New Mechanism Goals-Footnote-11241381
+Node: Extension Other Design Decisions1241570
+Node: Extension Future Growth1243683
+Node: Old Extension Mechanism1244519
+Node: Notes summary1246282
+Node: Basic Concepts1247464
+Node: Basic High Level1248145
+Ref: figure-general-flow1248427
+Ref: figure-process-flow1249112
+Ref: Basic High Level-Footnote-11252413
+Node: Basic Data Typing1252598
+Node: Glossary1255926
+Node: Copying1287873
+Node: GNU Free Documentation License1325412
+Node: Index1350530
 
 End Tag Table
diff --git a/doc/gawk.texi b/doc/gawk.texi
index 430a125..eecf82a 100644
--- a/doc/gawk.texi
+++ b/doc/gawk.texi
@@ -36590,7 +36590,9 @@ else
 The @code{inplace} extension emulates GNU @command{sed}'s @option{-i} option,
 which performs ``in-place'' editing of each input file.
 It uses the bundled @file{inplace.awk} include file to invoke the extension
-properly:
+properly.  This extension makes use of the namespace facility to place
+all the variables and functions in the @code{inplace} namespace
+(@pxref{Namespaces}):
 
 @example
 @c file eg/lib/inplace.awk
@@ -36599,8 +36601,8 @@ properly:
 
 @@load "inplace"
 
-# Please set INPLACE_SUFFIX to make a backup copy.  For example, you may
-# want to set INPLACE_SUFFIX to .bak on the command line or in a BEGIN rule.
+# Please set inplace::suffix to make a backup copy.  For example, you may
+# want to set inplace::suffix to .bak on the command line or in a BEGIN rule.
 
 # By default, each filename on the command line will be edited inplace.
 # But you can selectively disable this by adding an inplace=0 argument
@@ -36608,25 +36610,27 @@ properly:
 # reenable it later on the commandline by putting inplace=1 before files
 # that you wish to be subject to inplace editing.
 
-# N.B. We call inplace_end() in the BEGINFILE and END rules so that any
+# N.B. We call inplace::end() in the BEGINFILE and END rules so that any
 # actions in an ENDFILE rule will be redirected as expected.
 
+@@namespace "inplace"
+
 BEGIN @{
-    inplace = 1         # enabled by default
+    enable = 1         # enabled by default
 @}
 
 BEGINFILE @{
-    if (_inplace_filename != "")
-        inplace_end(_inplace_filename, INPLACE_SUFFIX)
-    if (inplace)
-        inplace_begin(_inplace_filename = FILENAME, INPLACE_SUFFIX)
+    if (filename != "")
+        end(filename, suffix)
+    if (enable)
+        begin(filename = FILENAME, suffix)
     else
-        _inplace_filename = ""
+        filename = ""
 @}
 
 END @{
-    if (_inplace_filename != "")
-        inplace_end(_inplace_filename, INPLACE_SUFFIX)
+    if (filename != "")
+        end(filename, suffix)
 @}
 @end group
 @c endfile
@@ -36636,17 +36640,18 @@ For each regular file that is processed, the 
extension redirects
 standard output to a temporary file configured to have the same owner
 and permissions as the original.  After the file has been processed,
 the extension restores standard output to its original destination.
-If @code{INPLACE_SUFFIX} is not an empty string, the original file is
+If @code{inplace::suffix} is not an empty string, the original file is
 linked to a backup @value{FN} created by appending that suffix.  Finally,
 the temporary file is renamed to the original @value{FN}.
 
-Note that the use of this feature can be controlled by placing @samp{inplace=0}
-on the command-line prior to listing files that should not be processed this
-way.  You can reenable inplace editing by adding an @samp{inplace=1} argument
-prior to files that should be subject to inplace editing.
+Note that the use of this feature can be controlled by placing
address@hidden::enable=0} on the command-line prior to listing files that
+should not be processed this way.  You can reenable inplace editing by adding
+an @samp{inplace::enable=1} argument prior to files that should be subject
+to inplace editing.
 
-The @code{_inplace_filename} variable serves to keep track of the
-current filename so as to not invoke @code{inplace_end()} before
+The @code{inplace::filename} variable serves to keep track of the
+current filename so as to not invoke @code{inplace::end()} before
 processing the first file.
 
 If any error occurs, the extension issues a fatal error to terminate
@@ -36661,7 +36666,7 @@ $ @kbd{gawk -i inplace '@{ gsub(/foo/, "bar") @}; @{ 
print @}' file1 file2 file3
 To keep a backup copy of the original files, try this:
 
 @example
-$ @kbd{gawk -i inplace -v INPLACE_SUFFIX=.bak '@{ gsub(/foo/, "bar") @}}
+$ @kbd{gawk -i inplace -v inplace::suffix=.bak '@{ gsub(/foo/, "bar") @}}
 > @address@hidden print @}' file1 file2 file3}
 @end example
 
diff --git a/doc/gawktexi.in b/doc/gawktexi.in
index 950500b..6800a09 100644
--- a/doc/gawktexi.in
+++ b/doc/gawktexi.in
@@ -35604,7 +35604,9 @@ else
 The @code{inplace} extension emulates GNU @command{sed}'s @option{-i} option,
 which performs ``in-place'' editing of each input file.
 It uses the bundled @file{inplace.awk} include file to invoke the extension
-properly:
+properly.  This extension makes use of the namespace facility to place
+all the variables and functions in the @code{inplace} namespace
+(@pxref{Namespaces}):
 
 @example
 @c file eg/lib/inplace.awk
@@ -35613,8 +35615,8 @@ properly:
 
 @@load "inplace"
 
-# Please set INPLACE_SUFFIX to make a backup copy.  For example, you may
-# want to set INPLACE_SUFFIX to .bak on the command line or in a BEGIN rule.
+# Please set inplace::suffix to make a backup copy.  For example, you may
+# want to set inplace::suffix to .bak on the command line or in a BEGIN rule.
 
 # By default, each filename on the command line will be edited inplace.
 # But you can selectively disable this by adding an inplace=0 argument
@@ -35622,25 +35624,27 @@ properly:
 # reenable it later on the commandline by putting inplace=1 before files
 # that you wish to be subject to inplace editing.
 
-# N.B. We call inplace_end() in the BEGINFILE and END rules so that any
+# N.B. We call inplace::end() in the BEGINFILE and END rules so that any
 # actions in an ENDFILE rule will be redirected as expected.
 
+@@namespace "inplace"
+
 BEGIN @{
-    inplace = 1         # enabled by default
+    enable = 1         # enabled by default
 @}
 
 BEGINFILE @{
-    if (_inplace_filename != "")
-        inplace_end(_inplace_filename, INPLACE_SUFFIX)
-    if (inplace)
-        inplace_begin(_inplace_filename = FILENAME, INPLACE_SUFFIX)
+    if (filename != "")
+        end(filename, suffix)
+    if (enable)
+        begin(filename = FILENAME, suffix)
     else
-        _inplace_filename = ""
+        filename = ""
 @}
 
 END @{
-    if (_inplace_filename != "")
-        inplace_end(_inplace_filename, INPLACE_SUFFIX)
+    if (filename != "")
+        end(filename, suffix)
 @}
 @end group
 @c endfile
@@ -35650,17 +35654,18 @@ For each regular file that is processed, the 
extension redirects
 standard output to a temporary file configured to have the same owner
 and permissions as the original.  After the file has been processed,
 the extension restores standard output to its original destination.
-If @code{INPLACE_SUFFIX} is not an empty string, the original file is
+If @code{inplace::suffix} is not an empty string, the original file is
 linked to a backup @value{FN} created by appending that suffix.  Finally,
 the temporary file is renamed to the original @value{FN}.
 
-Note that the use of this feature can be controlled by placing @samp{inplace=0}
-on the command-line prior to listing files that should not be processed this
-way.  You can reenable inplace editing by adding an @samp{inplace=1} argument
-prior to files that should be subject to inplace editing.
+Note that the use of this feature can be controlled by placing
address@hidden::enable=0} on the command-line prior to listing files that
+should not be processed this way.  You can reenable inplace editing by adding
+an @samp{inplace::enable=1} argument prior to files that should be subject
+to inplace editing.
 
-The @code{_inplace_filename} variable serves to keep track of the
-current filename so as to not invoke @code{inplace_end()} before
+The @code{inplace::filename} variable serves to keep track of the
+current filename so as to not invoke @code{inplace::end()} before
 processing the first file.
 
 If any error occurs, the extension issues a fatal error to terminate
@@ -35675,7 +35680,7 @@ $ @kbd{gawk -i inplace '@{ gsub(/foo/, "bar") @}; @{ 
print @}' file1 file2 file3
 To keep a backup copy of the original files, try this:
 
 @example
-$ @kbd{gawk -i inplace -v INPLACE_SUFFIX=.bak '@{ gsub(/foo/, "bar") @}}
+$ @kbd{gawk -i inplace -v inplace::suffix=.bak '@{ gsub(/foo/, "bar") @}}
 > @address@hidden print @}' file1 file2 file3}
 @end example
 
diff --git a/extension/ChangeLog b/extension/ChangeLog
index cc87160..8b28219 100644
--- a/extension/ChangeLog
+++ b/extension/ChangeLog
@@ -1,3 +1,8 @@
+2017-07-20         Arnold D. Robbins     <address@hidden>
+
+       * inplace.c: Move functions into "inplace" namespace and simplify
+       the names. Update all error messages accordingly.
+
 2017-07-13         Arnold D. Robbins     <address@hidden>
 
        * testext.c (init_test_ext): Add installation of a variable and a
diff --git a/extension/inplace.c b/extension/inplace.c
index f89017b..e0386f6 100644
--- a/extension/inplace.c
+++ b/extension/inplace.c
@@ -3,7 +3,7 @@
  */
 
 /*
- * Copyright (C) 2013-2015 the Free Software Foundation, Inc.
+ * Copyright (C) 2013-2015, 20017 the Free Software Foundation, Inc.
  *
  * This file is part of GAWK, the GNU implementation of the
  * AWK Programming Language.
@@ -128,13 +128,13 @@ do_inplace_begin(int nargs, awk_value_t *result, struct 
awk_ext_func *unused)
        fflush(stdout);
 
        if (state.tname)
-               fatal(ext_id, _("inplace_begin: in-place editing already 
active"));
+               fatal(ext_id, _("inplace::begin: in-place editing already 
active"));
 
        if (nargs != 2)
-               fatal(ext_id, _("inplace_begin: expects 2 arguments but called 
with %d"), nargs);
+               fatal(ext_id, _("inplace::begin: expects 2 arguments but called 
with %d"), nargs);
 
        if (! get_argument(0, AWK_STRING, &filename))
-               fatal(ext_id, _("inplace_begin: cannot retrieve 1st argument as 
a string filename"));
+               fatal(ext_id, _("inplace::begin: cannot retrieve 1st argument 
as a string filename"));
 
        /*
         * N.B. In the current implementation, the 2nd suffix arg is not used
@@ -142,21 +142,21 @@ do_inplace_begin(int nargs, awk_value_t *result, struct 
awk_ext_func *unused)
         */
 
        if (invalid_filename(&filename.str_value)) {
-               warning(ext_id, _("inplace_begin: disabling in-place editing 
for invalid FILENAME `%s'"),
+               warning(ext_id, _("inplace::begin: disabling in-place editing 
for invalid FILENAME `%s'"),
                        filename.str_value.str);
                unset_ERRNO();
                return make_number(-1, result);
        }
 
        if (stat(filename.str_value.str, & sbuf) < 0) {
-               warning(ext_id, _("inplace_begin: Cannot stat `%s' (%s)"),
+               warning(ext_id, _("inplace::begin: Cannot stat `%s' (%s)"),
                        filename.str_value.str, strerror(errno));
                update_ERRNO_int(errno);
                return make_number(-1, result);
        }
 
        if (! S_ISREG(sbuf.st_mode)) {
-               warning(ext_id, _("inplace_begin: `%s' is not a regular file"),
+               warning(ext_id, _("inplace::begin: `%s' is not a regular file"),
                        filename.str_value.str);
                unset_ERRNO();
                return make_number(-1, result);
@@ -167,7 +167,7 @@ do_inplace_begin(int nargs, awk_value_t *result, struct 
awk_ext_func *unused)
        sprintf(state.tname, "%s.gawk.XXXXXX", filename.str_value.str);
 
        if ((fd = mkstemp(state.tname)) < 0)
-               fatal(ext_id, _("inplace_begin: mkstemp(`%s') failed (%s)"),
+               fatal(ext_id, _("inplace::begin: mkstemp(`%s') failed (%s)"),
                        state.tname, strerror(errno));
 
        /* N.B. chown/chmod should be more portable than fchown/fchmod */
@@ -179,20 +179,20 @@ do_inplace_begin(int nargs, awk_value_t *result, struct 
awk_ext_func *unused)
        }
 
        if (chmod(state.tname, sbuf.st_mode) < 0)
-               fatal(ext_id, _("inplace_begin: chmod failed (%s)"),
+               fatal(ext_id, _("inplace::begin: chmod failed (%s)"),
                        strerror(errno));
 
        fflush(stdout);
        /* N.B. fgetpos fails when stdout is a tty */
        state.posrc = fgetpos(stdout, &state.pos);
        if ((state.default_stdout = dup(STDOUT_FILENO)) < 0)
-               fatal(ext_id, _("inplace_begin: dup(stdout) failed (%s)"),
+               fatal(ext_id, _("inplace::begin: dup(stdout) failed (%s)"),
                        strerror(errno));
        if (dup2(fd, STDOUT_FILENO) < 0)
-               fatal(ext_id, _("inplace_begin: dup2(%d, stdout) failed (%s)"),
+               fatal(ext_id, _("inplace::begin: dup2(%d, stdout) failed (%s)"),
                        fd, strerror(errno));
        if (close(fd) < 0)
-               fatal(ext_id, _("inplace_begin: close(%d) failed (%s)"),
+               fatal(ext_id, _("inplace::begin: close(%d) failed (%s)"),
                        fd, strerror(errno));
        rewind(stdout);
        return make_number(0, result);
@@ -208,30 +208,30 @@ do_inplace_end(int nargs, awk_value_t *result, struct 
awk_ext_func *unused)
        assert(result != NULL);
 
        if (nargs != 2)
-               fatal(ext_id, _("inplace_end: expects 2 arguments but called 
with %d"), nargs);
+               fatal(ext_id, _("inplace::end: expects 2 arguments but called 
with %d"), nargs);
 
        if (! get_argument(0, AWK_STRING, &filename))
-               fatal(ext_id, _("inplace_end: cannot retrieve 1st argument as a 
string filename"));
+               fatal(ext_id, _("inplace::end: cannot retrieve 1st argument as 
a string filename"));
 
        if (! get_argument(1, AWK_STRING, &suffix))
                suffix.str_value.str = NULL;
 
        if (! state.tname) {
                if (! invalid_filename(&filename.str_value))
-                       warning(ext_id, _("inplace_end: in-place editing not 
active"));
+                       warning(ext_id, _("inplace::end: in-place editing not 
active"));
                return make_number(0, result);
        }
 
        fflush(stdout);
        if (dup2(state.default_stdout, STDOUT_FILENO) < 0)
-               fatal(ext_id, _("inplace_end: dup2(%d, stdout) failed (%s)"),
+               fatal(ext_id, _("inplace::end: dup2(%d, stdout) failed (%s)"),
                        state.default_stdout, strerror(errno));
        if (close(state.default_stdout) < 0)
-               fatal(ext_id, _("inplace_end: close(%d) failed (%s)"),
+               fatal(ext_id, _("inplace::end: close(%d) failed (%s)"),
                        state.default_stdout, strerror(errno));
        state.default_stdout = -1;
        if (state.posrc == 0 && fsetpos(stdout, &state.pos) < 0)
-               fatal(ext_id, _("inplace_end: fsetpos(stdout) failed (%s)"),
+               fatal(ext_id, _("inplace::end: fsetpos(stdout) failed (%s)"),
                        strerror(errno));
 
        if (suffix.str_value.str && suffix.str_value.str[0]) {
@@ -254,7 +254,7 @@ do_inplace_end(int nargs, awk_value_t *result, struct 
awk_ext_func *unused)
 #endif
 
        if (rename(state.tname, filename.str_value.str) < 0)
-               fatal(ext_id, _("inplace_end: rename(`%s', `%s') failed (%s)"),
+               fatal(ext_id, _("inplace::end: rename(`%s', `%s') failed (%s)"),
                        state.tname, filename.str_value.str, strerror(errno));
        gawk_free(state.tname);
        state.tname = NULL;
@@ -262,8 +262,8 @@ do_inplace_end(int nargs, awk_value_t *result, struct 
awk_ext_func *unused)
 }
 
 static awk_ext_func_t func_table[] = {
-       { "inplace_begin", do_inplace_begin, 2, 2, awk_false, NULL },
-       { "inplace_end", do_inplace_end, 2, 2, awk_false, NULL },
+       { "begin", do_inplace_begin, 2, 2, awk_false, NULL },
+       { "end", do_inplace_end, 2, 2, awk_false, NULL },
 };
 
 static awk_bool_t init_inplace(void)
@@ -276,4 +276,4 @@ static awk_bool_t (*init_func)(void) = init_inplace;
 
 /* define the dl_load function using the boilerplate macro */
 
-dl_load_func(func_table, inplace, "")
+dl_load_func(func_table, inplace, "inplace")
diff --git a/test/ChangeLog b/test/ChangeLog
index d894dbe..37007dd 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,3 +1,10 @@
+2017-07-20         Arnold D. Robbins     <address@hidden>
+
+       * Makefile.am (inplace1, inplace2, inplace3): Update to use
+       inplace::suffix instead of INPLACE_SUFFIX.
+       * inplace1.ok, inplace2.ok, inplace3.ok: Update after code
+       changes.
+
 2017-07-07         Arnold D. Robbins     <address@hidden>
 
        * Makefile.am (eofsrc1): New test.
diff --git a/test/Makefile.am b/test/Makefile.am
index 5efae6c..7aa1bd9 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -2190,7 +2190,7 @@ inplace2::
        @echo $@
        @cp "$(srcdir)"/inplace.1.in address@hidden
        @cp "$(srcdir)"/inplace.2.in address@hidden
-       @AWKPATH="$(srcdir)"/../awklib/eg/lib $(AWK) -i inplace -v 
INPLACE_SUFFIX=.bak 'BEGIN {print "before"} {gsub(/foo/, "bar"); print} END 
{print "after"}' address@hidden - address@hidden < "$(srcdir)"/inplace.in >_$@ 
2>&1 || echo EXIT CODE: $$? >>_$@
+       @AWKPATH="$(srcdir)"/../awklib/eg/lib $(AWK) -i inplace -v 
inplace::suffix=.bak 'BEGIN {print "before"} {gsub(/foo/, "bar"); print} END 
{print "after"}' address@hidden - address@hidden < "$(srcdir)"/inplace.in >_$@ 
2>&1 || echo EXIT CODE: $$? >>_$@
        @-$(CMP) "$(srcdir)"/address@hidden _$@ && rm -f _$@
        @-$(CMP) "$(srcdir)"/address@hidden address@hidden && rm -f 
address@hidden
        @-$(CMP) "$(srcdir)"/address@hidden address@hidden && rm -f 
address@hidden
@@ -2201,8 +2201,8 @@ inplace3::
        @echo $@
        @cp "$(srcdir)"/inplace.1.in address@hidden
        @cp "$(srcdir)"/inplace.2.in address@hidden
-       @AWKPATH="$(srcdir)"/../awklib/eg/lib $(AWK) -i inplace -v 
INPLACE_SUFFIX=.bak 'BEGIN {print "before"} {gsub(/foo/, "bar"); print} END 
{print "after"}' address@hidden - address@hidden < "$(srcdir)"/inplace.in >_$@ 
2>&1 || echo EXIT CODE: $$? >>_$@
-       @AWKPATH="$(srcdir)"/../awklib/eg/lib $(AWK) -i inplace -v 
INPLACE_SUFFIX=.bak 'BEGIN {print "Before"} {gsub(/bar/, "foo"); print} END 
{print "After"}' address@hidden - address@hidden < "$(srcdir)"/inplace.in >>_$@ 
2>&1 || echo EXIT CODE: $$? >>_$@
+       @AWKPATH="$(srcdir)"/../awklib/eg/lib $(AWK) -i inplace -v 
inplace::suffix=.bak 'BEGIN {print "before"} {gsub(/foo/, "bar"); print} END 
{print "after"}' address@hidden - address@hidden < "$(srcdir)"/inplace.in >_$@ 
2>&1 || echo EXIT CODE: $$? >>_$@
+       @AWKPATH="$(srcdir)"/../awklib/eg/lib $(AWK) -i inplace -v 
inplace::suffix=.bak 'BEGIN {print "Before"} {gsub(/bar/, "foo"); print} END 
{print "After"}' address@hidden - address@hidden < "$(srcdir)"/inplace.in >>_$@ 
2>&1 || echo EXIT CODE: $$? >>_$@
        @-$(CMP) "$(srcdir)"/address@hidden _$@ && rm -f _$@
        @-$(CMP) "$(srcdir)"/address@hidden address@hidden && rm -f 
address@hidden
        @-$(CMP) "$(srcdir)"/address@hidden address@hidden && rm -f 
address@hidden
diff --git a/test/Makefile.in b/test/Makefile.in
index 553a086..8703347 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -2629,7 +2629,7 @@ inplace2::
        @echo $@
        @cp "$(srcdir)"/inplace.1.in address@hidden
        @cp "$(srcdir)"/inplace.2.in address@hidden
-       @AWKPATH="$(srcdir)"/../awklib/eg/lib $(AWK) -i inplace -v 
INPLACE_SUFFIX=.bak 'BEGIN {print "before"} {gsub(/foo/, "bar"); print} END 
{print "after"}' address@hidden - address@hidden < "$(srcdir)"/inplace.in >_$@ 
2>&1 || echo EXIT CODE: $$? >>_$@
+       @AWKPATH="$(srcdir)"/../awklib/eg/lib $(AWK) -i inplace -v 
inplace::suffix=.bak 'BEGIN {print "before"} {gsub(/foo/, "bar"); print} END 
{print "after"}' address@hidden - address@hidden < "$(srcdir)"/inplace.in >_$@ 
2>&1 || echo EXIT CODE: $$? >>_$@
        @-$(CMP) "$(srcdir)"/address@hidden _$@ && rm -f _$@
        @-$(CMP) "$(srcdir)"/address@hidden address@hidden && rm -f 
address@hidden
        @-$(CMP) "$(srcdir)"/address@hidden address@hidden && rm -f 
address@hidden
@@ -2640,8 +2640,8 @@ inplace3::
        @echo $@
        @cp "$(srcdir)"/inplace.1.in address@hidden
        @cp "$(srcdir)"/inplace.2.in address@hidden
-       @AWKPATH="$(srcdir)"/../awklib/eg/lib $(AWK) -i inplace -v 
INPLACE_SUFFIX=.bak 'BEGIN {print "before"} {gsub(/foo/, "bar"); print} END 
{print "after"}' address@hidden - address@hidden < "$(srcdir)"/inplace.in >_$@ 
2>&1 || echo EXIT CODE: $$? >>_$@
-       @AWKPATH="$(srcdir)"/../awklib/eg/lib $(AWK) -i inplace -v 
INPLACE_SUFFIX=.bak 'BEGIN {print "Before"} {gsub(/bar/, "foo"); print} END 
{print "After"}' address@hidden - address@hidden < "$(srcdir)"/inplace.in >>_$@ 
2>&1 || echo EXIT CODE: $$? >>_$@
+       @AWKPATH="$(srcdir)"/../awklib/eg/lib $(AWK) -i inplace -v 
inplace::suffix=.bak 'BEGIN {print "before"} {gsub(/foo/, "bar"); print} END 
{print "after"}' address@hidden - address@hidden < "$(srcdir)"/inplace.in >_$@ 
2>&1 || echo EXIT CODE: $$? >>_$@
+       @AWKPATH="$(srcdir)"/../awklib/eg/lib $(AWK) -i inplace -v 
inplace::suffix=.bak 'BEGIN {print "Before"} {gsub(/bar/, "foo"); print} END 
{print "After"}' address@hidden - address@hidden < "$(srcdir)"/inplace.in >>_$@ 
2>&1 || echo EXIT CODE: $$? >>_$@
        @-$(CMP) "$(srcdir)"/address@hidden _$@ && rm -f _$@
        @-$(CMP) "$(srcdir)"/address@hidden address@hidden && rm -f 
address@hidden
        @-$(CMP) "$(srcdir)"/address@hidden address@hidden && rm -f 
address@hidden
diff --git a/test/inplace1.ok b/test/inplace1.ok
index 91b5276..947d015 100644
--- a/test/inplace1.ok
+++ b/test/inplace1.ok
@@ -1,5 +1,5 @@
 before
-gawk: inplace:25: warning: inplace_begin: disabling in-place editing for 
invalid FILENAME `-'
+gawk: inplace:27: warning: inplace::begin: disabling in-place editing for 
invalid FILENAME `-'
 stdin start
 is bar replaced?
 stdin end
diff --git a/test/inplace2.ok b/test/inplace2.ok
index 91b5276..947d015 100644
--- a/test/inplace2.ok
+++ b/test/inplace2.ok
@@ -1,5 +1,5 @@
 before
-gawk: inplace:25: warning: inplace_begin: disabling in-place editing for 
invalid FILENAME `-'
+gawk: inplace:27: warning: inplace::begin: disabling in-place editing for 
invalid FILENAME `-'
 stdin start
 is bar replaced?
 stdin end
diff --git a/test/inplace3.ok b/test/inplace3.ok
index deb926b..9135154 100644
--- a/test/inplace3.ok
+++ b/test/inplace3.ok
@@ -1,11 +1,11 @@
 before
-gawk: inplace:25: warning: inplace_begin: disabling in-place editing for 
invalid FILENAME `-'
+gawk: inplace:27: warning: inplace::begin: disabling in-place editing for 
invalid FILENAME `-'
 stdin start
 is bar replaced?
 stdin end
 after
 Before
-gawk: inplace:25: warning: inplace_begin: disabling in-place editing for 
invalid FILENAME `-'
+gawk: inplace:27: warning: inplace::begin: disabling in-place editing for 
invalid FILENAME `-'
 stdin start
 is foo replaced?
 stdin end

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

commit 9c4c19a3f18706a85681373f49d7028e53bd5524
Author: Arnold D. Robbins <address@hidden>
Date:   Thu Jul 20 21:02:49 2017 +0300

    Make -v and command-line assignments work with qualified names.

diff --git a/ChangeLog b/ChangeLog
index 238c337..0755ada 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2017-07-20         Arnold D. Robbins     <address@hidden>
+
+       Make qualified names work with -v and command-line assignments.
+
+       * awk.h (validate_qualified_name, check_qualified_name): Declare.
+       * awkgram.y (validate_qualified_name): No longer static.
+       (check_qualified_name): Ditto.
+       * main.c (arg_assign): Allow colons in identifiers. If not a
+       bad identifier, call validate_qualified_name and instead of
+       check_special use check_qualified_name.
+
 2017-07-17         Arnold D. Robbins     <address@hidden>
 
        Allow identifiers that are gawk extensions to be used as plain
diff --git a/awk.h b/awk.h
index 08a487a..44d72c3 100644
--- a/awk.h
+++ b/awk.h
@@ -1430,6 +1430,8 @@ extern bool is_alnum(int c);
 extern bool is_letter(int c);
 extern bool is_identchar(int c);
 extern NODE *make_regnode(int type, NODE *exp);
+extern void validate_qualified_name(char *token);
+extern int check_qualified_name(char *token);
 /* builtin.c */
 extern double double_to_int(double d);
 extern NODE *do_exp(int nargs);
diff --git a/awkgram.c b/awkgram.c
index 577d1d4..37b8c66 100644
--- a/awkgram.c
+++ b/awkgram.c
@@ -99,8 +99,6 @@ static bool set_namespace(INSTRUCTION *ns);
 static void next_sourcefile(void);
 static char *tokexpand(void);
 static NODE *set_profile_text(NODE *n, const char *str, size_t len);
-static void validate_qualified_name(char *token);
-static int check_qualified_name(char *token);
 static char *make_pp_namespace();
 
 #define instruction(t) bcalloc(t, 1, 0)
@@ -220,7 +218,7 @@ extern double fmod(double x, double y);
 
 #define YYSTYPE INSTRUCTION *
 
-#line 224 "awkgram.c" /* yacc.c:339  */
+#line 222 "awkgram.c" /* yacc.c:339  */
 
 # ifndef YY_NULLPTR
 #  if defined __cplusplus && 201103L <= __cplusplus
@@ -378,7 +376,7 @@ int yyparse (void);
 
 /* Copy the second part of user declarations.  */
 
-#line 382 "awkgram.c" /* yacc.c:358  */
+#line 380 "awkgram.c" /* yacc.c:358  */
 
 #ifdef short
 # undef short
@@ -681,27 +679,27 @@ static const yytype_uint8 yytranslate[] =
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   223,   223,   225,   230,   231,   235,   247,   252,   263,
-     270,   276,   282,   296,   304,   306,   311,   319,   321,   326,
-     328,   330,   336,   344,   354,   384,   398,   412,   420,   431,
-     443,   445,   447,   453,   461,   462,   466,   466,   512,   511,
-     545,   560,   562,   567,   577,   624,   629,   630,   634,   636,
-     638,   645,   735,   777,   819,   932,   939,   946,   957,   967,
-     977,   987,   999,  1016,  1015,  1040,  1052,  1052,  1151,  1151,
-    1185,  1216,  1225,  1226,  1232,  1233,  1240,  1245,  1257,  1271,
-    1273,  1281,  1288,  1290,  1298,  1307,  1309,  1318,  1319,  1327,
-    1332,  1332,  1343,  1347,  1355,  1356,  1359,  1361,  1366,  1367,
-    1376,  1377,  1382,  1387,  1396,  1398,  1400,  1407,  1408,  1414,
-    1415,  1420,  1422,  1427,  1429,  1437,  1442,  1451,  1452,  1457,
-    1459,  1464,  1466,  1474,  1479,  1487,  1488,  1493,  1500,  1504,
-    1506,  1508,  1521,  1538,  1548,  1555,  1557,  1562,  1564,  1566,
-    1574,  1576,  1581,  1583,  1588,  1590,  1592,  1648,  1650,  1652,
-    1654,  1656,  1658,  1660,  1662,  1676,  1681,  1686,  1711,  1717,
-    1719,  1721,  1723,  1725,  1727,  1732,  1736,  1768,  1775,  1781,
-    1787,  1800,  1801,  1802,  1807,  1812,  1816,  1820,  1835,  1856,
-    1861,  1898,  1940,  1941,  1947,  1948,  1953,  1955,  1962,  1979,
-    1996,  1998,  2005,  2010,  2018,  2028,  2040,  2049,  2053,  2057,
-    2061,  2065,  2069,  2072,  2074,  2078,  2082,  2086
+       0,   221,   221,   223,   228,   229,   233,   245,   250,   261,
+     268,   274,   280,   294,   302,   304,   309,   317,   319,   324,
+     326,   328,   334,   342,   352,   382,   396,   410,   418,   429,
+     441,   443,   445,   451,   459,   460,   464,   464,   510,   509,
+     543,   558,   560,   565,   575,   622,   627,   628,   632,   634,
+     636,   643,   733,   775,   817,   930,   937,   944,   955,   965,
+     975,   985,   997,  1014,  1013,  1038,  1050,  1050,  1149,  1149,
+    1183,  1214,  1223,  1224,  1230,  1231,  1238,  1243,  1255,  1269,
+    1271,  1279,  1286,  1288,  1296,  1305,  1307,  1316,  1317,  1325,
+    1330,  1330,  1341,  1345,  1353,  1354,  1357,  1359,  1364,  1365,
+    1374,  1375,  1380,  1385,  1394,  1396,  1398,  1405,  1406,  1412,
+    1413,  1418,  1420,  1425,  1427,  1435,  1440,  1449,  1450,  1455,
+    1457,  1462,  1464,  1472,  1477,  1485,  1486,  1491,  1498,  1502,
+    1504,  1506,  1519,  1536,  1546,  1553,  1555,  1560,  1562,  1564,
+    1572,  1574,  1579,  1581,  1586,  1588,  1590,  1646,  1648,  1650,
+    1652,  1654,  1656,  1658,  1660,  1674,  1679,  1684,  1709,  1715,
+    1717,  1719,  1721,  1723,  1725,  1730,  1734,  1766,  1773,  1779,
+    1785,  1798,  1799,  1800,  1805,  1810,  1814,  1818,  1833,  1854,
+    1859,  1896,  1938,  1939,  1945,  1946,  1951,  1953,  1960,  1977,
+    1994,  1996,  2003,  2008,  2016,  2026,  2038,  2047,  2051,  2055,
+    2059,  2063,  2067,  2070,  2072,  2076,  2080,  2084
 };
 #endif
 
@@ -1897,24 +1895,24 @@ yyreduce:
   switch (yyn)
     {
         case 3:
-#line 226 "awkgram.y" /* yacc.c:1646  */
+#line 224 "awkgram.y" /* yacc.c:1646  */
     {
                rule = 0;
                yyerrok;
          }
-#line 1906 "awkgram.c" /* yacc.c:1646  */
+#line 1904 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 5:
-#line 232 "awkgram.y" /* yacc.c:1646  */
+#line 230 "awkgram.y" /* yacc.c:1646  */
     {
                next_sourcefile();
          }
-#line 1914 "awkgram.c" /* yacc.c:1646  */
+#line 1912 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 6:
-#line 236 "awkgram.y" /* yacc.c:1646  */
+#line 234 "awkgram.y" /* yacc.c:1646  */
     {
                rule = 0;
                /*
@@ -1923,20 +1921,20 @@ yyreduce:
                 */
                /* yyerrok; */
          }
-#line 1927 "awkgram.c" /* yacc.c:1646  */
+#line 1925 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 7:
-#line 248 "awkgram.y" /* yacc.c:1646  */
+#line 246 "awkgram.y" /* yacc.c:1646  */
     {
                (void) append_rule((yyvsp[-1]), (yyvsp[0]));
                first_rule = false;
          }
-#line 1936 "awkgram.c" /* yacc.c:1646  */
+#line 1934 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 8:
-#line 253 "awkgram.y" /* yacc.c:1646  */
+#line 251 "awkgram.y" /* yacc.c:1646  */
     {
                if (rule != Rule) {
                        msg(_("%s blocks must have an action part"), 
ruletab[rule]);
@@ -1947,42 +1945,42 @@ yyreduce:
                } else          /* pattern rule with non-empty pattern */
                        (void) append_rule((yyvsp[-1]), NULL);
          }
-#line 1951 "awkgram.c" /* yacc.c:1646  */
+#line 1949 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 9:
-#line 264 "awkgram.y" /* yacc.c:1646  */
+#line 262 "awkgram.y" /* yacc.c:1646  */
     {
                in_function = NULL;
                (void) mk_function((yyvsp[-1]), (yyvsp[0]));
                want_param_names = DONT_CHECK;
                yyerrok;
          }
-#line 1962 "awkgram.c" /* yacc.c:1646  */
+#line 1960 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 10:
-#line 271 "awkgram.y" /* yacc.c:1646  */
+#line 269 "awkgram.y" /* yacc.c:1646  */
     {
                want_source = false;
                at_seen = false;
                yyerrok;
          }
-#line 1972 "awkgram.c" /* yacc.c:1646  */
+#line 1970 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 11:
-#line 277 "awkgram.y" /* yacc.c:1646  */
+#line 275 "awkgram.y" /* yacc.c:1646  */
     {
                want_source = false;
                at_seen = false;
                yyerrok;
          }
-#line 1982 "awkgram.c" /* yacc.c:1646  */
+#line 1980 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 12:
-#line 283 "awkgram.y" /* yacc.c:1646  */
+#line 281 "awkgram.y" /* yacc.c:1646  */
     {
                want_source = false;
                at_seen = false;
@@ -1993,11 +1991,11 @@ yyreduce:
 
                yyerrok;
          }
-#line 1997 "awkgram.c" /* yacc.c:1646  */
+#line 1995 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 13:
-#line 297 "awkgram.y" /* yacc.c:1646  */
+#line 295 "awkgram.y" /* yacc.c:1646  */
     {
                if (include_source((yyvsp[0])) < 0)
                        YYABORT;
@@ -2005,23 +2003,23 @@ yyreduce:
                bcfree((yyvsp[0]));
                (yyval) = NULL;
          }
-#line 2009 "awkgram.c" /* yacc.c:1646  */
+#line 2007 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 14:
-#line 305 "awkgram.y" /* yacc.c:1646  */
+#line 303 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 2015 "awkgram.c" /* yacc.c:1646  */
+#line 2013 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 15:
-#line 307 "awkgram.y" /* yacc.c:1646  */
+#line 305 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 2021 "awkgram.c" /* yacc.c:1646  */
+#line 2019 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 16:
-#line 312 "awkgram.y" /* yacc.c:1646  */
+#line 310 "awkgram.y" /* yacc.c:1646  */
     {
                if (load_library((yyvsp[0])) < 0)
                        YYABORT;
@@ -2029,41 +2027,41 @@ yyreduce:
                bcfree((yyvsp[0]));
                (yyval) = NULL;
          }
-#line 2033 "awkgram.c" /* yacc.c:1646  */
+#line 2031 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 17:
-#line 320 "awkgram.y" /* yacc.c:1646  */
+#line 318 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 2039 "awkgram.c" /* yacc.c:1646  */
+#line 2037 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 18:
-#line 322 "awkgram.y" /* yacc.c:1646  */
+#line 320 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 2045 "awkgram.c" /* yacc.c:1646  */
+#line 2043 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 19:
-#line 327 "awkgram.y" /* yacc.c:1646  */
+#line 325 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 2051 "awkgram.c" /* yacc.c:1646  */
+#line 2049 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 20:
-#line 329 "awkgram.y" /* yacc.c:1646  */
+#line 327 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 2057 "awkgram.c" /* yacc.c:1646  */
+#line 2055 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 21:
-#line 331 "awkgram.y" /* yacc.c:1646  */
+#line 329 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 2063 "awkgram.c" /* yacc.c:1646  */
+#line 2061 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 22:
-#line 336 "awkgram.y" /* yacc.c:1646  */
+#line 334 "awkgram.y" /* yacc.c:1646  */
     {
                rule = Rule;
                if (comment != NULL) {
@@ -2072,11 +2070,11 @@ yyreduce:
                } else
                        (yyval) = NULL;
          }
-#line 2076 "awkgram.c" /* yacc.c:1646  */
+#line 2074 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 23:
-#line 345 "awkgram.y" /* yacc.c:1646  */
+#line 343 "awkgram.y" /* yacc.c:1646  */
     {
                rule = Rule;
                if (comment != NULL) {
@@ -2085,11 +2083,11 @@ yyreduce:
                } else
                        (yyval) = (yyvsp[0]);
          }
-#line 2089 "awkgram.c" /* yacc.c:1646  */
+#line 2087 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 24:
-#line 355 "awkgram.y" /* yacc.c:1646  */
+#line 353 "awkgram.y" /* yacc.c:1646  */
     {
                INSTRUCTION *tp;
 
@@ -2119,11 +2117,11 @@ yyreduce:
                        (yyval) = list_append(list_merge((yyvsp[-3]), 
(yyvsp[0])), tp);
                rule = Rule;
          }
-#line 2123 "awkgram.c" /* yacc.c:1646  */
+#line 2121 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 25:
-#line 385 "awkgram.y" /* yacc.c:1646  */
+#line 383 "awkgram.y" /* yacc.c:1646  */
     {
                static int begin_seen = 0;
 
@@ -2137,11 +2135,11 @@ yyreduce:
                check_comment();
                (yyval) = (yyvsp[0]);
          }
-#line 2141 "awkgram.c" /* yacc.c:1646  */
+#line 2139 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 26:
-#line 399 "awkgram.y" /* yacc.c:1646  */
+#line 397 "awkgram.y" /* yacc.c:1646  */
     {
                static int end_seen = 0;
 
@@ -2155,11 +2153,11 @@ yyreduce:
                check_comment();
                (yyval) = (yyvsp[0]);
          }
-#line 2159 "awkgram.c" /* yacc.c:1646  */
+#line 2157 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 27:
-#line 413 "awkgram.y" /* yacc.c:1646  */
+#line 411 "awkgram.y" /* yacc.c:1646  */
     {
                func_first = false;
                (yyvsp[0])->in_rule = rule = BEGINFILE;
@@ -2167,11 +2165,11 @@ yyreduce:
                check_comment();
                (yyval) = (yyvsp[0]);
          }
-#line 2171 "awkgram.c" /* yacc.c:1646  */
+#line 2169 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 28:
-#line 421 "awkgram.y" /* yacc.c:1646  */
+#line 419 "awkgram.y" /* yacc.c:1646  */
     {
                func_first = false;
                (yyvsp[0])->in_rule = rule = ENDFILE;
@@ -2179,11 +2177,11 @@ yyreduce:
                check_comment();
                (yyval) = (yyvsp[0]);
          }
-#line 2183 "awkgram.c" /* yacc.c:1646  */
+#line 2181 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 29:
-#line 432 "awkgram.y" /* yacc.c:1646  */
+#line 430 "awkgram.y" /* yacc.c:1646  */
     {
                INSTRUCTION *ip;
                if ((yyvsp[-3]) == NULL)
@@ -2192,48 +2190,48 @@ yyreduce:
                        ip = (yyvsp[-3]);
                (yyval) = ip;
          }
-#line 2196 "awkgram.c" /* yacc.c:1646  */
+#line 2194 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 30:
-#line 444 "awkgram.y" /* yacc.c:1646  */
+#line 442 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 2202 "awkgram.c" /* yacc.c:1646  */
+#line 2200 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 31:
-#line 446 "awkgram.y" /* yacc.c:1646  */
+#line 444 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 2208 "awkgram.c" /* yacc.c:1646  */
+#line 2206 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 32:
-#line 448 "awkgram.y" /* yacc.c:1646  */
+#line 446 "awkgram.y" /* yacc.c:1646  */
     {
                yyerror(_("`%s' is a built-in function, it cannot be 
redefined"),
                                        tokstart);
                YYABORT;
          }
-#line 2218 "awkgram.c" /* yacc.c:1646  */
+#line 2216 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 33:
-#line 454 "awkgram.y" /* yacc.c:1646  */
+#line 452 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = (yyvsp[0]);
                at_seen = false;
          }
-#line 2227 "awkgram.c" /* yacc.c:1646  */
+#line 2225 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 36:
-#line 466 "awkgram.y" /* yacc.c:1646  */
+#line 464 "awkgram.y" /* yacc.c:1646  */
     { want_param_names = FUNC_HEADER; }
-#line 2233 "awkgram.c" /* yacc.c:1646  */
+#line 2231 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 37:
-#line 467 "awkgram.y" /* yacc.c:1646  */
+#line 465 "awkgram.y" /* yacc.c:1646  */
     {
                /*
                 *  treat any comments between BOF and the first function
@@ -2271,17 +2269,17 @@ yyreduce:
                (yyval) = (yyvsp[-6]);
                want_param_names = FUNC_BODY;
          }
-#line 2275 "awkgram.c" /* yacc.c:1646  */
+#line 2273 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 38:
-#line 512 "awkgram.y" /* yacc.c:1646  */
+#line 510 "awkgram.y" /* yacc.c:1646  */
     { want_regexp = true; }
-#line 2281 "awkgram.c" /* yacc.c:1646  */
+#line 2279 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 39:
-#line 514 "awkgram.y" /* yacc.c:1646  */
+#line 512 "awkgram.y" /* yacc.c:1646  */
     {
                  NODE *n, *exp;
                  char *re;
@@ -2310,11 +2308,11 @@ yyreduce:
                  (yyval)->opcode = Op_match_rec;
                  (yyval)->memory = n;
                }
-#line 2314 "awkgram.c" /* yacc.c:1646  */
+#line 2312 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 40:
-#line 546 "awkgram.y" /* yacc.c:1646  */
+#line 544 "awkgram.y" /* yacc.c:1646  */
     {
                  char *re;
                  size_t len;
@@ -2327,17 +2325,17 @@ yyreduce:
                  (yyval)->opcode = Op_push_re;
                  (yyval)->memory = make_typed_regex(re, len);
                }
-#line 2331 "awkgram.c" /* yacc.c:1646  */
+#line 2329 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 41:
-#line 561 "awkgram.y" /* yacc.c:1646  */
+#line 559 "awkgram.y" /* yacc.c:1646  */
     { bcfree((yyvsp[0])); }
-#line 2337 "awkgram.c" /* yacc.c:1646  */
+#line 2335 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 43:
-#line 567 "awkgram.y" /* yacc.c:1646  */
+#line 565 "awkgram.y" /* yacc.c:1646  */
     {
                if (prior_comment != NULL) {
                        (yyval) = list_create(prior_comment);
@@ -2348,11 +2346,11 @@ yyreduce:
                } else
                        (yyval) = NULL;
          }
-#line 2352 "awkgram.c" /* yacc.c:1646  */
+#line 2350 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 44:
-#line 578 "awkgram.y" /* yacc.c:1646  */
+#line 576 "awkgram.y" /* yacc.c:1646  */
     {
                if ((yyvsp[0]) == NULL) {
                        if (prior_comment != NULL) {
@@ -2399,40 +2397,40 @@ yyreduce:
                }
                yyerrok;
          }
-#line 2403 "awkgram.c" /* yacc.c:1646  */
+#line 2401 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 45:
-#line 625 "awkgram.y" /* yacc.c:1646  */
+#line 623 "awkgram.y" /* yacc.c:1646  */
     {  (yyval) = NULL; }
-#line 2409 "awkgram.c" /* yacc.c:1646  */
+#line 2407 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 48:
-#line 635 "awkgram.y" /* yacc.c:1646  */
+#line 633 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 2415 "awkgram.c" /* yacc.c:1646  */
+#line 2413 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 49:
-#line 637 "awkgram.y" /* yacc.c:1646  */
+#line 635 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[-1]); }
-#line 2421 "awkgram.c" /* yacc.c:1646  */
+#line 2419 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 50:
-#line 639 "awkgram.y" /* yacc.c:1646  */
+#line 637 "awkgram.y" /* yacc.c:1646  */
     {
                if (do_pretty_print)
                        (yyval) = list_prepend((yyvsp[0]), 
instruction(Op_exec_count));
                else
                        (yyval) = (yyvsp[0]);
          }
-#line 2432 "awkgram.c" /* yacc.c:1646  */
+#line 2430 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 51:
-#line 646 "awkgram.y" /* yacc.c:1646  */
+#line 644 "awkgram.y" /* yacc.c:1646  */
     {
                INSTRUCTION *dflt, *curr = NULL, *cexp, *cstmt;
                INSTRUCTION *ip, *nextc, *tbreak;
@@ -2522,11 +2520,11 @@ yyreduce:
                break_allowed--;
                fix_break_continue(ip, tbreak, NULL);
          }
-#line 2526 "awkgram.c" /* yacc.c:1646  */
+#line 2524 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 52:
-#line 736 "awkgram.y" /* yacc.c:1646  */
+#line 734 "awkgram.y" /* yacc.c:1646  */
     {
                /*
                 *    -----------------
@@ -2568,11 +2566,11 @@ yyreduce:
                continue_allowed--;
                fix_break_continue(ip, tbreak, tcont);
          }
-#line 2572 "awkgram.c" /* yacc.c:1646  */
+#line 2570 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 53:
-#line 778 "awkgram.y" /* yacc.c:1646  */
+#line 776 "awkgram.y" /* yacc.c:1646  */
     {
                /*
                 *    -----------------
@@ -2614,11 +2612,11 @@ yyreduce:
                } /* else
                        $1 and $4 are NULLs */
          }
-#line 2618 "awkgram.c" /* yacc.c:1646  */
+#line 2616 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 54:
-#line 820 "awkgram.y" /* yacc.c:1646  */
+#line 818 "awkgram.y" /* yacc.c:1646  */
     {
                INSTRUCTION *ip;
                char *var_name = (yyvsp[-5])->lextok;
@@ -2731,33 +2729,33 @@ regular_loop:
                break_allowed--;
                continue_allowed--;
          }
-#line 2735 "awkgram.c" /* yacc.c:1646  */
+#line 2733 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 55:
-#line 933 "awkgram.y" /* yacc.c:1646  */
+#line 931 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = mk_for_loop((yyvsp[-11]), (yyvsp[-9]), (yyvsp[-6]), 
(yyvsp[-3]), (yyvsp[0]));
 
                break_allowed--;
                continue_allowed--;
          }
-#line 2746 "awkgram.c" /* yacc.c:1646  */
+#line 2744 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 56:
-#line 940 "awkgram.y" /* yacc.c:1646  */
+#line 938 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = mk_for_loop((yyvsp[-10]), (yyvsp[-8]), (INSTRUCTION 
*) NULL, (yyvsp[-3]), (yyvsp[0]));
 
                break_allowed--;
                continue_allowed--;
          }
-#line 2757 "awkgram.c" /* yacc.c:1646  */
+#line 2755 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 57:
-#line 947 "awkgram.y" /* yacc.c:1646  */
+#line 945 "awkgram.y" /* yacc.c:1646  */
     {
                if (do_pretty_print)
                        (yyval) = list_prepend((yyvsp[0]), 
instruction(Op_exec_count));
@@ -2765,11 +2763,11 @@ regular_loop:
                        (yyval) = (yyvsp[0]);
                (yyval) = add_pending_comment((yyval));
          }
-#line 2769 "awkgram.c" /* yacc.c:1646  */
+#line 2767 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 58:
-#line 958 "awkgram.y" /* yacc.c:1646  */
+#line 956 "awkgram.y" /* yacc.c:1646  */
     {
                if (! break_allowed)
                        error_ln((yyvsp[-1])->source_line,
@@ -2779,11 +2777,11 @@ regular_loop:
                (yyval) = add_pending_comment((yyval));
 
          }
-#line 2783 "awkgram.c" /* yacc.c:1646  */
+#line 2781 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 59:
-#line 968 "awkgram.y" /* yacc.c:1646  */
+#line 966 "awkgram.y" /* yacc.c:1646  */
     {
                if (! continue_allowed)
                        error_ln((yyvsp[-1])->source_line,
@@ -2793,11 +2791,11 @@ regular_loop:
                (yyval) = add_pending_comment((yyval));
 
          }
-#line 2797 "awkgram.c" /* yacc.c:1646  */
+#line 2795 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 60:
-#line 978 "awkgram.y" /* yacc.c:1646  */
+#line 976 "awkgram.y" /* yacc.c:1646  */
     {
                /* if inside function (rule = 0), resolve context at run-time */
                if (rule && rule != Rule)
@@ -2807,11 +2805,11 @@ regular_loop:
                (yyval) = list_create((yyvsp[-1]));
                (yyval) = add_pending_comment((yyval));
          }
-#line 2811 "awkgram.c" /* yacc.c:1646  */
+#line 2809 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 61:
-#line 988 "awkgram.y" /* yacc.c:1646  */
+#line 986 "awkgram.y" /* yacc.c:1646  */
     {
                /* if inside function (rule = 0), resolve context at run-time */
                if (rule == BEGIN || rule == END || rule == ENDFILE)
@@ -2823,11 +2821,11 @@ regular_loop:
                (yyval) = list_create((yyvsp[-1]));
                (yyval) = add_pending_comment((yyval));
          }
-#line 2827 "awkgram.c" /* yacc.c:1646  */
+#line 2825 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 62:
-#line 1000 "awkgram.y" /* yacc.c:1646  */
+#line 998 "awkgram.y" /* yacc.c:1646  */
     {
                /* Initialize the two possible jump targets, the actual target
                 * is resolved at run-time.
@@ -2843,20 +2841,20 @@ regular_loop:
                        (yyval) = list_append((yyvsp[-1]), (yyvsp[-2]));
                (yyval) = add_pending_comment((yyval));
          }
-#line 2847 "awkgram.c" /* yacc.c:1646  */
+#line 2845 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 63:
-#line 1016 "awkgram.y" /* yacc.c:1646  */
+#line 1014 "awkgram.y" /* yacc.c:1646  */
     {
                if (! in_function)
                        yyerror(_("`return' used outside function context"));
          }
-#line 2856 "awkgram.c" /* yacc.c:1646  */
+#line 2854 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 64:
-#line 1019 "awkgram.y" /* yacc.c:1646  */
+#line 1017 "awkgram.y" /* yacc.c:1646  */
     {
                if ((yyvsp[-1]) == NULL) {
                        (yyval) = list_create((yyvsp[-3]));
@@ -2878,17 +2876,17 @@ regular_loop:
                }
                (yyval) = add_pending_comment((yyval));
          }
-#line 2882 "awkgram.c" /* yacc.c:1646  */
+#line 2880 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 66:
-#line 1052 "awkgram.y" /* yacc.c:1646  */
+#line 1050 "awkgram.y" /* yacc.c:1646  */
     { in_print = true; in_parens = 0; }
-#line 2888 "awkgram.c" /* yacc.c:1646  */
+#line 2886 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 67:
-#line 1053 "awkgram.y" /* yacc.c:1646  */
+#line 1051 "awkgram.y" /* yacc.c:1646  */
     {
                /*
                 * Optimization: plain `print' has no expression list, so $3 is 
null.
@@ -2986,17 +2984,17 @@ regular_print:
                }
                (yyval) = add_pending_comment((yyval));
          }
-#line 2990 "awkgram.c" /* yacc.c:1646  */
+#line 2988 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 68:
-#line 1151 "awkgram.y" /* yacc.c:1646  */
+#line 1149 "awkgram.y" /* yacc.c:1646  */
     { sub_counter = 0; }
-#line 2996 "awkgram.c" /* yacc.c:1646  */
+#line 2994 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 69:
-#line 1152 "awkgram.y" /* yacc.c:1646  */
+#line 1150 "awkgram.y" /* yacc.c:1646  */
     {
                char *arr = (yyvsp[-2])->lextok;
 
@@ -3030,11 +3028,11 @@ regular_print:
                }
                (yyval) = add_pending_comment((yyval));
          }
-#line 3034 "awkgram.c" /* yacc.c:1646  */
+#line 3032 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 70:
-#line 1190 "awkgram.y" /* yacc.c:1646  */
+#line 1188 "awkgram.y" /* yacc.c:1646  */
     {
                static bool warned = false;
                char *arr = (yyvsp[-1])->lextok;
@@ -3061,55 +3059,55 @@ regular_print:
                }
                (yyval) = add_pending_comment((yyval));
          }
-#line 3065 "awkgram.c" /* yacc.c:1646  */
+#line 3063 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 71:
-#line 1217 "awkgram.y" /* yacc.c:1646  */
+#line 1215 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = optimize_assignment((yyvsp[0]));
                (yyval) = add_pending_comment((yyval));
          }
-#line 3074 "awkgram.c" /* yacc.c:1646  */
+#line 3072 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 72:
-#line 1225 "awkgram.y" /* yacc.c:1646  */
+#line 1223 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 3080 "awkgram.c" /* yacc.c:1646  */
+#line 3078 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 73:
-#line 1227 "awkgram.y" /* yacc.c:1646  */
+#line 1225 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3086 "awkgram.c" /* yacc.c:1646  */
+#line 3084 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 74:
-#line 1232 "awkgram.y" /* yacc.c:1646  */
+#line 1230 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 3092 "awkgram.c" /* yacc.c:1646  */
+#line 3090 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 75:
-#line 1234 "awkgram.y" /* yacc.c:1646  */
+#line 1232 "awkgram.y" /* yacc.c:1646  */
     {
                if ((yyvsp[-1]) == NULL)
                        (yyval) = list_create((yyvsp[0]));
                else
                        (yyval) = list_prepend((yyvsp[-1]), (yyvsp[0]));
          }
-#line 3103 "awkgram.c" /* yacc.c:1646  */
+#line 3101 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 76:
-#line 1241 "awkgram.y" /* yacc.c:1646  */
+#line 1239 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 3109 "awkgram.c" /* yacc.c:1646  */
+#line 3107 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 77:
-#line 1246 "awkgram.y" /* yacc.c:1646  */
+#line 1244 "awkgram.y" /* yacc.c:1646  */
     {
                INSTRUCTION *casestmt = (yyvsp[0]);
                if ((yyvsp[0]) == NULL)
@@ -3121,11 +3119,11 @@ regular_print:
                bcfree((yyvsp[-2]));
                (yyval) = (yyvsp[-4]);
          }
-#line 3125 "awkgram.c" /* yacc.c:1646  */
+#line 3123 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 78:
-#line 1258 "awkgram.y" /* yacc.c:1646  */
+#line 1256 "awkgram.y" /* yacc.c:1646  */
     {
                INSTRUCTION *casestmt = (yyvsp[0]);
                if ((yyvsp[0]) == NULL)
@@ -3136,17 +3134,17 @@ regular_print:
                (yyvsp[-3])->case_stmt = casestmt;
                (yyval) = (yyvsp[-3]);
          }
-#line 3140 "awkgram.c" /* yacc.c:1646  */
+#line 3138 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 79:
-#line 1272 "awkgram.y" /* yacc.c:1646  */
+#line 1270 "awkgram.y" /* yacc.c:1646  */
     {  (yyval) = (yyvsp[0]); }
-#line 3146 "awkgram.c" /* yacc.c:1646  */
+#line 3144 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 80:
-#line 1274 "awkgram.y" /* yacc.c:1646  */
+#line 1272 "awkgram.y" /* yacc.c:1646  */
     {
                NODE *n = (yyvsp[0])->memory;
                (void) force_number(n);
@@ -3154,28 +3152,28 @@ regular_print:
                bcfree((yyvsp[-1]));
                (yyval) = (yyvsp[0]);
          }
-#line 3158 "awkgram.c" /* yacc.c:1646  */
+#line 3156 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 81:
-#line 1282 "awkgram.y" /* yacc.c:1646  */
+#line 1280 "awkgram.y" /* yacc.c:1646  */
     {
                NODE *n = (yyvsp[0])->lasti->memory;
                bcfree((yyvsp[-1]));
                add_sign_to_num(n, '+');
                (yyval) = (yyvsp[0]);
          }
-#line 3169 "awkgram.c" /* yacc.c:1646  */
+#line 3167 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 82:
-#line 1289 "awkgram.y" /* yacc.c:1646  */
+#line 1287 "awkgram.y" /* yacc.c:1646  */
     {  (yyval) = (yyvsp[0]); }
-#line 3175 "awkgram.c" /* yacc.c:1646  */
+#line 3173 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 83:
-#line 1291 "awkgram.y" /* yacc.c:1646  */
+#line 1289 "awkgram.y" /* yacc.c:1646  */
     {
                if ((yyvsp[0])->memory->type == Node_regex)
                        (yyvsp[0])->opcode = Op_push_re;
@@ -3183,57 +3181,57 @@ regular_print:
                        (yyvsp[0])->opcode = Op_push;
                (yyval) = (yyvsp[0]);
          }
-#line 3187 "awkgram.c" /* yacc.c:1646  */
+#line 3185 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 84:
-#line 1299 "awkgram.y" /* yacc.c:1646  */
+#line 1297 "awkgram.y" /* yacc.c:1646  */
     {
                assert(((yyvsp[0])->memory->flags & REGEX) == REGEX);
                (yyvsp[0])->opcode = Op_push_re;
                (yyval) = (yyvsp[0]);
          }
-#line 3197 "awkgram.c" /* yacc.c:1646  */
+#line 3195 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 85:
-#line 1308 "awkgram.y" /* yacc.c:1646  */
+#line 1306 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3203 "awkgram.c" /* yacc.c:1646  */
+#line 3201 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 86:
-#line 1310 "awkgram.y" /* yacc.c:1646  */
+#line 1308 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3209 "awkgram.c" /* yacc.c:1646  */
+#line 3207 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 88:
-#line 1320 "awkgram.y" /* yacc.c:1646  */
+#line 1318 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = (yyvsp[-1]);
          }
-#line 3217 "awkgram.c" /* yacc.c:1646  */
+#line 3215 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 89:
-#line 1327 "awkgram.y" /* yacc.c:1646  */
+#line 1325 "awkgram.y" /* yacc.c:1646  */
     {
                in_print = false;
                in_parens = 0;
                (yyval) = NULL;
          }
-#line 3227 "awkgram.c" /* yacc.c:1646  */
+#line 3225 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 90:
-#line 1332 "awkgram.y" /* yacc.c:1646  */
+#line 1330 "awkgram.y" /* yacc.c:1646  */
     { in_print = false; in_parens = 0; }
-#line 3233 "awkgram.c" /* yacc.c:1646  */
+#line 3231 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 91:
-#line 1333 "awkgram.y" /* yacc.c:1646  */
+#line 1331 "awkgram.y" /* yacc.c:1646  */
     {
                if ((yyvsp[-2])->redir_type == redirect_twoway
                        && (yyvsp[0])->lasti->opcode == Op_K_getline_redir
@@ -3241,63 +3239,63 @@ regular_print:
                        yyerror(_("multistage two-way pipelines don't work"));
                (yyval) = list_prepend((yyvsp[0]), (yyvsp[-2]));
          }
-#line 3245 "awkgram.c" /* yacc.c:1646  */
+#line 3243 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 92:
-#line 1344 "awkgram.y" /* yacc.c:1646  */
+#line 1342 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = mk_condition((yyvsp[-3]), (yyvsp[-5]), (yyvsp[0]), 
NULL, NULL);
          }
-#line 3253 "awkgram.c" /* yacc.c:1646  */
+#line 3251 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 93:
-#line 1349 "awkgram.y" /* yacc.c:1646  */
+#line 1347 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = mk_condition((yyvsp[-6]), (yyvsp[-8]), (yyvsp[-3]), 
(yyvsp[-2]), (yyvsp[0]));
          }
-#line 3261 "awkgram.c" /* yacc.c:1646  */
+#line 3259 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 98:
-#line 1366 "awkgram.y" /* yacc.c:1646  */
+#line 1364 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 3267 "awkgram.c" /* yacc.c:1646  */
+#line 3265 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 99:
-#line 1368 "awkgram.y" /* yacc.c:1646  */
+#line 1366 "awkgram.y" /* yacc.c:1646  */
     {
                bcfree((yyvsp[-1]));
                (yyval) = (yyvsp[0]);
          }
-#line 3276 "awkgram.c" /* yacc.c:1646  */
+#line 3274 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 100:
-#line 1376 "awkgram.y" /* yacc.c:1646  */
+#line 1374 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 3282 "awkgram.c" /* yacc.c:1646  */
+#line 3280 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 101:
-#line 1378 "awkgram.y" /* yacc.c:1646  */
+#line 1376 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3288 "awkgram.c" /* yacc.c:1646  */
+#line 3286 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 102:
-#line 1383 "awkgram.y" /* yacc.c:1646  */
+#line 1381 "awkgram.y" /* yacc.c:1646  */
     {
                (yyvsp[0])->param_count = 0;
                (yyval) = list_create((yyvsp[0]));
          }
-#line 3297 "awkgram.c" /* yacc.c:1646  */
+#line 3295 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 103:
-#line 1388 "awkgram.y" /* yacc.c:1646  */
+#line 1386 "awkgram.y" /* yacc.c:1646  */
     {
                if ((yyvsp[-2]) != NULL && (yyvsp[0]) != NULL) {
                        (yyvsp[0])->param_count =  
(yyvsp[-2])->lasti->param_count + 1;
@@ -3306,74 +3304,74 @@ regular_print:
                } else
                        (yyval) = NULL;
          }
-#line 3310 "awkgram.c" /* yacc.c:1646  */
+#line 3308 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 104:
-#line 1397 "awkgram.y" /* yacc.c:1646  */
+#line 1395 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 3316 "awkgram.c" /* yacc.c:1646  */
+#line 3314 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 105:
-#line 1399 "awkgram.y" /* yacc.c:1646  */
+#line 1397 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[-1]); }
-#line 3322 "awkgram.c" /* yacc.c:1646  */
+#line 3320 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 106:
-#line 1401 "awkgram.y" /* yacc.c:1646  */
+#line 1399 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[-2]); }
-#line 3328 "awkgram.c" /* yacc.c:1646  */
+#line 3326 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 107:
-#line 1407 "awkgram.y" /* yacc.c:1646  */
+#line 1405 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 3334 "awkgram.c" /* yacc.c:1646  */
+#line 3332 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 108:
-#line 1409 "awkgram.y" /* yacc.c:1646  */
+#line 1407 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3340 "awkgram.c" /* yacc.c:1646  */
+#line 3338 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 109:
-#line 1414 "awkgram.y" /* yacc.c:1646  */
+#line 1412 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 3346 "awkgram.c" /* yacc.c:1646  */
+#line 3344 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 110:
-#line 1416 "awkgram.y" /* yacc.c:1646  */
+#line 1414 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3352 "awkgram.c" /* yacc.c:1646  */
+#line 3350 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 111:
-#line 1421 "awkgram.y" /* yacc.c:1646  */
+#line 1419 "awkgram.y" /* yacc.c:1646  */
     {  (yyval) = mk_expression_list(NULL, (yyvsp[0])); }
-#line 3358 "awkgram.c" /* yacc.c:1646  */
+#line 3356 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 112:
-#line 1423 "awkgram.y" /* yacc.c:1646  */
+#line 1421 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
                yyerrok;
          }
-#line 3367 "awkgram.c" /* yacc.c:1646  */
+#line 3365 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 113:
-#line 1428 "awkgram.y" /* yacc.c:1646  */
+#line 1426 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 3373 "awkgram.c" /* yacc.c:1646  */
+#line 3371 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 114:
-#line 1430 "awkgram.y" /* yacc.c:1646  */
+#line 1428 "awkgram.y" /* yacc.c:1646  */
     {
                /*
                 * Returning the expression list instead of NULL lets
@@ -3381,62 +3379,62 @@ regular_print:
                 */
                (yyval) = (yyvsp[-1]);
          }
-#line 3385 "awkgram.c" /* yacc.c:1646  */
+#line 3383 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 115:
-#line 1438 "awkgram.y" /* yacc.c:1646  */
+#line 1436 "awkgram.y" /* yacc.c:1646  */
     {
                /* Ditto */
                (yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
          }
-#line 3394 "awkgram.c" /* yacc.c:1646  */
+#line 3392 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 116:
-#line 1443 "awkgram.y" /* yacc.c:1646  */
+#line 1441 "awkgram.y" /* yacc.c:1646  */
     {
                /* Ditto */
                (yyval) = (yyvsp[-2]);
          }
-#line 3403 "awkgram.c" /* yacc.c:1646  */
+#line 3401 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 117:
-#line 1451 "awkgram.y" /* yacc.c:1646  */
+#line 1449 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 3409 "awkgram.c" /* yacc.c:1646  */
+#line 3407 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 118:
-#line 1453 "awkgram.y" /* yacc.c:1646  */
+#line 1451 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3415 "awkgram.c" /* yacc.c:1646  */
+#line 3413 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 119:
-#line 1458 "awkgram.y" /* yacc.c:1646  */
+#line 1456 "awkgram.y" /* yacc.c:1646  */
     {  (yyval) = mk_expression_list(NULL, (yyvsp[0])); }
-#line 3421 "awkgram.c" /* yacc.c:1646  */
+#line 3419 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 120:
-#line 1460 "awkgram.y" /* yacc.c:1646  */
+#line 1458 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
                yyerrok;
          }
-#line 3430 "awkgram.c" /* yacc.c:1646  */
+#line 3428 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 121:
-#line 1465 "awkgram.y" /* yacc.c:1646  */
+#line 1463 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 3436 "awkgram.c" /* yacc.c:1646  */
+#line 3434 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 122:
-#line 1467 "awkgram.y" /* yacc.c:1646  */
+#line 1465 "awkgram.y" /* yacc.c:1646  */
     {
                /*
                 * Returning the expression list instead of NULL lets
@@ -3444,72 +3442,72 @@ regular_print:
                 */
                (yyval) = (yyvsp[-1]);
          }
-#line 3448 "awkgram.c" /* yacc.c:1646  */
+#line 3446 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 123:
-#line 1475 "awkgram.y" /* yacc.c:1646  */
+#line 1473 "awkgram.y" /* yacc.c:1646  */
     {
                /* Ditto */
                (yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
          }
-#line 3457 "awkgram.c" /* yacc.c:1646  */
+#line 3455 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 124:
-#line 1480 "awkgram.y" /* yacc.c:1646  */
+#line 1478 "awkgram.y" /* yacc.c:1646  */
     {
                /* Ditto */
                (yyval) = (yyvsp[-2]);
          }
-#line 3466 "awkgram.c" /* yacc.c:1646  */
+#line 3464 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 125:
-#line 1487 "awkgram.y" /* yacc.c:1646  */
+#line 1485 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3472 "awkgram.c" /* yacc.c:1646  */
+#line 3470 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 126:
-#line 1488 "awkgram.y" /* yacc.c:1646  */
+#line 1486 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = list_create((yyvsp[0])); }
-#line 3478 "awkgram.c" /* yacc.c:1646  */
+#line 3476 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 127:
-#line 1494 "awkgram.y" /* yacc.c:1646  */
+#line 1492 "awkgram.y" /* yacc.c:1646  */
     {
                if (do_lint && (yyvsp[0])->lasti->opcode == Op_match_rec)
                        lintwarn_ln((yyvsp[-1])->source_line,
                                _("regular expression on right of assignment"));
                (yyval) = mk_assignment((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1]));
          }
-#line 3489 "awkgram.c" /* yacc.c:1646  */
+#line 3487 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 128:
-#line 1501 "awkgram.y" /* yacc.c:1646  */
+#line 1499 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = mk_assignment((yyvsp[-2]), list_create((yyvsp[0])), 
(yyvsp[-1]));
          }
-#line 3497 "awkgram.c" /* yacc.c:1646  */
+#line 3495 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 129:
-#line 1505 "awkgram.y" /* yacc.c:1646  */
+#line 1503 "awkgram.y" /* yacc.c:1646  */
     {  (yyval) = mk_boolean((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3503 "awkgram.c" /* yacc.c:1646  */
+#line 3501 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 130:
-#line 1507 "awkgram.y" /* yacc.c:1646  */
+#line 1505 "awkgram.y" /* yacc.c:1646  */
     {  (yyval) = mk_boolean((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3509 "awkgram.c" /* yacc.c:1646  */
+#line 3507 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 131:
-#line 1509 "awkgram.y" /* yacc.c:1646  */
+#line 1507 "awkgram.y" /* yacc.c:1646  */
     {
                if ((yyvsp[-2])->lasti->opcode == Op_match_rec)
                        warning_ln((yyvsp[-1])->source_line,
@@ -3522,11 +3520,11 @@ regular_print:
                bcfree((yyvsp[0]));
                (yyval) = list_append((yyvsp[-2]), (yyvsp[-1]));
          }
-#line 3526 "awkgram.c" /* yacc.c:1646  */
+#line 3524 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 132:
-#line 1522 "awkgram.y" /* yacc.c:1646  */
+#line 1520 "awkgram.y" /* yacc.c:1646  */
     {
                if ((yyvsp[-2])->lasti->opcode == Op_match_rec)
                        warning_ln((yyvsp[-1])->source_line,
@@ -3543,11 +3541,11 @@ regular_print:
                        (yyval) = list_append(list_merge((yyvsp[-2]), 
(yyvsp[0])), (yyvsp[-1]));
                }
          }
-#line 3547 "awkgram.c" /* yacc.c:1646  */
+#line 3545 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 133:
-#line 1539 "awkgram.y" /* yacc.c:1646  */
+#line 1537 "awkgram.y" /* yacc.c:1646  */
     {
                if (do_lint_old)
                        warning_ln((yyvsp[-1])->source_line,
@@ -3557,91 +3555,91 @@ regular_print:
                (yyvsp[-1])->expr_count = 1;
                (yyval) = list_append(list_merge((yyvsp[-2]), (yyvsp[0])), 
(yyvsp[-1]));
          }
-#line 3561 "awkgram.c" /* yacc.c:1646  */
+#line 3559 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 134:
-#line 1549 "awkgram.y" /* yacc.c:1646  */
+#line 1547 "awkgram.y" /* yacc.c:1646  */
     {
                if (do_lint && (yyvsp[0])->lasti->opcode == Op_match_rec)
                        lintwarn_ln((yyvsp[-1])->source_line,
                                _("regular expression on right of comparison"));
                (yyval) = list_append(list_merge((yyvsp[-2]), (yyvsp[0])), 
(yyvsp[-1]));
          }
-#line 3572 "awkgram.c" /* yacc.c:1646  */
+#line 3570 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 135:
-#line 1556 "awkgram.y" /* yacc.c:1646  */
+#line 1554 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_condition((yyvsp[-4]), (yyvsp[-3]), (yyvsp[-2]), 
(yyvsp[-1]), (yyvsp[0])); }
-#line 3578 "awkgram.c" /* yacc.c:1646  */
+#line 3576 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 136:
-#line 1558 "awkgram.y" /* yacc.c:1646  */
+#line 1556 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3584 "awkgram.c" /* yacc.c:1646  */
+#line 3582 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 137:
-#line 1563 "awkgram.y" /* yacc.c:1646  */
+#line 1561 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3590 "awkgram.c" /* yacc.c:1646  */
+#line 3588 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 138:
-#line 1565 "awkgram.y" /* yacc.c:1646  */
+#line 1563 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3596 "awkgram.c" /* yacc.c:1646  */
+#line 3594 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 139:
-#line 1567 "awkgram.y" /* yacc.c:1646  */
+#line 1565 "awkgram.y" /* yacc.c:1646  */
     {
                (yyvsp[0])->opcode = Op_assign_quotient;
                (yyval) = (yyvsp[0]);
          }
-#line 3605 "awkgram.c" /* yacc.c:1646  */
+#line 3603 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 140:
-#line 1575 "awkgram.y" /* yacc.c:1646  */
+#line 1573 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3611 "awkgram.c" /* yacc.c:1646  */
+#line 3609 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 141:
-#line 1577 "awkgram.y" /* yacc.c:1646  */
+#line 1575 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3617 "awkgram.c" /* yacc.c:1646  */
+#line 3615 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 142:
-#line 1582 "awkgram.y" /* yacc.c:1646  */
+#line 1580 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3623 "awkgram.c" /* yacc.c:1646  */
+#line 3621 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 143:
-#line 1584 "awkgram.y" /* yacc.c:1646  */
+#line 1582 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3629 "awkgram.c" /* yacc.c:1646  */
+#line 3627 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 144:
-#line 1589 "awkgram.y" /* yacc.c:1646  */
+#line 1587 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3635 "awkgram.c" /* yacc.c:1646  */
+#line 3633 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 145:
-#line 1591 "awkgram.y" /* yacc.c:1646  */
+#line 1589 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3641 "awkgram.c" /* yacc.c:1646  */
+#line 3639 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 146:
-#line 1593 "awkgram.y" /* yacc.c:1646  */
+#line 1591 "awkgram.y" /* yacc.c:1646  */
     {
                int count = 2;
                bool is_simple_var = false;
@@ -3694,47 +3692,47 @@ regular_print:
                                max_args = count;
                }
          }
-#line 3698 "awkgram.c" /* yacc.c:1646  */
+#line 3696 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 148:
-#line 1651 "awkgram.y" /* yacc.c:1646  */
+#line 1649 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3704 "awkgram.c" /* yacc.c:1646  */
+#line 3702 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 149:
-#line 1653 "awkgram.y" /* yacc.c:1646  */
+#line 1651 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3710 "awkgram.c" /* yacc.c:1646  */
+#line 3708 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 150:
-#line 1655 "awkgram.y" /* yacc.c:1646  */
+#line 1653 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3716 "awkgram.c" /* yacc.c:1646  */
+#line 3714 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 151:
-#line 1657 "awkgram.y" /* yacc.c:1646  */
+#line 1655 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3722 "awkgram.c" /* yacc.c:1646  */
+#line 3720 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 152:
-#line 1659 "awkgram.y" /* yacc.c:1646  */
+#line 1657 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3728 "awkgram.c" /* yacc.c:1646  */
+#line 3726 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 153:
-#line 1661 "awkgram.y" /* yacc.c:1646  */
+#line 1659 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3734 "awkgram.c" /* yacc.c:1646  */
+#line 3732 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 154:
-#line 1663 "awkgram.y" /* yacc.c:1646  */
+#line 1661 "awkgram.y" /* yacc.c:1646  */
     {
                /*
                 * In BEGINFILE/ENDFILE, allow `getline [var] < file'
@@ -3748,29 +3746,29 @@ regular_print:
                                _("non-redirected `getline' undefined inside 
END action"));
                (yyval) = mk_getline((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]), 
redirect_input);
          }
-#line 3752 "awkgram.c" /* yacc.c:1646  */
+#line 3750 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 155:
-#line 1677 "awkgram.y" /* yacc.c:1646  */
+#line 1675 "awkgram.y" /* yacc.c:1646  */
     {
                (yyvsp[0])->opcode = Op_postincrement;
                (yyval) = mk_assignment((yyvsp[-1]), NULL, (yyvsp[0]));
          }
-#line 3761 "awkgram.c" /* yacc.c:1646  */
+#line 3759 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 156:
-#line 1682 "awkgram.y" /* yacc.c:1646  */
+#line 1680 "awkgram.y" /* yacc.c:1646  */
     {
                (yyvsp[0])->opcode = Op_postdecrement;
                (yyval) = mk_assignment((yyvsp[-1]), NULL, (yyvsp[0]));
          }
-#line 3770 "awkgram.c" /* yacc.c:1646  */
+#line 3768 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 157:
-#line 1687 "awkgram.y" /* yacc.c:1646  */
+#line 1685 "awkgram.y" /* yacc.c:1646  */
     {
                if (do_lint_old) {
                    warning_ln((yyvsp[-1])->source_line,
@@ -3790,64 +3788,64 @@ regular_print:
                        (yyval) = list_append(list_merge(t, (yyvsp[0])), 
(yyvsp[-1]));
                }
          }
-#line 3794 "awkgram.c" /* yacc.c:1646  */
+#line 3792 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 158:
-#line 1712 "awkgram.y" /* yacc.c:1646  */
+#line 1710 "awkgram.y" /* yacc.c:1646  */
     {
                  (yyval) = mk_getline((yyvsp[-1]), (yyvsp[0]), (yyvsp[-3]), 
(yyvsp[-2])->redir_type);
                  bcfree((yyvsp[-2]));
                }
-#line 3803 "awkgram.c" /* yacc.c:1646  */
+#line 3801 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 159:
-#line 1718 "awkgram.y" /* yacc.c:1646  */
+#line 1716 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3809 "awkgram.c" /* yacc.c:1646  */
+#line 3807 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 160:
-#line 1720 "awkgram.y" /* yacc.c:1646  */
+#line 1718 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3815 "awkgram.c" /* yacc.c:1646  */
+#line 3813 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 161:
-#line 1722 "awkgram.y" /* yacc.c:1646  */
+#line 1720 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3821 "awkgram.c" /* yacc.c:1646  */
+#line 3819 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 162:
-#line 1724 "awkgram.y" /* yacc.c:1646  */
+#line 1722 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3827 "awkgram.c" /* yacc.c:1646  */
+#line 3825 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 163:
-#line 1726 "awkgram.y" /* yacc.c:1646  */
+#line 1724 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3833 "awkgram.c" /* yacc.c:1646  */
+#line 3831 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 164:
-#line 1728 "awkgram.y" /* yacc.c:1646  */
+#line 1726 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3839 "awkgram.c" /* yacc.c:1646  */
+#line 3837 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 165:
-#line 1733 "awkgram.y" /* yacc.c:1646  */
+#line 1731 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = list_create((yyvsp[0]));
          }
-#line 3847 "awkgram.c" /* yacc.c:1646  */
+#line 3845 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 166:
-#line 1737 "awkgram.y" /* yacc.c:1646  */
+#line 1735 "awkgram.y" /* yacc.c:1646  */
     {
                if ((yyvsp[0])->opcode == Op_match_rec) {
                        (yyvsp[0])->opcode = Op_nomatch;
@@ -3879,42 +3877,42 @@ regular_print:
                        }
                }
           }
-#line 3883 "awkgram.c" /* yacc.c:1646  */
+#line 3881 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 167:
-#line 1769 "awkgram.y" /* yacc.c:1646  */
+#line 1767 "awkgram.y" /* yacc.c:1646  */
     {
                if (do_pretty_print)
                        (yyval) = list_append((yyvsp[-1]), bcalloc(Op_parens, 
1, sourceline));
                else
                        (yyval) = (yyvsp[-1]);
          }
-#line 3894 "awkgram.c" /* yacc.c:1646  */
+#line 3892 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 168:
-#line 1776 "awkgram.y" /* yacc.c:1646  */
+#line 1774 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = snode((yyvsp[-1]), (yyvsp[-3]));
                if ((yyval) == NULL)
                        YYABORT;
          }
-#line 3904 "awkgram.c" /* yacc.c:1646  */
+#line 3902 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 169:
-#line 1782 "awkgram.y" /* yacc.c:1646  */
+#line 1780 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = snode((yyvsp[-1]), (yyvsp[-3]));
                if ((yyval) == NULL)
                        YYABORT;
          }
-#line 3914 "awkgram.c" /* yacc.c:1646  */
+#line 3912 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 170:
-#line 1788 "awkgram.y" /* yacc.c:1646  */
+#line 1786 "awkgram.y" /* yacc.c:1646  */
     {
                static bool warned = false;
 
@@ -3927,45 +3925,45 @@ regular_print:
                if ((yyval) == NULL)
                        YYABORT;
          }
-#line 3931 "awkgram.c" /* yacc.c:1646  */
+#line 3929 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 173:
-#line 1803 "awkgram.y" /* yacc.c:1646  */
+#line 1801 "awkgram.y" /* yacc.c:1646  */
     {
                (yyvsp[-1])->opcode = Op_preincrement;
                (yyval) = mk_assignment((yyvsp[0]), NULL, (yyvsp[-1]));
          }
-#line 3940 "awkgram.c" /* yacc.c:1646  */
+#line 3938 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 174:
-#line 1808 "awkgram.y" /* yacc.c:1646  */
+#line 1806 "awkgram.y" /* yacc.c:1646  */
     {
                (yyvsp[-1])->opcode = Op_predecrement;
                (yyval) = mk_assignment((yyvsp[0]), NULL, (yyvsp[-1]));
          }
-#line 3949 "awkgram.c" /* yacc.c:1646  */
+#line 3947 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 175:
-#line 1813 "awkgram.y" /* yacc.c:1646  */
+#line 1811 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = list_create((yyvsp[0]));
          }
-#line 3957 "awkgram.c" /* yacc.c:1646  */
+#line 3955 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 176:
-#line 1817 "awkgram.y" /* yacc.c:1646  */
+#line 1815 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = list_create((yyvsp[0]));
          }
-#line 3965 "awkgram.c" /* yacc.c:1646  */
+#line 3963 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 177:
-#line 1821 "awkgram.y" /* yacc.c:1646  */
+#line 1819 "awkgram.y" /* yacc.c:1646  */
     {
                if ((yyvsp[0])->lasti->opcode == Op_push_i
                        && ((yyvsp[0])->lasti->memory->flags & STRING) == 0
@@ -3980,11 +3978,11 @@ regular_print:
                        (yyval) = list_append((yyvsp[0]), (yyvsp[-1]));
                }
          }
-#line 3984 "awkgram.c" /* yacc.c:1646  */
+#line 3982 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 178:
-#line 1836 "awkgram.y" /* yacc.c:1646  */
+#line 1834 "awkgram.y" /* yacc.c:1646  */
     {
                if ((yyvsp[0])->lasti->opcode == Op_push_i
                        && ((yyvsp[0])->lasti->memory->flags & STRING) == 0
@@ -4002,20 +4000,20 @@ regular_print:
                        (yyval) = list_append((yyvsp[0]), (yyvsp[-1]));
                }
          }
-#line 4006 "awkgram.c" /* yacc.c:1646  */
+#line 4004 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 179:
-#line 1857 "awkgram.y" /* yacc.c:1646  */
+#line 1855 "awkgram.y" /* yacc.c:1646  */
     {
                func_use((yyvsp[0])->lasti->func_name, FUNC_USE);
                (yyval) = (yyvsp[0]);
          }
-#line 4015 "awkgram.c" /* yacc.c:1646  */
+#line 4013 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 180:
-#line 1862 "awkgram.y" /* yacc.c:1646  */
+#line 1860 "awkgram.y" /* yacc.c:1646  */
     {
                /* indirect function call */
                INSTRUCTION *f, *t;
@@ -4049,11 +4047,11 @@ regular_print:
                (yyval) = list_prepend((yyvsp[0]), t);
                at_seen = false;
          }
-#line 4053 "awkgram.c" /* yacc.c:1646  */
+#line 4051 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 181:
-#line 1899 "awkgram.y" /* yacc.c:1646  */
+#line 1897 "awkgram.y" /* yacc.c:1646  */
     {
                NODE *n;
                const char *name = (yyvsp[-3])->func_name;
@@ -4091,49 +4089,49 @@ regular_print:
                        (yyval) = list_append(t, (yyvsp[-3]));
                }
          }
-#line 4095 "awkgram.c" /* yacc.c:1646  */
+#line 4093 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 182:
-#line 1940 "awkgram.y" /* yacc.c:1646  */
+#line 1938 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 4101 "awkgram.c" /* yacc.c:1646  */
+#line 4099 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 183:
-#line 1942 "awkgram.y" /* yacc.c:1646  */
+#line 1940 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 4107 "awkgram.c" /* yacc.c:1646  */
+#line 4105 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 184:
-#line 1947 "awkgram.y" /* yacc.c:1646  */
+#line 1945 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 4113 "awkgram.c" /* yacc.c:1646  */
+#line 4111 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 185:
-#line 1949 "awkgram.y" /* yacc.c:1646  */
+#line 1947 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[-1]); }
-#line 4119 "awkgram.c" /* yacc.c:1646  */
+#line 4117 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 186:
-#line 1954 "awkgram.y" /* yacc.c:1646  */
+#line 1952 "awkgram.y" /* yacc.c:1646  */
     {  (yyval) = (yyvsp[0]); }
-#line 4125 "awkgram.c" /* yacc.c:1646  */
+#line 4123 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 187:
-#line 1956 "awkgram.y" /* yacc.c:1646  */
+#line 1954 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = list_merge((yyvsp[-1]), (yyvsp[0]));
          }
-#line 4133 "awkgram.c" /* yacc.c:1646  */
+#line 4131 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 188:
-#line 1963 "awkgram.y" /* yacc.c:1646  */
+#line 1961 "awkgram.y" /* yacc.c:1646  */
     {
                INSTRUCTION *ip = (yyvsp[0])->lasti;
                int count = ip->sub_count;      /* # of SUBSEP-seperated 
expressions */
@@ -4147,11 +4145,11 @@ regular_print:
                sub_counter++;  /* count # of dimensions */
                (yyval) = (yyvsp[0]);
          }
-#line 4151 "awkgram.c" /* yacc.c:1646  */
+#line 4149 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 189:
-#line 1980 "awkgram.y" /* yacc.c:1646  */
+#line 1978 "awkgram.y" /* yacc.c:1646  */
     {
                INSTRUCTION *t = (yyvsp[-1]);
                if ((yyvsp[-1]) == NULL) {
@@ -4165,31 +4163,31 @@ regular_print:
                        (yyvsp[0])->sub_count = count_expressions(&t, false);
                (yyval) = list_append(t, (yyvsp[0]));
          }
-#line 4169 "awkgram.c" /* yacc.c:1646  */
+#line 4167 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 190:
-#line 1997 "awkgram.y" /* yacc.c:1646  */
+#line 1995 "awkgram.y" /* yacc.c:1646  */
     {  (yyval) = (yyvsp[0]); }
-#line 4175 "awkgram.c" /* yacc.c:1646  */
+#line 4173 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 191:
-#line 1999 "awkgram.y" /* yacc.c:1646  */
+#line 1997 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = list_merge((yyvsp[-1]), (yyvsp[0]));
          }
-#line 4183 "awkgram.c" /* yacc.c:1646  */
+#line 4181 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 192:
-#line 2006 "awkgram.y" /* yacc.c:1646  */
+#line 2004 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[-1]); }
-#line 4189 "awkgram.c" /* yacc.c:1646  */
+#line 4187 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 193:
-#line 2011 "awkgram.y" /* yacc.c:1646  */
+#line 2009 "awkgram.y" /* yacc.c:1646  */
     {
                char *var_name = (yyvsp[0])->lextok;
 
@@ -4197,22 +4195,22 @@ regular_print:
                (yyvsp[0])->memory = variable((yyvsp[0])->source_line, 
var_name, Node_var_new);
                (yyval) = list_create((yyvsp[0]));
          }
-#line 4201 "awkgram.c" /* yacc.c:1646  */
+#line 4199 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 194:
-#line 2019 "awkgram.y" /* yacc.c:1646  */
+#line 2017 "awkgram.y" /* yacc.c:1646  */
     {
                char *arr = (yyvsp[-1])->lextok;
                (yyvsp[-1])->memory = variable((yyvsp[-1])->source_line, arr, 
Node_var_new);
                (yyvsp[-1])->opcode = Op_push_array;
                (yyval) = list_prepend((yyvsp[0]), (yyvsp[-1]));
          }
-#line 4212 "awkgram.c" /* yacc.c:1646  */
+#line 4210 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 195:
-#line 2029 "awkgram.y" /* yacc.c:1646  */
+#line 2027 "awkgram.y" /* yacc.c:1646  */
     {
                INSTRUCTION *ip = (yyvsp[0])->nexti;
                if (ip->opcode == Op_push
@@ -4224,73 +4222,73 @@ regular_print:
                } else
                        (yyval) = (yyvsp[0]);
          }
-#line 4228 "awkgram.c" /* yacc.c:1646  */
+#line 4226 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 196:
-#line 2041 "awkgram.y" /* yacc.c:1646  */
+#line 2039 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = list_append((yyvsp[-1]), (yyvsp[-2]));
                if ((yyvsp[0]) != NULL)
                        mk_assignment((yyvsp[-1]), NULL, (yyvsp[0]));
          }
-#line 4238 "awkgram.c" /* yacc.c:1646  */
+#line 4236 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 197:
-#line 2050 "awkgram.y" /* yacc.c:1646  */
+#line 2048 "awkgram.y" /* yacc.c:1646  */
     {
                (yyvsp[0])->opcode = Op_postincrement;
          }
-#line 4246 "awkgram.c" /* yacc.c:1646  */
+#line 4244 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 198:
-#line 2054 "awkgram.y" /* yacc.c:1646  */
+#line 2052 "awkgram.y" /* yacc.c:1646  */
     {
                (yyvsp[0])->opcode = Op_postdecrement;
          }
-#line 4254 "awkgram.c" /* yacc.c:1646  */
+#line 4252 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 199:
-#line 2057 "awkgram.y" /* yacc.c:1646  */
+#line 2055 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 4260 "awkgram.c" /* yacc.c:1646  */
+#line 4258 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 201:
-#line 2065 "awkgram.y" /* yacc.c:1646  */
+#line 2063 "awkgram.y" /* yacc.c:1646  */
     { yyerrok; }
-#line 4266 "awkgram.c" /* yacc.c:1646  */
+#line 4264 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 202:
-#line 2069 "awkgram.y" /* yacc.c:1646  */
+#line 2067 "awkgram.y" /* yacc.c:1646  */
     { yyerrok; }
-#line 4272 "awkgram.c" /* yacc.c:1646  */
+#line 4270 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 205:
-#line 2078 "awkgram.y" /* yacc.c:1646  */
+#line 2076 "awkgram.y" /* yacc.c:1646  */
     { yyerrok; }
-#line 4278 "awkgram.c" /* yacc.c:1646  */
+#line 4276 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 206:
-#line 2082 "awkgram.y" /* yacc.c:1646  */
+#line 2080 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); yyerrok; }
-#line 4284 "awkgram.c" /* yacc.c:1646  */
+#line 4282 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 207:
-#line 2086 "awkgram.y" /* yacc.c:1646  */
+#line 2084 "awkgram.y" /* yacc.c:1646  */
     { yyerrok; }
-#line 4290 "awkgram.c" /* yacc.c:1646  */
+#line 4288 "awkgram.c" /* yacc.c:1646  */
     break;
 
 
-#line 4294 "awkgram.c" /* yacc.c:1646  */
+#line 4292 "awkgram.c" /* yacc.c:1646  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -4518,7 +4516,7 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 2088 "awkgram.y" /* yacc.c:1906  */
+#line 2086 "awkgram.y" /* yacc.c:1906  */
 
 
 struct token {
@@ -8885,7 +8883,7 @@ set_profile_text(NODE *n, const char *str, size_t len)
 
 /* validate_qualified_name --- make sure that a qualified name is built 
correctly */
 
-static void
+void
 validate_qualified_name(char *token)
 {
        char *cp, *cp2;
@@ -8907,7 +8905,7 @@ validate_qualified_name(char *token)
 
 /* check_qualified_name --- decide if a name is special or not */
 
-static int
+int
 check_qualified_name(char *token)
 {
        char *cp;
diff --git a/awkgram.y b/awkgram.y
index 40c5e5e..534aa5c 100644
--- a/awkgram.y
+++ b/awkgram.y
@@ -59,8 +59,6 @@ static bool set_namespace(INSTRUCTION *ns);
 static void next_sourcefile(void);
 static char *tokexpand(void);
 static NODE *set_profile_text(NODE *n, const char *str, size_t len);
-static void validate_qualified_name(char *token);
-static int check_qualified_name(char *token);
 static char *make_pp_namespace();
 
 #define instruction(t) bcalloc(t, 1, 0)
@@ -6451,7 +6449,7 @@ set_profile_text(NODE *n, const char *str, size_t len)
 
 /* validate_qualified_name --- make sure that a qualified name is built 
correctly */
 
-static void
+void
 validate_qualified_name(char *token)
 {
        char *cp, *cp2;
@@ -6473,7 +6471,7 @@ validate_qualified_name(char *token)
 
 /* check_qualified_name --- decide if a name is special or not */
 
-static int
+int
 check_qualified_name(char *token)
 {
        char *cp;
diff --git a/main.c b/main.c
index 0b8382a..16b8212 100644
--- a/main.c
+++ b/main.c
@@ -1134,11 +1134,12 @@ arg_assign(char *arg, bool initing)
                badvar = true;
        else
                for (cp2 = arg+1; *cp2; cp2++)
-                       if (! is_identchar((unsigned char) *cp2)) {
+                       if (! is_identchar((unsigned char) *cp2) && *cp2 != 
':') {
                                badvar = true;
                                break;
                        }
 
+
        if (badvar) {
                if (initing)
                        fatal(_("`%s' is not a legal variable name"), arg);
@@ -1147,7 +1148,9 @@ arg_assign(char *arg, bool initing)
                        lintwarn(_("`%s' is not a variable name, looking for 
file `%s=%s'"),
                                arg, arg, cp);
        } else {
-               if (check_special(arg) >= 0)
+               validate_qualified_name(arg);
+
+               if (check_qualified_name(arg) >= 0)
                        fatal(_("cannot use gawk builtin `%s' as variable 
name"), arg);
 
                if (! initing) {

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

Summary of changes:
 ChangeLog                 |  11 +
 awk.h                     |   2 +
 awkgram.c                 | 804 +++++++++++++++++++++++-----------------------
 awkgram.y                 |   6 +-
 awklib/eg/lib/inplace.awk |  24 +-
 doc/ChangeLog             |   5 +
 doc/gawk.info             | 222 ++++++-------
 doc/gawk.texi             |  45 +--
 doc/gawktexi.in           |  45 +--
 extension/ChangeLog       |   5 +
 extension/inplace.c       |  44 +--
 main.c                    |   7 +-
 test/ChangeLog            |   7 +
 test/Makefile.am          |   6 +-
 test/Makefile.in          |   6 +-
 test/inplace1.ok          |   2 +-
 test/inplace2.ok          |   2 +-
 test/inplace3.ok          |   4 +-
 18 files changed, 646 insertions(+), 601 deletions(-)


hooks/post-receive
-- 
gawk



reply via email to

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