gawk-diffs
[Top][All Lists]
Advanced

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

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


From: Arnold Robbins
Subject: [gawk-diffs] [SCM] gawk branch, feature/regex-type, updated. gawk-4.1.0-1174-geb53fb0
Date: Thu, 19 Mar 2015 16:49:02 +0000

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/regex-type has been updated
       via  eb53fb0398911202d4361b869eefa6c1449ebec8 (commit)
      from  b062ba39d52c7e9dee06ac73030aba248ee81168 (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=eb53fb0398911202d4361b869eefa6c1449ebec8

commit eb53fb0398911202d4361b869eefa6c1449ebec8
Author: Arnold D. Robbins <address@hidden>
Date:   Thu Mar 19 18:48:42 2015 +0200

    Further progress with @/.../.

diff --git a/ChangeLog b/ChangeLog
index 81a9889..ff18fea 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2015-03-19         Arnold D. Robbins     <address@hidden>
+
+       * re.c (re_update): Handle hard regex - for sub/gsub/gensub.
+       * awkgram.y (grammar): Add support for hard_regex with ~ and !~;
+       allowed only on the right hand side.
+       (mk_rexp): Handle a hard regex.
+
 2015-03-18         Arnold D. Robbins     <address@hidden>
 
        * builtin.c (do_typeof): Be smarter about checking for uninitialized
diff --git a/awkgram.c b/awkgram.c
index aeda94c..e6eafe6 100644
--- a/awkgram.c
+++ b/awkgram.c
@@ -600,16 +600,16 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  2
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1219
+#define YYLAST   1220
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  76
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  69
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  201
+#define YYNRULES  202
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  348
+#define YYNSTATES  349
 
 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
    by yylex, with out-of-bounds checking.  */
@@ -672,15 +672,15 @@ static const yytype_uint16 yyrline[] =
     1280,  1283,  1285,  1290,  1291,  1300,  1301,  1306,  1311,  1317,
     1319,  1321,  1328,  1329,  1335,  1336,  1341,  1343,  1348,  1350,
     1358,  1363,  1372,  1373,  1378,  1380,  1385,  1387,  1395,  1400,
-    1408,  1409,  1414,  1421,  1426,  1428,  1430,  1446,  1456,  1463,
-    1465,  1470,  1472,  1474,  1482,  1484,  1489,  1491,  1496,  1498,
-    1500,  1550,  1552,  1554,  1556,  1558,  1560,  1562,  1564,  1578,
-    1583,  1588,  1613,  1619,  1621,  1623,  1625,  1627,  1629,  1634,
-    1638,  1670,  1672,  1678,  1684,  1697,  1698,  1699,  1704,  1709,
-    1713,  1717,  1732,  1745,  1750,  1787,  1816,  1817,  1823,  1824,
-    1829,  1831,  1838,  1855,  1872,  1874,  1881,  1886,  1894,  1904,
-    1916,  1925,  1929,  1933,  1937,  1941,  1945,  1948,  1950,  1954,
-    1958,  1962
+    1408,  1409,  1414,  1421,  1425,  1427,  1429,  1444,  1461,  1471,
+    1478,  1480,  1485,  1487,  1489,  1497,  1499,  1504,  1506,  1511,
+    1513,  1515,  1565,  1567,  1569,  1571,  1573,  1575,  1577,  1579,
+    1593,  1598,  1603,  1628,  1634,  1636,  1638,  1640,  1642,  1644,
+    1649,  1653,  1685,  1687,  1693,  1699,  1712,  1713,  1714,  1719,
+    1724,  1728,  1732,  1747,  1760,  1765,  1802,  1831,  1832,  1838,
+    1839,  1844,  1846,  1853,  1870,  1887,  1889,  1896,  1901,  1909,
+    1919,  1931,  1940,  1944,  1948,  1952,  1956,  1960,  1963,  1965,
+    1969,  1973,  1977
 };
 #endif
 
@@ -735,10 +735,10 @@ static const yytype_uint16 yytoknum[] =
 };
 # endif
 
-#define YYPACT_NINF -276
+#define YYPACT_NINF -274
 
 #define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-276)))
+  (!!((Yystate) == (-274)))
 
 #define YYTABLE_NINF -114
 
@@ -749,41 +749,41 @@ static const yytype_uint16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    -276,   359,  -276,  -276,   -32,   -23,  -276,  -276,  -276,  -276,
-     171,  -276,  -276,    25,    25,    25,    -8,    61,  -276,  -276,
-    -276,  1122,  1122,  -276,  1122,  1149,   852,   152,  -276,   -24,
-      -7,  -276,  -276,    87,   284,  1048,   310,   354,  -276,  -276,
-    -276,  -276,   212,   778,   852,  -276,     1,  -276,  -276,  -276,
-    -276,  -276,    19,    75,  -276,    88,  -276,  -276,  -276,   778,
-     778,   146,    94,    12,    94,    94,  1122,    66,  -276,  -276,
-       7,   229,    34,    67,  -276,   102,  -276,  -276,  -276,    87,
-    -276,   102,  -276,   157,  -276,  -276,  1122,   159,  1122,  1122,
-    1122,   102,  -276,  -276,  -276,  1122,   125,   310,  1122,  1122,
-    1122,  1122,  1122,  1122,  1122,  1122,  1122,  1122,  1122,  1122,
-    -276,   156,  -276,  -276,   158,  1122,  -276,  -276,  -276,   101,
-      92,  -276,   867,     6,   867,  -276,  -276,  -276,    43,  1122,
-    -276,   101,   101,   229,  -276,  -276,  -276,  1122,   102,  -276,
-     130,   899,  -276,  -276,     9,   -21,  -276,    15,   -21,    87,
-    -276,   582,  -276,  -276,    22,  -276,   219,   333,  1031,  1122,
-     166,    25,   248,   248,    94,    94,    94,    94,   248,   248,
-      94,    94,    94,    94,  -276,  -276,   867,  -276,  1075,   825,
-    -276,  -276,  -276,   101,   112,   310,  -276,  -276,   867,  -276,
-     159,  -276,   867,  -276,  -276,  -276,  -276,  -276,   105,  -276,
-      13,   111,   114,   102,   115,   -21,   -21,  -276,  -276,   -21,
-    1122,   -21,   102,  -276,  -276,   -21,  -276,  -276,   867,  -276,
-     113,   102,  1122,   867,  -276,  -276,  -276,  -276,   102,  -276,
-      49,  -276,  1122,  1122,  -276,   176,  1122,  1122,   698,   932,
-    -276,  -276,  -276,   -21,   867,  -276,  -276,  -276,   629,   582,
-     102,  -276,  -276,   867,  -276,  -276,  -276,   229,   -21,   -23,
-     117,   229,   229,   162,     4,  -276,   113,  -276,   852,   181,
-    -276,   186,  -276,  -276,   102,  -276,  -276,    38,  -276,  -276,
-    -276,   102,   102,   127,   159,   102,     7,  -276,  -276,   698,
-    -276,  -276,    -7,   698,  1122,   101,   745,   130,  1122,   177,
-    -276,  -276,   229,   102,   259,   102,  1048,   102,   141,   102,
-     698,   102,   980,   698,  -276,   271,   144,  -276,   132,  -276,
-    -276,   980,   101,  -276,  -276,  -276,   197,   223,  -276,  -276,
-     144,  -276,   102,  -276,   101,   102,  -276,  -276,   102,  -276,
-     102,   698,  -276,   432,   698,  -276,   507,  -276
+    -274,   360,  -274,  -274,   -17,   -23,  -274,  -274,  -274,  -274,
+     128,  -274,  -274,    14,    14,    14,   -11,     8,  -274,  -274,
+    -274,  1123,  1123,  -274,  1123,  1150,   853,   151,  -274,   -20,
+     -10,  -274,  -274,    20,   868,  1049,   252,   276,  -274,  -274,
+    -274,  -274,   264,   779,   853,  -274,     9,  -274,  -274,  -274,
+    -274,  -274,    28,    45,  -274,    10,  -274,  -274,  -274,   779,
+     779,   134,    75,   104,    75,    75,  1123,   127,  -274,  -274,
+      15,   333,    44,    63,  -274,   106,  -274,  -274,  -274,    20,
+    -274,   106,  -274,   157,  -274,  -274,  1076,   152,  1123,  1123,
+    1123,   106,  -274,  -274,  -274,  1123,   145,   252,  1123,  1123,
+    1123,  1123,  1123,  1123,  1123,  1123,  1123,  1123,  1123,  1123,
+    -274,   164,  -274,  -274,   172,  1123,  -274,  -274,  -274,    97,
+      73,  -274,  1091,    36,  1091,  -274,  -274,  -274,    26,  1123,
+    -274,    97,    97,   333,  -274,  -274,  -274,  1123,   106,  -274,
+     146,   900,  -274,  -274,    16,   -21,  -274,    34,   -21,    20,
+    -274,   583,  -274,  -274,  -274,   173,  -274,   209,   374,  1032,
+    1123,   215,    14,   102,   102,    75,    75,    75,    75,   102,
+     102,    75,    75,    75,    75,  -274,  -274,  1091,  -274,  1076,
+     826,  -274,  -274,  -274,    97,   111,   252,  -274,  -274,  1091,
+    -274,   152,  -274,  1091,  -274,  -274,  -274,  -274,  -274,   120,
+    -274,    42,   126,   131,   106,   135,   -21,   -21,  -274,  -274,
+     -21,  1123,   -21,   106,  -274,  -274,   -21,  -274,  -274,  1091,
+    -274,   115,   106,  1123,  1091,  -274,  -274,  -274,  -274,   106,
+    -274,    43,  -274,  1123,  1123,  -274,   203,  1123,  1123,   699,
+     933,  -274,  -274,  -274,   -21,  1091,  -274,  -274,  -274,   630,
+     583,   106,  -274,  -274,  1091,  -274,  -274,  -274,   333,   -21,
+     -23,   147,   333,   333,   199,    -5,  -274,   115,  -274,   853,
+     216,  -274,     4,  -274,  -274,   106,  -274,  -274,   122,  -274,
+    -274,  -274,   106,   106,   167,   152,   106,    15,  -274,  -274,
+     699,  -274,  -274,   -10,   699,  1123,    97,   746,   146,  1123,
+     218,  -274,  -274,   333,   106,   246,   106,  1049,   106,   144,
+     106,   699,   106,   981,   699,  -274,   272,   185,  -274,   168,
+    -274,  -274,   981,    97,  -274,  -274,  -274,   236,   238,  -274,
+    -274,   185,  -274,   106,  -274,    97,   106,  -274,  -274,   106,
+    -274,   106,   699,  -274,   433,   699,  -274,   508,  -274
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -791,65 +791,65 @@ static const yytype_int16 yypact[] =
      means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       2,     0,     1,     6,     0,   187,   169,   170,    21,    22,
-       0,    23,    24,   176,     0,     0,     0,   164,     5,    89,
+       2,     0,     1,     6,     0,   188,   170,   171,    21,    22,
+       0,    23,    24,   177,     0,     0,     0,   165,     5,    89,
       37,     0,     0,    36,     0,     0,     0,     0,     3,     0,
-       0,   159,    33,     4,    19,   130,   138,   139,   141,   165,
-     173,   189,   166,     0,     0,   184,     0,   188,    27,    26,
-      30,    31,     0,     0,    28,    93,   177,   167,   168,     0,
-       0,     0,   172,   166,   171,   160,     0,   193,   166,   108,
-       0,   106,     0,     0,   174,    91,   199,     7,     8,    41,
-      38,    91,     9,     0,    90,   134,     0,     0,     0,     0,
-       0,    91,   135,   137,   136,     0,     0,   140,     0,     0,
+       0,   160,    33,     4,    19,   131,   139,   140,   142,   166,
+     174,   190,   167,     0,     0,   185,     0,   189,    27,    26,
+      30,    31,     0,     0,    28,    93,   178,   168,   169,     0,
+       0,     0,   173,   167,   172,   161,     0,   194,   167,   108,
+       0,   106,     0,     0,   175,    91,   200,     7,     8,    41,
+      38,    91,     9,     0,    90,   135,     0,     0,     0,     0,
+       0,    91,   136,   138,   137,     0,     0,   141,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     132,   131,   149,   150,     0,     0,   116,    35,   121,     0,
-       0,   114,   120,     0,   106,   186,   185,    29,     0,     0,
-     148,     0,     0,     0,   191,   192,   190,   109,    91,   196,
-       0,     0,   161,    14,     0,     0,    17,     0,     0,    92,
-     194,     0,    42,    34,   126,   127,   124,   125,     0,     0,
-     128,   176,   146,   147,   143,   144,   145,   142,   157,   158,
-     154,   155,   156,   153,   123,   133,   122,   175,   117,     0,
-     183,    99,    97,     0,     0,    94,   162,   163,   110,   201,
-       0,   111,   107,    13,    10,    16,    11,    40,     0,    58,
-       0,     0,     0,    91,     0,     0,     0,    80,    81,     0,
-     102,     0,    91,    39,    52,     0,    61,    45,    66,    38,
-     197,    91,     0,    20,   152,   118,   119,   115,    91,   100,
-       0,   151,     0,   102,    63,     0,     0,     0,     0,    67,
-      53,    54,    55,     0,   103,    56,   195,    60,     0,     0,
-      91,   198,    43,   129,    32,   101,    98,     0,     0,   178,
-       0,     0,     0,     0,   187,    68,     0,    57,     0,    84,
-      82,     0,    44,    25,    91,    59,    64,     0,   180,   182,
-      65,    91,    91,     0,     0,    91,     0,    85,    62,     0,
-     179,   181,     0,     0,     0,     0,     0,    83,     0,    87,
-      69,    47,     0,    91,     0,    91,    86,    91,     0,    91,
-       0,    91,    67,     0,    71,     0,     0,    70,     0,    48,
-      49,    67,     0,    88,    74,    77,     0,     0,    78,    79,
-       0,   200,    91,    46,     0,    91,    76,    75,    91,    38,
-      91,     0,    38,     0,     0,    51,     0,    50
+     133,   132,   150,   151,     0,     0,   116,    35,   121,     0,
+       0,   114,   120,     0,   106,   187,   186,    29,     0,     0,
+     149,     0,     0,     0,   192,   193,   191,   109,    91,   197,
+       0,     0,   162,    14,     0,     0,    17,     0,     0,    92,
+     195,     0,    42,    34,   126,   127,   128,   124,   125,     0,
+       0,   129,   177,   147,   148,   144,   145,   146,   143,   158,
+     159,   155,   156,   157,   154,   123,   134,   122,   176,   117,
+       0,   184,    99,    97,     0,     0,    94,   163,   164,   110,
+     202,     0,   111,   107,    13,    10,    16,    11,    40,     0,
+      58,     0,     0,     0,    91,     0,     0,     0,    80,    81,
+       0,   102,     0,    91,    39,    52,     0,    61,    45,    66,
+      38,   198,    91,     0,    20,   153,   118,   119,   115,    91,
+     100,     0,   152,     0,   102,    63,     0,     0,     0,     0,
+      67,    53,    54,    55,     0,   103,    56,   196,    60,     0,
+       0,    91,   199,    43,   130,    32,   101,    98,     0,     0,
+     179,     0,     0,     0,     0,   188,    68,     0,    57,     0,
+      84,    82,     0,    44,    25,    91,    59,    64,     0,   181,
+     183,    65,    91,    91,     0,     0,    91,     0,    85,    62,
+       0,   180,   182,     0,     0,     0,     0,     0,    83,     0,
+      87,    69,    47,     0,    91,     0,    91,    86,    91,     0,
+      91,     0,    91,    67,     0,    71,     0,     0,    70,     0,
+      48,    49,    67,     0,    88,    74,    77,     0,     0,    78,
+      79,     0,   201,    91,    46,     0,    91,    76,    75,    91,
+      38,    91,     0,    38,     0,     0,    51,     0,    50
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -276,  -276,  -276,  -276,  -276,  -276,   215,  -276,  -276,  -276,
-     -66,  -276,   -96,  -276,  -195,   -74,    -5,  -276,  -276,  -235,
-    -276,  -276,  -275,  -276,  -276,  -276,  -276,  -276,  -276,  -276,
-    -276,     5,    47,  -276,  -276,  -276,    21,  -276,   -41,    97,
-    -276,   -27,    -1,  -276,  -276,  -276,   -46,    17,  -276,   233,
-    -276,     3,   121,  -276,  -276,   -11,   -37,  -276,  -276,   -82,
-      -2,  -276,   -28,  -223,   -49,  -276,   -15,   -68,   -93
+    -274,  -274,  -274,  -274,  -274,  -274,   223,  -274,  -274,  -274,
+     -70,  -274,   -82,  -274,  -196,   -55,   -19,  -274,  -274,  -179,
+    -274,  -274,  -273,  -274,  -274,  -274,  -274,  -274,  -274,  -274,
+    -274,     5,    47,  -274,  -274,  -274,    21,  -274,   -41,   117,
+    -274,     2,    -1,  -274,  -274,  -274,   -42,    17,  -274,   233,
+    -274,     1,   100,  -274,  -274,    -8,   -37,  -274,  -274,   -80,
+      -2,  -274,   -28,  -242,   -49,  -274,   -15,   -72,  -110
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
       -1,     1,    28,   145,   148,    29,    77,    53,    54,    30,
-      31,    83,   118,    32,   151,    78,   213,   214,   233,   215,
-     248,   259,   266,   308,   317,   330,   216,   269,   288,   298,
-     217,   149,   150,   130,   183,   184,   243,   270,    70,   119,
-     120,   121,   218,   115,    94,    95,    35,    36,    37,    38,
-      39,    40,    55,   276,   277,   278,    45,    46,    47,    41,
-      42,   136,   219,   220,   142,   250,   221,   332,   141
+      31,    83,   118,    32,   151,    78,   214,   215,   234,   216,
+     249,   260,   267,   309,   318,   331,   217,   270,   289,   299,
+     218,   149,   150,   130,   184,   185,   244,   271,    70,   119,
+     120,   121,   219,   115,    94,    95,    35,    36,    37,    38,
+      39,    40,    55,   277,   278,   279,    45,    46,    47,    41,
+      42,   136,   220,   221,   142,   251,   222,   333,   141
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -857,254 +857,256 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      34,    80,    80,   123,   265,   155,    33,   137,   137,   126,
-     193,    56,    57,    58,    81,   174,   195,   234,   125,    63,
-      63,   140,    63,    68,   249,    71,   272,   179,    19,     5,
-      74,    19,    85,    63,    79,   143,    43,   322,    62,    64,
-     144,    65,   122,   124,   181,   284,   334,   182,    44,    75,
-     255,    76,    97,   256,    76,   290,   112,   113,   122,   122,
-      59,   -12,   138,   138,    74,   133,    75,   -15,   146,   127,
-     177,   194,    44,   147,   196,    44,   139,   265,   180,    92,
-      93,   235,   186,   187,   -12,   154,   265,   156,   157,   158,
-     -15,   230,    25,   178,   160,   333,    63,    63,    63,    63,
-      63,    63,    63,    63,    63,    63,    63,    63,   231,    44,
-     134,   135,   -95,   229,   176,   162,   163,   164,   165,   166,
-     167,   168,   169,   170,   171,   172,   173,    63,   152,    60,
-      81,   240,   241,    81,   228,   242,   188,   245,   159,    84,
-     192,   247,   314,   128,   343,   129,   185,   346,   138,     4,
-      79,   225,   227,    79,    19,     4,   131,   132,   223,    56,
-     103,  -113,   153,     5,   161,   117,   315,   316,   138,   267,
-     139,   190,   175,   232,    48,    49,  -114,   122,   122,   236,
-     260,   -96,   237,   239,   275,   189,   280,   137,    76,   283,
-      81,    81,   287,    19,    81,   294,    81,  -105,   307,   331,
-      81,    72,   295,    73,   336,   251,   212,   271,   274,   244,
-      79,    79,   281,   282,    79,   -91,    79,    50,    51,   329,
-      79,   253,   279,  -114,  -114,   110,   111,   286,    81,    85,
-     337,   257,   244,   263,    86,   261,   262,   297,  -105,    85,
-     279,    52,   138,    81,    86,    82,   303,   124,    79,   328,
-     238,   285,   306,   309,   258,  -105,   112,   113,    67,   246,
-      87,  -105,   338,    79,   300,   114,   291,    71,   252,    85,
-      87,    88,    89,   335,    86,   254,    92,    93,   324,   325,
-     117,   305,   224,    90,   299,   340,    92,    93,   301,   311,
-       0,     0,     0,   302,    85,   304,    63,   273,   139,    86,
-      87,    88,    89,     0,    63,   320,     0,     0,   323,   100,
-     101,   102,     0,    90,   103,     0,    92,    93,     0,     0,
-       0,   289,     0,    97,    20,    87,    88,    89,   292,   293,
-     326,   327,   296,    23,    76,     0,   345,     0,    90,   347,
-      91,    92,    93,    85,     0,     0,     0,     0,    86,     0,
-     310,     0,   312,     0,   313,   318,   319,     0,   321,     2,
-       3,     0,     4,     5,     0,     0,     6,     7,     0,    98,
-      99,   100,   101,   102,    87,    88,   103,     8,     9,   339,
-       0,     0,   341,     0,     0,   342,     0,   344,     0,     0,
-      92,    93,     0,     0,     0,    10,    11,    12,    13,     0,
-       0,     0,     0,    14,    15,    16,    17,    18,     0,     0,
-       0,    19,    20,   104,   105,   106,   107,   108,    21,    22,
-     109,    23,     0,    24,     0,     0,    25,    26,     0,    27,
-       0,     0,   -18,   197,   -18,     4,     5,     0,     0,     6,
-       7,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   198,     0,   199,   200,   201,   -73,   -73,   202,
-     203,   204,   205,   206,   207,   208,   209,   210,     0,     0,
-       0,    13,   211,     0,     0,     0,    14,    15,    16,    17,
-       0,     0,     0,     0,   -73,    20,     0,     0,     0,     0,
-       0,    21,    22,     0,    23,     0,    24,     0,     0,    25,
-      26,     0,    61,     0,     0,    75,   -73,    76,   197,     0,
-       4,     5,     0,     0,     6,     7,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   198,     0,   199,
-     200,   201,   -72,   -72,   202,   203,   204,   205,   206,   207,
-     208,   209,   210,     0,     0,     0,    13,   211,     0,     0,
-       0,    14,    15,    16,    17,     0,     0,     0,     0,   -72,
-      20,     0,     0,     0,     0,     0,    21,    22,     0,    23,
-       0,    24,     0,     0,    25,    26,     0,    61,     0,     0,
-      75,   -72,    76,   197,     0,     4,     5,     0,     0,     6,
-       7,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   198,     0,   199,   200,   201,     0,     0,   202,
-     203,   204,   205,   206,   207,   208,   209,   210,     0,     0,
-       0,    13,   211,     0,     0,     0,    14,    15,    16,    17,
-      69,     0,     4,     5,     0,    20,     6,     7,     0,     0,
-    -104,    21,    22,     0,    23,     0,    24,     0,     0,    25,
-      26,     0,    61,     0,     0,    75,   212,    76,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    13,     0,
-       0,     0,     0,    14,    15,    16,    17,     0,     0,     0,
-       0,  -104,    20,     0,     0,     0,     0,     0,    21,    22,
-       0,    23,     0,    24,     0,     0,    25,   268,  -104,    61,
-       0,     4,     5,     0,  -104,     6,     7,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   198,     0,
-     199,   200,   201,     0,     0,   202,   203,   204,   205,   206,
-     207,   208,   209,   210,     0,     0,     0,    13,   211,     0,
-       0,     0,    14,    15,    16,    17,     0,     0,     4,     5,
-       0,    20,     6,     7,     0,     0,     0,    21,    22,     0,
+      34,    80,    80,   123,   154,   137,    33,   156,   273,   126,
+     180,    56,    57,    58,    81,  -105,   137,   194,     5,    63,
+      63,   140,    63,    68,   250,    71,   125,   182,    74,   175,
+     183,    19,    19,    63,    79,   196,   285,   137,    62,    64,
+     323,    65,   122,   124,   256,   143,   235,   257,    44,   335,
+     144,    43,    97,    75,    76,    76,  -105,    59,   122,   122,
+     138,   266,    74,    75,   146,   133,    44,   129,   -12,   147,
+     178,   138,    84,  -105,   179,   231,    60,   334,   127,  -105,
+      44,    25,   187,   188,   139,   155,   -15,   157,   158,   159,
+     195,   -12,   138,   197,   161,   -95,    63,    63,    63,    63,
+      63,    63,    63,    63,    63,    63,    63,    63,   181,   -15,
+     236,   232,   230,   128,   177,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   173,   174,    63,   152,   138,
+      81,    48,    49,    81,   266,   229,   189,     4,   160,   291,
+     193,   103,  -113,   266,   344,   315,   186,   347,   112,   113,
+      79,   241,   242,    79,     4,   243,     5,   246,    19,   224,
+      56,   248,   153,   100,   101,   102,   139,   138,   103,   316,
+     317,   134,   135,   117,    50,    51,   131,   132,   122,   122,
+     -96,   226,   228,    85,   162,   190,   176,   191,   233,   268,
+      76,    81,    81,    44,   237,    81,    19,    81,    52,   238,
+      72,    81,    73,   240,   276,   296,   252,   261,   272,   275,
+     245,    79,    79,   282,   283,    79,   281,    79,   -91,    85,
+     264,    79,   254,   280,    86,  -114,   284,   288,   287,    81,
+      92,    93,   258,   245,   330,   295,   262,   263,   298,   308,
+     332,   280,   213,   337,    81,   338,   329,   304,   124,    79,
+      87,   239,   286,    82,   310,   259,    85,   307,    67,   339,
+     247,    86,   225,     0,    79,   301,    92,    93,    71,   253,
+     292,   300,  -114,  -114,   336,   302,   255,   110,   111,   325,
+     326,   117,   306,     0,     0,     0,   341,    87,    88,    89,
+     312,     0,   321,     0,   303,   324,   305,    63,   274,     0,
+      90,     0,     0,    92,    93,    63,     0,     0,   112,   113,
+       0,    98,    99,   100,   101,   102,     0,   114,   103,     0,
+       0,    76,   290,   346,    97,    20,   348,     0,     0,   293,
+     294,   327,   328,   297,    23,   104,   105,   106,   107,   108,
+       0,     0,   109,    85,     0,     0,     0,     0,    86,     0,
+       0,   311,     0,   313,     0,   314,   319,   320,     0,   322,
+       2,     3,     0,     4,     5,     0,     0,     6,     7,     0,
+       0,     0,     0,     0,    87,    88,    89,     0,     8,     9,
+     340,     0,     0,   342,    85,     0,   343,    90,   345,    86,
+      92,    93,     0,     0,     0,     0,    10,    11,    12,    13,
+       0,     0,   139,     0,    14,    15,    16,    17,    18,     0,
+       0,     0,    19,    20,     0,    87,    88,     0,     0,    21,
+      22,     0,    23,     0,    24,     0,     0,    25,    26,     0,
+      27,    92,    93,   -18,   198,   -18,     4,     5,     0,     0,
+       6,     7,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   199,     0,   200,   201,   202,   -73,   -73,
+     203,   204,   205,   206,   207,   208,   209,   210,   211,     0,
+       0,     0,    13,   212,     0,     0,     0,    14,    15,    16,
+      17,     0,     0,     0,     0,   -73,    20,     0,     0,     0,
+       0,     0,    21,    22,     0,    23,     0,    24,     0,     0,
+      25,    26,     0,    61,     0,     0,    75,   -73,    76,   198,
+       0,     4,     5,     0,     0,     6,     7,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   199,     0,
+     200,   201,   202,   -72,   -72,   203,   204,   205,   206,   207,
+     208,   209,   210,   211,     0,     0,     0,    13,   212,     0,
+       0,     0,    14,    15,    16,    17,     0,     0,     0,     0,
+     -72,    20,     0,     0,     0,     0,     0,    21,    22,     0,
       23,     0,    24,     0,     0,    25,    26,     0,    61,     0,
-       0,    75,     0,    76,     0,     0,     0,     0,     0,   116,
-       0,     4,     5,     0,    13,     6,     7,   117,     0,    14,
-      15,    16,    17,     0,     0,     0,     0,     0,    20,     0,
-       0,     0,     0,     0,    21,    22,     0,    23,     0,    24,
-       0,     0,    25,    26,     0,    61,     0,    13,     0,     0,
-      76,     0,    14,    15,    16,    17,   226,     0,     4,     5,
-       0,    20,     6,     7,   117,     0,     0,    21,    22,     0,
-      23,     0,    24,     0,     0,    25,    26,  -112,    61,     0,
-       0,     0,     0,    69,     0,     4,     5,     0,     0,     6,
-       7,     0,     0,     0,    13,     0,     0,     0,     0,    14,
-      15,    16,    17,     0,     0,     0,     0,    85,    20,     0,
-       0,     0,    86,     0,    21,    22,     0,    23,     0,    24,
-       0,    13,    25,    26,     0,    61,    14,    15,    16,    17,
-     191,     0,     4,     5,     0,    20,     6,     7,    87,    88,
-      89,    21,    22,     0,    23,     0,    24,     0,     0,    25,
-      26,    90,    61,     0,    92,    93,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     4,   264,     0,    13,     6,
-       7,     0,     0,    14,    15,    16,    17,     0,     0,     0,
-       0,     0,    20,     0,     0,   200,     0,     0,    21,    22,
-       0,    23,     0,    24,   207,   208,    25,    26,     0,    61,
-       0,    13,     0,     0,     0,     0,    14,    15,    16,    17,
-       0,     0,     0,     4,     5,    20,     0,     6,     7,     0,
-       0,    21,    22,     0,    23,     0,    24,     0,     0,    25,
-      26,     0,    61,   200,     0,     0,     0,     0,     0,     0,
-       0,     0,   207,   208,     0,     0,     0,     0,     0,    13,
+       0,    75,   -72,    76,   198,     0,     4,     5,     0,     0,
+       6,     7,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   199,     0,   200,   201,   202,     0,     0,
+     203,   204,   205,   206,   207,   208,   209,   210,   211,     0,
+       0,     0,    13,   212,     0,     0,     0,    14,    15,    16,
+      17,    69,     0,     4,     5,     0,    20,     6,     7,     0,
+       0,  -104,    21,    22,     0,    23,     0,    24,     0,     0,
+      25,    26,     0,    61,     0,     0,    75,   213,    76,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    13,
        0,     0,     0,     0,    14,    15,    16,    17,     0,     0,
+       0,     0,  -104,    20,     0,     0,     0,     0,     0,    21,
+      22,     0,    23,     0,    24,     0,     0,    25,   269,  -104,
+      61,     0,     4,     5,     0,  -104,     6,     7,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   199,
+       0,   200,   201,   202,     0,     0,   203,   204,   205,   206,
+     207,   208,   209,   210,   211,     0,     0,     0,    13,   212,
+       0,     0,     0,    14,    15,    16,    17,     0,     0,     4,
+       5,     0,    20,     6,     7,     0,     0,     0,    21,    22,
+       0,    23,     0,    24,     0,     0,    25,    26,     0,    61,
+       0,     0,    75,     0,    76,     0,     0,     0,     0,     0,
+     116,     0,     4,     5,     0,    13,     6,     7,   117,     0,
+      14,    15,    16,    17,     0,     0,     0,     0,     0,    20,
+       0,     0,     0,     0,     0,    21,    22,     0,    23,     0,
+      24,     0,     0,    25,    26,     0,    61,     0,    13,     0,
+       0,    76,     0,    14,    15,    16,    17,   227,     0,     4,
+       5,     0,    20,     6,     7,   117,     0,     0,    21,    22,
+       0,    23,     0,    24,     0,     0,    25,    26,  -112,    61,
+       0,     0,     0,     0,    69,     0,     4,     5,     0,     0,
+       6,     7,     0,     0,     0,    13,     0,     0,     0,     0,
+      14,    15,    16,    17,     0,     0,     0,     0,    85,    20,
+       0,     0,     0,    86,     0,    21,    22,     0,    23,     0,
+      24,     0,    13,    25,    26,     0,    61,    14,    15,    16,
+      17,   192,     0,     4,     5,     0,    20,     6,     7,    87,
+      88,    89,    21,    22,     0,    23,     0,    24,     0,     0,
+      25,    26,    90,    61,    91,    92,    93,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     4,   265,     0,    13,
+       6,     7,     0,     0,    14,    15,    16,    17,     0,     0,
+       0,     0,     0,    20,     0,     0,   201,     0,     0,    21,
+      22,     0,    23,     0,    24,   208,   209,    25,    26,     0,
+      61,     0,    13,     0,     0,     0,     0,    14,    15,    16,
+      17,     0,     0,     0,     4,     5,    20,     0,     6,     7,
+       0,     0,    21,    22,     0,    23,     0,    24,     0,     0,
+      25,    26,     0,    61,   201,     0,     0,     0,     0,     0,
+       0,     0,     0,   208,   209,     0,     0,     0,     0,     0,
+      13,     0,     0,     0,     0,    14,    15,    16,    17,     0,
+       0,     0,     0,     0,    20,     0,     0,     0,     0,     0,
+      21,    22,    85,    23,     0,    24,     0,    86,    25,    26,
+       0,    61,     4,     5,     0,     0,     6,     7,     0,     0,
+       0,    96,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    87,    88,    89,     0,     0,     0,     4,
+       5,     0,     0,     6,     7,   117,    90,   223,    13,    92,
+      93,     0,     0,    14,    15,    16,    17,     0,     0,     0,
+       0,    85,    20,     0,     0,     0,    86,     0,    21,    22,
+       0,    23,     0,    24,     0,    13,    25,    26,     0,    61,
+      14,    15,    16,    17,     0,     0,     4,     5,     0,    20,
+       6,     7,    87,    88,    89,    21,    22,     0,    23,     0,
+      24,     0,     0,    25,    26,    90,    61,     0,    92,    93,
+       0,     0,     0,     4,     5,     0,     0,     6,     7,     0,
+       0,     0,    13,     0,     0,     0,     0,    14,    15,    16,
+      17,     0,     0,     0,     0,     0,    20,     0,     0,     0,
+       0,     0,    21,    22,     0,    23,     0,    24,     0,     0,
+      25,    26,     0,    61,    14,    15,    16,    17,     0,     0,
        0,     0,     0,    20,     0,     0,     0,     0,     0,    21,
-      22,    85,    23,     0,    24,     0,    86,    25,    26,     0,
-      61,     4,     5,     0,     0,     6,     7,     0,     0,     0,
-      96,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    87,    88,    89,     0,     0,     0,     4,     5,
-       0,     0,     6,     7,   117,    90,   222,    13,    92,    93,
-       0,     0,    14,    15,    16,    17,     0,     0,     0,     0,
-       0,    20,     0,     0,     0,     0,     0,    21,    22,     0,
-      23,     0,    24,     0,    13,    25,    26,     0,    61,    14,
-      15,    16,    17,     0,     0,     4,     5,     0,    20,     6,
-       7,     0,     0,     0,    21,    22,     0,    23,     0,    24,
-       0,     0,    25,    26,     0,    61,     0,     0,     0,     0,
-       0,     0,     4,     5,     0,     0,     6,     7,     0,     0,
-       0,    13,     0,     0,     0,     0,    14,    15,    16,    17,
-       0,     0,     0,     0,     0,    20,     0,     0,     0,     0,
-       0,    21,    22,     0,    23,     0,    24,     0,     0,    25,
-      26,     0,    61,    14,    15,    16,    17,     0,     0,     0,
-       0,     0,    20,     0,     0,     0,     0,     0,    21,    22,
-       0,    23,     0,    24,     0,     0,    25,    66,     0,    61
+      22,     0,    23,     0,    24,     0,     0,    25,    66,     0,
+      61
 };
 
 static const yytype_int16 yycheck[] =
 {
-       1,    29,    30,    44,   239,    87,     1,     1,     1,    46,
-       1,    13,    14,    15,    29,   111,     1,     4,    17,    21,
-      22,    70,    24,    25,   219,    26,   249,   120,    52,     4,
-      27,    52,    10,    35,    29,     1,    68,   312,    21,    22,
-       6,    24,    43,    44,     1,    41,   321,     4,    71,    73,
-       1,    75,    35,     4,    75,    17,    44,    45,    59,    60,
-      68,    52,    56,    56,    61,    66,    73,    52,     1,    50,
-     119,   145,    71,     6,   148,    71,    69,   312,    72,    57,
-      58,    68,   131,   132,    75,    86,   321,    88,    89,    90,
-      75,   184,    67,     1,    95,   318,    98,    99,   100,   101,
-     102,   103,   104,   105,   106,   107,   108,   109,   190,    71,
-      44,    45,    69,     1,   115,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,   129,    81,    68,
-     145,   205,   206,   148,   183,   209,   137,   211,    91,    52,
-     141,   215,     1,    68,   339,    57,   129,   342,    56,     3,
-     145,   178,   179,   148,    52,     3,    59,    60,   159,   161,
-      66,    69,     5,     4,    39,     9,    25,    26,    56,   243,
-      69,    41,    14,    68,     3,     4,    10,   178,   179,    68,
-       4,    69,    68,    68,   258,   138,    69,     1,    75,    27,
-     205,   206,    11,    52,   209,    68,   211,    11,    21,    55,
-     215,    49,   284,    51,     7,   220,    74,   248,   257,   210,
-     205,   206,   261,   262,   209,    74,   211,    46,    47,   315,
-     215,   222,   259,    57,    58,    13,    14,   268,   243,    10,
-       7,   232,   233,   238,    15,   236,   237,   286,    52,    10,
-     277,    70,    56,   258,    15,    30,   295,   248,   243,   315,
-     203,   266,   298,   302,   233,    69,    44,    45,    25,   212,
-      41,    75,   330,   258,   292,    53,   277,   268,   221,    10,
-      41,    42,    43,   322,    15,   228,    57,    58,     7,     8,
-       9,   296,   161,    54,   289,   334,    57,    58,   293,   304,
-      -1,    -1,    -1,   294,    10,   296,   298,   250,    69,    15,
-      41,    42,    43,    -1,   306,   310,    -1,    -1,   313,    61,
-      62,    63,    -1,    54,    66,    -1,    57,    58,    -1,    -1,
-      -1,   274,    -1,   306,    53,    41,    42,    43,   281,   282,
-      59,    60,   285,    62,    75,    -1,   341,    -1,    54,   344,
-      56,    57,    58,    10,    -1,    -1,    -1,    -1,    15,    -1,
-     303,    -1,   305,    -1,   307,   308,   309,    -1,   311,     0,
-       1,    -1,     3,     4,    -1,    -1,     7,     8,    -1,    59,
-      60,    61,    62,    63,    41,    42,    66,    18,    19,   332,
-      -1,    -1,   335,    -1,    -1,   338,    -1,   340,    -1,    -1,
-      57,    58,    -1,    -1,    -1,    36,    37,    38,    39,    -1,
-      -1,    -1,    -1,    44,    45,    46,    47,    48,    -1,    -1,
-      -1,    52,    53,    59,    60,    61,    62,    63,    59,    60,
-      66,    62,    -1,    64,    -1,    -1,    67,    68,    -1,    70,
-      -1,    -1,    73,     1,    75,     3,     4,    -1,    -1,     7,
-       8,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    20,    -1,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    -1,    -1,
-      -1,    39,    40,    -1,    -1,    -1,    44,    45,    46,    47,
-      -1,    -1,    -1,    -1,    52,    53,    -1,    -1,    -1,    -1,
-      -1,    59,    60,    -1,    62,    -1,    64,    -1,    -1,    67,
-      68,    -1,    70,    -1,    -1,    73,    74,    75,     1,    -1,
-       3,     4,    -1,    -1,     7,     8,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    20,    -1,    22,
-      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    -1,    -1,    -1,    39,    40,    -1,    -1,
-      -1,    44,    45,    46,    47,    -1,    -1,    -1,    -1,    52,
-      53,    -1,    -1,    -1,    -1,    -1,    59,    60,    -1,    62,
-      -1,    64,    -1,    -1,    67,    68,    -1,    70,    -1,    -1,
-      73,    74,    75,     1,    -1,     3,     4,    -1,    -1,     7,
-       8,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    20,    -1,    22,    23,    24,    -1,    -1,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    -1,    -1,
-      -1,    39,    40,    -1,    -1,    -1,    44,    45,    46,    47,
-       1,    -1,     3,     4,    -1,    53,     7,     8,    -1,    -1,
-      11,    59,    60,    -1,    62,    -1,    64,    -1,    -1,    67,
-      68,    -1,    70,    -1,    -1,    73,    74,    75,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,
-      -1,    -1,    -1,    44,    45,    46,    47,    -1,    -1,    -1,
-      -1,    52,    53,    -1,    -1,    -1,    -1,    -1,    59,    60,
-      -1,    62,    -1,    64,    -1,    -1,    67,    68,    69,    70,
-      -1,     3,     4,    -1,    75,     7,     8,    -1,    -1,    -1,
+       1,    29,    30,    44,    86,     1,     1,    87,   250,    46,
+     120,    13,    14,    15,    29,    11,     1,     1,     4,    21,
+      22,    70,    24,    25,   220,    26,    17,     1,    27,   111,
+       4,    52,    52,    35,    29,     1,    41,     1,    21,    22,
+     313,    24,    43,    44,     1,     1,     4,     4,    71,   322,
+       6,    68,    35,    73,    75,    75,    52,    68,    59,    60,
+      56,   240,    61,    73,     1,    66,    71,    57,    52,     6,
+     119,    56,    52,    69,     1,   185,    68,   319,    50,    75,
+      71,    67,   131,   132,    69,    86,    52,    88,    89,    90,
+     145,    75,    56,   148,    95,    69,    98,    99,   100,   101,
+     102,   103,   104,   105,   106,   107,   108,   109,    72,    75,
+      68,   191,     1,    68,   115,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,   107,   108,   109,   129,    81,    56,
+     145,     3,     4,   148,   313,   184,   137,     3,    91,    17,
+     141,    66,    69,   322,   340,     1,   129,   343,    44,    45,
+     145,   206,   207,   148,     3,   210,     4,   212,    52,   160,
+     162,   216,     5,    61,    62,    63,    69,    56,    66,    25,
+      26,    44,    45,     9,    46,    47,    59,    60,   179,   180,
+      69,   179,   180,    10,    39,   138,    14,    41,    68,   244,
+      75,   206,   207,    71,    68,   210,    52,   212,    70,    68,
+      49,   216,    51,    68,   259,   285,   221,     4,   249,   258,
+     211,   206,   207,   262,   263,   210,    69,   212,    74,    10,
+     239,   216,   223,   260,    15,    10,    27,    11,   269,   244,
+      57,    58,   233,   234,   316,    68,   237,   238,   287,    21,
+      55,   278,    74,     7,   259,     7,   316,   296,   249,   244,
+      41,   204,   267,    30,   303,   234,    10,   299,    25,   331,
+     213,    15,   162,    -1,   259,   293,    57,    58,   269,   222,
+     278,   290,    57,    58,   323,   294,   229,    13,    14,     7,
+       8,     9,   297,    -1,    -1,    -1,   335,    41,    42,    43,
+     305,    -1,   311,    -1,   295,   314,   297,   299,   251,    -1,
+      54,    -1,    -1,    57,    58,   307,    -1,    -1,    44,    45,
+      -1,    59,    60,    61,    62,    63,    -1,    53,    66,    -1,
+      -1,    75,   275,   342,   307,    53,   345,    -1,    -1,   282,
+     283,    59,    60,   286,    62,    59,    60,    61,    62,    63,
+      -1,    -1,    66,    10,    -1,    -1,    -1,    -1,    15,    -1,
+      -1,   304,    -1,   306,    -1,   308,   309,   310,    -1,   312,
+       0,     1,    -1,     3,     4,    -1,    -1,     7,     8,    -1,
+      -1,    -1,    -1,    -1,    41,    42,    43,    -1,    18,    19,
+     333,    -1,    -1,   336,    10,    -1,   339,    54,   341,    15,
+      57,    58,    -1,    -1,    -1,    -1,    36,    37,    38,    39,
+      -1,    -1,    69,    -1,    44,    45,    46,    47,    48,    -1,
+      -1,    -1,    52,    53,    -1,    41,    42,    -1,    -1,    59,
+      60,    -1,    62,    -1,    64,    -1,    -1,    67,    68,    -1,
+      70,    57,    58,    73,     1,    75,     3,     4,    -1,    -1,
+       7,     8,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    20,    -1,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    -1,
+      -1,    -1,    39,    40,    -1,    -1,    -1,    44,    45,    46,
+      47,    -1,    -1,    -1,    -1,    52,    53,    -1,    -1,    -1,
+      -1,    -1,    59,    60,    -1,    62,    -1,    64,    -1,    -1,
+      67,    68,    -1,    70,    -1,    -1,    73,    74,    75,     1,
+      -1,     3,     4,    -1,    -1,     7,     8,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    20,    -1,
-      22,    23,    24,    -1,    -1,    27,    28,    29,    30,    31,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
       32,    33,    34,    35,    -1,    -1,    -1,    39,    40,    -1,
-      -1,    -1,    44,    45,    46,    47,    -1,    -1,     3,     4,
-      -1,    53,     7,     8,    -1,    -1,    -1,    59,    60,    -1,
+      -1,    -1,    44,    45,    46,    47,    -1,    -1,    -1,    -1,
+      52,    53,    -1,    -1,    -1,    -1,    -1,    59,    60,    -1,
       62,    -1,    64,    -1,    -1,    67,    68,    -1,    70,    -1,
-      -1,    73,    -1,    75,    -1,    -1,    -1,    -1,    -1,     1,
-      -1,     3,     4,    -1,    39,     7,     8,     9,    -1,    44,
-      45,    46,    47,    -1,    -1,    -1,    -1,    -1,    53,    -1,
-      -1,    -1,    -1,    -1,    59,    60,    -1,    62,    -1,    64,
-      -1,    -1,    67,    68,    -1,    70,    -1,    39,    -1,    -1,
-      75,    -1,    44,    45,    46,    47,     1,    -1,     3,     4,
-      -1,    53,     7,     8,     9,    -1,    -1,    59,    60,    -1,
-      62,    -1,    64,    -1,    -1,    67,    68,    69,    70,    -1,
-      -1,    -1,    -1,     1,    -1,     3,     4,    -1,    -1,     7,
-       8,    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    44,
-      45,    46,    47,    -1,    -1,    -1,    -1,    10,    53,    -1,
-      -1,    -1,    15,    -1,    59,    60,    -1,    62,    -1,    64,
-      -1,    39,    67,    68,    -1,    70,    44,    45,    46,    47,
-       1,    -1,     3,     4,    -1,    53,     7,     8,    41,    42,
-      43,    59,    60,    -1,    62,    -1,    64,    -1,    -1,    67,
-      68,    54,    70,    -1,    57,    58,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,     3,     4,    -1,    39,     7,
-       8,    -1,    -1,    44,    45,    46,    47,    -1,    -1,    -1,
-      -1,    -1,    53,    -1,    -1,    23,    -1,    -1,    59,    60,
-      -1,    62,    -1,    64,    32,    33,    67,    68,    -1,    70,
-      -1,    39,    -1,    -1,    -1,    -1,    44,    45,    46,    47,
-      -1,    -1,    -1,     3,     4,    53,    -1,     7,     8,    -1,
-      -1,    59,    60,    -1,    62,    -1,    64,    -1,    -1,    67,
-      68,    -1,    70,    23,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    32,    33,    -1,    -1,    -1,    -1,    -1,    39,
+      -1,    73,    74,    75,     1,    -1,     3,     4,    -1,    -1,
+       7,     8,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    20,    -1,    22,    23,    24,    -1,    -1,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    -1,
+      -1,    -1,    39,    40,    -1,    -1,    -1,    44,    45,    46,
+      47,     1,    -1,     3,     4,    -1,    53,     7,     8,    -1,
+      -1,    11,    59,    60,    -1,    62,    -1,    64,    -1,    -1,
+      67,    68,    -1,    70,    -1,    -1,    73,    74,    75,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    39,
       -1,    -1,    -1,    -1,    44,    45,    46,    47,    -1,    -1,
+      -1,    -1,    52,    53,    -1,    -1,    -1,    -1,    -1,    59,
+      60,    -1,    62,    -1,    64,    -1,    -1,    67,    68,    69,
+      70,    -1,     3,     4,    -1,    75,     7,     8,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    20,
+      -1,    22,    23,    24,    -1,    -1,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    -1,    -1,    -1,    39,    40,
+      -1,    -1,    -1,    44,    45,    46,    47,    -1,    -1,     3,
+       4,    -1,    53,     7,     8,    -1,    -1,    -1,    59,    60,
+      -1,    62,    -1,    64,    -1,    -1,    67,    68,    -1,    70,
+      -1,    -1,    73,    -1,    75,    -1,    -1,    -1,    -1,    -1,
+       1,    -1,     3,     4,    -1,    39,     7,     8,     9,    -1,
+      44,    45,    46,    47,    -1,    -1,    -1,    -1,    -1,    53,
+      -1,    -1,    -1,    -1,    -1,    59,    60,    -1,    62,    -1,
+      64,    -1,    -1,    67,    68,    -1,    70,    -1,    39,    -1,
+      -1,    75,    -1,    44,    45,    46,    47,     1,    -1,     3,
+       4,    -1,    53,     7,     8,     9,    -1,    -1,    59,    60,
+      -1,    62,    -1,    64,    -1,    -1,    67,    68,    69,    70,
+      -1,    -1,    -1,    -1,     1,    -1,     3,     4,    -1,    -1,
+       7,     8,    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,
+      44,    45,    46,    47,    -1,    -1,    -1,    -1,    10,    53,
+      -1,    -1,    -1,    15,    -1,    59,    60,    -1,    62,    -1,
+      64,    -1,    39,    67,    68,    -1,    70,    44,    45,    46,
+      47,     1,    -1,     3,     4,    -1,    53,     7,     8,    41,
+      42,    43,    59,    60,    -1,    62,    -1,    64,    -1,    -1,
+      67,    68,    54,    70,    56,    57,    58,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,     3,     4,    -1,    39,
+       7,     8,    -1,    -1,    44,    45,    46,    47,    -1,    -1,
+      -1,    -1,    -1,    53,    -1,    -1,    23,    -1,    -1,    59,
+      60,    -1,    62,    -1,    64,    32,    33,    67,    68,    -1,
+      70,    -1,    39,    -1,    -1,    -1,    -1,    44,    45,    46,
+      47,    -1,    -1,    -1,     3,     4,    53,    -1,     7,     8,
+      -1,    -1,    59,    60,    -1,    62,    -1,    64,    -1,    -1,
+      67,    68,    -1,    70,    23,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    32,    33,    -1,    -1,    -1,    -1,    -1,
+      39,    -1,    -1,    -1,    -1,    44,    45,    46,    47,    -1,
+      -1,    -1,    -1,    -1,    53,    -1,    -1,    -1,    -1,    -1,
+      59,    60,    10,    62,    -1,    64,    -1,    15,    67,    68,
+      -1,    70,     3,     4,    -1,    -1,     7,     8,    -1,    -1,
+      -1,    12,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    41,    42,    43,    -1,    -1,    -1,     3,
+       4,    -1,    -1,     7,     8,     9,    54,    55,    39,    57,
+      58,    -1,    -1,    44,    45,    46,    47,    -1,    -1,    -1,
+      -1,    10,    53,    -1,    -1,    -1,    15,    -1,    59,    60,
+      -1,    62,    -1,    64,    -1,    39,    67,    68,    -1,    70,
+      44,    45,    46,    47,    -1,    -1,     3,     4,    -1,    53,
+       7,     8,    41,    42,    43,    59,    60,    -1,    62,    -1,
+      64,    -1,    -1,    67,    68,    54,    70,    -1,    57,    58,
+      -1,    -1,    -1,     3,     4,    -1,    -1,     7,     8,    -1,
+      -1,    -1,    39,    -1,    -1,    -1,    -1,    44,    45,    46,
+      47,    -1,    -1,    -1,    -1,    -1,    53,    -1,    -1,    -1,
+      -1,    -1,    59,    60,    -1,    62,    -1,    64,    -1,    -1,
+      67,    68,    -1,    70,    44,    45,    46,    47,    -1,    -1,
       -1,    -1,    -1,    53,    -1,    -1,    -1,    -1,    -1,    59,
-      60,    10,    62,    -1,    64,    -1,    15,    67,    68,    -1,
-      70,     3,     4,    -1,    -1,     7,     8,    -1,    -1,    -1,
-      12,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    41,    42,    43,    -1,    -1,    -1,     3,     4,
-      -1,    -1,     7,     8,     9,    54,    55,    39,    57,    58,
-      -1,    -1,    44,    45,    46,    47,    -1,    -1,    -1,    -1,
-      -1,    53,    -1,    -1,    -1,    -1,    -1,    59,    60,    -1,
-      62,    -1,    64,    -1,    39,    67,    68,    -1,    70,    44,
-      45,    46,    47,    -1,    -1,     3,     4,    -1,    53,     7,
-       8,    -1,    -1,    -1,    59,    60,    -1,    62,    -1,    64,
-      -1,    -1,    67,    68,    -1,    70,    -1,    -1,    -1,    -1,
-      -1,    -1,     3,     4,    -1,    -1,     7,     8,    -1,    -1,
-      -1,    39,    -1,    -1,    -1,    -1,    44,    45,    46,    47,
-      -1,    -1,    -1,    -1,    -1,    53,    -1,    -1,    -1,    -1,
-      -1,    59,    60,    -1,    62,    -1,    64,    -1,    -1,    67,
-      68,    -1,    70,    44,    45,    46,    47,    -1,    -1,    -1,
-      -1,    -1,    53,    -1,    -1,    -1,    -1,    -1,    59,    60,
-      -1,    62,    -1,    64,    -1,    -1,    67,    68,    -1,    70
+      60,    -1,    62,    -1,    64,    -1,    -1,    67,    68,    -1,
+      70
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1126,26 +1128,26 @@ static const yytype_uint8 yystos[] =
      116,   117,   118,   114,   118,    17,   132,    50,    68,    57,
      109,   115,   115,   118,    44,    45,   137,     1,    56,    69,
      140,   144,   140,     1,     6,    79,     1,     6,    80,   107,
-     108,    90,   108,     5,   118,   135,   118,   118,   118,   108,
-     118,    39,   123,   123,   123,   123,   123,   123,   123,   123,
-     123,   123,   123,   123,    88,    14,   118,   140,     1,   144,
-      72,     1,     4,   110,   111,   123,   140,   140,   118,   108,
-      41,     1,   118,     1,    91,     1,    91,     1,    20,    22,
-      23,    24,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    40,    74,    92,    93,    95,   102,   106,   118,   138,
-     139,   142,    55,   118,   128,   117,     1,   117,   140,     1,
-     144,   135,    68,    94,     4,    68,    68,    68,   108,    68,
-      91,    91,    91,   112,   118,    91,   108,    91,    96,    90,
-     141,   142,   108,   118,   108,     1,     4,   118,   112,    97,
-       4,   118,   118,    92,     4,    95,    98,    91,    68,   103,
-     113,   114,   139,   108,   140,    91,   129,   130,   131,   132,
-      69,   140,   140,    27,    41,   142,   114,    11,   104,   108,
-      17,   131,   108,   108,    68,   135,   108,   140,   105,    92,
-     138,    92,   118,   140,   118,   142,   122,    21,    99,   140,
-     108,   142,   108,   108,     1,    25,    26,   100,   108,   108,
-      92,   108,    98,    92,     7,     8,    59,    60,    86,    88,
-     101,    55,   143,   139,    98,   140,     7,     7,   143,   108,
-     140,   108,   108,    90,   108,    92,    90,    92
+     108,    90,   108,     5,    88,   118,   135,   118,   118,   118,
+     108,   118,    39,   123,   123,   123,   123,   123,   123,   123,
+     123,   123,   123,   123,   123,    88,    14,   118,   140,     1,
+     144,    72,     1,     4,   110,   111,   123,   140,   140,   118,
+     108,    41,     1,   118,     1,    91,     1,    91,     1,    20,
+      22,    23,    24,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    40,    74,    92,    93,    95,   102,   106,   118,
+     138,   139,   142,    55,   118,   128,   117,     1,   117,   140,
+       1,   144,   135,    68,    94,     4,    68,    68,    68,   108,
+      68,    91,    91,    91,   112,   118,    91,   108,    91,    96,
+      90,   141,   142,   108,   118,   108,     1,     4,   118,   112,
+      97,     4,   118,   118,    92,     4,    95,    98,    91,    68,
+     103,   113,   114,   139,   108,   140,    91,   129,   130,   131,
+     132,    69,   140,   140,    27,    41,   142,   114,    11,   104,
+     108,    17,   131,   108,   108,    68,   135,   108,   140,   105,
+      92,   138,    92,   118,   140,   118,   142,   122,    21,    99,
+     140,   108,   142,   108,   108,     1,    25,    26,   100,   108,
+     108,    92,   108,    98,    92,     7,     8,    59,    60,    86,
+      88,   101,    55,   143,   139,    98,   140,     7,     7,   143,
+     108,   140,   108,   108,    90,   108,    92,    90,    92
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
@@ -1164,14 +1166,14 @@ static const yytype_uint8 yyr1[] =
      111,   111,   112,   112,   113,   113,   114,   114,   114,   114,
      114,   114,   115,   115,   116,   116,   116,   116,   116,   116,
      117,   117,   118,   118,   118,   118,   118,   118,   118,   118,
-     118,   119,   119,   119,   120,   120,   121,   121,   122,   122,
-     122,   123,   123,   123,   123,   123,   123,   123,   123,   123,
-     123,   123,   124,   124,   124,   124,   124,   124,   124,   125,
+     118,   118,   119,   119,   119,   120,   120,   121,   121,   122,
+     122,   122,   123,   123,   123,   123,   123,   123,   123,   123,
+     123,   123,   123,   124,   124,   124,   124,   124,   124,   124,
      125,   125,   125,   125,   125,   125,   125,   125,   125,   125,
-     125,   125,   125,   126,   126,   127,   128,   128,   129,   129,
-     130,   130,   131,   132,   133,   133,   134,   135,   135,   136,
-     136,   137,   137,   137,   138,   139,   140,   141,   141,   142,
-     143,   144
+     125,   125,   125,   125,   126,   126,   127,   128,   128,   129,
+     129,   130,   130,   131,   132,   133,   133,   134,   135,   135,
+     136,   136,   137,   137,   137,   138,   139,   140,   141,   141,
+     142,   143,   144
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -1189,15 +1191,15 @@ static const yytype_uint8 yyr2[] =
        2,     0,     1,     0,     2,     0,     1,     1,     3,     1,
        2,     3,     0,     1,     0,     1,     1,     3,     1,     2,
        3,     3,     0,     1,     1,     3,     1,     2,     3,     3,
-       1,     1,     3,     3,     3,     3,     3,     3,     3,     5,
-       1,     1,     1,     2,     1,     1,     1,     1,     1,     1,
-       2,     1,     3,     3,     3,     3,     3,     3,     3,     2,
-       2,     5,     4,     3,     3,     3,     3,     3,     3,     1,
-       2,     3,     4,     4,     1,     1,     1,     2,     2,     1,
-       1,     2,     2,     1,     2,     4,     0,     1,     0,     2,
-       1,     2,     1,     3,     1,     2,     2,     1,     2,     1,
-       3,     1,     1,     0,     2,     2,     1,     0,     1,     1,
-       1,     2
+       1,     1,     3,     3,     3,     3,     3,     3,     3,     3,
+       5,     1,     1,     1,     2,     1,     1,     1,     1,     1,
+       1,     2,     1,     3,     3,     3,     3,     3,     3,     3,
+       2,     2,     5,     4,     3,     3,     3,     3,     3,     3,
+       1,     2,     3,     4,     4,     1,     1,     1,     2,     2,
+       1,     1,     2,     2,     1,     2,     4,     0,     1,     0,
+       2,     1,     2,     1,     3,     1,     2,     2,     1,     2,
+       1,     3,     1,     1,     0,     2,     2,     1,     0,     1,
+       1,     1,     2
 };
 
 
@@ -1879,7 +1881,7 @@ yyreduce:
                rule = 0;
                yyerrok;
          }
-#line 1883 "awkgram.c" /* yacc.c:1646  */
+#line 1885 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 5:
@@ -1887,7 +1889,7 @@ yyreduce:
     {
                next_sourcefile();
          }
-#line 1891 "awkgram.c" /* yacc.c:1646  */
+#line 1893 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 6:
@@ -1900,7 +1902,7 @@ yyreduce:
                 */
                /* yyerrok; */
          }
-#line 1904 "awkgram.c" /* yacc.c:1646  */
+#line 1906 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 7:
@@ -1909,7 +1911,7 @@ yyreduce:
                (void) append_rule((yyvsp[-1]), (yyvsp[0]));
                first_rule = false;
          }
-#line 1913 "awkgram.c" /* yacc.c:1646  */
+#line 1915 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 8:
@@ -1924,7 +1926,7 @@ yyreduce:
                } else          /* pattern rule with non-empty pattern */
                        (void) append_rule((yyvsp[-1]), NULL);
          }
-#line 1928 "awkgram.c" /* yacc.c:1646  */
+#line 1930 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 9:
@@ -1934,7 +1936,7 @@ yyreduce:
                (void) mk_function((yyvsp[-1]), (yyvsp[0]));
                yyerrok;
          }
-#line 1938 "awkgram.c" /* yacc.c:1646  */
+#line 1940 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 10:
@@ -1944,7 +1946,7 @@ yyreduce:
                at_seen = false;
                yyerrok;
          }
-#line 1948 "awkgram.c" /* yacc.c:1646  */
+#line 1950 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 11:
@@ -1954,7 +1956,7 @@ yyreduce:
                at_seen = false;
                yyerrok;
          }
-#line 1958 "awkgram.c" /* yacc.c:1646  */
+#line 1960 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 12:
@@ -1966,19 +1968,19 @@ yyreduce:
                bcfree((yyvsp[0]));
                (yyval) = NULL;
          }
-#line 1970 "awkgram.c" /* yacc.c:1646  */
+#line 1972 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 13:
 #line 275 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 1976 "awkgram.c" /* yacc.c:1646  */
+#line 1978 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 14:
 #line 277 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 1982 "awkgram.c" /* yacc.c:1646  */
+#line 1984 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 15:
@@ -1990,19 +1992,19 @@ yyreduce:
                bcfree((yyvsp[0]));
                (yyval) = NULL;
          }
-#line 1994 "awkgram.c" /* yacc.c:1646  */
+#line 1996 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 16:
 #line 290 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 2000 "awkgram.c" /* yacc.c:1646  */
+#line 2002 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 17:
 #line 292 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 2006 "awkgram.c" /* yacc.c:1646  */
+#line 2008 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 18:
@@ -2015,7 +2017,7 @@ yyreduce:
                } else
                        (yyval) = NULL;
          }
-#line 2019 "awkgram.c" /* yacc.c:1646  */
+#line 2021 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 19:
@@ -2028,7 +2030,7 @@ yyreduce:
                } else
                        (yyval) = (yyvsp[0]);
          }
-#line 2032 "awkgram.c" /* yacc.c:1646  */
+#line 2034 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 20:
@@ -2062,7 +2064,7 @@ yyreduce:
                        (yyval) = list_append(list_merge((yyvsp[-3]), 
(yyvsp[0])), tp);
                rule = Rule;
          }
-#line 2066 "awkgram.c" /* yacc.c:1646  */
+#line 2068 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 21:
@@ -2080,7 +2082,7 @@ yyreduce:
                check_comment();
                (yyval) = (yyvsp[0]);
          }
-#line 2084 "awkgram.c" /* yacc.c:1646  */
+#line 2086 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 22:
@@ -2098,7 +2100,7 @@ yyreduce:
                check_comment();
                (yyval) = (yyvsp[0]);
          }
-#line 2102 "awkgram.c" /* yacc.c:1646  */
+#line 2104 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 23:
@@ -2110,7 +2112,7 @@ yyreduce:
                check_comment();
                (yyval) = (yyvsp[0]);
          }
-#line 2114 "awkgram.c" /* yacc.c:1646  */
+#line 2116 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 24:
@@ -2122,7 +2124,7 @@ yyreduce:
                check_comment();
                (yyval) = (yyvsp[0]);
          }
-#line 2126 "awkgram.c" /* yacc.c:1646  */
+#line 2128 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 25:
@@ -2135,19 +2137,19 @@ yyreduce:
                        ip = (yyvsp[-3]);
                (yyval) = ip;
          }
-#line 2139 "awkgram.c" /* yacc.c:1646  */
+#line 2141 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 26:
 #line 405 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 2145 "awkgram.c" /* yacc.c:1646  */
+#line 2147 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 27:
 #line 407 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 2151 "awkgram.c" /* yacc.c:1646  */
+#line 2153 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 28:
@@ -2157,7 +2159,7 @@ yyreduce:
                                        tokstart);
                YYABORT;
          }
-#line 2161 "awkgram.c" /* yacc.c:1646  */
+#line 2163 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 29:
@@ -2166,7 +2168,7 @@ yyreduce:
                (yyval) = (yyvsp[0]);
                at_seen = false;
          }
-#line 2170 "awkgram.c" /* yacc.c:1646  */
+#line 2172 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 32:
@@ -2197,13 +2199,13 @@ yyreduce:
                /* $4 already free'd in install_function */
                (yyval) = (yyvsp[-5]);
          }
-#line 2201 "awkgram.c" /* yacc.c:1646  */
+#line 2203 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 33:
 #line 462 "awkgram.y" /* yacc.c:1646  */
     { want_regexp = true; }
-#line 2207 "awkgram.c" /* yacc.c:1646  */
+#line 2209 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 34:
@@ -2236,7 +2238,7 @@ yyreduce:
                  (yyval)->opcode = Op_match_rec;
                  (yyval)->memory = n;
                }
-#line 2240 "awkgram.c" /* yacc.c:1646  */
+#line 2242 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 35:
@@ -2265,13 +2267,13 @@ yyreduce:
 #endif
                  (yyval)->memory = n;
                }
-#line 2269 "awkgram.c" /* yacc.c:1646  */
+#line 2271 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 36:
 #line 523 "awkgram.y" /* yacc.c:1646  */
     { bcfree((yyvsp[0])); }
-#line 2275 "awkgram.c" /* yacc.c:1646  */
+#line 2277 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 38:
@@ -2282,7 +2284,7 @@ yyreduce:
                        comment = NULL;
                } else (yyval) = NULL;
          }
-#line 2286 "awkgram.c" /* yacc.c:1646  */
+#line 2288 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 39:
@@ -2314,25 +2316,25 @@ yyreduce:
                }
                yyerrok;
          }
-#line 2318 "awkgram.c" /* yacc.c:1646  */
+#line 2320 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 40:
 #line 564 "awkgram.y" /* yacc.c:1646  */
     {  (yyval) = NULL; }
-#line 2324 "awkgram.c" /* yacc.c:1646  */
+#line 2326 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 43:
 #line 574 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 2330 "awkgram.c" /* yacc.c:1646  */
+#line 2332 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 44:
 #line 576 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[-1]); }
-#line 2336 "awkgram.c" /* yacc.c:1646  */
+#line 2338 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 45:
@@ -2343,7 +2345,7 @@ yyreduce:
                else
                        (yyval) = (yyvsp[0]);
          }
-#line 2347 "awkgram.c" /* yacc.c:1646  */
+#line 2349 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 46:
@@ -2437,7 +2439,7 @@ yyreduce:
                break_allowed--;                        
                fix_break_continue(ip, tbreak, NULL);
          }
-#line 2441 "awkgram.c" /* yacc.c:1646  */
+#line 2443 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 47:
@@ -2483,7 +2485,7 @@ yyreduce:
                continue_allowed--;
                fix_break_continue(ip, tbreak, tcont);
          }
-#line 2487 "awkgram.c" /* yacc.c:1646  */
+#line 2489 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 48:
@@ -2529,7 +2531,7 @@ yyreduce:
                } /* else
                        $1 and $4 are NULLs */
          }
-#line 2533 "awkgram.c" /* yacc.c:1646  */
+#line 2535 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 49:
@@ -2646,7 +2648,7 @@ regular_loop:
                break_allowed--;
                continue_allowed--;
          }
-#line 2650 "awkgram.c" /* yacc.c:1646  */
+#line 2652 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 50:
@@ -2657,7 +2659,7 @@ regular_loop:
                break_allowed--;
                continue_allowed--;
          }
-#line 2661 "awkgram.c" /* yacc.c:1646  */
+#line 2663 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 51:
@@ -2668,7 +2670,7 @@ regular_loop:
                break_allowed--;
                continue_allowed--;
          }
-#line 2672 "awkgram.c" /* yacc.c:1646  */
+#line 2674 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 52:
@@ -2679,7 +2681,7 @@ regular_loop:
                else
                        (yyval) = (yyvsp[0]);
          }
-#line 2683 "awkgram.c" /* yacc.c:1646  */
+#line 2685 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 53:
@@ -2692,7 +2694,7 @@ regular_loop:
                (yyval) = list_create((yyvsp[-1]));
 
          }
-#line 2696 "awkgram.c" /* yacc.c:1646  */
+#line 2698 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 54:
@@ -2705,7 +2707,7 @@ regular_loop:
                (yyval) = list_create((yyvsp[-1]));
 
          }
-#line 2709 "awkgram.c" /* yacc.c:1646  */
+#line 2711 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 55:
@@ -2718,7 +2720,7 @@ regular_loop:
                (yyvsp[-1])->target_jmp = ip_rec;
                (yyval) = list_create((yyvsp[-1]));
          }
-#line 2722 "awkgram.c" /* yacc.c:1646  */
+#line 2724 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 56:
@@ -2733,7 +2735,7 @@ regular_loop:
                (yyvsp[-1])->target_endfile = ip_endfile;
                (yyval) = list_create((yyvsp[-1]));
          }
-#line 2737 "awkgram.c" /* yacc.c:1646  */
+#line 2739 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 57:
@@ -2752,7 +2754,7 @@ regular_loop:
                } else
                        (yyval) = list_append((yyvsp[-1]), (yyvsp[-2]));
          }
-#line 2756 "awkgram.c" /* yacc.c:1646  */
+#line 2758 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 58:
@@ -2761,7 +2763,7 @@ regular_loop:
                if (! in_function)
                        yyerror(_("`return' used outside function context"));
          }
-#line 2765 "awkgram.c" /* yacc.c:1646  */
+#line 2767 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 59:
@@ -2786,13 +2788,13 @@ regular_loop:
                        (yyval) = list_append((yyvsp[-1]), (yyvsp[-3]));
                }
          }
-#line 2790 "awkgram.c" /* yacc.c:1646  */
+#line 2792 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 61:
 #line 984 "awkgram.y" /* yacc.c:1646  */
     { in_print = true; in_parens = 0; }
-#line 2796 "awkgram.c" /* yacc.c:1646  */
+#line 2798 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 62:
@@ -2893,13 +2895,13 @@ regular_print:
                        }
                }
          }
-#line 2897 "awkgram.c" /* yacc.c:1646  */
+#line 2899 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 63:
 #line 1082 "awkgram.y" /* yacc.c:1646  */
     { sub_counter = 0; }
-#line 2903 "awkgram.c" /* yacc.c:1646  */
+#line 2905 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 64:
@@ -2936,7 +2938,7 @@ regular_print:
                        (yyval) = list_append(list_append((yyvsp[0]), 
(yyvsp[-2])), (yyvsp[-3]));
                }
          }
-#line 2940 "awkgram.c" /* yacc.c:1646  */
+#line 2942 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 65:
@@ -2966,31 +2968,31 @@ regular_print:
                                fatal(_("`delete' is not allowed with 
FUNCTAB"));
                }
          }
-#line 2970 "awkgram.c" /* yacc.c:1646  */
+#line 2972 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 66:
 #line 1146 "awkgram.y" /* yacc.c:1646  */
     {  (yyval) = optimize_assignment((yyvsp[0])); }
-#line 2976 "awkgram.c" /* yacc.c:1646  */
+#line 2978 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 67:
 #line 1151 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 2982 "awkgram.c" /* yacc.c:1646  */
+#line 2984 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 68:
 #line 1153 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 2988 "awkgram.c" /* yacc.c:1646  */
+#line 2990 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 69:
 #line 1158 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 2994 "awkgram.c" /* yacc.c:1646  */
+#line 2996 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 70:
@@ -3001,13 +3003,13 @@ regular_print:
                else
                        (yyval) = list_prepend((yyvsp[-1]), (yyvsp[0]));
          }
-#line 3005 "awkgram.c" /* yacc.c:1646  */
+#line 3007 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 71:
 #line 1167 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 3011 "awkgram.c" /* yacc.c:1646  */
+#line 3013 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 72:
@@ -3023,7 +3025,7 @@ regular_print:
                bcfree((yyvsp[-2]));
                (yyval) = (yyvsp[-4]);
          }
-#line 3027 "awkgram.c" /* yacc.c:1646  */
+#line 3029 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 73:
@@ -3038,13 +3040,13 @@ regular_print:
                (yyvsp[-3])->case_stmt = casestmt;
                (yyval) = (yyvsp[-3]);
          }
-#line 3042 "awkgram.c" /* yacc.c:1646  */
+#line 3044 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 74:
 #line 1198 "awkgram.y" /* yacc.c:1646  */
     {  (yyval) = (yyvsp[0]); }
-#line 3048 "awkgram.c" /* yacc.c:1646  */
+#line 3050 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 75:
@@ -3056,7 +3058,7 @@ regular_print:
                bcfree((yyvsp[-1]));
                (yyval) = (yyvsp[0]);
          }
-#line 3060 "awkgram.c" /* yacc.c:1646  */
+#line 3062 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 76:
@@ -3065,13 +3067,13 @@ regular_print:
                bcfree((yyvsp[-1]));
                (yyval) = (yyvsp[0]);
          }
-#line 3069 "awkgram.c" /* yacc.c:1646  */
+#line 3071 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 77:
 #line 1213 "awkgram.y" /* yacc.c:1646  */
     {  (yyval) = (yyvsp[0]); }
-#line 3075 "awkgram.c" /* yacc.c:1646  */
+#line 3077 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 78:
@@ -3083,7 +3085,7 @@ regular_print:
                        (yyvsp[0])->opcode = Op_push;
                (yyval) = (yyvsp[0]);
          }
-#line 3087 "awkgram.c" /* yacc.c:1646  */
+#line 3089 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 79:
@@ -3093,19 +3095,19 @@ regular_print:
                (yyvsp[0])->opcode = Op_push_re;
                (yyval) = (yyvsp[0]);
          }
-#line 3097 "awkgram.c" /* yacc.c:1646  */
+#line 3099 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 80:
 #line 1232 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3103 "awkgram.c" /* yacc.c:1646  */
+#line 3105 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 81:
 #line 1234 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3109 "awkgram.c" /* yacc.c:1646  */
+#line 3111 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 83:
@@ -3113,7 +3115,7 @@ regular_print:
     {
                (yyval) = (yyvsp[-1]);
          }
-#line 3117 "awkgram.c" /* yacc.c:1646  */
+#line 3119 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 84:
@@ -3123,13 +3125,13 @@ regular_print:
                in_parens = 0;
                (yyval) = NULL;
          }
-#line 3127 "awkgram.c" /* yacc.c:1646  */
+#line 3129 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 85:
 #line 1256 "awkgram.y" /* yacc.c:1646  */
     { in_print = false; in_parens = 0; }
-#line 3133 "awkgram.c" /* yacc.c:1646  */
+#line 3135 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 86:
@@ -3141,7 +3143,7 @@ regular_print:
                        yyerror(_("multistage two-way pipelines don't work"));
                (yyval) = list_prepend((yyvsp[0]), (yyvsp[-2]));
          }
-#line 3145 "awkgram.c" /* yacc.c:1646  */
+#line 3147 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 87:
@@ -3149,7 +3151,7 @@ regular_print:
     {
                (yyval) = mk_condition((yyvsp[-3]), (yyvsp[-5]), (yyvsp[0]), 
NULL, NULL);
          }
-#line 3153 "awkgram.c" /* yacc.c:1646  */
+#line 3155 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 88:
@@ -3157,13 +3159,13 @@ regular_print:
     {
                (yyval) = mk_condition((yyvsp[-6]), (yyvsp[-8]), (yyvsp[-3]), 
(yyvsp[-2]), (yyvsp[0]));
          }
-#line 3161 "awkgram.c" /* yacc.c:1646  */
+#line 3163 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 93:
 #line 1290 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 3167 "awkgram.c" /* yacc.c:1646  */
+#line 3169 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 94:
@@ -3172,19 +3174,19 @@ regular_print:
                bcfree((yyvsp[-1]));
                (yyval) = (yyvsp[0]);
          }
-#line 3176 "awkgram.c" /* yacc.c:1646  */
+#line 3178 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 95:
 #line 1300 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 3182 "awkgram.c" /* yacc.c:1646  */
+#line 3184 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 96:
 #line 1302 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3188 "awkgram.c" /* yacc.c:1646  */
+#line 3190 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 97:
@@ -3193,7 +3195,7 @@ regular_print:
                (yyvsp[0])->param_count = 0;
                (yyval) = list_create((yyvsp[0]));
          }
-#line 3197 "awkgram.c" /* yacc.c:1646  */
+#line 3199 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 98:
@@ -3203,55 +3205,55 @@ regular_print:
                (yyval) = list_append((yyvsp[-2]), (yyvsp[0]));
                yyerrok;
          }
-#line 3207 "awkgram.c" /* yacc.c:1646  */
+#line 3209 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 99:
 #line 1318 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 3213 "awkgram.c" /* yacc.c:1646  */
+#line 3215 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 100:
 #line 1320 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[-1]); }
-#line 3219 "awkgram.c" /* yacc.c:1646  */
+#line 3221 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 101:
 #line 1322 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[-2]); }
-#line 3225 "awkgram.c" /* yacc.c:1646  */
+#line 3227 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 102:
 #line 1328 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 3231 "awkgram.c" /* yacc.c:1646  */
+#line 3233 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 103:
 #line 1330 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3237 "awkgram.c" /* yacc.c:1646  */
+#line 3239 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 104:
 #line 1335 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 3243 "awkgram.c" /* yacc.c:1646  */
+#line 3245 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 105:
 #line 1337 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3249 "awkgram.c" /* yacc.c:1646  */
+#line 3251 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 106:
 #line 1342 "awkgram.y" /* yacc.c:1646  */
     {  (yyval) = mk_expression_list(NULL, (yyvsp[0])); }
-#line 3255 "awkgram.c" /* yacc.c:1646  */
+#line 3257 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 107:
@@ -3260,13 +3262,13 @@ regular_print:
                (yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
                yyerrok;
          }
-#line 3264 "awkgram.c" /* yacc.c:1646  */
+#line 3266 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 108:
 #line 1349 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 3270 "awkgram.c" /* yacc.c:1646  */
+#line 3272 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 109:
@@ -3278,7 +3280,7 @@ regular_print:
                 */
                (yyval) = (yyvsp[-1]);
          }
-#line 3282 "awkgram.c" /* yacc.c:1646  */
+#line 3284 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 110:
@@ -3287,7 +3289,7 @@ regular_print:
                /* Ditto */
                (yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
          }
-#line 3291 "awkgram.c" /* yacc.c:1646  */
+#line 3293 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 111:
@@ -3296,25 +3298,25 @@ regular_print:
                /* Ditto */
                (yyval) = (yyvsp[-2]);
          }
-#line 3300 "awkgram.c" /* yacc.c:1646  */
+#line 3302 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 112:
 #line 1372 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 3306 "awkgram.c" /* yacc.c:1646  */
+#line 3308 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 113:
 #line 1374 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3312 "awkgram.c" /* yacc.c:1646  */
+#line 3314 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 114:
 #line 1379 "awkgram.y" /* yacc.c:1646  */
     {  (yyval) = mk_expression_list(NULL, (yyvsp[0])); }
-#line 3318 "awkgram.c" /* yacc.c:1646  */
+#line 3320 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 115:
@@ -3323,13 +3325,13 @@ regular_print:
                (yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
                yyerrok;
          }
-#line 3327 "awkgram.c" /* yacc.c:1646  */
+#line 3329 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 116:
 #line 1386 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 3333 "awkgram.c" /* yacc.c:1646  */
+#line 3335 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 117:
@@ -3341,7 +3343,7 @@ regular_print:
                 */
                (yyval) = (yyvsp[-1]);
          }
-#line 3345 "awkgram.c" /* yacc.c:1646  */
+#line 3347 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 118:
@@ -3350,7 +3352,7 @@ regular_print:
                /* Ditto */
                (yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
          }
-#line 3354 "awkgram.c" /* yacc.c:1646  */
+#line 3356 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 119:
@@ -3359,19 +3361,19 @@ regular_print:
                /* Ditto */
                (yyval) = (yyvsp[-2]);
          }
-#line 3363 "awkgram.c" /* yacc.c:1646  */
+#line 3365 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 120:
 #line 1408 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3369 "awkgram.c" /* yacc.c:1646  */
+#line 3371 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 121:
 #line 1409 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = list_create((yyvsp[0])); }
-#line 3375 "awkgram.c" /* yacc.c:1646  */
+#line 3377 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 122:
@@ -3382,38 +3384,57 @@ regular_print:
                                _("regular expression on right of assignment"));
                (yyval) = mk_assignment((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1]));
          }
-#line 3386 "awkgram.c" /* yacc.c:1646  */
+#line 3388 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 123:
 #line 1422 "awkgram.y" /* yacc.c:1646  */
     {
-               stopme(0);
                (yyval) = mk_assignment((yyvsp[-2]), list_create((yyvsp[0])), 
(yyvsp[-1]));
          }
-#line 3395 "awkgram.c" /* yacc.c:1646  */
+#line 3396 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 124:
-#line 1427 "awkgram.y" /* yacc.c:1646  */
+#line 1426 "awkgram.y" /* yacc.c:1646  */
     {  (yyval) = mk_boolean((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3401 "awkgram.c" /* yacc.c:1646  */
+#line 3402 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 125:
-#line 1429 "awkgram.y" /* yacc.c:1646  */
+#line 1428 "awkgram.y" /* yacc.c:1646  */
     {  (yyval) = mk_boolean((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3407 "awkgram.c" /* yacc.c:1646  */
+#line 3408 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 126:
-#line 1431 "awkgram.y" /* yacc.c:1646  */
+#line 1430 "awkgram.y" /* yacc.c:1646  */
+    {
+               if ((yyvsp[-2])->lasti->opcode == Op_match_rec)
+                       warning_ln((yyvsp[-1])->source_line,
+                               _("regular expression on left of `~' or `!~' 
operator"));
+
+               assert((yyvsp[0])->lasti == (yyvsp[0])->nexti
+                  && (yyvsp[0])->nexti->opcode == Op_push_re
+                  && (yyvsp[0])->nexti->memory->type == Node_hardregex);
+               /* RHS is @/.../ */
+               (yyvsp[-1])->memory = (yyvsp[0])->nexti->memory;
+               bcfree((yyvsp[0])->nexti);      /* Op_push_re */
+               bcfree((yyvsp[0]));                     /* Op_list */
+               (yyval) = list_append((yyvsp[-2]), (yyvsp[-1]));
+         }
+#line 3427 "awkgram.c" /* yacc.c:1646  */
+    break;
+
+  case 127:
+#line 1445 "awkgram.y" /* yacc.c:1646  */
     {
                if ((yyvsp[-2])->lasti->opcode == Op_match_rec)
                        warning_ln((yyvsp[-1])->source_line,
                                _("regular expression on left of `~' or `!~' 
operator"));
 
                if ((yyvsp[0])->lasti == (yyvsp[0])->nexti && 
(yyvsp[0])->nexti->opcode == Op_match_rec) {
+                       /* RHS is /.../ */
                        (yyvsp[-1])->memory = (yyvsp[0])->nexti->memory;
                        bcfree((yyvsp[0])->nexti);      /* Op_match_rec */
                        bcfree((yyvsp[0]));                     /* Op_list */
@@ -3423,11 +3444,11 @@ regular_print:
                        (yyval) = list_append(list_merge((yyvsp[-2]), 
(yyvsp[0])), (yyvsp[-1]));
                }
          }
-#line 3427 "awkgram.c" /* yacc.c:1646  */
+#line 3448 "awkgram.c" /* yacc.c:1646  */
     break;
 
-  case 127:
-#line 1447 "awkgram.y" /* yacc.c:1646  */
+  case 128:
+#line 1462 "awkgram.y" /* yacc.c:1646  */
     {
                if (do_lint_old)
                        warning_ln((yyvsp[-1])->source_line,
@@ -3437,91 +3458,91 @@ regular_print:
                (yyvsp[-1])->expr_count = 1;
                (yyval) = list_append(list_merge((yyvsp[-2]), (yyvsp[0])), 
(yyvsp[-1]));
          }
-#line 3441 "awkgram.c" /* yacc.c:1646  */
+#line 3462 "awkgram.c" /* yacc.c:1646  */
     break;
 
-  case 128:
-#line 1457 "awkgram.y" /* yacc.c:1646  */
+  case 129:
+#line 1472 "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 3452 "awkgram.c" /* yacc.c:1646  */
-    break;
-
-  case 129:
-#line 1464 "awkgram.y" /* yacc.c:1646  */
-    { (yyval) = mk_condition((yyvsp[-4]), (yyvsp[-3]), (yyvsp[-2]), 
(yyvsp[-1]), (yyvsp[0])); }
-#line 3458 "awkgram.c" /* yacc.c:1646  */
+#line 3473 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 130:
-#line 1466 "awkgram.y" /* yacc.c:1646  */
-    { (yyval) = (yyvsp[0]); }
-#line 3464 "awkgram.c" /* yacc.c:1646  */
+#line 1479 "awkgram.y" /* yacc.c:1646  */
+    { (yyval) = mk_condition((yyvsp[-4]), (yyvsp[-3]), (yyvsp[-2]), 
(yyvsp[-1]), (yyvsp[0])); }
+#line 3479 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 131:
-#line 1471 "awkgram.y" /* yacc.c:1646  */
+#line 1481 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3470 "awkgram.c" /* yacc.c:1646  */
+#line 3485 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 132:
-#line 1473 "awkgram.y" /* yacc.c:1646  */
+#line 1486 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3476 "awkgram.c" /* yacc.c:1646  */
+#line 3491 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 133:
-#line 1475 "awkgram.y" /* yacc.c:1646  */
+#line 1488 "awkgram.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 3497 "awkgram.c" /* yacc.c:1646  */
+    break;
+
+  case 134:
+#line 1490 "awkgram.y" /* yacc.c:1646  */
     {  
                (yyvsp[0])->opcode = Op_assign_quotient;
                (yyval) = (yyvsp[0]);
          }
-#line 3485 "awkgram.c" /* yacc.c:1646  */
-    break;
-
-  case 134:
-#line 1483 "awkgram.y" /* yacc.c:1646  */
-    { (yyval) = (yyvsp[0]); }
-#line 3491 "awkgram.c" /* yacc.c:1646  */
+#line 3506 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 135:
-#line 1485 "awkgram.y" /* yacc.c:1646  */
+#line 1498 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3497 "awkgram.c" /* yacc.c:1646  */
+#line 3512 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 136:
-#line 1490 "awkgram.y" /* yacc.c:1646  */
+#line 1500 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3503 "awkgram.c" /* yacc.c:1646  */
+#line 3518 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 137:
-#line 1492 "awkgram.y" /* yacc.c:1646  */
+#line 1505 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3509 "awkgram.c" /* yacc.c:1646  */
+#line 3524 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 138:
-#line 1497 "awkgram.y" /* yacc.c:1646  */
+#line 1507 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3515 "awkgram.c" /* yacc.c:1646  */
+#line 3530 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 139:
-#line 1499 "awkgram.y" /* yacc.c:1646  */
+#line 1512 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3521 "awkgram.c" /* yacc.c:1646  */
+#line 3536 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 140:
-#line 1501 "awkgram.y" /* yacc.c:1646  */
+#line 1514 "awkgram.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 3542 "awkgram.c" /* yacc.c:1646  */
+    break;
+
+  case 141:
+#line 1516 "awkgram.y" /* yacc.c:1646  */
     {
                int count = 2;
                bool is_simple_var = false;
@@ -3568,47 +3589,47 @@ regular_print:
                                max_args = count;
                }
          }
-#line 3572 "awkgram.c" /* yacc.c:1646  */
-    break;
-
-  case 142:
-#line 1553 "awkgram.y" /* yacc.c:1646  */
-    { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3578 "awkgram.c" /* yacc.c:1646  */
+#line 3593 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 143:
-#line 1555 "awkgram.y" /* yacc.c:1646  */
+#line 1568 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3584 "awkgram.c" /* yacc.c:1646  */
+#line 3599 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 144:
-#line 1557 "awkgram.y" /* yacc.c:1646  */
+#line 1570 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3590 "awkgram.c" /* yacc.c:1646  */
+#line 3605 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 145:
-#line 1559 "awkgram.y" /* yacc.c:1646  */
+#line 1572 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3596 "awkgram.c" /* yacc.c:1646  */
+#line 3611 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 146:
-#line 1561 "awkgram.y" /* yacc.c:1646  */
+#line 1574 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3602 "awkgram.c" /* yacc.c:1646  */
+#line 3617 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 147:
-#line 1563 "awkgram.y" /* yacc.c:1646  */
+#line 1576 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3608 "awkgram.c" /* yacc.c:1646  */
+#line 3623 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 148:
-#line 1565 "awkgram.y" /* yacc.c:1646  */
+#line 1578 "awkgram.y" /* yacc.c:1646  */
+    { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
+#line 3629 "awkgram.c" /* yacc.c:1646  */
+    break;
+
+  case 149:
+#line 1580 "awkgram.y" /* yacc.c:1646  */
     {
                /*
                 * In BEGINFILE/ENDFILE, allow `getline [var] < file'
@@ -3622,29 +3643,29 @@ regular_print:
                                _("non-redirected `getline' undefined inside 
END action"));
                (yyval) = mk_getline((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]), 
redirect_input);
          }
-#line 3626 "awkgram.c" /* yacc.c:1646  */
+#line 3647 "awkgram.c" /* yacc.c:1646  */
     break;
 
-  case 149:
-#line 1579 "awkgram.y" /* yacc.c:1646  */
+  case 150:
+#line 1594 "awkgram.y" /* yacc.c:1646  */
     {
                (yyvsp[0])->opcode = Op_postincrement;
                (yyval) = mk_assignment((yyvsp[-1]), NULL, (yyvsp[0]));
          }
-#line 3635 "awkgram.c" /* yacc.c:1646  */
+#line 3656 "awkgram.c" /* yacc.c:1646  */
     break;
 
-  case 150:
-#line 1584 "awkgram.y" /* yacc.c:1646  */
+  case 151:
+#line 1599 "awkgram.y" /* yacc.c:1646  */
     {
                (yyvsp[0])->opcode = Op_postdecrement;
                (yyval) = mk_assignment((yyvsp[-1]), NULL, (yyvsp[0]));
          }
-#line 3644 "awkgram.c" /* yacc.c:1646  */
+#line 3665 "awkgram.c" /* yacc.c:1646  */
     break;
 
-  case 151:
-#line 1589 "awkgram.y" /* yacc.c:1646  */
+  case 152:
+#line 1604 "awkgram.y" /* yacc.c:1646  */
     {
                if (do_lint_old) {
                    warning_ln((yyvsp[-1])->source_line,
@@ -3664,64 +3685,64 @@ regular_print:
                        (yyval) = list_append(list_merge(t, (yyvsp[0])), 
(yyvsp[-1]));
                }
          }
-#line 3668 "awkgram.c" /* yacc.c:1646  */
+#line 3689 "awkgram.c" /* yacc.c:1646  */
     break;
 
-  case 152:
-#line 1614 "awkgram.y" /* yacc.c:1646  */
+  case 153:
+#line 1629 "awkgram.y" /* yacc.c:1646  */
     {
                  (yyval) = mk_getline((yyvsp[-1]), (yyvsp[0]), (yyvsp[-3]), 
(yyvsp[-2])->redir_type);
                  bcfree((yyvsp[-2]));
                }
-#line 3677 "awkgram.c" /* yacc.c:1646  */
-    break;
-
-  case 153:
-#line 1620 "awkgram.y" /* yacc.c:1646  */
-    { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3683 "awkgram.c" /* yacc.c:1646  */
+#line 3698 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 154:
-#line 1622 "awkgram.y" /* yacc.c:1646  */
+#line 1635 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3689 "awkgram.c" /* yacc.c:1646  */
+#line 3704 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 155:
-#line 1624 "awkgram.y" /* yacc.c:1646  */
+#line 1637 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3695 "awkgram.c" /* yacc.c:1646  */
+#line 3710 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 156:
-#line 1626 "awkgram.y" /* yacc.c:1646  */
+#line 1639 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3701 "awkgram.c" /* yacc.c:1646  */
+#line 3716 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 157:
-#line 1628 "awkgram.y" /* yacc.c:1646  */
+#line 1641 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3707 "awkgram.c" /* yacc.c:1646  */
+#line 3722 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 158:
-#line 1630 "awkgram.y" /* yacc.c:1646  */
+#line 1643 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3713 "awkgram.c" /* yacc.c:1646  */
+#line 3728 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 159:
-#line 1635 "awkgram.y" /* yacc.c:1646  */
+#line 1645 "awkgram.y" /* yacc.c:1646  */
+    { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
+#line 3734 "awkgram.c" /* yacc.c:1646  */
+    break;
+
+  case 160:
+#line 1650 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = list_create((yyvsp[0]));
          }
-#line 3721 "awkgram.c" /* yacc.c:1646  */
+#line 3742 "awkgram.c" /* yacc.c:1646  */
     break;
 
-  case 160:
-#line 1639 "awkgram.y" /* yacc.c:1646  */
+  case 161:
+#line 1654 "awkgram.y" /* yacc.c:1646  */
     {
                if ((yyvsp[0])->opcode == Op_match_rec) {
                        (yyvsp[0])->opcode = Op_nomatch;
@@ -3753,37 +3774,37 @@ regular_print:
                        }
                }
           }
-#line 3757 "awkgram.c" /* yacc.c:1646  */
+#line 3778 "awkgram.c" /* yacc.c:1646  */
     break;
 
-  case 161:
-#line 1671 "awkgram.y" /* yacc.c:1646  */
+  case 162:
+#line 1686 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[-1]); }
-#line 3763 "awkgram.c" /* yacc.c:1646  */
+#line 3784 "awkgram.c" /* yacc.c:1646  */
     break;
 
-  case 162:
-#line 1673 "awkgram.y" /* yacc.c:1646  */
+  case 163:
+#line 1688 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = snode((yyvsp[-1]), (yyvsp[-3]));
                if ((yyval) == NULL)
                        YYABORT;
          }
-#line 3773 "awkgram.c" /* yacc.c:1646  */
+#line 3794 "awkgram.c" /* yacc.c:1646  */
     break;
 
-  case 163:
-#line 1679 "awkgram.y" /* yacc.c:1646  */
+  case 164:
+#line 1694 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = snode((yyvsp[-1]), (yyvsp[-3]));
                if ((yyval) == NULL)
                        YYABORT;
          }
-#line 3783 "awkgram.c" /* yacc.c:1646  */
+#line 3804 "awkgram.c" /* yacc.c:1646  */
     break;
 
-  case 164:
-#line 1685 "awkgram.y" /* yacc.c:1646  */
+  case 165:
+#line 1700 "awkgram.y" /* yacc.c:1646  */
     {
                static bool warned = false;
 
@@ -3796,45 +3817,45 @@ regular_print:
                if ((yyval) == NULL)
                        YYABORT;
          }
-#line 3800 "awkgram.c" /* yacc.c:1646  */
+#line 3821 "awkgram.c" /* yacc.c:1646  */
     break;
 
-  case 167:
-#line 1700 "awkgram.y" /* yacc.c:1646  */
+  case 168:
+#line 1715 "awkgram.y" /* yacc.c:1646  */
     {
                (yyvsp[-1])->opcode = Op_preincrement;
                (yyval) = mk_assignment((yyvsp[0]), NULL, (yyvsp[-1]));
          }
-#line 3809 "awkgram.c" /* yacc.c:1646  */
+#line 3830 "awkgram.c" /* yacc.c:1646  */
     break;
 
-  case 168:
-#line 1705 "awkgram.y" /* yacc.c:1646  */
+  case 169:
+#line 1720 "awkgram.y" /* yacc.c:1646  */
     {
                (yyvsp[-1])->opcode = Op_predecrement;
                (yyval) = mk_assignment((yyvsp[0]), NULL, (yyvsp[-1]));
          }
-#line 3818 "awkgram.c" /* yacc.c:1646  */
+#line 3839 "awkgram.c" /* yacc.c:1646  */
     break;
 
-  case 169:
-#line 1710 "awkgram.y" /* yacc.c:1646  */
+  case 170:
+#line 1725 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = list_create((yyvsp[0]));
          }
-#line 3826 "awkgram.c" /* yacc.c:1646  */
+#line 3847 "awkgram.c" /* yacc.c:1646  */
     break;
 
-  case 170:
-#line 1714 "awkgram.y" /* yacc.c:1646  */
+  case 171:
+#line 1729 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = list_create((yyvsp[0]));
          }
-#line 3834 "awkgram.c" /* yacc.c:1646  */
+#line 3855 "awkgram.c" /* yacc.c:1646  */
     break;
 
-  case 171:
-#line 1718 "awkgram.y" /* yacc.c:1646  */
+  case 172:
+#line 1733 "awkgram.y" /* yacc.c:1646  */
     {
                if ((yyvsp[0])->lasti->opcode == Op_push_i
                        && ((yyvsp[0])->lasti->memory->flags & (STRCUR|STRING)) 
== 0
@@ -3849,11 +3870,11 @@ regular_print:
                        (yyval) = list_append((yyvsp[0]), (yyvsp[-1]));
                }
          }
-#line 3853 "awkgram.c" /* yacc.c:1646  */
+#line 3874 "awkgram.c" /* yacc.c:1646  */
     break;
 
-  case 172:
-#line 1733 "awkgram.y" /* yacc.c:1646  */
+  case 173:
+#line 1748 "awkgram.y" /* yacc.c:1646  */
     {
            /*
             * was: $$ = $2
@@ -3863,20 +3884,20 @@ regular_print:
                (yyvsp[-1])->memory = make_number(0.0);
                (yyval) = list_append((yyvsp[0]), (yyvsp[-1]));
          }
-#line 3867 "awkgram.c" /* yacc.c:1646  */
+#line 3888 "awkgram.c" /* yacc.c:1646  */
     break;
 
-  case 173:
-#line 1746 "awkgram.y" /* yacc.c:1646  */
+  case 174:
+#line 1761 "awkgram.y" /* yacc.c:1646  */
     {
                func_use((yyvsp[0])->lasti->func_name, FUNC_USE);
                (yyval) = (yyvsp[0]);
          }
-#line 3876 "awkgram.c" /* yacc.c:1646  */
+#line 3897 "awkgram.c" /* yacc.c:1646  */
     break;
 
-  case 174:
-#line 1751 "awkgram.y" /* yacc.c:1646  */
+  case 175:
+#line 1766 "awkgram.y" /* yacc.c:1646  */
     {
                /* indirect function call */
                INSTRUCTION *f, *t;
@@ -3910,11 +3931,11 @@ regular_print:
                (yyval) = list_prepend((yyvsp[0]), t);
                at_seen = false;
          }
-#line 3914 "awkgram.c" /* yacc.c:1646  */
+#line 3935 "awkgram.c" /* yacc.c:1646  */
     break;
 
-  case 175:
-#line 1788 "awkgram.y" /* yacc.c:1646  */
+  case 176:
+#line 1803 "awkgram.y" /* yacc.c:1646  */
     {
                NODE *n;
 
@@ -3939,49 +3960,49 @@ regular_print:
                        (yyval) = list_append(t, (yyvsp[-3]));
                }
          }
-#line 3943 "awkgram.c" /* yacc.c:1646  */
+#line 3964 "awkgram.c" /* yacc.c:1646  */
     break;
 
-  case 176:
-#line 1816 "awkgram.y" /* yacc.c:1646  */
+  case 177:
+#line 1831 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 3949 "awkgram.c" /* yacc.c:1646  */
+#line 3970 "awkgram.c" /* yacc.c:1646  */
     break;
 
-  case 177:
-#line 1818 "awkgram.y" /* yacc.c:1646  */
+  case 178:
+#line 1833 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3955 "awkgram.c" /* yacc.c:1646  */
+#line 3976 "awkgram.c" /* yacc.c:1646  */
     break;
 
-  case 178:
-#line 1823 "awkgram.y" /* yacc.c:1646  */
+  case 179:
+#line 1838 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 3961 "awkgram.c" /* yacc.c:1646  */
+#line 3982 "awkgram.c" /* yacc.c:1646  */
     break;
 
-  case 179:
-#line 1825 "awkgram.y" /* yacc.c:1646  */
+  case 180:
+#line 1840 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[-1]); }
-#line 3967 "awkgram.c" /* yacc.c:1646  */
+#line 3988 "awkgram.c" /* yacc.c:1646  */
     break;
 
-  case 180:
-#line 1830 "awkgram.y" /* yacc.c:1646  */
+  case 181:
+#line 1845 "awkgram.y" /* yacc.c:1646  */
     {  (yyval) = (yyvsp[0]); }
-#line 3973 "awkgram.c" /* yacc.c:1646  */
+#line 3994 "awkgram.c" /* yacc.c:1646  */
     break;
 
-  case 181:
-#line 1832 "awkgram.y" /* yacc.c:1646  */
+  case 182:
+#line 1847 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = list_merge((yyvsp[-1]), (yyvsp[0]));
          }
-#line 3981 "awkgram.c" /* yacc.c:1646  */
+#line 4002 "awkgram.c" /* yacc.c:1646  */
     break;
 
-  case 182:
-#line 1839 "awkgram.y" /* yacc.c:1646  */
+  case 183:
+#line 1854 "awkgram.y" /* yacc.c:1646  */
     {
                INSTRUCTION *ip = (yyvsp[0])->lasti; 
                int count = ip->sub_count;      /* # of SUBSEP-seperated 
expressions */
@@ -3995,11 +4016,11 @@ regular_print:
                sub_counter++;  /* count # of dimensions */
                (yyval) = (yyvsp[0]);
          }
-#line 3999 "awkgram.c" /* yacc.c:1646  */
+#line 4020 "awkgram.c" /* yacc.c:1646  */
     break;
 
-  case 183:
-#line 1856 "awkgram.y" /* yacc.c:1646  */
+  case 184:
+#line 1871 "awkgram.y" /* yacc.c:1646  */
     {
                INSTRUCTION *t = (yyvsp[-1]);
                if ((yyvsp[-1]) == NULL) {
@@ -4013,31 +4034,31 @@ regular_print:
                        (yyvsp[0])->sub_count = count_expressions(&t, false);
                (yyval) = list_append(t, (yyvsp[0]));
          }
-#line 4017 "awkgram.c" /* yacc.c:1646  */
+#line 4038 "awkgram.c" /* yacc.c:1646  */
     break;
 
-  case 184:
-#line 1873 "awkgram.y" /* yacc.c:1646  */
+  case 185:
+#line 1888 "awkgram.y" /* yacc.c:1646  */
     {  (yyval) = (yyvsp[0]); }
-#line 4023 "awkgram.c" /* yacc.c:1646  */
+#line 4044 "awkgram.c" /* yacc.c:1646  */
     break;
 
-  case 185:
-#line 1875 "awkgram.y" /* yacc.c:1646  */
+  case 186:
+#line 1890 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = list_merge((yyvsp[-1]), (yyvsp[0]));
          }
-#line 4031 "awkgram.c" /* yacc.c:1646  */
+#line 4052 "awkgram.c" /* yacc.c:1646  */
     break;
 
-  case 186:
-#line 1882 "awkgram.y" /* yacc.c:1646  */
+  case 187:
+#line 1897 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[-1]); }
-#line 4037 "awkgram.c" /* yacc.c:1646  */
+#line 4058 "awkgram.c" /* yacc.c:1646  */
     break;
 
-  case 187:
-#line 1887 "awkgram.y" /* yacc.c:1646  */
+  case 188:
+#line 1902 "awkgram.y" /* yacc.c:1646  */
     {
                char *var_name = (yyvsp[0])->lextok;
 
@@ -4045,22 +4066,22 @@ regular_print:
                (yyvsp[0])->memory = variable((yyvsp[0])->source_line, 
var_name, Node_var_new);
                (yyval) = list_create((yyvsp[0]));
          }
-#line 4049 "awkgram.c" /* yacc.c:1646  */
+#line 4070 "awkgram.c" /* yacc.c:1646  */
     break;
 
-  case 188:
-#line 1895 "awkgram.y" /* yacc.c:1646  */
+  case 189:
+#line 1910 "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 4060 "awkgram.c" /* yacc.c:1646  */
+#line 4081 "awkgram.c" /* yacc.c:1646  */
     break;
 
-  case 189:
-#line 1905 "awkgram.y" /* yacc.c:1646  */
+  case 190:
+#line 1920 "awkgram.y" /* yacc.c:1646  */
     {
                INSTRUCTION *ip = (yyvsp[0])->nexti;
                if (ip->opcode == Op_push
@@ -4072,73 +4093,73 @@ regular_print:
                } else
                        (yyval) = (yyvsp[0]);
          }
-#line 4076 "awkgram.c" /* yacc.c:1646  */
+#line 4097 "awkgram.c" /* yacc.c:1646  */
     break;
 
-  case 190:
-#line 1917 "awkgram.y" /* yacc.c:1646  */
+  case 191:
+#line 1932 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = list_append((yyvsp[-1]), (yyvsp[-2]));
                if ((yyvsp[0]) != NULL)
                        mk_assignment((yyvsp[-1]), NULL, (yyvsp[0]));
          }
-#line 4086 "awkgram.c" /* yacc.c:1646  */
+#line 4107 "awkgram.c" /* yacc.c:1646  */
     break;
 
-  case 191:
-#line 1926 "awkgram.y" /* yacc.c:1646  */
+  case 192:
+#line 1941 "awkgram.y" /* yacc.c:1646  */
     {
                (yyvsp[0])->opcode = Op_postincrement;
          }
-#line 4094 "awkgram.c" /* yacc.c:1646  */
+#line 4115 "awkgram.c" /* yacc.c:1646  */
     break;
 
-  case 192:
-#line 1930 "awkgram.y" /* yacc.c:1646  */
+  case 193:
+#line 1945 "awkgram.y" /* yacc.c:1646  */
     {
                (yyvsp[0])->opcode = Op_postdecrement;
          }
-#line 4102 "awkgram.c" /* yacc.c:1646  */
+#line 4123 "awkgram.c" /* yacc.c:1646  */
     break;
 
-  case 193:
-#line 1933 "awkgram.y" /* yacc.c:1646  */
+  case 194:
+#line 1948 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 4108 "awkgram.c" /* yacc.c:1646  */
+#line 4129 "awkgram.c" /* yacc.c:1646  */
     break;
 
-  case 195:
-#line 1941 "awkgram.y" /* yacc.c:1646  */
+  case 196:
+#line 1956 "awkgram.y" /* yacc.c:1646  */
     { yyerrok; }
-#line 4114 "awkgram.c" /* yacc.c:1646  */
+#line 4135 "awkgram.c" /* yacc.c:1646  */
     break;
 
-  case 196:
-#line 1945 "awkgram.y" /* yacc.c:1646  */
+  case 197:
+#line 1960 "awkgram.y" /* yacc.c:1646  */
     { yyerrok; }
-#line 4120 "awkgram.c" /* yacc.c:1646  */
+#line 4141 "awkgram.c" /* yacc.c:1646  */
     break;
 
-  case 199:
-#line 1954 "awkgram.y" /* yacc.c:1646  */
+  case 200:
+#line 1969 "awkgram.y" /* yacc.c:1646  */
     { yyerrok; }
-#line 4126 "awkgram.c" /* yacc.c:1646  */
+#line 4147 "awkgram.c" /* yacc.c:1646  */
     break;
 
-  case 200:
-#line 1958 "awkgram.y" /* yacc.c:1646  */
+  case 201:
+#line 1973 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); yyerrok; }
-#line 4132 "awkgram.c" /* yacc.c:1646  */
+#line 4153 "awkgram.c" /* yacc.c:1646  */
     break;
 
-  case 201:
-#line 1962 "awkgram.y" /* yacc.c:1646  */
+  case 202:
+#line 1977 "awkgram.y" /* yacc.c:1646  */
     { yyerrok; }
-#line 4138 "awkgram.c" /* yacc.c:1646  */
+#line 4159 "awkgram.c" /* yacc.c:1646  */
     break;
 
 
-#line 4142 "awkgram.c" /* yacc.c:1646  */
+#line 4163 "awkgram.c" /* yacc.c:1646  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -4366,7 +4387,7 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 1964 "awkgram.y" /* yacc.c:1906  */
+#line 1979 "awkgram.y" /* yacc.c:1906  */
 
 
 struct token {
@@ -7249,6 +7270,8 @@ mk_rexp(INSTRUCTION *list)
        ip = list->nexti;
        if (ip == list->lasti && ip->opcode == Op_match_rec)
                ip->opcode = Op_push_re;
+       else if (ip == list->lasti && ip->opcode == Op_push_re)
+               ; /* do nothing --- @/.../ */
        else {
                ip = instruction(Op_push_re);
                ip->memory = make_regnode(Node_dynregex, NULL);
diff --git a/awkgram.y b/awkgram.y
index 916a385..503186d 100644
--- a/awkgram.y
+++ b/awkgram.y
@@ -1219,7 +1219,7 @@ case_value
                        $1->opcode = Op_push;
                $$ = $1;
          }
-       | hard_regexp  
+       | hard_regexp
          {
                assert($1->memory->type == Node_hardregex);
                $1->opcode = Op_push_re;
@@ -1420,13 +1420,27 @@ exp
          }
        | variable ASSIGN hard_regexp %prec ASSIGNOP
          {
-               stopme(0);
                $$ = mk_assignment($1, list_create($3), $2);
          }
        | exp LEX_AND exp
          {     $$ = mk_boolean($1, $3, $2); }
        | exp LEX_OR exp
          {     $$ = mk_boolean($1, $3, $2); }
+       | exp MATCHOP hard_regexp
+         {
+               if ($1->lasti->opcode == Op_match_rec)
+                       warning_ln($2->source_line,
+                               _("regular expression on left of `~' or `!~' 
operator"));
+
+               assert($3->lasti == $3->nexti
+                  && $3->nexti->opcode == Op_push_re
+                  && $3->nexti->memory->type == Node_hardregex);
+               /* RHS is @/.../ */
+               $2->memory = $3->nexti->memory;
+               bcfree($3->nexti);      /* Op_push_re */
+               bcfree($3);                     /* Op_list */
+               $$ = list_append($1, $2);
+         }
        | exp MATCHOP exp
          {
                if ($1->lasti->opcode == Op_match_rec)
@@ -1434,6 +1448,7 @@ exp
                                _("regular expression on left of `~' or `!~' 
operator"));
 
                if ($3->lasti == $3->nexti && $3->nexti->opcode == 
Op_match_rec) {
+                       /* RHS is /.../ */
                        $2->memory = $3->nexti->memory;
                        bcfree($3->nexti);      /* Op_match_rec */
                        bcfree($3);                     /* Op_list */
@@ -4843,6 +4858,8 @@ mk_rexp(INSTRUCTION *list)
        ip = list->nexti;
        if (ip == list->lasti && ip->opcode == Op_match_rec)
                ip->opcode = Op_push_re;
+       else if (ip == list->lasti && ip->opcode == Op_push_re)
+               ; /* do nothing --- @/.../ */
        else {
                ip = instruction(Op_push_re);
                ip->memory = make_regnode(Node_dynregex, NULL);
diff --git a/re.c b/re.c
index e30b8b4..77d6f6f 100644
--- a/re.c
+++ b/re.c
@@ -355,6 +355,10 @@ re_update(NODE *t)
                        return t->re_reg;
                }
                t1 = t->re_exp;
+               if (t1->type == Node_hardregex) {
+                       assert((t1->re_flags & CONSTANT) != 0);
+                       return t1->re_reg;
+               }
                if (t->re_text != NULL) {
                        /* if contents haven't changed, just return it */
                        if (cmp_nodes(t->re_text, t1) == 0)

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

Summary of changes:
 ChangeLog |    7 +
 awkgram.c | 1389 +++++++++++++++++++++++++++++++------------------------------
 awkgram.y |   21 +-
 re.c      |    4 +
 4 files changed, 736 insertions(+), 685 deletions(-)


hooks/post-receive
-- 
gawk



reply via email to

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