gawk-diffs
[Top][All Lists]
Advanced

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

[gawk-diffs] [SCM] gawk branch, gawk-4.2-stable, updated. gawk-4.1.0-299


From: Arnold Robbins
Subject: [gawk-diffs] [SCM] gawk branch, gawk-4.2-stable, updated. gawk-4.1.0-2997-gc12c743
Date: Fri, 27 Jul 2018 05:48:48 -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, gawk-4.2-stable has been updated
       via  c12c743fe36b77877f59aeb00da65481e50f8efa (commit)
       via  040e06c04dd2eded9861c99b4976ee11a92dd2ec (commit)
       via  43602a27fcac00f4cd9eee62ebce68217c260fd7 (commit)
       via  df468ca85832d555f9b2ed8ee8eae5b80dd137cd (commit)
       via  30e8a37825c9b9e67c0cf440f7617508b7898c2b (commit)
       via  3ddc932b0a808a4f5f55519ccf1d65f6caa41666 (commit)
      from  1bc2871bbe4ae6b99fd1862a412440672846bc05 (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=c12c743fe36b77877f59aeb00da65481e50f8efa

commit c12c743fe36b77877f59aeb00da65481e50f8efa
Author: Arnold D. Robbins <address@hidden>
Date:   Fri Jul 27 12:48:20 2018 +0300

    Remove incorrect file test/lintwan.ok.

diff --git a/test/lintwan.ok b/test/lintwan.ok
deleted file mode 100644
index d0993ea..0000000
--- a/test/lintwan.ok
+++ /dev/null
@@ -1,39 +0,0 @@
-gawk: lintwarn.awk:2: warning: `BEGINFILE' is a gawk extension
-gawk: lintwarn.awk:3: error: non-redirected `getline' invalid inside 
`BEGINFILE' rule
-gawk: lintwarn.awk:4: error: non-redirected `getline' invalid inside 
`BEGINFILE' rule
-gawk: lintwarn.awk:8: warning: statement may have no effect
-gawk: lintwarn.awk:9: warning: plain `print' in BEGIN or END rule should 
probably be `print ""'
-gawk: lintwarn.awk:10: error: `nextfile' used in BEGIN action
-gawk: lintwarn.awk:12: warning: `delete(array)' is a non-portable tawk 
extension
-gawk: lintwarn.awk:13: warning: regular expression on right of assignment
-gawk: lintwarn.awk:14: warning: regular expression on right of comparison
-gawk: lintwarn.awk:14: warning: statement may have no effect
-gawk: lintwarn.awk:15: warning: regular expression on left of `~' or `!~' 
operator
-gawk: lintwarn.awk:15: warning: statement may have no effect
-gawk: lintwarn.awk:16: warning: call of `length' without parentheses is not 
portable
-gawk: lintwarn.awk:17: warning: `switch' is a gawk extension
-gawk: lintwarn.awk:18: warning: `case' is a gawk extension
-gawk: lintwarn.awk:19: warning: `default' is a gawk extension
-gawk: lintwarn.awk:19: error: duplicate `default' detected in switch body
-gawk: lintwarn.awk:18: error: duplicate case values in switch body: 1
-gawk: lintwarn.awk:24: error: `continue' is not allowed outside a loop
-gawk: lintwarn.awk:23: error: `break' is not allowed outside a loop or switch
-gawk: lintwarn.awk:24: error: `continue' is not allowed outside a loop
-gawk: lintwarn.awk:25: error: `next' used in BEGIN action
-gawk: lintwarn.awk:26:         a[]
-gawk: lintwarn.awk:26:           ^ syntax error
-gawk: lintwarn.awk:26: error: invalid subscript expression
-gawk: lintwarn.awk:26: warning: statement may have no effect
-gawk: lintwarn.awk:27: warning: regexp constant for parameter #1 yields 
boolean value
-gawk: lintwarn.awk:28: warning: regexp constant `//' looks like a C++ comment, 
but is not
-gawk: lintwarn.awk:28: warning: statement may have no effect
-gawk: lintwarn.awk:29: warning: regexp constant `/* */' looks like a C 
comment, but is not
-gawk: lintwarn.awk:29: warning: statement may have no effect
-gawk: lintwarn.awk:32: warning: non-redirected `getline' undefined inside END 
action
-gawk: lintwarn.awk:34: error: function `zz': parameter #2, `aa', duplicates 
parameter #1
-gawk: lintwarn.awk:38: warning: `include' is a gawk extension
-gawk: lintwarn.awk:38: warning: empty filename after @include
-gawk: lintwarn.awk:41: warning: concatenation as I/O `>' redirection target is 
ambiguous
-gawk: warning: function `f' called but never defined
-gawk: warning: function `zz' defined but never called directly
-EXIT CODE: 1

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

commit 040e06c04dd2eded9861c99b4976ee11a92dd2ec
Author: Arnold D. Robbins <address@hidden>
Date:   Fri Jul 27 12:27:35 2018 +0300

    Fix test/lintwarn.ok.

diff --git a/test/lintwarn.ok b/test/lintwarn.ok
index bc5226e..d0993ea 100644
--- a/test/lintwarn.ok
+++ b/test/lintwarn.ok
@@ -33,6 +33,7 @@ gawk: lintwarn.awk:32: warning: non-redirected `getline' 
undefined inside END ac
 gawk: lintwarn.awk:34: error: function `zz': parameter #2, `aa', duplicates 
parameter #1
 gawk: lintwarn.awk:38: warning: `include' is a gawk extension
 gawk: lintwarn.awk:38: warning: empty filename after @include
+gawk: lintwarn.awk:41: warning: concatenation as I/O `>' redirection target is 
ambiguous
 gawk: warning: function `f' called but never defined
 gawk: warning: function `zz' defined but never called directly
 EXIT CODE: 1

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

commit 43602a27fcac00f4cd9eee62ebce68217c260fd7
Author: Arnold D. Robbins <address@hidden>
Date:   Fri Jul 27 12:14:52 2018 +0300

    And commit lintwarn.ok, too.

diff --git a/test/lintwan.ok b/test/lintwan.ok
new file mode 100644
index 0000000..d0993ea
--- /dev/null
+++ b/test/lintwan.ok
@@ -0,0 +1,39 @@
+gawk: lintwarn.awk:2: warning: `BEGINFILE' is a gawk extension
+gawk: lintwarn.awk:3: error: non-redirected `getline' invalid inside 
`BEGINFILE' rule
+gawk: lintwarn.awk:4: error: non-redirected `getline' invalid inside 
`BEGINFILE' rule
+gawk: lintwarn.awk:8: warning: statement may have no effect
+gawk: lintwarn.awk:9: warning: plain `print' in BEGIN or END rule should 
probably be `print ""'
+gawk: lintwarn.awk:10: error: `nextfile' used in BEGIN action
+gawk: lintwarn.awk:12: warning: `delete(array)' is a non-portable tawk 
extension
+gawk: lintwarn.awk:13: warning: regular expression on right of assignment
+gawk: lintwarn.awk:14: warning: regular expression on right of comparison
+gawk: lintwarn.awk:14: warning: statement may have no effect
+gawk: lintwarn.awk:15: warning: regular expression on left of `~' or `!~' 
operator
+gawk: lintwarn.awk:15: warning: statement may have no effect
+gawk: lintwarn.awk:16: warning: call of `length' without parentheses is not 
portable
+gawk: lintwarn.awk:17: warning: `switch' is a gawk extension
+gawk: lintwarn.awk:18: warning: `case' is a gawk extension
+gawk: lintwarn.awk:19: warning: `default' is a gawk extension
+gawk: lintwarn.awk:19: error: duplicate `default' detected in switch body
+gawk: lintwarn.awk:18: error: duplicate case values in switch body: 1
+gawk: lintwarn.awk:24: error: `continue' is not allowed outside a loop
+gawk: lintwarn.awk:23: error: `break' is not allowed outside a loop or switch
+gawk: lintwarn.awk:24: error: `continue' is not allowed outside a loop
+gawk: lintwarn.awk:25: error: `next' used in BEGIN action
+gawk: lintwarn.awk:26:         a[]
+gawk: lintwarn.awk:26:           ^ syntax error
+gawk: lintwarn.awk:26: error: invalid subscript expression
+gawk: lintwarn.awk:26: warning: statement may have no effect
+gawk: lintwarn.awk:27: warning: regexp constant for parameter #1 yields 
boolean value
+gawk: lintwarn.awk:28: warning: regexp constant `//' looks like a C++ comment, 
but is not
+gawk: lintwarn.awk:28: warning: statement may have no effect
+gawk: lintwarn.awk:29: warning: regexp constant `/* */' looks like a C 
comment, but is not
+gawk: lintwarn.awk:29: warning: statement may have no effect
+gawk: lintwarn.awk:32: warning: non-redirected `getline' undefined inside END 
action
+gawk: lintwarn.awk:34: error: function `zz': parameter #2, `aa', duplicates 
parameter #1
+gawk: lintwarn.awk:38: warning: `include' is a gawk extension
+gawk: lintwarn.awk:38: warning: empty filename after @include
+gawk: lintwarn.awk:41: warning: concatenation as I/O `>' redirection target is 
ambiguous
+gawk: warning: function `f' called but never defined
+gawk: warning: function `zz' defined but never called directly
+EXIT CODE: 1

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

commit df468ca85832d555f9b2ed8ee8eae5b80dd137cd
Author: Arnold D. Robbins <address@hidden>
Date:   Fri Jul 27 12:13:57 2018 +0300

    Forgot to commit awkgram.c.

diff --git a/awkgram.c b/awkgram.c
index 4000d0e..36947c4 100644
--- a/awkgram.c
+++ b/awkgram.c
@@ -3186,8 +3186,8 @@ regular_print:
                        && (yyvsp[0])->lasti->opcode == Op_K_getline_redir
                                && (yyvsp[0])->lasti->redir_type == 
redirect_twoway)
                        yyerror(_("multistage two-way pipelines don't work"));
-        if (do_lint && (yyvsp[0])->lasti->opcode == Op_concat && 
(yyvsp[-2])->redir_type == redirect_output)
-            lintwarn(_("concatenation as I/O redirection target is 
ambiguous"));
+               if (do_lint && (yyvsp[-2])->redir_type == redirect_output && 
(yyvsp[0])->lasti->opcode == Op_concat)
+                       lintwarn(_("concatenation as I/O `>' redirection target 
is ambiguous"));
                (yyval) = list_prepend((yyvsp[0]), (yyvsp[-2]));
          }
 #line 3194 "awkgram.c" /* yacc.c:1646  */
@@ -3835,10 +3835,10 @@ regular_print:
   case 163:
 #line 1733 "awkgram.y" /* yacc.c:1646  */
     {
-        // Always include. Allows us to lint warn on
-        // print "foo" > "bar" 1
-        // but not warn on
-        // print "foo" > ("bar" 1)
+               // Always include. Allows us to lint warn on
+               // print "foo" > "bar" 1
+               // but not warn on
+               // print "foo" > ("bar" 1)
                (yyval) = list_append((yyvsp[-1]), bcalloc(Op_parens, 1, 
sourceline));
          }
 #line 3845 "awkgram.c" /* yacc.c:1646  */

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

commit 30e8a37825c9b9e67c0cf440f7617508b7898c2b
Author: Arnold D. Robbins <address@hidden>
Date:   Fri Jul 27 11:47:47 2018 +0300

    Add lint warning for `print "foo" > "foo" 1'.

diff --git a/ChangeLog b/ChangeLog
index 3c7d5fb..d3d099b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,6 +2,9 @@
 
        * re.c (make_regexp): Add warnings for unknown escape sequences,
        similar to what we already do for strings.
+       * awkgram.y: Add lint warning about concatenation as target
+       of `>' redirection.  Always use Op_parens so that
+       print "foo" > ("foo" 1) does not warn.
 
 2018-07-13         Arnold D. Robbins     <address@hidden>
 
diff --git a/awkgram.c b/awkgram.c
index 493109f..4000d0e 100644
--- a/awkgram.c
+++ b/awkgram.c
@@ -678,19 +678,19 @@ static const yytype_uint16 yyrline[] =
      791,   904,   911,   918,   929,   939,   949,   959,   971,   988,
      987,  1001,  1013,  1013,  1112,  1112,  1146,  1177,  1186,  1187,
     1193,  1194,  1201,  1206,  1218,  1232,  1234,  1242,  1249,  1251,
-    1259,  1268,  1270,  1279,  1280,  1288,  1293,  1293,  1304,  1308,
-    1316,  1317,  1320,  1322,  1327,  1328,  1337,  1338,  1343,  1348,
-    1357,  1359,  1361,  1368,  1369,  1375,  1376,  1381,  1383,  1388,
-    1390,  1398,  1403,  1412,  1413,  1418,  1420,  1425,  1427,  1435,
-    1440,  1448,  1449,  1454,  1461,  1465,  1467,  1469,  1482,  1499,
-    1509,  1516,  1518,  1523,  1525,  1527,  1535,  1537,  1542,  1544,
-    1549,  1551,  1553,  1610,  1612,  1614,  1616,  1618,  1620,  1622,
-    1624,  1638,  1643,  1648,  1673,  1679,  1681,  1683,  1685,  1687,
-    1689,  1694,  1698,  1730,  1737,  1743,  1749,  1762,  1763,  1764,
-    1769,  1774,  1778,  1782,  1797,  1818,  1823,  1860,  1889,  1890,
-    1896,  1897,  1902,  1904,  1911,  1928,  1945,  1947,  1954,  1959,
-    1967,  1977,  1989,  1998,  2002,  2006,  2010,  2014,  2018,  2021,
-    2023,  2027,  2031,  2035
+    1259,  1268,  1270,  1279,  1280,  1288,  1293,  1293,  1306,  1310,
+    1318,  1319,  1322,  1324,  1329,  1330,  1339,  1340,  1345,  1350,
+    1359,  1361,  1363,  1370,  1371,  1377,  1378,  1383,  1385,  1390,
+    1392,  1400,  1405,  1414,  1415,  1420,  1422,  1427,  1429,  1437,
+    1442,  1450,  1451,  1456,  1463,  1467,  1469,  1471,  1484,  1501,
+    1511,  1518,  1520,  1525,  1527,  1529,  1537,  1539,  1544,  1546,
+    1551,  1553,  1555,  1612,  1614,  1616,  1618,  1620,  1622,  1624,
+    1626,  1640,  1645,  1650,  1675,  1681,  1683,  1685,  1687,  1689,
+    1691,  1696,  1700,  1732,  1740,  1746,  1752,  1765,  1766,  1767,
+    1772,  1777,  1781,  1785,  1800,  1821,  1826,  1863,  1892,  1893,
+    1899,  1900,  1905,  1907,  1914,  1931,  1948,  1950,  1957,  1962,
+    1970,  1980,  1992,  2001,  2005,  2009,  2013,  2017,  2021,  2024,
+    2026,  2030,  2034,  2038
 };
 #endif
 
@@ -3186,65 +3186,67 @@ regular_print:
                        && (yyvsp[0])->lasti->opcode == Op_K_getline_redir
                                && (yyvsp[0])->lasti->redir_type == 
redirect_twoway)
                        yyerror(_("multistage two-way pipelines don't work"));
+        if (do_lint && (yyvsp[0])->lasti->opcode == Op_concat && 
(yyvsp[-2])->redir_type == redirect_output)
+            lintwarn(_("concatenation as I/O redirection target is 
ambiguous"));
                (yyval) = list_prepend((yyvsp[0]), (yyvsp[-2]));
          }
-#line 3192 "awkgram.c" /* yacc.c:1646  */
+#line 3194 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 88:
-#line 1305 "awkgram.y" /* yacc.c:1646  */
+#line 1307 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = mk_condition((yyvsp[-3]), (yyvsp[-5]), (yyvsp[0]), 
NULL, NULL);
          }
-#line 3200 "awkgram.c" /* yacc.c:1646  */
+#line 3202 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 89:
-#line 1310 "awkgram.y" /* yacc.c:1646  */
+#line 1312 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = mk_condition((yyvsp[-6]), (yyvsp[-8]), (yyvsp[-3]), 
(yyvsp[-2]), (yyvsp[0]));
          }
-#line 3208 "awkgram.c" /* yacc.c:1646  */
+#line 3210 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 94:
-#line 1327 "awkgram.y" /* yacc.c:1646  */
+#line 1329 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 3214 "awkgram.c" /* yacc.c:1646  */
+#line 3216 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 95:
-#line 1329 "awkgram.y" /* yacc.c:1646  */
+#line 1331 "awkgram.y" /* yacc.c:1646  */
     {
                bcfree((yyvsp[-1]));
                (yyval) = (yyvsp[0]);
          }
-#line 3223 "awkgram.c" /* yacc.c:1646  */
+#line 3225 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 96:
-#line 1337 "awkgram.y" /* yacc.c:1646  */
+#line 1339 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 3229 "awkgram.c" /* yacc.c:1646  */
+#line 3231 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 97:
-#line 1339 "awkgram.y" /* yacc.c:1646  */
+#line 1341 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3235 "awkgram.c" /* yacc.c:1646  */
+#line 3237 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 98:
-#line 1344 "awkgram.y" /* yacc.c:1646  */
+#line 1346 "awkgram.y" /* yacc.c:1646  */
     {
                (yyvsp[0])->param_count = 0;
                (yyval) = list_create((yyvsp[0]));
          }
-#line 3244 "awkgram.c" /* yacc.c:1646  */
+#line 3246 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 99:
-#line 1349 "awkgram.y" /* yacc.c:1646  */
+#line 1351 "awkgram.y" /* yacc.c:1646  */
     {
                if ((yyvsp[-2]) != NULL && (yyvsp[0]) != NULL) {
                        (yyvsp[0])->param_count =  
(yyvsp[-2])->lasti->param_count + 1;
@@ -3253,74 +3255,74 @@ regular_print:
                } else
                        (yyval) = NULL;
          }
-#line 3257 "awkgram.c" /* yacc.c:1646  */
+#line 3259 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 100:
-#line 1358 "awkgram.y" /* yacc.c:1646  */
+#line 1360 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 3263 "awkgram.c" /* yacc.c:1646  */
+#line 3265 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 101:
-#line 1360 "awkgram.y" /* yacc.c:1646  */
+#line 1362 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[-1]); }
-#line 3269 "awkgram.c" /* yacc.c:1646  */
+#line 3271 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 102:
-#line 1362 "awkgram.y" /* yacc.c:1646  */
+#line 1364 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[-2]); }
-#line 3275 "awkgram.c" /* yacc.c:1646  */
+#line 3277 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 103:
-#line 1368 "awkgram.y" /* yacc.c:1646  */
+#line 1370 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 3281 "awkgram.c" /* yacc.c:1646  */
+#line 3283 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 104:
-#line 1370 "awkgram.y" /* yacc.c:1646  */
+#line 1372 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3287 "awkgram.c" /* yacc.c:1646  */
+#line 3289 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 105:
-#line 1375 "awkgram.y" /* yacc.c:1646  */
+#line 1377 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 3293 "awkgram.c" /* yacc.c:1646  */
+#line 3295 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 106:
-#line 1377 "awkgram.y" /* yacc.c:1646  */
+#line 1379 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3299 "awkgram.c" /* yacc.c:1646  */
+#line 3301 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 107:
-#line 1382 "awkgram.y" /* yacc.c:1646  */
+#line 1384 "awkgram.y" /* yacc.c:1646  */
     {  (yyval) = mk_expression_list(NULL, (yyvsp[0])); }
-#line 3305 "awkgram.c" /* yacc.c:1646  */
+#line 3307 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 108:
-#line 1384 "awkgram.y" /* yacc.c:1646  */
+#line 1386 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
                yyerrok;
          }
-#line 3314 "awkgram.c" /* yacc.c:1646  */
+#line 3316 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 109:
-#line 1389 "awkgram.y" /* yacc.c:1646  */
+#line 1391 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 3320 "awkgram.c" /* yacc.c:1646  */
+#line 3322 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 110:
-#line 1391 "awkgram.y" /* yacc.c:1646  */
+#line 1393 "awkgram.y" /* yacc.c:1646  */
     {
                /*
                 * Returning the expression list instead of NULL lets
@@ -3328,62 +3330,62 @@ regular_print:
                 */
                (yyval) = (yyvsp[-1]);
          }
-#line 3332 "awkgram.c" /* yacc.c:1646  */
+#line 3334 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 111:
-#line 1399 "awkgram.y" /* yacc.c:1646  */
+#line 1401 "awkgram.y" /* yacc.c:1646  */
     {
                /* Ditto */
                (yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
          }
-#line 3341 "awkgram.c" /* yacc.c:1646  */
+#line 3343 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 112:
-#line 1404 "awkgram.y" /* yacc.c:1646  */
+#line 1406 "awkgram.y" /* yacc.c:1646  */
     {
                /* Ditto */
                (yyval) = (yyvsp[-2]);
          }
-#line 3350 "awkgram.c" /* yacc.c:1646  */
+#line 3352 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 113:
-#line 1412 "awkgram.y" /* yacc.c:1646  */
+#line 1414 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 3356 "awkgram.c" /* yacc.c:1646  */
+#line 3358 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 114:
-#line 1414 "awkgram.y" /* yacc.c:1646  */
+#line 1416 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3362 "awkgram.c" /* yacc.c:1646  */
+#line 3364 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 115:
-#line 1419 "awkgram.y" /* yacc.c:1646  */
+#line 1421 "awkgram.y" /* yacc.c:1646  */
     {  (yyval) = mk_expression_list(NULL, (yyvsp[0])); }
-#line 3368 "awkgram.c" /* yacc.c:1646  */
+#line 3370 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 116:
-#line 1421 "awkgram.y" /* yacc.c:1646  */
+#line 1423 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
                yyerrok;
          }
-#line 3377 "awkgram.c" /* yacc.c:1646  */
+#line 3379 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 117:
-#line 1426 "awkgram.y" /* yacc.c:1646  */
+#line 1428 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 3383 "awkgram.c" /* yacc.c:1646  */
+#line 3385 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 118:
-#line 1428 "awkgram.y" /* yacc.c:1646  */
+#line 1430 "awkgram.y" /* yacc.c:1646  */
     {
                /*
                 * Returning the expression list instead of NULL lets
@@ -3391,72 +3393,72 @@ regular_print:
                 */
                (yyval) = (yyvsp[-1]);
          }
-#line 3395 "awkgram.c" /* yacc.c:1646  */
+#line 3397 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 119:
-#line 1436 "awkgram.y" /* yacc.c:1646  */
+#line 1438 "awkgram.y" /* yacc.c:1646  */
     {
                /* Ditto */
                (yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
          }
-#line 3404 "awkgram.c" /* yacc.c:1646  */
+#line 3406 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 120:
-#line 1441 "awkgram.y" /* yacc.c:1646  */
+#line 1443 "awkgram.y" /* yacc.c:1646  */
     {
                /* Ditto */
                (yyval) = (yyvsp[-2]);
          }
-#line 3413 "awkgram.c" /* yacc.c:1646  */
+#line 3415 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 121:
-#line 1448 "awkgram.y" /* yacc.c:1646  */
+#line 1450 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3419 "awkgram.c" /* yacc.c:1646  */
+#line 3421 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 122:
-#line 1449 "awkgram.y" /* yacc.c:1646  */
+#line 1451 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = list_create((yyvsp[0])); }
-#line 3425 "awkgram.c" /* yacc.c:1646  */
+#line 3427 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 123:
-#line 1455 "awkgram.y" /* yacc.c:1646  */
+#line 1457 "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 3436 "awkgram.c" /* yacc.c:1646  */
+#line 3438 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 124:
-#line 1462 "awkgram.y" /* yacc.c:1646  */
+#line 1464 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = mk_assignment((yyvsp[-2]), list_create((yyvsp[0])), 
(yyvsp[-1]));
          }
-#line 3444 "awkgram.c" /* yacc.c:1646  */
+#line 3446 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 125:
-#line 1466 "awkgram.y" /* yacc.c:1646  */
+#line 1468 "awkgram.y" /* yacc.c:1646  */
     {  (yyval) = mk_boolean((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3450 "awkgram.c" /* yacc.c:1646  */
+#line 3452 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 126:
-#line 1468 "awkgram.y" /* yacc.c:1646  */
+#line 1470 "awkgram.y" /* yacc.c:1646  */
     {  (yyval) = mk_boolean((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3456 "awkgram.c" /* yacc.c:1646  */
+#line 3458 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 127:
-#line 1470 "awkgram.y" /* yacc.c:1646  */
+#line 1472 "awkgram.y" /* yacc.c:1646  */
     {
                if ((yyvsp[-2])->lasti->opcode == Op_match_rec)
                        warning_ln((yyvsp[-1])->source_line,
@@ -3469,11 +3471,11 @@ regular_print:
                bcfree((yyvsp[0]));
                (yyval) = list_append((yyvsp[-2]), (yyvsp[-1]));
          }
-#line 3473 "awkgram.c" /* yacc.c:1646  */
+#line 3475 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 128:
-#line 1483 "awkgram.y" /* yacc.c:1646  */
+#line 1485 "awkgram.y" /* yacc.c:1646  */
     {
                if ((yyvsp[-2])->lasti->opcode == Op_match_rec)
                        warning_ln((yyvsp[-1])->source_line,
@@ -3490,11 +3492,11 @@ regular_print:
                        (yyval) = list_append(list_merge((yyvsp[-2]), 
(yyvsp[0])), (yyvsp[-1]));
                }
          }
-#line 3494 "awkgram.c" /* yacc.c:1646  */
+#line 3496 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 129:
-#line 1500 "awkgram.y" /* yacc.c:1646  */
+#line 1502 "awkgram.y" /* yacc.c:1646  */
     {
                if (do_lint_old)
                        warning_ln((yyvsp[-1])->source_line,
@@ -3504,91 +3506,91 @@ regular_print:
                (yyvsp[-1])->expr_count = 1;
                (yyval) = list_append(list_merge((yyvsp[-2]), (yyvsp[0])), 
(yyvsp[-1]));
          }
-#line 3508 "awkgram.c" /* yacc.c:1646  */
+#line 3510 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 130:
-#line 1510 "awkgram.y" /* yacc.c:1646  */
+#line 1512 "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 3519 "awkgram.c" /* yacc.c:1646  */
+#line 3521 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 131:
-#line 1517 "awkgram.y" /* yacc.c:1646  */
+#line 1519 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_condition((yyvsp[-4]), (yyvsp[-3]), (yyvsp[-2]), 
(yyvsp[-1]), (yyvsp[0])); }
-#line 3525 "awkgram.c" /* yacc.c:1646  */
+#line 3527 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 132:
-#line 1519 "awkgram.y" /* yacc.c:1646  */
+#line 1521 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3531 "awkgram.c" /* yacc.c:1646  */
+#line 3533 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 133:
-#line 1524 "awkgram.y" /* yacc.c:1646  */
+#line 1526 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3537 "awkgram.c" /* yacc.c:1646  */
+#line 3539 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 134:
-#line 1526 "awkgram.y" /* yacc.c:1646  */
+#line 1528 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3543 "awkgram.c" /* yacc.c:1646  */
+#line 3545 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 135:
-#line 1528 "awkgram.y" /* yacc.c:1646  */
+#line 1530 "awkgram.y" /* yacc.c:1646  */
     {
                (yyvsp[0])->opcode = Op_assign_quotient;
                (yyval) = (yyvsp[0]);
          }
-#line 3552 "awkgram.c" /* yacc.c:1646  */
+#line 3554 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 136:
-#line 1536 "awkgram.y" /* yacc.c:1646  */
+#line 1538 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3558 "awkgram.c" /* yacc.c:1646  */
+#line 3560 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 137:
-#line 1538 "awkgram.y" /* yacc.c:1646  */
+#line 1540 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3564 "awkgram.c" /* yacc.c:1646  */
+#line 3566 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 138:
-#line 1543 "awkgram.y" /* yacc.c:1646  */
+#line 1545 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3570 "awkgram.c" /* yacc.c:1646  */
+#line 3572 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 139:
-#line 1545 "awkgram.y" /* yacc.c:1646  */
+#line 1547 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3576 "awkgram.c" /* yacc.c:1646  */
+#line 3578 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 140:
-#line 1550 "awkgram.y" /* yacc.c:1646  */
+#line 1552 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3582 "awkgram.c" /* yacc.c:1646  */
+#line 3584 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 141:
-#line 1552 "awkgram.y" /* yacc.c:1646  */
+#line 1554 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3588 "awkgram.c" /* yacc.c:1646  */
+#line 3590 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 142:
-#line 1554 "awkgram.y" /* yacc.c:1646  */
+#line 1556 "awkgram.y" /* yacc.c:1646  */
     {
                int count = 2;
                bool is_simple_var = false;
@@ -3642,47 +3644,47 @@ regular_print:
                                max_args = count;
                }
          }
-#line 3646 "awkgram.c" /* yacc.c:1646  */
+#line 3648 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 144:
-#line 1613 "awkgram.y" /* yacc.c:1646  */
+#line 1615 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3652 "awkgram.c" /* yacc.c:1646  */
+#line 3654 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 145:
-#line 1615 "awkgram.y" /* yacc.c:1646  */
+#line 1617 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3658 "awkgram.c" /* yacc.c:1646  */
+#line 3660 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 146:
-#line 1617 "awkgram.y" /* yacc.c:1646  */
+#line 1619 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3664 "awkgram.c" /* yacc.c:1646  */
+#line 3666 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 147:
-#line 1619 "awkgram.y" /* yacc.c:1646  */
+#line 1621 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3670 "awkgram.c" /* yacc.c:1646  */
+#line 3672 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 148:
-#line 1621 "awkgram.y" /* yacc.c:1646  */
+#line 1623 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3676 "awkgram.c" /* yacc.c:1646  */
+#line 3678 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 149:
-#line 1623 "awkgram.y" /* yacc.c:1646  */
+#line 1625 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3682 "awkgram.c" /* yacc.c:1646  */
+#line 3684 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 150:
-#line 1625 "awkgram.y" /* yacc.c:1646  */
+#line 1627 "awkgram.y" /* yacc.c:1646  */
     {
                /*
                 * In BEGINFILE/ENDFILE, allow `getline [var] < file'
@@ -3696,29 +3698,29 @@ regular_print:
                                _("non-redirected `getline' undefined inside 
END action"));
                (yyval) = mk_getline((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]), 
redirect_input);
          }
-#line 3700 "awkgram.c" /* yacc.c:1646  */
+#line 3702 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 151:
-#line 1639 "awkgram.y" /* yacc.c:1646  */
+#line 1641 "awkgram.y" /* yacc.c:1646  */
     {
                (yyvsp[0])->opcode = Op_postincrement;
                (yyval) = mk_assignment((yyvsp[-1]), NULL, (yyvsp[0]));
          }
-#line 3709 "awkgram.c" /* yacc.c:1646  */
+#line 3711 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 152:
-#line 1644 "awkgram.y" /* yacc.c:1646  */
+#line 1646 "awkgram.y" /* yacc.c:1646  */
     {
                (yyvsp[0])->opcode = Op_postdecrement;
                (yyval) = mk_assignment((yyvsp[-1]), NULL, (yyvsp[0]));
          }
-#line 3718 "awkgram.c" /* yacc.c:1646  */
+#line 3720 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 153:
-#line 1649 "awkgram.y" /* yacc.c:1646  */
+#line 1651 "awkgram.y" /* yacc.c:1646  */
     {
                if (do_lint_old) {
                    warning_ln((yyvsp[-1])->source_line,
@@ -3738,64 +3740,64 @@ regular_print:
                        (yyval) = list_append(list_merge(t, (yyvsp[0])), 
(yyvsp[-1]));
                }
          }
-#line 3742 "awkgram.c" /* yacc.c:1646  */
+#line 3744 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 154:
-#line 1674 "awkgram.y" /* yacc.c:1646  */
+#line 1676 "awkgram.y" /* yacc.c:1646  */
     {
                  (yyval) = mk_getline((yyvsp[-1]), (yyvsp[0]), (yyvsp[-3]), 
(yyvsp[-2])->redir_type);
                  bcfree((yyvsp[-2]));
                }
-#line 3751 "awkgram.c" /* yacc.c:1646  */
+#line 3753 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 155:
-#line 1680 "awkgram.y" /* yacc.c:1646  */
+#line 1682 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3757 "awkgram.c" /* yacc.c:1646  */
+#line 3759 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 156:
-#line 1682 "awkgram.y" /* yacc.c:1646  */
+#line 1684 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3763 "awkgram.c" /* yacc.c:1646  */
+#line 3765 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 157:
-#line 1684 "awkgram.y" /* yacc.c:1646  */
+#line 1686 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3769 "awkgram.c" /* yacc.c:1646  */
+#line 3771 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 158:
-#line 1686 "awkgram.y" /* yacc.c:1646  */
+#line 1688 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3775 "awkgram.c" /* yacc.c:1646  */
+#line 3777 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 159:
-#line 1688 "awkgram.y" /* yacc.c:1646  */
+#line 1690 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3781 "awkgram.c" /* yacc.c:1646  */
+#line 3783 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 160:
-#line 1690 "awkgram.y" /* yacc.c:1646  */
+#line 1692 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3787 "awkgram.c" /* yacc.c:1646  */
+#line 3789 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 161:
-#line 1695 "awkgram.y" /* yacc.c:1646  */
+#line 1697 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = list_create((yyvsp[0]));
          }
-#line 3795 "awkgram.c" /* yacc.c:1646  */
+#line 3797 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 162:
-#line 1699 "awkgram.y" /* yacc.c:1646  */
+#line 1701 "awkgram.y" /* yacc.c:1646  */
     {
                if ((yyvsp[0])->opcode == Op_match_rec) {
                        (yyvsp[0])->opcode = Op_nomatch;
@@ -3827,42 +3829,43 @@ regular_print:
                        }
                }
           }
-#line 3831 "awkgram.c" /* yacc.c:1646  */
+#line 3833 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 163:
-#line 1731 "awkgram.y" /* yacc.c:1646  */
+#line 1733 "awkgram.y" /* yacc.c:1646  */
     {
-               if (do_pretty_print)
-                       (yyval) = list_append((yyvsp[-1]), bcalloc(Op_parens, 
1, sourceline));
-               else
-                       (yyval) = (yyvsp[-1]);
+        // Always include. Allows us to lint warn on
+        // print "foo" > "bar" 1
+        // but not warn on
+        // print "foo" > ("bar" 1)
+               (yyval) = list_append((yyvsp[-1]), bcalloc(Op_parens, 1, 
sourceline));
          }
-#line 3842 "awkgram.c" /* yacc.c:1646  */
+#line 3845 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 164:
-#line 1738 "awkgram.y" /* yacc.c:1646  */
+#line 1741 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = snode((yyvsp[-1]), (yyvsp[-3]));
                if ((yyval) == NULL)
                        YYABORT;
          }
-#line 3852 "awkgram.c" /* yacc.c:1646  */
+#line 3855 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 165:
-#line 1744 "awkgram.y" /* yacc.c:1646  */
+#line 1747 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = snode((yyvsp[-1]), (yyvsp[-3]));
                if ((yyval) == NULL)
                        YYABORT;
          }
-#line 3862 "awkgram.c" /* yacc.c:1646  */
+#line 3865 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 166:
-#line 1750 "awkgram.y" /* yacc.c:1646  */
+#line 1753 "awkgram.y" /* yacc.c:1646  */
     {
                static bool warned = false;
 
@@ -3875,45 +3878,45 @@ regular_print:
                if ((yyval) == NULL)
                        YYABORT;
          }
-#line 3879 "awkgram.c" /* yacc.c:1646  */
+#line 3882 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 169:
-#line 1765 "awkgram.y" /* yacc.c:1646  */
+#line 1768 "awkgram.y" /* yacc.c:1646  */
     {
                (yyvsp[-1])->opcode = Op_preincrement;
                (yyval) = mk_assignment((yyvsp[0]), NULL, (yyvsp[-1]));
          }
-#line 3888 "awkgram.c" /* yacc.c:1646  */
+#line 3891 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 170:
-#line 1770 "awkgram.y" /* yacc.c:1646  */
+#line 1773 "awkgram.y" /* yacc.c:1646  */
     {
                (yyvsp[-1])->opcode = Op_predecrement;
                (yyval) = mk_assignment((yyvsp[0]), NULL, (yyvsp[-1]));
          }
-#line 3897 "awkgram.c" /* yacc.c:1646  */
+#line 3900 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 171:
-#line 1775 "awkgram.y" /* yacc.c:1646  */
+#line 1778 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = list_create((yyvsp[0]));
          }
-#line 3905 "awkgram.c" /* yacc.c:1646  */
+#line 3908 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 172:
-#line 1779 "awkgram.y" /* yacc.c:1646  */
+#line 1782 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = list_create((yyvsp[0]));
          }
-#line 3913 "awkgram.c" /* yacc.c:1646  */
+#line 3916 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 173:
-#line 1783 "awkgram.y" /* yacc.c:1646  */
+#line 1786 "awkgram.y" /* yacc.c:1646  */
     {
                if ((yyvsp[0])->lasti->opcode == Op_push_i
                        && ((yyvsp[0])->lasti->memory->flags & STRING) == 0
@@ -3928,11 +3931,11 @@ regular_print:
                        (yyval) = list_append((yyvsp[0]), (yyvsp[-1]));
                }
          }
-#line 3932 "awkgram.c" /* yacc.c:1646  */
+#line 3935 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 174:
-#line 1798 "awkgram.y" /* yacc.c:1646  */
+#line 1801 "awkgram.y" /* yacc.c:1646  */
     {
                if ((yyvsp[0])->lasti->opcode == Op_push_i
                        && ((yyvsp[0])->lasti->memory->flags & STRING) == 0
@@ -3950,20 +3953,20 @@ regular_print:
                        (yyval) = list_append((yyvsp[0]), (yyvsp[-1]));
                }
          }
-#line 3954 "awkgram.c" /* yacc.c:1646  */
+#line 3957 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 175:
-#line 1819 "awkgram.y" /* yacc.c:1646  */
+#line 1822 "awkgram.y" /* yacc.c:1646  */
     {
                func_use((yyvsp[0])->lasti->func_name, FUNC_USE);
                (yyval) = (yyvsp[0]);
          }
-#line 3963 "awkgram.c" /* yacc.c:1646  */
+#line 3966 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 176:
-#line 1824 "awkgram.y" /* yacc.c:1646  */
+#line 1827 "awkgram.y" /* yacc.c:1646  */
     {
                /* indirect function call */
                INSTRUCTION *f, *t;
@@ -3997,11 +4000,11 @@ regular_print:
                (yyval) = list_prepend((yyvsp[0]), t);
                at_seen = false;
          }
-#line 4001 "awkgram.c" /* yacc.c:1646  */
+#line 4004 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 177:
-#line 1861 "awkgram.y" /* yacc.c:1646  */
+#line 1864 "awkgram.y" /* yacc.c:1646  */
     {
                NODE *n;
 
@@ -4026,49 +4029,49 @@ regular_print:
                        (yyval) = list_append(t, (yyvsp[-3]));
                }
          }
-#line 4030 "awkgram.c" /* yacc.c:1646  */
+#line 4033 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 178:
-#line 1889 "awkgram.y" /* yacc.c:1646  */
+#line 1892 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 4036 "awkgram.c" /* yacc.c:1646  */
+#line 4039 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 179:
-#line 1891 "awkgram.y" /* yacc.c:1646  */
+#line 1894 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 4042 "awkgram.c" /* yacc.c:1646  */
+#line 4045 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 180:
-#line 1896 "awkgram.y" /* yacc.c:1646  */
+#line 1899 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 4048 "awkgram.c" /* yacc.c:1646  */
+#line 4051 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 181:
-#line 1898 "awkgram.y" /* yacc.c:1646  */
+#line 1901 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[-1]); }
-#line 4054 "awkgram.c" /* yacc.c:1646  */
+#line 4057 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 182:
-#line 1903 "awkgram.y" /* yacc.c:1646  */
+#line 1906 "awkgram.y" /* yacc.c:1646  */
     {  (yyval) = (yyvsp[0]); }
-#line 4060 "awkgram.c" /* yacc.c:1646  */
+#line 4063 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 183:
-#line 1905 "awkgram.y" /* yacc.c:1646  */
+#line 1908 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = list_merge((yyvsp[-1]), (yyvsp[0]));
          }
-#line 4068 "awkgram.c" /* yacc.c:1646  */
+#line 4071 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 184:
-#line 1912 "awkgram.y" /* yacc.c:1646  */
+#line 1915 "awkgram.y" /* yacc.c:1646  */
     {
                INSTRUCTION *ip = (yyvsp[0])->lasti;
                int count = ip->sub_count;      /* # of SUBSEP-seperated 
expressions */
@@ -4082,11 +4085,11 @@ regular_print:
                sub_counter++;  /* count # of dimensions */
                (yyval) = (yyvsp[0]);
          }
-#line 4086 "awkgram.c" /* yacc.c:1646  */
+#line 4089 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 185:
-#line 1929 "awkgram.y" /* yacc.c:1646  */
+#line 1932 "awkgram.y" /* yacc.c:1646  */
     {
                INSTRUCTION *t = (yyvsp[-1]);
                if ((yyvsp[-1]) == NULL) {
@@ -4100,31 +4103,31 @@ regular_print:
                        (yyvsp[0])->sub_count = count_expressions(&t, false);
                (yyval) = list_append(t, (yyvsp[0]));
          }
-#line 4104 "awkgram.c" /* yacc.c:1646  */
+#line 4107 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 186:
-#line 1946 "awkgram.y" /* yacc.c:1646  */
+#line 1949 "awkgram.y" /* yacc.c:1646  */
     {  (yyval) = (yyvsp[0]); }
-#line 4110 "awkgram.c" /* yacc.c:1646  */
+#line 4113 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 187:
-#line 1948 "awkgram.y" /* yacc.c:1646  */
+#line 1951 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = list_merge((yyvsp[-1]), (yyvsp[0]));
          }
-#line 4118 "awkgram.c" /* yacc.c:1646  */
+#line 4121 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 188:
-#line 1955 "awkgram.y" /* yacc.c:1646  */
+#line 1958 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[-1]); }
-#line 4124 "awkgram.c" /* yacc.c:1646  */
+#line 4127 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 189:
-#line 1960 "awkgram.y" /* yacc.c:1646  */
+#line 1963 "awkgram.y" /* yacc.c:1646  */
     {
                char *var_name = (yyvsp[0])->lextok;
 
@@ -4132,22 +4135,22 @@ regular_print:
                (yyvsp[0])->memory = variable((yyvsp[0])->source_line, 
var_name, Node_var_new);
                (yyval) = list_create((yyvsp[0]));
          }
-#line 4136 "awkgram.c" /* yacc.c:1646  */
+#line 4139 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 190:
-#line 1968 "awkgram.y" /* yacc.c:1646  */
+#line 1971 "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 4147 "awkgram.c" /* yacc.c:1646  */
+#line 4150 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 191:
-#line 1978 "awkgram.y" /* yacc.c:1646  */
+#line 1981 "awkgram.y" /* yacc.c:1646  */
     {
                INSTRUCTION *ip = (yyvsp[0])->nexti;
                if (ip->opcode == Op_push
@@ -4159,73 +4162,73 @@ regular_print:
                } else
                        (yyval) = (yyvsp[0]);
          }
-#line 4163 "awkgram.c" /* yacc.c:1646  */
+#line 4166 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 192:
-#line 1990 "awkgram.y" /* yacc.c:1646  */
+#line 1993 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = list_append((yyvsp[-1]), (yyvsp[-2]));
                if ((yyvsp[0]) != NULL)
                        mk_assignment((yyvsp[-1]), NULL, (yyvsp[0]));
          }
-#line 4173 "awkgram.c" /* yacc.c:1646  */
+#line 4176 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 193:
-#line 1999 "awkgram.y" /* yacc.c:1646  */
+#line 2002 "awkgram.y" /* yacc.c:1646  */
     {
                (yyvsp[0])->opcode = Op_postincrement;
          }
-#line 4181 "awkgram.c" /* yacc.c:1646  */
+#line 4184 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 194:
-#line 2003 "awkgram.y" /* yacc.c:1646  */
+#line 2006 "awkgram.y" /* yacc.c:1646  */
     {
                (yyvsp[0])->opcode = Op_postdecrement;
          }
-#line 4189 "awkgram.c" /* yacc.c:1646  */
+#line 4192 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 195:
-#line 2006 "awkgram.y" /* yacc.c:1646  */
+#line 2009 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 4195 "awkgram.c" /* yacc.c:1646  */
+#line 4198 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 197:
-#line 2014 "awkgram.y" /* yacc.c:1646  */
+#line 2017 "awkgram.y" /* yacc.c:1646  */
     { yyerrok; }
-#line 4201 "awkgram.c" /* yacc.c:1646  */
+#line 4204 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 198:
-#line 2018 "awkgram.y" /* yacc.c:1646  */
+#line 2021 "awkgram.y" /* yacc.c:1646  */
     { yyerrok; }
-#line 4207 "awkgram.c" /* yacc.c:1646  */
+#line 4210 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 201:
-#line 2027 "awkgram.y" /* yacc.c:1646  */
+#line 2030 "awkgram.y" /* yacc.c:1646  */
     { yyerrok; }
-#line 4213 "awkgram.c" /* yacc.c:1646  */
+#line 4216 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 202:
-#line 2031 "awkgram.y" /* yacc.c:1646  */
+#line 2034 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); yyerrok; }
-#line 4219 "awkgram.c" /* yacc.c:1646  */
+#line 4222 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 203:
-#line 2035 "awkgram.y" /* yacc.c:1646  */
+#line 2038 "awkgram.y" /* yacc.c:1646  */
     { yyerrok; }
-#line 4225 "awkgram.c" /* yacc.c:1646  */
+#line 4228 "awkgram.c" /* yacc.c:1646  */
     break;
 
 
-#line 4229 "awkgram.c" /* yacc.c:1646  */
+#line 4232 "awkgram.c" /* yacc.c:1646  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -4453,7 +4456,7 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 2037 "awkgram.y" /* yacc.c:1906  */
+#line 2040 "awkgram.y" /* yacc.c:1906  */
 
 
 struct token {
diff --git a/awkgram.y b/awkgram.y
index bc8b4a6..95353c1 100644
--- a/awkgram.y
+++ b/awkgram.y
@@ -1296,6 +1296,8 @@ output_redir
                        && $3->lasti->opcode == Op_K_getline_redir
                                && $3->lasti->redir_type == redirect_twoway)
                        yyerror(_("multistage two-way pipelines don't work"));
+               if (do_lint && $1->redir_type == redirect_output && 
$3->lasti->opcode == Op_concat)
+                       lintwarn(_("concatenation as I/O `>' redirection target 
is ambiguous"));
                $$ = list_prepend($3, $1);
          }
        ;
@@ -1729,10 +1731,11 @@ non_post_simp_exp
           }
        | '(' exp r_paren
          {
-               if (do_pretty_print)
-                       $$ = list_append($2, bcalloc(Op_parens, 1, sourceline));
-               else
-                       $$ = $2;
+               // Always include. Allows us to lint warn on
+               // print "foo" > "bar" 1
+               // but not warn on
+               // print "foo" > ("bar" 1)
+               $$ = list_append($2, bcalloc(Op_parens, 1, sourceline));
          }
        | LEX_BUILTIN '(' opt_fcall_expression_list r_paren
          {
diff --git a/test/ChangeLog b/test/ChangeLog
index 93a42b1..6e7e3e0 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,6 +1,7 @@
 2018-07-27         Arnold D. Robbins     <address@hidden>
 
        * back89.ok, funstack.ok, gsubtst5.ok: Update after code changes.
+       * lintwarn.ok: Ditto.
 
 2018-07-13         Arnold D. Robbins     <address@hidden>
 
diff --git a/test/lintwarn.awk b/test/lintwarn.awk
index cea76bb..d430a2b 100644
--- a/test/lintwarn.awk
+++ b/test/lintwarn.awk
@@ -36,3 +36,8 @@ function zz(aa, aa)
        return aa
 }
 @include ""
+BEGIN {
+       print "foo" > "foo" 1   # should warn
+       print "foo" > ("foo" 1) # should not warn
+       system("rm -f foo1 foo2")
+}

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

commit 3ddc932b0a808a4f5f55519ccf1d65f6caa41666
Author: Arnold D. Robbins <address@hidden>
Date:   Fri Jul 27 11:36:00 2018 +0300

    Add warnings for unknown regex escape sequences.

diff --git a/ChangeLog b/ChangeLog
index 8e2c226..3c7d5fb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2018-07-27         Arnold D. Robbins     <address@hidden>
+
+       * re.c (make_regexp): Add warnings for unknown escape sequences,
+       similar to what we already do for strings.
+
 2018-07-13         Arnold D. Robbins     <address@hidden>
 
        * builtin.c (format_nan_inf): New function to generate +nan, -nan,
diff --git a/re.c b/re.c
index eedd05a..eefdfcd 100644
--- a/re.c
+++ b/re.c
@@ -100,6 +100,12 @@ make_regexp(const char *s, size_t len, bool ignorecase, 
bool dfa, bool canfatal)
                        }
                }
 
+               const char *ok_to_escape;
+               if (do_traditional)
+                       ok_to_escape = "()|*+?.^$\\[]/-";
+               else
+                       ok_to_escape = "<>`'BywWsS{}()|*+?.^$\\[]/-";
+
                /* We skip multibyte character, since it must not be a special
                   character.  */
                if ((gawk_mb_cur_max == 1 || ! is_multibyte) &&
@@ -141,6 +147,14 @@ make_regexp(const char *s, size_t len, bool ignorecase, 
bool dfa, bool canfatal)
                        case '9':       /* a\9b not valid */
                                *dest++ = c;
                                src++;
+                       {
+                               static bool warned[2];
+
+                               if (! warned[c - '8']) {
+                                       warning(_("regexp escape sequence 
`\\%c' treated as plain `%c'"), c, c);
+                                       warned[c - '8'] = true;
+                               }
+                       }
                                break;
                        case 'y':       /* normally \b */
                                /* gnu regex op */
@@ -152,6 +166,14 @@ make_regexp(const char *s, size_t len, bool ignorecase, 
bool dfa, bool canfatal)
                                }
                                /* else, fall through */
                        default:
+                               if (strchr(ok_to_escape, c) == NULL) {
+                                       static bool warned[256];
+
+                                       if (! warned[c & 0xFF]) {
+                                               warning(_("regexp escape 
sequence `\\%c' is not a known regexp operator"), c);
+                                               warned[c & 0xFF] = true;
+                                       }
+                               }
                                *dest++ = '\\';
                                *dest++ = (char) c;
                                src++;
diff --git a/test/ChangeLog b/test/ChangeLog
index 2d85c9a..93a42b1 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,3 +1,7 @@
+2018-07-27         Arnold D. Robbins     <address@hidden>
+
+       * back89.ok, funstack.ok, gsubtst5.ok: Update after code changes.
+
 2018-07-13         Arnold D. Robbins     <address@hidden>
 
        * fmtspcl.awk, fmtspcl.tok, numrange.ok: Revised after code changes
diff --git a/test/back89.ok b/test/back89.ok
index e9ea4d5..8eebce4 100644
--- a/test/back89.ok
+++ b/test/back89.ok
@@ -1 +1,2 @@
+gawk: back89.awk:1: warning: regexp escape sequence `\8' treated as plain `8'
 a8b
diff --git a/test/funstack.ok b/test/funstack.ok
index e69de29..04030d3 100644
--- a/test/funstack.ok
+++ b/test/funstack.ok
@@ -0,0 +1,10 @@
+gawk: funstack.awk:129: warning: regexp escape sequence `\"' is not a known 
regexp operator
+gawk: funstack.awk:381: warning: regexp escape sequence `\e' is not a known 
regexp operator
+gawk: funstack.awk:386: warning: regexp escape sequence `\i' is not a known 
regexp operator
+gawk: funstack.awk:395: warning: regexp escape sequence `\o' is not a known 
regexp operator
+gawk: funstack.awk:402: warning: regexp escape sequence `\u' is not a known 
regexp operator
+gawk: funstack.awk:412: warning: regexp escape sequence `\A' is not a known 
regexp operator
+gawk: funstack.awk:427: warning: regexp escape sequence `\I' is not a known 
regexp operator
+gawk: funstack.awk:436: warning: regexp escape sequence `\O' is not a known 
regexp operator
+gawk: funstack.awk:443: warning: regexp escape sequence `\U' is not a known 
regexp operator
+gawk: funstack.awk:952: warning: regexp escape sequence `\&' is not a known 
regexp operator
diff --git a/test/gsubtst5.ok b/test/gsubtst5.ok
index b038c8a..66488fd 100644
--- a/test/gsubtst5.ok
+++ b/test/gsubtst5.ok
@@ -1 +1,5 @@
+gawk: gsubtst5.awk:95: warning: regexp escape sequence `\ ' is not a known 
regexp operator
+gawk: gsubtst5.awk:95: warning: regexp escape sequence `\"' is not a known 
regexp operator
+gawk: gsubtst5.awk:95: warning: regexp escape sequence `\@' is not a known 
regexp operator
+gawk: gsubtst5.awk:95: warning: regexp escape sequence `\,' is not a known 
regexp operator
 ThisIsaTitleMyTitle

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

Summary of changes:
 ChangeLog         |   8 +
 awkgram.c         | 467 +++++++++++++++++++++++++++---------------------------
 awkgram.y         |  11 +-
 re.c              |  22 +++
 test/ChangeLog    |   5 +
 test/back89.ok    |   1 +
 test/funstack.ok  |  10 ++
 test/gsubtst5.ok  |   4 +
 test/lintwarn.awk |   5 +
 test/lintwarn.ok  |   1 +
 10 files changed, 298 insertions(+), 236 deletions(-)


hooks/post-receive
-- 
gawk



reply via email to

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