gawk-diffs
[Top][All Lists]
Advanced

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

[SCM] gawk branch, gawk-5.1-stable, updated. gawk-4.1.0-3977-g442540d


From: Arnold Robbins
Subject: [SCM] gawk branch, gawk-5.1-stable, updated. gawk-4.1.0-3977-g442540d
Date: Fri, 5 Jun 2020 06:30:49 -0400 (EDT)

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

The branch, gawk-5.1-stable has been updated
       via  442540d32d7fd7f0880db8640d285b3e90c20e3d (commit)
       via  47dce6a7002a8d7b818c19d574d81327b769871b (commit)
      from  7c159701bd9226dc26934844e45e5635d9a06719 (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=442540d32d7fd7f0880db8640d285b3e90c20e3d

commit 442540d32d7fd7f0880db8640d285b3e90c20e3d
Author: Arnold D. Robbins <arnold@skeeve.com>
Date:   Fri Jun 5 13:30:24 2020 +0300

    Allow typed regex in return statement. Update the doc.

diff --git a/ChangeLog b/ChangeLog
index b9e81cc..9e076e1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2020-06-05         Arnold D. Robbins     <arnold@skeeve.com>
 
+       * awkgram.y: Allow @/foo/ as return expression in a function.
+       Oops.
+
+2020-06-05         Arnold D. Robbins     <arnold@skeeve.com>
+
        * configure.ac: Add call to AM_PROG_AR for use in
        cross compiles.  Thanks to Sergei Trofimovich <slyfox@gentoo.org>
        for the patch.
diff --git a/awkgram.c b/awkgram.c
index a92964e..b834a65 100644
--- a/awkgram.c
+++ b/awkgram.c
@@ -525,33 +525,34 @@ enum yysymbol_kind_t
   YYSYMBOL_opt_fcall_expression_list = 118, /* opt_fcall_expression_list  */
   YYSYMBOL_fcall_expression_list = 119,    /* fcall_expression_list  */
   YYSYMBOL_fcall_exp = 120,                /* fcall_exp  */
-  YYSYMBOL_exp = 121,                      /* exp  */
-  YYSYMBOL_assign_operator = 122,          /* assign_operator  */
-  YYSYMBOL_relop_or_less = 123,            /* relop_or_less  */
-  YYSYMBOL_a_relop = 124,                  /* a_relop  */
-  YYSYMBOL_common_exp = 125,               /* common_exp  */
-  YYSYMBOL_simp_exp = 126,                 /* simp_exp  */
-  YYSYMBOL_simp_exp_nc = 127,              /* simp_exp_nc  */
-  YYSYMBOL_non_post_simp_exp = 128,        /* non_post_simp_exp  */
-  YYSYMBOL_func_call = 129,                /* func_call  */
-  YYSYMBOL_direct_func_call = 130,         /* direct_func_call  */
-  YYSYMBOL_opt_variable = 131,             /* opt_variable  */
-  YYSYMBOL_delete_subscript_list = 132,    /* delete_subscript_list  */
-  YYSYMBOL_delete_subscript = 133,         /* delete_subscript  */
-  YYSYMBOL_delete_exp_list = 134,          /* delete_exp_list  */
-  YYSYMBOL_bracketed_exp_list = 135,       /* bracketed_exp_list  */
-  YYSYMBOL_subscript = 136,                /* subscript  */
-  YYSYMBOL_subscript_list = 137,           /* subscript_list  */
-  YYSYMBOL_simple_variable = 138,          /* simple_variable  */
-  YYSYMBOL_variable = 139,                 /* variable  */
-  YYSYMBOL_opt_incdec = 140,               /* opt_incdec  */
-  YYSYMBOL_l_brace = 141,                  /* l_brace  */
-  YYSYMBOL_r_brace = 142,                  /* r_brace  */
-  YYSYMBOL_r_paren = 143,                  /* r_paren  */
-  YYSYMBOL_opt_semi = 144,                 /* opt_semi  */
-  YYSYMBOL_semi = 145,                     /* semi  */
-  YYSYMBOL_colon = 146,                    /* colon  */
-  YYSYMBOL_comma = 147                     /* comma  */
+  YYSYMBOL_opt_fcall_exp = 121,            /* opt_fcall_exp  */
+  YYSYMBOL_exp = 122,                      /* exp  */
+  YYSYMBOL_assign_operator = 123,          /* assign_operator  */
+  YYSYMBOL_relop_or_less = 124,            /* relop_or_less  */
+  YYSYMBOL_a_relop = 125,                  /* a_relop  */
+  YYSYMBOL_common_exp = 126,               /* common_exp  */
+  YYSYMBOL_simp_exp = 127,                 /* simp_exp  */
+  YYSYMBOL_simp_exp_nc = 128,              /* simp_exp_nc  */
+  YYSYMBOL_non_post_simp_exp = 129,        /* non_post_simp_exp  */
+  YYSYMBOL_func_call = 130,                /* func_call  */
+  YYSYMBOL_direct_func_call = 131,         /* direct_func_call  */
+  YYSYMBOL_opt_variable = 132,             /* opt_variable  */
+  YYSYMBOL_delete_subscript_list = 133,    /* delete_subscript_list  */
+  YYSYMBOL_delete_subscript = 134,         /* delete_subscript  */
+  YYSYMBOL_delete_exp_list = 135,          /* delete_exp_list  */
+  YYSYMBOL_bracketed_exp_list = 136,       /* bracketed_exp_list  */
+  YYSYMBOL_subscript = 137,                /* subscript  */
+  YYSYMBOL_subscript_list = 138,           /* subscript_list  */
+  YYSYMBOL_simple_variable = 139,          /* simple_variable  */
+  YYSYMBOL_variable = 140,                 /* variable  */
+  YYSYMBOL_opt_incdec = 141,               /* opt_incdec  */
+  YYSYMBOL_l_brace = 142,                  /* l_brace  */
+  YYSYMBOL_r_brace = 143,                  /* r_brace  */
+  YYSYMBOL_r_paren = 144,                  /* r_paren  */
+  YYSYMBOL_opt_semi = 145,                 /* opt_semi  */
+  YYSYMBOL_semi = 146,                     /* semi  */
+  YYSYMBOL_colon = 147,                    /* colon  */
+  YYSYMBOL_comma = 148                     /* comma  */
 };
 typedef enum yysymbol_kind_t yysymbol_kind_t;
 
@@ -861,16 +862,16 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  2
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1191
+#define YYLAST   1200
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  77
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  71
+#define YYNNTS  72
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  207
+#define YYNRULES  209
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  355
+#define YYNSTATES  356
 
 #define YYMAXUTOK   310
 
@@ -936,15 +937,15 @@ static const yytype_int16 yyrline[] =
     1410,  1410,  1423,  1430,  1443,  1447,  1469,  1470,  1476,  1477,
     1486,  1487,  1492,  1497,  1514,  1516,  1518,  1525,  1526,  1532,
     1533,  1538,  1540,  1547,  1549,  1557,  1562,  1573,  1574,  1579,
-    1581,  1588,  1590,  1598,  1603,  1613,  1614,  1619,  1626,  1630,
-    1632,  1634,  1647,  1664,  1674,  1681,  1683,  1688,  1690,  1692,
-    1700,  1702,  1707,  1709,  1714,  1716,  1718,  1775,  1777,  1779,
-    1781,  1783,  1785,  1787,  1789,  1803,  1808,  1813,  1839,  1845,
-    1847,  1849,  1851,  1853,  1855,  1860,  1864,  1896,  1904,  1910,
-    1916,  1929,  1930,  1931,  1936,  1941,  1945,  1949,  1964,  1985,
-    1990,  2027,  2064,  2065,  2071,  2072,  2077,  2079,  2086,  2103,
-    2120,  2122,  2129,  2134,  2140,  2151,  2163,  2172,  2176,  2181,
-    2185,  2189,  2193,  2198,  2199,  2203,  2207,  2211
+    1581,  1588,  1590,  1598,  1603,  1613,  1614,  1619,  1620,  1625,
+    1632,  1636,  1638,  1640,  1653,  1670,  1680,  1687,  1689,  1694,
+    1696,  1698,  1706,  1708,  1713,  1715,  1720,  1722,  1724,  1781,
+    1783,  1785,  1787,  1789,  1791,  1793,  1795,  1809,  1814,  1819,
+    1845,  1851,  1853,  1855,  1857,  1859,  1861,  1866,  1870,  1902,
+    1910,  1916,  1922,  1935,  1936,  1937,  1942,  1947,  1951,  1955,
+    1970,  1991,  1996,  2033,  2070,  2071,  2077,  2078,  2083,  2085,
+    2092,  2109,  2126,  2128,  2135,  2140,  2146,  2157,  2169,  2178,
+    2182,  2187,  2191,  2195,  2199,  2204,  2205,  2209,  2213,  2217
 };
 #endif
 
@@ -981,13 +982,13 @@ static const char *const yytname[] =
   "print", "print_expression_list", "output_redir", "$@6", "if_statement",
   "nls", "opt_nls", "input_redir", "opt_param_list", "param_list",
   "opt_exp", "opt_expression_list", "expression_list",
-  "opt_fcall_expression_list", "fcall_expression_list", "fcall_exp", "exp",
-  "assign_operator", "relop_or_less", "a_relop", "common_exp", "simp_exp",
-  "simp_exp_nc", "non_post_simp_exp", "func_call", "direct_func_call",
-  "opt_variable", "delete_subscript_list", "delete_subscript",
-  "delete_exp_list", "bracketed_exp_list", "subscript", "subscript_list",
-  "simple_variable", "variable", "opt_incdec", "l_brace", "r_brace",
-  "r_paren", "opt_semi", "semi", "colon", "comma", YY_NULLPTR
+  "opt_fcall_expression_list", "fcall_expression_list", "fcall_exp",
+  "opt_fcall_exp", "exp", "assign_operator", "relop_or_less", "a_relop",
+  "common_exp", "simp_exp", "simp_exp_nc", "non_post_simp_exp",
+  "func_call", "direct_func_call", "opt_variable", "delete_subscript_list",
+  "delete_subscript", "delete_exp_list", "bracketed_exp_list", "subscript",
+  "subscript_list", "simple_variable", "variable", "opt_incdec", "l_brace",
+  "r_brace", "r_paren", "opt_semi", "semi", "colon", "comma", YY_NULLPTR
 };
 
 static const char *
@@ -1013,7 +1014,7 @@ static const yytype_int16 yytoknum[] =
 };
 #endif
 
-#define YYPACT_NINF (-283)
+#define YYPACT_NINF (-276)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
@@ -1027,42 +1028,42 @@ static const yytype_int16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    -283,   316,  -283,  -283,   -45,   -28,  -283,  -283,  -283,  -283,
-     160,  -283,  -283,    23,    23,    23,   -39,   -18,  -283,  -283,
-    -283,  1047,  1047,  -283,  1047,  1075,   818,   257,  -283,    99,
-     -20,  -283,  -283,    11,  1017,   974,   378,   415,  -283,  -283,
-    -283,  -283,   329,   742,   818,  -283,     0,  -283,  -283,  -283,
-    -283,  -283,    25,     9,  -283,    22,  -283,  -283,  -283,   742,
-     742,    79,    46,    18,    46,    46,  1047,   114,  -283,  -283,
-      13,   286,    44,    47,    60,  -283,    94,  -283,  -283,  -283,
-      11,  -283,    94,  -283,   151,  -283,  -283,  1002,   162,  1047,
-    1047,  1047,    94,  -283,  -283,  -283,  1047,  1047,   132,   378,
-    1047,  1047,  1047,  1047,  1047,  1047,  1047,  1047,  1047,  1047,
-    1047,  1047,  -283,   170,  -283,  -283,   168,  1047,  -283,  -283,
-    -283,   116,    14,  -283,  1132,    76,  1132,  -283,  -283,  -283,
-    -283,  1047,  -283,   116,   116,   286,  -283,  -283,  -283,  1047,
-    -283,   144,   846,  -283,  -283,    34,    91,  -283,    39,    91,
-    -283,    59,    91,    11,  -283,   542,  -283,  -283,  -283,   145,
-    -283,   135,   580,  1113,  -283,   189,  1132,    23,   230,   230,
-      46,    46,    46,    46,   230,   230,    46,    46,    46,    46,
-    -283,  -283,  1132,  -283,  1002,   770,  -283,    27,   378,  -283,
-    -283,  1132,   162,  -283,  1132,  -283,  -283,  -283,  -283,  -283,
-    -283,  -283,   119,  -283,    12,   123,   126,    94,   128,    91,
-      91,  -283,  -283,    91,  1047,    91,    94,  -283,  -283,    91,
-    -283,  -283,  1132,  -283,   122,    94,  1047,  -283,  -283,  -283,
-    -283,  -283,  -283,   116,    73,  -283,  1047,  1047,  -283,   198,
-    1047,  1047,   660,   895,  -283,  -283,  -283,    91,  1132,  -283,
-    -283,  -283,   590,   542,    94,  -283,  -283,  1132,    94,  -283,
-      28,   286,    91,   -28,   141,   286,   286,   190,   -23,  -283,
-     122,  -283,   818,   205,  -283,   325,  -283,  -283,  -283,  -283,
-    -283,    94,  -283,  -283,   115,  -283,  -283,  -283,    94,    94,
-     153,   162,    94,    13,  -283,  -283,   660,  -283,  -283,   -20,
-     660,  1047,   116,   694,   144,  1047,   209,  -283,  -283,   286,
-      94,  1090,    94,   974,    94,   152,    94,   660,    94,   929,
-     660,  -283,   342,   176,  -283,   158,  -283,  -283,   929,   116,
-    -283,  -283,  -283,   236,   243,  -283,  -283,   176,  -283,    94,
-    -283,   116,    94,  -283,  -283,    94,  -283,    94,   660,  -283,
-     390,   660,  -283,   466,  -283
+    -276,   315,  -276,  -276,   -45,   -41,  -276,  -276,  -276,  -276,
+     133,  -276,  -276,    13,    13,    13,   -13,    -7,  -276,  -276,
+    -276,  1046,  1046,  -276,  1046,  1074,   817,   172,  -276,   -23,
+     -10,  -276,  -276,    29,  1112,   973,   276,   310,  -276,  -276,
+    -276,  -276,   137,   741,   817,  -276,     1,  -276,  -276,  -276,
+    -276,  -276,    64,    84,  -276,    98,  -276,  -276,  -276,   741,
+     741,   173,   111,   117,   111,   111,  1046,   125,  -276,  -276,
+      15,  1016,    31,    65,   151,  -276,   141,  -276,  -276,  -276,
+      29,  -276,   141,  -276,   198,  -276,  -276,  1001,   203,  1046,
+    1046,  1046,   141,  -276,  -276,  -276,  1046,  1046,   175,   276,
+    1046,  1046,  1046,  1046,  1046,  1046,  1046,  1046,  1046,  1046,
+    1046,  1046,  -276,   209,  -276,  -276,   208,  1046,  -276,  -276,
+    -276,   142,    74,  -276,  1141,    73,  1141,  -276,  -276,  -276,
+    -276,  1046,  -276,   142,   142,  1016,  -276,  -276,  -276,  1046,
+    -276,   186,   845,  -276,  -276,     8,    90,  -276,    34,    90,
+    -276,    59,    90,    29,  -276,   541,  -276,  -276,  -276,    11,
+    -276,   287,   130,  1131,  -276,   139,  1141,    13,   123,   123,
+     111,   111,   111,   111,   123,   123,   111,   111,   111,   111,
+    -276,  -276,  1141,  -276,  1001,   769,  -276,    45,   276,  -276,
+    -276,  1141,   203,  -276,  1141,  -276,  -276,  -276,  -276,  -276,
+    -276,  -276,   174,  -276,    10,   179,   183,   141,   185,    90,
+      90,  -276,  -276,    90,  1046,    90,   141,  -276,  -276,    90,
+    -276,  -276,  1141,  -276,   182,   141,  1046,  -276,  -276,  -276,
+    -276,  -276,  -276,   142,    77,  -276,  1046,  1001,  -276,   251,
+    1046,  1046,   659,   894,  -276,  -276,  -276,    90,  1141,  -276,
+    -276,  -276,   589,   541,   141,  -276,  -276,  1141,   141,  -276,
+      46,  1016,  -276,    90,   -41,   189,  1016,  1016,   243,   -15,
+    -276,   182,  -276,   817,   263,  -276,   162,  -276,  -276,  -276,
+    -276,  -276,   141,  -276,  -276,    60,  -276,  -276,  -276,   141,
+     141,   211,   203,   141,    15,  -276,  -276,   659,  -276,  -276,
+     -10,   659,  1046,   142,   693,   186,  1046,   256,  -276,  -276,
+    1016,   141,  1089,   141,   973,   141,   260,   141,   659,   141,
+     928,   659,  -276,   340,   222,  -276,   212,  -276,  -276,   928,
+     142,  -276,  -276,  -276,   281,   282,  -276,  -276,   222,  -276,
+     141,  -276,   142,   141,  -276,  -276,   141,  -276,   141,   659,
+    -276,   389,   659,  -276,   465,  -276
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -1070,55 +1071,55 @@ static const yytype_int16 yypact[] =
      means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       2,     0,     1,     6,     0,   193,   175,   176,    25,    26,
-       0,    27,    28,   182,     0,     0,     0,   170,     5,    94,
+       2,     0,     1,     6,     0,   195,   177,   178,    25,    26,
+       0,    27,    28,   184,     0,     0,     0,   172,     5,    94,
       42,     0,     0,    41,     0,     0,     0,     0,     3,     0,
-       0,   165,    38,     4,    23,   136,   144,   145,   147,   171,
-     179,   195,   172,     0,     0,   190,     0,   194,    31,    30,
-      34,    35,     0,     0,    32,    98,   183,   173,   174,     0,
-       0,     0,   178,   172,   177,   166,     0,   199,   172,   113,
-       0,   111,     0,     0,     0,   180,    96,   205,     7,     8,
-      46,    43,    96,     9,     0,    95,   140,     0,     0,     0,
-       0,     0,    96,   141,   143,   142,     0,     0,     0,   146,
+       0,   167,    38,     4,    23,   138,   146,   147,   149,   173,
+     181,   197,   174,     0,     0,   192,     0,   196,    31,    30,
+      34,    35,     0,     0,    32,    98,   185,   175,   176,     0,
+       0,     0,   180,   174,   179,   168,     0,   201,   174,   113,
+       0,   111,     0,     0,     0,   182,    96,   207,     7,     8,
+      46,    43,    96,     9,     0,    95,   142,     0,     0,     0,
+       0,     0,    96,   143,   145,   144,     0,     0,     0,   148,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   138,   137,   155,   156,     0,     0,   121,    40,
-     126,     0,     0,   119,   125,     0,   111,   192,   191,    33,
-      36,     0,   154,     0,     0,     0,   197,   198,   196,   114,
-     202,     0,     0,   167,    15,     0,     0,    18,     0,     0,
-      21,     0,     0,    97,   200,     0,    47,    39,   131,   132,
-     133,   129,   130,     0,   207,   134,    24,   182,   152,   153,
-     149,   150,   151,   148,   163,   164,   160,   161,   162,   159,
-     128,   139,   127,   181,   122,     0,   189,     0,    99,   168,
-     169,   115,     0,   116,   112,    14,    10,    17,    11,    20,
+       0,     0,   140,   139,   157,   158,     0,     0,   121,    40,
+     126,     0,     0,   119,   125,     0,   111,   194,   193,    33,
+      36,     0,   156,     0,     0,     0,   199,   200,   198,   114,
+     204,     0,     0,   169,    15,     0,     0,    18,     0,     0,
+      21,     0,     0,    97,   202,     0,    47,    39,   133,   134,
+     135,   131,   132,     0,   209,   136,    24,   184,   154,   155,
+     151,   152,   153,   150,   165,   166,   162,   163,   164,   161,
+     130,   141,   129,   183,   122,     0,   191,     0,    99,   170,
+     171,   115,     0,   116,   112,    14,    10,    17,    11,    20,
       12,    45,     0,    63,     0,     0,     0,    96,     0,     0,
        0,    85,    86,     0,   107,     0,    96,    44,    57,     0,
-      66,    50,    71,    43,   203,    96,     0,   158,   123,   124,
-     120,   104,   102,     0,     0,   157,     0,   107,    68,     0,
+      66,    50,    71,    43,   205,    96,     0,   160,   123,   124,
+     120,   104,   102,     0,     0,   159,     0,   127,    68,     0,
        0,     0,     0,    72,    58,    59,    60,     0,   108,    61,
-     201,    65,     0,     0,    96,   204,    48,   135,    96,   105,
-       0,     0,     0,   184,     0,     0,     0,     0,   193,    73,
-       0,    62,     0,    89,    87,     0,    49,    29,    37,   106,
-     103,    96,    64,    69,     0,   186,   188,    70,    96,    96,
-       0,     0,    96,     0,    90,    67,     0,   185,   187,     0,
-       0,     0,     0,     0,    88,     0,    92,    74,    52,     0,
-      96,     0,    96,    91,    96,     0,    96,     0,    96,    72,
-       0,    76,     0,     0,    75,     0,    53,    54,    72,     0,
-      93,    79,    82,     0,     0,    83,    84,     0,   206,    96,
-      51,     0,    96,    81,    80,    96,    43,    96,     0,    43,
-       0,     0,    56,     0,    55
+     203,    65,     0,     0,    96,   206,    48,   137,    96,   105,
+       0,     0,   128,     0,   186,     0,     0,     0,     0,   195,
+      73,     0,    62,     0,    89,    87,     0,    49,    29,    37,
+     106,   103,    96,    64,    69,     0,   188,   190,    70,    96,
+      96,     0,     0,    96,     0,    90,    67,     0,   187,   189,
+       0,     0,     0,     0,     0,    88,     0,    92,    74,    52,
+       0,    96,     0,    96,    91,    96,     0,    96,     0,    96,
+      72,     0,    76,     0,     0,    75,     0,    53,    54,    72,
+       0,    93,    79,    82,     0,     0,    83,    84,     0,   208,
+      96,    51,     0,    96,    81,    80,    96,    43,    96,     0,
+      43,     0,     0,    56,     0,    55
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -283,  -283,  -283,  -283,  -283,  -283,  -283,   226,  -283,  -283,
-    -283,  -283,   -63,  -283,   -77,  -283,  -215,   -73,   -30,  -283,
-    -283,  -234,  -283,  -283,  -282,  -283,  -283,  -283,  -283,  -283,
-    -283,  -283,  -283,     5,   -35,  -283,  -283,  -283,    24,  -283,
-     -43,   101,  -283,   -15,    -1,  -283,  -283,  -283,   -40,    17,
-    -283,   237,  -283,    -6,    96,  -283,  -283,   -16,   -42,  -283,
-    -283,   -81,    -2,  -283,   -27,  -186,   -65,  -283,   -62,   -68,
-      -8
+    -276,  -276,  -276,  -276,  -276,  -276,  -276,   253,  -276,  -276,
+    -276,  -276,   -32,  -276,   -77,  -276,  -208,   -55,   -68,  -276,
+    -276,  -237,  -276,  -276,  -275,  -276,  -276,  -276,  -276,  -276,
+    -276,  -276,  -276,    47,   -48,  -276,  -276,  -276,  -276,  -276,
+     -43,   157,  -276,  -157,  -276,    -1,  -276,  -276,  -276,     0,
+      17,  -276,   268,  -276,     2,   138,  -276,  -276,    22,   -38,
+    -276,  -276,   -81,    -2,  -276,   -27,  -213,   -66,  -276,   -22,
+     -30,   -29
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
@@ -1126,12 +1127,12 @@ static const yytype_int16 yydefgoto[] =
 {
       -1,     1,    28,   146,   149,   152,    29,    78,    53,    54,
       30,   187,    31,    84,   120,    32,   155,    79,   217,   218,
-     237,   219,   252,   263,   270,   315,   324,   337,   220,   273,
-     295,   305,   221,   153,   154,   132,   233,   234,   247,   274,
-      70,   121,   122,   123,   222,   117,    95,    96,    35,    36,
-      37,    38,    39,    40,    55,   283,   284,   285,    45,    46,
-      47,    41,    42,   138,   223,   224,   143,   254,    82,   339,
-     142
+     237,   219,   252,   264,   271,   316,   325,   338,   220,   274,
+     296,   306,   221,   153,   154,   132,   233,   234,   247,   275,
+      70,   121,   122,   123,   263,   222,   117,    95,    96,    35,
+      36,    37,    38,    39,    40,    55,   284,   285,   286,    45,
+      46,    47,    41,    42,   138,   223,   224,   143,   254,    82,
+     340,   142
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -1139,250 +1140,252 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      34,   125,    81,    81,   128,   141,    33,   160,   253,   269,
-     158,    56,    57,    58,   139,   184,   238,   127,   291,    63,
-      63,    75,    63,    68,    43,    71,    97,     5,   231,   279,
-      59,   232,   280,    63,    80,   195,   180,   329,    62,    64,
-     197,    65,   124,   126,    44,   144,   341,   156,   147,    44,
-     145,    60,    99,   148,    76,    75,   183,   164,   124,   124,
-     199,   150,   114,   115,    85,   135,   151,   276,   189,   190,
-      92,    92,    44,   196,   259,   129,   198,   139,   130,   200,
-     131,   239,     4,   140,  -118,   269,   159,   -13,   161,   162,
-     163,    25,   -16,   225,   269,   165,   166,  -100,    63,    63,
+      34,   125,    81,    81,   141,    97,   270,   160,   128,   195,
+     158,    56,    57,    58,   238,   253,   139,     5,   127,    63,
+      63,    86,    63,    68,    43,    71,   292,   228,   230,    75,
+      19,    44,   144,    63,   156,   197,   180,   145,    62,    64,
+     277,    65,   124,   126,   164,   330,   231,   280,    33,   232,
+     281,    76,    99,    77,   342,   183,    59,    44,   124,   124,
+     199,   -13,    60,    75,    76,   135,   147,   189,   190,    93,
+      94,   148,    92,    44,   139,   184,    80,   298,   259,   239,
+     262,    25,    85,   270,   -13,   140,   159,   -16,   161,   162,
+     163,   196,   270,   185,   198,   165,   166,   200,    63,    63,
       63,    63,    63,    63,    63,    63,    63,    63,    63,    63,
-     -13,   235,   -19,   105,   185,   -16,   182,   168,   169,   170,
+     -16,   235,   -19,   341,   129,  -100,   182,   168,   169,   170,
      171,   172,   173,   174,   175,   176,   177,   178,   179,    63,
-      92,   350,   297,    92,   353,   -19,   244,   245,   191,   340,
-     246,   194,   249,  -101,    19,    86,   251,    19,   188,   186,
-      87,    80,    19,   321,    80,    86,   157,    80,   136,   137,
-     133,   134,   255,    48,    49,    56,     5,    77,   258,   228,
-     230,   167,   242,    76,   271,    77,    88,   322,   323,   119,
-     225,   250,   181,   124,   124,   192,   140,    44,   236,   282,
-     256,   225,   240,    93,    94,   241,   281,   243,    77,  -119,
-     288,   289,   264,    93,    94,    19,    50,    51,   292,   275,
-     302,   287,   267,   248,    80,    80,   294,   290,    80,   277,
-      80,   286,   301,   278,    80,   257,   260,   -96,   304,   293,
-     314,    52,   338,   216,   225,   261,   248,   310,   225,   265,
-     266,   312,   286,   343,   316,   336,   296,  -119,  -119,   318,
-     344,   126,    80,   299,   300,   225,    83,   303,   225,   335,
-       4,   262,    67,   227,   342,   313,   306,    80,   298,   345,
-     308,    71,   307,     0,     0,   317,   347,   319,     0,   320,
-     325,   326,     0,   328,     0,     0,   225,   327,   225,   225,
-     330,   225,   102,   103,   104,     0,    86,   105,     0,     0,
-     309,    87,   311,    63,   346,     0,    72,   348,    73,    74,
-     349,    63,   351,     0,     0,     0,     2,     3,   352,     4,
-       5,   354,     0,     6,     7,     0,   139,    88,    89,    90,
-      99,     0,     0,     0,     8,     9,  -110,     0,     0,     0,
-       0,    91,   112,   113,    93,    94,     0,     0,     0,   331,
-     332,   119,    10,    11,    12,    13,   140,     0,     0,     0,
-      14,    15,    16,    17,    18,     0,     0,     0,     0,    19,
-      20,     0,     0,   114,   115,     0,    21,    22,  -110,    23,
-       0,    24,    92,   116,    25,    26,     0,    27,     0,     0,
-     -22,   201,   -22,     4,     5,  -110,    20,     6,     7,     0,
-       0,  -110,   333,   334,     0,    23,     0,     0,     0,     0,
-     202,     0,   203,   204,   205,   -78,   -78,   206,   207,   208,
-     209,   210,   211,   212,   213,   214,     0,     0,     0,    13,
-     215,     0,     0,     0,    14,    15,    16,    17,   100,   101,
-     102,   103,   104,   -78,    20,   105,     0,     0,     0,     0,
-      21,    22,     0,    23,     0,    24,     0,     0,    25,    26,
-       0,    61,     0,     0,    76,   -78,    77,   201,     0,     4,
-       5,     0,     0,     6,     7,   106,   107,   108,   109,   110,
-       0,     0,   111,     0,     0,     0,   202,     0,   203,   204,
-     205,   -77,   -77,   206,   207,   208,   209,   210,   211,   212,
-     213,   214,     0,     0,     0,    13,   215,     0,     0,     0,
-      14,    15,    16,    17,     0,     0,     0,     0,     0,   -77,
-      20,     0,     0,     0,     0,     0,    21,    22,     0,    23,
-       0,    24,     0,     0,    25,    26,     0,    61,     0,     0,
-      76,   -77,    77,   201,     0,     4,     5,     0,     0,     6,
-       7,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   202,     0,   203,   204,   205,     0,     0,   206,
-     207,   208,   209,   210,   211,   212,   213,   214,     0,     0,
-       0,    13,   215,     0,     0,     0,    14,    15,    16,    17,
-      86,    69,     0,     4,     5,    87,    20,     6,     7,     0,
-       0,  -109,    21,    22,     0,    23,     0,    24,     0,     0,
-      25,    26,     0,    61,     0,     0,    76,   216,    77,     0,
-       0,    88,    89,     0,     0,     0,     0,     0,     0,    13,
-       0,     0,     0,     0,    14,    15,    16,    17,    93,    94,
-       0,     0,     0,  -109,    20,     0,     0,     0,     0,     0,
-      21,    22,     0,    23,     0,    24,     0,     0,    25,   272,
-    -109,    61,     0,     4,     5,     0,  -109,     6,     7,     0,
+      92,    92,    44,   225,    92,   -19,    48,    49,   191,   351,
+      86,   194,   354,    19,  -118,    87,   186,  -101,   188,  -119,
+     112,   113,   150,   130,   244,   245,   131,   151,   246,   242,
+     249,   114,   115,   139,   251,    56,    77,   258,   250,   136,
+     137,    88,    89,  -110,   268,     4,     4,   256,   105,    50,
+      51,   114,   115,   124,   124,   102,   103,   104,    93,    94,
+     105,   116,   272,    80,    19,   282,    80,  -119,  -119,    80,
+     289,   290,   255,   157,    52,   260,   278,     5,   283,   276,
+     279,   303,   140,   248,   167,  -110,   133,   134,   119,    92,
+     225,    72,   181,    73,    74,   257,   287,   192,   305,   307,
+     294,   225,  -110,   309,   297,   261,   124,   311,  -110,   266,
+     267,   300,   301,   236,   317,   304,   337,   287,   240,   293,
+     328,   126,   241,   331,   243,   265,    80,    80,    77,   288,
+      80,   322,    80,   318,   343,   320,    80,   321,   326,   327,
+     291,   329,    71,   308,   295,   225,   348,   315,   339,   225,
+     302,   353,   313,    83,   355,   323,   324,   216,   344,   345,
+     319,   336,   347,    67,    80,   349,   225,    86,   350,   225,
+     352,   310,    87,   312,    63,   227,   314,   299,   346,     0,
+      80,     0,    63,    19,     0,     2,     3,     0,     4,     5,
+       0,     0,     6,     7,     0,     0,     0,   225,    88,   225,
+     225,    99,   225,     8,     9,   -96,   100,   101,   102,   103,
+     104,     0,     0,   105,     0,    93,    94,   332,   333,   119,
+       0,    10,    11,    12,    13,     0,     0,     0,     0,    14,
+      15,    16,    17,    18,     0,     0,     0,     0,    19,    20,
+     106,   107,   108,   109,   110,    21,    22,   111,    23,     0,
+      24,     0,     0,    25,    26,     0,    27,     0,     0,   -22,
+     201,   -22,     4,     5,    20,     0,     6,     7,     0,     0,
+     334,   335,     0,    23,     0,     0,     0,     0,     0,   202,
+       0,   203,   204,   205,   -78,   -78,   206,   207,   208,   209,
+     210,   211,   212,   213,   214,     0,     0,     0,    13,   215,
+       0,     0,     0,    14,    15,    16,    17,     0,     0,     0,
+       0,     0,   -78,    20,     0,     0,     0,     0,     0,    21,
+      22,     0,    23,     0,    24,     0,     0,    25,    26,     0,
+      61,     0,     0,    76,   -78,    77,   201,     0,     4,     5,
+       0,     0,     6,     7,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   202,     0,   203,   204,   205,
+     -77,   -77,   206,   207,   208,   209,   210,   211,   212,   213,
+     214,     0,     0,     0,    13,   215,     0,     0,     0,    14,
+      15,    16,    17,     0,     0,     0,     0,     0,   -77,    20,
+       0,     0,     0,     0,     0,    21,    22,     0,    23,     0,
+      24,     0,     0,    25,    26,     0,    61,     0,     0,    76,
+     -77,    77,   201,     0,     4,     5,     0,     0,     6,     7,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     202,     0,   203,   204,   205,     0,     0,   206,   207,   208,
-     209,   210,   211,   212,   213,   214,     0,     4,     5,    13,
-     215,     6,     7,     0,    14,    15,    16,    17,     0,     0,
-       0,     0,     0,     0,    20,     0,     0,     0,     0,     0,
-      21,    22,     0,    23,     0,    24,     0,     0,    25,    26,
-       0,    61,     0,    13,    76,     0,    77,     0,    14,    15,
-      16,    17,     0,   118,     0,     4,     5,     0,    20,     6,
-       7,   119,     0,     0,    21,    22,     0,    23,     0,    24,
-       0,     0,    25,    26,     0,    61,     0,     0,     0,     0,
-      77,   229,     0,     4,     5,     0,     0,     6,     7,   119,
-       0,    13,     0,     0,     0,     0,    14,    15,    16,    17,
-       0,     0,     0,     0,     0,     0,    20,     0,     0,     0,
-       0,     0,    21,    22,     0,    23,     0,    24,     0,    13,
-      25,    26,  -117,    61,    14,    15,    16,    17,     0,    69,
-       0,     4,     5,     0,    20,     6,     7,     0,     0,     0,
-      21,    22,     0,    23,     0,    24,     0,     0,    25,    26,
-       0,    61,     0,     0,     0,     0,     0,   193,     0,     4,
-       5,     0,     0,     6,     7,     0,     0,    13,     0,     0,
-       0,     0,    14,    15,    16,    17,     0,     0,     0,     0,
-       0,     0,    20,     0,     0,     0,     0,     0,    21,    22,
-       0,    23,     0,    24,     0,    13,    25,    26,     0,    61,
-      14,    15,    16,    17,     0,     0,     0,     0,     4,   268,
-      20,     0,     6,     7,     0,     0,    21,    22,     0,    23,
-       0,    24,     0,     0,    25,    26,     0,    61,   204,     0,
-       0,     0,     0,     0,     0,     0,     0,   211,   212,     0,
-       0,     0,     4,     5,    13,     0,     6,     7,     0,    14,
-      15,    16,    17,     0,     0,     0,     0,     0,     0,    20,
-       0,     0,   204,     0,     0,    21,    22,     0,    23,     0,
-      24,   211,   212,    25,    26,     0,    61,     0,    13,     0,
-       0,     0,     0,    14,    15,    16,    17,     4,     5,     0,
-       0,     6,     7,    20,     0,     0,    98,     0,     0,    21,
+       0,   202,     0,   203,   204,   205,     0,     0,   206,   207,
+     208,   209,   210,   211,   212,   213,   214,     0,     0,     0,
+      13,   215,     0,     0,     0,    14,    15,    16,    17,     0,
+      69,     0,     4,     5,     0,    20,     6,     7,     0,     0,
+    -109,    21,    22,     0,    23,     0,    24,     0,     0,    25,
+      26,     0,    61,     0,     0,    76,   216,    77,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    13,     0,
+       0,     0,     0,    14,    15,    16,    17,     0,     0,     0,
+       0,     0,  -109,    20,     0,     0,     0,     0,     0,    21,
+      22,     0,    23,     0,    24,     0,     0,    25,   273,  -109,
+      61,     0,     4,     5,     0,  -109,     6,     7,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   202,
+       0,   203,   204,   205,     0,     0,   206,   207,   208,   209,
+     210,   211,   212,   213,   214,     0,     4,     5,    13,   215,
+       6,     7,     0,    14,    15,    16,    17,     0,     0,     0,
+       0,     0,     0,    20,     0,     0,     0,     0,     0,    21,
+      22,     0,    23,     0,    24,     0,     0,    25,    26,     0,
+      61,     0,    13,    76,     0,    77,     0,    14,    15,    16,
+      17,     0,   118,     0,     4,     5,     0,    20,     6,     7,
+     119,     0,     0,    21,    22,     0,    23,     0,    24,     0,
+       0,    25,    26,     0,    61,     0,     0,     0,     0,    77,
+     229,     0,     4,     5,     0,     0,     6,     7,   119,     0,
+      13,     0,     0,     0,     0,    14,    15,    16,    17,     0,
+       0,     0,     0,     0,     0,    20,     0,     0,     0,     0,
+       0,    21,    22,     0,    23,     0,    24,     0,    13,    25,
+      26,  -117,    61,    14,    15,    16,    17,     0,    69,     0,
+       4,     5,     0,    20,     6,     7,     0,     0,     0,    21,
       22,     0,    23,     0,    24,     0,     0,    25,    26,     0,
-      61,     0,     0,     0,     0,     4,     5,     0,     0,     6,
-       7,   119,     0,    13,     0,     0,     0,     0,    14,    15,
-      16,    17,     0,     0,     0,     0,     0,    86,    20,     0,
-       0,     0,    87,     0,    21,    22,     0,    23,     0,    24,
-       0,    13,    25,    26,     0,    61,    14,    15,    16,    17,
-       4,     5,     0,     0,     6,     7,    20,     0,    88,    89,
-      90,     0,    21,    22,     0,    23,     0,    24,     0,     0,
-      25,    26,    91,    61,    92,    93,    94,     0,     4,     5,
+      61,     0,     0,     0,     0,     0,   193,     0,     4,     5,
        0,     0,     6,     7,     0,     0,    13,     0,     0,     0,
        0,    14,    15,    16,    17,     0,     0,     0,     0,     0,
-      86,    20,     0,     0,     0,    87,     0,    21,    22,     0,
-      23,     0,    24,     0,     0,    25,    26,     0,    61,    14,
-      15,    16,    17,    86,     0,     0,     0,     0,    87,    20,
-       0,    88,    89,    90,     0,    21,    22,     0,    23,     0,
-      24,     0,    86,    25,    66,    91,    61,    87,    93,    94,
-       0,     0,     0,     0,    88,    89,    90,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    77,     0,    91,   226,
-       0,    93,    94,    88,    89,    90,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    91,     0,     0,
-      93,    94
+       0,    20,     0,     0,     0,     0,     0,    21,    22,     0,
+      23,     0,    24,     0,    13,    25,    26,     0,    61,    14,
+      15,    16,    17,     0,     0,     0,     0,     4,   269,    20,
+       0,     6,     7,     0,     0,    21,    22,     0,    23,     0,
+      24,     0,     0,    25,    26,     0,    61,   204,     0,     0,
+       0,     0,     0,     0,     0,     0,   211,   212,     0,     0,
+       0,     4,     5,    13,     0,     6,     7,     0,    14,    15,
+      16,    17,     0,     0,     0,     0,     0,     0,    20,     0,
+       0,   204,     0,     0,    21,    22,     0,    23,     0,    24,
+     211,   212,    25,    26,     0,    61,     0,    13,     0,     0,
+       0,     0,    14,    15,    16,    17,     4,     5,     0,     0,
+       6,     7,    20,     0,     0,    98,     0,     0,    21,    22,
+       0,    23,     0,    24,     0,     0,    25,    26,     0,    61,
+       0,     0,     0,     0,     4,     5,     0,     0,     6,     7,
+     119,     0,    13,     0,     0,     0,     0,    14,    15,    16,
+      17,     0,     0,     0,     0,     0,    86,    20,     0,     0,
+       0,    87,     0,    21,    22,     0,    23,     0,    24,     0,
+      13,    25,    26,     0,    61,    14,    15,    16,    17,     4,
+       5,     0,     0,     6,     7,    20,     0,    88,    89,    90,
+       0,    21,    22,     0,    23,     0,    24,     0,     0,    25,
+      26,    91,    61,     0,    93,    94,     0,     4,     5,     0,
+       0,     6,     7,     0,     0,    13,   140,     0,     0,     0,
+      14,    15,    16,    17,     0,     0,     0,     0,     0,    86,
+      20,     0,     0,     0,    87,     0,    21,    22,     0,    23,
+       0,    24,     0,     0,    25,    26,     0,    61,    14,    15,
+      16,    17,    86,     0,     0,     0,     0,    87,    20,     0,
+      88,    89,    90,     0,    21,    22,     0,    23,     0,    24,
+       0,    86,    25,    66,    91,    61,    87,    93,    94,     0,
+       0,    86,     0,    88,    89,    90,    87,     0,     0,     0,
+       0,     0,     0,     0,     0,    77,     0,    91,     0,    92,
+      93,    94,    88,    89,    90,     0,     0,     0,     0,     0,
+       0,     0,    88,    89,    90,     0,    91,   226,     0,    93,
+      94,     0,     0,     0,     0,     0,    91,     0,     0,    93,
+      94
 };
 
 static const yytype_int16 yycheck[] =
 {
-       1,    44,    29,    30,    46,    70,     1,    88,   223,   243,
-      87,    13,    14,    15,     1,     1,     4,    17,    41,    21,
-      22,    27,    24,    25,    69,    26,    34,     4,     1,     1,
-      69,     4,     4,    35,    29,     1,   113,   319,    21,    22,
-       1,    24,    43,    44,    72,     1,   328,    82,     1,    72,
-       6,    69,    35,     6,    74,    61,   121,    92,    59,    60,
-       1,     1,    44,    45,    53,    66,     6,   253,   133,   134,
-      57,    57,    72,   146,     1,    50,   149,     1,    69,   152,
-      58,    69,     3,    70,    70,   319,    87,    53,    89,    90,
-      91,    68,    53,   155,   328,    96,    97,    70,   100,   101,
+       1,    44,    29,    30,    70,    34,   243,    88,    46,     1,
+      87,    13,    14,    15,     4,   223,     1,     4,    17,    21,
+      22,    10,    24,    25,    69,    26,    41,   184,   185,    27,
+      53,    72,     1,    35,    82,     1,   113,     6,    21,    22,
+     253,    24,    43,    44,    92,   320,     1,     1,     1,     4,
+       4,    74,    35,    76,   329,   121,    69,    72,    59,    60,
+       1,    53,    69,    61,    74,    66,     1,   133,   134,    58,
+      59,     6,    57,    72,     1,     1,    29,    17,     1,    69,
+     237,    68,    53,   320,    76,    70,    87,    53,    89,    90,
+      91,   146,   329,   122,   149,    96,    97,   152,   100,   101,
      102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
-      76,   192,    53,    67,   122,    76,   117,   100,   101,   102,
+      76,   192,    53,   326,    50,    70,   117,   100,   101,   102,
      103,   104,   105,   106,   107,   108,   109,   110,   111,   131,
-      57,   346,    17,    57,   349,    76,   209,   210,   139,   325,
-     213,   142,   215,    70,    53,    10,   219,    53,   131,    73,
-      15,   146,    53,     1,   149,    10,     5,   152,    44,    45,
-      59,    60,   224,     3,     4,   167,     4,    76,   233,   184,
-     185,    39,   207,    74,   247,    76,    41,    25,    26,     9,
-     242,   216,    14,   184,   185,    41,    70,    72,    69,   262,
-     225,   253,    69,    58,    59,    69,   261,    69,    76,    10,
-     265,   266,     4,    58,    59,    53,    46,    47,   270,   252,
-     291,    70,   242,   214,   209,   210,    11,    27,   213,   254,
-     215,   263,    69,   258,   219,   226,   234,    75,   293,   272,
-      21,    71,    56,    75,   296,   236,   237,   302,   300,   240,
-     241,   303,   284,     7,   309,   322,   281,    58,    59,   311,
-       7,   252,   247,   288,   289,   317,    30,   292,   320,   322,
-       3,   237,    25,   167,   329,   305,   296,   262,   284,   337,
-     300,   272,   299,    -1,    -1,   310,   341,   312,    -1,   314,
-     315,   316,    -1,   318,    -1,    -1,   348,   317,   350,   351,
-     320,   353,    62,    63,    64,    -1,    10,    67,    -1,    -1,
-     301,    15,   303,   305,   339,    -1,    49,   342,    51,    52,
-     345,   313,   347,    -1,    -1,    -1,     0,     1,   348,     3,
-       4,   351,    -1,     7,     8,    -1,     1,    41,    42,    43,
-     313,    -1,    -1,    -1,    18,    19,    11,    -1,    -1,    -1,
-      -1,    55,    13,    14,    58,    59,    -1,    -1,    -1,     7,
-       8,     9,    36,    37,    38,    39,    70,    -1,    -1,    -1,
-      44,    45,    46,    47,    48,    -1,    -1,    -1,    -1,    53,
-      54,    -1,    -1,    44,    45,    -1,    60,    61,    53,    63,
-      -1,    65,    57,    54,    68,    69,    -1,    71,    -1,    -1,
-      74,     1,    76,     3,     4,    70,    54,     7,     8,    -1,
-      -1,    76,    60,    61,    -1,    63,    -1,    -1,    -1,    -1,
-      20,    -1,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    -1,    -1,    -1,    39,
-      40,    -1,    -1,    -1,    44,    45,    46,    47,    60,    61,
-      62,    63,    64,    53,    54,    67,    -1,    -1,    -1,    -1,
-      60,    61,    -1,    63,    -1,    65,    -1,    -1,    68,    69,
-      -1,    71,    -1,    -1,    74,    75,    76,     1,    -1,     3,
-       4,    -1,    -1,     7,     8,    60,    61,    62,    63,    64,
-      -1,    -1,    67,    -1,    -1,    -1,    20,    -1,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    -1,    -1,    -1,    39,    40,    -1,    -1,    -1,
-      44,    45,    46,    47,    -1,    -1,    -1,    -1,    -1,    53,
-      54,    -1,    -1,    -1,    -1,    -1,    60,    61,    -1,    63,
-      -1,    65,    -1,    -1,    68,    69,    -1,    71,    -1,    -1,
-      74,    75,    76,     1,    -1,     3,     4,    -1,    -1,     7,
-       8,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    20,    -1,    22,    23,    24,    -1,    -1,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    -1,    -1,
-      -1,    39,    40,    -1,    -1,    -1,    44,    45,    46,    47,
-      10,     1,    -1,     3,     4,    15,    54,     7,     8,    -1,
-      -1,    11,    60,    61,    -1,    63,    -1,    65,    -1,    -1,
-      68,    69,    -1,    71,    -1,    -1,    74,    75,    76,    -1,
-      -1,    41,    42,    -1,    -1,    -1,    -1,    -1,    -1,    39,
-      -1,    -1,    -1,    -1,    44,    45,    46,    47,    58,    59,
-      -1,    -1,    -1,    53,    54,    -1,    -1,    -1,    -1,    -1,
-      60,    61,    -1,    63,    -1,    65,    -1,    -1,    68,    69,
-      70,    71,    -1,     3,     4,    -1,    76,     7,     8,    -1,
+      57,    57,    72,   155,    57,    76,     3,     4,   139,   347,
+      10,   142,   350,    53,    70,    15,    73,    70,   131,    10,
+      13,    14,     1,    69,   209,   210,    58,     6,   213,   207,
+     215,    44,    45,     1,   219,   167,    76,   233,   216,    44,
+      45,    41,    42,    11,   242,     3,     3,   225,    67,    46,
+      47,    44,    45,   184,   185,    62,    63,    64,    58,    59,
+      67,    54,   247,   146,    53,   261,   149,    58,    59,   152,
+     266,   267,   224,     5,    71,   234,   254,     4,   263,   252,
+     258,   292,    70,   214,    39,    53,    59,    60,     9,    57,
+     242,    49,    14,    51,    52,   226,   264,    41,   294,   297,
+     273,   253,    70,   301,   282,   236,   237,   303,    76,   240,
+     241,   289,   290,    69,   310,   293,   323,   285,    69,   271,
+     318,   252,    69,   321,    69,     4,   209,   210,    76,    70,
+     213,     1,   215,   311,   330,   313,   219,   315,   316,   317,
+      27,   319,   273,   300,    11,   297,   342,    21,    56,   301,
+      69,   349,   304,    30,   352,    25,    26,    75,     7,     7,
+     312,   323,   340,    25,   247,   343,   318,    10,   346,   321,
+     348,   302,    15,   304,   306,   167,   306,   285,   338,    -1,
+     263,    -1,   314,    53,    -1,     0,     1,    -1,     3,     4,
+      -1,    -1,     7,     8,    -1,    -1,    -1,   349,    41,   351,
+     352,   314,   354,    18,    19,    75,    60,    61,    62,    63,
+      64,    -1,    -1,    67,    -1,    58,    59,     7,     8,     9,
+      -1,    36,    37,    38,    39,    -1,    -1,    -1,    -1,    44,
+      45,    46,    47,    48,    -1,    -1,    -1,    -1,    53,    54,
+      60,    61,    62,    63,    64,    60,    61,    67,    63,    -1,
+      65,    -1,    -1,    68,    69,    -1,    71,    -1,    -1,    74,
+       1,    76,     3,     4,    54,    -1,     7,     8,    -1,    -1,
+      60,    61,    -1,    63,    -1,    -1,    -1,    -1,    -1,    20,
+      -1,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    -1,    -1,    -1,    39,    40,
+      -1,    -1,    -1,    44,    45,    46,    47,    -1,    -1,    -1,
+      -1,    -1,    53,    54,    -1,    -1,    -1,    -1,    -1,    60,
+      61,    -1,    63,    -1,    65,    -1,    -1,    68,    69,    -1,
+      71,    -1,    -1,    74,    75,    76,     1,    -1,     3,     4,
+      -1,    -1,     7,     8,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    20,    -1,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    -1,    -1,    -1,    39,    40,    -1,    -1,    -1,    44,
+      45,    46,    47,    -1,    -1,    -1,    -1,    -1,    53,    54,
+      -1,    -1,    -1,    -1,    -1,    60,    61,    -1,    63,    -1,
+      65,    -1,    -1,    68,    69,    -1,    71,    -1,    -1,    74,
+      75,    76,     1,    -1,     3,     4,    -1,    -1,     7,     8,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      20,    -1,    22,    23,    24,    -1,    -1,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    -1,     3,     4,    39,
-      40,     7,     8,    -1,    44,    45,    46,    47,    -1,    -1,
-      -1,    -1,    -1,    -1,    54,    -1,    -1,    -1,    -1,    -1,
-      60,    61,    -1,    63,    -1,    65,    -1,    -1,    68,    69,
-      -1,    71,    -1,    39,    74,    -1,    76,    -1,    44,    45,
-      46,    47,    -1,     1,    -1,     3,     4,    -1,    54,     7,
-       8,     9,    -1,    -1,    60,    61,    -1,    63,    -1,    65,
-      -1,    -1,    68,    69,    -1,    71,    -1,    -1,    -1,    -1,
-      76,     1,    -1,     3,     4,    -1,    -1,     7,     8,     9,
-      -1,    39,    -1,    -1,    -1,    -1,    44,    45,    46,    47,
-      -1,    -1,    -1,    -1,    -1,    -1,    54,    -1,    -1,    -1,
-      -1,    -1,    60,    61,    -1,    63,    -1,    65,    -1,    39,
-      68,    69,    70,    71,    44,    45,    46,    47,    -1,     1,
-      -1,     3,     4,    -1,    54,     7,     8,    -1,    -1,    -1,
-      60,    61,    -1,    63,    -1,    65,    -1,    -1,    68,    69,
-      -1,    71,    -1,    -1,    -1,    -1,    -1,     1,    -1,     3,
-       4,    -1,    -1,     7,     8,    -1,    -1,    39,    -1,    -1,
-      -1,    -1,    44,    45,    46,    47,    -1,    -1,    -1,    -1,
-      -1,    -1,    54,    -1,    -1,    -1,    -1,    -1,    60,    61,
-      -1,    63,    -1,    65,    -1,    39,    68,    69,    -1,    71,
-      44,    45,    46,    47,    -1,    -1,    -1,    -1,     3,     4,
-      54,    -1,     7,     8,    -1,    -1,    60,    61,    -1,    63,
-      -1,    65,    -1,    -1,    68,    69,    -1,    71,    23,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    32,    33,    -1,
-      -1,    -1,     3,     4,    39,    -1,     7,     8,    -1,    44,
-      45,    46,    47,    -1,    -1,    -1,    -1,    -1,    -1,    54,
-      -1,    -1,    23,    -1,    -1,    60,    61,    -1,    63,    -1,
-      65,    32,    33,    68,    69,    -1,    71,    -1,    39,    -1,
-      -1,    -1,    -1,    44,    45,    46,    47,     3,     4,    -1,
-      -1,     7,     8,    54,    -1,    -1,    12,    -1,    -1,    60,
+      -1,    20,    -1,    22,    23,    24,    -1,    -1,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    -1,    -1,    -1,
+      39,    40,    -1,    -1,    -1,    44,    45,    46,    47,    -1,
+       1,    -1,     3,     4,    -1,    54,     7,     8,    -1,    -1,
+      11,    60,    61,    -1,    63,    -1,    65,    -1,    -1,    68,
+      69,    -1,    71,    -1,    -1,    74,    75,    76,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,
+      -1,    -1,    -1,    44,    45,    46,    47,    -1,    -1,    -1,
+      -1,    -1,    53,    54,    -1,    -1,    -1,    -1,    -1,    60,
+      61,    -1,    63,    -1,    65,    -1,    -1,    68,    69,    70,
+      71,    -1,     3,     4,    -1,    76,     7,     8,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    20,
+      -1,    22,    23,    24,    -1,    -1,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    -1,     3,     4,    39,    40,
+       7,     8,    -1,    44,    45,    46,    47,    -1,    -1,    -1,
+      -1,    -1,    -1,    54,    -1,    -1,    -1,    -1,    -1,    60,
+      61,    -1,    63,    -1,    65,    -1,    -1,    68,    69,    -1,
+      71,    -1,    39,    74,    -1,    76,    -1,    44,    45,    46,
+      47,    -1,     1,    -1,     3,     4,    -1,    54,     7,     8,
+       9,    -1,    -1,    60,    61,    -1,    63,    -1,    65,    -1,
+      -1,    68,    69,    -1,    71,    -1,    -1,    -1,    -1,    76,
+       1,    -1,     3,     4,    -1,    -1,     7,     8,     9,    -1,
+      39,    -1,    -1,    -1,    -1,    44,    45,    46,    47,    -1,
+      -1,    -1,    -1,    -1,    -1,    54,    -1,    -1,    -1,    -1,
+      -1,    60,    61,    -1,    63,    -1,    65,    -1,    39,    68,
+      69,    70,    71,    44,    45,    46,    47,    -1,     1,    -1,
+       3,     4,    -1,    54,     7,     8,    -1,    -1,    -1,    60,
       61,    -1,    63,    -1,    65,    -1,    -1,    68,    69,    -1,
-      71,    -1,    -1,    -1,    -1,     3,     4,    -1,    -1,     7,
-       8,     9,    -1,    39,    -1,    -1,    -1,    -1,    44,    45,
-      46,    47,    -1,    -1,    -1,    -1,    -1,    10,    54,    -1,
-      -1,    -1,    15,    -1,    60,    61,    -1,    63,    -1,    65,
-      -1,    39,    68,    69,    -1,    71,    44,    45,    46,    47,
-       3,     4,    -1,    -1,     7,     8,    54,    -1,    41,    42,
-      43,    -1,    60,    61,    -1,    63,    -1,    65,    -1,    -1,
-      68,    69,    55,    71,    57,    58,    59,    -1,     3,     4,
+      71,    -1,    -1,    -1,    -1,    -1,     1,    -1,     3,     4,
       -1,    -1,     7,     8,    -1,    -1,    39,    -1,    -1,    -1,
       -1,    44,    45,    46,    47,    -1,    -1,    -1,    -1,    -1,
-      10,    54,    -1,    -1,    -1,    15,    -1,    60,    61,    -1,
-      63,    -1,    65,    -1,    -1,    68,    69,    -1,    71,    44,
-      45,    46,    47,    10,    -1,    -1,    -1,    -1,    15,    54,
-      -1,    41,    42,    43,    -1,    60,    61,    -1,    63,    -1,
-      65,    -1,    10,    68,    69,    55,    71,    15,    58,    59,
-      -1,    -1,    -1,    -1,    41,    42,    43,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    76,    -1,    55,    56,
-      -1,    58,    59,    41,    42,    43,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    55,    -1,    -1,
-      58,    59
+      -1,    54,    -1,    -1,    -1,    -1,    -1,    60,    61,    -1,
+      63,    -1,    65,    -1,    39,    68,    69,    -1,    71,    44,
+      45,    46,    47,    -1,    -1,    -1,    -1,     3,     4,    54,
+      -1,     7,     8,    -1,    -1,    60,    61,    -1,    63,    -1,
+      65,    -1,    -1,    68,    69,    -1,    71,    23,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    32,    33,    -1,    -1,
+      -1,     3,     4,    39,    -1,     7,     8,    -1,    44,    45,
+      46,    47,    -1,    -1,    -1,    -1,    -1,    -1,    54,    -1,
+      -1,    23,    -1,    -1,    60,    61,    -1,    63,    -1,    65,
+      32,    33,    68,    69,    -1,    71,    -1,    39,    -1,    -1,
+      -1,    -1,    44,    45,    46,    47,     3,     4,    -1,    -1,
+       7,     8,    54,    -1,    -1,    12,    -1,    -1,    60,    61,
+      -1,    63,    -1,    65,    -1,    -1,    68,    69,    -1,    71,
+      -1,    -1,    -1,    -1,     3,     4,    -1,    -1,     7,     8,
+       9,    -1,    39,    -1,    -1,    -1,    -1,    44,    45,    46,
+      47,    -1,    -1,    -1,    -1,    -1,    10,    54,    -1,    -1,
+      -1,    15,    -1,    60,    61,    -1,    63,    -1,    65,    -1,
+      39,    68,    69,    -1,    71,    44,    45,    46,    47,     3,
+       4,    -1,    -1,     7,     8,    54,    -1,    41,    42,    43,
+      -1,    60,    61,    -1,    63,    -1,    65,    -1,    -1,    68,
+      69,    55,    71,    -1,    58,    59,    -1,     3,     4,    -1,
+      -1,     7,     8,    -1,    -1,    39,    70,    -1,    -1,    -1,
+      44,    45,    46,    47,    -1,    -1,    -1,    -1,    -1,    10,
+      54,    -1,    -1,    -1,    15,    -1,    60,    61,    -1,    63,
+      -1,    65,    -1,    -1,    68,    69,    -1,    71,    44,    45,
+      46,    47,    10,    -1,    -1,    -1,    -1,    15,    54,    -1,
+      41,    42,    43,    -1,    60,    61,    -1,    63,    -1,    65,
+      -1,    10,    68,    69,    55,    71,    15,    58,    59,    -1,
+      -1,    10,    -1,    41,    42,    43,    15,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    76,    -1,    55,    -1,    57,
+      58,    59,    41,    42,    43,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    41,    42,    43,    -1,    55,    56,    -1,    58,
+      59,    -1,    -1,    -1,    -1,    -1,    55,    -1,    -1,    58,
+      59
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1392,39 +1395,39 @@ static const yytype_uint8 yystos[] =
        0,    78,     0,     1,     3,     4,     7,     8,    18,    19,
       36,    37,    38,    39,    44,    45,    46,    47,    48,    53,
       54,    60,    61,    63,    65,    68,    69,    71,    79,    83,
-      87,    89,    92,   110,   121,   125,   126,   127,   128,   129,
-     130,   138,   139,    69,    72,   135,   136,   137,     3,     4,
-      46,    47,    71,    85,    86,   131,   139,   139,   139,    69,
-      69,    71,   126,   139,   126,   126,    69,   128,   139,     1,
-     117,   121,    49,    51,    52,   130,    74,    76,    84,    94,
-     110,   141,   145,    84,    90,    53,    10,    15,    41,    42,
-      43,    55,    57,    58,    59,   123,   124,   147,    12,   126,
+      87,    89,    92,   110,   122,   126,   127,   128,   129,   130,
+     131,   139,   140,    69,    72,   136,   137,   138,     3,     4,
+      46,    47,    71,    85,    86,   132,   140,   140,   140,    69,
+      69,    71,   127,   140,   127,   127,    69,   129,   140,     1,
+     117,   122,    49,    51,    52,   131,    74,    76,    84,    94,
+     110,   142,   146,    84,    90,    53,    10,    15,    41,    42,
+      43,    55,    57,    58,    59,   124,   125,   148,    12,   127,
       60,    61,    62,    63,    64,    67,    60,    61,    62,    63,
-      64,    67,    13,    14,    44,    45,    54,   122,     1,     9,
-      91,   118,   119,   120,   121,   117,   121,    17,   135,    50,
-      69,    58,   112,   118,   118,   121,    44,    45,   140,     1,
-      70,   143,   147,   143,     1,     6,    80,     1,     6,    81,
-       1,     6,    82,   110,   111,    93,   111,     5,    91,   121,
-     138,   121,   121,   121,   111,   121,   121,    39,   126,   126,
-     126,   126,   126,   126,   126,   126,   126,   126,   126,   126,
-      91,    14,   121,   143,     1,   147,    73,    88,   126,   143,
-     143,   121,    41,     1,   121,     1,    94,     1,    94,     1,
+      64,    67,    13,    14,    44,    45,    54,   123,     1,     9,
+      91,   118,   119,   120,   122,   117,   122,    17,   136,    50,
+      69,    58,   112,   118,   118,   122,    44,    45,   141,     1,
+      70,   144,   148,   144,     1,     6,    80,     1,     6,    81,
+       1,     6,    82,   110,   111,    93,   111,     5,    91,   122,
+     139,   122,   122,   122,   111,   122,   122,    39,   127,   127,
+     127,   127,   127,   127,   127,   127,   127,   127,   127,   127,
+      91,    14,   122,   144,     1,   148,    73,    88,   127,   144,
+     144,   122,    41,     1,   122,     1,    94,     1,    94,     1,
       94,     1,    20,    22,    23,    24,    27,    28,    29,    30,
       31,    32,    33,    34,    35,    40,    75,    95,    96,    98,
-     105,   109,   121,   141,   142,   145,    56,   131,   120,     1,
-     120,     1,     4,   113,   114,   138,    69,    97,     4,    69,
-      69,    69,   111,    69,    94,    94,    94,   115,   121,    94,
-     111,    94,    99,    93,   144,   145,   111,   121,   143,     1,
-     147,   121,   115,   100,     4,   121,   121,    95,     4,    98,
-     101,    94,    69,   106,   116,   117,   142,   111,   111,     1,
-       4,   143,    94,   132,   133,   134,   135,    70,   143,   143,
-      27,    41,   145,   117,    11,   107,   111,    17,   134,   111,
-     111,    69,   138,   111,   143,   108,    95,   141,    95,   121,
-     143,   121,   145,   125,    21,   102,   143,   111,   145,   111,
-     111,     1,    25,    26,   103,   111,   111,    95,   111,   101,
-      95,     7,     8,    60,    61,    89,    91,   104,    56,   146,
-     142,   101,   143,     7,     7,   146,   111,   143,   111,   111,
-      93,   111,    95,    93,    95
+     105,   109,   122,   142,   143,   146,    56,   132,   120,     1,
+     120,     1,     4,   113,   114,   139,    69,    97,     4,    69,
+      69,    69,   111,    69,    94,    94,    94,   115,   122,    94,
+     111,    94,    99,    93,   145,   146,   111,   122,   144,     1,
+     148,   122,   120,   121,   100,     4,   122,   122,    95,     4,
+      98,   101,    94,    69,   106,   116,   117,   143,   111,   111,
+       1,     4,   144,    94,   133,   134,   135,   136,    70,   144,
+     144,    27,    41,   146,   117,    11,   107,   111,    17,   135,
+     111,   111,    69,   139,   111,   144,   108,    95,   142,    95,
+     122,   144,   122,   146,   126,    21,   102,   144,   111,   146,
+     111,   111,     1,    25,    26,   103,   111,   111,    95,   111,
+     101,    95,     7,     8,    60,    61,    89,    91,   104,    56,
+     147,   143,   101,   144,     7,     7,   147,   111,   144,   111,
+     111,    93,   111,    95,    93,    95
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
@@ -1442,15 +1445,15 @@ static const yytype_uint8 yyr1[] =
      108,   107,   109,   109,   110,   110,   111,   111,   112,   112,
      113,   113,   114,   114,   114,   114,   114,   115,   115,   116,
      116,   117,   117,   117,   117,   117,   117,   118,   118,   119,
-     119,   119,   119,   119,   119,   120,   120,   121,   121,   121,
-     121,   121,   121,   121,   121,   121,   121,   122,   122,   122,
-     123,   123,   124,   124,   125,   125,   125,   126,   126,   126,
-     126,   126,   126,   126,   126,   126,   126,   126,   127,   127,
-     127,   127,   127,   127,   127,   128,   128,   128,   128,   128,
-     128,   128,   128,   128,   128,   128,   128,   128,   128,   129,
-     129,   130,   131,   131,   132,   132,   133,   133,   134,   135,
-     136,   136,   137,   138,   138,   139,   139,   140,   140,   140,
-     141,   142,   143,   144,   144,   145,   146,   147
+     119,   119,   119,   119,   119,   120,   120,   121,   121,   122,
+     122,   122,   122,   122,   122,   122,   122,   122,   122,   123,
+     123,   123,   124,   124,   125,   125,   126,   126,   126,   127,
+     127,   127,   127,   127,   127,   127,   127,   127,   127,   127,
+     128,   128,   128,   128,   128,   128,   128,   129,   129,   129,
+     129,   129,   129,   129,   129,   129,   129,   129,   129,   129,
+     129,   130,   130,   131,   132,   132,   133,   133,   134,   134,
+     135,   136,   137,   137,   138,   139,   139,   140,   140,   141,
+     141,   141,   142,   143,   144,   145,   145,   146,   147,   148
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -1468,15 +1471,15 @@ static const yytype_int8 yyr2[] =
        0,     3,     6,     9,     1,     2,     0,     1,     0,     2,
        0,     1,     1,     3,     1,     2,     3,     0,     1,     0,
        1,     1,     3,     1,     2,     3,     3,     0,     1,     1,
-       3,     1,     2,     3,     3,     1,     1,     3,     3,     3,
-       3,     3,     3,     3,     3,     5,     1,     1,     1,     2,
-       1,     1,     1,     1,     1,     1,     2,     1,     3,     3,
-       3,     3,     3,     3,     3,     2,     2,     5,     4,     3,
-       3,     3,     3,     3,     3,     1,     2,     3,     4,     4,
-       1,     1,     1,     2,     2,     1,     1,     2,     2,     1,
-       2,     4,     0,     1,     0,     2,     1,     2,     1,     3,
-       1,     2,     2,     1,     2,     1,     3,     1,     1,     0,
-       2,     2,     1,     0,     1,     1,     1,     2
+       3,     1,     2,     3,     3,     1,     1,     0,     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
 };
 
 
@@ -1959,7 +1962,7 @@ yyreduce:
   case 2:
 #line 232 "awkgram.y"
           { yyval = NULL; }
-#line 1963 "awkgram.c"
+#line 1966 "awkgram.c"
     break;
 
   case 3:
@@ -1968,7 +1971,7 @@ yyreduce:
                rule = 0;
                yyerrok;
          }
-#line 1972 "awkgram.c"
+#line 1975 "awkgram.c"
     break;
 
   case 4:
@@ -1982,7 +1985,7 @@ yyreduce:
                }
                yyval = yyvsp[-1];
          }
-#line 1986 "awkgram.c"
+#line 1989 "awkgram.c"
     break;
 
   case 5:
@@ -1990,7 +1993,7 @@ yyreduce:
           {
                next_sourcefile();
          }
-#line 1994 "awkgram.c"
+#line 1997 "awkgram.c"
     break;
 
   case 6:
@@ -2003,7 +2006,7 @@ yyreduce:
                 */
                /* yyerrok; */
          }
-#line 2007 "awkgram.c"
+#line 2010 "awkgram.c"
     break;
 
   case 7:
@@ -2015,7 +2018,7 @@ yyreduce:
                        pending_comment = NULL;
                }
          }
-#line 2019 "awkgram.c"
+#line 2022 "awkgram.c"
     break;
 
   case 8:
@@ -2033,7 +2036,7 @@ yyreduce:
                        (void) append_rule(yyvsp[-1], NULL);
                }
          }
-#line 2037 "awkgram.c"
+#line 2040 "awkgram.c"
     break;
 
   case 9:
@@ -2048,7 +2051,7 @@ yyreduce:
                }
                yyerrok;
          }
-#line 2052 "awkgram.c"
+#line 2055 "awkgram.c"
     break;
 
   case 10:
@@ -2062,7 +2065,7 @@ yyreduce:
                }
                yyerrok;
          }
-#line 2066 "awkgram.c"
+#line 2069 "awkgram.c"
     break;
 
   case 11:
@@ -2076,7 +2079,7 @@ yyreduce:
                }
                yyerrok;
          }
-#line 2080 "awkgram.c"
+#line 2083 "awkgram.c"
     break;
 
   case 12:
@@ -2090,7 +2093,7 @@ yyreduce:
 
                yyerrok;
          }
-#line 2094 "awkgram.c"
+#line 2097 "awkgram.c"
     break;
 
   case 13:
@@ -2104,19 +2107,19 @@ yyreduce:
                bcfree(yyvsp[0]);
                yyval = (INSTRUCTION *) srcfile;
          }
-#line 2108 "awkgram.c"
+#line 2111 "awkgram.c"
     break;
 
   case 14:
 #line 341 "awkgram.y"
           { yyval = NULL; }
-#line 2114 "awkgram.c"
+#line 2117 "awkgram.c"
     break;
 
   case 15:
 #line 343 "awkgram.y"
           { yyval = NULL; }
-#line 2120 "awkgram.c"
+#line 2123 "awkgram.c"
     break;
 
   case 16:
@@ -2130,37 +2133,37 @@ yyreduce:
                bcfree(yyvsp[0]);
                yyval = (INSTRUCTION *) srcfile;
          }
-#line 2134 "awkgram.c"
+#line 2137 "awkgram.c"
     break;
 
   case 17:
 #line 358 "awkgram.y"
           { yyval = NULL; }
-#line 2140 "awkgram.c"
+#line 2143 "awkgram.c"
     break;
 
   case 18:
 #line 360 "awkgram.y"
           { yyval = NULL; }
-#line 2146 "awkgram.c"
+#line 2149 "awkgram.c"
     break;
 
   case 19:
 #line 365 "awkgram.y"
           { yyval = yyvsp[0]; }
-#line 2152 "awkgram.c"
+#line 2155 "awkgram.c"
     break;
 
   case 20:
 #line 367 "awkgram.y"
           { yyval = NULL; }
-#line 2158 "awkgram.c"
+#line 2161 "awkgram.c"
     break;
 
   case 21:
 #line 369 "awkgram.y"
           { yyval = NULL; }
-#line 2164 "awkgram.c"
+#line 2167 "awkgram.c"
     break;
 
   case 22:
@@ -2169,7 +2172,7 @@ yyreduce:
                rule = Rule;
                yyval = NULL;
          }
-#line 2173 "awkgram.c"
+#line 2176 "awkgram.c"
     break;
 
   case 23:
@@ -2177,7 +2180,7 @@ yyreduce:
           {
                rule = Rule;
          }
-#line 2181 "awkgram.c"
+#line 2184 "awkgram.c"
     break;
 
   case 24:
@@ -2211,7 +2214,7 @@ yyreduce:
                        yyval = list_append(list_merge(yyvsp[-2], yyvsp[0]), 
tp);
                rule = Rule;
          }
-#line 2215 "awkgram.c"
+#line 2218 "awkgram.c"
     break;
 
   case 25:
@@ -2227,7 +2230,7 @@ yyreduce:
                yyvsp[0]->source_file = source;
                yyval = yyvsp[0];
          }
-#line 2231 "awkgram.c"
+#line 2234 "awkgram.c"
     break;
 
   case 26:
@@ -2243,7 +2246,7 @@ yyreduce:
                yyvsp[0]->source_file = source;
                yyval = yyvsp[0];
          }
-#line 2247 "awkgram.c"
+#line 2250 "awkgram.c"
     break;
 
   case 27:
@@ -2253,7 +2256,7 @@ yyreduce:
                yyvsp[0]->source_file = source;
                yyval = yyvsp[0];
          }
-#line 2257 "awkgram.c"
+#line 2260 "awkgram.c"
     break;
 
   case 28:
@@ -2263,7 +2266,7 @@ yyreduce:
                yyvsp[0]->source_file = source;
                yyval = yyvsp[0];
          }
-#line 2267 "awkgram.c"
+#line 2270 "awkgram.c"
     break;
 
   case 29:
@@ -2282,7 +2285,7 @@ yyreduce:
 
                yyval = ip;
          }
-#line 2286 "awkgram.c"
+#line 2289 "awkgram.c"
     break;
 
   case 31:
@@ -2297,7 +2300,7 @@ yyreduce:
                }
                yyval = yyvsp[0];
          }
-#line 2301 "awkgram.c"
+#line 2304 "awkgram.c"
     break;
 
   case 32:
@@ -2307,7 +2310,7 @@ yyreduce:
                                        tokstart);
                YYABORT;
          }
-#line 2311 "awkgram.c"
+#line 2314 "awkgram.c"
     break;
 
   case 33:
@@ -2316,13 +2319,13 @@ yyreduce:
                yyval = yyvsp[0];
                at_seen = false;
          }
-#line 2320 "awkgram.c"
+#line 2323 "awkgram.c"
     break;
 
   case 36:
 #line 501 "awkgram.y"
                                      { want_param_names = FUNC_HEADER; }
-#line 2326 "awkgram.c"
+#line 2329 "awkgram.c"
     break;
 
   case 37:
@@ -2352,13 +2355,13 @@ yyreduce:
                yyval = yyvsp[-6];
                want_param_names = FUNC_BODY;
          }
-#line 2356 "awkgram.c"
+#line 2359 "awkgram.c"
     break;
 
   case 38:
 #line 535 "awkgram.y"
                 { want_regexp = true; }
-#line 2362 "awkgram.c"
+#line 2365 "awkgram.c"
     break;
 
   case 39:
@@ -2391,7 +2394,7 @@ yyreduce:
                  yyval->opcode = Op_match_rec;
                  yyval->memory = n;
                }
-#line 2395 "awkgram.c"
+#line 2398 "awkgram.c"
     break;
 
   case 40:
@@ -2408,19 +2411,19 @@ yyreduce:
                  yyval->opcode = Op_push_re;
                  yyval->memory = make_typed_regex(re, len);
                }
-#line 2412 "awkgram.c"
+#line 2415 "awkgram.c"
     break;
 
   case 41:
 #line 584 "awkgram.y"
           { bcfree(yyvsp[0]); }
-#line 2418 "awkgram.c"
+#line 2421 "awkgram.c"
     break;
 
   case 43:
 #line 590 "awkgram.y"
           { yyval = NULL; }
-#line 2424 "awkgram.c"
+#line 2427 "awkgram.c"
     break;
 
   case 44:
@@ -2444,25 +2447,25 @@ yyreduce:
 
                yyerrok;
          }
-#line 2448 "awkgram.c"
+#line 2451 "awkgram.c"
     break;
 
   case 45:
 #line 612 "awkgram.y"
           {    yyval = NULL; }
-#line 2454 "awkgram.c"
+#line 2457 "awkgram.c"
     break;
 
   case 46:
 #line 616 "awkgram.y"
                         { yyval = yyvsp[0]; }
-#line 2460 "awkgram.c"
+#line 2463 "awkgram.c"
     break;
 
   case 47:
 #line 617 "awkgram.y"
                         { yyval = yyvsp[0]; }
-#line 2466 "awkgram.c"
+#line 2469 "awkgram.c"
     break;
 
   case 48:
@@ -2477,7 +2480,7 @@ yyreduce:
                } else
                        yyval = NULL;
          }
-#line 2481 "awkgram.c"
+#line 2484 "awkgram.c"
     break;
 
   case 49:
@@ -2486,7 +2489,7 @@ yyreduce:
                trailing_comment = yyvsp[0];    // NULL or comment
                yyval = make_braced_statements(yyvsp[-2], yyvsp[-1], yyvsp[0]);
          }
-#line 2490 "awkgram.c"
+#line 2493 "awkgram.c"
     break;
 
   case 50:
@@ -2497,7 +2500,7 @@ yyreduce:
                else
                        yyval = yyvsp[0];
          }
-#line 2501 "awkgram.c"
+#line 2504 "awkgram.c"
     break;
 
   case 51:
@@ -2609,7 +2612,7 @@ yyreduce:
                break_allowed--;
                fix_break_continue(ip, tbreak, NULL);
          }
-#line 2613 "awkgram.c"
+#line 2616 "awkgram.c"
     break;
 
   case 52:
@@ -2664,7 +2667,7 @@ yyreduce:
                continue_allowed--;
                fix_break_continue(ip, tbreak, tcont);
          }
-#line 2668 "awkgram.c"
+#line 2671 "awkgram.c"
     break;
 
   case 53:
@@ -2718,7 +2721,7 @@ yyreduce:
                /* else
                        $1 and $4 are NULLs */
          }
-#line 2722 "awkgram.c"
+#line 2725 "awkgram.c"
     break;
 
   case 54:
@@ -2848,7 +2851,7 @@ regular_loop:
                break_allowed--;
                continue_allowed--;
          }
-#line 2852 "awkgram.c"
+#line 2855 "awkgram.c"
     break;
 
   case 55:
@@ -2874,7 +2877,7 @@ regular_loop:
                break_allowed--;
                continue_allowed--;
          }
-#line 2878 "awkgram.c"
+#line 2881 "awkgram.c"
     break;
 
   case 56:
@@ -2899,7 +2902,7 @@ regular_loop:
                break_allowed--;
                continue_allowed--;
          }
-#line 2903 "awkgram.c"
+#line 2906 "awkgram.c"
     break;
 
   case 57:
@@ -2910,7 +2913,7 @@ regular_loop:
                else
                        yyval = yyvsp[0];
          }
-#line 2914 "awkgram.c"
+#line 2917 "awkgram.c"
     break;
 
   case 58:
@@ -2924,7 +2927,7 @@ regular_loop:
                if (yyvsp[0] != NULL)
                        yyval = list_append(yyval, yyvsp[0]);
          }
-#line 2928 "awkgram.c"
+#line 2931 "awkgram.c"
     break;
 
   case 59:
@@ -2938,7 +2941,7 @@ regular_loop:
                if (yyvsp[0] != NULL)
                        yyval = list_append(yyval, yyvsp[0]);
          }
-#line 2942 "awkgram.c"
+#line 2945 "awkgram.c"
     break;
 
   case 60:
@@ -2953,7 +2956,7 @@ regular_loop:
                if (yyvsp[0] != NULL)
                        yyval = list_append(yyval, yyvsp[0]);
          }
-#line 2957 "awkgram.c"
+#line 2960 "awkgram.c"
     break;
 
   case 61:
@@ -2970,7 +2973,7 @@ regular_loop:
                if (yyvsp[0] != NULL)
                        yyval = list_append(yyval, yyvsp[0]);
          }
-#line 2974 "awkgram.c"
+#line 2977 "awkgram.c"
     break;
 
   case 62:
@@ -2991,7 +2994,7 @@ regular_loop:
                if (yyvsp[0] != NULL)
                        yyval = list_append(yyval, yyvsp[0]);
          }
-#line 2995 "awkgram.c"
+#line 2998 "awkgram.c"
     break;
 
   case 63:
@@ -3000,12 +3003,12 @@ regular_loop:
                if (! in_function)
                        yyerror(_("`return' used outside function context"));
          }
-#line 3004 "awkgram.c"
+#line 3007 "awkgram.c"
     break;
 
   case 64:
 #line 1097 "awkgram.y"
-                                   {
+                                         {
                if (called_from_eval)
                        yyvsp[-3]->opcode = Op_K_return_from_eval;
 
@@ -3018,7 +3021,7 @@ regular_loop:
                if (yyvsp[0] != NULL)
                        yyval = list_append(yyval, yyvsp[0]);
          }
-#line 3022 "awkgram.c"
+#line 3025 "awkgram.c"
     break;
 
   case 65:
@@ -3029,13 +3032,13 @@ regular_loop:
                else
                        yyval = yyvsp[-1];
          }
-#line 3033 "awkgram.c"
+#line 3036 "awkgram.c"
     break;
 
   case 66:
 #line 1128 "awkgram.y"
                 { in_print = true; in_parens = 0; }
-#line 3039 "awkgram.c"
+#line 3042 "awkgram.c"
     break;
 
   case 67:
@@ -3140,13 +3143,13 @@ regular_print:
                        }
                }
          }
-#line 3144 "awkgram.c"
+#line 3147 "awkgram.c"
     break;
 
   case 68:
 #line 1230 "awkgram.y"
                           { sub_counter = 0; }
-#line 3150 "awkgram.c"
+#line 3153 "awkgram.c"
     break;
 
   case 69:
@@ -3183,7 +3186,7 @@ regular_print:
                        yyval = list_append(list_append(yyvsp[0], yyvsp[-2]), 
yyvsp[-3]);
                }
          }
-#line 3187 "awkgram.c"
+#line 3190 "awkgram.c"
     break;
 
   case 70:
@@ -3213,7 +3216,7 @@ regular_print:
                                fatal(_("`delete' is not allowed with 
FUNCTAB"));
                }
          }
-#line 3217 "awkgram.c"
+#line 3220 "awkgram.c"
     break;
 
   case 71:
@@ -3221,25 +3224,25 @@ regular_print:
           {
                yyval = optimize_assignment(yyvsp[0]);
          }
-#line 3225 "awkgram.c"
+#line 3228 "awkgram.c"
     break;
 
   case 72:
 #line 1301 "awkgram.y"
           { yyval = NULL; }
-#line 3231 "awkgram.c"
+#line 3234 "awkgram.c"
     break;
 
   case 73:
 #line 1303 "awkgram.y"
           { yyval = yyvsp[0]; }
-#line 3237 "awkgram.c"
+#line 3240 "awkgram.c"
     break;
 
   case 74:
 #line 1308 "awkgram.y"
           { yyval = NULL; }
-#line 3243 "awkgram.c"
+#line 3246 "awkgram.c"
     break;
 
   case 75:
@@ -3250,13 +3253,13 @@ regular_print:
                else
                        yyval = list_prepend(yyvsp[-1], yyvsp[0]);
          }
-#line 3254 "awkgram.c"
+#line 3257 "awkgram.c"
     break;
 
   case 76:
 #line 1317 "awkgram.y"
           { yyval = NULL; }
-#line 3260 "awkgram.c"
+#line 3263 "awkgram.c"
     break;
 
   case 77:
@@ -3273,7 +3276,7 @@ regular_print:
                bcfree(yyvsp[-2]);
                yyval = yyvsp[-4];
          }
-#line 3277 "awkgram.c"
+#line 3280 "awkgram.c"
     break;
 
   case 78:
@@ -3289,13 +3292,13 @@ regular_print:
                yyvsp[-3]->comment = yyvsp[-1];
                yyval = yyvsp[-3];
          }
-#line 3293 "awkgram.c"
+#line 3296 "awkgram.c"
     break;
 
   case 79:
 #line 1350 "awkgram.y"
           {    yyval = yyvsp[0]; }
-#line 3299 "awkgram.c"
+#line 3302 "awkgram.c"
     break;
 
   case 80:
@@ -3307,7 +3310,7 @@ regular_print:
                bcfree(yyvsp[-1]);
                yyval = yyvsp[0];
          }
-#line 3311 "awkgram.c"
+#line 3314 "awkgram.c"
     break;
 
   case 81:
@@ -3318,13 +3321,13 @@ regular_print:
                add_sign_to_num(n, '+');
                yyval = yyvsp[0];
          }
-#line 3322 "awkgram.c"
+#line 3325 "awkgram.c"
     break;
 
   case 82:
 #line 1367 "awkgram.y"
           {    yyval = yyvsp[0]; }
-#line 3328 "awkgram.c"
+#line 3331 "awkgram.c"
     break;
 
   case 83:
@@ -3336,7 +3339,7 @@ regular_print:
                        yyvsp[0]->opcode = Op_push;
                yyval = yyvsp[0];
          }
-#line 3340 "awkgram.c"
+#line 3343 "awkgram.c"
     break;
 
   case 84:
@@ -3346,19 +3349,19 @@ regular_print:
                yyvsp[0]->opcode = Op_push_re;
                yyval = yyvsp[0];
          }
-#line 3350 "awkgram.c"
+#line 3353 "awkgram.c"
     break;
 
   case 85:
 #line 1386 "awkgram.y"
           { yyval = yyvsp[0]; }
-#line 3356 "awkgram.c"
+#line 3359 "awkgram.c"
     break;
 
   case 86:
 #line 1388 "awkgram.y"
           { yyval = yyvsp[0]; }
-#line 3362 "awkgram.c"
+#line 3365 "awkgram.c"
     break;
 
   case 88:
@@ -3366,7 +3369,7 @@ regular_print:
           {
                yyval = yyvsp[-1];
          }
-#line 3370 "awkgram.c"
+#line 3373 "awkgram.c"
     break;
 
   case 89:
@@ -3376,13 +3379,13 @@ regular_print:
                in_parens = 0;
                yyval = NULL;
          }
-#line 3380 "awkgram.c"
+#line 3383 "awkgram.c"
     break;
 
   case 90:
 #line 1410 "awkgram.y"
                  { in_print = false; in_parens = 0; }
-#line 3386 "awkgram.c"
+#line 3389 "awkgram.c"
     break;
 
   case 91:
@@ -3396,7 +3399,7 @@ regular_print:
                        lintwarn(_("concatenation as I/O `>' redirection target 
is ambiguous"));
                yyval = list_prepend(yyvsp[0], yyvsp[-2]);
          }
-#line 3400 "awkgram.c"
+#line 3403 "awkgram.c"
     break;
 
   case 92:
@@ -3407,7 +3410,7 @@ regular_print:
                add_lint(yyvsp[-3], LINT_assign_in_cond);
                yyval = mk_condition(yyvsp[-3], yyvsp[-5], yyvsp[0], NULL, 
NULL);
          }
-#line 3411 "awkgram.c"
+#line 3414 "awkgram.c"
     break;
 
   case 93:
@@ -3420,7 +3423,7 @@ regular_print:
                add_lint(yyvsp[-6], LINT_assign_in_cond);
                yyval = mk_condition(yyvsp[-6], yyvsp[-8], yyvsp[-3], 
yyvsp[-2], yyvsp[0]);
          }
-#line 3424 "awkgram.c"
+#line 3427 "awkgram.c"
     break;
 
   case 94:
@@ -3428,7 +3431,7 @@ regular_print:
           {
                yyval = yyvsp[0];
          }
-#line 3432 "awkgram.c"
+#line 3435 "awkgram.c"
     break;
 
   case 95:
@@ -3450,25 +3453,25 @@ regular_print:
                } else
                        yyval = NULL;
          }
-#line 3454 "awkgram.c"
+#line 3457 "awkgram.c"
     break;
 
   case 96:
 #line 1469 "awkgram.y"
           { yyval = NULL; }
-#line 3460 "awkgram.c"
+#line 3463 "awkgram.c"
     break;
 
   case 97:
 #line 1471 "awkgram.y"
           { yyval = yyvsp[0]; }
-#line 3466 "awkgram.c"
+#line 3469 "awkgram.c"
     break;
 
   case 98:
 #line 1476 "awkgram.y"
           { yyval = NULL; }
-#line 3472 "awkgram.c"
+#line 3475 "awkgram.c"
     break;
 
   case 99:
@@ -3477,19 +3480,19 @@ regular_print:
                bcfree(yyvsp[-1]);
                yyval = yyvsp[0];
          }
-#line 3481 "awkgram.c"
+#line 3484 "awkgram.c"
     break;
 
   case 100:
 #line 1486 "awkgram.y"
           { yyval = NULL; }
-#line 3487 "awkgram.c"
+#line 3490 "awkgram.c"
     break;
 
   case 101:
 #line 1488 "awkgram.y"
           { yyval = yyvsp[0]; }
-#line 3493 "awkgram.c"
+#line 3496 "awkgram.c"
     break;
 
   case 102:
@@ -3498,7 +3501,7 @@ regular_print:
                yyvsp[0]->param_count = 0;
                yyval = list_create(yyvsp[0]);
          }
-#line 3502 "awkgram.c"
+#line 3505 "awkgram.c"
     break;
 
   case 103:
@@ -3519,55 +3522,55 @@ regular_print:
                } else
                        yyval = NULL;
          }
-#line 3523 "awkgram.c"
+#line 3526 "awkgram.c"
     break;
 
   case 104:
 #line 1515 "awkgram.y"
           { yyval = NULL; }
-#line 3529 "awkgram.c"
+#line 3532 "awkgram.c"
     break;
 
   case 105:
 #line 1517 "awkgram.y"
           { yyval = yyvsp[-1]; }
-#line 3535 "awkgram.c"
+#line 3538 "awkgram.c"
     break;
 
   case 106:
 #line 1519 "awkgram.y"
           { yyval = yyvsp[-2]; }
-#line 3541 "awkgram.c"
+#line 3544 "awkgram.c"
     break;
 
   case 107:
 #line 1525 "awkgram.y"
           { yyval = NULL; }
-#line 3547 "awkgram.c"
+#line 3550 "awkgram.c"
     break;
 
   case 108:
 #line 1527 "awkgram.y"
           { yyval = yyvsp[0]; }
-#line 3553 "awkgram.c"
+#line 3556 "awkgram.c"
     break;
 
   case 109:
 #line 1532 "awkgram.y"
           { yyval = NULL; }
-#line 3559 "awkgram.c"
+#line 3562 "awkgram.c"
     break;
 
   case 110:
 #line 1534 "awkgram.y"
           { yyval = yyvsp[0]; }
-#line 3565 "awkgram.c"
+#line 3568 "awkgram.c"
     break;
 
   case 111:
 #line 1539 "awkgram.y"
           {    yyval = mk_expression_list(NULL, yyvsp[0]); }
-#line 3571 "awkgram.c"
+#line 3574 "awkgram.c"
     break;
 
   case 112:
@@ -3578,13 +3581,13 @@ regular_print:
                yyval = mk_expression_list(yyvsp[-2], yyvsp[0]);
                yyerrok;
          }
-#line 3582 "awkgram.c"
+#line 3585 "awkgram.c"
     break;
 
   case 113:
 #line 1548 "awkgram.y"
           { yyval = NULL; }
-#line 3588 "awkgram.c"
+#line 3591 "awkgram.c"
     break;
 
   case 114:
@@ -3596,7 +3599,7 @@ regular_print:
                 */
                yyval = yyvsp[-1];
          }
-#line 3600 "awkgram.c"
+#line 3603 "awkgram.c"
     break;
 
   case 115:
@@ -3605,7 +3608,7 @@ regular_print:
                /* Ditto */
                yyval = mk_expression_list(yyvsp[-2], yyvsp[0]);
          }
-#line 3609 "awkgram.c"
+#line 3612 "awkgram.c"
     break;
 
   case 116:
@@ -3616,25 +3619,25 @@ regular_print:
                        yyvsp[-2]->lasti->comment = yyvsp[-1];
                yyval = yyvsp[-2];
          }
-#line 3620 "awkgram.c"
+#line 3623 "awkgram.c"
     break;
 
   case 117:
 #line 1573 "awkgram.y"
           { yyval = NULL; }
-#line 3626 "awkgram.c"
+#line 3629 "awkgram.c"
     break;
 
   case 118:
 #line 1575 "awkgram.y"
           { yyval = yyvsp[0]; }
-#line 3632 "awkgram.c"
+#line 3635 "awkgram.c"
     break;
 
   case 119:
 #line 1580 "awkgram.y"
           {    yyval = mk_expression_list(NULL, yyvsp[0]); }
-#line 3638 "awkgram.c"
+#line 3641 "awkgram.c"
     break;
 
   case 120:
@@ -3645,13 +3648,13 @@ regular_print:
                yyval = mk_expression_list(yyvsp[-2], yyvsp[0]);
                yyerrok;
          }
-#line 3649 "awkgram.c"
+#line 3652 "awkgram.c"
     break;
 
   case 121:
 #line 1589 "awkgram.y"
           { yyval = NULL; }
-#line 3655 "awkgram.c"
+#line 3658 "awkgram.c"
     break;
 
   case 122:
@@ -3663,7 +3666,7 @@ regular_print:
                 */
                yyval = yyvsp[-1];
          }
-#line 3667 "awkgram.c"
+#line 3670 "awkgram.c"
     break;
 
   case 123:
@@ -3672,7 +3675,7 @@ regular_print:
                /* Ditto */
                yyval = mk_expression_list(yyvsp[-2], yyvsp[0]);
          }
-#line 3676 "awkgram.c"
+#line 3679 "awkgram.c"
     break;
 
   case 124:
@@ -3683,54 +3686,66 @@ regular_print:
                        yyvsp[-2]->comment = yyvsp[-1];
                yyval = yyvsp[-2];
          }
-#line 3687 "awkgram.c"
+#line 3690 "awkgram.c"
     break;
 
   case 125:
 #line 1613 "awkgram.y"
               { yyval = yyvsp[0]; }
-#line 3693 "awkgram.c"
+#line 3696 "awkgram.c"
     break;
 
   case 126:
 #line 1614 "awkgram.y"
                        { yyval = list_create(yyvsp[0]); }
-#line 3699 "awkgram.c"
+#line 3702 "awkgram.c"
     break;
 
   case 127:
+#line 1619 "awkgram.y"
+          { yyval = NULL; }
+#line 3708 "awkgram.c"
+    break;
+
+  case 128:
 #line 1620 "awkgram.y"
+                    { yyval = yyvsp[0]; }
+#line 3714 "awkgram.c"
+    break;
+
+  case 129:
+#line 1626 "awkgram.y"
           {
                if (do_lint && yyvsp[0]->lasti->opcode == Op_match_rec)
                        lintwarn_ln(yyvsp[-1]->source_line,
                                _("regular expression on right of assignment"));
                yyval = mk_assignment(yyvsp[-2], yyvsp[0], yyvsp[-1]);
          }
-#line 3710 "awkgram.c"
+#line 3725 "awkgram.c"
     break;
 
-  case 128:
-#line 1627 "awkgram.y"
+  case 130:
+#line 1633 "awkgram.y"
           {
                yyval = mk_assignment(yyvsp[-2], list_create(yyvsp[0]), 
yyvsp[-1]);
          }
-#line 3718 "awkgram.c"
+#line 3733 "awkgram.c"
     break;
 
-  case 129:
-#line 1631 "awkgram.y"
+  case 131:
+#line 1637 "awkgram.y"
           {    yyval = mk_boolean(yyvsp[-2], yyvsp[0], yyvsp[-1]); }
-#line 3724 "awkgram.c"
+#line 3739 "awkgram.c"
     break;
 
-  case 130:
-#line 1633 "awkgram.y"
+  case 132:
+#line 1639 "awkgram.y"
           {    yyval = mk_boolean(yyvsp[-2], yyvsp[0], yyvsp[-1]); }
-#line 3730 "awkgram.c"
+#line 3745 "awkgram.c"
     break;
 
-  case 131:
-#line 1635 "awkgram.y"
+  case 133:
+#line 1641 "awkgram.y"
           {
                if (yyvsp[-2]->lasti->opcode == Op_match_rec)
                        warning_ln(yyvsp[-1]->source_line,
@@ -3743,11 +3758,11 @@ regular_print:
                bcfree(yyvsp[0]);
                yyval = list_append(yyvsp[-2], yyvsp[-1]);
          }
-#line 3747 "awkgram.c"
+#line 3762 "awkgram.c"
     break;
 
-  case 132:
-#line 1648 "awkgram.y"
+  case 134:
+#line 1654 "awkgram.y"
           {
                if (yyvsp[-2]->lasti->opcode == Op_match_rec)
                        warning_ln(yyvsp[-1]->source_line,
@@ -3764,11 +3779,11 @@ regular_print:
                        yyval = list_append(list_merge(yyvsp[-2], yyvsp[0]), 
yyvsp[-1]);
                }
          }
-#line 3768 "awkgram.c"
+#line 3783 "awkgram.c"
     break;
 
-  case 133:
-#line 1665 "awkgram.y"
+  case 135:
+#line 1671 "awkgram.y"
           {
                if (do_lint_old)
                        lintwarn_ln(yyvsp[-1]->source_line,
@@ -3778,91 +3793,91 @@ regular_print:
                yyvsp[-1]->expr_count = 1;
                yyval = list_append(list_merge(yyvsp[-2], yyvsp[0]), yyvsp[-1]);
          }
-#line 3782 "awkgram.c"
+#line 3797 "awkgram.c"
     break;
 
-  case 134:
-#line 1675 "awkgram.y"
+  case 136:
+#line 1681 "awkgram.y"
           {
                if (do_lint && yyvsp[0]->lasti->opcode == Op_match_rec)
                        lintwarn_ln(yyvsp[-1]->source_line,
                                _("regular expression on right of comparison"));
                yyval = list_append(list_merge(yyvsp[-2], yyvsp[0]), yyvsp[-1]);
          }
-#line 3793 "awkgram.c"
-    break;
-
-  case 135:
-#line 1682 "awkgram.y"
-          { yyval = mk_condition(yyvsp[-4], yyvsp[-3], yyvsp[-2], yyvsp[-1], 
yyvsp[0]); }
-#line 3799 "awkgram.c"
-    break;
-
-  case 136:
-#line 1684 "awkgram.y"
-          { yyval = yyvsp[0]; }
-#line 3805 "awkgram.c"
+#line 3808 "awkgram.c"
     break;
 
   case 137:
-#line 1689 "awkgram.y"
-          { yyval = yyvsp[0]; }
-#line 3811 "awkgram.c"
+#line 1688 "awkgram.y"
+          { yyval = mk_condition(yyvsp[-4], yyvsp[-3], yyvsp[-2], yyvsp[-1], 
yyvsp[0]); }
+#line 3814 "awkgram.c"
     break;
 
   case 138:
-#line 1691 "awkgram.y"
+#line 1690 "awkgram.y"
           { yyval = yyvsp[0]; }
-#line 3817 "awkgram.c"
+#line 3820 "awkgram.c"
     break;
 
   case 139:
-#line 1693 "awkgram.y"
-          {
-               yyvsp[0]->opcode = Op_assign_quotient;
-               yyval = yyvsp[0];
-         }
+#line 1695 "awkgram.y"
+          { yyval = yyvsp[0]; }
 #line 3826 "awkgram.c"
     break;
 
   case 140:
-#line 1701 "awkgram.y"
+#line 1697 "awkgram.y"
           { yyval = yyvsp[0]; }
 #line 3832 "awkgram.c"
     break;
 
   case 141:
-#line 1703 "awkgram.y"
-          { yyval = yyvsp[0]; }
-#line 3838 "awkgram.c"
+#line 1699 "awkgram.y"
+          {
+               yyvsp[0]->opcode = Op_assign_quotient;
+               yyval = yyvsp[0];
+         }
+#line 3841 "awkgram.c"
     break;
 
   case 142:
-#line 1708 "awkgram.y"
+#line 1707 "awkgram.y"
           { yyval = yyvsp[0]; }
-#line 3844 "awkgram.c"
+#line 3847 "awkgram.c"
     break;
 
   case 143:
-#line 1710 "awkgram.y"
+#line 1709 "awkgram.y"
           { yyval = yyvsp[0]; }
-#line 3850 "awkgram.c"
+#line 3853 "awkgram.c"
     break;
 
   case 144:
-#line 1715 "awkgram.y"
+#line 1714 "awkgram.y"
           { yyval = yyvsp[0]; }
-#line 3856 "awkgram.c"
+#line 3859 "awkgram.c"
     break;
 
   case 145:
-#line 1717 "awkgram.y"
+#line 1716 "awkgram.y"
           { yyval = yyvsp[0]; }
-#line 3862 "awkgram.c"
+#line 3865 "awkgram.c"
     break;
 
   case 146:
-#line 1719 "awkgram.y"
+#line 1721 "awkgram.y"
+          { yyval = yyvsp[0]; }
+#line 3871 "awkgram.c"
+    break;
+
+  case 147:
+#line 1723 "awkgram.y"
+          { yyval = yyvsp[0]; }
+#line 3877 "awkgram.c"
+    break;
+
+  case 148:
+#line 1725 "awkgram.y"
           {
                int count = 2;
                bool is_simple_var = false;
@@ -3916,47 +3931,47 @@ regular_print:
                                max_args = count;
                }
          }
-#line 3920 "awkgram.c"
+#line 3935 "awkgram.c"
     break;
 
-  case 148:
-#line 1778 "awkgram.y"
+  case 150:
+#line 1784 "awkgram.y"
           { yyval = mk_binary(yyvsp[-2], yyvsp[0], yyvsp[-1]); }
-#line 3926 "awkgram.c"
+#line 3941 "awkgram.c"
     break;
 
-  case 149:
-#line 1780 "awkgram.y"
+  case 151:
+#line 1786 "awkgram.y"
           { yyval = mk_binary(yyvsp[-2], yyvsp[0], yyvsp[-1]); }
-#line 3932 "awkgram.c"
+#line 3947 "awkgram.c"
     break;
 
-  case 150:
-#line 1782 "awkgram.y"
+  case 152:
+#line 1788 "awkgram.y"
           { yyval = mk_binary(yyvsp[-2], yyvsp[0], yyvsp[-1]); }
-#line 3938 "awkgram.c"
+#line 3953 "awkgram.c"
     break;
 
-  case 151:
-#line 1784 "awkgram.y"
+  case 153:
+#line 1790 "awkgram.y"
           { yyval = mk_binary(yyvsp[-2], yyvsp[0], yyvsp[-1]); }
-#line 3944 "awkgram.c"
+#line 3959 "awkgram.c"
     break;
 
-  case 152:
-#line 1786 "awkgram.y"
+  case 154:
+#line 1792 "awkgram.y"
           { yyval = mk_binary(yyvsp[-2], yyvsp[0], yyvsp[-1]); }
-#line 3950 "awkgram.c"
+#line 3965 "awkgram.c"
     break;
 
-  case 153:
-#line 1788 "awkgram.y"
+  case 155:
+#line 1794 "awkgram.y"
           { yyval = mk_binary(yyvsp[-2], yyvsp[0], yyvsp[-1]); }
-#line 3956 "awkgram.c"
+#line 3971 "awkgram.c"
     break;
 
-  case 154:
-#line 1790 "awkgram.y"
+  case 156:
+#line 1796 "awkgram.y"
           {
                /*
                 * In BEGINFILE/ENDFILE, allow `getline [var] < file'
@@ -3970,29 +3985,29 @@ regular_print:
                                _("non-redirected `getline' undefined inside 
END action"));
                yyval = mk_getline(yyvsp[-2], yyvsp[-1], yyvsp[0], 
redirect_input);
          }
-#line 3974 "awkgram.c"
+#line 3989 "awkgram.c"
     break;
 
-  case 155:
-#line 1804 "awkgram.y"
+  case 157:
+#line 1810 "awkgram.y"
           {
                yyvsp[0]->opcode = Op_postincrement;
                yyval = mk_assignment(yyvsp[-1], NULL, yyvsp[0]);
          }
-#line 3983 "awkgram.c"
+#line 3998 "awkgram.c"
     break;
 
-  case 156:
-#line 1809 "awkgram.y"
+  case 158:
+#line 1815 "awkgram.y"
           {
                yyvsp[0]->opcode = Op_postdecrement;
                yyval = mk_assignment(yyvsp[-1], NULL, yyvsp[0]);
          }
-#line 3992 "awkgram.c"
+#line 4007 "awkgram.c"
     break;
 
-  case 157:
-#line 1814 "awkgram.y"
+  case 159:
+#line 1820 "awkgram.y"
           {
                if (do_lint_old) {
                    /* first one is warning so that second one comes out if 
warnings are fatal */
@@ -4013,64 +4028,64 @@ regular_print:
                        yyval = list_append(list_merge(t, yyvsp[0]), yyvsp[-1]);
                }
          }
-#line 4017 "awkgram.c"
+#line 4032 "awkgram.c"
     break;
 
-  case 158:
-#line 1840 "awkgram.y"
+  case 160:
+#line 1846 "awkgram.y"
                 {
                  yyval = mk_getline(yyvsp[-1], yyvsp[0], yyvsp[-3], 
yyvsp[-2]->redir_type);
                  bcfree(yyvsp[-2]);
                }
-#line 4026 "awkgram.c"
+#line 4041 "awkgram.c"
     break;
 
-  case 159:
-#line 1846 "awkgram.y"
+  case 161:
+#line 1852 "awkgram.y"
           { yyval = mk_binary(yyvsp[-2], yyvsp[0], yyvsp[-1]); }
-#line 4032 "awkgram.c"
+#line 4047 "awkgram.c"
     break;
 
-  case 160:
-#line 1848 "awkgram.y"
+  case 162:
+#line 1854 "awkgram.y"
           { yyval = mk_binary(yyvsp[-2], yyvsp[0], yyvsp[-1]); }
-#line 4038 "awkgram.c"
+#line 4053 "awkgram.c"
     break;
 
-  case 161:
-#line 1850 "awkgram.y"
+  case 163:
+#line 1856 "awkgram.y"
           { yyval = mk_binary(yyvsp[-2], yyvsp[0], yyvsp[-1]); }
-#line 4044 "awkgram.c"
+#line 4059 "awkgram.c"
     break;
 
-  case 162:
-#line 1852 "awkgram.y"
+  case 164:
+#line 1858 "awkgram.y"
           { yyval = mk_binary(yyvsp[-2], yyvsp[0], yyvsp[-1]); }
-#line 4050 "awkgram.c"
+#line 4065 "awkgram.c"
     break;
 
-  case 163:
-#line 1854 "awkgram.y"
+  case 165:
+#line 1860 "awkgram.y"
           { yyval = mk_binary(yyvsp[-2], yyvsp[0], yyvsp[-1]); }
-#line 4056 "awkgram.c"
+#line 4071 "awkgram.c"
     break;
 
-  case 164:
-#line 1856 "awkgram.y"
+  case 166:
+#line 1862 "awkgram.y"
           { yyval = mk_binary(yyvsp[-2], yyvsp[0], yyvsp[-1]); }
-#line 4062 "awkgram.c"
+#line 4077 "awkgram.c"
     break;
 
-  case 165:
-#line 1861 "awkgram.y"
+  case 167:
+#line 1867 "awkgram.y"
           {
                yyval = list_create(yyvsp[0]);
          }
-#line 4070 "awkgram.c"
+#line 4085 "awkgram.c"
     break;
 
-  case 166:
-#line 1865 "awkgram.y"
+  case 168:
+#line 1871 "awkgram.y"
           {
                if (yyvsp[0]->opcode == Op_match_rec) {
                        yyvsp[0]->opcode = Op_nomatch;
@@ -4102,11 +4117,11 @@ regular_print:
                        }
                }
           }
-#line 4106 "awkgram.c"
+#line 4121 "awkgram.c"
     break;
 
-  case 167:
-#line 1897 "awkgram.y"
+  case 169:
+#line 1903 "awkgram.y"
           {
                // Always include. Allows us to lint warn on
                // print "foo" > "bar" 1
@@ -4114,31 +4129,31 @@ regular_print:
                // print "foo" > ("bar" 1)
                yyval = list_append(yyvsp[-1], bcalloc(Op_parens, 1, 
sourceline));
          }
-#line 4118 "awkgram.c"
+#line 4133 "awkgram.c"
     break;
 
-  case 168:
-#line 1905 "awkgram.y"
+  case 170:
+#line 1911 "awkgram.y"
           {
                yyval = snode(yyvsp[-1], yyvsp[-3]);
                if (yyval == NULL)
                        YYABORT;
          }
-#line 4128 "awkgram.c"
+#line 4143 "awkgram.c"
     break;
 
-  case 169:
-#line 1911 "awkgram.y"
+  case 171:
+#line 1917 "awkgram.y"
           {
                yyval = snode(yyvsp[-1], yyvsp[-3]);
                if (yyval == NULL)
                        YYABORT;
          }
-#line 4138 "awkgram.c"
+#line 4153 "awkgram.c"
     break;
 
-  case 170:
-#line 1917 "awkgram.y"
+  case 172:
+#line 1923 "awkgram.y"
           {
                static bool warned = false;
 
@@ -4151,45 +4166,45 @@ regular_print:
                if (yyval == NULL)
                        YYABORT;
          }
-#line 4155 "awkgram.c"
+#line 4170 "awkgram.c"
     break;
 
-  case 173:
-#line 1932 "awkgram.y"
+  case 175:
+#line 1938 "awkgram.y"
           {
                yyvsp[-1]->opcode = Op_preincrement;
                yyval = mk_assignment(yyvsp[0], NULL, yyvsp[-1]);
          }
-#line 4164 "awkgram.c"
+#line 4179 "awkgram.c"
     break;
 
-  case 174:
-#line 1937 "awkgram.y"
+  case 176:
+#line 1943 "awkgram.y"
           {
                yyvsp[-1]->opcode = Op_predecrement;
                yyval = mk_assignment(yyvsp[0], NULL, yyvsp[-1]);
          }
-#line 4173 "awkgram.c"
+#line 4188 "awkgram.c"
     break;
 
-  case 175:
-#line 1942 "awkgram.y"
+  case 177:
+#line 1948 "awkgram.y"
           {
                yyval = list_create(yyvsp[0]);
          }
-#line 4181 "awkgram.c"
+#line 4196 "awkgram.c"
     break;
 
-  case 176:
-#line 1946 "awkgram.y"
+  case 178:
+#line 1952 "awkgram.y"
           {
                yyval = list_create(yyvsp[0]);
          }
-#line 4189 "awkgram.c"
+#line 4204 "awkgram.c"
     break;
 
-  case 177:
-#line 1950 "awkgram.y"
+  case 179:
+#line 1956 "awkgram.y"
           {
                if (yyvsp[0]->lasti->opcode == Op_push_i
                        && (yyvsp[0]->lasti->memory->flags & STRING) == 0
@@ -4204,11 +4219,11 @@ regular_print:
                        yyval = list_append(yyvsp[0], yyvsp[-1]);
                }
          }
-#line 4208 "awkgram.c"
+#line 4223 "awkgram.c"
     break;
 
-  case 178:
-#line 1965 "awkgram.y"
+  case 180:
+#line 1971 "awkgram.y"
           {
                if (yyvsp[0]->lasti->opcode == Op_push_i
                        && (yyvsp[0]->lasti->memory->flags & STRING) == 0
@@ -4226,20 +4241,20 @@ regular_print:
                        yyval = list_append(yyvsp[0], yyvsp[-1]);
                }
          }
-#line 4230 "awkgram.c"
+#line 4245 "awkgram.c"
     break;
 
-  case 179:
-#line 1986 "awkgram.y"
+  case 181:
+#line 1992 "awkgram.y"
           {
                func_use(yyvsp[0]->lasti->func_name, FUNC_USE);
                yyval = yyvsp[0];
          }
-#line 4239 "awkgram.c"
+#line 4254 "awkgram.c"
     break;
 
-  case 180:
-#line 1991 "awkgram.y"
+  case 182:
+#line 1997 "awkgram.y"
           {
                /* indirect function call */
                INSTRUCTION *f, *t;
@@ -4273,11 +4288,11 @@ regular_print:
                yyval = list_prepend(yyvsp[0], t);
                at_seen = false;
          }
-#line 4277 "awkgram.c"
+#line 4292 "awkgram.c"
     break;
 
-  case 181:
-#line 2028 "awkgram.y"
+  case 183:
+#line 2034 "awkgram.y"
           {
                NODE *n;
                char *name = yyvsp[-3]->func_name;
@@ -4310,49 +4325,49 @@ regular_print:
                        yyval = list_append(t, yyvsp[-3]);
                }
          }
-#line 4314 "awkgram.c"
+#line 4329 "awkgram.c"
     break;
 
-  case 182:
-#line 2064 "awkgram.y"
+  case 184:
+#line 2070 "awkgram.y"
           { yyval = NULL; }
-#line 4320 "awkgram.c"
+#line 4335 "awkgram.c"
     break;
 
-  case 183:
-#line 2066 "awkgram.y"
+  case 185:
+#line 2072 "awkgram.y"
           { yyval = yyvsp[0]; }
-#line 4326 "awkgram.c"
+#line 4341 "awkgram.c"
     break;
 
-  case 184:
-#line 2071 "awkgram.y"
+  case 186:
+#line 2077 "awkgram.y"
           { yyval = NULL; }
-#line 4332 "awkgram.c"
+#line 4347 "awkgram.c"
     break;
 
-  case 185:
-#line 2073 "awkgram.y"
+  case 187:
+#line 2079 "awkgram.y"
           { yyval = yyvsp[-1]; }
-#line 4338 "awkgram.c"
+#line 4353 "awkgram.c"
     break;
 
-  case 186:
-#line 2078 "awkgram.y"
+  case 188:
+#line 2084 "awkgram.y"
           {    yyval = yyvsp[0]; }
-#line 4344 "awkgram.c"
+#line 4359 "awkgram.c"
     break;
 
-  case 187:
-#line 2080 "awkgram.y"
+  case 189:
+#line 2086 "awkgram.y"
           {
                yyval = list_merge(yyvsp[-1], yyvsp[0]);
          }
-#line 4352 "awkgram.c"
+#line 4367 "awkgram.c"
     break;
 
-  case 188:
-#line 2087 "awkgram.y"
+  case 190:
+#line 2093 "awkgram.y"
           {
                INSTRUCTION *ip = yyvsp[0]->lasti;
                int count = ip->sub_count;      /* # of SUBSEP-seperated 
expressions */
@@ -4366,11 +4381,11 @@ regular_print:
                sub_counter++;  /* count # of dimensions */
                yyval = yyvsp[0];
          }
-#line 4370 "awkgram.c"
+#line 4385 "awkgram.c"
     break;
 
-  case 189:
-#line 2104 "awkgram.y"
+  case 191:
+#line 2110 "awkgram.y"
           {
                INSTRUCTION *t = yyvsp[-1];
                if (yyvsp[-1] == NULL) {
@@ -4384,41 +4399,41 @@ regular_print:
                        yyvsp[0]->sub_count = count_expressions(&t, false);
                yyval = list_append(t, yyvsp[0]);
          }
-#line 4388 "awkgram.c"
+#line 4403 "awkgram.c"
     break;
 
-  case 190:
-#line 2121 "awkgram.y"
+  case 192:
+#line 2127 "awkgram.y"
           {    yyval = yyvsp[0]; }
-#line 4394 "awkgram.c"
+#line 4409 "awkgram.c"
     break;
 
-  case 191:
-#line 2123 "awkgram.y"
+  case 193:
+#line 2129 "awkgram.y"
           {
                yyval = list_merge(yyvsp[-1], yyvsp[0]);
          }
-#line 4402 "awkgram.c"
+#line 4417 "awkgram.c"
     break;
 
-  case 192:
-#line 2130 "awkgram.y"
+  case 194:
+#line 2136 "awkgram.y"
           { yyval = yyvsp[-1]; }
-#line 4408 "awkgram.c"
+#line 4423 "awkgram.c"
     break;
 
-  case 193:
-#line 2135 "awkgram.y"
+  case 195:
+#line 2141 "awkgram.y"
           {
                yyvsp[0]->opcode = Op_push;
                yyvsp[0]->memory = variable(yyvsp[0]->source_line, 
yyvsp[0]->lextok, Node_var_new);
                yyval = list_create(yyvsp[0]);
          }
-#line 4418 "awkgram.c"
+#line 4433 "awkgram.c"
     break;
 
-  case 194:
-#line 2141 "awkgram.y"
+  case 196:
+#line 2147 "awkgram.y"
           {
                char *arr = yyvsp[-1]->lextok;
 
@@ -4426,11 +4441,11 @@ regular_print:
                yyvsp[-1]->opcode = Op_push_array;
                yyval = list_prepend(yyvsp[0], yyvsp[-1]);
          }
-#line 4430 "awkgram.c"
+#line 4445 "awkgram.c"
     break;
 
-  case 195:
-#line 2152 "awkgram.y"
+  case 197:
+#line 2158 "awkgram.y"
           {
                INSTRUCTION *ip = yyvsp[0]->nexti;
                if (ip->opcode == Op_push
@@ -4442,85 +4457,85 @@ regular_print:
                } else
                        yyval = yyvsp[0];
          }
-#line 4446 "awkgram.c"
+#line 4461 "awkgram.c"
     break;
 
-  case 196:
-#line 2164 "awkgram.y"
+  case 198:
+#line 2170 "awkgram.y"
           {
                yyval = list_append(yyvsp[-1], yyvsp[-2]);
                if (yyvsp[0] != NULL)
                        mk_assignment(yyvsp[-1], NULL, yyvsp[0]);
          }
-#line 4456 "awkgram.c"
+#line 4471 "awkgram.c"
     break;
 
-  case 197:
-#line 2173 "awkgram.y"
+  case 199:
+#line 2179 "awkgram.y"
           {
                yyvsp[0]->opcode = Op_postincrement;
          }
-#line 4464 "awkgram.c"
+#line 4479 "awkgram.c"
     break;
 
-  case 198:
-#line 2177 "awkgram.y"
+  case 200:
+#line 2183 "awkgram.y"
           {
                yyvsp[0]->opcode = Op_postdecrement;
          }
-#line 4472 "awkgram.c"
+#line 4487 "awkgram.c"
     break;
 
-  case 199:
-#line 2181 "awkgram.y"
+  case 201:
+#line 2187 "awkgram.y"
           { yyval = NULL; }
-#line 4478 "awkgram.c"
+#line 4493 "awkgram.c"
     break;
 
-  case 200:
-#line 2185 "awkgram.y"
+  case 202:
+#line 2191 "awkgram.y"
                       { yyval = yyvsp[0]; }
-#line 4484 "awkgram.c"
+#line 4499 "awkgram.c"
     break;
 
-  case 201:
-#line 2189 "awkgram.y"
+  case 203:
+#line 2195 "awkgram.y"
                         { yyval = yyvsp[0]; yyerrok; }
-#line 4490 "awkgram.c"
+#line 4505 "awkgram.c"
     break;
 
-  case 202:
-#line 2193 "awkgram.y"
+  case 204:
+#line 2199 "awkgram.y"
               { yyerrok; }
-#line 4496 "awkgram.c"
+#line 4511 "awkgram.c"
     break;
 
-  case 203:
-#line 2198 "awkgram.y"
+  case 205:
+#line 2204 "awkgram.y"
           { yyval = NULL; }
-#line 4502 "awkgram.c"
+#line 4517 "awkgram.c"
     break;
 
-  case 205:
-#line 2203 "awkgram.y"
+  case 207:
+#line 2209 "awkgram.y"
                 { yyerrok; }
-#line 4508 "awkgram.c"
+#line 4523 "awkgram.c"
     break;
 
-  case 206:
-#line 2207 "awkgram.y"
+  case 208:
+#line 2213 "awkgram.y"
                 { yyval = yyvsp[0]; yyerrok; }
-#line 4514 "awkgram.c"
+#line 4529 "awkgram.c"
     break;
 
-  case 207:
-#line 2211 "awkgram.y"
+  case 209:
+#line 2217 "awkgram.y"
                         { yyval = yyvsp[0]; yyerrok; }
-#line 4520 "awkgram.c"
+#line 4535 "awkgram.c"
     break;
 
 
-#line 4524 "awkgram.c"
+#line 4539 "awkgram.c"
 
       default: break;
     }
@@ -4714,7 +4729,7 @@ yyreturn:
   return yyresult;
 }
 
-#line 2213 "awkgram.y"
+#line 2219 "awkgram.y"
 
 
 struct token {
diff --git a/awkgram.y b/awkgram.y
index 281d0ef..c427a5b 100644
--- a/awkgram.y
+++ b/awkgram.y
@@ -1094,7 +1094,7 @@ non_compound_stmt
          {
                if (! in_function)
                        yyerror(_("`return' used outside function context"));
-         } opt_exp statement_term {
+         } opt_fcall_exp statement_term {
                if (called_from_eval)
                        $1->opcode = Op_K_return_from_eval;
 
@@ -1614,6 +1614,12 @@ fcall_exp
        | typed_regexp { $$ = list_create($1); }
        ;
 
+opt_fcall_exp
+       : /* empty */
+         { $$ = NULL; }
+       | fcall_exp { $$ = $1; }
+       ;
+
 /* Expressions, not including the comma operator.  */
 exp
        : variable assign_operator exp %prec ASSIGNOP
diff --git a/doc/ChangeLog b/doc/ChangeLog
index 3553420..de6cfbb 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,8 @@
+2020-06-05         Arnold D. Robbins     <arnold@skeeve.com>
+
+       * gawktexi.in: Improvements in switch statement and typed
+       regex sections.
+
 2020-05-15         Arnold D. Robbins     <arnold@skeeve.com>
 
        * gawkworkflow.texi: Minor updates.
diff --git a/doc/gawk.info b/doc/gawk.info
index 522ce7d..c54eeff 100644
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@ -8144,6 +8144,8 @@ more confusing.  Instead, you may use them only in 
certain contexts:
    * As a parameter in a call to a user-defined function (*note
      User-defined::).
 
+   * As the return value of a user-defined function.
+
    * On the righthand side of an assignment to a variable: 'some_var =
      @/foo/'.  In this case, the type of 'some_var' is regexp.
      Additionally, 'some_var' can be used with '~' and '!~', passed to
@@ -10504,9 +10506,9 @@ checked for a match in the order they are defined.  If 
no suitable
 regexp.  The 'switch' expression is evaluated, and then each 'case''s
 constant is compared against the result in turn.  The type of constant
 determines the comparison: numeric or string do the usual comparisons.
-A regexp constant does a regular expression match against the string
-value of the original expression.  The general form of the 'switch'
-statement looks like this:
+A regexp constant (either regular, '/foo/', or strongly typed, '@/foo/')
+does a regular expression match against the string value of the original
+expression.  The general form of the 'switch' statement looks like this:
 
      switch (EXPRESSION) {
      case VALUE OR REGULAR EXPRESSION:
@@ -37468,445 +37470,445 @@ Node: Regexp Constants347985
 Node: Using Constant Regexps348511
 Node: Standard Regexp Constants349133
 Node: Strong Regexp Constants352321
-Node: Variables355279
-Node: Using Variables355936
-Node: Assignment Options357846
-Node: Conversion360317
-Node: Strings And Numbers360841
-Ref: Strings And Numbers-Footnote-1363904
-Node: Locale influences conversions364013
-Ref: table-locale-affects366771
-Node: All Operators367389
-Node: Arithmetic Ops368018
-Node: Concatenation370524
-Ref: Concatenation-Footnote-1373371
-Node: Assignment Ops373478
-Ref: table-assign-ops378469
-Node: Increment Ops379782
-Node: Truth Values and Conditions383242
-Node: Truth Values384316
-Node: Typing and Comparison385364
-Node: Variable Typing386184
-Ref: Variable Typing-Footnote-1392647
-Ref: Variable Typing-Footnote-2392719
-Node: Comparison Operators392796
-Ref: table-relational-ops393215
-Node: POSIX String Comparison396710
-Ref: POSIX String Comparison-Footnote-1398405
-Ref: POSIX String Comparison-Footnote-2398544
-Node: Boolean Ops398628
-Ref: Boolean Ops-Footnote-1403110
-Node: Conditional Exp403202
-Node: Function Calls404938
-Node: Precedence408815
-Node: Locales412474
-Node: Expressions Summary414106
-Node: Patterns and Actions416679
-Node: Pattern Overview417799
-Node: Regexp Patterns419476
-Node: Expression Patterns420018
-Node: Ranges423799
-Node: BEGIN/END426907
-Node: Using BEGIN/END427668
-Ref: Using BEGIN/END-Footnote-1430404
-Node: I/O And BEGIN/END430510
-Node: BEGINFILE/ENDFILE432824
-Node: Empty435737
-Node: Using Shell Variables436054
-Node: Action Overview438328
-Node: Statements440653
-Node: If Statement442501
-Node: While Statement443996
-Node: Do Statement446024
-Node: For Statement447172
-Node: Switch Statement450343
-Node: Break Statement452729
-Node: Continue Statement454821
-Node: Next Statement456648
-Node: Nextfile Statement459031
-Node: Exit Statement461683
-Node: Built-in Variables464086
-Node: User-modified465219
-Node: Auto-set472986
-Ref: Auto-set-Footnote-1489793
-Ref: Auto-set-Footnote-2489999
-Node: ARGC and ARGV490055
-Node: Pattern Action Summary494268
-Node: Arrays496698
-Node: Array Basics498027
-Node: Array Intro498871
-Ref: figure-array-elements500846
-Ref: Array Intro-Footnote-1503550
-Node: Reference to Elements503678
-Node: Assigning Elements506142
-Node: Array Example506633
-Node: Scanning an Array508392
-Node: Controlling Scanning511414
-Ref: Controlling Scanning-Footnote-1517870
-Node: Numeric Array Subscripts518186
-Node: Uninitialized Subscripts520370
-Node: Delete521989
-Ref: Delete-Footnote-1524741
-Node: Multidimensional524798
-Node: Multiscanning527893
-Node: Arrays of Arrays529484
-Node: Arrays Summary534252
-Node: Functions536345
-Node: Built-in537383
-Node: Calling Built-in538464
-Node: Numeric Functions540460
-Ref: Numeric Functions-Footnote-1544488
-Ref: Numeric Functions-Footnote-2545136
-Ref: Numeric Functions-Footnote-3545184
-Node: String Functions545456
-Ref: String Functions-Footnote-1569640
-Ref: String Functions-Footnote-2569768
-Ref: String Functions-Footnote-3570016
-Node: Gory Details570103
-Ref: table-sub-escapes571894
-Ref: table-sub-proposed573413
-Ref: table-posix-sub574776
-Ref: table-gensub-escapes576317
-Ref: Gory Details-Footnote-1577140
-Node: I/O Functions577294
-Ref: table-system-return-values583762
-Ref: I/O Functions-Footnote-1585842
-Ref: I/O Functions-Footnote-2585990
-Node: Time Functions586110
-Ref: Time Functions-Footnote-1596781
-Ref: Time Functions-Footnote-2596849
-Ref: Time Functions-Footnote-3597007
-Ref: Time Functions-Footnote-4597118
-Ref: Time Functions-Footnote-5597230
-Ref: Time Functions-Footnote-6597457
-Node: Bitwise Functions597723
-Ref: table-bitwise-ops598317
-Ref: Bitwise Functions-Footnote-1604380
-Ref: Bitwise Functions-Footnote-2604553
-Node: Type Functions604744
-Node: I18N Functions607607
-Node: User-defined609258
-Node: Definition Syntax610070
-Ref: Definition Syntax-Footnote-1615757
-Node: Function Example615828
-Ref: Function Example-Footnote-1618750
-Node: Function Calling618772
-Node: Calling A Function619360
-Node: Variable Scope620318
-Node: Pass By Value/Reference623312
-Node: Function Caveats625956
-Ref: Function Caveats-Footnote-1628003
-Node: Return Statement628123
-Node: Dynamic Typing631102
-Node: Indirect Calls632032
-Ref: Indirect Calls-Footnote-1642284
-Node: Functions Summary642412
-Node: Library Functions645117
-Ref: Library Functions-Footnote-1648724
-Ref: Library Functions-Footnote-2648867
-Node: Library Names649038
-Ref: Library Names-Footnote-1652705
-Ref: Library Names-Footnote-2652928
-Node: General Functions653014
-Node: Strtonum Function654117
-Node: Assert Function657139
-Node: Round Function660465
-Node: Cliff Random Function662005
-Node: Ordinal Functions663021
-Ref: Ordinal Functions-Footnote-1666084
-Ref: Ordinal Functions-Footnote-2666336
-Node: Join Function666546
-Ref: Join Function-Footnote-1668316
-Node: Getlocaltime Function668516
-Node: Readfile Function672258
-Node: Shell Quoting674235
-Node: Data File Management675636
-Node: Filetrans Function676268
-Node: Rewind Function680364
-Node: File Checking682273
-Ref: File Checking-Footnote-1683607
-Node: Empty Files683808
-Node: Ignoring Assigns685787
-Node: Getopt Function687337
-Ref: Getopt Function-Footnote-1702549
-Node: Passwd Functions702749
-Ref: Passwd Functions-Footnote-1711588
-Node: Group Functions711676
-Ref: Group Functions-Footnote-1719574
-Node: Walking Arrays719781
-Node: Library Functions Summary722789
-Node: Library Exercises724195
-Node: Sample Programs724660
-Node: Running Examples725430
-Node: Clones726158
-Node: Cut Program727382
-Node: Egrep Program737311
-Ref: Egrep Program-Footnote-1744823
-Node: Id Program744933
-Node: Split Program748613
-Ref: Split Program-Footnote-1752071
-Node: Tee Program752200
-Node: Uniq Program754990
-Node: Wc Program762611
-Ref: Wc Program-Footnote-1766866
-Node: Miscellaneous Programs766960
-Node: Dupword Program768173
-Node: Alarm Program770203
-Node: Translate Program775058
-Ref: Translate Program-Footnote-1779623
-Node: Labels Program779893
-Ref: Labels Program-Footnote-1783244
-Node: Word Sorting783328
-Node: History Sorting787400
-Node: Extract Program789625
-Node: Simple Sed797679
-Node: Igawk Program800753
-Ref: Igawk Program-Footnote-1815084
-Ref: Igawk Program-Footnote-2815286
-Ref: Igawk Program-Footnote-3815408
-Node: Anagram Program815523
-Node: Signature Program818585
-Node: Programs Summary819832
-Node: Programs Exercises821046
-Ref: Programs Exercises-Footnote-1825175
-Node: Advanced Features825266
-Node: Nondecimal Data827256
-Node: Array Sorting828847
-Node: Controlling Array Traversal829547
-Ref: Controlling Array Traversal-Footnote-1837915
-Node: Array Sorting Functions838033
-Ref: Array Sorting Functions-Footnote-1843124
-Node: Two-way I/O843320
-Ref: Two-way I/O-Footnote-1851041
-Ref: Two-way I/O-Footnote-2851228
-Node: TCP/IP Networking851310
-Node: Profiling854428
-Node: Advanced Features Summary863443
-Node: Internationalization865287
-Node: I18N and L10N866767
-Node: Explaining gettext867454
-Ref: Explaining gettext-Footnote-1873346
-Ref: Explaining gettext-Footnote-2873531
-Node: Programmer i18n873696
-Ref: Programmer i18n-Footnote-1878645
-Node: Translator i18n878694
-Node: String Extraction879488
-Ref: String Extraction-Footnote-1880620
-Node: Printf Ordering880706
-Ref: Printf Ordering-Footnote-1883492
-Node: I18N Portability883556
-Ref: I18N Portability-Footnote-1886012
-Node: I18N Example886075
-Ref: I18N Example-Footnote-1889350
-Ref: I18N Example-Footnote-2889423
-Node: Gawk I18N889532
-Node: I18N Summary890181
-Node: Debugger891522
-Node: Debugging892522
-Node: Debugging Concepts892963
-Node: Debugging Terms894772
-Node: Awk Debugging897347
-Ref: Awk Debugging-Footnote-1898292
-Node: Sample Debugging Session898424
-Node: Debugger Invocation898958
-Node: Finding The Bug900344
-Node: List of Debugger Commands906818
-Node: Breakpoint Control908151
-Node: Debugger Execution Control911845
-Node: Viewing And Changing Data915207
-Node: Execution Stack918748
-Node: Debugger Info920385
-Node: Miscellaneous Debugger Commands924456
-Node: Readline Support929518
-Node: Limitations930414
-Node: Debugging Summary932968
-Node: Namespaces934247
-Node: Global Namespace935358
-Node: Qualified Names936756
-Node: Default Namespace937755
-Node: Changing The Namespace938496
-Node: Naming Rules940110
-Node: Internal Name Management941958
-Node: Namespace Example943000
-Node: Namespace And Features945562
-Node: Namespace Summary946997
-Node: Arbitrary Precision Arithmetic948474
-Node: Computer Arithmetic949961
-Ref: table-numeric-ranges953727
-Ref: table-floating-point-ranges954220
-Ref: Computer Arithmetic-Footnote-1954878
-Node: Math Definitions954935
-Ref: table-ieee-formats958251
-Ref: Math Definitions-Footnote-1958854
-Node: MPFR features958959
-Node: FP Math Caution960677
-Ref: FP Math Caution-Footnote-1961749
-Node: Inexactness of computations962118
-Node: Inexact representation963078
-Node: Comparing FP Values964438
-Node: Errors accumulate965679
-Node: Getting Accuracy967112
-Node: Try To Round969822
-Node: Setting precision970721
-Ref: table-predefined-precision-strings971418
-Node: Setting the rounding mode973248
-Ref: table-gawk-rounding-modes973622
-Ref: Setting the rounding mode-Footnote-1977553
-Node: Arbitrary Precision Integers977732
-Ref: Arbitrary Precision Integers-Footnote-1980907
-Node: Checking for MPFR981056
-Node: POSIX Floating Point Problems982530
-Ref: POSIX Floating Point Problems-Footnote-1986815
-Node: Floating point summary986853
-Node: Dynamic Extensions989043
-Node: Extension Intro990596
-Node: Plugin License991862
-Node: Extension Mechanism Outline992659
-Ref: figure-load-extension993098
-Ref: figure-register-new-function994663
-Ref: figure-call-new-function995755
-Node: Extension API Description997817
-Node: Extension API Functions Introduction999459
-Ref: table-api-std-headers1001295
-Node: General Data Types1005160
-Ref: General Data Types-Footnote-11013521
-Node: Memory Allocation Functions1013820
-Ref: Memory Allocation Functions-Footnote-11018030
-Node: Constructor Functions1018129
-Node: Registration Functions1021715
-Node: Extension Functions1022400
-Node: Exit Callback Functions1027722
-Node: Extension Version String1028972
-Node: Input Parsers1029635
-Node: Output Wrappers1042356
-Node: Two-way processors1046868
-Node: Printing Messages1049133
-Ref: Printing Messages-Footnote-11050304
-Node: Updating ERRNO1050457
-Node: Requesting Values1051196
-Ref: table-value-types-returned1051933
-Node: Accessing Parameters1052869
-Node: Symbol Table Access1054104
-Node: Symbol table by name1054616
-Ref: Symbol table by name-Footnote-11057640
-Node: Symbol table by cookie1057768
-Ref: Symbol table by cookie-Footnote-11061953
-Node: Cached values1062017
-Ref: Cached values-Footnote-11065553
-Node: Array Manipulation1065706
-Ref: Array Manipulation-Footnote-11066797
-Node: Array Data Types1066834
-Ref: Array Data Types-Footnote-11069492
-Node: Array Functions1069584
-Node: Flattening Arrays1074082
-Node: Creating Arrays1081058
-Node: Redirection API1085825
-Node: Extension API Variables1088658
-Node: Extension Versioning1089369
-Ref: gawk-api-version1089798
-Node: Extension GMP/MPFR Versioning1091529
-Node: Extension API Informational Variables1093157
-Node: Extension API Boilerplate1094230
-Node: Changes from API V11098204
-Node: Finding Extensions1099776
-Node: Extension Example1100335
-Node: Internal File Description1101133
-Node: Internal File Ops1105213
-Ref: Internal File Ops-Footnote-11116563
-Node: Using Internal File Ops1116703
-Ref: Using Internal File Ops-Footnote-11119086
-Node: Extension Samples1119360
-Node: Extension Sample File Functions1120889
-Node: Extension Sample Fnmatch1128538
-Node: Extension Sample Fork1130025
-Node: Extension Sample Inplace1131243
-Node: Extension Sample Ord1134868
-Node: Extension Sample Readdir1135704
-Ref: table-readdir-file-types1136593
-Node: Extension Sample Revout1137660
-Node: Extension Sample Rev2way1138249
-Node: Extension Sample Read write array1138989
-Node: Extension Sample Readfile1140931
-Node: Extension Sample Time1142026
-Node: Extension Sample API Tests1143778
-Node: gawkextlib1144270
-Node: Extension summary1147188
-Node: Extension Exercises1150890
-Node: Language History1152132
-Node: V7/SVR3.11153788
-Node: SVR41155940
-Node: POSIX1157374
-Node: BTL1158755
-Node: POSIX/GNU1159484
-Node: Feature History1165262
-Node: Common Extensions1181581
-Node: Ranges and Locales1182864
-Ref: Ranges and Locales-Footnote-11187480
-Ref: Ranges and Locales-Footnote-21187507
-Ref: Ranges and Locales-Footnote-31187742
-Node: Contributors1187965
-Node: History summary1193962
-Node: Installation1195342
-Node: Gawk Distribution1196286
-Node: Getting1196770
-Node: Extracting1197733
-Node: Distribution contents1199371
-Node: Unix Installation1205851
-Node: Quick Installation1206533
-Node: Shell Startup Files1208947
-Node: Additional Configuration Options1210036
-Node: Configuration Philosophy1212351
-Node: Non-Unix Installation1214720
-Node: PC Installation1215180
-Node: PC Binary Installation1216018
-Node: PC Compiling1216453
-Node: PC Using1217570
-Node: Cygwin1221123
-Node: MSYS1222347
-Node: VMS Installation1222949
-Node: VMS Compilation1223740
-Ref: VMS Compilation-Footnote-11224969
-Node: VMS Dynamic Extensions1225027
-Node: VMS Installation Details1226712
-Node: VMS Running1228965
-Node: VMS GNV1233244
-Node: VMS Old Gawk1233979
-Node: Bugs1234450
-Node: Bug address1235113
-Node: Usenet1238095
-Node: Maintainers1239099
-Node: Other Versions1240284
-Node: Installation summary1247372
-Node: Notes1248581
-Node: Compatibility Mode1249375
-Node: Additions1250157
-Node: Accessing The Source1251082
-Node: Adding Code1252519
-Node: New Ports1258738
-Node: Derived Files1263113
-Ref: Derived Files-Footnote-11268773
-Ref: Derived Files-Footnote-21268808
-Ref: Derived Files-Footnote-31269406
-Node: Future Extensions1269520
-Node: Implementation Limitations1270178
-Node: Extension Design1271361
-Node: Old Extension Problems1272505
-Ref: Old Extension Problems-Footnote-11274023
-Node: Extension New Mechanism Goals1274080
-Ref: Extension New Mechanism Goals-Footnote-11277444
-Node: Extension Other Design Decisions1277633
-Node: Extension Future Growth1279746
-Node: Notes summary1280352
-Node: Basic Concepts1281510
-Node: Basic High Level1282191
-Ref: figure-general-flow1282473
-Ref: figure-process-flow1283158
-Ref: Basic High Level-Footnote-11286459
-Node: Basic Data Typing1286644
-Node: Glossary1289972
-Node: Copying1321857
-Node: GNU Free Documentation License1359400
-Node: Index1384520
+Node: Variables355333
+Node: Using Variables355990
+Node: Assignment Options357900
+Node: Conversion360371
+Node: Strings And Numbers360895
+Ref: Strings And Numbers-Footnote-1363958
+Node: Locale influences conversions364067
+Ref: table-locale-affects366825
+Node: All Operators367443
+Node: Arithmetic Ops368072
+Node: Concatenation370578
+Ref: Concatenation-Footnote-1373425
+Node: Assignment Ops373532
+Ref: table-assign-ops378523
+Node: Increment Ops379836
+Node: Truth Values and Conditions383296
+Node: Truth Values384370
+Node: Typing and Comparison385418
+Node: Variable Typing386238
+Ref: Variable Typing-Footnote-1392701
+Ref: Variable Typing-Footnote-2392773
+Node: Comparison Operators392850
+Ref: table-relational-ops393269
+Node: POSIX String Comparison396764
+Ref: POSIX String Comparison-Footnote-1398459
+Ref: POSIX String Comparison-Footnote-2398598
+Node: Boolean Ops398682
+Ref: Boolean Ops-Footnote-1403164
+Node: Conditional Exp403256
+Node: Function Calls404992
+Node: Precedence408869
+Node: Locales412528
+Node: Expressions Summary414160
+Node: Patterns and Actions416733
+Node: Pattern Overview417853
+Node: Regexp Patterns419530
+Node: Expression Patterns420072
+Node: Ranges423853
+Node: BEGIN/END426961
+Node: Using BEGIN/END427722
+Ref: Using BEGIN/END-Footnote-1430458
+Node: I/O And BEGIN/END430564
+Node: BEGINFILE/ENDFILE432878
+Node: Empty435791
+Node: Using Shell Variables436108
+Node: Action Overview438382
+Node: Statements440707
+Node: If Statement442555
+Node: While Statement444050
+Node: Do Statement446078
+Node: For Statement447226
+Node: Switch Statement450397
+Node: Break Statement452838
+Node: Continue Statement454930
+Node: Next Statement456757
+Node: Nextfile Statement459140
+Node: Exit Statement461792
+Node: Built-in Variables464195
+Node: User-modified465328
+Node: Auto-set473095
+Ref: Auto-set-Footnote-1489902
+Ref: Auto-set-Footnote-2490108
+Node: ARGC and ARGV490164
+Node: Pattern Action Summary494377
+Node: Arrays496807
+Node: Array Basics498136
+Node: Array Intro498980
+Ref: figure-array-elements500955
+Ref: Array Intro-Footnote-1503659
+Node: Reference to Elements503787
+Node: Assigning Elements506251
+Node: Array Example506742
+Node: Scanning an Array508501
+Node: Controlling Scanning511523
+Ref: Controlling Scanning-Footnote-1517979
+Node: Numeric Array Subscripts518295
+Node: Uninitialized Subscripts520479
+Node: Delete522098
+Ref: Delete-Footnote-1524850
+Node: Multidimensional524907
+Node: Multiscanning528002
+Node: Arrays of Arrays529593
+Node: Arrays Summary534361
+Node: Functions536454
+Node: Built-in537492
+Node: Calling Built-in538573
+Node: Numeric Functions540569
+Ref: Numeric Functions-Footnote-1544597
+Ref: Numeric Functions-Footnote-2545245
+Ref: Numeric Functions-Footnote-3545293
+Node: String Functions545565
+Ref: String Functions-Footnote-1569749
+Ref: String Functions-Footnote-2569877
+Ref: String Functions-Footnote-3570125
+Node: Gory Details570212
+Ref: table-sub-escapes572003
+Ref: table-sub-proposed573522
+Ref: table-posix-sub574885
+Ref: table-gensub-escapes576426
+Ref: Gory Details-Footnote-1577249
+Node: I/O Functions577403
+Ref: table-system-return-values583871
+Ref: I/O Functions-Footnote-1585951
+Ref: I/O Functions-Footnote-2586099
+Node: Time Functions586219
+Ref: Time Functions-Footnote-1596890
+Ref: Time Functions-Footnote-2596958
+Ref: Time Functions-Footnote-3597116
+Ref: Time Functions-Footnote-4597227
+Ref: Time Functions-Footnote-5597339
+Ref: Time Functions-Footnote-6597566
+Node: Bitwise Functions597832
+Ref: table-bitwise-ops598426
+Ref: Bitwise Functions-Footnote-1604489
+Ref: Bitwise Functions-Footnote-2604662
+Node: Type Functions604853
+Node: I18N Functions607716
+Node: User-defined609367
+Node: Definition Syntax610179
+Ref: Definition Syntax-Footnote-1615866
+Node: Function Example615937
+Ref: Function Example-Footnote-1618859
+Node: Function Calling618881
+Node: Calling A Function619469
+Node: Variable Scope620427
+Node: Pass By Value/Reference623421
+Node: Function Caveats626065
+Ref: Function Caveats-Footnote-1628112
+Node: Return Statement628232
+Node: Dynamic Typing631211
+Node: Indirect Calls632141
+Ref: Indirect Calls-Footnote-1642393
+Node: Functions Summary642521
+Node: Library Functions645226
+Ref: Library Functions-Footnote-1648833
+Ref: Library Functions-Footnote-2648976
+Node: Library Names649147
+Ref: Library Names-Footnote-1652814
+Ref: Library Names-Footnote-2653037
+Node: General Functions653123
+Node: Strtonum Function654226
+Node: Assert Function657248
+Node: Round Function660574
+Node: Cliff Random Function662114
+Node: Ordinal Functions663130
+Ref: Ordinal Functions-Footnote-1666193
+Ref: Ordinal Functions-Footnote-2666445
+Node: Join Function666655
+Ref: Join Function-Footnote-1668425
+Node: Getlocaltime Function668625
+Node: Readfile Function672367
+Node: Shell Quoting674344
+Node: Data File Management675745
+Node: Filetrans Function676377
+Node: Rewind Function680473
+Node: File Checking682382
+Ref: File Checking-Footnote-1683716
+Node: Empty Files683917
+Node: Ignoring Assigns685896
+Node: Getopt Function687446
+Ref: Getopt Function-Footnote-1702658
+Node: Passwd Functions702858
+Ref: Passwd Functions-Footnote-1711697
+Node: Group Functions711785
+Ref: Group Functions-Footnote-1719683
+Node: Walking Arrays719890
+Node: Library Functions Summary722898
+Node: Library Exercises724304
+Node: Sample Programs724769
+Node: Running Examples725539
+Node: Clones726267
+Node: Cut Program727491
+Node: Egrep Program737420
+Ref: Egrep Program-Footnote-1744932
+Node: Id Program745042
+Node: Split Program748722
+Ref: Split Program-Footnote-1752180
+Node: Tee Program752309
+Node: Uniq Program755099
+Node: Wc Program762720
+Ref: Wc Program-Footnote-1766975
+Node: Miscellaneous Programs767069
+Node: Dupword Program768282
+Node: Alarm Program770312
+Node: Translate Program775167
+Ref: Translate Program-Footnote-1779732
+Node: Labels Program780002
+Ref: Labels Program-Footnote-1783353
+Node: Word Sorting783437
+Node: History Sorting787509
+Node: Extract Program789734
+Node: Simple Sed797788
+Node: Igawk Program800862
+Ref: Igawk Program-Footnote-1815193
+Ref: Igawk Program-Footnote-2815395
+Ref: Igawk Program-Footnote-3815517
+Node: Anagram Program815632
+Node: Signature Program818694
+Node: Programs Summary819941
+Node: Programs Exercises821155
+Ref: Programs Exercises-Footnote-1825284
+Node: Advanced Features825375
+Node: Nondecimal Data827365
+Node: Array Sorting828956
+Node: Controlling Array Traversal829656
+Ref: Controlling Array Traversal-Footnote-1838024
+Node: Array Sorting Functions838142
+Ref: Array Sorting Functions-Footnote-1843233
+Node: Two-way I/O843429
+Ref: Two-way I/O-Footnote-1851150
+Ref: Two-way I/O-Footnote-2851337
+Node: TCP/IP Networking851419
+Node: Profiling854537
+Node: Advanced Features Summary863552
+Node: Internationalization865396
+Node: I18N and L10N866876
+Node: Explaining gettext867563
+Ref: Explaining gettext-Footnote-1873455
+Ref: Explaining gettext-Footnote-2873640
+Node: Programmer i18n873805
+Ref: Programmer i18n-Footnote-1878754
+Node: Translator i18n878803
+Node: String Extraction879597
+Ref: String Extraction-Footnote-1880729
+Node: Printf Ordering880815
+Ref: Printf Ordering-Footnote-1883601
+Node: I18N Portability883665
+Ref: I18N Portability-Footnote-1886121
+Node: I18N Example886184
+Ref: I18N Example-Footnote-1889459
+Ref: I18N Example-Footnote-2889532
+Node: Gawk I18N889641
+Node: I18N Summary890290
+Node: Debugger891631
+Node: Debugging892631
+Node: Debugging Concepts893072
+Node: Debugging Terms894881
+Node: Awk Debugging897456
+Ref: Awk Debugging-Footnote-1898401
+Node: Sample Debugging Session898533
+Node: Debugger Invocation899067
+Node: Finding The Bug900453
+Node: List of Debugger Commands906927
+Node: Breakpoint Control908260
+Node: Debugger Execution Control911954
+Node: Viewing And Changing Data915316
+Node: Execution Stack918857
+Node: Debugger Info920494
+Node: Miscellaneous Debugger Commands924565
+Node: Readline Support929627
+Node: Limitations930523
+Node: Debugging Summary933077
+Node: Namespaces934356
+Node: Global Namespace935467
+Node: Qualified Names936865
+Node: Default Namespace937864
+Node: Changing The Namespace938605
+Node: Naming Rules940219
+Node: Internal Name Management942067
+Node: Namespace Example943109
+Node: Namespace And Features945671
+Node: Namespace Summary947106
+Node: Arbitrary Precision Arithmetic948583
+Node: Computer Arithmetic950070
+Ref: table-numeric-ranges953836
+Ref: table-floating-point-ranges954329
+Ref: Computer Arithmetic-Footnote-1954987
+Node: Math Definitions955044
+Ref: table-ieee-formats958360
+Ref: Math Definitions-Footnote-1958963
+Node: MPFR features959068
+Node: FP Math Caution960786
+Ref: FP Math Caution-Footnote-1961858
+Node: Inexactness of computations962227
+Node: Inexact representation963187
+Node: Comparing FP Values964547
+Node: Errors accumulate965788
+Node: Getting Accuracy967221
+Node: Try To Round969931
+Node: Setting precision970830
+Ref: table-predefined-precision-strings971527
+Node: Setting the rounding mode973357
+Ref: table-gawk-rounding-modes973731
+Ref: Setting the rounding mode-Footnote-1977662
+Node: Arbitrary Precision Integers977841
+Ref: Arbitrary Precision Integers-Footnote-1981016
+Node: Checking for MPFR981165
+Node: POSIX Floating Point Problems982639
+Ref: POSIX Floating Point Problems-Footnote-1986924
+Node: Floating point summary986962
+Node: Dynamic Extensions989152
+Node: Extension Intro990705
+Node: Plugin License991971
+Node: Extension Mechanism Outline992768
+Ref: figure-load-extension993207
+Ref: figure-register-new-function994772
+Ref: figure-call-new-function995864
+Node: Extension API Description997926
+Node: Extension API Functions Introduction999568
+Ref: table-api-std-headers1001404
+Node: General Data Types1005269
+Ref: General Data Types-Footnote-11013630
+Node: Memory Allocation Functions1013929
+Ref: Memory Allocation Functions-Footnote-11018139
+Node: Constructor Functions1018238
+Node: Registration Functions1021824
+Node: Extension Functions1022509
+Node: Exit Callback Functions1027831
+Node: Extension Version String1029081
+Node: Input Parsers1029744
+Node: Output Wrappers1042465
+Node: Two-way processors1046977
+Node: Printing Messages1049242
+Ref: Printing Messages-Footnote-11050413
+Node: Updating ERRNO1050566
+Node: Requesting Values1051305
+Ref: table-value-types-returned1052042
+Node: Accessing Parameters1052978
+Node: Symbol Table Access1054213
+Node: Symbol table by name1054725
+Ref: Symbol table by name-Footnote-11057749
+Node: Symbol table by cookie1057877
+Ref: Symbol table by cookie-Footnote-11062062
+Node: Cached values1062126
+Ref: Cached values-Footnote-11065662
+Node: Array Manipulation1065815
+Ref: Array Manipulation-Footnote-11066906
+Node: Array Data Types1066943
+Ref: Array Data Types-Footnote-11069601
+Node: Array Functions1069693
+Node: Flattening Arrays1074191
+Node: Creating Arrays1081167
+Node: Redirection API1085934
+Node: Extension API Variables1088767
+Node: Extension Versioning1089478
+Ref: gawk-api-version1089907
+Node: Extension GMP/MPFR Versioning1091638
+Node: Extension API Informational Variables1093266
+Node: Extension API Boilerplate1094339
+Node: Changes from API V11098313
+Node: Finding Extensions1099885
+Node: Extension Example1100444
+Node: Internal File Description1101242
+Node: Internal File Ops1105322
+Ref: Internal File Ops-Footnote-11116672
+Node: Using Internal File Ops1116812
+Ref: Using Internal File Ops-Footnote-11119195
+Node: Extension Samples1119469
+Node: Extension Sample File Functions1120998
+Node: Extension Sample Fnmatch1128647
+Node: Extension Sample Fork1130134
+Node: Extension Sample Inplace1131352
+Node: Extension Sample Ord1134977
+Node: Extension Sample Readdir1135813
+Ref: table-readdir-file-types1136702
+Node: Extension Sample Revout1137769
+Node: Extension Sample Rev2way1138358
+Node: Extension Sample Read write array1139098
+Node: Extension Sample Readfile1141040
+Node: Extension Sample Time1142135
+Node: Extension Sample API Tests1143887
+Node: gawkextlib1144379
+Node: Extension summary1147297
+Node: Extension Exercises1150999
+Node: Language History1152241
+Node: V7/SVR3.11153897
+Node: SVR41156049
+Node: POSIX1157483
+Node: BTL1158864
+Node: POSIX/GNU1159593
+Node: Feature History1165371
+Node: Common Extensions1181690
+Node: Ranges and Locales1182973
+Ref: Ranges and Locales-Footnote-11187589
+Ref: Ranges and Locales-Footnote-21187616
+Ref: Ranges and Locales-Footnote-31187851
+Node: Contributors1188074
+Node: History summary1194071
+Node: Installation1195451
+Node: Gawk Distribution1196395
+Node: Getting1196879
+Node: Extracting1197842
+Node: Distribution contents1199480
+Node: Unix Installation1205960
+Node: Quick Installation1206642
+Node: Shell Startup Files1209056
+Node: Additional Configuration Options1210145
+Node: Configuration Philosophy1212460
+Node: Non-Unix Installation1214829
+Node: PC Installation1215289
+Node: PC Binary Installation1216127
+Node: PC Compiling1216562
+Node: PC Using1217679
+Node: Cygwin1221232
+Node: MSYS1222456
+Node: VMS Installation1223058
+Node: VMS Compilation1223849
+Ref: VMS Compilation-Footnote-11225078
+Node: VMS Dynamic Extensions1225136
+Node: VMS Installation Details1226821
+Node: VMS Running1229074
+Node: VMS GNV1233353
+Node: VMS Old Gawk1234088
+Node: Bugs1234559
+Node: Bug address1235222
+Node: Usenet1238204
+Node: Maintainers1239208
+Node: Other Versions1240393
+Node: Installation summary1247481
+Node: Notes1248690
+Node: Compatibility Mode1249484
+Node: Additions1250266
+Node: Accessing The Source1251191
+Node: Adding Code1252628
+Node: New Ports1258847
+Node: Derived Files1263222
+Ref: Derived Files-Footnote-11268882
+Ref: Derived Files-Footnote-21268917
+Ref: Derived Files-Footnote-31269515
+Node: Future Extensions1269629
+Node: Implementation Limitations1270287
+Node: Extension Design1271470
+Node: Old Extension Problems1272614
+Ref: Old Extension Problems-Footnote-11274132
+Node: Extension New Mechanism Goals1274189
+Ref: Extension New Mechanism Goals-Footnote-11277553
+Node: Extension Other Design Decisions1277742
+Node: Extension Future Growth1279855
+Node: Notes summary1280461
+Node: Basic Concepts1281619
+Node: Basic High Level1282300
+Ref: figure-general-flow1282582
+Ref: figure-process-flow1283267
+Ref: Basic High Level-Footnote-11286568
+Node: Basic Data Typing1286753
+Node: Glossary1290081
+Node: Copying1321966
+Node: GNU Free Documentation License1359509
+Node: Index1384629
 
 End Tag Table
 
diff --git a/doc/gawk.texi b/doc/gawk.texi
index 1a886b9..6141347 100644
--- a/doc/gawk.texi
+++ b/doc/gawk.texi
@@ -11721,6 +11721,9 @@ As a parameter in a call to a user-defined function
 (@pxref{User-defined}).
 
 @item
+As the return value of a user-defined function.
+
+@item
 On the righthand side of an assignment to a variable: @samp{some_var = 
@@/foo/}.
 In this case, the type of @code{some_var} is regexp. Additionally, 
@code{some_var}
 can be used with @samp{~} and @samp{!~}, passed to one of the built-in 
functions
@@ -15102,13 +15105,14 @@ the execution of statements based on a @code{case} 
match. Case statements
 are checked for a match in the order they are defined.  If no suitable
 @code{case} is found, the @code{default} section is executed, if supplied.
 
-Each @code{case} contains a single constant, be it numeric, string, or
-regexp.  The @code{switch} expression is evaluated, and then each
-@code{case}'s constant is compared against the result in turn. The type of 
constant
-determines the comparison: numeric or string do the usual comparisons.
-A regexp constant does a regular expression match against the string
-value of the original expression.  The general form of the @code{switch}
-statement looks like this:
+Each @code{case} contains a single constant, be it numeric, string,
+or regexp.  The @code{switch} expression is evaluated, and then each
+@code{case}'s constant is compared against the result in turn. The
+type of constant determines the comparison: numeric or string do the
+usual comparisons.  A regexp constant (either regular, @code{/foo/}, or
+strongly typed, @code{@@/foo/}) does a regular expression match against
+the string value of the original expression.  The general form of the
+@code{switch} statement looks like this:
 
 @example
 switch (@var{expression}) @{
diff --git a/doc/gawktexi.in b/doc/gawktexi.in
index 6337fed..0d14c87 100644
--- a/doc/gawktexi.in
+++ b/doc/gawktexi.in
@@ -11175,6 +11175,9 @@ As a parameter in a call to a user-defined function
 (@pxref{User-defined}).
 
 @item
+As the return value of a user-defined function.
+
+@item
 On the righthand side of an assignment to a variable: @samp{some_var = 
@@/foo/}.
 In this case, the type of @code{some_var} is regexp. Additionally, 
@code{some_var}
 can be used with @samp{~} and @samp{!~}, passed to one of the built-in 
functions
@@ -14417,13 +14420,14 @@ the execution of statements based on a @code{case} 
match. Case statements
 are checked for a match in the order they are defined.  If no suitable
 @code{case} is found, the @code{default} section is executed, if supplied.
 
-Each @code{case} contains a single constant, be it numeric, string, or
-regexp.  The @code{switch} expression is evaluated, and then each
-@code{case}'s constant is compared against the result in turn. The type of 
constant
-determines the comparison: numeric or string do the usual comparisons.
-A regexp constant does a regular expression match against the string
-value of the original expression.  The general form of the @code{switch}
-statement looks like this:
+Each @code{case} contains a single constant, be it numeric, string,
+or regexp.  The @code{switch} expression is evaluated, and then each
+@code{case}'s constant is compared against the result in turn. The
+type of constant determines the comparison: numeric or string do the
+usual comparisons.  A regexp constant (either regular, @code{/foo/}, or
+strongly typed, @code{@@/foo/}) does a regular expression match against
+the string value of the original expression.  The general form of the
+@code{switch} statement looks like this:
 
 @example
 switch (@var{expression}) @{

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

commit 47dce6a7002a8d7b818c19d574d81327b769871b
Author: Arnold D. Robbins <arnold@skeeve.com>
Date:   Fri Jun 5 13:14:54 2020 +0300

    Allow for cross-compile version of ar.

diff --git a/ChangeLog b/ChangeLog
index 8a73490..b9e81cc 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2020-06-05         Arnold D. Robbins     <arnold@skeeve.com>
+
+       * configure.ac: Add call to AM_PROG_AR for use in
+       cross compiles.  Thanks to Sergei Trofimovich <slyfox@gentoo.org>
+       for the patch.
+
 2020-05-15         Arnold D. Robbins     <arnold@skeeve.com>
 
        * config.guess, config.sub: Updated from GNULIB.
diff --git a/Makefile.in b/Makefile.in
index 18e1b32..1891a40 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -279,9 +279,9 @@ CTAGS = ctags
 CSCOPE = cscope
 DIST_SUBDIRS = support . extension extras doc awklib po test
 am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/configh.in ABOUT-NLS \
-       AUTHORS COPYING ChangeLog INSTALL NEWS README TODO awkgram.c \
-       command.c compile config.guess config.rpath config.sub depcomp \
-       install-sh missing mkinstalldirs ylwrap
+       AUTHORS COPYING ChangeLog INSTALL NEWS README TODO ar-lib \
+       awkgram.c command.c compile config.guess config.rpath \
+       config.sub depcomp install-sh missing mkinstalldirs ylwrap
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 distdir = $(PACKAGE)-$(VERSION)
 top_distdir = $(distdir)
@@ -330,6 +330,7 @@ pkgdatadir = $(datadir)/awk
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
@@ -407,6 +408,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 acl_shlibext = @acl_shlibext@
 am__include = @am__include@
diff --git a/aclocal.m4 b/aclocal.m4
index 08ec544..f5b7339 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -56,6 +56,66 @@ m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
 _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
 
+# Copyright (C) 2011-2020 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_AR([ACT-IF-FAIL])
+# -------------------------
+# Try to determine the archiver interface, and trigger the ar-lib wrapper
+# if it is needed.  If the detection of archiver interface fails, run
+# ACT-IF-FAIL (default is to abort configure with a proper error message).
+AC_DEFUN([AM_PROG_AR],
+[AC_BEFORE([$0], [LT_INIT])dnl
+AC_BEFORE([$0], [AC_PROG_LIBTOOL])dnl
+AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([ar-lib])dnl
+AC_CHECK_TOOLS([AR], [ar lib "link -lib"], [false])
+: ${AR=ar}
+
+AC_CACHE_CHECK([the archiver ($AR) interface], [am_cv_ar_interface],
+  [AC_LANG_PUSH([C])
+   am_cv_ar_interface=ar
+   AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int some_variable = 0;]])],
+     [am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&AS_MESSAGE_LOG_FD'
+      AC_TRY_EVAL([am_ar_try])
+      if test "$ac_status" -eq 0; then
+        am_cv_ar_interface=ar
+      else
+        am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext 
>&AS_MESSAGE_LOG_FD'
+        AC_TRY_EVAL([am_ar_try])
+        if test "$ac_status" -eq 0; then
+          am_cv_ar_interface=lib
+        else
+          am_cv_ar_interface=unknown
+        fi
+      fi
+      rm -f conftest.lib libconftest.a
+     ])
+   AC_LANG_POP([C])])
+
+case $am_cv_ar_interface in
+ar)
+  ;;
+lib)
+  # Microsoft lib, so override with the ar-lib wrapper script.
+  # FIXME: It is wrong to rewrite AR.
+  # But if we don't then we get into trouble of one sort or another.
+  # A longer-term fix would be to have automake use am__AR in this case,
+  # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something
+  # similar.
+  AR="$am_aux_dir/ar-lib $AR"
+  ;;
+unknown)
+  m4_default([$1],
+             [AC_MSG_ERROR([could not determine $AR interface])])
+  ;;
+esac
+AC_SUBST([AR])dnl
+])
+
 # AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
 
 # Copyright (C) 2001-2020 Free Software Foundation, Inc.
diff --git a/ar-lib b/ar-lib
new file mode 120000
index 0000000..71a3311
--- /dev/null
+++ b/ar-lib
@@ -0,0 +1 @@
+/usr/local/share/automake-1.16/ar-lib
\ No newline at end of file
diff --git a/awklib/Makefile.in b/awklib/Makefile.in
index 2c49267..2683ea1 100644
--- a/awklib/Makefile.in
+++ b/awklib/Makefile.in
@@ -202,6 +202,7 @@ pkglibexecdir = $(libexecdir)/awk
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
@@ -279,6 +280,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 acl_shlibext = @acl_shlibext@
 am__include = @am__include@
diff --git a/configure b/configure
index 684c76d..6dfd664 100755
--- a/configure
+++ b/configure
@@ -662,6 +662,8 @@ USE_NLS
 SED
 ZOS_FAIL
 acl_shlibext
+ac_ct_AR
+AR
 RANLIB
 LN_S
 YFLAGS
@@ -5506,6 +5508,179 @@ $as_echo "no" >&6; }
 fi
 
 
+# support/ builds libsupport.a, allow for cross version of ar
+if test -n "$ac_tool_prefix"; then
+  for ac_prog in ar lib "link -lib"
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a 
program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AR"; then
+  ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" 
>&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+$as_echo "$AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$AR" && break
+  done
+fi
+if test -z "$AR"; then
+  ac_ct_AR=$AR
+  for ac_prog in ar lib "link -lib"
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with 
args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_AR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_AR"; then
+  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_AR="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" 
>&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_AR" && break
+done
+
+  if test "x$ac_ct_AR" = x; then
+    AR="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not 
prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" 
>&2;}
+ac_tool_warned=yes ;;
+esac
+    AR=$ac_ct_AR
+  fi
+fi
+
+: ${AR=ar}
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the archiver ($AR) 
interface" >&5
+$as_echo_n "checking the archiver ($AR) interface... " >&6; }
+if ${am_cv_ar_interface+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext 
$LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+   am_cv_ar_interface=ar
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+int some_variable = 0;
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&5'
+      { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5
+  (eval $am_ar_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+      if test "$ac_status" -eq 0; then
+        am_cv_ar_interface=ar
+      else
+        am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&5'
+        { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5
+  (eval $am_ar_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+        if test "$ac_status" -eq 0; then
+          am_cv_ar_interface=lib
+        else
+          am_cv_ar_interface=unknown
+        fi
+      fi
+      rm -f conftest.lib libconftest.a
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext 
$LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_ar_interface" >&5
+$as_echo "$am_cv_ar_interface" >&6; }
+
+case $am_cv_ar_interface in
+ar)
+  ;;
+lib)
+  # Microsoft lib, so override with the ar-lib wrapper script.
+  # FIXME: It is wrong to rewrite AR.
+  # But if we don't then we get into trouble of one sort or another.
+  # A longer-term fix would be to have automake use am__AR in this case,
+  # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something
+  # similar.
+  AR="$am_aux_dir/ar-lib $AR"
+  ;;
+unknown)
+  as_fn_error $? "could not determine $AR interface" "$LINENO" 5
+  ;;
+esac
+
+
 # This is mainly for my use during testing and development.
 # Yes, it's a bit of a hack.
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special development 
options" >&5
diff --git a/configure.ac b/configure.ac
index 31364ab..8c256f2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -105,6 +105,9 @@ AC_EXEEXT
 AC_PROG_INSTALL
 AC_PROG_MAKE_SET
 
+# support/ builds libsupport.a, allow for cross version of ar
+AM_PROG_AR
+
 # This is mainly for my use during testing and development.
 # Yes, it's a bit of a hack.
 AC_MSG_CHECKING([for special development options])
diff --git a/doc/Makefile.in b/doc/Makefile.in
index e38e3f3..298dbc7 100644
--- a/doc/Makefile.in
+++ b/doc/Makefile.in
@@ -230,6 +230,7 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) 
$(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
@@ -307,6 +308,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 acl_shlibext = @acl_shlibext@
 am__include = @am__include@
diff --git a/extras/Makefile.in b/extras/Makefile.in
index a9e4fd2..f087564 100644
--- a/extras/Makefile.in
+++ b/extras/Makefile.in
@@ -187,6 +187,7 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) 
$(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
@@ -264,6 +265,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 acl_shlibext = @acl_shlibext@
 am__include = @am__include@
diff --git a/support/Makefile.in b/support/Makefile.in
index 28e2c0c..cac4974 100644
--- a/support/Makefile.in
+++ b/support/Makefile.in
@@ -133,7 +133,6 @@ CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 LIBRARIES = $(noinst_LIBRARIES)
-AR = ar
 ARFLAGS = cru
 AM_V_AR = $(am__v_AR_@AM_V@)
 am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@)
@@ -208,6 +207,7 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) 
$(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
@@ -285,6 +285,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 acl_shlibext = @acl_shlibext@
 am__include = @am__include@
diff --git a/test/Makefile.in b/test/Makefile.in
index f5f8e05..dd1f831 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -157,6 +157,7 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) 
$(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
@@ -234,6 +235,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 acl_shlibext = @acl_shlibext@
 am__include = @am__include@

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

Summary of changes:
 ChangeLog           |   11 +
 Makefile.in         |    8 +-
 aclocal.m4          |   60 ++
 ar-lib              |    1 +
 awkgram.c           | 1529 ++++++++++++++++++++++++++-------------------------
 awkgram.y           |    8 +-
 awklib/Makefile.in  |    2 +
 configure           |  175 ++++++
 configure.ac        |    3 +
 doc/ChangeLog       |    5 +
 doc/Makefile.in     |    2 +
 doc/gawk.info       |  886 ++++++++++++++---------------
 doc/gawk.texi       |   18 +-
 doc/gawktexi.in     |   18 +-
 extras/Makefile.in  |    2 +
 support/Makefile.in |    3 +-
 test/Makefile.in    |    2 +
 17 files changed, 1515 insertions(+), 1218 deletions(-)
 create mode 120000 ar-lib


hooks/post-receive
-- 
gawk



reply via email to

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