aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2019-01-25 11:55:54 +0200
committerArnold D. Robbins <arnold@skeeve.com>2019-01-25 11:55:54 +0200
commiteea77e4b393b7c1841da887f590b5f5eab964ad4 (patch)
treeeb0e955851fbdd85250e12fbfaa5ec390d1088f9
parent48f4822b0602c44aacd418f36ff35645e8379b8e (diff)
parentfda51ca6fd0d9ad93bead9887ded0b07c90680fb (diff)
downloadegawk-eea77e4b393b7c1841da887f590b5f5eab964ad4.tar.gz
egawk-eea77e4b393b7c1841da887f590b5f5eab964ad4.tar.bz2
egawk-eea77e4b393b7c1841da887f590b5f5eab964ad4.zip
Merge branch 'feature/fix-ns-memleak'
-rwxr-xr-xChangeLog75
-rw-r--r--array.c2
-rw-r--r--awk.h4
-rw-r--r--awkgram.c2065
-rw-r--r--awkgram.y123
-rw-r--r--command.c2
-rw-r--r--command.y2
-rw-r--r--debug.c4
-rw-r--r--doc/ChangeLog5
-rw-r--r--doc/gawk.info377
-rw-r--r--doc/gawk.texi7
-rw-r--r--doc/gawktexi.in7
-rw-r--r--ext.c4
-rw-r--r--gawkapi.c4
-rw-r--r--interpret.h4
-rw-r--r--main.c20
-rw-r--r--profile.c5
-rw-r--r--symbol.c68
-rw-r--r--test/ChangeLog14
-rw-r--r--test/Makefile.am6
-rw-r--r--test/Makefile.in17
-rw-r--r--test/Maketests10
-rw-r--r--test/nsforloop.awk20
-rw-r--r--test/nsforloop.ok7
-rw-r--r--test/nsfuncrecurse.awk18
-rw-r--r--test/nsfuncrecurse.ok5
-rw-r--r--test/nsindirect2.ok2
-rw-r--r--test/nsprof2.ok20
28 files changed, 1565 insertions, 1332 deletions
diff --git a/ChangeLog b/ChangeLog
index 5e3f9a2e..b89a9f6d 100755
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,80 @@
+2019-01-24 Arnold D. Robbins <arnold@skeeve.com>
+
+ * awkgram.y (Grammar): Add new production `qualified_name' which
+ is NAME + qualification call. Use it everywhere that NAME was
+ used, except for function parameters.
+
+2019-01-23 Arnold D. Robbins <arnold@skeeve.com>
+
+ * profile.c (adjust_namespace): Check for all upper case
+ identifiers so we don't get things like awk::NF.
+
+2019-01-23 Arnold D. Robbins <arnold@skeeve.com>
+
+ * symtab.c (lookup): Remove second `do_qualify' parameter.
+ Remove calls to `fix_up_namespace'. If name starts with
+ "awk::" just lookup the compnent name.
+ Adjust all calls to `lookup' in other files.
+ (install): Don't use `fix_up_namespace'.
+ (fix_up_namespace): Remove function.
+ * awk.h (lookup): Adjust declaration.
+
+2019-01-23 Arnold D. Robbins <arnold@skeeve.com>
+
+ * awkgram.y (qualify_name): Don't qualify a name if it's
+ a parameter.
+
+2019-01-21 Arnold D. Robbins <arnold@skeeve.com>
+
+ * awkgram.y (Grammar): Use qualify_name for array subscript
+ expressions. Fixes the last leak in the test suite.
+ * awk.h (is_all_upper): Declare.
+ * symbol.c (is_all_upper): Remove static.
+ * awkgram.y (is_all_upper): Remove.
+ (Grammar): Clean up `#if 0' code.
+
2019-01-20 Arnold D. Robbins <arnold@skeeve.com>
+ Restore functionality.
+
+ * awkgram.y (qualify_name): Remove `is_var' param, always check
+ for all upper case. Adjust all calls.
+ (Grammar): Do qualify_name for function calls also.
+
+2019-01-19 Arnold D. Robbins <arnold@skeeve.com>
+
+ Continue fixing memory leaks.
+
+ * awk.h (set_current_namespace): Declare function.
+ * awkgram.y: Change all assignments of current_namespace to calls
+ to set_current_namespace.
+ (is_all_upper, qualify_name): New functions.
+ (in_function): Change type to bool, and fix usages.
+ (Grammar): Use qualify_name on variables and function names.
+ * main.c: Change all assignments of current_namespace to calls
+ to set_current_namespace.
+ (set_current_namespace): New function.
+ * profile.c (pp_namespace): Don't free old current_namespace. Add
+ comment explaining why.
+
+2019-01-18 Arnold D. Robbins <arnold@skeeve.com>
+
+ Start fixing memory leaks related to namespaces.
+
+ * awkgram.y (Grammar): At simple_variable -> NAME, qualify names
+ before lookup/install.
+ (next_sourcefile): Check if need to free current_namespace before
+ assigning to it.
+ (yylex): Fix length of string to be dup'ed before returning
+ NAME or FUNC_CALL.
+ (set_namespace): Always free ns->lextok, adjust memory allocations
+ appropriately.
+ * main.c (main): Check if need to free current_namespace before
+ assigning to it.
+ * profile.c (pp_namespace): Ditto. (This may not be necessary.)
+
+2019-01-18 Arnold D. Robbins <arnold@skeeve.com>
+
* debug.c (do_set_var): Add comments before calls to assoc_set.
* interpret.h (r_interpret): For Op_sub_array, deref the subscript
appropriately. Thanks to Andy Schorr for the catch.
diff --git a/array.c b/array.c
index 2cc76743..43f84717 100644
--- a/array.c
+++ b/array.c
@@ -1309,7 +1309,7 @@ assoc_list(NODE *symbol, const char *sort_str, sort_context_t sort_ctxt)
if (sp == sort_str || *sp != '\0')
fatal(_("`%s' is invalid as a function name"), sort_str);
- f = lookup(sort_str, false);
+ f = lookup(sort_str);
if (f == NULL || f->type != Node_func)
fatal(_("sort comparison function `%s' is not defined"), sort_str);
diff --git a/awk.h b/awk.h
index 378b935f..a8a37f60 100644
--- a/awk.h
+++ b/awk.h
@@ -1611,6 +1611,7 @@ extern char *estrdup(const char *str, size_t len);
extern void update_global_values();
extern long getenv_long(const char *name);
extern void after_beginfile(IOBUF **curfile);
+extern void set_current_namespace(const char *new_namespace);
/* mpfr.c */
extern void set_PREC(void);
@@ -1713,7 +1714,7 @@ extern NODE *remove_symbol(NODE *r);
extern void destroy_symbol(NODE *r);
extern void release_symbols(NODE *symlist, int keep_globals);
extern void append_symbol(NODE *r);
-extern NODE *lookup(const char *name, bool do_qualify);
+extern NODE *lookup(const char *name);
extern NODE *make_params(char **pnames, int pcount);
extern void install_params(NODE *func);
extern void remove_params(NODE *func);
@@ -1730,6 +1731,7 @@ extern NODE **variable_list();
extern NODE **function_list(bool sort);
extern void print_vars(NODE **table, Func_print print_func, FILE *fp);
extern bool check_param_names(void);
+extern bool is_all_upper(const char *name);
/* floatcomp.c */
#ifdef HAVE_UINTMAX_T
diff --git a/awkgram.c b/awkgram.c
index aa86581c..a9608447 100644
--- a/awkgram.c
+++ b/awkgram.c
@@ -103,6 +103,7 @@ static void next_sourcefile(void);
static char *tokexpand(void);
static NODE *set_profile_text(NODE *n, const char *str, size_t len);
static int check_qualified_special(char *token);
+static char *qualify_name(const char *name, size_t len);
static INSTRUCTION *trailing_comment;
static INSTRUCTION *outer_comment;
static INSTRUCTION *interblock_comment;
@@ -159,7 +160,7 @@ static enum {
FUNC_BODY,
DONT_CHECK
} want_param_names = DONT_CHECK; /* ditto */
-static char *in_function; /* parsing kludge */
+static bool in_function; /* parsing kludge */
static int rule = 0;
const char *const ruletab[] = {
@@ -228,7 +229,7 @@ extern double fmod(double x, double y);
#define YYSTYPE INSTRUCTION *
-#line 232 "awkgram.c" /* yacc.c:338 */
+#line 233 "awkgram.c" /* yacc.c:338 */
# ifndef YY_NULLPTR
# if defined __cplusplus
# if 201103L <= __cplusplus
@@ -620,16 +621,16 @@ union yyalloc
/* YYFINAL -- State number of the termination state. */
#define YYFINAL 2
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 1191
+#define YYLAST 1169
/* YYNTOKENS -- Number of terminals. */
#define YYNTOKENS 77
/* YYNNTS -- Number of nonterminals. */
-#define YYNNTS 71
+#define YYNNTS 72
/* YYNRULES -- Number of rules. */
-#define YYNRULES 207
+#define YYNRULES 208
/* YYNSTATES -- Number of states. */
-#define YYNSTATES 355
+#define YYNSTATES 356
/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
by yylex, with out-of-bounds checking. */
@@ -681,27 +682,27 @@ static const yytype_uint8 yytranslate[] =
/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
static const yytype_uint16 yyrline[] =
{
- 0, 230, 230, 231, 236, 246, 250, 262, 270, 284,
- 295, 305, 315, 328, 338, 340, 345, 355, 357, 362,
- 364, 366, 372, 376, 381, 411, 423, 435, 441, 450,
- 468, 470, 472, 478, 486, 487, 491, 491, 525, 524,
- 558, 573, 575, 580, 581, 601, 606, 607, 611, 622,
- 627, 634, 742, 793, 843, 969, 990, 1011, 1021, 1031,
- 1041, 1052, 1065, 1083, 1082, 1096, 1114, 1114, 1212, 1212,
- 1245, 1275, 1283, 1284, 1290, 1291, 1298, 1303, 1316, 1331,
- 1333, 1341, 1348, 1350, 1358, 1367, 1369, 1378, 1379, 1387,
- 1392, 1392, 1405, 1411, 1423, 1427, 1449, 1450, 1456, 1457,
- 1466, 1467, 1472, 1477, 1494, 1496, 1498, 1505, 1506, 1512,
- 1513, 1518, 1520, 1527, 1529, 1537, 1542, 1553, 1554, 1559,
- 1561, 1568, 1570, 1578, 1583, 1593, 1594, 1599, 1606, 1610,
- 1612, 1614, 1627, 1644, 1654, 1661, 1663, 1668, 1670, 1672,
- 1680, 1682, 1687, 1689, 1694, 1696, 1698, 1755, 1757, 1759,
- 1761, 1763, 1765, 1767, 1769, 1783, 1788, 1793, 1818, 1824,
- 1826, 1828, 1830, 1832, 1834, 1839, 1843, 1875, 1883, 1889,
- 1895, 1908, 1909, 1910, 1915, 1920, 1924, 1928, 1943, 1964,
- 1969, 2006, 2048, 2049, 2055, 2056, 2061, 2063, 2070, 2087,
- 2104, 2106, 2113, 2118, 2126, 2136, 2148, 2157, 2161, 2166,
- 2170, 2174, 2178, 2183, 2184, 2188, 2192, 2196
+ 0, 231, 231, 232, 237, 247, 251, 263, 271, 285,
+ 296, 306, 316, 329, 339, 341, 346, 356, 358, 363,
+ 365, 367, 373, 377, 382, 412, 424, 436, 442, 451,
+ 469, 483, 484, 495, 501, 509, 510, 514, 514, 548,
+ 547, 581, 596, 598, 603, 604, 624, 629, 630, 634,
+ 645, 650, 657, 765, 816, 866, 992, 1013, 1034, 1044,
+ 1054, 1064, 1075, 1088, 1106, 1105, 1119, 1137, 1137, 1235,
+ 1235, 1268, 1298, 1306, 1307, 1313, 1314, 1321, 1326, 1339,
+ 1354, 1356, 1364, 1371, 1373, 1381, 1390, 1392, 1401, 1402,
+ 1410, 1415, 1415, 1428, 1434, 1446, 1450, 1472, 1473, 1479,
+ 1480, 1489, 1490, 1495, 1500, 1517, 1519, 1521, 1528, 1529,
+ 1535, 1536, 1541, 1543, 1550, 1552, 1560, 1565, 1576, 1577,
+ 1582, 1584, 1591, 1593, 1601, 1606, 1616, 1617, 1622, 1629,
+ 1633, 1635, 1637, 1650, 1667, 1677, 1684, 1686, 1691, 1693,
+ 1695, 1703, 1705, 1710, 1712, 1717, 1719, 1721, 1778, 1780,
+ 1782, 1784, 1786, 1788, 1790, 1792, 1806, 1811, 1816, 1841,
+ 1847, 1849, 1851, 1853, 1855, 1857, 1862, 1866, 1898, 1906,
+ 1912, 1918, 1931, 1932, 1933, 1938, 1943, 1947, 1951, 1966,
+ 1987, 1992, 2029, 2066, 2067, 2073, 2074, 2079, 2081, 2088,
+ 2105, 2122, 2124, 2131, 2136, 2142, 2153, 2165, 2174, 2178,
+ 2183, 2187, 2191, 2195, 2200, 2201, 2205, 2209, 2213
};
#endif
@@ -723,8 +724,8 @@ static const char *const yytname[] =
"SLASH_BEFORE_EQUAL", "'?'", "':'", "','", "'<'", "'>'", "'+'", "'-'",
"'*'", "'/'", "'%'", "'!'", "UNARY", "'^'", "'$'", "'('", "')'", "'@'",
"'['", "']'", "'{'", "'}'", "';'", "$accept", "program", "rule",
- "source", "library", "namespace", "pattern", "action", "func_name",
- "lex_builtin", "function_prologue", "$@1", "regexp", "$@2",
+ "source", "library", "namespace", "pattern", "action", "qualified_name",
+ "func_name", "lex_builtin", "function_prologue", "$@1", "regexp", "$@2",
"typed_regexp", "a_slash", "statements", "statement_term", "statement",
"non_compound_stmt", "$@3", "simple_stmt", "$@4", "$@5",
"opt_simple_stmt", "case_statements", "case_statement", "case_value",
@@ -757,56 +758,56 @@ static const yytype_uint16 yytoknum[] =
};
# endif
-#define YYPACT_NINF -283
+#define YYPACT_NINF -295
#define yypact_value_is_default(Yystate) \
- (!!((Yystate) == (-283)))
+ (!!((Yystate) == (-295)))
-#define YYTABLE_NINF -119
+#define YYTABLE_NINF -120
#define yytable_value_is_error(Yytable_value) \
- (!!((Yytable_value) == (-119)))
+ (!!((Yytable_value) == (-120)))
/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
STATE-NUM. */
static const yytype_int16 yypact[] =
{
- -283, 316, -283, -283, -45, -28, -283, -283, -283, -283,
- 160, -283, -283, 23, 23, 23, -39, -18, -283, -283,
- -283, 1047, 1047, -283, 1047, 1075, 818, 257, -283, 99,
- -20, -283, -283, 11, 1017, 974, 378, 415, -283, -283,
- -283, -283, 329, 742, 818, -283, 0, -283, -283, -283,
- -283, -283, 25, 9, -283, 22, -283, -283, -283, 742,
- 742, 79, 46, 18, 46, 46, 1047, 114, -283, -283,
- 13, 286, 44, 47, 60, -283, 94, -283, -283, -283,
- 11, -283, 94, -283, 151, -283, -283, 1002, 162, 1047,
- 1047, 1047, 94, -283, -283, -283, 1047, 1047, 132, 378,
- 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047,
- 1047, 1047, -283, 170, -283, -283, 168, 1047, -283, -283,
- -283, 116, 14, -283, 1132, 76, 1132, -283, -283, -283,
- -283, 1047, -283, 116, 116, 286, -283, -283, -283, 1047,
- -283, 144, 846, -283, -283, 34, 91, -283, 39, 91,
- -283, 59, 91, 11, -283, 542, -283, -283, -283, 145,
- -283, 135, 580, 1113, -283, 189, 1132, 23, 230, 230,
- 46, 46, 46, 46, 230, 230, 46, 46, 46, 46,
- -283, -283, 1132, -283, 1002, 770, -283, 27, 378, -283,
- -283, 1132, 162, -283, 1132, -283, -283, -283, -283, -283,
- -283, -283, 119, -283, 12, 123, 126, 94, 128, 91,
- 91, -283, -283, 91, 1047, 91, 94, -283, -283, 91,
- -283, -283, 1132, -283, 122, 94, 1047, -283, -283, -283,
- -283, -283, -283, 116, 73, -283, 1047, 1047, -283, 198,
- 1047, 1047, 660, 895, -283, -283, -283, 91, 1132, -283,
- -283, -283, 590, 542, 94, -283, -283, 1132, 94, -283,
- 28, 286, 91, -28, 141, 286, 286, 190, -23, -283,
- 122, -283, 818, 205, -283, 325, -283, -283, -283, -283,
- -283, 94, -283, -283, 115, -283, -283, -283, 94, 94,
- 153, 162, 94, 13, -283, -283, 660, -283, -283, -20,
- 660, 1047, 116, 694, 144, 1047, 209, -283, -283, 286,
- 94, 1090, 94, 974, 94, 152, 94, 660, 94, 929,
- 660, -283, 342, 176, -283, 158, -283, -283, 929, 116,
- -283, -283, -283, 236, 243, -283, -283, 176, -283, 94,
- -283, 116, 94, -283, -283, 94, -283, 94, 660, -283,
- 390, 660, -283, 466, -283
+ -295, 359, -295, -295, -38, -295, -295, -295, -295, -295,
+ 172, -295, -295, 17, 17, 17, -31, -27, -295, -295,
+ -295, 1016, 1016, -295, 1016, 1061, 861, 218, -295, -29,
+ -32, -22, -295, -295, 84, 1076, 983, 354, 382, -295,
+ -295, -295, -295, 325, 785, -295, -295, -295, 18, -295,
+ 91, -295, 113, -295, -295, -295, 785, 785, 170, 115,
+ 87, 115, 115, 1016, 114, -295, -295, 13, 273, 31,
+ 70, 121, -295, 127, -295, -295, -295, 84, -295, 127,
+ 861, -295, 22, -295, -295, 182, -295, -295, 971, 173,
+ 1016, 1016, 1016, 127, -295, -295, -295, 1016, 1016, 157,
+ 354, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
+ 1016, 1016, 1016, -295, 189, -295, -295, 195, 1016, -295,
+ -295, -295, 134, 66, -295, 1110, -295, -295, 1016, -295,
+ 134, 134, 273, -295, -295, -295, 1016, -295, 175, 889,
+ -295, -295, 45, -17, -295, 80, -17, -295, 81, -17,
+ 84, -295, 585, -295, 15, 1110, -295, -295, -295, -295,
+ 19, -295, 276, 190, 1099, -295, 240, 1110, 17, 233,
+ 233, 115, 115, 115, 115, 233, 233, 115, 115, 115,
+ 115, -295, -295, 1110, -295, 971, 813, 49, 354, -295,
+ -295, 1110, 173, -295, 1110, -295, -295, -295, -295, -295,
+ -295, -295, 142, -295, 11, 158, 164, 127, 165, -17,
+ -17, -295, -295, -17, 1016, -17, 127, -295, -295, -17,
+ -295, -295, 1110, -295, 147, 127, -295, 1016, -295, -295,
+ -295, -295, -295, -295, 134, 129, -295, 1016, 1016, 173,
+ -295, 1016, 1016, 703, 938, -295, -295, -295, -17, 1110,
+ -295, -295, -295, 633, 585, 127, -295, -295, 1110, 127,
+ -295, 124, 273, -17, 174, -32, 273, 273, 215, -23,
+ -295, 147, -295, 861, 235, -295, 16, -295, -295, -295,
+ -295, -295, 127, -295, -295, -295, 57, -295, -295, 127,
+ 127, 188, 173, 127, 13, -295, -295, 703, -295, -295,
+ -22, 703, 1016, 134, 737, 175, 1016, 230, -295, -295,
+ 273, 127, 251, 127, 983, 127, 153, 127, 703, 127,
+ 938, 703, -295, 154, 206, -295, 193, -295, -295, 938,
+ 134, -295, -295, -295, 256, 257, -295, -295, 206, -295,
+ 127, -295, 134, 127, -295, -295, 127, -295, 127, 703,
+ -295, 433, 703, -295, 509, -295
};
/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -814,68 +815,68 @@ static const yytype_int16 yypact[] =
means the default is an error. */
static const yytype_uint8 yydefact[] =
{
- 2, 0, 1, 6, 0, 193, 175, 176, 25, 26,
- 0, 27, 28, 182, 0, 0, 0, 170, 5, 94,
- 42, 0, 0, 41, 0, 0, 0, 0, 3, 0,
- 0, 165, 38, 4, 23, 136, 144, 145, 147, 171,
- 179, 195, 172, 0, 0, 190, 0, 194, 31, 30,
- 34, 35, 0, 0, 32, 98, 183, 173, 174, 0,
- 0, 0, 178, 172, 177, 166, 0, 199, 172, 113,
- 0, 111, 0, 0, 0, 180, 96, 205, 7, 8,
- 46, 43, 96, 9, 0, 95, 140, 0, 0, 0,
- 0, 0, 96, 141, 143, 142, 0, 0, 0, 146,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 138, 137, 155, 156, 0, 0, 121, 40,
- 126, 0, 0, 119, 125, 0, 111, 192, 191, 33,
- 36, 0, 154, 0, 0, 0, 197, 198, 196, 114,
- 202, 0, 0, 167, 15, 0, 0, 18, 0, 0,
- 21, 0, 0, 97, 200, 0, 47, 39, 131, 132,
- 133, 129, 130, 0, 207, 134, 24, 182, 152, 153,
- 149, 150, 151, 148, 163, 164, 160, 161, 162, 159,
- 128, 139, 127, 181, 122, 0, 189, 0, 99, 168,
- 169, 115, 0, 116, 112, 14, 10, 17, 11, 20,
- 12, 45, 0, 63, 0, 0, 0, 96, 0, 0,
- 0, 85, 86, 0, 107, 0, 96, 44, 57, 0,
- 66, 50, 71, 43, 203, 96, 0, 158, 123, 124,
- 120, 104, 102, 0, 0, 157, 0, 107, 68, 0,
- 0, 0, 0, 72, 58, 59, 60, 0, 108, 61,
- 201, 65, 0, 0, 96, 204, 48, 135, 96, 105,
- 0, 0, 0, 184, 0, 0, 0, 0, 193, 73,
- 0, 62, 0, 89, 87, 0, 49, 29, 37, 106,
- 103, 96, 64, 69, 0, 186, 188, 70, 96, 96,
- 0, 0, 96, 0, 90, 67, 0, 185, 187, 0,
- 0, 0, 0, 0, 88, 0, 92, 74, 52, 0,
- 96, 0, 96, 91, 96, 0, 96, 0, 96, 72,
- 0, 76, 0, 0, 75, 0, 53, 54, 72, 0,
- 93, 79, 82, 0, 0, 83, 84, 0, 206, 96,
- 51, 0, 96, 81, 80, 96, 43, 96, 0, 43,
- 0, 0, 56, 0, 55
+ 2, 0, 1, 6, 0, 30, 176, 177, 25, 26,
+ 0, 27, 28, 183, 0, 0, 0, 171, 5, 95,
+ 43, 0, 0, 42, 0, 0, 0, 0, 3, 0,
+ 194, 0, 166, 39, 4, 23, 137, 145, 146, 148,
+ 172, 180, 196, 173, 0, 32, 35, 36, 0, 31,
+ 0, 33, 99, 184, 174, 175, 0, 0, 0, 179,
+ 173, 178, 167, 0, 200, 173, 114, 0, 112, 0,
+ 0, 0, 181, 97, 206, 7, 8, 47, 44, 97,
+ 0, 191, 0, 195, 9, 0, 96, 141, 0, 0,
+ 0, 0, 0, 97, 142, 144, 143, 0, 0, 0,
+ 147, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 139, 138, 156, 157, 0, 0, 122,
+ 41, 127, 0, 0, 120, 126, 34, 37, 0, 155,
+ 0, 0, 0, 198, 199, 197, 115, 203, 0, 0,
+ 168, 15, 0, 0, 18, 0, 0, 21, 0, 0,
+ 98, 201, 0, 48, 0, 112, 193, 192, 40, 132,
+ 133, 134, 130, 131, 0, 208, 135, 24, 183, 153,
+ 154, 150, 151, 152, 149, 164, 165, 161, 162, 163,
+ 160, 129, 140, 128, 182, 123, 0, 0, 100, 169,
+ 170, 116, 0, 117, 113, 14, 10, 17, 11, 20,
+ 12, 46, 0, 64, 0, 0, 0, 97, 0, 0,
+ 0, 86, 87, 0, 108, 0, 97, 45, 58, 0,
+ 67, 51, 72, 44, 204, 97, 190, 0, 159, 124,
+ 125, 121, 105, 103, 0, 0, 158, 0, 108, 0,
+ 69, 0, 0, 0, 73, 59, 60, 61, 0, 109,
+ 62, 202, 66, 0, 0, 97, 205, 49, 136, 97,
+ 106, 0, 0, 0, 0, 185, 0, 0, 0, 194,
+ 74, 0, 63, 0, 90, 88, 0, 50, 29, 38,
+ 107, 104, 97, 65, 71, 70, 0, 187, 189, 97,
+ 97, 0, 0, 97, 0, 91, 68, 0, 186, 188,
+ 0, 0, 0, 0, 0, 89, 0, 93, 75, 53,
+ 0, 97, 0, 97, 92, 97, 0, 97, 0, 97,
+ 73, 0, 77, 0, 0, 76, 0, 54, 55, 73,
+ 0, 94, 80, 83, 0, 0, 84, 85, 0, 207,
+ 97, 52, 0, 97, 82, 81, 97, 44, 97, 0,
+ 44, 0, 0, 57, 0, 56
};
/* YYPGOTO[NTERM-NUM]. */
static const yytype_int16 yypgoto[] =
{
- -283, -283, -283, -283, -283, -283, -283, 226, -283, -283,
- -283, -283, -63, -283, -77, -283, -215, -73, -30, -283,
- -283, -234, -283, -283, -282, -283, -283, -283, -283, -283,
- -283, -283, -283, 5, -35, -283, -283, -283, 24, -283,
- -43, 101, -283, -15, -1, -283, -283, -283, -40, 17,
- -283, 237, -283, -6, 96, -283, -283, -16, -42, -283,
- -283, -81, -2, -283, -27, -186, -65, -283, -62, -68,
- -8
+ -295, -295, -295, -295, -295, -295, -295, 242, -9, -295,
+ -295, -295, -295, -52, -295, -84, -295, -195, -95, -127,
+ -295, -295, -236, -295, -295, -294, -295, -295, -295, -295,
+ -295, -295, -295, -295, 110, -35, -295, -295, -295, 37,
+ -295, -70, 108, -295, 7, -1, -295, -295, -295, -21,
+ 39, -295, 262, -295, 6, 150, -295, -295, 3, -76,
+ -295, -295, -80, -2, -295, -26, -213, -65, -295, 36,
+ -36, -28
};
/* YYDEFGOTO[NTERM-NUM]. */
static const yytype_int16 yydefgoto[] =
{
- -1, 1, 28, 146, 149, 152, 29, 78, 53, 54,
- 30, 187, 31, 84, 120, 32, 155, 79, 217, 218,
- 237, 219, 252, 263, 270, 315, 324, 337, 220, 273,
- 295, 305, 221, 153, 154, 132, 233, 234, 247, 274,
- 70, 121, 122, 123, 222, 117, 95, 96, 35, 36,
- 37, 38, 39, 40, 55, 283, 284, 285, 45, 46,
- 47, 41, 42, 138, 223, 224, 143, 254, 82, 339,
- 142
+ -1, 1, 28, 143, 146, 149, 29, 75, 30, 50,
+ 51, 31, 187, 32, 85, 121, 33, 152, 76, 217,
+ 218, 238, 219, 253, 265, 271, 316, 325, 338, 220,
+ 274, 296, 306, 221, 150, 151, 129, 234, 235, 248,
+ 275, 67, 122, 123, 124, 222, 118, 96, 97, 36,
+ 37, 38, 39, 40, 41, 52, 285, 286, 287, 81,
+ 82, 83, 42, 43, 135, 223, 224, 140, 255, 79,
+ 340, 139
};
/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
@@ -883,250 +884,244 @@ static const yytype_int16 yydefgoto[] =
number is the opposite. If YYTABLE_NINF, syntax error. */
static const yytype_int16 yytable[] =
{
- 34, 125, 81, 81, 128, 141, 33, 160, 253, 269,
- 158, 56, 57, 58, 139, 184, 238, 127, 291, 63,
- 63, 75, 63, 68, 43, 71, 97, 5, 231, 279,
- 59, 232, 280, 63, 80, 195, 180, 329, 62, 64,
- 197, 65, 124, 126, 44, 144, 341, 156, 147, 44,
- 145, 60, 99, 148, 76, 75, 183, 164, 124, 124,
- 199, 150, 114, 115, 85, 135, 151, 276, 189, 190,
- 92, 92, 44, 196, 259, 129, 198, 139, 130, 200,
- 131, 239, 4, 140, -118, 269, 159, -13, 161, 162,
- 163, 25, -16, 225, 269, 165, 166, -100, 63, 63,
- 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
- -13, 235, -19, 105, 185, -16, 182, 168, 169, 170,
- 171, 172, 173, 174, 175, 176, 177, 178, 179, 63,
- 92, 350, 297, 92, 353, -19, 244, 245, 191, 340,
- 246, 194, 249, -101, 19, 86, 251, 19, 188, 186,
- 87, 80, 19, 321, 80, 86, 157, 80, 136, 137,
- 133, 134, 255, 48, 49, 56, 5, 77, 258, 228,
- 230, 167, 242, 76, 271, 77, 88, 322, 323, 119,
- 225, 250, 181, 124, 124, 192, 140, 44, 236, 282,
- 256, 225, 240, 93, 94, 241, 281, 243, 77, -119,
- 288, 289, 264, 93, 94, 19, 50, 51, 292, 275,
- 302, 287, 267, 248, 80, 80, 294, 290, 80, 277,
- 80, 286, 301, 278, 80, 257, 260, -96, 304, 293,
- 314, 52, 338, 216, 225, 261, 248, 310, 225, 265,
- 266, 312, 286, 343, 316, 336, 296, -119, -119, 318,
- 344, 126, 80, 299, 300, 225, 83, 303, 225, 335,
- 4, 262, 67, 227, 342, 313, 306, 80, 298, 345,
- 308, 71, 307, 0, 0, 317, 347, 319, 0, 320,
- 325, 326, 0, 328, 0, 0, 225, 327, 225, 225,
- 330, 225, 102, 103, 104, 0, 86, 105, 0, 0,
- 309, 87, 311, 63, 346, 0, 72, 348, 73, 74,
- 349, 63, 351, 0, 0, 0, 2, 3, 352, 4,
- 5, 354, 0, 6, 7, 0, 139, 88, 89, 90,
- 99, 0, 0, 0, 8, 9, -110, 0, 0, 0,
- 0, 91, 112, 113, 93, 94, 0, 0, 0, 331,
- 332, 119, 10, 11, 12, 13, 140, 0, 0, 0,
- 14, 15, 16, 17, 18, 0, 0, 0, 0, 19,
- 20, 0, 0, 114, 115, 0, 21, 22, -110, 23,
- 0, 24, 92, 116, 25, 26, 0, 27, 0, 0,
- -22, 201, -22, 4, 5, -110, 20, 6, 7, 0,
- 0, -110, 333, 334, 0, 23, 0, 0, 0, 0,
- 202, 0, 203, 204, 205, -78, -78, 206, 207, 208,
- 209, 210, 211, 212, 213, 214, 0, 0, 0, 13,
- 215, 0, 0, 0, 14, 15, 16, 17, 100, 101,
- 102, 103, 104, -78, 20, 105, 0, 0, 0, 0,
- 21, 22, 0, 23, 0, 24, 0, 0, 25, 26,
- 0, 61, 0, 0, 76, -78, 77, 201, 0, 4,
- 5, 0, 0, 6, 7, 106, 107, 108, 109, 110,
- 0, 0, 111, 0, 0, 0, 202, 0, 203, 204,
- 205, -77, -77, 206, 207, 208, 209, 210, 211, 212,
- 213, 214, 0, 0, 0, 13, 215, 0, 0, 0,
- 14, 15, 16, 17, 0, 0, 0, 0, 0, -77,
- 20, 0, 0, 0, 0, 0, 21, 22, 0, 23,
- 0, 24, 0, 0, 25, 26, 0, 61, 0, 0,
- 76, -77, 77, 201, 0, 4, 5, 0, 0, 6,
- 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 202, 0, 203, 204, 205, 0, 0, 206,
- 207, 208, 209, 210, 211, 212, 213, 214, 0, 0,
- 0, 13, 215, 0, 0, 0, 14, 15, 16, 17,
- 86, 69, 0, 4, 5, 87, 20, 6, 7, 0,
- 0, -109, 21, 22, 0, 23, 0, 24, 0, 0,
- 25, 26, 0, 61, 0, 0, 76, 216, 77, 0,
- 0, 88, 89, 0, 0, 0, 0, 0, 0, 13,
- 0, 0, 0, 0, 14, 15, 16, 17, 93, 94,
- 0, 0, 0, -109, 20, 0, 0, 0, 0, 0,
- 21, 22, 0, 23, 0, 24, 0, 0, 25, 272,
- -109, 61, 0, 4, 5, 0, -109, 6, 7, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 202, 0, 203, 204, 205, 0, 0, 206, 207, 208,
- 209, 210, 211, 212, 213, 214, 0, 4, 5, 13,
- 215, 6, 7, 0, 14, 15, 16, 17, 0, 0,
- 0, 0, 0, 0, 20, 0, 0, 0, 0, 0,
- 21, 22, 0, 23, 0, 24, 0, 0, 25, 26,
- 0, 61, 0, 13, 76, 0, 77, 0, 14, 15,
- 16, 17, 0, 118, 0, 4, 5, 0, 20, 6,
- 7, 119, 0, 0, 21, 22, 0, 23, 0, 24,
- 0, 0, 25, 26, 0, 61, 0, 0, 0, 0,
- 77, 229, 0, 4, 5, 0, 0, 6, 7, 119,
- 0, 13, 0, 0, 0, 0, 14, 15, 16, 17,
- 0, 0, 0, 0, 0, 0, 20, 0, 0, 0,
- 0, 0, 21, 22, 0, 23, 0, 24, 0, 13,
- 25, 26, -117, 61, 14, 15, 16, 17, 0, 69,
- 0, 4, 5, 0, 20, 6, 7, 0, 0, 0,
- 21, 22, 0, 23, 0, 24, 0, 0, 25, 26,
- 0, 61, 0, 0, 0, 0, 0, 193, 0, 4,
- 5, 0, 0, 6, 7, 0, 0, 13, 0, 0,
- 0, 0, 14, 15, 16, 17, 0, 0, 0, 0,
- 0, 0, 20, 0, 0, 0, 0, 0, 21, 22,
- 0, 23, 0, 24, 0, 13, 25, 26, 0, 61,
- 14, 15, 16, 17, 0, 0, 0, 0, 4, 268,
- 20, 0, 6, 7, 0, 0, 21, 22, 0, 23,
- 0, 24, 0, 0, 25, 26, 0, 61, 204, 0,
- 0, 0, 0, 0, 0, 0, 0, 211, 212, 0,
- 0, 0, 4, 5, 13, 0, 6, 7, 0, 14,
+ 35, 49, 138, 78, 159, 78, 157, 98, 270, 161,
+ 154, 53, 54, 55, 136, 5, 136, 136, 292, 60,
+ 60, 5, 60, 65, 19, 68, 330, -111, 254, 87,
+ 181, 44, 141, 72, 60, 342, 19, 142, 56, 156,
+ 80, 277, 57, 125, 153, 73, 195, 74, 196, 80,
+ 232, 198, 73, 233, 200, 125, 125, 184, 165, 74,
+ 59, 61, 132, 62, 72, 189, 190, 185, 126, -111,
+ 93, 144, 93, 93, 298, 100, 145, 94, 95, 155,
+ 239, 197, 199, 137, 270, 25, -111, 160, 226, 162,
+ 163, 164, -111, 270, 80, 186, 166, 167, -13, 60,
+ 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
+ 60, 34, 236, 341, 245, 246, 268, 183, 247, -101,
+ 250, -13, 147, 93, 252, 280, 60, 148, 281, 80,
+ 260, 115, 116, -16, -19, 191, -119, 86, 194, 77,
+ 169, 170, 171, 172, 173, 174, 175, 176, 177, 178,
+ 179, 180, 351, 272, 322, 354, -16, -19, 133, 134,
+ 127, 332, 333, 120, 130, 131, 53, 188, 283, 259,
+ 307, 128, 243, 4, 309, 45, 5, 5, 323, 324,
+ 19, 251, 106, 276, 125, 125, 93, 158, 225, 288,
+ 257, 328, 229, 231, 331, 240, 168, 282, 120, -102,
+ 87, 289, 290, 294, 137, 88, 19, 261, 20, 182,
+ 288, 237, 303, 249, 334, 335, 192, 23, 46, 47,
+ 278, 4, 353, 74, 279, 355, 258, 241, -97, 305,
+ 264, 89, 90, 242, 244, 269, 262, 249, 311, 337,
+ 266, 267, 291, 48, 284, 317, 295, 297, 94, 95,
+ -120, 315, 155, 77, 300, 301, 77, 302, 304, 77,
+ 256, 87, 339, 344, 345, 343, 88, 69, 216, 70,
+ 71, 336, 68, 84, 308, 263, 318, 348, 320, 225,
+ 321, 326, 327, 87, 329, 314, 87, 64, 88, 299,
+ 225, 88, 89, 90, 91, 103, 104, 105, -120, -120,
+ 106, 310, 346, 312, 60, 347, 92, 293, 349, 94,
+ 95, 350, 60, 352, 89, 90, 91, 89, 228, 77,
+ 77, 0, 0, 77, 0, 77, 0, 74, 92, 77,
+ 0, 94, 95, 225, 94, 95, 0, 225, 113, 114,
+ 313, 0, 0, 137, 0, 0, 0, 0, 319, 0,
+ 0, 0, 0, 100, 225, 0, 0, 225, 77, 2,
+ 3, 0, 4, 5, 0, 0, 6, 7, 0, 115,
+ 116, 0, 0, 77, 0, 0, 0, 8, 9, 117,
+ 0, 0, 0, 0, 0, 225, 0, 225, 225, 0,
+ 225, 0, 0, 0, 0, 10, 11, 12, 13, 0,
+ 0, 0, 0, 14, 15, 16, 17, 18, 0, 0,
+ 0, 0, 19, 20, 101, 102, 103, 104, 105, 21,
+ 22, 106, 23, 0, 24, 0, 0, 25, 26, 0,
+ 27, 0, 0, -22, 201, -22, 4, 5, 0, 0,
+ 6, 7, 107, 108, 109, 110, 111, 0, 0, 112,
+ 0, 0, 0, 202, 0, 203, 204, 205, -79, -79,
+ 206, 207, 208, 209, 210, 211, 212, 213, 214, 0,
+ 0, 0, 13, 215, 0, 0, 0, 14, 15, 16,
+ 17, 0, 0, 0, 0, 0, -79, 20, 0, 0,
+ 0, 0, 0, 21, 22, 0, 23, 0, 24, 0,
+ 0, 25, 26, 0, 58, 0, 0, 73, -79, 74,
+ 201, 0, 4, 5, 0, 0, 6, 7, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 202,
+ 0, 203, 204, 205, -78, -78, 206, 207, 208, 209,
+ 210, 211, 212, 213, 214, 0, 0, 0, 13, 215,
+ 0, 0, 0, 14, 15, 16, 17, 0, 0, 0,
+ 0, 0, -78, 20, 0, 0, 0, 0, 0, 21,
+ 22, 0, 23, 0, 24, 0, 0, 25, 26, 0,
+ 58, 0, 0, 73, -78, 74, 201, 0, 4, 5,
+ 0, 0, 6, 7, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 202, 0, 203, 204, 205,
+ 0, 0, 206, 207, 208, 209, 210, 211, 212, 213,
+ 214, 0, 0, 0, 13, 215, 0, 0, 0, 14,
+ 15, 16, 17, 0, 66, 0, 4, 5, 0, 20,
+ 6, 7, 0, 0, -110, 21, 22, 0, 23, 0,
+ 24, 0, 0, 25, 26, 0, 58, 0, 0, 73,
+ 216, 74, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 13, 0, 0, 0, 0, 14, 15, 16,
+ 17, 0, 0, 0, 0, 0, -110, 20, 0, 0,
+ 0, 0, 0, 21, 22, 0, 23, 0, 24, 0,
+ 0, 25, 273, -110, 58, 0, 4, 5, 0, -110,
+ 6, 7, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 202, 0, 203, 204, 205, 0, 0,
+ 206, 207, 208, 209, 210, 211, 212, 213, 214, 0,
+ 4, 5, 13, 215, 6, 7, 0, 14, 15, 16,
+ 17, 0, 0, 0, 0, 0, 0, 20, 0, 0,
+ 0, 0, 0, 21, 22, 0, 23, 0, 24, 0,
+ 0, 25, 26, 0, 58, 0, 13, 73, 0, 74,
+ 0, 14, 15, 16, 17, 0, 119, 0, 4, 5,
+ 0, 20, 6, 7, 120, 0, 0, 21, 22, 0,
+ 23, 0, 24, 0, 0, 25, 26, 0, 58, 0,
+ 0, 0, 0, 74, 230, 0, 4, 5, 0, 0,
+ 6, 7, 120, 0, 13, 0, 0, 0, 0, 14,
15, 16, 17, 0, 0, 0, 0, 0, 0, 20,
- 0, 0, 204, 0, 0, 21, 22, 0, 23, 0,
- 24, 211, 212, 25, 26, 0, 61, 0, 13, 0,
- 0, 0, 0, 14, 15, 16, 17, 4, 5, 0,
- 0, 6, 7, 20, 0, 0, 98, 0, 0, 21,
+ 0, 0, 0, 0, 0, 21, 22, 0, 23, 0,
+ 24, 0, 13, 25, 26, -118, 58, 14, 15, 16,
+ 17, 0, 66, 0, 4, 5, 0, 20, 6, 7,
+ 0, 0, 0, 21, 22, 0, 23, 0, 24, 0,
+ 0, 25, 26, 0, 58, 0, 0, 0, 0, 0,
+ 193, 0, 4, 5, 0, 0, 6, 7, 0, 0,
+ 13, 0, 0, 0, 0, 14, 15, 16, 17, 0,
+ 0, 0, 0, 0, 0, 20, 0, 0, 0, 0,
+ 0, 21, 22, 0, 23, 0, 24, 0, 13, 25,
+ 26, 0, 58, 14, 15, 16, 17, 0, 0, 0,
+ 0, 4, 5, 20, 0, 6, 7, 0, 0, 21,
22, 0, 23, 0, 24, 0, 0, 25, 26, 0,
- 61, 0, 0, 0, 0, 4, 5, 0, 0, 6,
- 7, 119, 0, 13, 0, 0, 0, 0, 14, 15,
- 16, 17, 0, 0, 0, 0, 0, 86, 20, 0,
- 0, 0, 87, 0, 21, 22, 0, 23, 0, 24,
- 0, 13, 25, 26, 0, 61, 14, 15, 16, 17,
- 4, 5, 0, 0, 6, 7, 20, 0, 88, 89,
- 90, 0, 21, 22, 0, 23, 0, 24, 0, 0,
- 25, 26, 91, 61, 92, 93, 94, 0, 4, 5,
- 0, 0, 6, 7, 0, 0, 13, 0, 0, 0,
- 0, 14, 15, 16, 17, 0, 0, 0, 0, 0,
- 86, 20, 0, 0, 0, 87, 0, 21, 22, 0,
- 23, 0, 24, 0, 0, 25, 26, 0, 61, 14,
- 15, 16, 17, 86, 0, 0, 0, 0, 87, 20,
- 0, 88, 89, 90, 0, 21, 22, 0, 23, 0,
- 24, 0, 86, 25, 66, 91, 61, 87, 93, 94,
- 0, 0, 0, 0, 88, 89, 90, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 77, 0, 91, 226,
- 0, 93, 94, 88, 89, 90, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 91, 0, 0,
- 93, 94
+ 58, 204, 0, 0, 0, 0, 0, 0, 0, 0,
+ 211, 212, 0, 0, 4, 5, 0, 13, 6, 7,
+ 120, 0, 14, 15, 16, 17, 4, 5, 0, 0,
+ 6, 7, 20, 0, 0, 99, 0, 0, 21, 22,
+ 0, 23, 0, 24, 0, 0, 25, 26, 0, 58,
+ 13, 0, 0, 0, 0, 14, 15, 16, 17, 4,
+ 5, 0, 13, 6, 7, 20, 0, 14, 15, 16,
+ 17, 21, 22, 0, 23, 0, 24, 20, 0, 25,
+ 26, 0, 58, 21, 22, 0, 23, 0, 24, 0,
+ 0, 25, 26, 0, 58, 13, 0, 0, 0, 0,
+ 14, 15, 16, 17, 4, 5, 0, 0, 6, 7,
+ 20, 0, 0, 0, 0, 0, 21, 22, 0, 23,
+ 0, 24, 0, 0, 25, 26, 87, 58, 0, 0,
+ 0, 88, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 14, 15, 16, 17, 87,
+ 0, 0, 0, 0, 88, 20, 0, 89, 90, 91,
+ 87, 21, 22, 0, 23, 88, 24, 0, 0, 25,
+ 63, 92, 58, 93, 94, 95, 0, 0, 0, 0,
+ 89, 90, 91, 0, 0, 0, 0, 0, 0, 0,
+ 0, 89, 90, 91, 92, 227, 0, 94, 95, 0,
+ 0, 0, 0, 0, 0, 92, 0, 0, 94, 95
};
static const yytype_int16 yycheck[] =
{
- 1, 44, 29, 30, 46, 70, 1, 88, 223, 243,
- 87, 13, 14, 15, 1, 1, 4, 17, 41, 21,
- 22, 27, 24, 25, 69, 26, 34, 4, 1, 1,
- 69, 4, 4, 35, 29, 1, 113, 319, 21, 22,
- 1, 24, 43, 44, 72, 1, 328, 82, 1, 72,
- 6, 69, 35, 6, 74, 61, 121, 92, 59, 60,
- 1, 1, 44, 45, 53, 66, 6, 253, 133, 134,
- 57, 57, 72, 146, 1, 50, 149, 1, 69, 152,
- 58, 69, 3, 70, 70, 319, 87, 53, 89, 90,
- 91, 68, 53, 155, 328, 96, 97, 70, 100, 101,
+ 1, 10, 67, 29, 88, 31, 82, 35, 244, 89,
+ 80, 13, 14, 15, 1, 4, 1, 1, 41, 21,
+ 22, 4, 24, 25, 53, 26, 320, 11, 223, 10,
+ 114, 69, 1, 27, 36, 329, 53, 6, 69, 17,
+ 72, 254, 69, 44, 79, 74, 1, 76, 143, 72,
+ 1, 146, 74, 4, 149, 56, 57, 122, 93, 76,
+ 21, 22, 63, 24, 58, 130, 131, 1, 50, 53,
+ 57, 1, 57, 57, 17, 36, 6, 58, 59, 80,
+ 69, 1, 1, 70, 320, 68, 70, 88, 73, 90,
+ 91, 92, 76, 329, 72, 123, 97, 98, 53, 101,
102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
- 76, 192, 53, 67, 122, 76, 117, 100, 101, 102,
- 103, 104, 105, 106, 107, 108, 109, 110, 111, 131,
- 57, 346, 17, 57, 349, 76, 209, 210, 139, 325,
- 213, 142, 215, 70, 53, 10, 219, 53, 131, 73,
- 15, 146, 53, 1, 149, 10, 5, 152, 44, 45,
- 59, 60, 224, 3, 4, 167, 4, 76, 233, 184,
- 185, 39, 207, 74, 247, 76, 41, 25, 26, 9,
- 242, 216, 14, 184, 185, 41, 70, 72, 69, 262,
- 225, 253, 69, 58, 59, 69, 261, 69, 76, 10,
- 265, 266, 4, 58, 59, 53, 46, 47, 270, 252,
- 291, 70, 242, 214, 209, 210, 11, 27, 213, 254,
- 215, 263, 69, 258, 219, 226, 234, 75, 293, 272,
- 21, 71, 56, 75, 296, 236, 237, 302, 300, 240,
- 241, 303, 284, 7, 309, 322, 281, 58, 59, 311,
- 7, 252, 247, 288, 289, 317, 30, 292, 320, 322,
- 3, 237, 25, 167, 329, 305, 296, 262, 284, 337,
- 300, 272, 299, -1, -1, 310, 341, 312, -1, 314,
- 315, 316, -1, 318, -1, -1, 348, 317, 350, 351,
- 320, 353, 62, 63, 64, -1, 10, 67, -1, -1,
- 301, 15, 303, 305, 339, -1, 49, 342, 51, 52,
- 345, 313, 347, -1, -1, -1, 0, 1, 348, 3,
- 4, 351, -1, 7, 8, -1, 1, 41, 42, 43,
- 313, -1, -1, -1, 18, 19, 11, -1, -1, -1,
- -1, 55, 13, 14, 58, 59, -1, -1, -1, 7,
- 8, 9, 36, 37, 38, 39, 70, -1, -1, -1,
- 44, 45, 46, 47, 48, -1, -1, -1, -1, 53,
- 54, -1, -1, 44, 45, -1, 60, 61, 53, 63,
- -1, 65, 57, 54, 68, 69, -1, 71, -1, -1,
- 74, 1, 76, 3, 4, 70, 54, 7, 8, -1,
- -1, 76, 60, 61, -1, 63, -1, -1, -1, -1,
- 20, -1, 22, 23, 24, 25, 26, 27, 28, 29,
- 30, 31, 32, 33, 34, 35, -1, -1, -1, 39,
- 40, -1, -1, -1, 44, 45, 46, 47, 60, 61,
- 62, 63, 64, 53, 54, 67, -1, -1, -1, -1,
- 60, 61, -1, 63, -1, 65, -1, -1, 68, 69,
- -1, 71, -1, -1, 74, 75, 76, 1, -1, 3,
- 4, -1, -1, 7, 8, 60, 61, 62, 63, 64,
- -1, -1, 67, -1, -1, -1, 20, -1, 22, 23,
- 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
- 34, 35, -1, -1, -1, 39, 40, -1, -1, -1,
- 44, 45, 46, 47, -1, -1, -1, -1, -1, 53,
- 54, -1, -1, -1, -1, -1, 60, 61, -1, 63,
- -1, 65, -1, -1, 68, 69, -1, 71, -1, -1,
- 74, 75, 76, 1, -1, 3, 4, -1, -1, 7,
- 8, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 20, -1, 22, 23, 24, -1, -1, 27,
- 28, 29, 30, 31, 32, 33, 34, 35, -1, -1,
- -1, 39, 40, -1, -1, -1, 44, 45, 46, 47,
- 10, 1, -1, 3, 4, 15, 54, 7, 8, -1,
- -1, 11, 60, 61, -1, 63, -1, 65, -1, -1,
- 68, 69, -1, 71, -1, -1, 74, 75, 76, -1,
- -1, 41, 42, -1, -1, -1, -1, -1, -1, 39,
- -1, -1, -1, -1, 44, 45, 46, 47, 58, 59,
- -1, -1, -1, 53, 54, -1, -1, -1, -1, -1,
- 60, 61, -1, 63, -1, 65, -1, -1, 68, 69,
- 70, 71, -1, 3, 4, -1, 76, 7, 8, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 20, -1, 22, 23, 24, -1, -1, 27, 28, 29,
- 30, 31, 32, 33, 34, 35, -1, 3, 4, 39,
- 40, 7, 8, -1, 44, 45, 46, 47, -1, -1,
- -1, -1, -1, -1, 54, -1, -1, -1, -1, -1,
- 60, 61, -1, 63, -1, 65, -1, -1, 68, 69,
- -1, 71, -1, 39, 74, -1, 76, -1, 44, 45,
- 46, 47, -1, 1, -1, 3, 4, -1, 54, 7,
- 8, 9, -1, -1, 60, 61, -1, 63, -1, 65,
- -1, -1, 68, 69, -1, 71, -1, -1, -1, -1,
- 76, 1, -1, 3, 4, -1, -1, 7, 8, 9,
- -1, 39, -1, -1, -1, -1, 44, 45, 46, 47,
- -1, -1, -1, -1, -1, -1, 54, -1, -1, -1,
- -1, -1, 60, 61, -1, 63, -1, 65, -1, 39,
- 68, 69, 70, 71, 44, 45, 46, 47, -1, 1,
- -1, 3, 4, -1, 54, 7, 8, -1, -1, -1,
- 60, 61, -1, 63, -1, 65, -1, -1, 68, 69,
- -1, 71, -1, -1, -1, -1, -1, 1, -1, 3,
- 4, -1, -1, 7, 8, -1, -1, 39, -1, -1,
- -1, -1, 44, 45, 46, 47, -1, -1, -1, -1,
- -1, -1, 54, -1, -1, -1, -1, -1, 60, 61,
- -1, 63, -1, 65, -1, 39, 68, 69, -1, 71,
- 44, 45, 46, 47, -1, -1, -1, -1, 3, 4,
- 54, -1, 7, 8, -1, -1, 60, 61, -1, 63,
- -1, 65, -1, -1, 68, 69, -1, 71, 23, -1,
- -1, -1, -1, -1, -1, -1, -1, 32, 33, -1,
- -1, -1, 3, 4, 39, -1, 7, 8, -1, 44,
+ 112, 1, 192, 326, 209, 210, 243, 118, 213, 70,
+ 215, 76, 1, 57, 219, 1, 128, 6, 4, 72,
+ 1, 44, 45, 53, 53, 136, 70, 53, 139, 29,
+ 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
+ 111, 112, 347, 248, 1, 350, 76, 76, 44, 45,
+ 69, 7, 8, 9, 56, 57, 168, 128, 263, 234,
+ 297, 58, 207, 3, 301, 3, 4, 4, 25, 26,
+ 53, 216, 67, 253, 185, 186, 57, 5, 152, 265,
+ 225, 318, 185, 186, 321, 204, 39, 262, 9, 70,
+ 10, 266, 267, 273, 70, 15, 53, 235, 54, 14,
+ 286, 69, 292, 214, 60, 61, 41, 63, 46, 47,
+ 255, 3, 349, 76, 259, 352, 227, 69, 75, 294,
+ 239, 41, 42, 69, 69, 244, 237, 238, 303, 323,
+ 241, 242, 27, 71, 70, 310, 11, 282, 58, 59,
+ 10, 21, 253, 143, 289, 290, 146, 69, 293, 149,
+ 224, 10, 56, 7, 7, 330, 15, 49, 75, 51,
+ 52, 323, 273, 31, 300, 238, 311, 342, 313, 243,
+ 315, 316, 317, 10, 319, 306, 10, 25, 15, 286,
+ 254, 15, 41, 42, 43, 62, 63, 64, 58, 59,
+ 67, 302, 338, 304, 306, 340, 55, 271, 343, 58,
+ 59, 346, 314, 348, 41, 42, 43, 41, 168, 209,
+ 210, -1, -1, 213, -1, 215, -1, 76, 55, 219,
+ -1, 58, 59, 297, 58, 59, -1, 301, 13, 14,
+ 304, -1, -1, 70, -1, -1, -1, -1, 312, -1,
+ -1, -1, -1, 314, 318, -1, -1, 321, 248, 0,
+ 1, -1, 3, 4, -1, -1, 7, 8, -1, 44,
+ 45, -1, -1, 263, -1, -1, -1, 18, 19, 54,
+ -1, -1, -1, -1, -1, 349, -1, 351, 352, -1,
+ 354, -1, -1, -1, -1, 36, 37, 38, 39, -1,
+ -1, -1, -1, 44, 45, 46, 47, 48, -1, -1,
+ -1, -1, 53, 54, 60, 61, 62, 63, 64, 60,
+ 61, 67, 63, -1, 65, -1, -1, 68, 69, -1,
+ 71, -1, -1, 74, 1, 76, 3, 4, -1, -1,
+ 7, 8, 60, 61, 62, 63, 64, -1, -1, 67,
+ -1, -1, -1, 20, -1, 22, 23, 24, 25, 26,
+ 27, 28, 29, 30, 31, 32, 33, 34, 35, -1,
+ -1, -1, 39, 40, -1, -1, -1, 44, 45, 46,
+ 47, -1, -1, -1, -1, -1, 53, 54, -1, -1,
+ -1, -1, -1, 60, 61, -1, 63, -1, 65, -1,
+ -1, 68, 69, -1, 71, -1, -1, 74, 75, 76,
+ 1, -1, 3, 4, -1, -1, 7, 8, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 20,
+ -1, 22, 23, 24, 25, 26, 27, 28, 29, 30,
+ 31, 32, 33, 34, 35, -1, -1, -1, 39, 40,
+ -1, -1, -1, 44, 45, 46, 47, -1, -1, -1,
+ -1, -1, 53, 54, -1, -1, -1, -1, -1, 60,
+ 61, -1, 63, -1, 65, -1, -1, 68, 69, -1,
+ 71, -1, -1, 74, 75, 76, 1, -1, 3, 4,
+ -1, -1, 7, 8, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 20, -1, 22, 23, 24,
+ -1, -1, 27, 28, 29, 30, 31, 32, 33, 34,
+ 35, -1, -1, -1, 39, 40, -1, -1, -1, 44,
+ 45, 46, 47, -1, 1, -1, 3, 4, -1, 54,
+ 7, 8, -1, -1, 11, 60, 61, -1, 63, -1,
+ 65, -1, -1, 68, 69, -1, 71, -1, -1, 74,
+ 75, 76, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 39, -1, -1, -1, -1, 44, 45, 46,
+ 47, -1, -1, -1, -1, -1, 53, 54, -1, -1,
+ -1, -1, -1, 60, 61, -1, 63, -1, 65, -1,
+ -1, 68, 69, 70, 71, -1, 3, 4, -1, 76,
+ 7, 8, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 20, -1, 22, 23, 24, -1, -1,
+ 27, 28, 29, 30, 31, 32, 33, 34, 35, -1,
+ 3, 4, 39, 40, 7, 8, -1, 44, 45, 46,
+ 47, -1, -1, -1, -1, -1, -1, 54, -1, -1,
+ -1, -1, -1, 60, 61, -1, 63, -1, 65, -1,
+ -1, 68, 69, -1, 71, -1, 39, 74, -1, 76,
+ -1, 44, 45, 46, 47, -1, 1, -1, 3, 4,
+ -1, 54, 7, 8, 9, -1, -1, 60, 61, -1,
+ 63, -1, 65, -1, -1, 68, 69, -1, 71, -1,
+ -1, -1, -1, 76, 1, -1, 3, 4, -1, -1,
+ 7, 8, 9, -1, 39, -1, -1, -1, -1, 44,
45, 46, 47, -1, -1, -1, -1, -1, -1, 54,
- -1, -1, 23, -1, -1, 60, 61, -1, 63, -1,
- 65, 32, 33, 68, 69, -1, 71, -1, 39, -1,
- -1, -1, -1, 44, 45, 46, 47, 3, 4, -1,
- -1, 7, 8, 54, -1, -1, 12, -1, -1, 60,
+ -1, -1, -1, -1, -1, 60, 61, -1, 63, -1,
+ 65, -1, 39, 68, 69, 70, 71, 44, 45, 46,
+ 47, -1, 1, -1, 3, 4, -1, 54, 7, 8,
+ -1, -1, -1, 60, 61, -1, 63, -1, 65, -1,
+ -1, 68, 69, -1, 71, -1, -1, -1, -1, -1,
+ 1, -1, 3, 4, -1, -1, 7, 8, -1, -1,
+ 39, -1, -1, -1, -1, 44, 45, 46, 47, -1,
+ -1, -1, -1, -1, -1, 54, -1, -1, -1, -1,
+ -1, 60, 61, -1, 63, -1, 65, -1, 39, 68,
+ 69, -1, 71, 44, 45, 46, 47, -1, -1, -1,
+ -1, 3, 4, 54, -1, 7, 8, -1, -1, 60,
61, -1, 63, -1, 65, -1, -1, 68, 69, -1,
- 71, -1, -1, -1, -1, 3, 4, -1, -1, 7,
- 8, 9, -1, 39, -1, -1, -1, -1, 44, 45,
- 46, 47, -1, -1, -1, -1, -1, 10, 54, -1,
- -1, -1, 15, -1, 60, 61, -1, 63, -1, 65,
- -1, 39, 68, 69, -1, 71, 44, 45, 46, 47,
- 3, 4, -1, -1, 7, 8, 54, -1, 41, 42,
- 43, -1, 60, 61, -1, 63, -1, 65, -1, -1,
- 68, 69, 55, 71, 57, 58, 59, -1, 3, 4,
- -1, -1, 7, 8, -1, -1, 39, -1, -1, -1,
- -1, 44, 45, 46, 47, -1, -1, -1, -1, -1,
- 10, 54, -1, -1, -1, 15, -1, 60, 61, -1,
- 63, -1, 65, -1, -1, 68, 69, -1, 71, 44,
- 45, 46, 47, 10, -1, -1, -1, -1, 15, 54,
- -1, 41, 42, 43, -1, 60, 61, -1, 63, -1,
- 65, -1, 10, 68, 69, 55, 71, 15, 58, 59,
- -1, -1, -1, -1, 41, 42, 43, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 76, -1, 55, 56,
- -1, 58, 59, 41, 42, 43, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 55, -1, -1,
- 58, 59
+ 71, 23, -1, -1, -1, -1, -1, -1, -1, -1,
+ 32, 33, -1, -1, 3, 4, -1, 39, 7, 8,
+ 9, -1, 44, 45, 46, 47, 3, 4, -1, -1,
+ 7, 8, 54, -1, -1, 12, -1, -1, 60, 61,
+ -1, 63, -1, 65, -1, -1, 68, 69, -1, 71,
+ 39, -1, -1, -1, -1, 44, 45, 46, 47, 3,
+ 4, -1, 39, 7, 8, 54, -1, 44, 45, 46,
+ 47, 60, 61, -1, 63, -1, 65, 54, -1, 68,
+ 69, -1, 71, 60, 61, -1, 63, -1, 65, -1,
+ -1, 68, 69, -1, 71, 39, -1, -1, -1, -1,
+ 44, 45, 46, 47, 3, 4, -1, -1, 7, 8,
+ 54, -1, -1, -1, -1, -1, 60, 61, -1, 63,
+ -1, 65, -1, -1, 68, 69, 10, 71, -1, -1,
+ -1, 15, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 44, 45, 46, 47, 10,
+ -1, -1, -1, -1, 15, 54, -1, 41, 42, 43,
+ 10, 60, 61, -1, 63, 15, 65, -1, -1, 68,
+ 69, 55, 71, 57, 58, 59, -1, -1, -1, -1,
+ 41, 42, 43, -1, -1, -1, -1, -1, -1, -1,
+ -1, 41, 42, 43, 55, 56, -1, 58, 59, -1,
+ -1, -1, -1, -1, -1, 55, -1, -1, 58, 59
};
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1136,39 +1131,39 @@ static const yytype_uint8 yystos[] =
0, 78, 0, 1, 3, 4, 7, 8, 18, 19,
36, 37, 38, 39, 44, 45, 46, 47, 48, 53,
54, 60, 61, 63, 65, 68, 69, 71, 79, 83,
- 87, 89, 92, 110, 121, 125, 126, 127, 128, 129,
- 130, 138, 139, 69, 72, 135, 136, 137, 3, 4,
- 46, 47, 71, 85, 86, 131, 139, 139, 139, 69,
- 69, 71, 126, 139, 126, 126, 69, 128, 139, 1,
- 117, 121, 49, 51, 52, 130, 74, 76, 84, 94,
- 110, 141, 145, 84, 90, 53, 10, 15, 41, 42,
- 43, 55, 57, 58, 59, 123, 124, 147, 12, 126,
- 60, 61, 62, 63, 64, 67, 60, 61, 62, 63,
- 64, 67, 13, 14, 44, 45, 54, 122, 1, 9,
- 91, 118, 119, 120, 121, 117, 121, 17, 135, 50,
- 69, 58, 112, 118, 118, 121, 44, 45, 140, 1,
- 70, 143, 147, 143, 1, 6, 80, 1, 6, 81,
- 1, 6, 82, 110, 111, 93, 111, 5, 91, 121,
- 138, 121, 121, 121, 111, 121, 121, 39, 126, 126,
- 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
- 91, 14, 121, 143, 1, 147, 73, 88, 126, 143,
- 143, 121, 41, 1, 121, 1, 94, 1, 94, 1,
- 94, 1, 20, 22, 23, 24, 27, 28, 29, 30,
- 31, 32, 33, 34, 35, 40, 75, 95, 96, 98,
- 105, 109, 121, 141, 142, 145, 56, 131, 120, 1,
- 120, 1, 4, 113, 114, 138, 69, 97, 4, 69,
- 69, 69, 111, 69, 94, 94, 94, 115, 121, 94,
- 111, 94, 99, 93, 144, 145, 111, 121, 143, 1,
- 147, 121, 115, 100, 4, 121, 121, 95, 4, 98,
- 101, 94, 69, 106, 116, 117, 142, 111, 111, 1,
- 4, 143, 94, 132, 133, 134, 135, 70, 143, 143,
- 27, 41, 145, 117, 11, 107, 111, 17, 134, 111,
- 111, 69, 138, 111, 143, 108, 95, 141, 95, 121,
- 143, 121, 145, 125, 21, 102, 143, 111, 145, 111,
- 111, 1, 25, 26, 103, 111, 111, 95, 111, 101,
- 95, 7, 8, 60, 61, 89, 91, 104, 56, 146,
- 142, 101, 143, 7, 7, 146, 111, 143, 111, 111,
- 93, 111, 95, 93, 95
+ 85, 88, 90, 93, 111, 122, 126, 127, 128, 129,
+ 130, 131, 139, 140, 69, 3, 46, 47, 71, 85,
+ 86, 87, 132, 140, 140, 140, 69, 69, 71, 127,
+ 140, 127, 127, 69, 129, 140, 1, 118, 122, 49,
+ 51, 52, 131, 74, 76, 84, 95, 111, 142, 146,
+ 72, 136, 137, 138, 84, 91, 53, 10, 15, 41,
+ 42, 43, 55, 57, 58, 59, 124, 125, 148, 12,
+ 127, 60, 61, 62, 63, 64, 67, 60, 61, 62,
+ 63, 64, 67, 13, 14, 44, 45, 54, 123, 1,
+ 9, 92, 119, 120, 121, 122, 50, 69, 58, 113,
+ 119, 119, 122, 44, 45, 141, 1, 70, 144, 148,
+ 144, 1, 6, 80, 1, 6, 81, 1, 6, 82,
+ 111, 112, 94, 112, 118, 122, 17, 136, 5, 92,
+ 122, 139, 122, 122, 122, 112, 122, 122, 39, 127,
+ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
+ 127, 92, 14, 122, 144, 1, 148, 89, 127, 144,
+ 144, 122, 41, 1, 122, 1, 95, 1, 95, 1,
+ 95, 1, 20, 22, 23, 24, 27, 28, 29, 30,
+ 31, 32, 33, 34, 35, 40, 75, 96, 97, 99,
+ 106, 110, 122, 142, 143, 146, 73, 56, 132, 121,
+ 1, 121, 1, 4, 114, 115, 139, 69, 98, 69,
+ 85, 69, 69, 112, 69, 95, 95, 95, 116, 122,
+ 95, 112, 95, 100, 94, 145, 146, 112, 122, 144,
+ 1, 148, 122, 116, 85, 101, 122, 122, 96, 85,
+ 99, 102, 95, 69, 107, 117, 118, 143, 112, 112,
+ 1, 4, 144, 95, 70, 133, 134, 135, 136, 144,
+ 144, 27, 41, 146, 118, 11, 108, 112, 17, 135,
+ 112, 112, 69, 139, 112, 144, 109, 96, 142, 96,
+ 122, 144, 122, 146, 126, 21, 103, 144, 112, 146,
+ 112, 112, 1, 25, 26, 104, 112, 112, 96, 112,
+ 102, 96, 7, 8, 60, 61, 90, 92, 105, 56,
+ 147, 143, 102, 144, 7, 7, 147, 112, 144, 112,
+ 112, 94, 112, 96, 94, 96
};
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
@@ -1177,24 +1172,24 @@ static const yytype_uint8 yyr1[] =
0, 77, 78, 78, 78, 78, 78, 79, 79, 79,
79, 79, 79, 80, 80, 80, 81, 81, 81, 82,
82, 82, 83, 83, 83, 83, 83, 83, 83, 84,
- 85, 85, 85, 85, 86, 86, 88, 87, 90, 89,
- 91, 92, 92, 93, 93, 93, 94, 94, 95, 95,
- 95, 95, 95, 95, 95, 95, 95, 95, 96, 96,
- 96, 96, 96, 97, 96, 96, 99, 98, 100, 98,
- 98, 98, 101, 101, 102, 102, 102, 103, 103, 104,
- 104, 104, 104, 104, 104, 105, 105, 106, 106, 107,
- 108, 107, 109, 109, 110, 110, 111, 111, 112, 112,
- 113, 113, 114, 114, 114, 114, 114, 115, 115, 116,
- 116, 117, 117, 117, 117, 117, 117, 118, 118, 119,
- 119, 119, 119, 119, 119, 120, 120, 121, 121, 121,
- 121, 121, 121, 121, 121, 121, 121, 122, 122, 122,
- 123, 123, 124, 124, 125, 125, 125, 126, 126, 126,
- 126, 126, 126, 126, 126, 126, 126, 126, 127, 127,
- 127, 127, 127, 127, 127, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 129,
- 129, 130, 131, 131, 132, 132, 133, 133, 134, 135,
- 136, 136, 137, 138, 138, 139, 139, 140, 140, 140,
- 141, 142, 143, 144, 144, 145, 146, 147
+ 85, 86, 86, 86, 86, 87, 87, 89, 88, 91,
+ 90, 92, 93, 93, 94, 94, 94, 95, 95, 96,
+ 96, 96, 96, 96, 96, 96, 96, 96, 96, 97,
+ 97, 97, 97, 97, 98, 97, 97, 100, 99, 101,
+ 99, 99, 99, 102, 102, 103, 103, 103, 104, 104,
+ 105, 105, 105, 105, 105, 105, 106, 106, 107, 107,
+ 108, 109, 108, 110, 110, 111, 111, 112, 112, 113,
+ 113, 114, 114, 115, 115, 115, 115, 115, 116, 116,
+ 117, 117, 118, 118, 118, 118, 118, 118, 119, 119,
+ 120, 120, 120, 120, 120, 120, 121, 121, 122, 122,
+ 122, 122, 122, 122, 122, 122, 122, 122, 123, 123,
+ 123, 124, 124, 125, 125, 126, 126, 126, 127, 127,
+ 127, 127, 127, 127, 127, 127, 127, 127, 127, 128,
+ 128, 128, 128, 128, 128, 128, 129, 129, 129, 129,
+ 129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
+ 130, 130, 131, 132, 132, 133, 133, 134, 134, 135,
+ 136, 137, 137, 138, 139, 139, 140, 140, 141, 141,
+ 141, 142, 143, 144, 145, 145, 146, 147, 148
};
/* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
@@ -1203,24 +1198,24 @@ static const yytype_uint8 yyr2[] =
0, 2, 0, 2, 2, 2, 2, 2, 2, 2,
4, 4, 4, 1, 2, 1, 1, 2, 1, 1,
2, 1, 0, 1, 3, 1, 1, 1, 1, 5,
- 1, 1, 1, 2, 1, 1, 0, 7, 0, 3,
- 1, 1, 1, 0, 2, 2, 1, 2, 2, 3,
- 1, 9, 6, 8, 8, 12, 11, 1, 2, 2,
- 2, 2, 3, 0, 4, 2, 0, 4, 0, 4,
- 4, 1, 0, 1, 0, 2, 2, 5, 4, 1,
- 2, 2, 1, 1, 1, 1, 1, 1, 3, 0,
- 0, 3, 6, 9, 1, 2, 0, 1, 0, 2,
- 0, 1, 1, 3, 1, 2, 3, 0, 1, 0,
- 1, 1, 3, 1, 2, 3, 3, 0, 1, 1,
- 3, 1, 2, 3, 3, 1, 1, 3, 3, 3,
- 3, 3, 3, 3, 3, 5, 1, 1, 1, 2,
- 1, 1, 1, 1, 1, 1, 2, 1, 3, 3,
- 3, 3, 3, 3, 3, 2, 2, 5, 4, 3,
- 3, 3, 3, 3, 3, 1, 2, 3, 4, 4,
- 1, 1, 1, 2, 2, 1, 1, 2, 2, 1,
- 2, 4, 0, 1, 0, 2, 1, 2, 1, 3,
- 1, 2, 2, 1, 2, 1, 3, 1, 1, 0,
- 2, 2, 1, 0, 1, 1, 1, 2
+ 1, 1, 1, 1, 2, 1, 1, 0, 7, 0,
+ 3, 1, 1, 1, 0, 2, 2, 1, 2, 2,
+ 3, 1, 9, 6, 8, 8, 12, 11, 1, 2,
+ 2, 2, 2, 3, 0, 4, 2, 0, 4, 0,
+ 4, 4, 1, 0, 1, 0, 2, 2, 5, 4,
+ 1, 2, 2, 1, 1, 1, 1, 1, 1, 3,
+ 0, 0, 3, 6, 9, 1, 2, 0, 1, 0,
+ 2, 0, 1, 1, 3, 1, 2, 3, 0, 1,
+ 0, 1, 1, 3, 1, 2, 3, 3, 0, 1,
+ 1, 3, 1, 2, 3, 3, 1, 1, 3, 3,
+ 3, 3, 3, 3, 3, 3, 5, 1, 1, 1,
+ 2, 1, 1, 1, 1, 1, 1, 2, 1, 3,
+ 3, 3, 3, 3, 3, 3, 2, 2, 5, 4,
+ 3, 3, 3, 3, 3, 3, 1, 2, 3, 4,
+ 4, 1, 1, 1, 2, 2, 1, 1, 2, 2,
+ 1, 2, 4, 0, 1, 0, 2, 1, 2, 1,
+ 3, 1, 2, 2, 1, 2, 1, 3, 1, 1,
+ 0, 2, 2, 1, 0, 1, 1, 1, 2
};
@@ -1897,22 +1892,22 @@ yyreduce:
switch (yyn)
{
case 2:
-#line 230 "awkgram.y" /* yacc.c:1645 */
+#line 231 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = NULL; }
-#line 1903 "awkgram.c" /* yacc.c:1645 */
+#line 1898 "awkgram.c" /* yacc.c:1645 */
break;
case 3:
-#line 232 "awkgram.y" /* yacc.c:1645 */
+#line 233 "awkgram.y" /* yacc.c:1645 */
{
rule = 0;
yyerrok;
}
-#line 1912 "awkgram.c" /* yacc.c:1645 */
+#line 1907 "awkgram.c" /* yacc.c:1645 */
break;
case 4:
-#line 237 "awkgram.y" /* yacc.c:1645 */
+#line 238 "awkgram.y" /* yacc.c:1645 */
{
if ((yyvsp[0]) != NULL) {
if ((yyvsp[-1]) == NULL)
@@ -1922,19 +1917,19 @@ yyreduce:
}
(yyval) = (yyvsp[-1]);
}
-#line 1926 "awkgram.c" /* yacc.c:1645 */
+#line 1921 "awkgram.c" /* yacc.c:1645 */
break;
case 5:
-#line 247 "awkgram.y" /* yacc.c:1645 */
+#line 248 "awkgram.y" /* yacc.c:1645 */
{
next_sourcefile();
}
-#line 1934 "awkgram.c" /* yacc.c:1645 */
+#line 1929 "awkgram.c" /* yacc.c:1645 */
break;
case 6:
-#line 251 "awkgram.y" /* yacc.c:1645 */
+#line 252 "awkgram.y" /* yacc.c:1645 */
{
rule = 0;
/*
@@ -1943,11 +1938,11 @@ yyreduce:
*/
/* yyerrok; */
}
-#line 1947 "awkgram.c" /* yacc.c:1645 */
+#line 1942 "awkgram.c" /* yacc.c:1645 */
break;
case 7:
-#line 263 "awkgram.y" /* yacc.c:1645 */
+#line 264 "awkgram.y" /* yacc.c:1645 */
{
(void) append_rule((yyvsp[-1]), (yyvsp[0]));
if (pending_comment != NULL) {
@@ -1955,11 +1950,11 @@ yyreduce:
pending_comment = NULL;
}
}
-#line 1959 "awkgram.c" /* yacc.c:1645 */
+#line 1954 "awkgram.c" /* yacc.c:1645 */
break;
case 8:
-#line 271 "awkgram.y" /* yacc.c:1645 */
+#line 272 "awkgram.y" /* yacc.c:1645 */
{
if (rule != Rule) {
msg(_("%s blocks must have an action part"), ruletab[rule]);
@@ -1973,13 +1968,13 @@ yyreduce:
(void) append_rule((yyvsp[-1]), NULL);
}
}
-#line 1977 "awkgram.c" /* yacc.c:1645 */
+#line 1972 "awkgram.c" /* yacc.c:1645 */
break;
case 9:
-#line 285 "awkgram.y" /* yacc.c:1645 */
+#line 286 "awkgram.y" /* yacc.c:1645 */
{
- in_function = NULL;
+ in_function = false;
(void) mk_function((yyvsp[-1]), (yyvsp[0]));
want_param_names = DONT_CHECK;
if (pending_comment != NULL) {
@@ -1988,11 +1983,11 @@ yyreduce:
}
yyerrok;
}
-#line 1992 "awkgram.c" /* yacc.c:1645 */
+#line 1987 "awkgram.c" /* yacc.c:1645 */
break;
case 10:
-#line 296 "awkgram.y" /* yacc.c:1645 */
+#line 297 "awkgram.y" /* yacc.c:1645 */
{
want_source = false;
at_seen = false;
@@ -2002,11 +1997,11 @@ yyreduce:
}
yyerrok;
}
-#line 2006 "awkgram.c" /* yacc.c:1645 */
+#line 2001 "awkgram.c" /* yacc.c:1645 */
break;
case 11:
-#line 306 "awkgram.y" /* yacc.c:1645 */
+#line 307 "awkgram.y" /* yacc.c:1645 */
{
want_source = false;
at_seen = false;
@@ -2016,11 +2011,11 @@ yyreduce:
}
yyerrok;
}
-#line 2020 "awkgram.c" /* yacc.c:1645 */
+#line 2015 "awkgram.c" /* yacc.c:1645 */
break;
case 12:
-#line 316 "awkgram.y" /* yacc.c:1645 */
+#line 317 "awkgram.y" /* yacc.c:1645 */
{
want_source = false;
at_seen = false;
@@ -2030,11 +2025,11 @@ yyreduce:
yyerrok;
}
-#line 2034 "awkgram.c" /* yacc.c:1645 */
+#line 2029 "awkgram.c" /* yacc.c:1645 */
break;
case 13:
-#line 329 "awkgram.y" /* yacc.c:1645 */
+#line 330 "awkgram.y" /* yacc.c:1645 */
{
void *srcfile = NULL;
@@ -2044,23 +2039,23 @@ yyreduce:
bcfree((yyvsp[0]));
(yyval) = (INSTRUCTION *) srcfile;
}
-#line 2048 "awkgram.c" /* yacc.c:1645 */
+#line 2043 "awkgram.c" /* yacc.c:1645 */
break;
case 14:
-#line 339 "awkgram.y" /* yacc.c:1645 */
+#line 340 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = NULL; }
-#line 2054 "awkgram.c" /* yacc.c:1645 */
+#line 2049 "awkgram.c" /* yacc.c:1645 */
break;
case 15:
-#line 341 "awkgram.y" /* yacc.c:1645 */
+#line 342 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = NULL; }
-#line 2060 "awkgram.c" /* yacc.c:1645 */
+#line 2055 "awkgram.c" /* yacc.c:1645 */
break;
case 16:
-#line 346 "awkgram.y" /* yacc.c:1645 */
+#line 347 "awkgram.y" /* yacc.c:1645 */
{
void *srcfile;
@@ -2070,58 +2065,58 @@ yyreduce:
bcfree((yyvsp[0]));
(yyval) = (INSTRUCTION *) srcfile;
}
-#line 2074 "awkgram.c" /* yacc.c:1645 */
+#line 2069 "awkgram.c" /* yacc.c:1645 */
break;
case 17:
-#line 356 "awkgram.y" /* yacc.c:1645 */
+#line 357 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = NULL; }
-#line 2080 "awkgram.c" /* yacc.c:1645 */
+#line 2075 "awkgram.c" /* yacc.c:1645 */
break;
case 18:
-#line 358 "awkgram.y" /* yacc.c:1645 */
+#line 359 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = NULL; }
-#line 2086 "awkgram.c" /* yacc.c:1645 */
+#line 2081 "awkgram.c" /* yacc.c:1645 */
break;
case 19:
-#line 363 "awkgram.y" /* yacc.c:1645 */
+#line 364 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = (yyvsp[0]); }
-#line 2092 "awkgram.c" /* yacc.c:1645 */
+#line 2087 "awkgram.c" /* yacc.c:1645 */
break;
case 20:
-#line 365 "awkgram.y" /* yacc.c:1645 */
+#line 366 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = NULL; }
-#line 2098 "awkgram.c" /* yacc.c:1645 */
+#line 2093 "awkgram.c" /* yacc.c:1645 */
break;
case 21:
-#line 367 "awkgram.y" /* yacc.c:1645 */
+#line 368 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = NULL; }
-#line 2104 "awkgram.c" /* yacc.c:1645 */
+#line 2099 "awkgram.c" /* yacc.c:1645 */
break;
case 22:
-#line 372 "awkgram.y" /* yacc.c:1645 */
+#line 373 "awkgram.y" /* yacc.c:1645 */
{
rule = Rule;
(yyval) = NULL;
}
-#line 2113 "awkgram.c" /* yacc.c:1645 */
+#line 2108 "awkgram.c" /* yacc.c:1645 */
break;
case 23:
-#line 377 "awkgram.y" /* yacc.c:1645 */
+#line 378 "awkgram.y" /* yacc.c:1645 */
{
rule = Rule;
}
-#line 2121 "awkgram.c" /* yacc.c:1645 */
+#line 2116 "awkgram.c" /* yacc.c:1645 */
break;
case 24:
-#line 382 "awkgram.y" /* yacc.c:1645 */
+#line 383 "awkgram.y" /* yacc.c:1645 */
{
INSTRUCTION *tp;
@@ -2151,11 +2146,11 @@ yyreduce:
(yyval) = list_append(list_merge((yyvsp[-2]), (yyvsp[0])), tp);
rule = Rule;
}
-#line 2155 "awkgram.c" /* yacc.c:1645 */
+#line 2150 "awkgram.c" /* yacc.c:1645 */
break;
case 25:
-#line 412 "awkgram.y" /* yacc.c:1645 */
+#line 413 "awkgram.y" /* yacc.c:1645 */
{
static int begin_seen = 0;
@@ -2167,11 +2162,11 @@ yyreduce:
(yyvsp[0])->source_file = source;
(yyval) = (yyvsp[0]);
}
-#line 2171 "awkgram.c" /* yacc.c:1645 */
+#line 2166 "awkgram.c" /* yacc.c:1645 */
break;
case 26:
-#line 424 "awkgram.y" /* yacc.c:1645 */
+#line 425 "awkgram.y" /* yacc.c:1645 */
{
static int end_seen = 0;
@@ -2183,31 +2178,31 @@ yyreduce:
(yyvsp[0])->source_file = source;
(yyval) = (yyvsp[0]);
}
-#line 2187 "awkgram.c" /* yacc.c:1645 */
+#line 2182 "awkgram.c" /* yacc.c:1645 */
break;
case 27:
-#line 436 "awkgram.y" /* yacc.c:1645 */
+#line 437 "awkgram.y" /* yacc.c:1645 */
{
(yyvsp[0])->in_rule = rule = BEGINFILE;
(yyvsp[0])->source_file = source;
(yyval) = (yyvsp[0]);
}
-#line 2197 "awkgram.c" /* yacc.c:1645 */
+#line 2192 "awkgram.c" /* yacc.c:1645 */
break;
case 28:
-#line 442 "awkgram.y" /* yacc.c:1645 */
+#line 443 "awkgram.y" /* yacc.c:1645 */
{
(yyvsp[0])->in_rule = rule = ENDFILE;
(yyvsp[0])->source_file = source;
(yyval) = (yyvsp[0]);
}
-#line 2207 "awkgram.c" /* yacc.c:1645 */
+#line 2202 "awkgram.c" /* yacc.c:1645 */
break;
case 29:
-#line 451 "awkgram.y" /* yacc.c:1645 */
+#line 452 "awkgram.y" /* yacc.c:1645 */
{
INSTRUCTION *ip = make_braced_statements((yyvsp[-4]), (yyvsp[-3]), (yyvsp[-2]));
@@ -2222,48 +2217,66 @@ yyreduce:
(yyval) = ip;
}
-#line 2226 "awkgram.c" /* yacc.c:1645 */
+#line 2221 "awkgram.c" /* yacc.c:1645 */
break;
case 30:
-#line 469 "awkgram.y" /* yacc.c:1645 */
- { (yyval) = (yyvsp[0]); }
-#line 2232 "awkgram.c" /* yacc.c:1645 */
- break;
+#line 470 "awkgram.y" /* yacc.c:1645 */
+ {
+ const char *name = (yyvsp[0])->lextok;
+ char *qname = qualify_name(name, strlen(name));
- case 31:
-#line 471 "awkgram.y" /* yacc.c:1645 */
- { (yyval) = (yyvsp[0]); }
-#line 2238 "awkgram.c" /* yacc.c:1645 */
+ if (qname != name) {
+ efree((void *)name);
+ (yyvsp[0])->lextok = qname;
+ }
+ (yyval) = (yyvsp[0]);
+ }
+#line 2236 "awkgram.c" /* yacc.c:1645 */
break;
case 32:
-#line 473 "awkgram.y" /* yacc.c:1645 */
+#line 485 "awkgram.y" /* yacc.c:1645 */
+ {
+ const char *name = (yyvsp[0])->lextok;
+ char *qname = qualify_name(name, strlen(name));
+
+ if (qname != name) {
+ efree((void *)name);
+ (yyvsp[0])->lextok = qname;
+ }
+ (yyval) = (yyvsp[0]);
+ }
+#line 2251 "awkgram.c" /* yacc.c:1645 */
+ break;
+
+ case 33:
+#line 496 "awkgram.y" /* yacc.c:1645 */
{
yyerror(_("`%s' is a built-in function, it cannot be redefined"),
tokstart);
YYABORT;
}
-#line 2248 "awkgram.c" /* yacc.c:1645 */
+#line 2261 "awkgram.c" /* yacc.c:1645 */
break;
- case 33:
-#line 479 "awkgram.y" /* yacc.c:1645 */
+ case 34:
+#line 502 "awkgram.y" /* yacc.c:1645 */
{
(yyval) = (yyvsp[0]);
at_seen = false;
}
-#line 2257 "awkgram.c" /* yacc.c:1645 */
+#line 2270 "awkgram.c" /* yacc.c:1645 */
break;
- case 36:
-#line 491 "awkgram.y" /* yacc.c:1645 */
+ case 37:
+#line 514 "awkgram.y" /* yacc.c:1645 */
{ want_param_names = FUNC_HEADER; }
-#line 2263 "awkgram.c" /* yacc.c:1645 */
+#line 2276 "awkgram.c" /* yacc.c:1645 */
break;
- case 37:
-#line 492 "awkgram.y" /* yacc.c:1645 */
+ case 38:
+#line 515 "awkgram.y" /* yacc.c:1645 */
{
INSTRUCTION *func_comment = NULL;
// Merge any comments found in the parameter list with those
@@ -2282,24 +2295,24 @@ yyreduce:
(yyvsp[-6])->comment = func_comment;
if (install_function((yyvsp[-5])->lextok, (yyvsp[-6]), (yyvsp[-2])) < 0)
YYABORT;
- in_function = (yyvsp[-5])->lextok;
+ in_function = true;
(yyvsp[-5])->lextok = NULL;
bcfree((yyvsp[-5]));
/* $5 already free'd in install_function */
(yyval) = (yyvsp[-6]);
want_param_names = FUNC_BODY;
}
-#line 2293 "awkgram.c" /* yacc.c:1645 */
+#line 2306 "awkgram.c" /* yacc.c:1645 */
break;
- case 38:
-#line 525 "awkgram.y" /* yacc.c:1645 */
+ case 39:
+#line 548 "awkgram.y" /* yacc.c:1645 */
{ want_regexp = true; }
-#line 2299 "awkgram.c" /* yacc.c:1645 */
+#line 2312 "awkgram.c" /* yacc.c:1645 */
break;
- case 39:
-#line 527 "awkgram.y" /* yacc.c:1645 */
+ case 40:
+#line 550 "awkgram.y" /* yacc.c:1645 */
{
NODE *n, *exp;
char *re;
@@ -2328,11 +2341,11 @@ yyreduce:
(yyval)->opcode = Op_match_rec;
(yyval)->memory = n;
}
-#line 2332 "awkgram.c" /* yacc.c:1645 */
+#line 2345 "awkgram.c" /* yacc.c:1645 */
break;
- case 40:
-#line 559 "awkgram.y" /* yacc.c:1645 */
+ case 41:
+#line 582 "awkgram.y" /* yacc.c:1645 */
{
char *re;
size_t len;
@@ -2345,23 +2358,23 @@ yyreduce:
(yyval)->opcode = Op_push_re;
(yyval)->memory = make_typed_regex(re, len);
}
-#line 2349 "awkgram.c" /* yacc.c:1645 */
+#line 2362 "awkgram.c" /* yacc.c:1645 */
break;
- case 41:
-#line 574 "awkgram.y" /* yacc.c:1645 */
+ case 42:
+#line 597 "awkgram.y" /* yacc.c:1645 */
{ bcfree((yyvsp[0])); }
-#line 2355 "awkgram.c" /* yacc.c:1645 */
+#line 2368 "awkgram.c" /* yacc.c:1645 */
break;
- case 43:
-#line 580 "awkgram.y" /* yacc.c:1645 */
+ case 44:
+#line 603 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = NULL; }
-#line 2361 "awkgram.c" /* yacc.c:1645 */
+#line 2374 "awkgram.c" /* yacc.c:1645 */
break;
- case 44:
-#line 582 "awkgram.y" /* yacc.c:1645 */
+ case 45:
+#line 605 "awkgram.y" /* yacc.c:1645 */
{
if ((yyvsp[0]) == NULL) {
(yyval) = (yyvsp[-1]);
@@ -2381,29 +2394,29 @@ yyreduce:
yyerrok;
}
-#line 2385 "awkgram.c" /* yacc.c:1645 */
+#line 2398 "awkgram.c" /* yacc.c:1645 */
break;
- case 45:
-#line 602 "awkgram.y" /* yacc.c:1645 */
+ case 46:
+#line 625 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = NULL; }
-#line 2391 "awkgram.c" /* yacc.c:1645 */
+#line 2404 "awkgram.c" /* yacc.c:1645 */
break;
- case 46:
-#line 606 "awkgram.y" /* yacc.c:1645 */
+ case 47:
+#line 629 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = (yyvsp[0]); }
-#line 2397 "awkgram.c" /* yacc.c:1645 */
+#line 2410 "awkgram.c" /* yacc.c:1645 */
break;
- case 47:
-#line 607 "awkgram.y" /* yacc.c:1645 */
+ case 48:
+#line 630 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = (yyvsp[0]); }
-#line 2403 "awkgram.c" /* yacc.c:1645 */
+#line 2416 "awkgram.c" /* yacc.c:1645 */
break;
- case 48:
-#line 612 "awkgram.y" /* yacc.c:1645 */
+ case 49:
+#line 635 "awkgram.y" /* yacc.c:1645 */
{
if ((yyvsp[0]) != NULL) {
INSTRUCTION *ip;
@@ -2414,31 +2427,31 @@ yyreduce:
} else
(yyval) = NULL;
}
-#line 2418 "awkgram.c" /* yacc.c:1645 */
+#line 2431 "awkgram.c" /* yacc.c:1645 */
break;
- case 49:
-#line 623 "awkgram.y" /* yacc.c:1645 */
+ case 50:
+#line 646 "awkgram.y" /* yacc.c:1645 */
{
trailing_comment = (yyvsp[0]); // NULL or comment
(yyval) = make_braced_statements((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]));
}
-#line 2427 "awkgram.c" /* yacc.c:1645 */
+#line 2440 "awkgram.c" /* yacc.c:1645 */
break;
- case 50:
-#line 628 "awkgram.y" /* yacc.c:1645 */
+ case 51:
+#line 651 "awkgram.y" /* yacc.c:1645 */
{
if (do_pretty_print)
(yyval) = list_prepend((yyvsp[0]), instruction(Op_exec_count));
else
(yyval) = (yyvsp[0]);
}
-#line 2438 "awkgram.c" /* yacc.c:1645 */
+#line 2451 "awkgram.c" /* yacc.c:1645 */
break;
- case 51:
-#line 635 "awkgram.y" /* yacc.c:1645 */
+ case 52:
+#line 658 "awkgram.y" /* yacc.c:1645 */
{
INSTRUCTION *dflt, *curr = NULL, *cexp, *cstmt;
INSTRUCTION *ip, *nextc, *tbreak;
@@ -2546,11 +2559,11 @@ yyreduce:
break_allowed--;
fix_break_continue(ip, tbreak, NULL);
}
-#line 2550 "awkgram.c" /* yacc.c:1645 */
+#line 2563 "awkgram.c" /* yacc.c:1645 */
break;
- case 52:
-#line 743 "awkgram.y" /* yacc.c:1645 */
+ case 53:
+#line 766 "awkgram.y" /* yacc.c:1645 */
{
/*
* -----------------
@@ -2601,11 +2614,11 @@ yyreduce:
continue_allowed--;
fix_break_continue(ip, tbreak, tcont);
}
-#line 2605 "awkgram.c" /* yacc.c:1645 */
+#line 2618 "awkgram.c" /* yacc.c:1645 */
break;
- case 53:
-#line 794 "awkgram.y" /* yacc.c:1645 */
+ case 54:
+#line 817 "awkgram.y" /* yacc.c:1645 */
{
/*
* -----------------
@@ -2655,11 +2668,11 @@ yyreduce:
/* else
$1 and $4 are NULLs */
}
-#line 2659 "awkgram.c" /* yacc.c:1645 */
+#line 2672 "awkgram.c" /* yacc.c:1645 */
break;
- case 54:
-#line 844 "awkgram.y" /* yacc.c:1645 */
+ case 55:
+#line 867 "awkgram.y" /* yacc.c:1645 */
{
INSTRUCTION *ip;
char *var_name = (yyvsp[-5])->lextok;
@@ -2785,11 +2798,11 @@ regular_loop:
break_allowed--;
continue_allowed--;
}
-#line 2789 "awkgram.c" /* yacc.c:1645 */
+#line 2802 "awkgram.c" /* yacc.c:1645 */
break;
- case 55:
-#line 970 "awkgram.y" /* yacc.c:1645 */
+ case 56:
+#line 993 "awkgram.y" /* yacc.c:1645 */
{
if ((yyvsp[-7]) != NULL) {
merge_comments((yyvsp[-7]), NULL);
@@ -2810,11 +2823,11 @@ regular_loop:
break_allowed--;
continue_allowed--;
}
-#line 2814 "awkgram.c" /* yacc.c:1645 */
+#line 2827 "awkgram.c" /* yacc.c:1645 */
break;
- case 56:
-#line 991 "awkgram.y" /* yacc.c:1645 */
+ case 57:
+#line 1014 "awkgram.y" /* yacc.c:1645 */
{
if ((yyvsp[-6]) != NULL) {
merge_comments((yyvsp[-6]), NULL);
@@ -2835,22 +2848,22 @@ regular_loop:
break_allowed--;
continue_allowed--;
}
-#line 2839 "awkgram.c" /* yacc.c:1645 */
+#line 2852 "awkgram.c" /* yacc.c:1645 */
break;
- case 57:
-#line 1012 "awkgram.y" /* yacc.c:1645 */
+ case 58:
+#line 1035 "awkgram.y" /* yacc.c:1645 */
{
if (do_pretty_print)
(yyval) = list_prepend((yyvsp[0]), instruction(Op_exec_count));
else
(yyval) = (yyvsp[0]);
}
-#line 2850 "awkgram.c" /* yacc.c:1645 */
+#line 2863 "awkgram.c" /* yacc.c:1645 */
break;
- case 58:
-#line 1022 "awkgram.y" /* yacc.c:1645 */
+ case 59:
+#line 1045 "awkgram.y" /* yacc.c:1645 */
{
if (! break_allowed)
error_ln((yyvsp[-1])->source_line,
@@ -2860,11 +2873,11 @@ regular_loop:
if ((yyvsp[0]) != NULL)
(yyval) = list_append((yyval), (yyvsp[0]));
}
-#line 2864 "awkgram.c" /* yacc.c:1645 */
+#line 2877 "awkgram.c" /* yacc.c:1645 */
break;
- case 59:
-#line 1032 "awkgram.y" /* yacc.c:1645 */
+ case 60:
+#line 1055 "awkgram.y" /* yacc.c:1645 */
{
if (! continue_allowed)
error_ln((yyvsp[-1])->source_line,
@@ -2874,11 +2887,11 @@ regular_loop:
if ((yyvsp[0]) != NULL)
(yyval) = list_append((yyval), (yyvsp[0]));
}
-#line 2878 "awkgram.c" /* yacc.c:1645 */
+#line 2891 "awkgram.c" /* yacc.c:1645 */
break;
- case 60:
-#line 1042 "awkgram.y" /* yacc.c:1645 */
+ case 61:
+#line 1065 "awkgram.y" /* yacc.c:1645 */
{
/* if inside function (rule = 0), resolve context at run-time */
if (rule && rule != Rule)
@@ -2889,11 +2902,11 @@ regular_loop:
if ((yyvsp[0]) != NULL)
(yyval) = list_append((yyval), (yyvsp[0]));
}
-#line 2893 "awkgram.c" /* yacc.c:1645 */
+#line 2906 "awkgram.c" /* yacc.c:1645 */
break;
- case 61:
-#line 1053 "awkgram.y" /* yacc.c:1645 */
+ case 62:
+#line 1076 "awkgram.y" /* yacc.c:1645 */
{
/* if inside function (rule = 0), resolve context at run-time */
if (rule == BEGIN || rule == END || rule == ENDFILE)
@@ -2906,11 +2919,11 @@ regular_loop:
if ((yyvsp[0]) != NULL)
(yyval) = list_append((yyval), (yyvsp[0]));
}
-#line 2910 "awkgram.c" /* yacc.c:1645 */
+#line 2923 "awkgram.c" /* yacc.c:1645 */
break;
- case 62:
-#line 1066 "awkgram.y" /* yacc.c:1645 */
+ case 63:
+#line 1089 "awkgram.y" /* yacc.c:1645 */
{
/* Initialize the two possible jump targets, the actual target
* is resolved at run-time.
@@ -2927,20 +2940,20 @@ regular_loop:
if ((yyvsp[0]) != NULL)
(yyval) = list_append((yyval), (yyvsp[0]));
}
-#line 2931 "awkgram.c" /* yacc.c:1645 */
+#line 2944 "awkgram.c" /* yacc.c:1645 */
break;
- case 63:
-#line 1083 "awkgram.y" /* yacc.c:1645 */
+ case 64:
+#line 1106 "awkgram.y" /* yacc.c:1645 */
{
if (! in_function)
yyerror(_("`return' used outside function context"));
}
-#line 2940 "awkgram.c" /* yacc.c:1645 */
+#line 2953 "awkgram.c" /* yacc.c:1645 */
break;
- case 64:
-#line 1086 "awkgram.y" /* yacc.c:1645 */
+ case 65:
+#line 1109 "awkgram.y" /* yacc.c:1645 */
{
if ((yyvsp[-1]) == NULL) {
(yyval) = list_create((yyvsp[-3]));
@@ -2951,28 +2964,28 @@ regular_loop:
if ((yyvsp[0]) != NULL)
(yyval) = list_append((yyval), (yyvsp[0]));
}
-#line 2955 "awkgram.c" /* yacc.c:1645 */
+#line 2968 "awkgram.c" /* yacc.c:1645 */
break;
- case 65:
-#line 1097 "awkgram.y" /* yacc.c:1645 */
+ case 66:
+#line 1120 "awkgram.y" /* yacc.c:1645 */
{
if ((yyvsp[0]) != NULL)
(yyval) = list_append((yyvsp[-1]), (yyvsp[0]));
else
(yyval) = (yyvsp[-1]);
}
-#line 2966 "awkgram.c" /* yacc.c:1645 */
+#line 2979 "awkgram.c" /* yacc.c:1645 */
break;
- case 66:
-#line 1114 "awkgram.y" /* yacc.c:1645 */
+ case 67:
+#line 1137 "awkgram.y" /* yacc.c:1645 */
{ in_print = true; in_parens = 0; }
-#line 2972 "awkgram.c" /* yacc.c:1645 */
+#line 2985 "awkgram.c" /* yacc.c:1645 */
break;
- case 67:
-#line 1115 "awkgram.y" /* yacc.c:1645 */
+ case 68:
+#line 1138 "awkgram.y" /* yacc.c:1645 */
{
/*
* Optimization: plain `print' has no expression list, so $3 is null.
@@ -3069,17 +3082,17 @@ regular_print:
}
}
}
-#line 3073 "awkgram.c" /* yacc.c:1645 */
+#line 3086 "awkgram.c" /* yacc.c:1645 */
break;
- case 68:
-#line 1212 "awkgram.y" /* yacc.c:1645 */
+ case 69:
+#line 1235 "awkgram.y" /* yacc.c:1645 */
{ sub_counter = 0; }
-#line 3079 "awkgram.c" /* yacc.c:1645 */
+#line 3092 "awkgram.c" /* yacc.c:1645 */
break;
- case 69:
-#line 1213 "awkgram.y" /* yacc.c:1645 */
+ case 70:
+#line 1236 "awkgram.y" /* yacc.c:1645 */
{
char *arr = (yyvsp[-2])->lextok;
@@ -3112,11 +3125,11 @@ regular_print:
(yyval) = list_append(list_append((yyvsp[0]), (yyvsp[-2])), (yyvsp[-3]));
}
}
-#line 3116 "awkgram.c" /* yacc.c:1645 */
+#line 3129 "awkgram.c" /* yacc.c:1645 */
break;
- case 70:
-#line 1250 "awkgram.y" /* yacc.c:1645 */
+ case 71:
+#line 1273 "awkgram.y" /* yacc.c:1645 */
{
static bool warned = false;
char *arr = (yyvsp[-1])->lextok;
@@ -3142,54 +3155,54 @@ regular_print:
fatal(_("`delete' is not allowed with FUNCTAB"));
}
}
-#line 3146 "awkgram.c" /* yacc.c:1645 */
+#line 3159 "awkgram.c" /* yacc.c:1645 */
break;
- case 71:
-#line 1276 "awkgram.y" /* yacc.c:1645 */
+ case 72:
+#line 1299 "awkgram.y" /* yacc.c:1645 */
{
(yyval) = optimize_assignment((yyvsp[0]));
}
-#line 3154 "awkgram.c" /* yacc.c:1645 */
+#line 3167 "awkgram.c" /* yacc.c:1645 */
break;
- case 72:
-#line 1283 "awkgram.y" /* yacc.c:1645 */
+ case 73:
+#line 1306 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = NULL; }
-#line 3160 "awkgram.c" /* yacc.c:1645 */
+#line 3173 "awkgram.c" /* yacc.c:1645 */
break;
- case 73:
-#line 1285 "awkgram.y" /* yacc.c:1645 */
+ case 74:
+#line 1308 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = (yyvsp[0]); }
-#line 3166 "awkgram.c" /* yacc.c:1645 */
+#line 3179 "awkgram.c" /* yacc.c:1645 */
break;
- case 74:
-#line 1290 "awkgram.y" /* yacc.c:1645 */
+ case 75:
+#line 1313 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = NULL; }
-#line 3172 "awkgram.c" /* yacc.c:1645 */
+#line 3185 "awkgram.c" /* yacc.c:1645 */
break;
- case 75:
-#line 1292 "awkgram.y" /* yacc.c:1645 */
+ case 76:
+#line 1315 "awkgram.y" /* yacc.c:1645 */
{
if ((yyvsp[-1]) == NULL)
(yyval) = list_create((yyvsp[0]));
else
(yyval) = list_prepend((yyvsp[-1]), (yyvsp[0]));
}
-#line 3183 "awkgram.c" /* yacc.c:1645 */
+#line 3196 "awkgram.c" /* yacc.c:1645 */
break;
- case 76:
-#line 1299 "awkgram.y" /* yacc.c:1645 */
+ case 77:
+#line 1322 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = NULL; }
-#line 3189 "awkgram.c" /* yacc.c:1645 */
+#line 3202 "awkgram.c" /* yacc.c:1645 */
break;
- case 77:
-#line 1304 "awkgram.y" /* yacc.c:1645 */
+ case 78:
+#line 1327 "awkgram.y" /* yacc.c:1645 */
{
INSTRUCTION *casestmt = (yyvsp[0]);
if ((yyvsp[0]) == NULL)
@@ -3202,11 +3215,11 @@ regular_print:
bcfree((yyvsp[-2]));
(yyval) = (yyvsp[-4]);
}
-#line 3206 "awkgram.c" /* yacc.c:1645 */
+#line 3219 "awkgram.c" /* yacc.c:1645 */
break;
- case 78:
-#line 1317 "awkgram.y" /* yacc.c:1645 */
+ case 79:
+#line 1340 "awkgram.y" /* yacc.c:1645 */
{
INSTRUCTION *casestmt = (yyvsp[0]);
if ((yyvsp[0]) == NULL)
@@ -3218,17 +3231,17 @@ regular_print:
(yyvsp[-3])->comment = (yyvsp[-1]);
(yyval) = (yyvsp[-3]);
}
-#line 3222 "awkgram.c" /* yacc.c:1645 */
+#line 3235 "awkgram.c" /* yacc.c:1645 */
break;
- case 79:
-#line 1332 "awkgram.y" /* yacc.c:1645 */
+ case 80:
+#line 1355 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = (yyvsp[0]); }
-#line 3228 "awkgram.c" /* yacc.c:1645 */
+#line 3241 "awkgram.c" /* yacc.c:1645 */
break;
- case 80:
-#line 1334 "awkgram.y" /* yacc.c:1645 */
+ case 81:
+#line 1357 "awkgram.y" /* yacc.c:1645 */
{
NODE *n = (yyvsp[0])->memory;
(void) force_number(n);
@@ -3236,28 +3249,28 @@ regular_print:
bcfree((yyvsp[-1]));
(yyval) = (yyvsp[0]);
}
-#line 3240 "awkgram.c" /* yacc.c:1645 */
+#line 3253 "awkgram.c" /* yacc.c:1645 */
break;
- case 81:
-#line 1342 "awkgram.y" /* yacc.c:1645 */
+ case 82:
+#line 1365 "awkgram.y" /* yacc.c:1645 */
{
NODE *n = (yyvsp[0])->lasti->memory;
bcfree((yyvsp[-1]));
add_sign_to_num(n, '+');
(yyval) = (yyvsp[0]);
}
-#line 3251 "awkgram.c" /* yacc.c:1645 */
+#line 3264 "awkgram.c" /* yacc.c:1645 */
break;
- case 82:
-#line 1349 "awkgram.y" /* yacc.c:1645 */
+ case 83:
+#line 1372 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = (yyvsp[0]); }
-#line 3257 "awkgram.c" /* yacc.c:1645 */
+#line 3270 "awkgram.c" /* yacc.c:1645 */
break;
- case 83:
-#line 1351 "awkgram.y" /* yacc.c:1645 */
+ case 84:
+#line 1374 "awkgram.y" /* yacc.c:1645 */
{
if ((yyvsp[0])->memory->type == Node_regex)
(yyvsp[0])->opcode = Op_push_re;
@@ -3265,57 +3278,57 @@ regular_print:
(yyvsp[0])->opcode = Op_push;
(yyval) = (yyvsp[0]);
}
-#line 3269 "awkgram.c" /* yacc.c:1645 */
+#line 3282 "awkgram.c" /* yacc.c:1645 */
break;
- case 84:
-#line 1359 "awkgram.y" /* yacc.c:1645 */
+ case 85:
+#line 1382 "awkgram.y" /* yacc.c:1645 */
{
assert(((yyvsp[0])->memory->flags & REGEX) == REGEX);
(yyvsp[0])->opcode = Op_push_re;
(yyval) = (yyvsp[0]);
}
-#line 3279 "awkgram.c" /* yacc.c:1645 */
+#line 3292 "awkgram.c" /* yacc.c:1645 */
break;
- case 85:
-#line 1368 "awkgram.y" /* yacc.c:1645 */
+ case 86:
+#line 1391 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = (yyvsp[0]); }
-#line 3285 "awkgram.c" /* yacc.c:1645 */
+#line 3298 "awkgram.c" /* yacc.c:1645 */
break;
- case 86:
-#line 1370 "awkgram.y" /* yacc.c:1645 */
+ case 87:
+#line 1393 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = (yyvsp[0]); }
-#line 3291 "awkgram.c" /* yacc.c:1645 */
+#line 3304 "awkgram.c" /* yacc.c:1645 */
break;
- case 88:
-#line 1380 "awkgram.y" /* yacc.c:1645 */
+ case 89:
+#line 1403 "awkgram.y" /* yacc.c:1645 */
{
(yyval) = (yyvsp[-1]);
}
-#line 3299 "awkgram.c" /* yacc.c:1645 */
+#line 3312 "awkgram.c" /* yacc.c:1645 */
break;
- case 89:
-#line 1387 "awkgram.y" /* yacc.c:1645 */
+ case 90:
+#line 1410 "awkgram.y" /* yacc.c:1645 */
{
in_print = false;
in_parens = 0;
(yyval) = NULL;
}
-#line 3309 "awkgram.c" /* yacc.c:1645 */
+#line 3322 "awkgram.c" /* yacc.c:1645 */
break;
- case 90:
-#line 1392 "awkgram.y" /* yacc.c:1645 */
+ case 91:
+#line 1415 "awkgram.y" /* yacc.c:1645 */
{ in_print = false; in_parens = 0; }
-#line 3315 "awkgram.c" /* yacc.c:1645 */
+#line 3328 "awkgram.c" /* yacc.c:1645 */
break;
- case 91:
-#line 1393 "awkgram.y" /* yacc.c:1645 */
+ case 92:
+#line 1416 "awkgram.y" /* yacc.c:1645 */
{
if ((yyvsp[-2])->redir_type == redirect_twoway
&& (yyvsp[0])->lasti->opcode == Op_K_getline_redir
@@ -3325,21 +3338,21 @@ regular_print:
lintwarn(_("concatenation as I/O `>' redirection target is ambiguous"));
(yyval) = list_prepend((yyvsp[0]), (yyvsp[-2]));
}
-#line 3329 "awkgram.c" /* yacc.c:1645 */
+#line 3342 "awkgram.c" /* yacc.c:1645 */
break;
- case 92:
-#line 1406 "awkgram.y" /* yacc.c:1645 */
+ case 93:
+#line 1429 "awkgram.y" /* yacc.c:1645 */
{
if ((yyvsp[-1]) != NULL)
(yyvsp[-5])->comment = (yyvsp[-1]);
(yyval) = mk_condition((yyvsp[-3]), (yyvsp[-5]), (yyvsp[0]), NULL, NULL);
}
-#line 3339 "awkgram.c" /* yacc.c:1645 */
+#line 3352 "awkgram.c" /* yacc.c:1645 */
break;
- case 93:
-#line 1413 "awkgram.y" /* yacc.c:1645 */
+ case 94:
+#line 1436 "awkgram.y" /* yacc.c:1645 */
{
if ((yyvsp[-4]) != NULL)
(yyvsp[-8])->comment = (yyvsp[-4]);
@@ -3347,19 +3360,19 @@ regular_print:
(yyvsp[-2])->comment = (yyvsp[-1]);
(yyval) = mk_condition((yyvsp[-6]), (yyvsp[-8]), (yyvsp[-3]), (yyvsp[-2]), (yyvsp[0]));
}
-#line 3351 "awkgram.c" /* yacc.c:1645 */
+#line 3364 "awkgram.c" /* yacc.c:1645 */
break;
- case 94:
-#line 1424 "awkgram.y" /* yacc.c:1645 */
+ case 95:
+#line 1447 "awkgram.y" /* yacc.c:1645 */
{
(yyval) = (yyvsp[0]);
}
-#line 3359 "awkgram.c" /* yacc.c:1645 */
+#line 3372 "awkgram.c" /* yacc.c:1645 */
break;
- case 95:
-#line 1428 "awkgram.y" /* yacc.c:1645 */
+ case 96:
+#line 1451 "awkgram.y" /* yacc.c:1645 */
{
if ((yyvsp[-1]) != NULL && (yyvsp[0]) != NULL) {
if ((yyvsp[-1])->memory->comment_type == EOL_COMMENT) {
@@ -3377,59 +3390,59 @@ regular_print:
} else
(yyval) = NULL;
}
-#line 3381 "awkgram.c" /* yacc.c:1645 */
+#line 3394 "awkgram.c" /* yacc.c:1645 */
break;
- case 96:
-#line 1449 "awkgram.y" /* yacc.c:1645 */
+ case 97:
+#line 1472 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = NULL; }
-#line 3387 "awkgram.c" /* yacc.c:1645 */
+#line 3400 "awkgram.c" /* yacc.c:1645 */
break;
- case 97:
-#line 1451 "awkgram.y" /* yacc.c:1645 */
+ case 98:
+#line 1474 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = (yyvsp[0]); }
-#line 3393 "awkgram.c" /* yacc.c:1645 */
+#line 3406 "awkgram.c" /* yacc.c:1645 */
break;
- case 98:
-#line 1456 "awkgram.y" /* yacc.c:1645 */
+ case 99:
+#line 1479 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = NULL; }
-#line 3399 "awkgram.c" /* yacc.c:1645 */
+#line 3412 "awkgram.c" /* yacc.c:1645 */
break;
- case 99:
-#line 1458 "awkgram.y" /* yacc.c:1645 */
+ case 100:
+#line 1481 "awkgram.y" /* yacc.c:1645 */
{
bcfree((yyvsp[-1]));
(yyval) = (yyvsp[0]);
}
-#line 3408 "awkgram.c" /* yacc.c:1645 */
+#line 3421 "awkgram.c" /* yacc.c:1645 */
break;
- case 100:
-#line 1466 "awkgram.y" /* yacc.c:1645 */
+ case 101:
+#line 1489 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = NULL; }
-#line 3414 "awkgram.c" /* yacc.c:1645 */
+#line 3427 "awkgram.c" /* yacc.c:1645 */
break;
- case 101:
-#line 1468 "awkgram.y" /* yacc.c:1645 */
+ case 102:
+#line 1491 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = (yyvsp[0]); }
-#line 3420 "awkgram.c" /* yacc.c:1645 */
+#line 3433 "awkgram.c" /* yacc.c:1645 */
break;
- case 102:
-#line 1473 "awkgram.y" /* yacc.c:1645 */
+ case 103:
+#line 1496 "awkgram.y" /* yacc.c:1645 */
{
(yyvsp[0])->param_count = 0;
(yyval) = list_create((yyvsp[0]));
}
-#line 3429 "awkgram.c" /* yacc.c:1645 */
+#line 3442 "awkgram.c" /* yacc.c:1645 */
break;
- case 103:
-#line 1478 "awkgram.y" /* yacc.c:1645 */
+ case 104:
+#line 1501 "awkgram.y" /* yacc.c:1645 */
{
if ((yyvsp[-2]) != NULL && (yyvsp[0]) != NULL) {
(yyvsp[0])->param_count = (yyvsp[-2])->lasti->param_count + 1;
@@ -3446,76 +3459,76 @@ regular_print:
} else
(yyval) = NULL;
}
-#line 3450 "awkgram.c" /* yacc.c:1645 */
+#line 3463 "awkgram.c" /* yacc.c:1645 */
break;
- case 104:
-#line 1495 "awkgram.y" /* yacc.c:1645 */
+ case 105:
+#line 1518 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = NULL; }
-#line 3456 "awkgram.c" /* yacc.c:1645 */
+#line 3469 "awkgram.c" /* yacc.c:1645 */
break;
- case 105:
-#line 1497 "awkgram.y" /* yacc.c:1645 */
+ case 106:
+#line 1520 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = (yyvsp[-1]); }
-#line 3462 "awkgram.c" /* yacc.c:1645 */
+#line 3475 "awkgram.c" /* yacc.c:1645 */
break;
- case 106:
-#line 1499 "awkgram.y" /* yacc.c:1645 */
+ case 107:
+#line 1522 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = (yyvsp[-2]); }
-#line 3468 "awkgram.c" /* yacc.c:1645 */
+#line 3481 "awkgram.c" /* yacc.c:1645 */
break;
- case 107:
-#line 1505 "awkgram.y" /* yacc.c:1645 */
+ case 108:
+#line 1528 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = NULL; }
-#line 3474 "awkgram.c" /* yacc.c:1645 */
+#line 3487 "awkgram.c" /* yacc.c:1645 */
break;
- case 108:
-#line 1507 "awkgram.y" /* yacc.c:1645 */
+ case 109:
+#line 1530 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = (yyvsp[0]); }
-#line 3480 "awkgram.c" /* yacc.c:1645 */
+#line 3493 "awkgram.c" /* yacc.c:1645 */
break;
- case 109:
-#line 1512 "awkgram.y" /* yacc.c:1645 */
+ case 110:
+#line 1535 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = NULL; }
-#line 3486 "awkgram.c" /* yacc.c:1645 */
+#line 3499 "awkgram.c" /* yacc.c:1645 */
break;
- case 110:
-#line 1514 "awkgram.y" /* yacc.c:1645 */
+ case 111:
+#line 1537 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = (yyvsp[0]); }
-#line 3492 "awkgram.c" /* yacc.c:1645 */
+#line 3505 "awkgram.c" /* yacc.c:1645 */
break;
- case 111:
-#line 1519 "awkgram.y" /* yacc.c:1645 */
+ case 112:
+#line 1542 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = mk_expression_list(NULL, (yyvsp[0])); }
-#line 3498 "awkgram.c" /* yacc.c:1645 */
+#line 3511 "awkgram.c" /* yacc.c:1645 */
break;
- case 112:
-#line 1521 "awkgram.y" /* yacc.c:1645 */
+ case 113:
+#line 1544 "awkgram.y" /* yacc.c:1645 */
{
if ((yyvsp[-1]) != NULL)
(yyvsp[-2])->lasti->comment = (yyvsp[-1]);
(yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
yyerrok;
}
-#line 3509 "awkgram.c" /* yacc.c:1645 */
+#line 3522 "awkgram.c" /* yacc.c:1645 */
break;
- case 113:
-#line 1528 "awkgram.y" /* yacc.c:1645 */
+ case 114:
+#line 1551 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = NULL; }
-#line 3515 "awkgram.c" /* yacc.c:1645 */
+#line 3528 "awkgram.c" /* yacc.c:1645 */
break;
- case 114:
-#line 1530 "awkgram.y" /* yacc.c:1645 */
+ case 115:
+#line 1553 "awkgram.y" /* yacc.c:1645 */
{
/*
* Returning the expression list instead of NULL lets
@@ -3523,66 +3536,66 @@ regular_print:
*/
(yyval) = (yyvsp[-1]);
}
-#line 3527 "awkgram.c" /* yacc.c:1645 */
+#line 3540 "awkgram.c" /* yacc.c:1645 */
break;
- case 115:
-#line 1538 "awkgram.y" /* yacc.c:1645 */
+ case 116:
+#line 1561 "awkgram.y" /* yacc.c:1645 */
{
/* Ditto */
(yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
}
-#line 3536 "awkgram.c" /* yacc.c:1645 */
+#line 3549 "awkgram.c" /* yacc.c:1645 */
break;
- case 116:
-#line 1543 "awkgram.y" /* yacc.c:1645 */
+ case 117:
+#line 1566 "awkgram.y" /* yacc.c:1645 */
{
/* Ditto */
if ((yyvsp[-1]) != NULL)
(yyvsp[-2])->lasti->comment = (yyvsp[-1]);
(yyval) = (yyvsp[-2]);
}
-#line 3547 "awkgram.c" /* yacc.c:1645 */
+#line 3560 "awkgram.c" /* yacc.c:1645 */
break;
- case 117:
-#line 1553 "awkgram.y" /* yacc.c:1645 */
+ case 118:
+#line 1576 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = NULL; }
-#line 3553 "awkgram.c" /* yacc.c:1645 */
+#line 3566 "awkgram.c" /* yacc.c:1645 */
break;
- case 118:
-#line 1555 "awkgram.y" /* yacc.c:1645 */
+ case 119:
+#line 1578 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = (yyvsp[0]); }
-#line 3559 "awkgram.c" /* yacc.c:1645 */
+#line 3572 "awkgram.c" /* yacc.c:1645 */
break;
- case 119:
-#line 1560 "awkgram.y" /* yacc.c:1645 */
+ case 120:
+#line 1583 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = mk_expression_list(NULL, (yyvsp[0])); }
-#line 3565 "awkgram.c" /* yacc.c:1645 */
+#line 3578 "awkgram.c" /* yacc.c:1645 */
break;
- case 120:
-#line 1562 "awkgram.y" /* yacc.c:1645 */
+ case 121:
+#line 1585 "awkgram.y" /* yacc.c:1645 */
{
if ((yyvsp[-1]) != NULL)
(yyvsp[-2])->lasti->comment = (yyvsp[-1]);
(yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
yyerrok;
}
-#line 3576 "awkgram.c" /* yacc.c:1645 */
+#line 3589 "awkgram.c" /* yacc.c:1645 */
break;
- case 121:
-#line 1569 "awkgram.y" /* yacc.c:1645 */
+ case 122:
+#line 1592 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = NULL; }
-#line 3582 "awkgram.c" /* yacc.c:1645 */
+#line 3595 "awkgram.c" /* yacc.c:1645 */
break;
- case 122:
-#line 1571 "awkgram.y" /* yacc.c:1645 */
+ case 123:
+#line 1594 "awkgram.y" /* yacc.c:1645 */
{
/*
* Returning the expression list instead of NULL lets
@@ -3590,74 +3603,74 @@ regular_print:
*/
(yyval) = (yyvsp[-1]);
}
-#line 3594 "awkgram.c" /* yacc.c:1645 */
+#line 3607 "awkgram.c" /* yacc.c:1645 */
break;
- case 123:
-#line 1579 "awkgram.y" /* yacc.c:1645 */
+ case 124:
+#line 1602 "awkgram.y" /* yacc.c:1645 */
{
/* Ditto */
(yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
}
-#line 3603 "awkgram.c" /* yacc.c:1645 */
+#line 3616 "awkgram.c" /* yacc.c:1645 */
break;
- case 124:
-#line 1584 "awkgram.y" /* yacc.c:1645 */
+ case 125:
+#line 1607 "awkgram.y" /* yacc.c:1645 */
{
/* Ditto */
if ((yyvsp[-1]) != NULL)
(yyvsp[-2])->comment = (yyvsp[-1]);
(yyval) = (yyvsp[-2]);
}
-#line 3614 "awkgram.c" /* yacc.c:1645 */
+#line 3627 "awkgram.c" /* yacc.c:1645 */
break;
- case 125:
-#line 1593 "awkgram.y" /* yacc.c:1645 */
+ case 126:
+#line 1616 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = (yyvsp[0]); }
-#line 3620 "awkgram.c" /* yacc.c:1645 */
+#line 3633 "awkgram.c" /* yacc.c:1645 */
break;
- case 126:
-#line 1594 "awkgram.y" /* yacc.c:1645 */
+ case 127:
+#line 1617 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = list_create((yyvsp[0])); }
-#line 3626 "awkgram.c" /* yacc.c:1645 */
+#line 3639 "awkgram.c" /* yacc.c:1645 */
break;
- case 127:
-#line 1600 "awkgram.y" /* yacc.c:1645 */
+ case 128:
+#line 1623 "awkgram.y" /* yacc.c:1645 */
{
if (do_lint && (yyvsp[0])->lasti->opcode == Op_match_rec)
lintwarn_ln((yyvsp[-1])->source_line,
_("regular expression on right of assignment"));
(yyval) = mk_assignment((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1]));
}
-#line 3637 "awkgram.c" /* yacc.c:1645 */
+#line 3650 "awkgram.c" /* yacc.c:1645 */
break;
- case 128:
-#line 1607 "awkgram.y" /* yacc.c:1645 */
+ case 129:
+#line 1630 "awkgram.y" /* yacc.c:1645 */
{
(yyval) = mk_assignment((yyvsp[-2]), list_create((yyvsp[0])), (yyvsp[-1]));
}
-#line 3645 "awkgram.c" /* yacc.c:1645 */
+#line 3658 "awkgram.c" /* yacc.c:1645 */
break;
- case 129:
-#line 1611 "awkgram.y" /* yacc.c:1645 */
+ case 130:
+#line 1634 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = mk_boolean((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3651 "awkgram.c" /* yacc.c:1645 */
+#line 3664 "awkgram.c" /* yacc.c:1645 */
break;
- case 130:
-#line 1613 "awkgram.y" /* yacc.c:1645 */
+ case 131:
+#line 1636 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = mk_boolean((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3657 "awkgram.c" /* yacc.c:1645 */
+#line 3670 "awkgram.c" /* yacc.c:1645 */
break;
- case 131:
-#line 1615 "awkgram.y" /* yacc.c:1645 */
+ case 132:
+#line 1638 "awkgram.y" /* yacc.c:1645 */
{
if ((yyvsp[-2])->lasti->opcode == Op_match_rec)
warning_ln((yyvsp[-1])->source_line,
@@ -3670,11 +3683,11 @@ regular_print:
bcfree((yyvsp[0]));
(yyval) = list_append((yyvsp[-2]), (yyvsp[-1]));
}
-#line 3674 "awkgram.c" /* yacc.c:1645 */
+#line 3687 "awkgram.c" /* yacc.c:1645 */
break;
- case 132:
-#line 1628 "awkgram.y" /* yacc.c:1645 */
+ case 133:
+#line 1651 "awkgram.y" /* yacc.c:1645 */
{
if ((yyvsp[-2])->lasti->opcode == Op_match_rec)
warning_ln((yyvsp[-1])->source_line,
@@ -3691,11 +3704,11 @@ regular_print:
(yyval) = list_append(list_merge((yyvsp[-2]), (yyvsp[0])), (yyvsp[-1]));
}
}
-#line 3695 "awkgram.c" /* yacc.c:1645 */
+#line 3708 "awkgram.c" /* yacc.c:1645 */
break;
- case 133:
-#line 1645 "awkgram.y" /* yacc.c:1645 */
+ case 134:
+#line 1668 "awkgram.y" /* yacc.c:1645 */
{
if (do_lint_old)
warning_ln((yyvsp[-1])->source_line,
@@ -3705,91 +3718,91 @@ regular_print:
(yyvsp[-1])->expr_count = 1;
(yyval) = list_append(list_merge((yyvsp[-2]), (yyvsp[0])), (yyvsp[-1]));
}
-#line 3709 "awkgram.c" /* yacc.c:1645 */
+#line 3722 "awkgram.c" /* yacc.c:1645 */
break;
- case 134:
-#line 1655 "awkgram.y" /* yacc.c:1645 */
+ case 135:
+#line 1678 "awkgram.y" /* yacc.c:1645 */
{
if (do_lint && (yyvsp[0])->lasti->opcode == Op_match_rec)
lintwarn_ln((yyvsp[-1])->source_line,
_("regular expression on right of comparison"));
(yyval) = list_append(list_merge((yyvsp[-2]), (yyvsp[0])), (yyvsp[-1]));
}
-#line 3720 "awkgram.c" /* yacc.c:1645 */
- break;
-
- case 135:
-#line 1662 "awkgram.y" /* yacc.c:1645 */
- { (yyval) = mk_condition((yyvsp[-4]), (yyvsp[-3]), (yyvsp[-2]), (yyvsp[-1]), (yyvsp[0])); }
-#line 3726 "awkgram.c" /* yacc.c:1645 */
+#line 3733 "awkgram.c" /* yacc.c:1645 */
break;
case 136:
-#line 1664 "awkgram.y" /* yacc.c:1645 */
- { (yyval) = (yyvsp[0]); }
-#line 3732 "awkgram.c" /* yacc.c:1645 */
+#line 1685 "awkgram.y" /* yacc.c:1645 */
+ { (yyval) = mk_condition((yyvsp[-4]), (yyvsp[-3]), (yyvsp[-2]), (yyvsp[-1]), (yyvsp[0])); }
+#line 3739 "awkgram.c" /* yacc.c:1645 */
break;
case 137:
-#line 1669 "awkgram.y" /* yacc.c:1645 */
+#line 1687 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = (yyvsp[0]); }
-#line 3738 "awkgram.c" /* yacc.c:1645 */
+#line 3745 "awkgram.c" /* yacc.c:1645 */
break;
case 138:
-#line 1671 "awkgram.y" /* yacc.c:1645 */
+#line 1692 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = (yyvsp[0]); }
-#line 3744 "awkgram.c" /* yacc.c:1645 */
+#line 3751 "awkgram.c" /* yacc.c:1645 */
break;
case 139:
-#line 1673 "awkgram.y" /* yacc.c:1645 */
+#line 1694 "awkgram.y" /* yacc.c:1645 */
+ { (yyval) = (yyvsp[0]); }
+#line 3757 "awkgram.c" /* yacc.c:1645 */
+ break;
+
+ case 140:
+#line 1696 "awkgram.y" /* yacc.c:1645 */
{
(yyvsp[0])->opcode = Op_assign_quotient;
(yyval) = (yyvsp[0]);
}
-#line 3753 "awkgram.c" /* yacc.c:1645 */
- break;
-
- case 140:
-#line 1681 "awkgram.y" /* yacc.c:1645 */
- { (yyval) = (yyvsp[0]); }
-#line 3759 "awkgram.c" /* yacc.c:1645 */
+#line 3766 "awkgram.c" /* yacc.c:1645 */
break;
case 141:
-#line 1683 "awkgram.y" /* yacc.c:1645 */
+#line 1704 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = (yyvsp[0]); }
-#line 3765 "awkgram.c" /* yacc.c:1645 */
+#line 3772 "awkgram.c" /* yacc.c:1645 */
break;
case 142:
-#line 1688 "awkgram.y" /* yacc.c:1645 */
+#line 1706 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = (yyvsp[0]); }
-#line 3771 "awkgram.c" /* yacc.c:1645 */
+#line 3778 "awkgram.c" /* yacc.c:1645 */
break;
case 143:
-#line 1690 "awkgram.y" /* yacc.c:1645 */
+#line 1711 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = (yyvsp[0]); }
-#line 3777 "awkgram.c" /* yacc.c:1645 */
+#line 3784 "awkgram.c" /* yacc.c:1645 */
break;
case 144:
-#line 1695 "awkgram.y" /* yacc.c:1645 */
+#line 1713 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = (yyvsp[0]); }
-#line 3783 "awkgram.c" /* yacc.c:1645 */
+#line 3790 "awkgram.c" /* yacc.c:1645 */
break;
case 145:
-#line 1697 "awkgram.y" /* yacc.c:1645 */
+#line 1718 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = (yyvsp[0]); }
-#line 3789 "awkgram.c" /* yacc.c:1645 */
+#line 3796 "awkgram.c" /* yacc.c:1645 */
break;
case 146:
-#line 1699 "awkgram.y" /* yacc.c:1645 */
+#line 1720 "awkgram.y" /* yacc.c:1645 */
+ { (yyval) = (yyvsp[0]); }
+#line 3802 "awkgram.c" /* yacc.c:1645 */
+ break;
+
+ case 147:
+#line 1722 "awkgram.y" /* yacc.c:1645 */
{
int count = 2;
bool is_simple_var = false;
@@ -3843,47 +3856,47 @@ regular_print:
max_args = count;
}
}
-#line 3847 "awkgram.c" /* yacc.c:1645 */
- break;
-
- case 148:
-#line 1758 "awkgram.y" /* yacc.c:1645 */
- { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3853 "awkgram.c" /* yacc.c:1645 */
+#line 3860 "awkgram.c" /* yacc.c:1645 */
break;
case 149:
-#line 1760 "awkgram.y" /* yacc.c:1645 */
+#line 1781 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3859 "awkgram.c" /* yacc.c:1645 */
+#line 3866 "awkgram.c" /* yacc.c:1645 */
break;
case 150:
-#line 1762 "awkgram.y" /* yacc.c:1645 */
+#line 1783 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3865 "awkgram.c" /* yacc.c:1645 */
+#line 3872 "awkgram.c" /* yacc.c:1645 */
break;
case 151:
-#line 1764 "awkgram.y" /* yacc.c:1645 */
+#line 1785 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3871 "awkgram.c" /* yacc.c:1645 */
+#line 3878 "awkgram.c" /* yacc.c:1645 */
break;
case 152:
-#line 1766 "awkgram.y" /* yacc.c:1645 */
+#line 1787 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3877 "awkgram.c" /* yacc.c:1645 */
+#line 3884 "awkgram.c" /* yacc.c:1645 */
break;
case 153:
-#line 1768 "awkgram.y" /* yacc.c:1645 */
+#line 1789 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3883 "awkgram.c" /* yacc.c:1645 */
+#line 3890 "awkgram.c" /* yacc.c:1645 */
break;
case 154:
-#line 1770 "awkgram.y" /* yacc.c:1645 */
+#line 1791 "awkgram.y" /* yacc.c:1645 */
+ { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
+#line 3896 "awkgram.c" /* yacc.c:1645 */
+ break;
+
+ case 155:
+#line 1793 "awkgram.y" /* yacc.c:1645 */
{
/*
* In BEGINFILE/ENDFILE, allow `getline [var] < file'
@@ -3897,29 +3910,29 @@ regular_print:
_("non-redirected `getline' undefined inside END action"));
(yyval) = mk_getline((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]), redirect_input);
}
-#line 3901 "awkgram.c" /* yacc.c:1645 */
+#line 3914 "awkgram.c" /* yacc.c:1645 */
break;
- case 155:
-#line 1784 "awkgram.y" /* yacc.c:1645 */
+ case 156:
+#line 1807 "awkgram.y" /* yacc.c:1645 */
{
(yyvsp[0])->opcode = Op_postincrement;
(yyval) = mk_assignment((yyvsp[-1]), NULL, (yyvsp[0]));
}
-#line 3910 "awkgram.c" /* yacc.c:1645 */
+#line 3923 "awkgram.c" /* yacc.c:1645 */
break;
- case 156:
-#line 1789 "awkgram.y" /* yacc.c:1645 */
+ case 157:
+#line 1812 "awkgram.y" /* yacc.c:1645 */
{
(yyvsp[0])->opcode = Op_postdecrement;
(yyval) = mk_assignment((yyvsp[-1]), NULL, (yyvsp[0]));
}
-#line 3919 "awkgram.c" /* yacc.c:1645 */
+#line 3932 "awkgram.c" /* yacc.c:1645 */
break;
- case 157:
-#line 1794 "awkgram.y" /* yacc.c:1645 */
+ case 158:
+#line 1817 "awkgram.y" /* yacc.c:1645 */
{
if (do_lint_old) {
warning_ln((yyvsp[-1])->source_line,
@@ -3939,64 +3952,64 @@ regular_print:
(yyval) = list_append(list_merge(t, (yyvsp[0])), (yyvsp[-1]));
}
}
-#line 3943 "awkgram.c" /* yacc.c:1645 */
+#line 3956 "awkgram.c" /* yacc.c:1645 */
break;
- case 158:
-#line 1819 "awkgram.y" /* yacc.c:1645 */
+ case 159:
+#line 1842 "awkgram.y" /* yacc.c:1645 */
{
(yyval) = mk_getline((yyvsp[-1]), (yyvsp[0]), (yyvsp[-3]), (yyvsp[-2])->redir_type);
bcfree((yyvsp[-2]));
}
-#line 3952 "awkgram.c" /* yacc.c:1645 */
- break;
-
- case 159:
-#line 1825 "awkgram.y" /* yacc.c:1645 */
- { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3958 "awkgram.c" /* yacc.c:1645 */
+#line 3965 "awkgram.c" /* yacc.c:1645 */
break;
case 160:
-#line 1827 "awkgram.y" /* yacc.c:1645 */
+#line 1848 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3964 "awkgram.c" /* yacc.c:1645 */
+#line 3971 "awkgram.c" /* yacc.c:1645 */
break;
case 161:
-#line 1829 "awkgram.y" /* yacc.c:1645 */
+#line 1850 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3970 "awkgram.c" /* yacc.c:1645 */
+#line 3977 "awkgram.c" /* yacc.c:1645 */
break;
case 162:
-#line 1831 "awkgram.y" /* yacc.c:1645 */
+#line 1852 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3976 "awkgram.c" /* yacc.c:1645 */
+#line 3983 "awkgram.c" /* yacc.c:1645 */
break;
case 163:
-#line 1833 "awkgram.y" /* yacc.c:1645 */
+#line 1854 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3982 "awkgram.c" /* yacc.c:1645 */
+#line 3989 "awkgram.c" /* yacc.c:1645 */
break;
case 164:
-#line 1835 "awkgram.y" /* yacc.c:1645 */
+#line 1856 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3988 "awkgram.c" /* yacc.c:1645 */
+#line 3995 "awkgram.c" /* yacc.c:1645 */
break;
case 165:
-#line 1840 "awkgram.y" /* yacc.c:1645 */
+#line 1858 "awkgram.y" /* yacc.c:1645 */
+ { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
+#line 4001 "awkgram.c" /* yacc.c:1645 */
+ break;
+
+ case 166:
+#line 1863 "awkgram.y" /* yacc.c:1645 */
{
(yyval) = list_create((yyvsp[0]));
}
-#line 3996 "awkgram.c" /* yacc.c:1645 */
+#line 4009 "awkgram.c" /* yacc.c:1645 */
break;
- case 166:
-#line 1844 "awkgram.y" /* yacc.c:1645 */
+ case 167:
+#line 1867 "awkgram.y" /* yacc.c:1645 */
{
if ((yyvsp[0])->opcode == Op_match_rec) {
(yyvsp[0])->opcode = Op_nomatch;
@@ -4028,11 +4041,11 @@ regular_print:
}
}
}
-#line 4032 "awkgram.c" /* yacc.c:1645 */
+#line 4045 "awkgram.c" /* yacc.c:1645 */
break;
- case 167:
-#line 1876 "awkgram.y" /* yacc.c:1645 */
+ case 168:
+#line 1899 "awkgram.y" /* yacc.c:1645 */
{
// Always include. Allows us to lint warn on
// print "foo" > "bar" 1
@@ -4040,31 +4053,31 @@ regular_print:
// print "foo" > ("bar" 1)
(yyval) = list_append((yyvsp[-1]), bcalloc(Op_parens, 1, sourceline));
}
-#line 4044 "awkgram.c" /* yacc.c:1645 */
+#line 4057 "awkgram.c" /* yacc.c:1645 */
break;
- case 168:
-#line 1884 "awkgram.y" /* yacc.c:1645 */
+ case 169:
+#line 1907 "awkgram.y" /* yacc.c:1645 */
{
(yyval) = snode((yyvsp[-1]), (yyvsp[-3]));
if ((yyval) == NULL)
YYABORT;
}
-#line 4054 "awkgram.c" /* yacc.c:1645 */
+#line 4067 "awkgram.c" /* yacc.c:1645 */
break;
- case 169:
-#line 1890 "awkgram.y" /* yacc.c:1645 */
+ case 170:
+#line 1913 "awkgram.y" /* yacc.c:1645 */
{
(yyval) = snode((yyvsp[-1]), (yyvsp[-3]));
if ((yyval) == NULL)
YYABORT;
}
-#line 4064 "awkgram.c" /* yacc.c:1645 */
+#line 4077 "awkgram.c" /* yacc.c:1645 */
break;
- case 170:
-#line 1896 "awkgram.y" /* yacc.c:1645 */
+ case 171:
+#line 1919 "awkgram.y" /* yacc.c:1645 */
{
static bool warned = false;
@@ -4077,45 +4090,45 @@ regular_print:
if ((yyval) == NULL)
YYABORT;
}
-#line 4081 "awkgram.c" /* yacc.c:1645 */
+#line 4094 "awkgram.c" /* yacc.c:1645 */
break;
- case 173:
-#line 1911 "awkgram.y" /* yacc.c:1645 */
+ case 174:
+#line 1934 "awkgram.y" /* yacc.c:1645 */
{
(yyvsp[-1])->opcode = Op_preincrement;
(yyval) = mk_assignment((yyvsp[0]), NULL, (yyvsp[-1]));
}
-#line 4090 "awkgram.c" /* yacc.c:1645 */
+#line 4103 "awkgram.c" /* yacc.c:1645 */
break;
- case 174:
-#line 1916 "awkgram.y" /* yacc.c:1645 */
+ case 175:
+#line 1939 "awkgram.y" /* yacc.c:1645 */
{
(yyvsp[-1])->opcode = Op_predecrement;
(yyval) = mk_assignment((yyvsp[0]), NULL, (yyvsp[-1]));
}
-#line 4099 "awkgram.c" /* yacc.c:1645 */
+#line 4112 "awkgram.c" /* yacc.c:1645 */
break;
- case 175:
-#line 1921 "awkgram.y" /* yacc.c:1645 */
+ case 176:
+#line 1944 "awkgram.y" /* yacc.c:1645 */
{
(yyval) = list_create((yyvsp[0]));
}
-#line 4107 "awkgram.c" /* yacc.c:1645 */
+#line 4120 "awkgram.c" /* yacc.c:1645 */
break;
- case 176:
-#line 1925 "awkgram.y" /* yacc.c:1645 */
+ case 177:
+#line 1948 "awkgram.y" /* yacc.c:1645 */
{
(yyval) = list_create((yyvsp[0]));
}
-#line 4115 "awkgram.c" /* yacc.c:1645 */
+#line 4128 "awkgram.c" /* yacc.c:1645 */
break;
- case 177:
-#line 1929 "awkgram.y" /* yacc.c:1645 */
+ case 178:
+#line 1952 "awkgram.y" /* yacc.c:1645 */
{
if ((yyvsp[0])->lasti->opcode == Op_push_i
&& ((yyvsp[0])->lasti->memory->flags & STRING) == 0
@@ -4130,11 +4143,11 @@ regular_print:
(yyval) = list_append((yyvsp[0]), (yyvsp[-1]));
}
}
-#line 4134 "awkgram.c" /* yacc.c:1645 */
+#line 4147 "awkgram.c" /* yacc.c:1645 */
break;
- case 178:
-#line 1944 "awkgram.y" /* yacc.c:1645 */
+ case 179:
+#line 1967 "awkgram.y" /* yacc.c:1645 */
{
if ((yyvsp[0])->lasti->opcode == Op_push_i
&& ((yyvsp[0])->lasti->memory->flags & STRING) == 0
@@ -4152,20 +4165,20 @@ regular_print:
(yyval) = list_append((yyvsp[0]), (yyvsp[-1]));
}
}
-#line 4156 "awkgram.c" /* yacc.c:1645 */
+#line 4169 "awkgram.c" /* yacc.c:1645 */
break;
- case 179:
-#line 1965 "awkgram.y" /* yacc.c:1645 */
+ case 180:
+#line 1988 "awkgram.y" /* yacc.c:1645 */
{
func_use((yyvsp[0])->lasti->func_name, FUNC_USE);
(yyval) = (yyvsp[0]);
}
-#line 4165 "awkgram.c" /* yacc.c:1645 */
+#line 4178 "awkgram.c" /* yacc.c:1645 */
break;
- case 180:
-#line 1970 "awkgram.y" /* yacc.c:1645 */
+ case 181:
+#line 1993 "awkgram.y" /* yacc.c:1645 */
{
/* indirect function call */
INSTRUCTION *f, *t;
@@ -4199,28 +4212,23 @@ regular_print:
(yyval) = list_prepend((yyvsp[0]), t);
at_seen = false;
}
-#line 4203 "awkgram.c" /* yacc.c:1645 */
+#line 4216 "awkgram.c" /* yacc.c:1645 */
break;
- case 181:
-#line 2007 "awkgram.y" /* yacc.c:1645 */
+ case 182:
+#line 2030 "awkgram.y" /* yacc.c:1645 */
{
NODE *n;
- const char *name = (yyvsp[-3])->func_name;
-
- if (current_namespace != awk_namespace && strchr(name, ':') == NULL) {
- size_t len = strlen(current_namespace) + 2 + strlen(name) + 1;
- char *buf;
-
- emalloc(buf, char *, len, "direct_func_call");
- sprintf(buf, "%s::%s", current_namespace, name);
+ char *name = (yyvsp[-3])->func_name;
+ char *qname = qualify_name(name, strlen(name));
- efree((void *) (yyvsp[-3])->func_name);
- (yyvsp[-3])->func_name = buf;
+ if (qname != name) {
+ efree((char *) name);
+ (yyvsp[-3])->func_name = qname;
}
if (! at_seen) {
- n = lookup((yyvsp[-3])->func_name, true);
+ n = lookup((yyvsp[-3])->func_name);
if (n != NULL && n->type != Node_func
&& n->type != Node_ext_func) {
error_ln((yyvsp[-3])->source_line,
@@ -4241,49 +4249,49 @@ regular_print:
(yyval) = list_append(t, (yyvsp[-3]));
}
}
-#line 4245 "awkgram.c" /* yacc.c:1645 */
+#line 4253 "awkgram.c" /* yacc.c:1645 */
break;
- case 182:
-#line 2048 "awkgram.y" /* yacc.c:1645 */
+ case 183:
+#line 2066 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = NULL; }
-#line 4251 "awkgram.c" /* yacc.c:1645 */
+#line 4259 "awkgram.c" /* yacc.c:1645 */
break;
- case 183:
-#line 2050 "awkgram.y" /* yacc.c:1645 */
+ case 184:
+#line 2068 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = (yyvsp[0]); }
-#line 4257 "awkgram.c" /* yacc.c:1645 */
+#line 4265 "awkgram.c" /* yacc.c:1645 */
break;
- case 184:
-#line 2055 "awkgram.y" /* yacc.c:1645 */
+ case 185:
+#line 2073 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = NULL; }
-#line 4263 "awkgram.c" /* yacc.c:1645 */
+#line 4271 "awkgram.c" /* yacc.c:1645 */
break;
- case 185:
-#line 2057 "awkgram.y" /* yacc.c:1645 */
+ case 186:
+#line 2075 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = (yyvsp[-1]); }
-#line 4269 "awkgram.c" /* yacc.c:1645 */
+#line 4277 "awkgram.c" /* yacc.c:1645 */
break;
- case 186:
-#line 2062 "awkgram.y" /* yacc.c:1645 */
+ case 187:
+#line 2080 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = (yyvsp[0]); }
-#line 4275 "awkgram.c" /* yacc.c:1645 */
+#line 4283 "awkgram.c" /* yacc.c:1645 */
break;
- case 187:
-#line 2064 "awkgram.y" /* yacc.c:1645 */
+ case 188:
+#line 2082 "awkgram.y" /* yacc.c:1645 */
{
(yyval) = list_merge((yyvsp[-1]), (yyvsp[0]));
}
-#line 4283 "awkgram.c" /* yacc.c:1645 */
+#line 4291 "awkgram.c" /* yacc.c:1645 */
break;
- case 188:
-#line 2071 "awkgram.y" /* yacc.c:1645 */
+ case 189:
+#line 2089 "awkgram.y" /* yacc.c:1645 */
{
INSTRUCTION *ip = (yyvsp[0])->lasti;
int count = ip->sub_count; /* # of SUBSEP-seperated expressions */
@@ -4297,11 +4305,11 @@ regular_print:
sub_counter++; /* count # of dimensions */
(yyval) = (yyvsp[0]);
}
-#line 4301 "awkgram.c" /* yacc.c:1645 */
+#line 4309 "awkgram.c" /* yacc.c:1645 */
break;
- case 189:
-#line 2088 "awkgram.y" /* yacc.c:1645 */
+ case 190:
+#line 2106 "awkgram.y" /* yacc.c:1645 */
{
INSTRUCTION *t = (yyvsp[-1]);
if ((yyvsp[-1]) == NULL) {
@@ -4315,54 +4323,53 @@ regular_print:
(yyvsp[0])->sub_count = count_expressions(&t, false);
(yyval) = list_append(t, (yyvsp[0]));
}
-#line 4319 "awkgram.c" /* yacc.c:1645 */
+#line 4327 "awkgram.c" /* yacc.c:1645 */
break;
- case 190:
-#line 2105 "awkgram.y" /* yacc.c:1645 */
+ case 191:
+#line 2123 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = (yyvsp[0]); }
-#line 4325 "awkgram.c" /* yacc.c:1645 */
+#line 4333 "awkgram.c" /* yacc.c:1645 */
break;
- case 191:
-#line 2107 "awkgram.y" /* yacc.c:1645 */
+ case 192:
+#line 2125 "awkgram.y" /* yacc.c:1645 */
{
(yyval) = list_merge((yyvsp[-1]), (yyvsp[0]));
}
-#line 4333 "awkgram.c" /* yacc.c:1645 */
+#line 4341 "awkgram.c" /* yacc.c:1645 */
break;
- case 192:
-#line 2114 "awkgram.y" /* yacc.c:1645 */
+ case 193:
+#line 2132 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = (yyvsp[-1]); }
-#line 4339 "awkgram.c" /* yacc.c:1645 */
+#line 4347 "awkgram.c" /* yacc.c:1645 */
break;
- case 193:
-#line 2119 "awkgram.y" /* yacc.c:1645 */
+ case 194:
+#line 2137 "awkgram.y" /* yacc.c:1645 */
{
- char *var_name = (yyvsp[0])->lextok;
-
(yyvsp[0])->opcode = Op_push;
- (yyvsp[0])->memory = variable((yyvsp[0])->source_line, var_name, Node_var_new);
+ (yyvsp[0])->memory = variable((yyvsp[0])->source_line, (yyvsp[0])->lextok, Node_var_new);
(yyval) = list_create((yyvsp[0]));
}
-#line 4351 "awkgram.c" /* yacc.c:1645 */
+#line 4357 "awkgram.c" /* yacc.c:1645 */
break;
- case 194:
-#line 2127 "awkgram.y" /* yacc.c:1645 */
+ case 195:
+#line 2143 "awkgram.y" /* yacc.c:1645 */
{
char *arr = (yyvsp[-1])->lextok;
+
(yyvsp[-1])->memory = variable((yyvsp[-1])->source_line, arr, Node_var_new);
(yyvsp[-1])->opcode = Op_push_array;
(yyval) = list_prepend((yyvsp[0]), (yyvsp[-1]));
}
-#line 4362 "awkgram.c" /* yacc.c:1645 */
+#line 4369 "awkgram.c" /* yacc.c:1645 */
break;
- case 195:
-#line 2137 "awkgram.y" /* yacc.c:1645 */
+ case 196:
+#line 2154 "awkgram.y" /* yacc.c:1645 */
{
INSTRUCTION *ip = (yyvsp[0])->nexti;
if (ip->opcode == Op_push
@@ -4374,85 +4381,85 @@ regular_print:
} else
(yyval) = (yyvsp[0]);
}
-#line 4378 "awkgram.c" /* yacc.c:1645 */
+#line 4385 "awkgram.c" /* yacc.c:1645 */
break;
- case 196:
-#line 2149 "awkgram.y" /* yacc.c:1645 */
+ case 197:
+#line 2166 "awkgram.y" /* yacc.c:1645 */
{
(yyval) = list_append((yyvsp[-1]), (yyvsp[-2]));
if ((yyvsp[0]) != NULL)
mk_assignment((yyvsp[-1]), NULL, (yyvsp[0]));
}
-#line 4388 "awkgram.c" /* yacc.c:1645 */
+#line 4395 "awkgram.c" /* yacc.c:1645 */
break;
- case 197:
-#line 2158 "awkgram.y" /* yacc.c:1645 */
+ case 198:
+#line 2175 "awkgram.y" /* yacc.c:1645 */
{
(yyvsp[0])->opcode = Op_postincrement;
}
-#line 4396 "awkgram.c" /* yacc.c:1645 */
+#line 4403 "awkgram.c" /* yacc.c:1645 */
break;
- case 198:
-#line 2162 "awkgram.y" /* yacc.c:1645 */
+ case 199:
+#line 2179 "awkgram.y" /* yacc.c:1645 */
{
(yyvsp[0])->opcode = Op_postdecrement;
}
-#line 4404 "awkgram.c" /* yacc.c:1645 */
+#line 4411 "awkgram.c" /* yacc.c:1645 */
break;
- case 199:
-#line 2166 "awkgram.y" /* yacc.c:1645 */
+ case 200:
+#line 2183 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = NULL; }
-#line 4410 "awkgram.c" /* yacc.c:1645 */
+#line 4417 "awkgram.c" /* yacc.c:1645 */
break;
- case 200:
-#line 2170 "awkgram.y" /* yacc.c:1645 */
+ case 201:
+#line 2187 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = (yyvsp[0]); }
-#line 4416 "awkgram.c" /* yacc.c:1645 */
+#line 4423 "awkgram.c" /* yacc.c:1645 */
break;
- case 201:
-#line 2174 "awkgram.y" /* yacc.c:1645 */
+ case 202:
+#line 2191 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = (yyvsp[0]); yyerrok; }
-#line 4422 "awkgram.c" /* yacc.c:1645 */
+#line 4429 "awkgram.c" /* yacc.c:1645 */
break;
- case 202:
-#line 2178 "awkgram.y" /* yacc.c:1645 */
+ case 203:
+#line 2195 "awkgram.y" /* yacc.c:1645 */
{ yyerrok; }
-#line 4428 "awkgram.c" /* yacc.c:1645 */
+#line 4435 "awkgram.c" /* yacc.c:1645 */
break;
- case 203:
-#line 2183 "awkgram.y" /* yacc.c:1645 */
+ case 204:
+#line 2200 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = NULL; }
-#line 4434 "awkgram.c" /* yacc.c:1645 */
+#line 4441 "awkgram.c" /* yacc.c:1645 */
break;
- case 205:
-#line 2188 "awkgram.y" /* yacc.c:1645 */
+ case 206:
+#line 2205 "awkgram.y" /* yacc.c:1645 */
{ yyerrok; }
-#line 4440 "awkgram.c" /* yacc.c:1645 */
+#line 4447 "awkgram.c" /* yacc.c:1645 */
break;
- case 206:
-#line 2192 "awkgram.y" /* yacc.c:1645 */
+ case 207:
+#line 2209 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = (yyvsp[0]); yyerrok; }
-#line 4446 "awkgram.c" /* yacc.c:1645 */
+#line 4453 "awkgram.c" /* yacc.c:1645 */
break;
- case 207:
-#line 2196 "awkgram.y" /* yacc.c:1645 */
+ case 208:
+#line 2213 "awkgram.y" /* yacc.c:1645 */
{ (yyval) = (yyvsp[0]); yyerrok; }
-#line 4452 "awkgram.c" /* yacc.c:1645 */
+#line 4459 "awkgram.c" /* yacc.c:1645 */
break;
-#line 4456 "awkgram.c" /* yacc.c:1645 */
+#line 4463 "awkgram.c" /* yacc.c:1645 */
default: break;
}
/* User semantic actions sometimes alter yychar, and that requires
@@ -4679,7 +4686,7 @@ yyreturn:
#endif
return yyresult;
}
-#line 2198 "awkgram.y" /* yacc.c:1903 */
+#line 2215 "awkgram.y" /* yacc.c:1903 */
struct token {
@@ -5526,15 +5533,13 @@ next_sourcefile()
lexeme = sourcefile->lexeme;
sourceline = sourcefile->srclines;
source = sourcefile->src;
- if (current_namespace != awk_namespace)
- efree((char *) current_namespace);
- current_namespace = sourcefile->namespace;
+ set_current_namespace(sourcefile->namespace);
} else {
lexptr = NULL;
sourceline = 0;
source = NULL;
lasttok = 0;
- current_namespace = awk_namespace;
+ set_current_namespace(awk_namespace);
}
}
@@ -6835,7 +6840,7 @@ retry:
goto out;
case FUNC_BODY:
/* in body, name must be in symbol table for it to be a parameter */
- if ((f = lookup(tokstart, false)) != NULL) {
+ if ((f = lookup(tokstart)) != NULL) {
if (f->type == Node_builtin_func)
break;
else
@@ -6943,7 +6948,7 @@ make_instruction:
return lasttok = class;
}
out:
- tokkey = estrdup(tokstart, tok - tokstart);
+ tokkey = estrdup(tokstart, tok - tokstart - 1);
if (*lexptr == '(') {
yylval = bcalloc(Op_token, 2, sourceline);
yylval->lextok = tokkey;
@@ -7331,7 +7336,7 @@ parms_shadow(INSTRUCTION *pc, bool *shadow)
* about all shadowed parameters.
*/
for (i = 0; i < pcount; i++) {
- if (lookup(fp[i].param, false) != NULL) {
+ if (lookup(fp[i].param) != NULL) {
warning(
_("function `%s': parameter `%s' shadows global variable"),
fname, fp[i].param);
@@ -7499,7 +7504,7 @@ install_function(char *fname, INSTRUCTION *fi, INSTRUCTION *plist)
NODE *r, *f;
int pcount = 0;
- r = lookup(fname, true);
+ r = lookup(fname);
if (r != NULL) {
error_ln(fi->source_line, _("function name `%s' previously defined"), fname);
return -1;
@@ -7508,6 +7513,11 @@ install_function(char *fname, INSTRUCTION *fi, INSTRUCTION *plist)
if (plist != NULL)
pcount = plist->lasti->param_count + 1;
f = install_symbol(fname, Node_func);
+ if (f->vname != fname) {
+ // DON'T free fname, it's done later
+ fname = f->vname;
+ }
+
fi->func_body = f;
f->param_cnt = pcount;
f->code_ptr = fi;
@@ -7699,7 +7709,7 @@ variable(int location, char *name, NODETYPE type)
{
NODE *r;
- if ((r = lookup(name, true)) != NULL) {
+ if ((r = lookup(name)) != NULL) {
if (r->type == Node_func || r->type == Node_ext_func )
error_ln(location, _("function `%s' called with space between name and `(',\nor used as a variable or an array"),
r->vname);
@@ -9284,15 +9294,13 @@ set_namespace(INSTRUCTION *ns, INSTRUCTION *comment)
}
if (strcmp(ns->lextok, current_namespace) == 0)
- efree(ns->lextok);
+ ; // nothing to do
else if (strcmp(ns->lextok, awk_namespace) == 0) {
- efree(ns->lextok);
- current_namespace = awk_namespace;
+ set_current_namespace(awk_namespace);
} else {
- if (current_namespace != awk_namespace)
- efree((char *) current_namespace);
- current_namespace = ns->lextok;
+ set_current_namespace(estrdup(ns->lextok, strlen(ns->lextok)));
}
+ efree(ns->lextok);
// save info and push on front of list of namespaces seen
INSTRUCTION *new_ns = instruction(Op_K_namespace);
@@ -9308,3 +9316,28 @@ set_namespace(INSTRUCTION *ns, INSTRUCTION *comment)
return;
}
+
+/* qualify_name --- put name into namespace */
+
+static char *
+qualify_name(const char *name, size_t len)
+{
+ if (strchr(name, ':') != NULL) // already qualified
+ return (char *) name;
+
+ NODE *p = lookup(name);
+ if (p != NULL && p->type == Node_param_list)
+ return (char *) name;
+
+ if (current_namespace != awk_namespace && ! is_all_upper(name)) {
+ size_t length = strlen(current_namespace) + 2 + len + 1;
+ char *buf;
+
+ emalloc(buf, char *, length, "qualify_name");
+ sprintf(buf, "%s::%s", current_namespace, name);
+
+ return buf;
+ }
+
+ return (char *) name;
+}
diff --git a/awkgram.y b/awkgram.y
index 49ac3ef6..22a8df7a 100644
--- a/awkgram.y
+++ b/awkgram.y
@@ -60,6 +60,7 @@ static void next_sourcefile(void);
static char *tokexpand(void);
static NODE *set_profile_text(NODE *n, const char *str, size_t len);
static int check_qualified_special(char *token);
+static char *qualify_name(const char *name, size_t len);
static INSTRUCTION *trailing_comment;
static INSTRUCTION *outer_comment;
static INSTRUCTION *interblock_comment;
@@ -116,7 +117,7 @@ static enum {
FUNC_BODY,
DONT_CHECK
} want_param_names = DONT_CHECK; /* ditto */
-static char *in_function; /* parsing kludge */
+static bool in_function; /* parsing kludge */
static int rule = 0;
const char *const ruletab[] = {
@@ -283,7 +284,7 @@ rule
}
| function_prologue action
{
- in_function = NULL;
+ in_function = false;
(void) mk_function($1, $2);
want_param_names = DONT_CHECK;
if (pending_comment != NULL) {
@@ -464,11 +465,33 @@ action
}
;
-func_name
+qualified_name
: NAME
- { $$ = $1; }
+ {
+ const char *name = $1->lextok;
+ char *qname = qualify_name(name, strlen(name));
+
+ if (qname != name) {
+ efree((void *)name);
+ $1->lextok = qname;
+ }
+ $$ = $1;
+ }
+ ;
+
+func_name
+ : qualified_name
| FUNC_CALL
- { $$ = $1; }
+ {
+ const char *name = $1->lextok;
+ char *qname = qualify_name(name, strlen(name));
+
+ if (qname != name) {
+ efree((void *)name);
+ $1->lextok = qname;
+ }
+ $$ = $1;
+ }
| lex_builtin
{
yyerror(_("`%s' is a built-in function, it cannot be redefined"),
@@ -507,7 +530,7 @@ function_prologue
$1->comment = func_comment;
if (install_function($2->lextok, $1, $5) < 0)
YYABORT;
- in_function = $2->lextok;
+ in_function = true;
$2->lextok = NULL;
bcfree($2);
/* $5 already free'd in install_function */
@@ -840,7 +863,7 @@ statement
/* else
$1 and $4 are NULLs */
}
- | LEX_FOR '(' NAME LEX_IN simple_variable r_paren opt_nls statement
+ | LEX_FOR '(' qualified_name LEX_IN simple_variable r_paren opt_nls statement
{
INSTRUCTION *ip;
char *var_name = $3->lextok;
@@ -1209,7 +1232,7 @@ regular_print:
}
}
- | LEX_DELETE NAME { sub_counter = 0; } delete_subscript_list
+ | LEX_DELETE qualified_name { sub_counter = 0; } delete_subscript_list
{
char *arr = $2->lextok;
@@ -1242,7 +1265,7 @@ regular_print:
$$ = list_append(list_append($4, $2), $1);
}
}
- | LEX_DELETE '(' NAME ')'
+ | LEX_DELETE '(' qualified_name ')'
/*
* this is for tawk compatibility. maybe the warnings
* should always be done.
@@ -2006,21 +2029,16 @@ direct_func_call
: FUNC_CALL '(' opt_fcall_expression_list r_paren
{
NODE *n;
- const char *name = $1->func_name;
-
- if (current_namespace != awk_namespace && strchr(name, ':') == NULL) {
- size_t len = strlen(current_namespace) + 2 + strlen(name) + 1;
- char *buf;
-
- emalloc(buf, char *, len, "direct_func_call");
- sprintf(buf, "%s::%s", current_namespace, name);
+ char *name = $1->func_name;
+ char *qname = qualify_name(name, strlen(name));
- efree((void *) $1->func_name);
- $1->func_name = buf;
+ if (qname != name) {
+ efree((char *) name);
+ $1->func_name = qname;
}
if (! at_seen) {
- n = lookup($1->func_name, true);
+ n = lookup($1->func_name);
if (n != NULL && n->type != Node_func
&& n->type != Node_ext_func) {
error_ln($1->source_line,
@@ -2115,17 +2133,16 @@ subscript_list
;
simple_variable
- : NAME
+ : qualified_name
{
- char *var_name = $1->lextok;
-
$1->opcode = Op_push;
- $1->memory = variable($1->source_line, var_name, Node_var_new);
+ $1->memory = variable($1->source_line, $1->lextok, Node_var_new);
$$ = list_create($1);
}
- | NAME subscript_list
+ | qualified_name subscript_list
{
char *arr = $1->lextok;
+
$1->memory = variable($1->source_line, arr, Node_var_new);
$1->opcode = Op_push_array;
$$ = list_prepend($2, $1);
@@ -3041,15 +3058,13 @@ next_sourcefile()
lexeme = sourcefile->lexeme;
sourceline = sourcefile->srclines;
source = sourcefile->src;
- if (current_namespace != awk_namespace)
- efree((char *) current_namespace);
- current_namespace = sourcefile->namespace;
+ set_current_namespace(sourcefile->namespace);
} else {
lexptr = NULL;
sourceline = 0;
source = NULL;
lasttok = 0;
- current_namespace = awk_namespace;
+ set_current_namespace(awk_namespace);
}
}
@@ -4350,7 +4365,7 @@ retry:
goto out;
case FUNC_BODY:
/* in body, name must be in symbol table for it to be a parameter */
- if ((f = lookup(tokstart, false)) != NULL) {
+ if ((f = lookup(tokstart)) != NULL) {
if (f->type == Node_builtin_func)
break;
else
@@ -4458,7 +4473,7 @@ make_instruction:
return lasttok = class;
}
out:
- tokkey = estrdup(tokstart, tok - tokstart);
+ tokkey = estrdup(tokstart, tok - tokstart - 1);
if (*lexptr == '(') {
yylval = bcalloc(Op_token, 2, sourceline);
yylval->lextok = tokkey;
@@ -4846,7 +4861,7 @@ parms_shadow(INSTRUCTION *pc, bool *shadow)
* about all shadowed parameters.
*/
for (i = 0; i < pcount; i++) {
- if (lookup(fp[i].param, false) != NULL) {
+ if (lookup(fp[i].param) != NULL) {
warning(
_("function `%s': parameter `%s' shadows global variable"),
fname, fp[i].param);
@@ -5014,7 +5029,7 @@ install_function(char *fname, INSTRUCTION *fi, INSTRUCTION *plist)
NODE *r, *f;
int pcount = 0;
- r = lookup(fname, true);
+ r = lookup(fname);
if (r != NULL) {
error_ln(fi->source_line, _("function name `%s' previously defined"), fname);
return -1;
@@ -5023,6 +5038,11 @@ install_function(char *fname, INSTRUCTION *fi, INSTRUCTION *plist)
if (plist != NULL)
pcount = plist->lasti->param_count + 1;
f = install_symbol(fname, Node_func);
+ if (f->vname != fname) {
+ // DON'T free fname, it's done later
+ fname = f->vname;
+ }
+
fi->func_body = f;
f->param_cnt = pcount;
f->code_ptr = fi;
@@ -5214,7 +5234,7 @@ variable(int location, char *name, NODETYPE type)
{
NODE *r;
- if ((r = lookup(name, true)) != NULL) {
+ if ((r = lookup(name)) != NULL) {
if (r->type == Node_func || r->type == Node_ext_func )
error_ln(location, _("function `%s' called with space between name and `(',\nor used as a variable or an array"),
r->vname);
@@ -6799,15 +6819,13 @@ set_namespace(INSTRUCTION *ns, INSTRUCTION *comment)
}
if (strcmp(ns->lextok, current_namespace) == 0)
- efree(ns->lextok);
+ ; // nothing to do
else if (strcmp(ns->lextok, awk_namespace) == 0) {
- efree(ns->lextok);
- current_namespace = awk_namespace;
+ set_current_namespace(awk_namespace);
} else {
- if (current_namespace != awk_namespace)
- efree((char *) current_namespace);
- current_namespace = ns->lextok;
+ set_current_namespace(estrdup(ns->lextok, strlen(ns->lextok)));
}
+ efree(ns->lextok);
// save info and push on front of list of namespaces seen
INSTRUCTION *new_ns = instruction(Op_K_namespace);
@@ -6823,3 +6841,28 @@ set_namespace(INSTRUCTION *ns, INSTRUCTION *comment)
return;
}
+
+/* qualify_name --- put name into namespace */
+
+static char *
+qualify_name(const char *name, size_t len)
+{
+ if (strchr(name, ':') != NULL) // already qualified
+ return (char *) name;
+
+ NODE *p = lookup(name);
+ if (p != NULL && p->type == Node_param_list)
+ return (char *) name;
+
+ if (current_namespace != awk_namespace && ! is_all_upper(name)) {
+ size_t length = strlen(current_namespace) + 2 + len + 1;
+ char *buf;
+
+ emalloc(buf, char *, length, "qualify_name");
+ sprintf(buf, "%s::%s", current_namespace, name);
+
+ return buf;
+ }
+
+ return (char *) name;
+}
diff --git a/command.c b/command.c
index b076530d..c8ee1632 100644
--- a/command.c
+++ b/command.c
@@ -1954,7 +1954,7 @@ yyreduce:
#line 472 "command.y" /* yacc.c:1645 */
{
NODE *n;
- n = lookup((yyvsp[0])->a_string, true);
+ n = lookup((yyvsp[0])->a_string);
if (n == NULL || n->type != Node_func)
yyerror(_("no such function - \"%s\""), (yyvsp[0])->a_string);
else {
diff --git a/command.y b/command.y
index 553a7c3c..58880dee 100644
--- a/command.y
+++ b/command.y
@@ -471,7 +471,7 @@ func_name
: D_STRING
{
NODE *n;
- n = lookup($1->a_string, true);
+ n = lookup($1->a_string);
if (n == NULL || n->type != Node_func)
yyerror(_("no such function - \"%s\""), $1->a_string);
else {
diff --git a/debug.c b/debug.c
index 05083a48..13ae1b76 100644
--- a/debug.c
+++ b/debug.c
@@ -1032,7 +1032,7 @@ NODE *find_symbol(const char *name, char **pname)
if (prog_running)
r = find_param(name, cur_frame, pname);
if (r == NULL)
- r = lookup(name, false); // for now, require fully qualified name
+ r = lookup(name); // for now, require fully qualified name
if (r == NULL)
fprintf(out_fp, _("no symbol `%s' in current context\n"), name);
return r;
@@ -5608,7 +5608,7 @@ do_eval(CMDARG *arg, int cmd ATTRIBUTE_UNUSED)
return false;
}
- f = lookup("@eval", false);
+ f = lookup("@eval");
assert(f != NULL);
if (this_func == NULL) { /* in main */
/* do a function call */
diff --git a/doc/ChangeLog b/doc/ChangeLog
index d285f880..66a0b546 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,8 @@
+2019-01-25 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawktexi.in (Namespaces): Add a cautionary note that the feature
+ is new and may still have dark corners and/or bugs.
+
2019-01-18 Arnold D. Robbins <arnold@skeeve.com>
* gawktexi.in: Finish up indexing changes.
diff --git a/doc/gawk.info b/doc/gawk.info
index 75cd6cbf..4168fc6f 100644
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@ -22734,6 +22734,11 @@ File: gawk.info, Node: Namespaces, Next: Arbitrary Precision Arithmetic, Prev
This major node describes a feature that is specific to 'gawk'.
+ CAUTION: This feature described in this chapter is new. It is
+ entirely possible, and even likely, that there are dark corners (if
+ not bugs) still lurking within the implementation. If you find any
+ such, please report them (*Note Bugs::).
+
* Menu:
* Global Namespace:: The global namespace in standard 'awk'.
@@ -37168,191 +37173,191 @@ Node: Readline Support916693
Node: Limitations917589
Node: Debugging Summary919698
Node: Namespaces920977
-Node: Global Namespace921795
-Node: Qualified Names923193
-Node: Default Namespace924192
-Node: Changing The Namespace924933
-Node: Naming Rules926547
-Node: Internal Name Management928395
-Node: Namespace Example929437
-Node: Namespace And Features931999
-Node: Namespace Summary933434
-Node: Arbitrary Precision Arithmetic934911
-Node: Computer Arithmetic936398
-Ref: table-numeric-ranges940164
-Ref: table-floating-point-ranges940657
-Ref: Computer Arithmetic-Footnote-1941315
-Node: Math Definitions941372
-Ref: table-ieee-formats944688
-Ref: Math Definitions-Footnote-1945291
-Node: MPFR features945396
-Node: FP Math Caution947114
-Ref: FP Math Caution-Footnote-1948186
-Node: Inexactness of computations948555
-Node: Inexact representation949515
-Node: Comparing FP Values950875
-Node: Errors accumulate952116
-Node: Getting Accuracy953549
-Node: Try To Round956259
-Node: Setting precision957158
-Ref: table-predefined-precision-strings957855
-Node: Setting the rounding mode959685
-Ref: table-gawk-rounding-modes960059
-Ref: Setting the rounding mode-Footnote-1963990
-Node: Arbitrary Precision Integers964169
-Ref: Arbitrary Precision Integers-Footnote-1967344
-Node: Checking for MPFR967493
-Node: POSIX Floating Point Problems968967
-Ref: POSIX Floating Point Problems-Footnote-1973252
-Node: Floating point summary973290
-Node: Dynamic Extensions975480
-Node: Extension Intro977033
-Node: Plugin License978299
-Node: Extension Mechanism Outline979096
-Ref: figure-load-extension979535
-Ref: figure-register-new-function981100
-Ref: figure-call-new-function982192
-Node: Extension API Description984254
-Node: Extension API Functions Introduction985896
-Ref: table-api-std-headers987732
-Node: General Data Types991597
-Ref: General Data Types-Footnote-1999958
-Node: Memory Allocation Functions1000257
-Ref: Memory Allocation Functions-Footnote-11004467
-Node: Constructor Functions1004566
-Node: Registration Functions1008152
-Node: Extension Functions1008837
-Node: Exit Callback Functions1014159
-Node: Extension Version String1015409
-Node: Input Parsers1016072
-Node: Output Wrappers1028793
-Node: Two-way processors1033305
-Node: Printing Messages1035570
-Ref: Printing Messages-Footnote-11036741
-Node: Updating ERRNO1036894
-Node: Requesting Values1037633
-Ref: table-value-types-returned1038370
-Node: Accessing Parameters1039306
-Node: Symbol Table Access1040541
-Node: Symbol table by name1041053
-Ref: Symbol table by name-Footnote-11044077
-Node: Symbol table by cookie1044205
-Ref: Symbol table by cookie-Footnote-11048390
-Node: Cached values1048454
-Ref: Cached values-Footnote-11051990
-Node: Array Manipulation1052143
-Ref: Array Manipulation-Footnote-11053234
-Node: Array Data Types1053271
-Ref: Array Data Types-Footnote-11055929
-Node: Array Functions1056021
-Node: Flattening Arrays1060519
-Node: Creating Arrays1067495
-Node: Redirection API1072262
-Node: Extension API Variables1075095
-Node: Extension Versioning1075806
-Ref: gawk-api-version1076235
-Node: Extension GMP/MPFR Versioning1077966
-Node: Extension API Informational Variables1079594
-Node: Extension API Boilerplate1080667
-Node: Changes from API V11084641
-Node: Finding Extensions1086213
-Node: Extension Example1086772
-Node: Internal File Description1087570
-Node: Internal File Ops1091650
-Ref: Internal File Ops-Footnote-11103000
-Node: Using Internal File Ops1103140
-Ref: Using Internal File Ops-Footnote-11105523
-Node: Extension Samples1105797
-Node: Extension Sample File Functions1107326
-Node: Extension Sample Fnmatch1114975
-Node: Extension Sample Fork1116462
-Node: Extension Sample Inplace1117680
-Node: Extension Sample Ord1120984
-Node: Extension Sample Readdir1121820
-Ref: table-readdir-file-types1122709
-Node: Extension Sample Revout1123514
-Node: Extension Sample Rev2way1124103
-Node: Extension Sample Read write array1124843
-Node: Extension Sample Readfile1126785
-Node: Extension Sample Time1127880
-Node: Extension Sample API Tests1129228
-Node: gawkextlib1129720
-Node: Extension summary1132638
-Node: Extension Exercises1136340
-Node: Language History1137582
-Node: V7/SVR3.11139238
-Node: SVR41141390
-Node: POSIX1142824
-Node: BTL1144204
-Node: POSIX/GNU1144933
-Node: Feature History1150711
-Node: Common Extensions1166757
-Node: Ranges and Locales1168040
-Ref: Ranges and Locales-Footnote-11172656
-Ref: Ranges and Locales-Footnote-21172683
-Ref: Ranges and Locales-Footnote-31172918
-Node: Contributors1173139
-Node: History summary1179084
-Node: Installation1180464
-Node: Gawk Distribution1181408
-Node: Getting1181892
-Node: Extracting1182855
-Node: Distribution contents1184493
-Node: Unix Installation1190973
-Node: Quick Installation1191655
-Node: Shell Startup Files1194069
-Node: Additional Configuration Options1195158
-Node: Configuration Philosophy1197323
-Node: Non-Unix Installation1199692
-Node: PC Installation1200152
-Node: PC Binary Installation1200990
-Node: PC Compiling1201425
-Node: PC Using1202542
-Node: Cygwin1206095
-Node: MSYS1207194
-Node: VMS Installation1207695
-Node: VMS Compilation1208486
-Ref: VMS Compilation-Footnote-11209715
-Node: VMS Dynamic Extensions1209773
-Node: VMS Installation Details1211458
-Node: VMS Running1213711
-Node: VMS GNV1217990
-Node: VMS Old Gawk1218725
-Node: Bugs1219196
-Node: Bug address1219859
-Node: Usenet1222841
-Node: Maintainers1223845
-Node: Other Versions1225106
-Node: Installation summary1232020
-Node: Notes1233222
-Node: Compatibility Mode1234016
-Node: Additions1234798
-Node: Accessing The Source1235723
-Node: Adding Code1237160
-Node: New Ports1243379
-Node: Derived Files1247867
-Ref: Derived Files-Footnote-11253513
-Ref: Derived Files-Footnote-21253548
-Ref: Derived Files-Footnote-31254146
-Node: Future Extensions1254260
-Node: Implementation Limitations1254918
-Node: Extension Design1256101
-Node: Old Extension Problems1257245
-Ref: Old Extension Problems-Footnote-11258763
-Node: Extension New Mechanism Goals1258820
-Ref: Extension New Mechanism Goals-Footnote-11262184
-Node: Extension Other Design Decisions1262373
-Node: Extension Future Growth1264486
-Node: Notes summary1265322
-Node: Basic Concepts1266497
-Node: Basic High Level1267178
-Ref: figure-general-flow1267460
-Ref: figure-process-flow1268145
-Ref: Basic High Level-Footnote-11271446
-Node: Basic Data Typing1271631
-Node: Glossary1274959
-Node: Copying1306797
-Node: GNU Free Documentation License1344340
-Node: Index1369460
+Node: Global Namespace922056
+Node: Qualified Names923454
+Node: Default Namespace924453
+Node: Changing The Namespace925194
+Node: Naming Rules926808
+Node: Internal Name Management928656
+Node: Namespace Example929698
+Node: Namespace And Features932260
+Node: Namespace Summary933695
+Node: Arbitrary Precision Arithmetic935172
+Node: Computer Arithmetic936659
+Ref: table-numeric-ranges940425
+Ref: table-floating-point-ranges940918
+Ref: Computer Arithmetic-Footnote-1941576
+Node: Math Definitions941633
+Ref: table-ieee-formats944949
+Ref: Math Definitions-Footnote-1945552
+Node: MPFR features945657
+Node: FP Math Caution947375
+Ref: FP Math Caution-Footnote-1948447
+Node: Inexactness of computations948816
+Node: Inexact representation949776
+Node: Comparing FP Values951136
+Node: Errors accumulate952377
+Node: Getting Accuracy953810
+Node: Try To Round956520
+Node: Setting precision957419
+Ref: table-predefined-precision-strings958116
+Node: Setting the rounding mode959946
+Ref: table-gawk-rounding-modes960320
+Ref: Setting the rounding mode-Footnote-1964251
+Node: Arbitrary Precision Integers964430
+Ref: Arbitrary Precision Integers-Footnote-1967605
+Node: Checking for MPFR967754
+Node: POSIX Floating Point Problems969228
+Ref: POSIX Floating Point Problems-Footnote-1973513
+Node: Floating point summary973551
+Node: Dynamic Extensions975741
+Node: Extension Intro977294
+Node: Plugin License978560
+Node: Extension Mechanism Outline979357
+Ref: figure-load-extension979796
+Ref: figure-register-new-function981361
+Ref: figure-call-new-function982453
+Node: Extension API Description984515
+Node: Extension API Functions Introduction986157
+Ref: table-api-std-headers987993
+Node: General Data Types991858
+Ref: General Data Types-Footnote-11000219
+Node: Memory Allocation Functions1000518
+Ref: Memory Allocation Functions-Footnote-11004728
+Node: Constructor Functions1004827
+Node: Registration Functions1008413
+Node: Extension Functions1009098
+Node: Exit Callback Functions1014420
+Node: Extension Version String1015670
+Node: Input Parsers1016333
+Node: Output Wrappers1029054
+Node: Two-way processors1033566
+Node: Printing Messages1035831
+Ref: Printing Messages-Footnote-11037002
+Node: Updating ERRNO1037155
+Node: Requesting Values1037894
+Ref: table-value-types-returned1038631
+Node: Accessing Parameters1039567
+Node: Symbol Table Access1040802
+Node: Symbol table by name1041314
+Ref: Symbol table by name-Footnote-11044338
+Node: Symbol table by cookie1044466
+Ref: Symbol table by cookie-Footnote-11048651
+Node: Cached values1048715
+Ref: Cached values-Footnote-11052251
+Node: Array Manipulation1052404
+Ref: Array Manipulation-Footnote-11053495
+Node: Array Data Types1053532
+Ref: Array Data Types-Footnote-11056190
+Node: Array Functions1056282
+Node: Flattening Arrays1060780
+Node: Creating Arrays1067756
+Node: Redirection API1072523
+Node: Extension API Variables1075356
+Node: Extension Versioning1076067
+Ref: gawk-api-version1076496
+Node: Extension GMP/MPFR Versioning1078227
+Node: Extension API Informational Variables1079855
+Node: Extension API Boilerplate1080928
+Node: Changes from API V11084902
+Node: Finding Extensions1086474
+Node: Extension Example1087033
+Node: Internal File Description1087831
+Node: Internal File Ops1091911
+Ref: Internal File Ops-Footnote-11103261
+Node: Using Internal File Ops1103401
+Ref: Using Internal File Ops-Footnote-11105784
+Node: Extension Samples1106058
+Node: Extension Sample File Functions1107587
+Node: Extension Sample Fnmatch1115236
+Node: Extension Sample Fork1116723
+Node: Extension Sample Inplace1117941
+Node: Extension Sample Ord1121245
+Node: Extension Sample Readdir1122081
+Ref: table-readdir-file-types1122970
+Node: Extension Sample Revout1123775
+Node: Extension Sample Rev2way1124364
+Node: Extension Sample Read write array1125104
+Node: Extension Sample Readfile1127046
+Node: Extension Sample Time1128141
+Node: Extension Sample API Tests1129489
+Node: gawkextlib1129981
+Node: Extension summary1132899
+Node: Extension Exercises1136601
+Node: Language History1137843
+Node: V7/SVR3.11139499
+Node: SVR41141651
+Node: POSIX1143085
+Node: BTL1144465
+Node: POSIX/GNU1145194
+Node: Feature History1150972
+Node: Common Extensions1167018
+Node: Ranges and Locales1168301
+Ref: Ranges and Locales-Footnote-11172917
+Ref: Ranges and Locales-Footnote-21172944
+Ref: Ranges and Locales-Footnote-31173179
+Node: Contributors1173400
+Node: History summary1179345
+Node: Installation1180725
+Node: Gawk Distribution1181669
+Node: Getting1182153
+Node: Extracting1183116
+Node: Distribution contents1184754
+Node: Unix Installation1191234
+Node: Quick Installation1191916
+Node: Shell Startup Files1194330
+Node: Additional Configuration Options1195419
+Node: Configuration Philosophy1197584
+Node: Non-Unix Installation1199953
+Node: PC Installation1200413
+Node: PC Binary Installation1201251
+Node: PC Compiling1201686
+Node: PC Using1202803
+Node: Cygwin1206356
+Node: MSYS1207455
+Node: VMS Installation1207956
+Node: VMS Compilation1208747
+Ref: VMS Compilation-Footnote-11209976
+Node: VMS Dynamic Extensions1210034
+Node: VMS Installation Details1211719
+Node: VMS Running1213972
+Node: VMS GNV1218251
+Node: VMS Old Gawk1218986
+Node: Bugs1219457
+Node: Bug address1220120
+Node: Usenet1223102
+Node: Maintainers1224106
+Node: Other Versions1225367
+Node: Installation summary1232281
+Node: Notes1233483
+Node: Compatibility Mode1234277
+Node: Additions1235059
+Node: Accessing The Source1235984
+Node: Adding Code1237421
+Node: New Ports1243640
+Node: Derived Files1248128
+Ref: Derived Files-Footnote-11253774
+Ref: Derived Files-Footnote-21253809
+Ref: Derived Files-Footnote-31254407
+Node: Future Extensions1254521
+Node: Implementation Limitations1255179
+Node: Extension Design1256362
+Node: Old Extension Problems1257506
+Ref: Old Extension Problems-Footnote-11259024
+Node: Extension New Mechanism Goals1259081
+Ref: Extension New Mechanism Goals-Footnote-11262445
+Node: Extension Other Design Decisions1262634
+Node: Extension Future Growth1264747
+Node: Notes summary1265583
+Node: Basic Concepts1266758
+Node: Basic High Level1267439
+Ref: figure-general-flow1267721
+Ref: figure-process-flow1268406
+Ref: Basic High Level-Footnote-11271707
+Node: Basic Data Typing1271892
+Node: Glossary1275220
+Node: Copying1307058
+Node: GNU Free Documentation License1344601
+Node: Index1369721

End Tag Table
diff --git a/doc/gawk.texi b/doc/gawk.texi
index cae7c399..e56ee61e 100644
--- a/doc/gawk.texi
+++ b/doc/gawk.texi
@@ -31737,6 +31737,13 @@ program being debugged, but occasionally it can.
This @value{CHAPTER} describes a feature that is specific to @command{gawk}.
+@quotation CAUTION
+This feature described in this chapter is new. It is entirely
+possible, and even likely, that there are dark corners (if not bugs)
+still lurking within the implementation. If you find any such,
+please report them (@xref{Bugs}).
+@end quotation
+
@menu
* Global Namespace:: The global namespace in standard @command{awk}.
* Qualified Names:: How to qualify names with a namespace.
diff --git a/doc/gawktexi.in b/doc/gawktexi.in
index ddbe8df5..1b194efe 100644
--- a/doc/gawktexi.in
+++ b/doc/gawktexi.in
@@ -30749,6 +30749,13 @@ program being debugged, but occasionally it can.
This @value{CHAPTER} describes a feature that is specific to @command{gawk}.
+@quotation CAUTION
+This feature described in this chapter is new. It is entirely
+possible, and even likely, that there are dark corners (if not bugs)
+still lurking within the implementation. If you find any such,
+please report them (@xref{Bugs}).
+@end quotation
+
@menu
* Global Namespace:: The global namespace in standard @command{awk}.
* Qualified Names:: How to qualify names with a namespace.
diff --git a/ext.c b/ext.c
index b72360ff..36969b1c 100644
--- a/ext.c
+++ b/ext.c
@@ -118,7 +118,7 @@ make_builtin(const char *name_space, const awk_ext_func_t *funcinfo)
if (check_special(name) >= 0)
fatal(_("make_builtin: can't use gawk built-in `%s' as function name"), name);
- f = lookup(name, false);
+ f = lookup(name);
install_name = estrdup(name, strlen(name));
} else {
if (! is_valid_identifier(name_space))
@@ -135,7 +135,7 @@ make_builtin(const char *name_space, const awk_ext_func_t *funcinfo)
sprintf(buf, "%s::%s", name_space, name);
install_name = buf;
- f = lookup(install_name, false);
+ f = lookup(install_name);
}
if (f != NULL) {
diff --git a/gawkapi.c b/gawkapi.c
index c76c7b53..91192393 100644
--- a/gawkapi.c
+++ b/gawkapi.c
@@ -1603,7 +1603,7 @@ ns_lookup(const char *name_space, const char *name, char **fullname)
if (name_space[0] == '\0' || strcmp(name_space, awk_namespace) == 0) {
if (fullname != NULL)
*fullname = estrdup(name, strlen(name));
- return lookup(name, false);
+ return lookup(name);
}
size_t len = strlen(name_space) + 2 + strlen(name) + 1;
@@ -1611,7 +1611,7 @@ ns_lookup(const char *name_space, const char *name, char **fullname)
emalloc(buf, char *, len, "ns_lookup");
sprintf(buf, "%s::%s", name_space, name);
- NODE *f = lookup(buf, false);
+ NODE *f = lookup(buf);
if (fullname != NULL)
*fullname = buf;
else
diff --git a/interpret.h b/interpret.h
index e9896672..720b583a 100644
--- a/interpret.h
+++ b/interpret.h
@@ -1108,7 +1108,7 @@ match_re:
ni = setup_frame(pc);
JUMPTO(ni); /* Op_func */
}
- f = lookup(t1->stptr, true);
+ f = lookup(t1->stptr);
}
if (f == NULL) {
@@ -1172,7 +1172,7 @@ match_re:
/* retrieve function definition node */
f = pc->func_body;
if (f == NULL) {
- f = lookup(pc->func_name, true);
+ f = lookup(pc->func_name);
if (f == NULL || (f->type != Node_func && f->type != Node_ext_func))
fatal(_("function `%s' not defined"), pc->func_name);
pc->func_body = f; /* save for next call */
diff --git a/main.c b/main.c
index 878e8086..d75e9871 100644
--- a/main.c
+++ b/main.c
@@ -471,10 +471,7 @@ main(int argc, char **argv)
if (do_intl)
exit(EXIT_SUCCESS);
- if (current_namespace != awk_namespace) {
- efree((char *) current_namespace);
- current_namespace = awk_namespace;
- }
+ set_current_namespace(awk_namespace);
install_builtins();
@@ -520,7 +517,7 @@ main(int argc, char **argv)
interpret(code_block);
if (do_pretty_print) {
- current_namespace = awk_namespace;
+ set_current_namespace(awk_namespace);
dump_prog(code_block);
dump_funcs();
}
@@ -1173,7 +1170,7 @@ arg_assign(char *arg, bool initing)
fatal(_("cannot use gawk builtin `%s' as variable name"), arg);
if (! initing) {
- var = lookup(arg, false);
+ var = lookup(arg);
if (var != NULL && var->type == Node_func)
fatal(_("cannot use function `%s' as variable name"), arg);
}
@@ -1798,3 +1795,14 @@ platform_name()
return "posix";
#endif
}
+
+/* set_current_namespace --- set current_namespace and handle memory management */
+
+void
+set_current_namespace(const char *new_namespace)
+{
+ if (current_namespace != awk_namespace)
+ efree((void *) current_namespace);
+
+ current_namespace = new_namespace;
+}
diff --git a/profile.c b/profile.c
index 3d954d30..1a1a1e96 100644
--- a/profile.c
+++ b/profile.c
@@ -2033,6 +2033,8 @@ pp_namespace(const char *name, INSTRUCTION *comment)
if (strcmp(current_namespace, name) == 0)
return;
+ // don't need to free current_namespace, it comes from
+ // info saved in Op_namespace instructions.
current_namespace = name;
if (do_profile)
@@ -2070,7 +2072,8 @@ adjust_namespace(char *name, bool *malloced)
// unadorned name from symbol table, add awk:: if not in awk:: n.s.
if (strchr(name, ':') == NULL &&
current_namespace != awk_namespace && // can be equal if namespace never changed
- strcmp(current_namespace, "awk") != 0) {
+ strcmp(current_namespace, "awk") != 0 &&
+ ! is_all_upper(name)) {
char *buf;
size_t len = 5 + strlen(name) + 1;
diff --git a/symbol.c b/symbol.c
index 94d66fe8..16f214f2 100644
--- a/symbol.c
+++ b/symbol.c
@@ -39,7 +39,6 @@ static void (*install_func)(NODE *) = NULL;
static NODE *make_symbol(const char *name, NODETYPE type);
static NODE *install(const char *name, NODE *parm, NODETYPE type);
static void free_bcpool(INSTRUCTION_POOL *pl);
-static const char *fix_up_namespace(const char *name, bool *malloced);
static AWK_CONTEXT *curr_ctxt = NULL;
static int ctxt_level;
@@ -89,13 +88,12 @@ install_symbol(const char *name, NODETYPE type)
*/
NODE *
-lookup(const char *name, bool do_qualify)
+lookup(const char *name)
{
NODE *n;
NODE *tmp;
NODE *tables[5]; /* manual init below, for z/OS */
int i;
- bool malloced = false;
/* ``It's turtles, all the way down.'' */
tables[0] = param_table; /* parameters shadow everything */
@@ -104,11 +102,8 @@ lookup(const char *name, bool do_qualify)
tables[3] = symbol_table; /* then globals */
tables[4] = NULL;
- if (do_qualify)
- name = fix_up_namespace(name, & malloced);
-
- if (malloced)
- tmp = make_str_node(name, strlen(name), ALREADY_MALLOCED);
+ if (strncmp(name, "awk::", 5) == 0)
+ tmp = make_string(name + 5, strlen(name) - 5);
else
tmp = make_string(name, strlen(name));
@@ -310,18 +305,8 @@ install(const char *name, NODE *parm, NODETYPE type)
NODE *table;
NODE *n_name;
NODE *prev;
- bool malloced = false;
-
- if (type == Node_param_list) {
- n_name = make_string(name, strlen(name));
- } else {
- name = fix_up_namespace(name, & malloced);
- if (malloced)
- n_name = make_str_node(name, strlen(name), ALREADY_MALLOCED);
- else
- n_name = make_string(name, strlen(name));
- }
+ n_name = make_string(name, strlen(name));
table = symbol_table;
@@ -965,10 +950,14 @@ free_bcpool(INSTRUCTION_POOL *pl)
/* is_all_upper --- return true if name is all uppercase letters */
-static bool
+/*
+ * DON'T use isupper(), it's locale aware!
+ */
+
+bool
is_all_upper(const char *name)
{
- for (; *name != '\0'; name ++) {
+ for (; *name != '\0'; name++) {
switch (*name) {
case 'A': case 'B': case 'C': case 'D': case 'E':
case 'F': case 'G': case 'H': case 'I': case 'J':
@@ -984,40 +973,3 @@ is_all_upper(const char *name)
return true;
}
-
-/* fix_up_namespace --- qualify / dequalify a simple name */
-
-static const char *
-fix_up_namespace(const char *name, bool *malloced)
-{
- static char awk_ns[] = "awk::";
- const size_t awk_ns_len = sizeof(awk_ns) - 1; // don't include trailing \0
- char *cp;
-
- assert(malloced != NULL);
- *malloced = false;
-
- // first, check if it's qualified
- if ((cp = strchr(name, ':')) != NULL) {
- // does it start with awk:: ?
- if (strncmp(name, awk_ns, awk_ns_len) == 0)
- return cp + 2; // just trailing part
-
- // otherwise it's fully qualified, not in the awk n.s.
- return name;
- }
-
- // not fully qualified
- if (current_namespace == awk_namespace || is_all_upper(name))
- return name; // put it into awk namespace
-
- // make it fully qualified
- size_t len = strlen(current_namespace) + 2 + strlen(name) + 1;
- char *buf = NULL;
-
- emalloc(buf, char *, len, "fix_up_namespace");
- sprintf(buf, "%s::%s", current_namespace, name);
- *malloced = true;
-
- return buf;
-}
diff --git a/test/ChangeLog b/test/ChangeLog
index 812f3faf..b8352718 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,3 +1,17 @@
+2018-01-24 Arnold D. Robbins <arnold@skeeve.com>
+
+ * Makefile.am (EXTRA_DIST): New test: nsforloop.
+ * nsforloop.awk, nsforloop.ok: New files.
+
+2018-01-23 Arnold D. Robbins <arnold@skeeve.com>
+
+ * nsprof2.ok: Adjust after code changes.
+
+2018-01-23 Arnold D. Robbins <arnold@skeeve.com>
+
+ * Makefile.am (EXTRA_DIST): New test: nsfuncrecurse.
+ * nsfuncrecurse.awk, nsfuncrecurse.ok: New files.
+
2019-01-09 Andrew J. Schorr <aschorr@telemetry-investments.com>
* Makefile.am (EXTRA_DIST): New test: arraytype.
diff --git a/test/Makefile.am b/test/Makefile.am
index 0ffad9ad..046d8c67 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -773,6 +773,10 @@ EXTRA_DIST = \
nsbad.awk \
nsbad.ok \
nsbad_cmd.ok \
+ nsforloop.awk \
+ nsforloop.ok \
+ nsfuncrecurse.awk \
+ nsfuncrecurse.ok \
nsindirect1.awk \
nsindirect1.ok \
nsindirect2.awk \
@@ -1327,7 +1331,7 @@ GAWK_EXT_TESTS = \
lint lintexp lintindex lintint lintlength lintold lintset lintwarn \
manyfiles match1 match2 match3 mbstr1 mbstr2 mixed1 mktime muldimposix \
nastyparm negtime next nondec nondec2 nonfatal1 nonfatal2 nonfatal3 \
- nsbad nsbad_cmd nsindirect1 nsindirect2 nsprof1 nsprof2 \
+ nsbad nsbad_cmd nsforloop nsfuncrecurse nsindirect1 nsindirect2 nsprof1 nsprof2 \
patsplit posix printfbad1 printfbad2 printfbad3 printfbad4 printhuge \
procinfs profile0 profile1 profile2 profile3 profile4 profile5 profile6 \
profile7 profile8 profile9 profile10 profile11 pty1 pty2 \
diff --git a/test/Makefile.in b/test/Makefile.in
index c244c7af..e0fbd970 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -1031,6 +1031,10 @@ EXTRA_DIST = \
nsbad.awk \
nsbad.ok \
nsbad_cmd.ok \
+ nsforloop.awk \
+ nsforloop.ok \
+ nsfuncrecurse.awk \
+ nsfuncrecurse.ok \
nsindirect1.awk \
nsindirect1.ok \
nsindirect2.awk \
@@ -1585,7 +1589,7 @@ GAWK_EXT_TESTS = \
lint lintexp lintindex lintint lintlength lintold lintset lintwarn \
manyfiles match1 match2 match3 mbstr1 mbstr2 mixed1 mktime muldimposix \
nastyparm negtime next nondec nondec2 nonfatal1 nonfatal2 nonfatal3 \
- nsbad nsbad_cmd nsindirect1 nsindirect2 nsprof1 nsprof2 \
+ nsbad nsbad_cmd nsforloop nsfuncrecurse nsindirect1 nsindirect2 nsprof1 nsprof2 \
patsplit posix printfbad1 printfbad2 printfbad3 printfbad4 printhuge \
procinfs profile0 profile1 profile2 profile3 profile4 profile5 profile6 \
profile7 profile8 profile9 profile10 profile11 pty1 pty2 \
@@ -1647,6 +1651,7 @@ NEED_POSIX = printf0 posix2008sub paramasfunc1 paramasfunc2 muldimposix
NEED_PRETTY = nsprof1 nsprof2 \
profile4 profile5 profile8 profile9 profile10 profile11
+
# List of tests that need --re-interval
NEED_RE_INTERVAL = gsubtst3 reint reint2
@@ -4383,6 +4388,16 @@ nsbad:
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+nsforloop:
+ @echo $@
+ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
+nsfuncrecurse:
+ @echo $@
+ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
nsindirect1:
@echo $@
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
diff --git a/test/Maketests b/test/Maketests
index 7163b4ab..84a0218d 100644
--- a/test/Maketests
+++ b/test/Maketests
@@ -1678,6 +1678,16 @@ nsbad:
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+nsforloop:
+ @echo $@
+ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
+nsfuncrecurse:
+ @echo $@
+ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
nsindirect1:
@echo $@
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
diff --git a/test/nsforloop.awk b/test/nsforloop.awk
new file mode 100644
index 00000000..b050db64
--- /dev/null
+++ b/test/nsforloop.awk
@@ -0,0 +1,20 @@
+@namespace "foo"
+
+function test(v)
+{
+ print "-- 1"
+ for (i in Data)
+ print i
+
+ print "-- 2"
+ for (v in Data)
+ print v
+ print "-- 3"
+}
+
+BEGIN {
+ Data[1] = 1
+ Data[2] = 2
+
+ test()
+}
diff --git a/test/nsforloop.ok b/test/nsforloop.ok
new file mode 100644
index 00000000..b87cd3ef
--- /dev/null
+++ b/test/nsforloop.ok
@@ -0,0 +1,7 @@
+-- 1
+1
+2
+-- 2
+1
+2
+-- 3
diff --git a/test/nsfuncrecurse.awk b/test/nsfuncrecurse.awk
new file mode 100644
index 00000000..1a006ceb
--- /dev/null
+++ b/test/nsfuncrecurse.awk
@@ -0,0 +1,18 @@
+@namespace "foo"
+
+function test(v)
+{
+ if (v <= 0)
+ return
+
+ Level++
+ v--
+ printf("Level = %d, v = %d\n", Level, v)
+ test(v)
+ Level--
+}
+
+BEGIN {
+ Level = 0
+ test(5)
+}
diff --git a/test/nsfuncrecurse.ok b/test/nsfuncrecurse.ok
new file mode 100644
index 00000000..3dc76e41
--- /dev/null
+++ b/test/nsfuncrecurse.ok
@@ -0,0 +1,5 @@
+Level = 1, v = 4
+Level = 2, v = 3
+Level = 3, v = 2
+Level = 4, v = 1
+Level = 5, v = 0
diff --git a/test/nsindirect2.ok b/test/nsindirect2.ok
index 9b71cd92..c447220d 100644
--- a/test/nsindirect2.ok
+++ b/test/nsindirect2.ok
@@ -1,4 +1,4 @@
-strftime() - this is not the function you are looking for
+strftime(from 'testing') - this is not the function you are looking for
gensub = gensub
iteration 1, got good result from systime
iteration 2, got good result from systime
diff --git a/test/nsprof2.ok b/test/nsprof2.ok
index 1bb78822..5a861830 100644
--- a/test/nsprof2.ok
+++ b/test/nsprof2.ok
@@ -48,13 +48,13 @@ function Init(oldfs, oldrs, olddol0, pwcat, using_fw, using_fpat)
if (Inited) {
return
}
- oldfs = awk::FS
- oldrs = awk::RS
+ oldfs = FS
+ oldrs = RS
olddol0 = $0
- using_fw = (awk::PROCINFO["FS"] == "FIELDWIDTHS")
- using_fpat = (awk::PROCINFO["FS"] == "FPAT")
- awk::FS = ":"
- awk::RS = "\n"
+ using_fw = (PROCINFO["FS"] == "FIELDWIDTHS")
+ using_fpat = (PROCINFO["FS"] == "FPAT")
+ FS = ":"
+ RS = "\n"
pwcat = Awklib "pwcat"
while ((pwcat | getline) > 0) {
Byname[$1] = $0
@@ -64,12 +64,12 @@ function Init(oldfs, oldrs, olddol0, pwcat, using_fw, using_fpat)
close(pwcat)
Count = 0
Inited = 1
- awk::FS = oldfs
+ FS = oldfs
if (using_fw) {
- awk::FIELDWIDTHS = awk::FIELDWIDTHS
+ FIELDWIDTHS = FIELDWIDTHS
} else if (using_fpat) {
- awk::FPAT = awk::FPAT
+ FPAT = FPAT
}
- awk::RS = oldrs
+ RS = oldrs
$0 = olddol0
}