diff options
Diffstat (limited to 'awkgram.c')
-rw-r--r-- | awkgram.c | 1850 |
1 files changed, 910 insertions, 940 deletions
@@ -110,11 +110,11 @@ static INSTRUCTION *mk_condition(INSTRUCTION *cond, INSTRUCTION *ifp, INSTRUCTIO static INSTRUCTION *mk_expression_list(INSTRUCTION *list, INSTRUCTION *s1); static INSTRUCTION *mk_for_loop(INSTRUCTION *forp, INSTRUCTION *init, INSTRUCTION *cond, INSTRUCTION *incr, INSTRUCTION *body); -static void fix_break_continue(INSTRUCTION *start, INSTRUCTION *end, int check_continue); +static void fix_break_continue(INSTRUCTION *list, INSTRUCTION *b_target, INSTRUCTION *c_target); static INSTRUCTION *mk_binary(INSTRUCTION *s1, INSTRUCTION *s2, INSTRUCTION *op); static INSTRUCTION *mk_boolean(INSTRUCTION *left, INSTRUCTION *right, INSTRUCTION *op); static INSTRUCTION *mk_assignment(INSTRUCTION *lhs, INSTRUCTION *rhs, INSTRUCTION *op); -static INSTRUCTION *mk_getline(INSTRUCTION *op, INSTRUCTION *opt_var, INSTRUCTION *redir, OPCODE redirtype); +static INSTRUCTION *mk_getline(INSTRUCTION *op, INSTRUCTION *opt_var, INSTRUCTION *redir, int redirtype); static NODE *make_regnode(int type, NODE *exp); static int count_expressions(INSTRUCTION **list, int isarg); static INSTRUCTION *optimize_assignment(INSTRUCTION *exp); @@ -577,16 +577,16 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 1142 +#define YYLAST 1144 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 74 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 66 +#define YYNNTS 65 /* YYNRULES -- Number of rules. */ -#define YYNRULES 186 +#define YYNRULES 185 /* YYNRULES -- Number of states. */ -#define YYNSTATES 330 +#define YYNSTATES 329 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 @@ -642,82 +642,82 @@ static const yytype_uint16 yyprhs[] = 80, 81, 85, 87, 89, 90, 93, 96, 98, 101, 104, 108, 110, 120, 127, 136, 145, 158, 170, 172, 175, 178, 181, 184, 188, 189, 194, 197, 198, 203, - 204, 209, 214, 216, 217, 219, 221, 222, 225, 228, - 234, 239, 241, 244, 247, 249, 251, 253, 255, 257, - 261, 262, 263, 267, 274, 284, 286, 289, 290, 292, - 293, 296, 297, 299, 301, 305, 307, 310, 314, 315, - 317, 318, 320, 322, 326, 328, 331, 335, 339, 343, - 347, 351, 355, 359, 363, 369, 371, 373, 375, 378, - 380, 382, 384, 386, 388, 390, 393, 395, 399, 403, - 407, 411, 415, 419, 423, 426, 429, 435, 440, 444, - 448, 452, 456, 460, 464, 466, 469, 473, 478, 483, - 485, 487, 489, 492, 495, 497, 499, 502, 505, 507, - 510, 515, 516, 518, 519, 522, 524, 527, 529, 533, - 535, 538, 541, 543, 546, 548, 552, 554, 556, 557, - 560, 563, 565, 566, 568, 570, 572 + 204, 209, 214, 216, 217, 219, 220, 223, 226, 232, + 237, 239, 242, 245, 247, 249, 251, 253, 255, 259, + 260, 261, 265, 272, 282, 284, 287, 288, 290, 291, + 294, 295, 297, 299, 303, 305, 308, 312, 313, 315, + 316, 318, 320, 324, 326, 329, 333, 337, 341, 345, + 349, 353, 357, 361, 367, 369, 371, 373, 376, 378, + 380, 382, 384, 386, 388, 391, 393, 397, 401, 405, + 409, 413, 417, 421, 424, 427, 433, 438, 442, 446, + 450, 454, 458, 462, 464, 467, 471, 476, 481, 483, + 485, 487, 490, 493, 495, 497, 500, 503, 505, 508, + 513, 514, 516, 517, 520, 522, 525, 527, 531, 533, + 536, 539, 541, 544, 546, 550, 552, 554, 555, 558, + 561, 563, 564, 566, 568, 570 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int16 yyrhs[] = { - 75, 0, -1, -1, 75, 76, -1, 75, 105, -1, + 75, 0, -1, -1, 75, 76, -1, 75, 104, -1, 75, 47, -1, 75, 1, -1, 78, 79, -1, 78, 88, -1, 82, 79, -1, 68, 48, 77, 88, -1, - 6, -1, 6, 1, -1, 1, -1, -1, 113, -1, - 113, 54, 113, -1, 17, -1, 18, -1, 36, -1, - 37, -1, 133, 87, 134, 136, 106, -1, 4, -1, + 6, -1, 6, 1, -1, 1, -1, -1, 112, -1, + 112, 54, 112, -1, 17, -1, 18, -1, 36, -1, + 37, -1, 132, 87, 133, 135, 105, -1, 4, -1, 3, -1, 81, -1, 68, 49, -1, 45, -1, 46, - -1, -1, 35, 83, 80, 66, 108, 135, 106, -1, + -1, -1, 35, 83, 80, 66, 107, 134, 105, -1, -1, 86, 85, 5, -1, 60, -1, 51, -1, -1, - 87, 89, -1, 87, 1, -1, 105, -1, 137, 106, - -1, 137, 106, -1, 133, 87, 134, -1, 104, -1, - 23, 66, 113, 135, 106, 133, 96, 106, 134, -1, - 26, 66, 113, 135, 106, 89, -1, 27, 106, 89, - 26, 66, 113, 135, 106, -1, 28, 66, 4, 40, - 130, 135, 106, 89, -1, 28, 66, 95, 137, 106, - 113, 137, 106, 95, 135, 106, 89, -1, 28, 66, - 95, 137, 106, 137, 106, 95, 135, 106, 89, -1, + 87, 89, -1, 87, 1, -1, 104, -1, 136, 105, + -1, 136, 105, -1, 132, 87, 133, -1, 103, -1, + 23, 66, 112, 134, 105, 132, 96, 105, 133, -1, + 26, 66, 112, 134, 105, 89, -1, 27, 105, 89, + 26, 66, 112, 134, 105, -1, 28, 66, 4, 40, + 129, 134, 105, 89, -1, 28, 66, 95, 136, 105, + 112, 136, 105, 95, 134, 105, 89, -1, 28, 66, + 95, 136, 105, 136, 105, 95, 134, 105, 89, -1, 90, -1, 29, 88, -1, 30, 88, -1, 33, 88, - -1, 39, 88, -1, 34, 110, 88, -1, -1, 21, - 91, 110, 88, -1, 92, 88, -1, -1, 100, 93, - 101, 102, -1, -1, 22, 4, 94, 124, -1, 22, - 66, 4, 67, -1, 113, -1, -1, 92, -1, 97, - -1, -1, 97, 98, -1, 97, 1, -1, 24, 99, - 138, 106, 87, -1, 25, 138, 106, 87, -1, 7, - -1, 58, 7, -1, 57, 7, -1, 8, -1, 84, - -1, 31, -1, 32, -1, 111, -1, 66, 112, 135, - -1, -1, -1, 10, 103, 117, -1, 19, 66, 113, - 135, 106, 89, -1, 19, 66, 113, 135, 106, 89, - 20, 106, 89, -1, 50, -1, 105, 50, -1, -1, - 105, -1, -1, 55, 118, -1, -1, 109, -1, 4, - -1, 109, 139, 4, -1, 1, -1, 109, 1, -1, - 109, 139, 1, -1, -1, 113, -1, -1, 112, -1, - 113, -1, 112, 139, 113, -1, 1, -1, 112, 1, - -1, 112, 1, 113, -1, 112, 139, 1, -1, 131, - 114, 113, -1, 113, 41, 113, -1, 113, 42, 113, - -1, 113, 14, 113, -1, 113, 40, 130, -1, 113, - 116, 113, -1, 113, 52, 113, 53, 113, -1, 117, - -1, 13, -1, 12, -1, 51, 13, -1, 9, -1, - 55, -1, 115, -1, 56, -1, 118, -1, 119, -1, - 117, 118, -1, 120, -1, 118, 64, 118, -1, 118, - 59, 118, -1, 118, 60, 118, -1, 118, 61, 118, - -1, 118, 57, 118, -1, 118, 58, 118, -1, 38, - 123, 107, -1, 131, 43, -1, 131, 44, -1, 66, - 112, 135, 40, 130, -1, 117, 11, 38, 123, -1, - 119, 64, 118, -1, 119, 59, 118, -1, 119, 60, - 118, -1, 119, 61, 118, -1, 119, 57, 118, -1, - 119, 58, 118, -1, 84, -1, 62, 118, -1, 66, - 113, 135, -1, 45, 66, 111, 135, -1, 46, 66, - 111, 135, -1, 46, -1, 121, -1, 131, -1, 43, - 131, -1, 44, 131, -1, 7, -1, 8, -1, 58, - 118, -1, 57, 118, -1, 122, -1, 68, 122, -1, - 3, 66, 111, 135, -1, -1, 131, -1, -1, 125, - 16, -1, 126, -1, 125, 126, -1, 127, -1, 69, - 112, 70, -1, 127, -1, 128, 127, -1, 128, 16, - -1, 4, -1, 4, 129, -1, 130, -1, 65, 120, - 132, -1, 43, -1, 44, -1, -1, 71, 106, -1, - 72, 106, -1, 67, -1, -1, 137, -1, 73, -1, - 53, -1, 54, 106, -1 + -1, 39, 88, -1, 34, 109, 88, -1, -1, 21, + 91, 109, 88, -1, 92, 88, -1, -1, 99, 93, + 100, 101, -1, -1, 22, 4, 94, 123, -1, 22, + 66, 4, 67, -1, 112, -1, -1, 92, -1, -1, + 96, 97, -1, 96, 1, -1, 24, 98, 137, 105, + 87, -1, 25, 137, 105, 87, -1, 7, -1, 58, + 7, -1, 57, 7, -1, 8, -1, 84, -1, 31, + -1, 32, -1, 110, -1, 66, 111, 134, -1, -1, + -1, 10, 102, 116, -1, 19, 66, 112, 134, 105, + 89, -1, 19, 66, 112, 134, 105, 89, 20, 105, + 89, -1, 50, -1, 104, 50, -1, -1, 104, -1, + -1, 55, 117, -1, -1, 108, -1, 4, -1, 108, + 138, 4, -1, 1, -1, 108, 1, -1, 108, 138, + 1, -1, -1, 112, -1, -1, 111, -1, 112, -1, + 111, 138, 112, -1, 1, -1, 111, 1, -1, 111, + 1, 112, -1, 111, 138, 1, -1, 130, 113, 112, + -1, 112, 41, 112, -1, 112, 42, 112, -1, 112, + 14, 112, -1, 112, 40, 129, -1, 112, 115, 112, + -1, 112, 52, 112, 53, 112, -1, 116, -1, 13, + -1, 12, -1, 51, 13, -1, 9, -1, 55, -1, + 114, -1, 56, -1, 117, -1, 118, -1, 116, 117, + -1, 119, -1, 117, 64, 117, -1, 117, 59, 117, + -1, 117, 60, 117, -1, 117, 61, 117, -1, 117, + 57, 117, -1, 117, 58, 117, -1, 38, 122, 106, + -1, 130, 43, -1, 130, 44, -1, 66, 111, 134, + 40, 129, -1, 116, 11, 38, 122, -1, 118, 64, + 117, -1, 118, 59, 117, -1, 118, 60, 117, -1, + 118, 61, 117, -1, 118, 57, 117, -1, 118, 58, + 117, -1, 84, -1, 62, 117, -1, 66, 112, 134, + -1, 45, 66, 110, 134, -1, 46, 66, 110, 134, + -1, 46, -1, 120, -1, 130, -1, 43, 130, -1, + 44, 130, -1, 7, -1, 8, -1, 58, 117, -1, + 57, 117, -1, 121, -1, 68, 121, -1, 3, 66, + 110, 134, -1, -1, 130, -1, -1, 124, 16, -1, + 125, -1, 124, 125, -1, 126, -1, 69, 111, 70, + -1, 126, -1, 127, 126, -1, 127, 16, -1, 4, + -1, 4, 128, -1, 129, -1, 65, 119, 131, -1, + 43, -1, 44, -1, -1, 71, 105, -1, 72, 105, + -1, 67, -1, -1, 136, -1, 73, -1, 53, -1, + 54, 105, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ @@ -727,21 +727,21 @@ static const yytype_uint16 yyrline[] = 262, 270, 279, 281, 287, 288, 290, 316, 326, 336, 342, 351, 361, 363, 365, 376, 381, 382, 387, 386, 416, 415, 446, 448, 453, 454, 467, 472, 473, 477, - 479, 481, 488, 509, 555, 598, 708, 715, 722, 732, - 741, 750, 757, 782, 797, 796, 808, 820, 820, 916, - 916, 944, 970, 976, 977, 982, 1035, 1036, 1048, 1053, - 1072, 1090, 1095, 1102, 1108, 1113, 1121, 1123, 1132, 1133, - 1141, 1146, 1146, 1157, 1161, 1169, 1170, 1173, 1175, 1180, - 1181, 1188, 1190, 1194, 1200, 1207, 1209, 1211, 1218, 1219, - 1225, 1226, 1231, 1233, 1238, 1240, 1242, 1244, 1250, 1256, - 1258, 1260, 1275, 1284, 1290, 1292, 1297, 1299, 1301, 1309, - 1311, 1316, 1318, 1323, 1325, 1327, 1380, 1382, 1384, 1386, - 1388, 1390, 1392, 1394, 1415, 1420, 1425, 1448, 1454, 1456, - 1458, 1460, 1462, 1464, 1469, 1473, 1504, 1506, 1512, 1518, - 1530, 1531, 1532, 1537, 1542, 1546, 1550, 1562, 1575, 1580, - 1616, 1634, 1635, 1641, 1642, 1647, 1649, 1656, 1673, 1690, - 1692, 1699, 1704, 1712, 1726, 1738, 1747, 1751, 1755, 1759, - 1763, 1767, 1770, 1772, 1776, 1780, 1784 + 479, 481, 488, 581, 623, 665, 778, 785, 792, 802, + 811, 820, 827, 852, 867, 866, 878, 890, 890, 986, + 986, 1014, 1040, 1046, 1047, 1053, 1054, 1061, 1066, 1078, + 1092, 1094, 1100, 1105, 1107, 1115, 1117, 1126, 1127, 1135, + 1140, 1140, 1151, 1155, 1163, 1164, 1167, 1169, 1174, 1175, + 1182, 1184, 1188, 1194, 1201, 1203, 1205, 1212, 1213, 1219, + 1220, 1225, 1227, 1232, 1234, 1236, 1238, 1244, 1250, 1252, + 1254, 1269, 1278, 1284, 1286, 1291, 1293, 1295, 1303, 1305, + 1310, 1312, 1317, 1319, 1321, 1374, 1376, 1378, 1380, 1382, + 1384, 1386, 1388, 1409, 1414, 1419, 1442, 1448, 1450, 1452, + 1454, 1456, 1458, 1463, 1467, 1498, 1500, 1506, 1512, 1524, + 1525, 1526, 1531, 1536, 1540, 1544, 1556, 1569, 1574, 1610, + 1628, 1629, 1635, 1636, 1641, 1643, 1650, 1667, 1684, 1686, + 1693, 1698, 1706, 1720, 1732, 1741, 1745, 1749, 1753, 1757, + 1761, 1764, 1766, 1770, 1774, 1778 }; #endif @@ -765,16 +765,16 @@ static const char *const yytname[] = "rule", "source", "pattern", "action", "func_name", "lex_builtin", "function_prologue", "$@1", "regexp", "$@2", "a_slash", "statements", "statement_term", "statement", "non_compound_stmt", "$@3", "simple_stmt", - "$@4", "$@5", "opt_simple_stmt", "switch_body", "case_statements", - "case_statement", "case_value", "print", "print_expression_list", - "output_redir", "$@6", "if_statement", "nls", "opt_nls", "input_redir", - "opt_param_list", "param_list", "opt_exp", "opt_expression_list", - "expression_list", "exp", "assign_operator", "relop_or_less", "a_relop", - "common_exp", "simp_exp", "simp_exp_nc", "non_post_simp_exp", - "func_call", "direct_func_call", "opt_variable", "delete_subscript_list", - "delete_subscript", "delete_exp_list", "bracketed_exp_list", "subscript", - "subscript_list", "simple_variable", "variable", "opt_incdec", "l_brace", - "r_brace", "r_paren", "opt_semi", "semi", "colon", "comma", 0 + "$@4", "$@5", "opt_simple_stmt", "case_statements", "case_statement", + "case_value", "print", "print_expression_list", "output_redir", "$@6", + "if_statement", "nls", "opt_nls", "input_redir", "opt_param_list", + "param_list", "opt_exp", "opt_expression_list", "expression_list", "exp", + "assign_operator", "relop_or_less", "a_relop", "common_exp", "simp_exp", + "simp_exp_nc", "non_post_simp_exp", "func_call", "direct_func_call", + "opt_variable", "delete_subscript_list", "delete_subscript", + "delete_exp_list", "bracketed_exp_list", "subscript", "subscript_list", + "simple_variable", "variable", "opt_incdec", "l_brace", "r_brace", + "r_paren", "opt_semi", "semi", "colon", "comma", 0 }; #endif @@ -803,19 +803,19 @@ static const yytype_uint8 yyr1[] = 85, 84, 86, 86, 87, 87, 87, 88, 88, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 90, 90, 90, 90, 90, 91, 90, 90, 93, 92, 94, - 92, 92, 92, 95, 95, 96, 97, 97, 97, 98, - 98, 99, 99, 99, 99, 99, 100, 100, 101, 101, - 102, 103, 102, 104, 104, 105, 105, 106, 106, 107, - 107, 108, 108, 109, 109, 109, 109, 109, 110, 110, - 111, 111, 112, 112, 112, 112, 112, 112, 113, 113, - 113, 113, 113, 113, 113, 113, 114, 114, 114, 115, - 115, 116, 116, 117, 117, 117, 118, 118, 118, 118, - 118, 118, 118, 118, 118, 118, 118, 119, 119, 119, - 119, 119, 119, 119, 120, 120, 120, 120, 120, 120, - 120, 120, 120, 120, 120, 120, 120, 120, 121, 121, - 122, 123, 123, 124, 124, 125, 125, 126, 127, 128, - 128, 129, 130, 130, 131, 131, 132, 132, 132, 133, - 134, 135, 136, 136, 137, 138, 139 + 92, 92, 92, 95, 95, 96, 96, 96, 97, 97, + 98, 98, 98, 98, 98, 99, 99, 100, 100, 101, + 102, 101, 103, 103, 104, 104, 105, 105, 106, 106, + 107, 107, 108, 108, 108, 108, 108, 109, 109, 110, + 110, 111, 111, 111, 111, 111, 111, 112, 112, 112, + 112, 112, 112, 112, 112, 113, 113, 113, 114, 114, + 115, 115, 116, 116, 116, 117, 117, 117, 117, 117, + 117, 117, 117, 117, 117, 117, 118, 118, 118, 118, + 118, 118, 118, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 120, 120, 121, + 122, 122, 123, 123, 124, 124, 125, 126, 127, 127, + 128, 129, 129, 130, 130, 131, 131, 131, 132, 133, + 134, 135, 135, 136, 137, 138 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ @@ -827,19 +827,19 @@ static const yytype_uint8 yyr2[] = 0, 3, 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, 1, 0, 2, 2, 5, - 4, 1, 2, 2, 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, 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 + 4, 4, 1, 0, 1, 0, 2, 2, 5, 4, + 1, 2, 2, 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, 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 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state @@ -847,39 +847,39 @@ static const yytype_uint8 yyr2[] = means the default is an error. */ static const yytype_uint8 yydefact[] = { - 2, 0, 1, 6, 0, 172, 154, 155, 17, 18, - 28, 19, 20, 161, 0, 0, 0, 149, 5, 85, + 2, 0, 1, 6, 0, 171, 153, 154, 17, 18, + 28, 19, 20, 160, 0, 0, 0, 148, 5, 84, 33, 0, 0, 32, 0, 0, 0, 0, 3, 0, - 0, 144, 30, 4, 15, 115, 123, 124, 126, 150, - 158, 174, 151, 0, 0, 169, 0, 173, 0, 89, - 162, 152, 153, 0, 0, 0, 157, 151, 156, 145, - 0, 178, 151, 104, 0, 102, 0, 159, 87, 184, - 7, 8, 37, 34, 87, 9, 0, 86, 119, 0, - 0, 0, 0, 0, 0, 120, 122, 121, 0, 0, - 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 117, 116, 134, 135, 0, 0, 0, - 0, 102, 0, 171, 170, 23, 22, 26, 27, 0, - 0, 24, 0, 133, 0, 0, 0, 176, 177, 175, - 105, 87, 181, 0, 0, 146, 13, 0, 0, 88, - 179, 0, 38, 31, 111, 112, 109, 110, 0, 16, - 113, 161, 131, 132, 128, 129, 130, 127, 142, 143, - 139, 140, 141, 138, 118, 108, 160, 168, 25, 0, - 90, 147, 148, 106, 186, 0, 107, 103, 12, 10, - 36, 0, 54, 0, 0, 0, 87, 0, 0, 0, - 76, 77, 0, 98, 0, 87, 35, 48, 0, 57, - 41, 62, 34, 182, 87, 0, 137, 95, 93, 0, - 0, 136, 0, 98, 59, 0, 0, 0, 0, 63, - 49, 50, 51, 0, 99, 52, 180, 56, 0, 0, - 87, 183, 39, 114, 87, 96, 0, 0, 0, 163, - 0, 0, 0, 0, 172, 64, 0, 53, 0, 80, - 78, 40, 21, 29, 97, 94, 87, 55, 60, 0, - 165, 167, 61, 87, 87, 0, 0, 87, 0, 81, - 58, 0, 164, 166, 0, 0, 0, 0, 0, 79, - 0, 83, 66, 43, 0, 87, 0, 87, 82, 87, - 87, 0, 87, 0, 87, 63, 0, 0, 68, 0, - 0, 67, 44, 45, 63, 0, 84, 42, 71, 74, - 0, 0, 75, 0, 185, 87, 0, 87, 73, 72, - 87, 34, 87, 0, 34, 0, 0, 47, 0, 46 + 0, 143, 30, 4, 15, 114, 122, 123, 125, 149, + 157, 173, 150, 0, 0, 168, 0, 172, 0, 88, + 161, 151, 152, 0, 0, 0, 156, 150, 155, 144, + 0, 177, 150, 103, 0, 101, 0, 158, 86, 183, + 7, 8, 37, 34, 86, 9, 0, 85, 118, 0, + 0, 0, 0, 0, 0, 119, 121, 120, 0, 0, + 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 116, 115, 133, 134, 0, 0, 0, + 0, 101, 0, 170, 169, 23, 22, 26, 27, 0, + 0, 24, 0, 132, 0, 0, 0, 175, 176, 174, + 104, 86, 180, 0, 0, 145, 13, 0, 0, 87, + 178, 0, 38, 31, 110, 111, 108, 109, 0, 16, + 112, 160, 130, 131, 127, 128, 129, 126, 141, 142, + 138, 139, 140, 137, 117, 107, 159, 167, 25, 0, + 89, 146, 147, 105, 185, 0, 106, 102, 12, 10, + 36, 0, 54, 0, 0, 0, 86, 0, 0, 0, + 75, 76, 0, 97, 0, 86, 35, 48, 0, 57, + 41, 62, 34, 181, 86, 0, 136, 94, 92, 0, + 0, 135, 0, 97, 59, 0, 0, 0, 0, 63, + 49, 50, 51, 0, 98, 52, 179, 56, 0, 0, + 86, 182, 39, 113, 86, 95, 0, 0, 0, 162, + 0, 0, 0, 0, 171, 64, 0, 53, 0, 79, + 77, 40, 21, 29, 96, 93, 86, 55, 60, 0, + 164, 166, 61, 86, 86, 0, 0, 86, 0, 80, + 58, 0, 163, 165, 0, 0, 0, 0, 0, 78, + 0, 82, 65, 43, 0, 86, 0, 86, 81, 86, + 0, 86, 0, 86, 63, 0, 67, 0, 0, 66, + 0, 44, 45, 63, 0, 83, 70, 73, 0, 0, + 74, 0, 184, 86, 42, 0, 86, 72, 71, 86, + 34, 86, 0, 34, 0, 0, 47, 0, 46 }; /* YYDEFGOTO[NTERM-NUM]. */ @@ -887,306 +887,306 @@ static const yytype_int16 yydefgoto[] = { -1, 1, 28, 138, 29, 70, 120, 121, 30, 48, 31, 76, 32, 141, 71, 196, 197, 213, 198, 228, - 239, 246, 290, 291, 301, 313, 199, 249, 270, 280, - 200, 139, 140, 123, 209, 210, 223, 109, 110, 201, - 108, 87, 88, 35, 36, 37, 38, 39, 40, 49, - 258, 259, 260, 45, 46, 47, 41, 42, 129, 202, - 203, 135, 230, 204, 315, 134 + 239, 246, 290, 299, 311, 199, 249, 270, 280, 200, + 139, 140, 123, 209, 210, 223, 109, 110, 201, 108, + 87, 88, 35, 36, 37, 38, 39, 40, 49, 258, + 259, 260, 45, 46, 47, 41, 42, 129, 202, 203, + 135, 230, 204, 313, 134 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ -#define YYPACT_NINF -267 +#define YYPACT_NINF -268 static const yytype_int16 yypact[] = { - -267, 330, -267, -267, -36, -37, -267, -267, -267, -267, - -267, -267, -267, 20, 20, 20, -30, -20, -267, -267, - -267, 973, 973, -267, 973, 1018, 799, 6, -267, -15, - -21, -267, -267, 10, 1057, 947, 300, 325, -267, -267, - -267, -267, 299, 731, 799, -267, 53, -267, 112, 66, - -267, -267, -267, 731, 731, 122, 70, -3, 70, 70, - 973, 88, -267, -267, 50, 1051, 25, -267, 97, -267, - -267, -267, 10, -267, 97, -267, 143, -267, -267, 973, - 146, 973, 973, 973, 973, -267, -267, -267, 973, 113, - 300, 973, 973, 973, 973, 973, 973, 973, 973, 973, - 973, 973, 973, -267, -267, -267, -267, 139, 973, 87, - 118, 1086, 7, -267, -267, -267, -267, -267, -267, 121, - 96, -267, 973, -267, 87, 87, 1051, -267, -267, -267, - 973, 97, -267, 137, 825, -267, -267, 36, -16, 10, - -267, 547, -267, -267, 19, -267, 260, 251, 1080, 1086, - 105, 20, 115, 115, 70, 70, 70, 70, 115, 115, - 70, 70, 70, 70, -267, 1086, -267, -267, -267, 63, - 300, -267, -267, 1086, -267, 146, -267, 1086, -267, -267, - -267, 116, -267, 45, 120, 124, 97, 129, -16, -16, - -267, -267, -16, 973, -16, 97, -267, -267, -16, -267, - -267, 1086, -267, 123, 97, 973, -267, -267, -267, 87, - 117, -267, 973, 973, -267, 193, 973, 973, 660, 870, - -267, -267, -267, -16, 1086, -267, -267, -267, 593, 547, - 97, -267, -267, 1086, 97, -267, 72, 1051, -16, -37, - 133, 1051, 1051, 175, -22, -267, 123, -267, 799, 192, - -267, -267, -267, -267, -267, -267, 97, -267, -267, 90, - -267, -267, -267, 97, 97, 141, 146, 97, 50, -267, - -267, 660, -267, -267, -21, 660, 973, 87, 705, 137, - 973, 183, -267, -267, 1051, 97, 262, 97, 947, 97, - 97, 38, 97, 660, 97, 902, 660, 136, -267, 198, - 156, -267, -267, -267, 902, 87, -267, -267, -267, -267, - 203, 210, -267, 156, -267, 97, 87, 97, -267, -267, - 97, -267, 97, 660, -267, 401, 660, -267, 474, -267 + -268, 322, -268, -268, -36, -35, -268, -268, -268, -268, + -268, -268, -268, 20, 20, 20, -26, -21, -268, -268, + -268, 965, 965, -268, 965, 1010, 791, 12, -268, -32, + -33, -268, -268, 23, 1049, 939, 317, 345, -268, -268, + -268, -268, 291, 723, 791, -268, 15, -268, 203, 1, + -268, -268, -268, 723, 723, 72, 42, 26, 42, 42, + 965, 104, -268, -268, 108, 296, 31, -268, 64, -268, + -268, -268, 23, -268, 64, -268, 111, -268, -268, 965, + 120, 965, 965, 965, 965, -268, -268, -268, 965, 83, + 317, 965, 965, 965, 965, 965, 965, 965, 965, 965, + 965, 965, 965, -268, -268, -268, -268, 114, 965, 84, + 61, 1088, 116, -268, -268, -268, -268, -268, -268, 105, + 87, -268, 965, -268, 84, 84, 296, -268, -268, -268, + 965, 64, -268, 118, 817, -268, -268, 13, -15, 23, + -268, 539, -268, -268, 121, -268, 217, 241, 1068, 1088, + 141, 20, -10, -10, 42, 42, 42, 42, -10, -10, + 42, 42, 42, 42, -268, 1088, -268, -268, -268, 43, + 317, -268, -268, 1088, -268, 120, -268, 1088, -268, -268, + -268, 90, -268, 6, 94, 99, 64, 102, -15, -15, + -268, -268, -15, 965, -15, 64, -268, -268, -15, -268, + -268, 1088, -268, 101, 64, 965, -268, -268, -268, 84, + 117, -268, 965, 965, -268, 176, 965, 965, 652, 862, + -268, -268, -268, -15, 1088, -268, -268, -268, 585, 539, + 64, -268, -268, 1088, 64, -268, 63, 296, -15, -35, + 123, 296, 296, 155, -14, -268, 101, -268, 791, 175, + -268, -268, -268, -268, -268, -268, 64, -268, -268, 103, + -268, -268, -268, 64, 64, 122, 120, 64, 108, -268, + -268, 652, -268, -268, -33, 652, 965, 84, 697, 118, + 965, 167, -268, -268, 296, 64, 1043, 64, 939, 64, + 107, 64, 652, 64, 894, 652, -268, 194, 138, -268, + 128, -268, -268, 894, 84, -268, -268, -268, 196, 198, + -268, 138, -268, 64, -268, 84, 64, -268, -268, 64, + -268, 64, 652, -268, 393, 652, -268, 466, -268 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -267, -267, -267, -267, -267, 188, -267, -267, -267, -267, - -77, -267, -267, -197, 56, -170, -267, -267, -192, -267, - -267, -266, -267, -267, -267, -267, -267, -267, -267, -267, - -267, 43, 34, -267, -267, -267, 11, -39, -23, -1, - -267, -267, -267, -52, 44, -267, 201, -267, -10, 82, - -267, -267, -19, -40, -267, -267, -73, -2, -267, -28, - -213, -54, -267, -25, -79, 26 + -268, -268, -268, -268, -268, 178, -268, -268, -268, -268, + -87, -268, -268, -197, 71, -170, -268, -268, -191, -268, + -268, -267, -268, -268, -268, -268, -268, -268, -268, -268, + 45, 28, -268, -268, -268, 4, -46, -23, -1, -268, + -268, -268, -62, 44, -268, 197, -268, 2, 73, -268, + -268, -31, -40, -268, -268, -71, -2, -268, -28, -212, + -48, -268, -25, -81, 25 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If zero, do what YYDEFACT says. If YYTABLE_NINF, syntax error. */ -#define YYTABLE_NINF -102 +#define YYTABLE_NINF -101 static const yytype_int16 yytable[] = { - 34, 73, 73, 64, 74, 229, 114, 145, 130, 4, - 133, 50, 51, 52, 124, 125, 251, 67, 266, 57, - 57, 112, 57, 62, 5, 65, 136, 245, 78, 305, - 43, 137, 44, 57, 19, 19, 53, 178, 316, 298, - 105, 106, 111, 111, 33, 67, 54, 44, 243, 214, - 68, 130, 111, 111, 66, 166, 68, 69, 69, 126, - 77, 131, 299, 300, 207, 56, 58, 208, 59, 113, - 171, 172, 72, 254, 85, 86, 255, 167, 144, 90, - 146, 147, 148, 149, 307, 25, -11, 150, -65, 57, + 34, 73, 73, 64, 74, 229, 114, 124, 125, 145, + 214, 50, 51, 52, 178, 4, 133, 251, 19, 57, + 57, 112, 57, 62, 5, 65, 266, 304, 245, 67, + 43, 113, 136, 57, 44, 19, 315, 137, 68, 68, + 53, 69, 111, 111, 207, 54, 33, 208, 243, 93, + 94, 95, 111, 111, 96, 44, 122, 67, 69, 126, + 66, 166, 130, -11, 254, 56, 58, 255, 59, 105, + 106, -100, 215, 77, 72, 4, 171, 172, 144, 90, + 146, 147, 148, 149, 44, 25, -11, 150, 314, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 281, 211, 245, 131, 283, 272, 165, 142, -11, - -65, 215, 245, 74, -102, 115, 116, 132, 235, 130, - 57, 122, 44, 303, 325, 4, 306, 328, -101, 173, - -91, 127, 128, 177, 96, 152, 153, 154, 155, 156, - 157, 158, 159, 160, 161, 162, 163, 19, 143, 50, - 5, 151, 164, 327, 132, 234, 329, 117, 118, 44, - -102, -102, 169, 74, 74, 174, 170, 74, -101, 74, - 168, 131, 131, 74, 93, 94, 95, 175, 231, 96, - 119, 72, 212, 256, -92, -101, 216, 263, 264, 250, - 217, -101, 224, 277, 179, 219, 69, 240, 74, 261, - 262, 265, 269, 289, 233, 308, 309, 276, 195, 314, - 318, 237, 224, 74, 279, 241, 242, 319, 75, 261, - 218, 267, 312, 285, 238, 268, 61, 111, 288, 226, - 292, 72, 72, 206, 320, 72, 236, 72, 232, 0, - 273, 72, 0, 0, 220, 221, 282, 65, 222, 20, - 225, 317, 0, 287, 227, 310, 311, 0, 23, 0, - 78, 294, 322, 0, 252, 79, 72, 0, 253, 78, - 0, 78, 0, 0, 79, 284, 79, 286, 57, 247, - 0, 72, 0, 0, 0, 0, 57, 0, 0, 0, - 271, 80, 81, 0, 257, 0, 0, 274, 275, 0, - 80, 278, 80, 81, 82, 0, 85, 86, 0, 0, - 0, 103, 104, 0, 83, 85, 86, 85, 86, 293, - 0, 295, 0, 296, 297, 0, 302, 0, 304, 0, - 2, 3, 90, 4, 5, 69, 0, 6, 7, 0, - 0, 0, 105, 106, 0, 0, 0, 8, 9, 321, - 107, 323, 0, 0, 324, 0, 326, 91, 92, 93, - 94, 95, 0, 0, 96, 10, 11, 12, 13, 0, - 0, 0, 0, 14, 15, 16, 17, 18, 0, 0, - 19, 20, 97, 98, 99, 100, 101, 21, 22, 102, - 23, 0, 24, 0, 0, 25, 26, 0, 27, 0, - 0, -14, 180, -14, 4, 5, 0, 0, 6, 7, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 181, 0, 182, 183, 184, -70, -70, 185, 186, 187, - 188, 189, 190, 191, 192, 193, 0, 0, 0, 13, - 194, 0, 0, 0, 14, 15, 16, 17, 0, 0, - 0, -70, 20, 0, 0, 0, 0, 0, 21, 22, - 0, 23, 0, 24, 0, 0, 25, 26, 0, 55, - 0, 0, 68, -70, 69, 180, 0, 4, 5, 0, - 0, 6, 7, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 181, 0, 182, 183, 184, -69, -69, - 185, 186, 187, 188, 189, 190, 191, 192, 193, 0, - 0, 0, 13, 194, 0, 0, 0, 14, 15, 16, - 17, 0, 0, 0, -69, 20, 0, 0, 0, 0, - 0, 21, 22, 0, 23, 0, 24, 0, 0, 25, - 26, 0, 55, 0, 0, 68, -69, 69, 180, 0, - 4, 5, 0, 0, 6, 7, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 181, 0, 182, 183, - 184, 0, 0, 185, 186, 187, 188, 189, 190, 191, - 192, 193, 0, 0, 0, 13, 194, 0, 0, 0, - 14, 15, 16, 17, 63, 0, 4, 5, 20, 0, - 6, 7, 0, -100, 21, 22, 0, 23, 0, 24, - 0, 0, 25, 26, 0, 55, 0, 0, 68, 195, - 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 13, 0, 0, 0, 0, 14, 15, 16, 17, - 0, 0, 0, -100, 20, 0, 0, 0, 0, 0, - 21, 22, 0, 23, 0, 24, 0, 0, 25, 248, - -100, 55, 0, 4, 5, 0, -100, 6, 7, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, - 0, 182, 183, 184, 0, 0, 185, 186, 187, 188, - 189, 190, 191, 192, 193, 0, 0, 0, 13, 194, - 0, 0, 0, 14, 15, 16, 17, 0, 4, 5, - 0, 20, 6, 7, 0, 0, 0, 21, 22, 0, - 23, 0, 24, 0, 0, 25, 26, 0, 55, 0, - 0, 68, 63, 69, 4, 5, 0, 0, 6, 7, + 57, 281, 142, 245, 211, 283, 96, 165, 296, 130, + -90, -100, 245, 74, 19, 131, 143, 130, 235, 272, + 57, 151, 302, 324, 5, 305, 327, 164, -100, 173, + 78, 297, 298, 177, -100, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 127, 128, 50, + -101, 132, 326, 169, 168, 328, 212, 19, 175, 174, + 216, 234, 131, 74, 74, 217, 170, 74, 219, 74, + 131, 131, 44, 74, 69, 132, 85, 86, 231, -86, + 240, 265, 250, 72, -91, 269, 167, 289, 276, 256, + 262, 312, 224, 263, 264, 277, -101, -101, 74, 261, + 195, 306, 307, 317, 233, 318, 115, 116, 75, 179, + 310, 237, 224, 74, 218, 241, 242, 238, 288, 261, + 279, 267, 61, 226, 206, 268, 78, 111, 273, 285, + 319, 79, 232, 72, 72, 236, 291, 72, 0, 72, + 0, 0, 0, 72, 0, 20, 282, 65, 117, 118, + 78, 308, 309, 287, 23, 79, 316, 80, 252, 220, + 221, 293, 253, 222, 0, 225, 0, 321, 72, 227, + 0, 119, 85, 86, 0, 284, 0, 286, 57, 0, + 0, 80, 81, 72, 271, 0, 57, 0, 0, 0, + 0, 274, 275, 0, 247, 278, 85, 86, 0, 0, + 0, 0, 0, 103, 104, 78, 0, 0, 0, 257, + 79, 0, 0, 292, 0, 294, 0, 295, 300, 301, + 0, 303, 2, 3, 0, 4, 5, 0, 0, 6, + 7, 0, 90, 0, 105, 106, 80, 81, 82, 8, + 9, 320, 107, 0, 322, 0, 0, 323, 83, 325, + 0, 85, 86, 0, 0, 0, 0, 10, 11, 12, + 13, 0, 0, 132, 0, 14, 15, 16, 17, 18, + 0, 0, 19, 20, 91, 92, 93, 94, 95, 21, + 22, 96, 23, 0, 24, 0, 0, 25, 26, 0, + 27, 0, 0, -14, 180, -14, 4, 5, 0, 0, + 6, 7, 97, 98, 99, 100, 101, 0, 0, 102, + 0, 0, 181, 0, 182, 183, 184, -69, -69, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 0, 0, + 0, 13, 194, 0, 0, 0, 14, 15, 16, 17, + 0, 0, 0, -69, 20, 0, 0, 0, 0, 0, + 21, 22, 0, 23, 0, 24, 0, 0, 25, 26, + 0, 55, 0, 0, 68, -69, 69, 180, 0, 4, + 5, 0, 0, 6, 7, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 181, 0, 182, 183, 184, + -68, -68, 185, 186, 187, 188, 189, 190, 191, 192, + 193, 0, 0, 0, 13, 194, 0, 0, 0, 14, + 15, 16, 17, 0, 0, 0, -68, 20, 0, 0, + 0, 0, 0, 21, 22, 0, 23, 0, 24, 0, + 0, 25, 26, 0, 55, 0, 0, 68, -68, 69, + 180, 0, 4, 5, 0, 0, 6, 7, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 181, 0, + 182, 183, 184, 0, 0, 185, 186, 187, 188, 189, + 190, 191, 192, 193, 0, 0, 0, 13, 194, 0, + 0, 0, 14, 15, 16, 17, 63, 0, 4, 5, + 20, 0, 6, 7, 0, -99, 21, 22, 0, 23, + 0, 24, 0, 0, 25, 26, 0, 55, 0, 0, + 68, 195, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 14, 15, - 16, 17, 0, 0, 0, 0, 20, 0, 0, 0, - 0, 0, 21, 22, 0, 23, 0, 24, 0, 13, - 25, 26, 0, 55, 14, 15, 16, 17, 69, 0, - 0, 0, 20, 0, 0, 0, 0, 0, 21, 22, - 0, 23, 0, 24, 0, 0, 25, 26, -100, 55, - 63, 0, 4, 5, 0, 0, 6, 7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 176, 0, 4, 5, - 0, 0, 6, 7, 0, 0, 0, 13, 0, 0, - 0, 0, 14, 15, 16, 17, 0, 0, 0, 0, - 20, 0, 0, 0, 0, 0, 21, 22, 0, 23, - 0, 24, 0, 13, 25, 26, 0, 55, 14, 15, - 16, 17, 0, 4, 244, 0, 20, 6, 7, 0, + 16, 17, 0, 0, 0, -99, 20, 0, 0, 0, 0, 0, 21, 22, 0, 23, 0, 24, 0, 0, - 25, 26, 183, 55, 0, 0, 0, 0, 0, 0, - 0, 190, 191, 0, 0, 4, 5, 0, 13, 6, - 7, 0, 0, 14, 15, 16, 17, 0, 0, 0, - 0, 20, 0, 0, 183, 0, 0, 21, 22, 0, - 23, 0, 24, 190, 191, 25, 26, 0, 55, 0, - 13, 0, 0, 0, 0, 14, 15, 16, 17, 0, - 4, 5, 0, 20, 6, 7, 0, 0, 89, 21, + 25, 248, -99, 55, 0, 4, 5, 0, -99, 6, + 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 181, 0, 182, 183, 184, 0, 0, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 0, 0, 0, + 13, 194, 0, 0, 0, 14, 15, 16, 17, 0, + 4, 5, 0, 20, 6, 7, 0, 0, 0, 21, 22, 0, 23, 0, 24, 0, 0, 25, 26, 0, - 55, 0, 0, 0, 0, 0, 4, 5, 0, 0, + 55, 0, 0, 68, 63, 69, 4, 5, 0, 0, 6, 7, 0, 0, 0, 13, 0, 0, 0, 0, 14, 15, 16, 17, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 21, 22, 0, 23, 0, 24, 0, 13, 25, 26, 0, 55, 14, 15, 16, 17, - 0, 4, 5, 0, 20, 6, 7, 0, 0, 0, + 69, 0, 0, 0, 20, 0, 0, 0, 0, 0, 21, 22, 0, 23, 0, 24, 0, 0, 25, 26, - 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, + -99, 55, 63, 0, 4, 5, 0, 0, 6, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 176, 0, + 4, 5, 0, 0, 6, 7, 0, 0, 0, 13, + 0, 0, 0, 0, 14, 15, 16, 17, 0, 0, + 0, 0, 20, 0, 0, 0, 0, 0, 21, 22, + 0, 23, 0, 24, 0, 13, 25, 26, 0, 55, + 14, 15, 16, 17, 0, 4, 244, 0, 20, 6, + 7, 0, 0, 0, 21, 22, 0, 23, 0, 24, + 0, 0, 25, 26, 183, 55, 0, 0, 0, 0, + 0, 0, 0, 190, 191, 0, 0, 4, 5, 0, + 13, 6, 7, 0, 0, 14, 15, 16, 17, 0, + 0, 0, 0, 20, 0, 0, 183, 0, 0, 21, + 22, 0, 23, 0, 24, 190, 191, 25, 26, 0, + 55, 0, 13, 0, 0, 0, 0, 14, 15, 16, + 17, 0, 4, 5, 0, 20, 6, 7, 0, 0, + 89, 21, 22, 0, 23, 0, 24, 0, 0, 25, + 26, 0, 55, 0, 0, 0, 0, 0, 4, 5, + 0, 0, 6, 7, 0, 0, 0, 13, 0, 0, + 0, 0, 14, 15, 16, 17, 0, 0, 0, 0, + 20, 0, 0, 0, 0, 0, 21, 22, 0, 23, + 0, 24, 0, 13, 25, 26, 0, 55, 14, 15, + 16, 17, 0, 4, 5, 0, 20, 6, 7, 0, + 0, 0, 21, 22, 0, 23, 0, 24, 0, 0, + 25, 26, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 78, 14, 15, 16, 17, 79, 78, 0, 0, 20, - 0, 79, 0, 0, 0, 21, 22, 0, 23, 0, - 24, 0, 0, 25, 60, 0, 55, 0, 0, 78, - 0, 80, 81, 82, 79, 78, 0, 80, 81, 82, - 79, 0, 0, 83, 0, 0, 85, 86, 0, 83, - 0, 84, 85, 86, 0, 0, 0, 0, 132, 0, - 80, 81, 82, 0, 0, 0, 80, 81, 82, 0, - 0, 0, 83, 205, 0, 85, 86, 0, 83, 0, - 0, 85, 86 + 0, 0, 78, 14, 15, 16, 17, 79, 78, 0, + 0, 20, 0, 79, 0, 0, 0, 21, 22, 0, + 23, 0, 24, 0, 0, 25, 60, 78, 55, 0, + 0, 0, 79, 80, 81, 82, 0, 0, 0, 80, + 81, 82, 0, 0, 0, 83, 0, 78, 85, 86, + 0, 83, 79, 84, 85, 86, 0, 0, 80, 81, + 82, 0, 0, 0, 0, 0, 69, 0, 0, 0, + 83, 205, 0, 85, 86, 0, 0, 0, 80, 81, + 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 83, 0, 0, 85, 86 }; static const yytype_int16 yycheck[] = { - 1, 29, 30, 26, 29, 202, 46, 80, 1, 3, - 64, 13, 14, 15, 53, 54, 229, 27, 40, 21, - 22, 44, 24, 25, 4, 26, 1, 219, 9, 295, - 66, 6, 69, 35, 50, 50, 66, 1, 304, 1, - 43, 44, 43, 44, 1, 55, 66, 69, 218, 4, - 71, 1, 53, 54, 48, 109, 71, 73, 73, 60, - 50, 54, 24, 25, 1, 21, 22, 4, 24, 16, - 124, 125, 29, 1, 55, 56, 4, 70, 79, 35, - 81, 82, 83, 84, 297, 65, 50, 88, 50, 91, + 1, 29, 30, 26, 29, 202, 46, 53, 54, 80, + 4, 13, 14, 15, 1, 3, 64, 229, 50, 21, + 22, 44, 24, 25, 4, 26, 40, 294, 219, 27, + 66, 16, 1, 35, 69, 50, 303, 6, 71, 71, + 66, 73, 43, 44, 1, 66, 1, 4, 218, 59, + 60, 61, 53, 54, 64, 69, 55, 55, 73, 60, + 48, 109, 1, 50, 1, 21, 22, 4, 24, 43, + 44, 10, 66, 50, 29, 3, 124, 125, 79, 35, + 81, 82, 83, 84, 69, 65, 73, 88, 300, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, - 102, 271, 175, 295, 54, 275, 16, 108, 74, 73, - 72, 66, 304, 138, 9, 3, 4, 67, 1, 1, - 122, 55, 69, 293, 321, 3, 296, 324, 10, 130, - 67, 43, 44, 134, 64, 91, 92, 93, 94, 95, - 96, 97, 98, 99, 100, 101, 102, 50, 5, 151, - 4, 38, 13, 323, 67, 209, 326, 45, 46, 69, - 55, 56, 66, 188, 189, 131, 122, 192, 50, 194, - 49, 54, 54, 198, 59, 60, 61, 40, 203, 64, - 68, 138, 66, 237, 67, 67, 66, 241, 242, 228, - 66, 73, 193, 266, 138, 66, 73, 4, 223, 239, - 67, 26, 10, 20, 205, 7, 8, 66, 72, 53, - 7, 212, 213, 238, 268, 216, 217, 7, 30, 259, - 186, 246, 299, 277, 213, 248, 25, 228, 280, 195, - 284, 188, 189, 151, 313, 192, 210, 194, 204, -1, - 259, 198, -1, -1, 188, 189, 274, 248, 192, 51, - 194, 305, -1, 278, 198, 57, 58, -1, 60, -1, - 9, 286, 316, -1, 230, 14, 223, -1, 234, 9, - -1, 9, -1, -1, 14, 276, 14, 278, 280, 223, - -1, 238, -1, -1, -1, -1, 288, -1, -1, -1, - 256, 40, 41, -1, 238, -1, -1, 263, 264, -1, - 40, 267, 40, 41, 42, -1, 55, 56, -1, -1, - -1, 12, 13, -1, 52, 55, 56, 55, 56, 285, - -1, 287, -1, 289, 290, -1, 292, -1, 294, -1, - 0, 1, 288, 3, 4, 73, -1, 7, 8, -1, - -1, -1, 43, 44, -1, -1, -1, 17, 18, 315, - 51, 317, -1, -1, 320, -1, 322, 57, 58, 59, - 60, 61, -1, -1, 64, 35, 36, 37, 38, -1, - -1, -1, -1, 43, 44, 45, 46, 47, -1, -1, - 50, 51, 57, 58, 59, 60, 61, 57, 58, 64, - 60, -1, 62, -1, -1, 65, 66, -1, 68, -1, - -1, 71, 1, 73, 3, 4, -1, -1, 7, 8, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 19, -1, 21, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 31, 32, 33, 34, -1, -1, -1, 38, - 39, -1, -1, -1, 43, 44, 45, 46, -1, -1, - -1, 50, 51, -1, -1, -1, -1, -1, 57, 58, - -1, 60, -1, 62, -1, -1, 65, 66, -1, 68, - -1, -1, 71, 72, 73, 1, -1, 3, 4, -1, - -1, 7, 8, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 19, -1, 21, 22, 23, 24, 25, - 26, 27, 28, 29, 30, 31, 32, 33, 34, -1, - -1, -1, 38, 39, -1, -1, -1, 43, 44, 45, - 46, -1, -1, -1, 50, 51, -1, -1, -1, -1, - -1, 57, 58, -1, 60, -1, 62, -1, -1, 65, - 66, -1, 68, -1, -1, 71, 72, 73, 1, -1, - 3, 4, -1, -1, 7, 8, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 19, -1, 21, 22, - 23, -1, -1, 26, 27, 28, 29, 30, 31, 32, - 33, 34, -1, -1, -1, 38, 39, -1, -1, -1, - 43, 44, 45, 46, 1, -1, 3, 4, 51, -1, - 7, 8, -1, 10, 57, 58, -1, 60, -1, 62, - -1, -1, 65, 66, -1, 68, -1, -1, 71, 72, - 73, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 38, -1, -1, -1, -1, 43, 44, 45, 46, + 102, 271, 74, 294, 175, 275, 64, 108, 1, 1, + 67, 50, 303, 138, 50, 54, 5, 1, 1, 16, + 122, 38, 292, 320, 4, 295, 323, 13, 67, 130, + 9, 24, 25, 134, 73, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 43, 44, 151, + 9, 67, 322, 66, 49, 325, 66, 50, 40, 131, + 66, 209, 54, 188, 189, 66, 122, 192, 66, 194, + 54, 54, 69, 198, 73, 67, 55, 56, 203, 72, + 4, 26, 228, 138, 67, 10, 70, 20, 66, 237, + 67, 53, 193, 241, 242, 266, 55, 56, 223, 239, + 72, 7, 8, 7, 205, 7, 3, 4, 30, 138, + 297, 212, 213, 238, 186, 216, 217, 213, 280, 259, + 268, 246, 25, 195, 151, 248, 9, 228, 259, 277, + 311, 14, 204, 188, 189, 210, 284, 192, -1, 194, + -1, -1, -1, 198, -1, 51, 274, 248, 45, 46, + 9, 57, 58, 278, 60, 14, 304, 40, 230, 188, + 189, 286, 234, 192, -1, 194, -1, 315, 223, 198, + -1, 68, 55, 56, -1, 276, -1, 278, 280, -1, + -1, 40, 41, 238, 256, -1, 288, -1, -1, -1, + -1, 263, 264, -1, 223, 267, 55, 56, -1, -1, + -1, -1, -1, 12, 13, 9, -1, -1, -1, 238, + 14, -1, -1, 285, -1, 287, -1, 289, 290, 291, + -1, 293, 0, 1, -1, 3, 4, -1, -1, 7, + 8, -1, 288, -1, 43, 44, 40, 41, 42, 17, + 18, 313, 51, -1, 316, -1, -1, 319, 52, 321, + -1, 55, 56, -1, -1, -1, -1, 35, 36, 37, + 38, -1, -1, 67, -1, 43, 44, 45, 46, 47, + -1, -1, 50, 51, 57, 58, 59, 60, 61, 57, + 58, 64, 60, -1, 62, -1, -1, 65, 66, -1, + 68, -1, -1, 71, 1, 73, 3, 4, -1, -1, + 7, 8, 57, 58, 59, 60, 61, -1, -1, 64, + -1, -1, 19, -1, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, -1, -1, + -1, 38, 39, -1, -1, -1, 43, 44, 45, 46, -1, -1, -1, 50, 51, -1, -1, -1, -1, -1, 57, 58, -1, 60, -1, 62, -1, -1, 65, 66, - 67, 68, -1, 3, 4, -1, 73, 7, 8, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 19, - -1, 21, 22, 23, -1, -1, 26, 27, 28, 29, - 30, 31, 32, 33, 34, -1, -1, -1, 38, 39, - -1, -1, -1, 43, 44, 45, 46, -1, 3, 4, - -1, 51, 7, 8, -1, -1, -1, 57, 58, -1, - 60, -1, 62, -1, -1, 65, 66, -1, 68, -1, - -1, 71, 1, 73, 3, 4, -1, -1, 7, 8, - -1, -1, -1, 38, -1, -1, -1, -1, 43, 44, - 45, 46, -1, -1, -1, -1, 51, -1, -1, -1, - -1, -1, 57, 58, -1, 60, -1, 62, -1, 38, - 65, 66, -1, 68, 43, 44, 45, 46, 73, -1, - -1, -1, 51, -1, -1, -1, -1, -1, 57, 58, - -1, 60, -1, 62, -1, -1, 65, 66, 67, 68, + -1, 68, -1, -1, 71, 72, 73, 1, -1, 3, + 4, -1, -1, 7, 8, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 19, -1, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, -1, -1, -1, 38, 39, -1, -1, -1, 43, + 44, 45, 46, -1, -1, -1, 50, 51, -1, -1, + -1, -1, -1, 57, 58, -1, 60, -1, 62, -1, + -1, 65, 66, -1, 68, -1, -1, 71, 72, 73, 1, -1, 3, 4, -1, -1, 7, 8, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 1, -1, 3, 4, - -1, -1, 7, 8, -1, -1, -1, 38, -1, -1, - -1, -1, 43, 44, 45, 46, -1, -1, -1, -1, - 51, -1, -1, -1, -1, -1, 57, 58, -1, 60, - -1, 62, -1, 38, 65, 66, -1, 68, 43, 44, - 45, 46, -1, 3, 4, -1, 51, 7, 8, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 19, -1, + 21, 22, 23, -1, -1, 26, 27, 28, 29, 30, + 31, 32, 33, 34, -1, -1, -1, 38, 39, -1, + -1, -1, 43, 44, 45, 46, 1, -1, 3, 4, + 51, -1, 7, 8, -1, 10, 57, 58, -1, 60, + -1, 62, -1, -1, 65, 66, -1, 68, -1, -1, + 71, 72, 73, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 38, -1, -1, -1, -1, 43, 44, + 45, 46, -1, -1, -1, 50, 51, -1, -1, -1, -1, -1, 57, 58, -1, 60, -1, 62, -1, -1, - 65, 66, 22, 68, -1, -1, -1, -1, -1, -1, - -1, 31, 32, -1, -1, 3, 4, -1, 38, 7, - 8, -1, -1, 43, 44, 45, 46, -1, -1, -1, - -1, 51, -1, -1, 22, -1, -1, 57, 58, -1, - 60, -1, 62, 31, 32, 65, 66, -1, 68, -1, - 38, -1, -1, -1, -1, 43, 44, 45, 46, -1, - 3, 4, -1, 51, 7, 8, -1, -1, 11, 57, + 65, 66, 67, 68, -1, 3, 4, -1, 73, 7, + 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 19, -1, 21, 22, 23, -1, -1, 26, 27, + 28, 29, 30, 31, 32, 33, 34, -1, -1, -1, + 38, 39, -1, -1, -1, 43, 44, 45, 46, -1, + 3, 4, -1, 51, 7, 8, -1, -1, -1, 57, 58, -1, 60, -1, 62, -1, -1, 65, 66, -1, - 68, -1, -1, -1, -1, -1, 3, 4, -1, -1, + 68, -1, -1, 71, 1, 73, 3, 4, -1, -1, 7, 8, -1, -1, -1, 38, -1, -1, -1, -1, 43, 44, 45, 46, -1, -1, -1, -1, 51, -1, -1, -1, -1, -1, 57, 58, -1, 60, -1, 62, -1, 38, 65, 66, -1, 68, 43, 44, 45, 46, - -1, 3, 4, -1, 51, 7, 8, -1, -1, -1, + 73, -1, -1, -1, 51, -1, -1, -1, -1, -1, 57, 58, -1, 60, -1, 62, -1, -1, 65, 66, - -1, 68, -1, -1, -1, -1, -1, -1, -1, -1, + 67, 68, 1, -1, 3, 4, -1, -1, 7, 8, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, + 3, 4, -1, -1, 7, 8, -1, -1, -1, 38, + -1, -1, -1, -1, 43, 44, 45, 46, -1, -1, + -1, -1, 51, -1, -1, -1, -1, -1, 57, 58, + -1, 60, -1, 62, -1, 38, 65, 66, -1, 68, + 43, 44, 45, 46, -1, 3, 4, -1, 51, 7, + 8, -1, -1, -1, 57, 58, -1, 60, -1, 62, + -1, -1, 65, 66, 22, 68, -1, -1, -1, -1, + -1, -1, -1, 31, 32, -1, -1, 3, 4, -1, + 38, 7, 8, -1, -1, 43, 44, 45, 46, -1, + -1, -1, -1, 51, -1, -1, 22, -1, -1, 57, + 58, -1, 60, -1, 62, 31, 32, 65, 66, -1, + 68, -1, 38, -1, -1, -1, -1, 43, 44, 45, + 46, -1, 3, 4, -1, 51, 7, 8, -1, -1, + 11, 57, 58, -1, 60, -1, 62, -1, -1, 65, + 66, -1, 68, -1, -1, -1, -1, -1, 3, 4, + -1, -1, 7, 8, -1, -1, -1, 38, -1, -1, + -1, -1, 43, 44, 45, 46, -1, -1, -1, -1, + 51, -1, -1, -1, -1, -1, 57, 58, -1, 60, + -1, 62, -1, 38, 65, 66, -1, 68, 43, 44, + 45, 46, -1, 3, 4, -1, 51, 7, 8, -1, + -1, -1, 57, 58, -1, 60, -1, 62, -1, -1, + 65, 66, -1, 68, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 9, 43, 44, 45, 46, 14, 9, -1, -1, 51, - -1, 14, -1, -1, -1, 57, 58, -1, 60, -1, - 62, -1, -1, 65, 66, -1, 68, -1, -1, 9, - -1, 40, 41, 42, 14, 9, -1, 40, 41, 42, - 14, -1, -1, 52, -1, -1, 55, 56, -1, 52, - -1, 54, 55, 56, -1, -1, -1, -1, 67, -1, - 40, 41, 42, -1, -1, -1, 40, 41, 42, -1, - -1, -1, 52, 53, -1, 55, 56, -1, 52, -1, - -1, 55, 56 + -1, -1, 9, 43, 44, 45, 46, 14, 9, -1, + -1, 51, -1, 14, -1, -1, -1, 57, 58, -1, + 60, -1, 62, -1, -1, 65, 66, 9, 68, -1, + -1, -1, 14, 40, 41, 42, -1, -1, -1, 40, + 41, 42, -1, -1, -1, 52, -1, 9, 55, 56, + -1, 52, 14, 54, 55, 56, -1, -1, 40, 41, + 42, -1, -1, -1, -1, -1, 73, -1, -1, -1, + 52, 53, -1, 55, 56, -1, -1, -1, 40, 41, + 42, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 52, -1, -1, 55, 56 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing @@ -1196,36 +1196,36 @@ static const yytype_uint8 yystos[] = 0, 75, 0, 1, 3, 4, 7, 8, 17, 18, 35, 36, 37, 38, 43, 44, 45, 46, 47, 50, 51, 57, 58, 60, 62, 65, 66, 68, 76, 78, - 82, 84, 86, 105, 113, 117, 118, 119, 120, 121, - 122, 130, 131, 66, 69, 127, 128, 129, 83, 123, - 131, 131, 131, 66, 66, 68, 118, 131, 118, 118, - 66, 120, 131, 1, 112, 113, 48, 122, 71, 73, - 79, 88, 105, 133, 137, 79, 85, 50, 9, 14, - 40, 41, 42, 52, 54, 55, 56, 115, 116, 11, - 118, 57, 58, 59, 60, 61, 64, 57, 58, 59, - 60, 61, 64, 12, 13, 43, 44, 51, 114, 111, - 112, 113, 112, 16, 127, 3, 4, 45, 46, 68, - 80, 81, 55, 107, 111, 111, 113, 43, 44, 132, - 1, 54, 67, 135, 139, 135, 1, 6, 77, 105, - 106, 87, 106, 5, 113, 130, 113, 113, 113, 113, - 113, 38, 118, 118, 118, 118, 118, 118, 118, 118, - 118, 118, 118, 118, 13, 113, 135, 70, 49, 66, - 118, 135, 135, 113, 106, 40, 1, 113, 1, 88, + 82, 84, 86, 104, 112, 116, 117, 118, 119, 120, + 121, 129, 130, 66, 69, 126, 127, 128, 83, 122, + 130, 130, 130, 66, 66, 68, 117, 130, 117, 117, + 66, 119, 130, 1, 111, 112, 48, 121, 71, 73, + 79, 88, 104, 132, 136, 79, 85, 50, 9, 14, + 40, 41, 42, 52, 54, 55, 56, 114, 115, 11, + 117, 57, 58, 59, 60, 61, 64, 57, 58, 59, + 60, 61, 64, 12, 13, 43, 44, 51, 113, 110, + 111, 112, 111, 16, 126, 3, 4, 45, 46, 68, + 80, 81, 55, 106, 110, 110, 112, 43, 44, 131, + 1, 54, 67, 134, 138, 134, 1, 6, 77, 104, + 105, 87, 105, 5, 112, 129, 112, 112, 112, 112, + 112, 38, 117, 117, 117, 117, 117, 117, 117, 117, + 117, 117, 117, 117, 13, 112, 134, 70, 49, 66, + 117, 134, 134, 112, 105, 40, 1, 112, 1, 88, 1, 19, 21, 22, 23, 26, 27, 28, 29, 30, - 31, 32, 33, 34, 39, 72, 89, 90, 92, 100, - 104, 113, 133, 134, 137, 53, 123, 1, 4, 108, - 109, 130, 66, 91, 4, 66, 66, 66, 106, 66, - 88, 88, 88, 110, 113, 88, 106, 88, 93, 87, - 136, 137, 106, 113, 135, 1, 139, 113, 110, 94, - 4, 113, 113, 89, 4, 92, 95, 88, 66, 101, - 111, 134, 106, 106, 1, 4, 135, 88, 124, 125, - 126, 127, 67, 135, 135, 26, 40, 137, 112, 10, - 102, 106, 16, 126, 106, 106, 66, 130, 106, 135, - 103, 89, 133, 89, 113, 135, 113, 137, 117, 20, - 96, 97, 135, 106, 137, 106, 106, 106, 1, 24, - 25, 98, 106, 89, 106, 95, 89, 134, 7, 8, - 57, 58, 84, 99, 53, 138, 95, 135, 7, 7, - 138, 106, 135, 106, 106, 87, 106, 89, 87, 89 + 31, 32, 33, 34, 39, 72, 89, 90, 92, 99, + 103, 112, 132, 133, 136, 53, 122, 1, 4, 107, + 108, 129, 66, 91, 4, 66, 66, 66, 105, 66, + 88, 88, 88, 109, 112, 88, 105, 88, 93, 87, + 135, 136, 105, 112, 134, 1, 138, 112, 109, 94, + 4, 112, 112, 89, 4, 92, 95, 88, 66, 100, + 110, 133, 105, 105, 1, 4, 134, 88, 123, 124, + 125, 126, 67, 134, 134, 26, 40, 136, 111, 10, + 101, 105, 16, 125, 105, 105, 66, 129, 105, 134, + 102, 89, 132, 89, 112, 134, 112, 136, 116, 20, + 96, 134, 105, 136, 105, 105, 1, 24, 25, 97, + 105, 105, 89, 105, 95, 89, 7, 8, 57, 58, + 84, 98, 53, 137, 133, 95, 134, 7, 7, 137, + 105, 134, 105, 105, 87, 105, 89, 87, 89 }; #define yyerrok (yyerrstatus = 0) @@ -2431,130 +2431,197 @@ yyreduce: /* Line 1464 of yacc.c */ #line 489 "awkgram.y" { - INSTRUCTION *ip; + INSTRUCTION *dflt, *curr = NULL, *cexp, *cstmt; + INSTRUCTION *ip, *nextc, *tbreak; + const char **case_values = NULL; + int maxcount = 128; + int case_count = 0; + int i; + + tbreak = instruction(Op_no_op); + cstmt = list_create(tbreak); + cexp = list_create(instruction(Op_pop)); + dflt = instruction(Op_jmp); + dflt->target_jmp = tbreak; /* if no case match and no explicit default */ + + if ((yyvsp[(7) - (9)]) != NULL) { + curr = (yyvsp[(7) - (9)])->nexti; + bcfree((yyvsp[(7) - (9)])); /* Op_list */ + } /* else + curr = NULL; */ + + for(; curr != NULL; curr = nextc) { + INSTRUCTION *caseexp = curr->case_exp; + INSTRUCTION *casestmt = curr->case_stmt; + + nextc = curr->nexti; + if (curr->opcode == Op_K_case) { + if (caseexp->opcode == Op_push_i) { + /* a constant scalar */ + char *caseval; + caseval = force_string(caseexp->memory)->stptr; + for (i = 0; i < case_count; i++) { + if (strcmp(caseval, case_values[i]) == 0) { + /* can't use yyerror, since may have overshot the source line */ + errcount++; + error(_("duplicate case values in switch body: %s"), caseval); + } + } + + if (case_values == NULL) + emalloc(case_values, const char **, sizeof(char *) * maxcount, "statement"); + else if (case_count >= maxcount) { + maxcount += 128; + erealloc(case_values, const char **, sizeof(char*) * maxcount, "statement"); + } + case_values[case_count++] = caseval; + } else { + /* match a constant regex against switch expression. */ + (curr + 1)->match_exp = TRUE; + } + curr->stmt_start = casestmt->nexti; + curr->stmt_end = casestmt->lasti; + (void) list_prepend(cexp, curr); + (void) list_prepend(cexp, caseexp); + } else { + if (dflt->target_jmp != tbreak) { + /* can't use yyerror, since may have overshot the source line */ + errcount++; + error(_("duplicate `default' detected in switch body")); + } else + dflt->target_jmp = casestmt->nexti; + + if (do_profiling) { + curr->stmt_start = casestmt->nexti; + curr->stmt_end = casestmt->lasti; + (void) list_prepend(cexp, curr); + } else + bcfree(curr); + } + + cstmt = list_merge(casestmt, cstmt); + } + + if (case_values != NULL) + efree(case_values); - (yyvsp[(1) - (9)])->opcode = Op_push_loop; - (yyvsp[(1) - (9)])->target_continue = NULL; - ip = list_prepend((yyvsp[(3) - (9)]), (yyvsp[(1) - (9)])); - if ((yyvsp[(7) - (9)])->nexti->switch_dflt == NULL) - (yyvsp[(7) - (9)])->nexti->switch_dflt = (yyvsp[(1) - (9)]); /* implicit break */ + ip = (yyvsp[(3) - (9)]); if (do_profiling) { + (void) list_prepend(ip, (yyvsp[(1) - (9)])); (void) list_prepend(ip, instruction(Op_exec_count)); - ((yyvsp[(1) - (9)]) + 1)->opcode = Op_K_switch; - ((yyvsp[(1) - (9)]) + 1)->switch_body = (yyvsp[(7) - (9)])->nexti; - } - (void) list_merge(ip, (yyvsp[(7) - (9)])); - (yyval) = list_append(ip, instruction(Op_pop_loop)); - (yyvsp[(1) - (9)])->target_break = (yyval)->lasti; + (yyvsp[(1) - (9)])->target_break = tbreak; + ((yyvsp[(1) - (9)]) + 1)->switch_start = cexp->nexti; + ((yyvsp[(1) - (9)]) + 1)->switch_end = cexp->lasti; + }/* else + $1 is NULL */ + + (void) list_append(cexp, dflt); + (void) list_merge(ip, cexp); + (yyval) = list_merge(ip, cstmt); break_allowed--; - fix_break_continue((yyvsp[(1) - (9)]), (yyval)->lasti, FALSE); + fix_break_continue(ip, tbreak, NULL); } break; case 43: /* Line 1464 of yacc.c */ -#line 510 "awkgram.y" +#line 582 "awkgram.y" { - /* - * [Op_push_loop| z| y] - * ----------------- - * z: - * cond - * ----------------- - * [Op_jmp_false y ] - * ----------------- - * body - * ----------------- - * [Op_jmp z ] - * y: [Op_pop_loop ] - */ - - INSTRUCTION *ip, *tp; + /* + * ----------------- + * tc: + * cond + * ----------------- + * [Op_jmp_false tb ] + * ----------------- + * body + * ----------------- + * [Op_jmp tc ] + * tb:[Op_no_op ] + */ - tp = instruction(Op_pop_loop); + INSTRUCTION *ip, *tbreak, *tcont; + tbreak = instruction(Op_no_op); add_lint((yyvsp[(3) - (6)]), LINT_assign_in_cond); - (yyvsp[(1) - (6)])->opcode = Op_push_loop; - (yyvsp[(1) - (6)])->target_continue = (yyvsp[(3) - (6)])->nexti; - (yyvsp[(1) - (6)])->target_break = tp; - ip = list_create((yyvsp[(1) - (6)])); - - (void) list_merge(ip, (yyvsp[(3) - (6)])); - (void) list_append(ip, instruction(Op_jmp_false)); - ip->lasti->target_jmp = tp; + tcont = (yyvsp[(3) - (6)])->nexti; + ip = list_append((yyvsp[(3) - (6)]), instruction(Op_jmp_false)); + ip->lasti->target_jmp = tbreak; if (do_profiling) { (void) list_append(ip, instruction(Op_exec_count)); - ((yyvsp[(1) - (6)]) + 1)->opcode = Op_K_while; + (yyvsp[(1) - (6)])->target_break = tbreak; + (yyvsp[(1) - (6)])->target_continue = tcont; ((yyvsp[(1) - (6)]) + 1)->while_body = ip->lasti; - } + (void) list_prepend(ip, (yyvsp[(1) - (6)])); + }/* else + $1 is NULL */ if ((yyvsp[(6) - (6)]) != NULL) (void) list_merge(ip, (yyvsp[(6) - (6)])); (void) list_append(ip, instruction(Op_jmp)); - ip->lasti->target_jmp = (yyvsp[(1) - (6)])->target_continue; - (yyval) = list_append(ip, tp); + ip->lasti->target_jmp = tcont; + (yyval) = list_append(ip, tbreak); break_allowed--; continue_allowed--; - fix_break_continue((yyvsp[(1) - (6)]), tp, TRUE); + fix_break_continue(ip, tbreak, tcont); } break; case 44: /* Line 1464 of yacc.c */ -#line 556 "awkgram.y" +#line 624 "awkgram.y" { - /* - * [Op_push_loop | x | y] - * ----------------- - * z: - * body - * ----------------- - * x: - * cond - * ----------------- - * [Op_jmp_true | z ] - * y: [Op_pop_loop ] - */ - - INSTRUCTION *ip; + /* + * ----------------- + * z: + * body + * ----------------- + * tc: + * cond + * ----------------- + * [Op_jmp_true | z ] + * tb:[Op_no_op ] + */ - (yyvsp[(4) - (8)])->opcode = Op_pop_loop; - (yyvsp[(1) - (8)])->opcode = Op_push_loop; - (yyvsp[(1) - (8)])->target_continue = (yyvsp[(6) - (8)])->nexti; - (yyvsp[(1) - (8)])->target_break = (yyvsp[(4) - (8)]); + INSTRUCTION *ip, *tbreak, *tcont; + tbreak = instruction(Op_no_op); + tcont = (yyvsp[(6) - (8)])->nexti; add_lint((yyvsp[(6) - (8)]), LINT_assign_in_cond); if ((yyvsp[(3) - (8)]) != NULL) ip = list_merge((yyvsp[(3) - (8)]), (yyvsp[(6) - (8)])); else ip = list_prepend((yyvsp[(6) - (8)]), instruction(Op_no_op)); - - if (do_profiling) { + if (do_profiling) (void) list_prepend(ip, instruction(Op_exec_count)); - ((yyvsp[(1) - (8)]) + 1)->opcode = Op_K_do; - ((yyvsp[(1) - (8)]) + 1)->doloop_cond = (yyvsp[(1) - (8)])->target_continue; - } - (void) list_append(ip, instruction(Op_jmp_true)); ip->lasti->target_jmp = ip->nexti; - (yyval) = list_prepend(ip, (yyvsp[(1) - (8)])); - (void) list_append(ip, (yyvsp[(4) - (8)])); + (yyval) = list_append(ip, tbreak); break_allowed--; continue_allowed--; - fix_break_continue((yyvsp[(1) - (8)]), (yyvsp[(4) - (8)]), TRUE); + fix_break_continue(ip, tbreak, tcont); + + if (do_profiling) { + (yyvsp[(1) - (8)])->target_break = tbreak; + (yyvsp[(1) - (8)])->target_continue = tcont; + ((yyvsp[(1) - (8)]) + 1)->doloop_cond = tcont; + (yyval) = list_prepend(ip, (yyvsp[(1) - (8)])); + bcfree((yyvsp[(4) - (8)])); + } /* else + $1 and $4 are NULLs */ } break; case 45: /* Line 1464 of yacc.c */ -#line 599 "awkgram.y" +#line 666 "awkgram.y" { INSTRUCTION *ip; char *var_name = (yyvsp[(3) - (8)])->lextok; @@ -2593,7 +2660,8 @@ yyreduce: (void) make_assignable((yyvsp[(8) - (8)])->nexti); (yyvsp[(8) - (8)])->lasti->opcode = Op_K_delete_loop; (yyvsp[(8) - (8)])->lasti->expr_count = 0; - bcfree((yyvsp[(1) - (8)])); + if ((yyvsp[(1) - (8)]) != NULL) + bcfree((yyvsp[(1) - (8)])); efree(var_name); bcfree((yyvsp[(3) - (8)])); bcfree((yyvsp[(4) - (8)])); @@ -2602,31 +2670,38 @@ yyreduce: } else goto regular_loop; } else { + INSTRUCTION *tbreak, *tcont; - /* [ Op_push_array a ] - * [ Op_arrayfor_init| w ] - * [ Op_push_loop | z | y ] - * z: [ Op_arrayfor_incr | y ] - * [ Op_var_assign if any ] + /* [ Op_push_array a ] + * [ Op_arrayfor_init | ib ] + * ic:[ Op_arrayfor_incr | ib ] + * [ Op_var_assign if any ] * * body * - * [Op_jmp | z ] - * y: [Op_pop_loop ] - * w: [Op_arrayfor_final ] + * [Op_jmp | ic ] + * ib:[Op_arrayfor_final ] */ regular_loop: ip = (yyvsp[(5) - (8)]); ip->nexti->opcode = Op_push_array; - (yyvsp[(3) - (8)])->opcode = Op_arrayfor_init; - (void) list_append(ip, (yyvsp[(3) - (8)])); + tbreak = instruction(Op_arrayfor_final); (yyvsp[(4) - (8)])->opcode = Op_arrayfor_incr; (yyvsp[(4) - (8)])->array_var = variable(var_name, Node_var); - (yyvsp[(1) - (8)])->opcode = Op_push_loop; - (yyvsp[(1) - (8)])->target_continue = (yyvsp[(4) - (8)]); + (yyvsp[(4) - (8)])->target_jmp = tbreak; + tcont = (yyvsp[(4) - (8)]); + (yyvsp[(3) - (8)])->opcode = Op_arrayfor_init; + (yyvsp[(3) - (8)])->target_jmp = tbreak; + (void) list_append(ip, (yyvsp[(3) - (8)])); - (void) list_append(ip, (yyvsp[(1) - (8)])); + if (do_profiling) { + (yyvsp[(1) - (8)])->opcode = Op_K_arrayfor; + (yyvsp[(1) - (8)])->target_continue = tcont; + (yyvsp[(1) - (8)])->target_break = tbreak; + (void) list_append(ip, (yyvsp[(1) - (8)])); + } /* else + $1 is NULL */ /* add update_FOO instruction if necessary */ if ((yyvsp[(4) - (8)])->array_var->type == Node_var && (yyvsp[(4) - (8)])->array_var->var_update) { @@ -2643,7 +2718,6 @@ regular_loop: if (do_profiling) { (void) list_append(ip, instruction(Op_exec_count)); - ((yyvsp[(1) - (8)]) + 1)->opcode = Op_K_arrayfor; ((yyvsp[(1) - (8)]) + 1)->forloop_cond = (yyvsp[(4) - (8)]); ((yyvsp[(1) - (8)]) + 1)->forloop_body = ip->lasti; } @@ -2653,12 +2727,8 @@ regular_loop: (void) list_append(ip, instruction(Op_jmp)); ip->lasti->target_jmp = (yyvsp[(4) - (8)]); - (void) list_append(ip, instruction(Op_pop_loop)); - (yyvsp[(4) - (8)])->target_jmp = (yyvsp[(1) - (8)])->target_break = ip->lasti; - (yyval) = list_append(ip, instruction(Op_arrayfor_final)); - (yyvsp[(3) - (8)])->target_jmp = (yyval)->lasti; - - fix_break_continue((yyvsp[(1) - (8)]), (yyvsp[(4) - (8)])->target_jmp, TRUE); + (yyval) = list_append(ip, tbreak); + fix_break_continue(ip, tbreak, tcont); } break_allowed--; @@ -2669,7 +2739,7 @@ regular_loop: case 46: /* Line 1464 of yacc.c */ -#line 709 "awkgram.y" +#line 779 "awkgram.y" { (yyval) = mk_for_loop((yyvsp[(1) - (12)]), (yyvsp[(3) - (12)]), (yyvsp[(6) - (12)]), (yyvsp[(9) - (12)]), (yyvsp[(12) - (12)])); @@ -2681,7 +2751,7 @@ regular_loop: case 47: /* Line 1464 of yacc.c */ -#line 716 "awkgram.y" +#line 786 "awkgram.y" { (yyval) = mk_for_loop((yyvsp[(1) - (11)]), (yyvsp[(3) - (11)]), (INSTRUCTION *) NULL, (yyvsp[(8) - (11)]), (yyvsp[(11) - (11)])); @@ -2693,7 +2763,7 @@ regular_loop: case 48: /* Line 1464 of yacc.c */ -#line 723 "awkgram.y" +#line 793 "awkgram.y" { if (do_profiling) (yyval) = list_prepend((yyvsp[(1) - (1)]), instruction(Op_exec_count)); @@ -2705,7 +2775,7 @@ regular_loop: case 49: /* Line 1464 of yacc.c */ -#line 733 "awkgram.y" +#line 803 "awkgram.y" { if (! break_allowed) yyerror(_("`break' is not allowed outside a loop or switch")); @@ -2719,7 +2789,7 @@ regular_loop: case 50: /* Line 1464 of yacc.c */ -#line 742 "awkgram.y" +#line 812 "awkgram.y" { if (! continue_allowed) yyerror(_("`continue' is not allowed outside a loop")); @@ -2733,7 +2803,7 @@ regular_loop: case 51: /* Line 1464 of yacc.c */ -#line 751 "awkgram.y" +#line 821 "awkgram.y" { if (rule != Rule) yyerror(_("`next' used in %s action"), ruletab[rule]); @@ -2745,7 +2815,7 @@ regular_loop: case 52: /* Line 1464 of yacc.c */ -#line 758 "awkgram.y" +#line 828 "awkgram.y" { static short warned = FALSE; @@ -2775,7 +2845,7 @@ regular_loop: case 53: /* Line 1464 of yacc.c */ -#line 783 "awkgram.y" +#line 853 "awkgram.y" { if (rule == END) (yyvsp[(1) - (3)])->target_jmp = ip_atexit; @@ -2794,7 +2864,7 @@ regular_loop: case 54: /* Line 1464 of yacc.c */ -#line 797 "awkgram.y" +#line 867 "awkgram.y" { if (! can_return) yyerror(_("`return' used outside function context")); @@ -2804,7 +2874,7 @@ regular_loop: case 55: /* Line 1464 of yacc.c */ -#line 800 "awkgram.y" +#line 870 "awkgram.y" { if ((yyvsp[(3) - (4)]) == NULL) { (yyval) = list_create((yyvsp[(1) - (4)])); @@ -2818,14 +2888,14 @@ regular_loop: case 57: /* Line 1464 of yacc.c */ -#line 820 "awkgram.y" +#line 890 "awkgram.y" { in_print = TRUE; in_parens = 0; } break; case 58: /* Line 1464 of yacc.c */ -#line 821 "awkgram.y" +#line 891 "awkgram.y" { /* * Optimization: plain `print' has no expression list, so $3 is null. @@ -2925,14 +2995,14 @@ regular_loop: case 59: /* Line 1464 of yacc.c */ -#line 916 "awkgram.y" +#line 986 "awkgram.y" { sub_counter = 0; } break; case 60: /* Line 1464 of yacc.c */ -#line 917 "awkgram.y" +#line 987 "awkgram.y" { char *arr = (yyvsp[(2) - (4)])->lextok; @@ -2965,7 +3035,7 @@ regular_loop: case 61: /* Line 1464 of yacc.c */ -#line 949 "awkgram.y" +#line 1019 "awkgram.y" { static short warned = FALSE; char *arr = (yyvsp[(3) - (4)])->lextok; @@ -2992,233 +3062,155 @@ regular_loop: case 62: /* Line 1464 of yacc.c */ -#line 971 "awkgram.y" +#line 1041 "awkgram.y" { (yyval) = optimize_assignment((yyvsp[(1) - (1)])); } break; case 63: /* Line 1464 of yacc.c */ -#line 976 "awkgram.y" +#line 1046 "awkgram.y" { (yyval) = NULL; } break; case 64: /* Line 1464 of yacc.c */ -#line 978 "awkgram.y" +#line 1048 "awkgram.y" { (yyval) = (yyvsp[(1) - (1)]); } break; case 65: /* Line 1464 of yacc.c */ -#line 983 "awkgram.y" - { - INSTRUCTION *dflt = NULL; - - if ((yyvsp[(1) - (1)]) != NULL) { - INSTRUCTION *curr; - const char **case_values = NULL; - int maxcount = 128; - int case_count = 0; - int i; - - emalloc(case_values, const char **, sizeof(char *) * maxcount, "statement"); - - for (curr = (yyvsp[(1) - (1)])->case_val->nexti; curr != NULL; curr = curr->nexti) { - if (curr->opcode == Op_K_case) { - char *caseval; - if (curr->memory->type == Node_regex) - caseval = curr->memory->re_exp->stptr; - else - caseval = force_string(curr->memory)->stptr; - for (i = 0; i < case_count; i++) - if (strcmp(caseval, case_values[i]) == 0) - yyerror(_("duplicate case values in switch body: %s"), caseval); - - if (case_count >= maxcount) { - maxcount += 128; - erealloc(case_values, const char **, sizeof(char*) * maxcount, "statement"); - } - case_values[case_count++] = caseval; - } else { - /* Otherwise save a pointer to the default node. */ - if (dflt != NULL) - yyerror(_("duplicate `default' detected in switch body")); - dflt = curr; - } - } - - efree(case_values); - (yyval) = list_prepend((yyvsp[(1) - (1)])->case_stmt, instruction(Op_K_switch)); - (yyval)->nexti->case_val = (yyvsp[(1) - (1)])->case_val->nexti; - (yyval)->nexti->switch_dflt = dflt; - bcfree((yyvsp[(1) - (1)])->case_val); /* Op_list */ - bcfree((yyvsp[(1) - (1)])); /* Op_case_list */ - } else { - (yyval) = list_create(instruction(Op_K_switch)); - (yyval)->nexti->case_val = NULL; - (yyval)->nexti->switch_dflt = NULL; - } - } - break; - - case 66: - -/* Line 1464 of yacc.c */ -#line 1035 "awkgram.y" +#line 1053 "awkgram.y" { (yyval) = NULL; } break; - case 67: + case 66: /* Line 1464 of yacc.c */ -#line 1037 "awkgram.y" +#line 1055 "awkgram.y" { - if ((yyvsp[(1) - (2)]) == NULL) { - (yyvsp[(2) - (2)])->case_val = list_create((yyvsp[(2) - (2)])->case_val); - (yyval) = (yyvsp[(2) - (2)]); - } else { - (void) list_append((yyvsp[(1) - (2)])->case_val, (yyvsp[(2) - (2)])->case_val); - (void) list_merge((yyvsp[(1) - (2)])->case_stmt, (yyvsp[(2) - (2)])->case_stmt); - bcfree((yyvsp[(2) - (2)])); /* Op_case_list */ - (yyval) = (yyvsp[(1) - (2)]); - } + if ((yyvsp[(1) - (2)]) == NULL) + (yyval) = list_create((yyvsp[(2) - (2)])); + else + (yyval) = list_prepend((yyvsp[(1) - (2)]), (yyvsp[(2) - (2)])); } break; - case 68: + case 67: /* Line 1464 of yacc.c */ -#line 1049 "awkgram.y" +#line 1062 "awkgram.y" { (yyval) = NULL; } break; - case 69: + case 68: /* Line 1464 of yacc.c */ -#line 1054 "awkgram.y" +#line 1067 "awkgram.y" { INSTRUCTION *casestmt = (yyvsp[(5) - (5)]); - - (yyvsp[(1) - (5)])->memory = (yyvsp[(2) - (5)])->memory; - bcfree((yyvsp[(2) - (5)])); if ((yyvsp[(5) - (5)]) == NULL) casestmt = list_create(instruction(Op_no_op)); if (do_profiling) (void) list_prepend(casestmt, instruction(Op_exec_count)); - - (yyvsp[(1) - (5)])->target_stmt = casestmt->nexti; - - /* recycle $3 as Op_case_list */ - (yyvsp[(3) - (5)])->opcode = Op_case_list; - (yyvsp[(3) - (5)])->case_val = (yyvsp[(1) - (5)]); /* Op_K_case */ - (yyvsp[(3) - (5)])->case_stmt = casestmt; /* Op_list */ - (yyval) = (yyvsp[(3) - (5)]); + (yyvsp[(1) - (5)])->case_exp = (yyvsp[(2) - (5)]); + (yyvsp[(1) - (5)])->case_stmt = casestmt; + bcfree((yyvsp[(3) - (5)])); + (yyval) = (yyvsp[(1) - (5)]); } break; - case 70: + case 69: /* Line 1464 of yacc.c */ -#line 1073 "awkgram.y" +#line 1079 "awkgram.y" { INSTRUCTION *casestmt = (yyvsp[(4) - (4)]); - if ((yyvsp[(4) - (4)]) == NULL) casestmt = list_create(instruction(Op_no_op)); if (do_profiling) (void) list_prepend(casestmt, instruction(Op_exec_count)); - - (yyvsp[(1) - (4)])->target_stmt = casestmt->nexti; - (yyvsp[(2) - (4)])->opcode = Op_case_list; - (yyvsp[(2) - (4)])->case_val = (yyvsp[(1) - (4)]); /* Op_K_default */ - (yyvsp[(2) - (4)])->case_stmt = casestmt; /* Op_list */ - (yyval) = (yyvsp[(2) - (4)]); + bcfree((yyvsp[(2) - (4)])); + (yyvsp[(1) - (4)])->case_stmt = casestmt; + (yyval) = (yyvsp[(1) - (4)]); } break; - case 71: + case 70: /* Line 1464 of yacc.c */ -#line 1091 "awkgram.y" - { - (yyvsp[(1) - (1)])->opcode = Op_K_case; - (yyval) = (yyvsp[(1) - (1)]); - } +#line 1093 "awkgram.y" + { (yyval) = (yyvsp[(1) - (1)]); } break; - case 72: + case 71: /* Line 1464 of yacc.c */ -#line 1096 "awkgram.y" +#line 1095 "awkgram.y" { (yyvsp[(2) - (2)])->memory->numbr = -(force_number((yyvsp[(2) - (2)])->memory)); bcfree((yyvsp[(1) - (2)])); - (yyvsp[(2) - (2)])->opcode = Op_K_case; (yyval) = (yyvsp[(2) - (2)]); } break; - case 73: + case 72: /* Line 1464 of yacc.c */ -#line 1103 "awkgram.y" +#line 1101 "awkgram.y" { bcfree((yyvsp[(1) - (2)])); - (yyvsp[(2) - (2)])->opcode = Op_K_case; (yyval) = (yyvsp[(2) - (2)]); } break; - case 74: + case 73: /* Line 1464 of yacc.c */ -#line 1109 "awkgram.y" - { - (yyvsp[(1) - (1)])->opcode = Op_K_case; - (yyval) = (yyvsp[(1) - (1)]); - } +#line 1106 "awkgram.y" + { (yyval) = (yyvsp[(1) - (1)]); } break; - case 75: + case 74: /* Line 1464 of yacc.c */ -#line 1114 "awkgram.y" +#line 1108 "awkgram.y" { - (yyvsp[(1) - (1)])->opcode = Op_K_case; + (yyvsp[(1) - (1)])->opcode = Op_push_re; (yyval) = (yyvsp[(1) - (1)]); } break; - case 76: + case 75: /* Line 1464 of yacc.c */ -#line 1122 "awkgram.y" +#line 1116 "awkgram.y" { (yyval) = (yyvsp[(1) - (1)]); } break; - case 77: + case 76: /* Line 1464 of yacc.c */ -#line 1124 "awkgram.y" +#line 1118 "awkgram.y" { (yyval) = (yyvsp[(1) - (1)]); } break; - case 79: + case 78: /* Line 1464 of yacc.c */ -#line 1134 "awkgram.y" +#line 1128 "awkgram.y" { (yyval) = (yyvsp[(2) - (3)]); } break; - case 80: + case 79: /* Line 1464 of yacc.c */ -#line 1141 "awkgram.y" +#line 1135 "awkgram.y" { in_print = FALSE; in_parens = 0; @@ -3226,17 +3218,17 @@ regular_loop: } break; - case 81: + case 80: /* Line 1464 of yacc.c */ -#line 1146 "awkgram.y" +#line 1140 "awkgram.y" { in_print = FALSE; in_parens = 0; } break; - case 82: + case 81: /* Line 1464 of yacc.c */ -#line 1147 "awkgram.y" +#line 1141 "awkgram.y" { if ((yyvsp[(1) - (3)])->redir_type == redirect_twoway && (yyvsp[(3) - (3)])->lasti->opcode == Op_K_getline_redir @@ -3246,45 +3238,45 @@ regular_loop: } break; - case 83: + case 82: /* Line 1464 of yacc.c */ -#line 1158 "awkgram.y" +#line 1152 "awkgram.y" { (yyval) = mk_condition((yyvsp[(3) - (6)]), (yyvsp[(1) - (6)]), (yyvsp[(6) - (6)]), NULL, NULL); } break; - case 84: + case 83: /* Line 1464 of yacc.c */ -#line 1163 "awkgram.y" +#line 1157 "awkgram.y" { (yyval) = mk_condition((yyvsp[(3) - (9)]), (yyvsp[(1) - (9)]), (yyvsp[(6) - (9)]), (yyvsp[(7) - (9)]), (yyvsp[(9) - (9)])); } break; - case 89: + case 88: /* Line 1464 of yacc.c */ -#line 1180 "awkgram.y" +#line 1174 "awkgram.y" { (yyval) = NULL; } break; - case 90: + case 89: /* Line 1464 of yacc.c */ -#line 1182 "awkgram.y" +#line 1176 "awkgram.y" { bcfree((yyvsp[(1) - (2)])); (yyval) = (yyvsp[(2) - (2)]); } break; - case 93: + case 92: /* Line 1464 of yacc.c */ -#line 1195 "awkgram.y" +#line 1189 "awkgram.y" { append_param((yyvsp[(1) - (1)])->lextok); (yyvsp[(1) - (1)])->lextok = NULL; @@ -3292,10 +3284,10 @@ regular_loop: } break; - case 94: + case 93: /* Line 1464 of yacc.c */ -#line 1201 "awkgram.y" +#line 1195 "awkgram.y" { append_param((yyvsp[(3) - (3)])->lextok); (yyvsp[(3) - (3)])->lextok = NULL; @@ -3304,104 +3296,104 @@ regular_loop: } break; - case 95: + case 94: /* Line 1464 of yacc.c */ -#line 1208 "awkgram.y" +#line 1202 "awkgram.y" { /* func_params = NULL; */ } break; - case 96: + case 95: /* Line 1464 of yacc.c */ -#line 1210 "awkgram.y" +#line 1204 "awkgram.y" { /* func_params = NULL; */ } break; - case 97: + case 96: /* Line 1464 of yacc.c */ -#line 1212 "awkgram.y" +#line 1206 "awkgram.y" { /* func_params = NULL; */ } break; - case 98: + case 97: /* Line 1464 of yacc.c */ -#line 1218 "awkgram.y" +#line 1212 "awkgram.y" { (yyval) = NULL; } break; - case 99: + case 98: /* Line 1464 of yacc.c */ -#line 1220 "awkgram.y" +#line 1214 "awkgram.y" { (yyval) = (yyvsp[(1) - (1)]); } break; - case 100: + case 99: /* Line 1464 of yacc.c */ -#line 1225 "awkgram.y" +#line 1219 "awkgram.y" { (yyval) = NULL; } break; - case 101: + case 100: /* Line 1464 of yacc.c */ -#line 1227 "awkgram.y" +#line 1221 "awkgram.y" { (yyval) = (yyvsp[(1) - (1)]); } break; - case 102: + case 101: /* Line 1464 of yacc.c */ -#line 1232 "awkgram.y" +#line 1226 "awkgram.y" { (yyval) = mk_expression_list(NULL, (yyvsp[(1) - (1)])); } break; - case 103: + case 102: /* Line 1464 of yacc.c */ -#line 1234 "awkgram.y" +#line 1228 "awkgram.y" { (yyval) = mk_expression_list((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)])); yyerrok; } break; - case 104: + case 103: /* Line 1464 of yacc.c */ -#line 1239 "awkgram.y" +#line 1233 "awkgram.y" { (yyval) = NULL; } break; - case 105: + case 104: /* Line 1464 of yacc.c */ -#line 1241 "awkgram.y" +#line 1235 "awkgram.y" { (yyval) = NULL; } break; - case 106: + case 105: /* Line 1464 of yacc.c */ -#line 1243 "awkgram.y" +#line 1237 "awkgram.y" { (yyval) = NULL; } break; - case 107: + case 106: /* Line 1464 of yacc.c */ -#line 1245 "awkgram.y" +#line 1239 "awkgram.y" { (yyval) = NULL; } break; - case 108: + case 107: /* Line 1464 of yacc.c */ -#line 1251 "awkgram.y" +#line 1245 "awkgram.y" { if (do_lint && (yyvsp[(3) - (3)])->lasti->opcode == Op_match_rec) lintwarn(_("regular expression on right of assignment")); @@ -3409,24 +3401,24 @@ regular_loop: } break; - case 109: + case 108: /* Line 1464 of yacc.c */ -#line 1257 "awkgram.y" +#line 1251 "awkgram.y" { (yyval) = mk_boolean((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - (3)])); } break; - case 110: + case 109: /* Line 1464 of yacc.c */ -#line 1259 "awkgram.y" +#line 1253 "awkgram.y" { (yyval) = mk_boolean((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - (3)])); } break; - case 111: + case 110: /* Line 1464 of yacc.c */ -#line 1261 "awkgram.y" +#line 1255 "awkgram.y" { if ((yyvsp[(1) - (3)])->lasti->opcode == Op_match_rec) warning(_("regular expression on left of `~' or `!~' operator")); @@ -3443,10 +3435,10 @@ regular_loop: } break; - case 112: + case 111: /* Line 1464 of yacc.c */ -#line 1276 "awkgram.y" +#line 1270 "awkgram.y" { if (do_lint_old) warning(_("old awk does not support the keyword `in' except after `for'")); @@ -3457,10 +3449,10 @@ regular_loop: } break; - case 113: + case 112: /* Line 1464 of yacc.c */ -#line 1285 "awkgram.y" +#line 1279 "awkgram.y" { if (do_lint && (yyvsp[(3) - (3)])->lasti->opcode == Op_match_rec) lintwarn(_("regular expression on right of comparison")); @@ -3468,90 +3460,90 @@ regular_loop: } break; - case 114: + case 113: /* Line 1464 of yacc.c */ -#line 1291 "awkgram.y" +#line 1285 "awkgram.y" { (yyval) = mk_condition((yyvsp[(1) - (5)]), (yyvsp[(2) - (5)]), (yyvsp[(3) - (5)]), (yyvsp[(4) - (5)]), (yyvsp[(5) - (5)])); } break; - case 115: + case 114: /* Line 1464 of yacc.c */ -#line 1293 "awkgram.y" +#line 1287 "awkgram.y" { (yyval) = (yyvsp[(1) - (1)]); } break; - case 116: + case 115: /* Line 1464 of yacc.c */ -#line 1298 "awkgram.y" +#line 1292 "awkgram.y" { (yyval) = (yyvsp[(1) - (1)]); } break; - case 117: + case 116: /* Line 1464 of yacc.c */ -#line 1300 "awkgram.y" +#line 1294 "awkgram.y" { (yyval) = (yyvsp[(1) - (1)]); } break; - case 118: + case 117: /* Line 1464 of yacc.c */ -#line 1302 "awkgram.y" +#line 1296 "awkgram.y" { (yyvsp[(2) - (2)])->opcode = Op_assign_quotient; (yyval) = (yyvsp[(2) - (2)]); } break; + case 118: + +/* Line 1464 of yacc.c */ +#line 1304 "awkgram.y" + { (yyval) = (yyvsp[(1) - (1)]); } + break; + case 119: /* Line 1464 of yacc.c */ -#line 1310 "awkgram.y" +#line 1306 "awkgram.y" { (yyval) = (yyvsp[(1) - (1)]); } break; case 120: /* Line 1464 of yacc.c */ -#line 1312 "awkgram.y" +#line 1311 "awkgram.y" { (yyval) = (yyvsp[(1) - (1)]); } break; case 121: /* Line 1464 of yacc.c */ -#line 1317 "awkgram.y" +#line 1313 "awkgram.y" { (yyval) = (yyvsp[(1) - (1)]); } break; case 122: /* Line 1464 of yacc.c */ -#line 1319 "awkgram.y" +#line 1318 "awkgram.y" { (yyval) = (yyvsp[(1) - (1)]); } break; case 123: /* Line 1464 of yacc.c */ -#line 1324 "awkgram.y" +#line 1320 "awkgram.y" { (yyval) = (yyvsp[(1) - (1)]); } break; case 124: /* Line 1464 of yacc.c */ -#line 1326 "awkgram.y" - { (yyval) = (yyvsp[(1) - (1)]); } - break; - - case 125: - -/* Line 1464 of yacc.c */ -#line 1328 "awkgram.y" +#line 1322 "awkgram.y" { int count = 2; int is_simple_var = FALSE; @@ -3603,52 +3595,52 @@ regular_loop: } break; + case 126: + +/* Line 1464 of yacc.c */ +#line 1377 "awkgram.y" + { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - (3)])); } + break; + case 127: /* Line 1464 of yacc.c */ -#line 1383 "awkgram.y" +#line 1379 "awkgram.y" { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - (3)])); } break; case 128: /* Line 1464 of yacc.c */ -#line 1385 "awkgram.y" +#line 1381 "awkgram.y" { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - (3)])); } break; case 129: /* Line 1464 of yacc.c */ -#line 1387 "awkgram.y" +#line 1383 "awkgram.y" { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - (3)])); } break; case 130: /* Line 1464 of yacc.c */ -#line 1389 "awkgram.y" +#line 1385 "awkgram.y" { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - (3)])); } break; case 131: /* Line 1464 of yacc.c */ -#line 1391 "awkgram.y" +#line 1387 "awkgram.y" { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - (3)])); } break; case 132: /* Line 1464 of yacc.c */ -#line 1393 "awkgram.y" - { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - (3)])); } - break; - - case 133: - -/* Line 1464 of yacc.c */ -#line 1395 "awkgram.y" +#line 1389 "awkgram.y" { /* * In BEGINFILE/ENDFILE, allow `getline var < file' @@ -3671,30 +3663,30 @@ regular_loop: } break; - case 134: + case 133: /* Line 1464 of yacc.c */ -#line 1416 "awkgram.y" +#line 1410 "awkgram.y" { (yyvsp[(2) - (2)])->opcode = Op_postincrement; (yyval) = mk_assignment((yyvsp[(1) - (2)]), NULL, (yyvsp[(2) - (2)])); } break; - case 135: + case 134: /* Line 1464 of yacc.c */ -#line 1421 "awkgram.y" +#line 1415 "awkgram.y" { (yyvsp[(2) - (2)])->opcode = Op_postdecrement; (yyval) = mk_assignment((yyvsp[(1) - (2)]), NULL, (yyvsp[(2) - (2)])); } break; - case 136: + case 135: /* Line 1464 of yacc.c */ -#line 1426 "awkgram.y" +#line 1420 "awkgram.y" { if (do_lint_old) { warning(_("old awk does not support the keyword `in' except after `for'")); @@ -3714,71 +3706,71 @@ regular_loop: } break; - case 137: + case 136: /* Line 1464 of yacc.c */ -#line 1449 "awkgram.y" +#line 1443 "awkgram.y" { (yyval) = mk_getline((yyvsp[(3) - (4)]), (yyvsp[(4) - (4)]), (yyvsp[(1) - (4)]), (yyvsp[(2) - (4)])->redir_type); bcfree((yyvsp[(2) - (4)])); } break; + case 137: + +/* Line 1464 of yacc.c */ +#line 1449 "awkgram.y" + { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - (3)])); } + break; + case 138: /* Line 1464 of yacc.c */ -#line 1455 "awkgram.y" +#line 1451 "awkgram.y" { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - (3)])); } break; case 139: /* Line 1464 of yacc.c */ -#line 1457 "awkgram.y" +#line 1453 "awkgram.y" { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - (3)])); } break; case 140: /* Line 1464 of yacc.c */ -#line 1459 "awkgram.y" +#line 1455 "awkgram.y" { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - (3)])); } break; case 141: /* Line 1464 of yacc.c */ -#line 1461 "awkgram.y" +#line 1457 "awkgram.y" { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - (3)])); } break; case 142: /* Line 1464 of yacc.c */ -#line 1463 "awkgram.y" +#line 1459 "awkgram.y" { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - (3)])); } break; case 143: /* Line 1464 of yacc.c */ -#line 1465 "awkgram.y" - { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - (3)])); } - break; - - case 144: - -/* Line 1464 of yacc.c */ -#line 1470 "awkgram.y" +#line 1464 "awkgram.y" { (yyval) = list_create((yyvsp[(1) - (1)])); } break; - case 145: + case 144: /* Line 1464 of yacc.c */ -#line 1474 "awkgram.y" +#line 1468 "awkgram.y" { if ((yyvsp[(2) - (2)])->opcode == Op_match_rec) { (yyvsp[(2) - (2)])->opcode = Op_nomatch; @@ -3811,17 +3803,17 @@ regular_loop: } break; - case 146: + case 145: /* Line 1464 of yacc.c */ -#line 1505 "awkgram.y" +#line 1499 "awkgram.y" { (yyval) = (yyvsp[(2) - (3)]); } break; - case 147: + case 146: /* Line 1464 of yacc.c */ -#line 1507 "awkgram.y" +#line 1501 "awkgram.y" { (yyval) = snode((yyvsp[(3) - (4)]), (yyvsp[(1) - (4)])); if ((yyval) == NULL) @@ -3829,10 +3821,10 @@ regular_loop: } break; - case 148: + case 147: /* Line 1464 of yacc.c */ -#line 1513 "awkgram.y" +#line 1507 "awkgram.y" { (yyval) = snode((yyvsp[(3) - (4)]), (yyvsp[(1) - (4)])); if ((yyval) == NULL) @@ -3840,10 +3832,10 @@ regular_loop: } break; - case 149: + case 148: /* Line 1464 of yacc.c */ -#line 1519 "awkgram.y" +#line 1513 "awkgram.y" { static short warned1 = FALSE; @@ -3857,48 +3849,48 @@ regular_loop: } break; - case 152: + case 151: /* Line 1464 of yacc.c */ -#line 1533 "awkgram.y" +#line 1527 "awkgram.y" { (yyvsp[(1) - (2)])->opcode = Op_preincrement; (yyval) = mk_assignment((yyvsp[(2) - (2)]), NULL, (yyvsp[(1) - (2)])); } break; - case 153: + case 152: /* Line 1464 of yacc.c */ -#line 1538 "awkgram.y" +#line 1532 "awkgram.y" { (yyvsp[(1) - (2)])->opcode = Op_predecrement; (yyval) = mk_assignment((yyvsp[(2) - (2)]), NULL, (yyvsp[(1) - (2)])); } break; - case 154: + case 153: /* Line 1464 of yacc.c */ -#line 1543 "awkgram.y" +#line 1537 "awkgram.y" { (yyval) = list_create((yyvsp[(1) - (1)])); } break; - case 155: + case 154: /* Line 1464 of yacc.c */ -#line 1547 "awkgram.y" +#line 1541 "awkgram.y" { (yyval) = list_create((yyvsp[(1) - (1)])); } break; - case 156: + case 155: /* Line 1464 of yacc.c */ -#line 1551 "awkgram.y" +#line 1545 "awkgram.y" { if ((yyvsp[(2) - (2)])->lasti->opcode == Op_push_i && ((yyvsp[(2) - (2)])->lasti->memory->flags & (STRCUR|STRING)) == 0) { @@ -3912,10 +3904,10 @@ regular_loop: } break; - case 157: + case 156: /* Line 1464 of yacc.c */ -#line 1563 "awkgram.y" +#line 1557 "awkgram.y" { /* * was: $$ = $2 @@ -3927,20 +3919,20 @@ regular_loop: } break; - case 158: + case 157: /* Line 1464 of yacc.c */ -#line 1576 "awkgram.y" +#line 1570 "awkgram.y" { func_use((yyvsp[(1) - (1)])->lasti->func_name, FUNC_USE); (yyval) = (yyvsp[(1) - (1)]); } break; - case 159: + case 158: /* Line 1464 of yacc.c */ -#line 1581 "awkgram.y" +#line 1575 "awkgram.y" { /* indirect function call */ INSTRUCTION *f, *t; @@ -3975,10 +3967,10 @@ regular_loop: } break; - case 160: + case 159: /* Line 1464 of yacc.c */ -#line 1617 "awkgram.y" +#line 1611 "awkgram.y" { param_sanity((yyvsp[(3) - (4)])); (yyvsp[(1) - (4)])->opcode = Op_func_call; @@ -3994,54 +3986,54 @@ regular_loop: } break; - case 161: + case 160: /* Line 1464 of yacc.c */ -#line 1634 "awkgram.y" +#line 1628 "awkgram.y" { (yyval) = NULL; } break; - case 162: + case 161: /* Line 1464 of yacc.c */ -#line 1636 "awkgram.y" +#line 1630 "awkgram.y" { (yyval) = (yyvsp[(1) - (1)]); } break; - case 163: + case 162: /* Line 1464 of yacc.c */ -#line 1641 "awkgram.y" +#line 1635 "awkgram.y" { (yyval) = NULL; } break; - case 164: + case 163: /* Line 1464 of yacc.c */ -#line 1643 "awkgram.y" +#line 1637 "awkgram.y" { (yyval) = (yyvsp[(1) - (2)]); } break; - case 165: + case 164: /* Line 1464 of yacc.c */ -#line 1648 "awkgram.y" +#line 1642 "awkgram.y" { (yyval) = (yyvsp[(1) - (1)]); } break; - case 166: + case 165: /* Line 1464 of yacc.c */ -#line 1650 "awkgram.y" +#line 1644 "awkgram.y" { (yyval) = list_merge((yyvsp[(1) - (2)]), (yyvsp[(2) - (2)])); } break; - case 167: + case 166: /* Line 1464 of yacc.c */ -#line 1657 "awkgram.y" +#line 1651 "awkgram.y" { INSTRUCTION *ip = (yyvsp[(1) - (1)])->lasti; int count = ip->sub_count; /* # of SUBSEP-seperated expressions */ @@ -4057,10 +4049,10 @@ regular_loop: } break; - case 168: + case 167: /* Line 1464 of yacc.c */ -#line 1674 "awkgram.y" +#line 1668 "awkgram.y" { INSTRUCTION *t = (yyvsp[(2) - (3)]); if ((yyvsp[(2) - (3)]) == NULL) { @@ -4076,33 +4068,33 @@ regular_loop: } break; - case 169: + case 168: /* Line 1464 of yacc.c */ -#line 1691 "awkgram.y" +#line 1685 "awkgram.y" { (yyval) = (yyvsp[(1) - (1)]); } break; - case 170: + case 169: /* Line 1464 of yacc.c */ -#line 1693 "awkgram.y" +#line 1687 "awkgram.y" { (yyval) = list_merge((yyvsp[(1) - (2)]), (yyvsp[(2) - (2)])); } break; - case 171: + case 170: /* Line 1464 of yacc.c */ -#line 1700 "awkgram.y" +#line 1694 "awkgram.y" { (yyval) = (yyvsp[(1) - (2)]); } break; - case 172: + case 171: /* Line 1464 of yacc.c */ -#line 1705 "awkgram.y" +#line 1699 "awkgram.y" { char *var_name = (yyvsp[(1) - (1)])->lextok; @@ -4112,10 +4104,10 @@ regular_loop: } break; - case 173: + case 172: /* Line 1464 of yacc.c */ -#line 1713 "awkgram.y" +#line 1707 "awkgram.y" { NODE *n; @@ -4128,10 +4120,10 @@ regular_loop: } break; - case 174: + case 173: /* Line 1464 of yacc.c */ -#line 1727 "awkgram.y" +#line 1721 "awkgram.y" { INSTRUCTION *ip = (yyvsp[(1) - (1)])->nexti; if (ip->opcode == Op_push @@ -4145,10 +4137,10 @@ regular_loop: } break; - case 175: + case 174: /* Line 1464 of yacc.c */ -#line 1739 "awkgram.y" +#line 1733 "awkgram.y" { (yyval) = list_append((yyvsp[(2) - (3)]), (yyvsp[(1) - (3)])); if ((yyvsp[(3) - (3)]) != NULL) @@ -4156,70 +4148,70 @@ regular_loop: } break; - case 176: + case 175: /* Line 1464 of yacc.c */ -#line 1748 "awkgram.y" +#line 1742 "awkgram.y" { (yyvsp[(1) - (1)])->opcode = Op_postincrement; } break; - case 177: + case 176: /* Line 1464 of yacc.c */ -#line 1752 "awkgram.y" +#line 1746 "awkgram.y" { (yyvsp[(1) - (1)])->opcode = Op_postdecrement; } break; - case 178: + case 177: /* Line 1464 of yacc.c */ -#line 1755 "awkgram.y" +#line 1749 "awkgram.y" { (yyval) = NULL; } break; - case 180: + case 179: /* Line 1464 of yacc.c */ -#line 1763 "awkgram.y" +#line 1757 "awkgram.y" { yyerrok; } break; - case 181: + case 180: /* Line 1464 of yacc.c */ -#line 1767 "awkgram.y" +#line 1761 "awkgram.y" { yyerrok; } break; - case 184: + case 183: /* Line 1464 of yacc.c */ -#line 1776 "awkgram.y" +#line 1770 "awkgram.y" { yyerrok; } break; - case 185: + case 184: /* Line 1464 of yacc.c */ -#line 1780 "awkgram.y" +#line 1774 "awkgram.y" { (yyval) = (yyvsp[(1) - (1)]); yyerrok; } break; - case 186: + case 185: /* Line 1464 of yacc.c */ -#line 1784 "awkgram.y" +#line 1778 "awkgram.y" { yyerrok; } break; /* Line 1464 of yacc.c */ -#line 4235 "awkgram.c" +#line 4227 "awkgram.c" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); @@ -4431,7 +4423,7 @@ yyreturn: /* Line 1684 of yacc.c */ -#line 1786 "awkgram.y" +#line 1780 "awkgram.y" struct token { @@ -4495,14 +4487,14 @@ static const struct token tokentab[] = { {"dcngettext", Op_builtin, LEX_BUILTIN, GAWKX|A(1)|A(2)|A(3)|A(4)|A(5), do_dcngettext}, {"default", Op_K_default, LEX_DEFAULT, GAWKX, 0}, {"delete", Op_K_delete, LEX_DELETE, NOT_OLD, 0}, -{"do", Op_symbol, LEX_DO, NOT_OLD|BREAK|CONTINUE, 0}, +{"do", Op_K_do, LEX_DO, NOT_OLD|BREAK|CONTINUE, 0}, {"else", Op_K_else, LEX_ELSE, 0, 0}, {"eval", Op_symbol, LEX_EVAL, 0, 0}, {"exit", Op_K_exit, LEX_EXIT, 0, 0}, {"exp", Op_builtin, LEX_BUILTIN, A(1), do_exp}, {"extension", Op_builtin, LEX_BUILTIN, GAWKX|A(2), do_ext}, {"fflush", Op_builtin, LEX_BUILTIN, RESX|A(0)|A(1), do_fflush}, -{"for", Op_symbol, LEX_FOR, BREAK|CONTINUE, 0}, +{"for", Op_K_for, LEX_FOR, BREAK|CONTINUE, 0}, {"func", Op_func, LEX_FUNCTION, NOT_POSIX|NOT_OLD, 0}, {"function",Op_func, LEX_FUNCTION, NOT_OLD, 0}, {"gensub", Op_builtin, LEX_BUILTIN, GAWKX|A(3)|A(4), do_gensub}, @@ -4540,12 +4532,12 @@ static const struct token tokentab[] = { {"strtonum", Op_builtin, LEX_BUILTIN, GAWKX|A(1), do_strtonum}, {"sub", Op_builtin, LEX_BUILTIN, NOT_OLD|A(2)|A(3), do_sub}, {"substr", Op_builtin, LEX_BUILTIN, A(2)|A(3), do_substr}, -{"switch", Op_symbol, LEX_SWITCH, GAWKX|BREAK, 0}, +{"switch", Op_K_switch, LEX_SWITCH, GAWKX|BREAK, 0}, {"system", Op_builtin, LEX_BUILTIN, NOT_OLD|A(1), do_system}, {"systime", Op_builtin, LEX_BUILTIN, GAWKX|A(0), do_systime}, {"tolower", Op_builtin, LEX_BUILTIN, NOT_OLD|A(1), do_tolower}, {"toupper", Op_builtin, LEX_BUILTIN, NOT_OLD|A(1), do_toupper}, -{"while", Op_symbol, LEX_WHILE, BREAK|CONTINUE, 0}, +{"while", Op_K_while, LEX_WHILE, BREAK|CONTINUE, 0}, {"xor", Op_builtin, LEX_BUILTIN, GAWKX|A(2), do_xor}, }; @@ -6080,12 +6072,15 @@ retry: yylval = bcalloc(tokentab[mid].value, 3, sourceline); break; + case LEX_FOR: case LEX_WHILE: case LEX_DO: - case LEX_FOR: case LEX_SWITCH: - yylval = bcalloc(tokentab[mid].value, - !!do_profiling + 1, sourceline); + if (! do_profiling) + return lasttok = class; + /* fall through */ + case LEX_CASE: + yylval = bcalloc(tokentab[mid].value, 2, sourceline); break; default: @@ -7152,13 +7147,6 @@ mk_rexp(INSTRUCTION *list) /* isnoeffect --- when used as a statement, has no side effects */ -/* - * To be completely general, we should recursively walk the parse - * tree, to make sure that all the subexpressions also have no effect. - * Instead, we just weaken the actual warning that's printed, up above - * in the grammar. - */ - static int isnoeffect(OPCODE type) { @@ -7489,23 +7477,26 @@ mk_condition(INSTRUCTION *cond, INSTRUCTION *ifp, INSTRUCTION *true_branch, INSTRUCTION *ip; - /* FIXME else { } -- add elsep */ - if (false_branch == NULL) { - if (elsep != NULL) /* else { } */ - false_branch = list_append(list_create(elsep), instruction(Op_no_op)); - else - false_branch = list_create(instruction(Op_no_op)); + false_branch = list_create(instruction(Op_no_op)); + if (elsep != NULL) { /* else { } */ + if (do_profiling) + (void) list_prepend(false_branch, elsep); + else + bcfree(elsep); + } } else { /* assert(elsep != NULL); */ /* avoid a series of no_op's: if .. else if .. else if .. */ if (false_branch->lasti->opcode != Op_no_op) (void) list_append(false_branch, instruction(Op_no_op)); - (void) list_prepend(false_branch, elsep); - false_branch->nexti->branch_end = false_branch->lasti; - if (do_profiling) + if (do_profiling) { + (void) list_prepend(false_branch, elsep); + false_branch->nexti->branch_end = false_branch->lasti; (void) list_prepend(false_branch, instruction(Op_exec_count)); + } else + bcfree(elsep); } (void) list_prepend(false_branch, instruction(Op_jmp)); @@ -7515,12 +7506,13 @@ mk_condition(INSTRUCTION *cond, INSTRUCTION *ifp, INSTRUCTION *true_branch, ip = list_append(cond, instruction(Op_jmp_false)); ip->lasti->target_jmp = false_branch->nexti->nexti; - (void) list_prepend(ip, ifp); if (do_profiling) { + (void) list_prepend(ip, ifp); (void) list_append(ip, instruction(Op_exec_count)); ip->nexti->branch_if = ip->lasti; ip->nexti->branch_else = false_branch->nexti; - } + } else + bcfree(ifp); if (true_branch != NULL) list_merge(ip, true_branch); @@ -7704,7 +7696,7 @@ optimize_assignment(INSTRUCTION *exp) * 1) Array element assignment array[subs] = x: * Replaces Op_push_array + Op_subscript_lhs + Op_assign + Op_pop * with single instruction Op_store_sub. - * Limitation (FIXME): 1 dimension and sub is simple var/value. + * Limitation: 1 dimension and sub is simple var/value. * * 2) Simple variable assignment var = x: * Replaces Op_push_lhs + Op_assign + Op_pop with Op_store_var. @@ -7749,7 +7741,7 @@ optimize_assignment(INSTRUCTION *exp) /* avoid stuff like x = x (x = y) or x = x gsub(/./, "b", x); * check for l-value reference to this variable in the r.h.s. - * Also avoid function calls in general, to guard against + * Also, avoid function calls in general to guard against * global variable assignment. */ @@ -7840,7 +7832,7 @@ optimize_assignment(INSTRUCTION *exp) /* mk_getline --- make instructions for getline */ static INSTRUCTION * -mk_getline(INSTRUCTION *op, INSTRUCTION *var, INSTRUCTION *redir, OPCODE redirtype) +mk_getline(INSTRUCTION *op, INSTRUCTION *var, INSTRUCTION *redir, int redirtype) { INSTRUCTION *ip; INSTRUCTION *tp; @@ -7903,73 +7895,72 @@ mk_for_loop(INSTRUCTION *forp, INSTRUCTION *init, INSTRUCTION *cond, INSTRUCTION *incr, INSTRUCTION *body) { /* - * [ Op_push_loop | z| y] <-- continue | break * ------------------------ * init (may be NULL) * ------------------------ * x: * cond (Op_no_op if NULL) * ------------------------ - * [ Op_jmp_false y ] + * [ Op_jmp_false tb ] * ------------------------ * body (may be NULL) * ------------------------ - * z: - * incr (may be NULL) - * [ Op_jmp x ] + * tc: + * incr (may be NULL) + * [ Op_jmp x ] * ------------------------ - * y:[ Op_pop_loop ] + * tb:[ Op_no_op ] */ - INSTRUCTION *ip; - INSTRUCTION *cp; + INSTRUCTION *ip, *tbreak, *tcont; INSTRUCTION *jmp; INSTRUCTION *pp_cond; INSTRUCTION *ret; - cp = instruction(Op_pop_loop); - - forp->opcode = Op_push_loop; - forp->target_break = cp; - ip = list_create(forp); - - if (init != NULL) - (void) list_merge(ip, init); + tbreak = instruction(Op_no_op); if (cond != NULL) { add_lint(cond, LINT_assign_in_cond); pp_cond = cond->nexti; - (void) list_merge(ip, cond); + ip = cond; (void) list_append(ip, instruction(Op_jmp_false)); - ip->lasti->target_jmp = cp; + ip->lasti->target_jmp = tbreak; } else { pp_cond = instruction(Op_no_op); - (void) list_append(ip, pp_cond); + ip = list_create(pp_cond); } + if (init != NULL) + ip = list_merge(init, ip); + if (do_profiling) { (void) list_append(ip, instruction(Op_exec_count)); - (forp + 1)->opcode = Op_K_for; (forp + 1)->forloop_cond = pp_cond; (forp + 1)->forloop_body = ip->lasti; } if (body != NULL) (void) list_merge(ip, body); - - if (incr != NULL) { - forp->target_continue = incr->nexti; - (void) list_merge(ip, incr); - } + jmp = instruction(Op_jmp); jmp->target_jmp = pp_cond; if (incr == NULL) - forp->target_continue = jmp; - (void) list_append(ip, jmp); + tcont = jmp; + else { + tcont = incr->nexti; + (void) list_merge(ip, incr); + } - ret = list_append(ip, cp); + (void) list_append(ip, jmp); + ret = list_append(ip, tbreak); + fix_break_continue(ret, tbreak, tcont); - fix_break_continue(forp, cp, TRUE); + if (do_profiling) { + forp->target_break = tbreak; + forp->target_continue = tcont; + ret = list_prepend(ret, forp); + } /* else + forp is NULL */ return ret; } @@ -8095,20 +8086,16 @@ count_expressions(INSTRUCTION **list, int isarg) return count; } -/* fix_break_continue --- fix up break & continue nodes in loop bodies */ +/* fix_break_continue --- fix up break & continue codes in loop bodies */ static void -fix_break_continue(INSTRUCTION *start, INSTRUCTION *end, int check_continue) +fix_break_continue(INSTRUCTION *list, INSTRUCTION *b_target, INSTRUCTION *c_target) { - INSTRUCTION *ip, *b_target, *c_target; - - assert(start->opcode == Op_push_loop); - assert(end->opcode == Op_pop_loop); + INSTRUCTION *ip; - b_target = start->target_break; - c_target = start->target_continue; + list->lasti->nexti = NULL; /* just to make sure */ - for (ip = start; ip != end; ip = ip->nexti) { + for (ip = list->nexti; ip != NULL; ip = ip->nexti) { switch (ip->opcode) { case Op_K_break: if (ip->target_jmp == NULL) @@ -8116,7 +8103,7 @@ fix_break_continue(INSTRUCTION *start, INSTRUCTION *end, int check_continue) break; case Op_K_continue: - if (check_continue && ip->target_jmp == NULL) + if (ip->target_jmp == NULL) ip->target_jmp = c_target; break; @@ -8173,7 +8160,6 @@ release_symbols(NODE *symlist, int keep_globals) * and free all associated memory. */ - void destroy_symbol(char *name) { @@ -8336,22 +8322,6 @@ free_bc_internal(INSTRUCTION *cp) ) efree(cp->func_name); break; - case Op_K_switch: - for (curr = cp->case_val; curr != NULL; curr = curr->nexti) { - if (curr->opcode == Op_K_case && - curr->memory->type != Node_val - ) { - m = curr->memory; - if (m->re_text != NULL) - unref(m->re_text); - if (m->re_reg != NULL) - refree(m->re_reg); - if (m->re_exp != NULL) - unref(m->re_exp); - freenode(m); - } - } - break; case Op_push_re: case Op_match_rec: case Op_match: |