From 6ca7973d4913b0ca7e692ac3ebbcf8e366b41860 Mon Sep 17 00:00:00 2001 From: Emanuele Torre Date: Mon, 10 Jul 2023 18:45:32 +0200 Subject: [PATCH] Allow using { $__loc__ } as shorthand for { __loc__: $__loc__ } n.b.: { $__loc__: "foo" } is still not allowed. $__loc__ cannot be overwritten, and it is always an object. Using { $x: "foo" } where $x is not a string is an error, so there is not much of a point in supporting that. --- src/parser.c | 2070 +++++++++++++++++++++++++------------------------ src/parser.y | 12 +- tests/jq.test | 6 + 3 files changed, 1059 insertions(+), 1029 deletions(-) diff --git a/src/parser.c b/src/parser.c index dba7023d..45e03b06 100644 --- a/src/parser.c +++ b/src/parser.c @@ -568,8 +568,13 @@ static block gen_update(block object, block val, int optype) { optype))))); } +static block gen_loc_object(location *loc, struct locfile *locations) { + return gen_const(JV_OBJECT(jv_string("file"), jv_copy(locations->fname), + jv_string("line"), jv_number(locfile_get_line(locations, loc->start) + 1))); +} -#line 573 "src/parser.c" + +#line 578 "src/parser.c" #ifdef short @@ -896,16 +901,16 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 29 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 2034 +#define YYLAST 2039 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 70 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 30 /* YYNRULES -- Number of rules. */ -#define YYNRULES 169 +#define YYNRULES 170 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 317 +#define YYNSTATES 318 /* YYMAXUTOK -- Last valid token kind. */ #define YYMAXUTOK 303 @@ -959,23 +964,24 @@ static const yytype_int8 yytranslate[] = /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_int16 yyrline[] = { - 0, 307, 307, 310, 315, 318, 333, 336, 341, 344, - 349, 353, 356, 360, 364, 368, 371, 376, 380, 384, - 389, 396, 400, 404, 408, 412, 416, 420, 424, 428, - 432, 436, 440, 444, 448, 452, 456, 460, 466, 472, - 476, 480, 484, 488, 492, 496, 500, 504, 509, 512, - 529, 538, 545, 553, 564, 569, 575, 578, 583, 587, - 594, 594, 598, 598, 605, 608, 611, 617, 620, 623, - 628, 631, 634, 640, 643, 646, 654, 658, 661, 664, - 667, 670, 673, 676, 679, 682, 686, 692, 695, 698, - 701, 704, 707, 710, 713, 716, 719, 722, 725, 728, - 731, 734, 737, 740, 743, 746, 749, 752, 774, 778, - 782, 786, 798, 803, 804, 805, 806, 809, 812, 817, - 822, 825, 830, 833, 838, 842, 845, 850, 853, 858, - 861, 866, 869, 872, 875, 878, 881, 889, 895, 898, - 901, 904, 907, 910, 913, 916, 919, 922, 925, 928, - 931, 934, 937, 940, 943, 946, 951, 954, 955, 956, - 959, 962, 965, 968, 972, 976, 980, 984, 988, 996 + 0, 312, 312, 315, 320, 323, 338, 341, 346, 349, + 354, 358, 361, 365, 369, 373, 376, 381, 385, 389, + 394, 401, 405, 409, 413, 417, 421, 425, 429, 433, + 437, 441, 445, 449, 453, 457, 461, 465, 471, 477, + 481, 485, 489, 493, 497, 501, 505, 509, 514, 517, + 534, 543, 550, 558, 569, 574, 580, 583, 588, 592, + 599, 599, 603, 603, 610, 613, 616, 622, 625, 628, + 633, 636, 639, 645, 648, 651, 659, 663, 666, 669, + 672, 675, 678, 681, 684, 687, 691, 697, 700, 703, + 706, 709, 712, 715, 718, 721, 724, 727, 730, 733, + 736, 739, 742, 745, 748, 751, 754, 757, 779, 783, + 787, 790, 802, 807, 808, 809, 810, 813, 816, 821, + 826, 829, 834, 837, 842, 846, 849, 854, 857, 862, + 865, 870, 873, 876, 879, 882, 885, 893, 899, 902, + 905, 908, 911, 914, 917, 920, 923, 926, 929, 932, + 935, 938, 941, 944, 947, 950, 955, 958, 959, 960, + 963, 966, 969, 972, 976, 980, 984, 988, 992, 996, + 1004 }; #endif @@ -1016,7 +1022,7 @@ yysymbol_name (yysymbol_kind_t yysymbol) } #endif -#define YYPACT_NINF (-161) +#define YYPACT_NINF (-159) #define yypact_value_is_default(Yyn) \ ((Yyn) == YYPACT_NINF) @@ -1030,38 +1036,38 @@ yysymbol_name (yysymbol_kind_t yysymbol) STATE-NUM. */ static const yytype_int16 yypact[] = { - -14, 863, 29, 34, 14, 20, -161, -161, 21, -161, - 78, 863, 448, 448, 863, 103, 39, -161, -161, 863, - 417, 284, 350, 581, 50, 1351, 863, -161, 2, -161, - 7, 7, 863, 34, 665, 863, -161, -161, -22, 1707, - 9, 51, 97, 82, -161, -161, -161, -2, 69, 1181, - -161, 133, 21, 81, 77, -161, 992, -46, 83, 85, - -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, - -161, -161, -161, -161, -161, -161, -161, -161, 863, 86, - 87, 76, 96, 84, 863, 863, 863, 863, 863, 863, - 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, - 863, 863, 863, 863, 863, 863, 863, 863, -161, -161, - 1875, 92, -5, -4, 165, 140, -161, -161, -161, 1875, - 863, -161, -161, 1402, 1875, 10, -161, -161, 74, 863, - 468, -5, -5, 519, 863, 4, -161, -161, -161, -161, - -161, -161, 637, 206, -161, 206, 206, 1215, 206, 206, - -161, 637, 149, 1943, 580, 580, 1909, 779, 1975, 1943, - 1943, 1943, 1943, 1943, 1943, 580, 580, 1875, 1909, 1943, - 580, 580, -2, -2, 98, 98, 98, -161, -161, -5, - 925, 117, 111, 119, 731, 102, 99, 863, 104, 958, - 121, -161, -161, 863, -161, 25, -161, -161, 75, -161, - 1453, -161, 1657, 101, 106, -161, -161, 1875, -161, 863, - -161, -19, -161, 206, 116, 59, 116, 116, 105, 116, - 116, -161, -161, -161, -24, 112, 113, 114, 863, 115, - -25, -161, 118, -5, 863, 120, 1026, -161, -161, 1060, - -161, 797, 123, -161, -161, -161, -161, 74, 124, -161, - 863, 863, -161, -161, 863, 863, 1741, -161, 206, 206, - -5, -161, -5, -5, -5, 1249, -5, 925, -161, -5, - 150, 1875, -161, 131, 135, 139, 1094, -161, -161, 863, - 1791, 1841, 1504, 1555, -161, 116, 116, -161, -161, -161, - -161, 136, -161, -161, -161, -161, -161, -161, 141, 1606, - -161, 863, 863, 863, -5, -161, -161, 1657, 1283, 1128, - -161, -161, -161, 863, -161, 1317, -161 + -13, 868, 7, 41, -44, -30, -159, -159, -2, -159, + 65, 868, 449, 449, 868, 66, 36, -159, -159, 868, + 418, 285, 351, 582, 4, 1356, 868, -159, 10, -159, + -4, -4, 868, 41, 670, 868, -159, -159, -18, 1712, + 47, 51, 54, 32, -159, -159, -159, -6, 46, 1186, + -159, 112, -2, 58, 52, -159, 997, -24, 64, 68, + -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, + -159, -159, -159, -159, -159, -159, -159, -159, -159, 868, + 69, 72, 60, 92, 75, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, -159, + -159, 1880, 86, -5, 6, 166, 132, -159, -159, -159, + 1880, 868, -159, -159, 1407, 1880, 63, -159, -159, 73, + 868, 469, -5, -5, 520, 868, 11, -159, -159, -159, + -159, -159, -159, 638, 207, -159, 207, 207, 1220, 207, + 207, -159, 638, 146, 1948, 581, 581, 1914, 784, 1980, + 1948, 1948, 1948, 1948, 1948, 1948, 581, 581, 1880, 1914, + 1948, 581, 581, -6, -6, 95, 95, 95, -159, -159, + -5, 930, 114, 110, 118, 736, 101, 96, 868, 102, + 963, 120, -159, -159, 868, -159, 24, -159, -159, 76, + -159, 1458, -159, 1662, 103, 104, -159, -159, 1880, -159, + 868, -159, -47, -159, 207, 115, 17, 115, 115, 105, + 115, 115, -159, -159, -159, -19, 106, 113, 116, 868, + 117, -22, -159, 119, -5, 868, 107, 1031, -159, -159, + 1065, -159, 802, 124, -159, -159, -159, -159, 73, 125, + -159, 868, 868, -159, -159, 868, 868, 1746, -159, 207, + 207, -5, -159, -5, -5, -5, 1254, -5, 930, -159, + -5, 136, 1880, -159, 133, 140, 141, 1099, -159, -159, + 868, 1796, 1846, 1509, 1560, -159, 115, 115, -159, -159, + -159, -159, 138, -159, -159, -159, -159, -159, -159, 143, + 1611, -159, 868, 868, 868, -5, -159, -159, 1662, 1288, + 1133, -159, -159, -159, 868, -159, 1322, -159 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1076,47 +1082,47 @@ static const yytype_uint8 yydefact[] = 0, 0, 18, 0, 76, 75, 64, 32, 0, 0, 85, 0, 0, 84, 0, 106, 0, 0, 166, 165, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, - 148, 149, 150, 151, 152, 153, 154, 155, 0, 163, - 167, 0, 157, 0, 0, 0, 0, 0, 0, 0, + 148, 149, 150, 151, 152, 153, 154, 155, 167, 0, + 163, 168, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 21, 5, - 10, 81, 0, 0, 0, 0, 53, 52, 3, 2, - 8, 7, 48, 0, 119, 0, 117, 64, 0, 0, - 0, 0, 0, 0, 0, 0, 113, 104, 86, 80, - 114, 105, 0, 0, 116, 0, 0, 0, 0, 0, - 107, 0, 0, 40, 41, 42, 25, 24, 23, 27, - 31, 34, 36, 39, 26, 45, 46, 28, 29, 22, - 43, 44, 30, 33, 35, 37, 38, 77, 124, 0, - 0, 0, 0, 123, 0, 83, 0, 0, 92, 0, - 0, 9, 49, 0, 112, 0, 59, 58, 0, 56, - 0, 16, 0, 0, 0, 19, 17, 20, 65, 0, - 61, 0, 159, 0, 169, 72, 160, 164, 0, 162, - 161, 158, 108, 127, 0, 0, 0, 131, 0, 0, - 0, 129, 0, 0, 0, 94, 0, 79, 115, 0, - 91, 0, 88, 51, 50, 118, 63, 0, 0, 54, - 0, 0, 69, 15, 0, 0, 0, 71, 0, 0, - 0, 125, 0, 0, 0, 0, 0, 0, 126, 0, - 122, 11, 93, 90, 100, 99, 0, 87, 57, 0, - 0, 0, 0, 0, 66, 70, 168, 128, 137, 133, - 132, 0, 135, 130, 134, 89, 97, 96, 98, 0, - 68, 0, 0, 0, 0, 95, 55, 0, 0, 0, - 136, 67, 12, 0, 14, 0, 13 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, + 5, 10, 81, 0, 0, 0, 0, 53, 52, 3, + 2, 8, 7, 48, 0, 119, 0, 117, 64, 0, + 0, 0, 0, 0, 0, 0, 0, 113, 104, 86, + 80, 114, 105, 0, 0, 116, 0, 0, 0, 0, + 0, 107, 0, 0, 40, 41, 42, 25, 24, 23, + 27, 31, 34, 36, 39, 26, 45, 46, 28, 29, + 22, 43, 44, 30, 33, 35, 37, 38, 77, 124, + 0, 0, 0, 0, 123, 0, 83, 0, 0, 92, + 0, 0, 9, 49, 0, 112, 0, 59, 58, 0, + 56, 0, 16, 0, 0, 0, 19, 17, 20, 65, + 0, 61, 0, 159, 0, 170, 72, 160, 164, 0, + 162, 161, 158, 108, 127, 0, 0, 0, 131, 0, + 0, 0, 129, 0, 0, 0, 94, 0, 79, 115, + 0, 91, 0, 88, 51, 50, 118, 63, 0, 0, + 54, 0, 0, 69, 15, 0, 0, 0, 71, 0, + 0, 0, 125, 0, 0, 0, 0, 0, 0, 126, + 0, 122, 11, 93, 90, 100, 99, 0, 87, 57, + 0, 0, 0, 0, 0, 66, 70, 169, 128, 137, + 133, 132, 0, 135, 130, 134, 89, 97, 96, 98, + 0, 68, 0, 0, 0, 0, 95, 55, 0, 0, + 0, 136, 67, 12, 0, 14, 0, 13 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -161, -161, -161, 168, 89, -1, -161, -161, 171, 0, - -161, -44, 5, -161, -161, 90, -103, -137, -7, -161, - 12, -161, -73, -152, -161, -161, -51, -160, -105, -161 + -159, -159, -159, 145, 74, -1, -159, -159, 172, -12, + -159, -43, 5, -159, -159, 78, -104, -138, -7, -159, + 16, -159, -69, -114, -159, -159, -51, -158, -111, -159 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_uint8 yydefgoto[] = { - 0, 2, 3, 32, 118, 110, 33, 34, 115, 26, - 198, 199, 27, 46, 127, 135, 253, 214, 28, 125, - 126, 181, 182, 183, 224, 230, 231, 80, 81, 82 + 0, 2, 3, 32, 119, 111, 33, 34, 116, 26, + 199, 200, 27, 46, 128, 136, 254, 215, 28, 126, + 127, 182, 183, 184, 225, 231, 232, 81, 82, 83 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -1124,418 +1130,418 @@ static const yytype_uint8 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { - 25, 178, 1, 142, 52, 40, 41, 111, 216, 217, - 39, 219, 220, 42, 111, 52, 112, 143, 47, 49, - 232, 56, 144, 131, 267, 260, 53, 223, 79, 29, - 142, 119, 120, 123, 124, 116, 116, 212, 18, 128, - 44, 129, 261, 268, 143, 45, 221, 208, 209, 18, - 210, 30, 31, 105, 106, 107, 111, 108, 203, 204, - 179, 184, 180, 37, 111, 132, 113, 114, 208, 209, - 193, 246, 194, 113, 114, 35, 257, 147, 196, 36, - 197, 270, 38, 153, 154, 155, 156, 157, 158, 159, + 25, 179, 143, 1, 52, 40, 41, 29, 217, 218, + 39, 220, 221, 42, 52, 112, 144, 35, 47, 49, + 121, 56, 112, 233, 113, 143, 53, 268, 80, 36, + 261, 120, 213, 124, 125, 117, 117, 44, 18, 144, + 37, 222, 45, 129, 145, 130, 269, 262, 18, 106, + 107, 108, 112, 109, 209, 210, 112, 211, 30, 31, + 180, 132, 181, 204, 205, 133, 224, 209, 210, 38, + 247, 185, 43, 84, 114, 115, 258, 197, 148, 198, + 135, 114, 115, 134, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, - 170, 171, 172, 173, 174, 175, 176, 232, 287, 43, - 288, 289, 290, 189, 292, 113, 114, 294, 185, 83, - 120, 285, 286, 113, 114, 243, 133, 244, 200, 202, - 134, 136, 206, 207, 138, 247, 215, 248, 215, 215, - 139, 215, 215, 140, 150, 151, 145, 79, 146, 148, - 149, 177, 310, 152, 190, 222, 79, 108, 233, 234, - -121, 237, 254, 240, 258, 238, 186, 255, 259, 4, - 5, 6, 7, 8, 9, 262, 263, 264, 266, 272, - 10, 269, 277, 236, 11, 229, 239, 279, 12, 13, - 295, -120, 124, 14, 296, 15, 16, 17, 297, 304, - 305, 121, 117, 278, 311, 245, 215, 18, 256, 191, - 4, 5, 6, 7, 8, 9, 293, 195, 0, 19, - 0, 0, 0, 0, 0, 0, 20, 265, 187, 21, - 22, 188, 23, 271, 24, 0, 0, 16, 17, 0, - 276, 0, 0, 0, 0, 0, 0, 0, 18, 280, - 281, 215, 215, 282, 283, 0, 0, 0, 0, 0, - 213, 0, 0, 0, 0, 0, 0, 20, 0, 0, - 21, 22, 229, 23, 0, 24, 0, 0, 299, 0, - 0, 0, 0, 0, -73, 50, 0, 0, 51, -73, - 0, 0, 52, 0, -73, -73, -73, -73, -73, 0, - 307, 308, 309, 0, -73, -73, -73, 0, 0, -73, - -73, -73, 315, -73, 0, 0, 0, -73, -73, -73, - -73, -73, -73, -73, -73, 0, 18, 0, 0, -73, - 0, 0, -73, -73, -73, -73, -73, -73, -73, -73, - -73, -73, 0, -73, -73, 0, -73, -73, -73, -73, - -73, 54, -73, 0, 4, 5, 6, 7, 8, 9, - 0, 0, 0, 0, 0, 10, 0, 0, 0, 11, - 0, 0, 0, 12, 13, 0, 0, 0, 14, 0, - 15, 16, 17, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, - 0, 20, 0, 0, 21, 22, 55, 23, 48, 24, - 0, 4, 5, 6, 7, 8, 9, 0, 0, 0, - 0, 0, 10, 0, 0, 0, 11, 0, 0, 0, - 12, 13, 0, 0, 0, 14, 0, 15, 16, 17, - 0, 0, 4, 5, 6, 7, 8, 9, 0, 18, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, - 0, 19, 4, 5, 6, 7, 8, 9, 20, 16, - 17, 21, 22, 10, 23, 0, 24, 11, 0, 0, - 18, 12, 13, 0, 0, 0, 14, 0, 15, 16, - 17, 0, 0, 0, 0, 0, 0, 0, 0, 20, - 18, 0, 21, 22, 0, 23, 0, 24, 0, 0, - 205, 0, 19, 4, 5, 6, 7, 8, 9, 20, - 0, 0, 21, 22, 10, 23, 0, 24, 11, 0, - 0, 0, 12, 13, 0, 0, 0, 14, 0, 15, - 16, 17, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, - 20, 0, 57, 21, 22, 58, 23, 59, 24, 52, - 0, -157, -157, 0, 0, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, - 75, 76, 77, 0, 0, 0, 0, 0, 0, -157, - -157, 0, 0, 18, 0, 0, 0, 0, 0, 0, - 0, -157, -157, 103, 104, 105, 106, 107, 211, 108, - 0, 58, 78, 59, 0, 52, 0, 0, 0, -156, - 0, 60, 61, 62, 63, 64, 65, 66, 67, 68, - 69, 70, 71, 72, 73, 74, 75, 76, 77, 4, - 5, 6, 7, 8, 9, 0, 0, 0, 0, 18, - 10, 0, 0, 0, 11, 0, 0, 0, 12, 13, - 0, 0, 0, 14, 0, 15, 16, 17, 78, 0, - 0, 0, 0, 0, 0, -156, 0, 18, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, - 0, 0, 0, 0, 0, 122, 20, 0, 0, 21, - 22, 0, 23, 0, 24, 4, 5, 6, 7, 8, + 170, 171, 172, 173, 174, 175, 176, 177, 137, 121, + 233, 114, 115, 139, 190, 114, 115, 140, 141, 186, + 271, 286, 287, 194, 244, 195, 245, 146, 151, 201, + 203, 147, 149, 207, 208, 150, 248, 216, 249, 216, + 216, 152, 216, 216, 153, 178, 191, 288, 80, 289, + 290, 291, 223, 293, 109, 234, 295, 80, 235, -121, + 238, 241, 239, 259, 255, 256, 273, 187, 260, 263, + 4, 5, 6, 7, 8, 9, 264, -120, 122, 265, + 267, 10, 270, 278, 237, 11, 230, 240, 280, 12, + 13, 311, 296, 125, 14, 192, 15, 16, 17, 297, + 298, 305, 306, 118, 312, 279, 196, 216, 18, 257, + 246, 4, 5, 6, 7, 8, 9, 294, 0, 0, + 19, 0, 0, 0, 0, 0, 0, 20, 266, 188, + 21, 22, 189, 23, 272, 24, 0, 0, 16, 17, + 0, 277, 0, 0, 0, 0, 0, 0, 0, 18, + 281, 282, 216, 216, 283, 284, 0, 0, 0, 0, + 0, 214, 0, 0, 0, 0, 0, 0, 20, 0, + 0, 21, 22, 230, 23, 0, 24, 0, 0, 300, + 0, 0, 0, 0, 0, -73, 50, 0, 0, 51, + -73, 0, 0, 52, 0, -73, -73, -73, -73, -73, + 0, 308, 309, 310, 0, -73, -73, -73, 0, 0, + -73, -73, -73, 316, -73, 0, 0, 0, -73, -73, + -73, -73, -73, -73, -73, -73, 0, 18, 0, 0, + -73, 0, 0, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, 0, -73, -73, 0, -73, -73, -73, + -73, -73, 54, -73, 0, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 10, 0, 0, 0, 11, 0, 0, 0, 12, 13, 0, 0, 0, 14, 0, 15, 16, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, - 85, 86, 20, 0, 0, 21, 22, 235, 23, 0, - 24, 4, 5, 6, 7, 8, 9, 0, 0, 0, - 0, 0, 10, 0, 0, 0, 11, 0, 96, 97, - 12, 13, 0, 0, 0, 14, 0, 15, 16, 17, - 101, 102, 103, 104, 105, 106, 107, 0, 108, 18, + 0, 0, 20, 0, 0, 21, 22, 55, 23, 48, + 24, 0, 4, 5, 6, 7, 8, 9, 0, 0, + 0, 0, 0, 10, 0, 0, 0, 11, 0, 0, + 0, 12, 13, 0, 0, 0, 14, 0, 15, 16, + 17, 0, 0, 4, 5, 6, 7, 8, 9, 0, + 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 202, 0, 19, 4, 5, 6, 7, 8, 9, 20, + 16, 17, 21, 22, 10, 23, 0, 24, 11, 0, + 0, 18, 12, 13, 0, 0, 0, 14, 0, 15, + 16, 17, 0, 0, 0, 0, 0, 0, 0, 0, + 20, 18, 0, 21, 22, 0, 23, 0, 24, 0, + 0, 206, 0, 19, 4, 5, 6, 7, 8, 9, + 20, 0, 0, 21, 22, 10, 23, 0, 24, 11, + 0, 0, 0, 12, 13, 0, 0, 0, 14, 0, + 15, 16, 17, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, + 0, 20, 0, 57, 21, 22, 58, 23, 59, 24, + 52, 0, -157, -157, 0, 0, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 0, 0, 0, 0, 0, + -157, -157, 0, 0, 18, 0, 0, 0, 0, 0, + 0, 0, -157, -157, 104, 105, 106, 107, 108, 212, + 109, 0, 58, 79, 59, 0, 52, 0, 0, 0, + -156, 0, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, + 78, 0, 0, 0, 4, 5, 6, 7, 8, 9, + 18, 0, 0, 0, 0, 10, 0, 0, 0, 11, + 0, 0, 0, 12, 13, 0, 0, 0, 14, 79, + 15, 16, 17, 0, 0, 0, -156, 0, 0, 0, + 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, + 123, 20, 0, 0, 21, 22, 0, 23, 0, 24, + 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, + 0, 10, 0, 0, 0, 11, 0, 0, 0, 12, + 13, 0, 0, 0, 14, 0, 15, 16, 17, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 19, 0, 0, 0, 0, 0, 0, 20, 0, - 0, 21, 22, 275, 23, 0, 24, 4, 5, 6, - 7, 8, 9, 0, 0, 0, 0, 0, 10, 0, - 0, 0, 11, 0, 0, 0, 12, 13, 0, 0, - 0, 14, 0, 15, 16, 17, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, - 0, 0, 0, 0, 20, 0, 225, 21, 22, 226, - 23, 227, 24, 52, 0, 0, 0, 0, 0, 60, - 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, - 71, 72, 73, 74, 75, 76, 77, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 18, 84, 85, - 86, 87, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 88, 89, 228, 0, 0, 0, - 0, 90, 91, 92, 93, 94, 95, 96, 97, 0, - 0, 0, 84, 85, 86, 87, 98, 99, 100, 101, - 102, 103, 104, 105, 106, 107, 0, 108, 88, 89, - 0, 241, 0, 0, 242, 90, 91, 92, 93, 94, - 95, 96, 97, 0, 0, 0, 84, 85, 86, 87, - 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, - 0, 108, 88, 89, 0, 0, 0, 0, 141, 90, - 91, 92, 93, 94, 95, 96, 97, 0, 0, 0, - 84, 85, 86, 87, 98, 99, 100, 101, 102, 103, - 104, 105, 106, 107, 0, 108, 88, 89, 0, 0, - 0, 0, 273, 90, 91, 92, 93, 94, 95, 96, - 97, 0, 0, 0, 84, 85, 86, 87, 98, 99, - 100, 101, 102, 103, 104, 105, 106, 107, 0, 108, - 88, 89, 0, 0, 0, 0, 274, 90, 91, 92, - 93, 94, 95, 96, 97, 0, 0, 0, 84, 85, - 86, 87, 98, 99, 100, 101, 102, 103, 104, 105, - 106, 107, 0, 108, 88, 89, 0, 0, 0, 0, - 298, 90, 91, 92, 93, 94, 95, 96, 97, 0, - 0, 0, 0, 0, 0, 0, 98, 99, 100, 101, - 102, 103, 104, 105, 106, 107, 0, 108, 313, 0, - 314, 84, 85, 86, 87, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 88, 89, 0, - 0, 0, 0, 0, 90, 91, 92, 93, 94, 95, - 96, 97, 0, 0, 0, 84, 85, 86, 87, 98, - 99, 100, 101, 102, 103, 104, 105, 106, 107, 0, - 108, 88, 89, 137, 0, 0, 0, 0, 90, 91, - 92, 93, 94, 95, 96, 97, 0, 0, 0, 84, - 85, 86, 87, 98, 99, 100, 101, 102, 103, 104, - 105, 106, 107, 0, 108, 88, 89, 218, 0, 0, - 0, 0, 90, 91, 92, 93, 94, 95, 96, 97, - 0, 0, 0, 84, 85, 86, 87, 98, 99, 100, - 101, 102, 103, 104, 105, 106, 107, 0, 108, 88, - 89, 291, 0, 0, 0, 0, 90, 91, 92, 93, - 94, 95, 96, 97, 0, 0, 0, 84, 85, 86, - 87, 98, 99, 100, 101, 102, 103, 104, 105, 106, - 107, 0, 108, 88, 89, 312, 0, 0, 0, 0, - 90, 91, 92, 93, 94, 95, 96, 97, 0, 0, - 0, 84, 85, 86, 87, 98, 99, 100, 101, 102, - 103, 104, 105, 106, 107, 0, 108, 88, 89, 316, - 0, 0, 0, 0, 90, 91, 92, 93, 94, 95, - 96, 97, 0, 0, 0, 0, 0, 0, 0, 98, - 99, 100, 101, 102, 103, 104, 105, 106, 107, 0, - 108, 109, 84, 85, 86, 87, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 88, 89, - 0, 0, 0, 0, 0, 90, 91, 92, 93, 94, - 95, 96, 97, 0, 0, 0, 0, 0, 0, 0, - 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, - 0, 108, 192, 84, 85, 86, 87, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, - 89, 0, 0, 0, 0, 0, 90, 91, 92, 93, - 94, 95, 96, 97, 0, 0, 0, 0, 0, 0, - 0, 98, 99, 100, 101, 102, 103, 104, 105, 106, - 107, 0, 108, 249, 84, 85, 86, 87, 0, 0, + 19, 0, 0, 0, 0, 86, 87, 20, 0, 0, + 21, 22, 236, 23, 0, 24, 4, 5, 6, 7, + 8, 9, 0, 0, 0, 0, 0, 10, 0, 0, + 0, 11, 0, 97, 98, 12, 13, 0, 0, 0, + 14, 0, 15, 16, 17, 102, 103, 104, 105, 106, + 107, 108, 0, 109, 18, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, + 0, 0, 0, 20, 0, 0, 21, 22, 276, 23, + 0, 24, 4, 5, 6, 7, 8, 9, 0, 0, + 0, 0, 0, 10, 0, 0, 0, 11, 0, 0, + 0, 12, 13, 0, 0, 0, 14, 0, 15, 16, + 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 19, 0, 0, 0, 0, 0, 0, 20, + 0, 226, 21, 22, 227, 23, 228, 24, 52, 0, + 0, 0, 0, 0, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 18, 85, 86, 87, 88, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, + 90, 229, 0, 0, 0, 0, 91, 92, 93, 94, + 95, 96, 97, 98, 0, 0, 0, 85, 86, 87, + 88, 99, 100, 101, 102, 103, 104, 105, 106, 107, + 108, 0, 109, 89, 90, 0, 242, 0, 0, 243, + 91, 92, 93, 94, 95, 96, 97, 98, 0, 0, + 0, 85, 86, 87, 88, 99, 100, 101, 102, 103, + 104, 105, 106, 107, 108, 0, 109, 89, 90, 0, + 0, 0, 0, 142, 91, 92, 93, 94, 95, 96, + 97, 98, 0, 0, 0, 85, 86, 87, 88, 99, + 100, 101, 102, 103, 104, 105, 106, 107, 108, 0, + 109, 89, 90, 0, 0, 0, 0, 274, 91, 92, + 93, 94, 95, 96, 97, 98, 0, 0, 0, 85, + 86, 87, 88, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 0, 109, 89, 90, 0, 0, 0, + 0, 275, 91, 92, 93, 94, 95, 96, 97, 98, + 0, 0, 0, 85, 86, 87, 88, 99, 100, 101, + 102, 103, 104, 105, 106, 107, 108, 0, 109, 89, + 90, 0, 0, 0, 0, 299, 91, 92, 93, 94, + 95, 96, 97, 98, 0, 0, 0, 0, 0, 0, + 0, 99, 100, 101, 102, 103, 104, 105, 106, 107, + 108, 0, 109, 314, 0, 315, 85, 86, 87, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 88, 89, 0, 0, 0, 0, 0, 90, 91, 92, - 93, 94, 95, 96, 97, 0, 0, 0, 0, 0, - 0, 0, 98, 99, 100, 101, 102, 103, 104, 105, - 106, 107, 0, 108, 302, 84, 85, 86, 87, 0, + 0, 0, 89, 90, 0, 0, 0, 0, 0, 91, + 92, 93, 94, 95, 96, 97, 98, 0, 0, 0, + 85, 86, 87, 88, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 0, 109, 89, 90, 138, 0, + 0, 0, 0, 91, 92, 93, 94, 95, 96, 97, + 98, 0, 0, 0, 85, 86, 87, 88, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 0, 109, + 89, 90, 219, 0, 0, 0, 0, 91, 92, 93, + 94, 95, 96, 97, 98, 0, 0, 0, 85, 86, + 87, 88, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 0, 109, 89, 90, 292, 0, 0, 0, + 0, 91, 92, 93, 94, 95, 96, 97, 98, 0, + 0, 0, 85, 86, 87, 88, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 0, 109, 89, 90, + 313, 0, 0, 0, 0, 91, 92, 93, 94, 95, + 96, 97, 98, 0, 0, 0, 85, 86, 87, 88, + 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 0, 109, 89, 90, 317, 0, 0, 0, 0, 91, + 92, 93, 94, 95, 96, 97, 98, 0, 0, 0, + 0, 0, 0, 0, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 0, 109, 110, 85, 86, 87, + 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 89, 90, 0, 0, 0, 0, 0, + 91, 92, 93, 94, 95, 96, 97, 98, 0, 0, + 0, 0, 0, 0, 0, 99, 100, 101, 102, 103, + 104, 105, 106, 107, 108, 0, 109, 193, 85, 86, + 87, 88, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 89, 90, 0, 0, 0, 0, + 0, 91, 92, 93, 94, 95, 96, 97, 98, 0, + 0, 0, 0, 0, 0, 0, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 0, 109, 250, 85, + 86, 87, 88, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 89, 90, 0, 0, 0, + 0, 0, 91, 92, 93, 94, 95, 96, 97, 98, + 0, 0, 0, 0, 0, 0, 0, 99, 100, 101, + 102, 103, 104, 105, 106, 107, 108, 0, 109, 303, + 85, 86, 87, 88, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 89, 90, 0, 0, + 0, 0, 0, 91, 92, 93, 94, 95, 96, 97, + 98, 0, 0, 0, 0, 0, 0, 0, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 0, 109, + 304, 85, 86, 87, 88, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 89, 90, 0, + 0, 0, 0, 0, 91, 92, 93, 94, 95, 96, + 97, 98, 0, 0, 0, 0, 0, 0, 0, 99, + 100, 101, 102, 103, 104, 105, 106, 107, 108, 0, + 109, 307, 85, 86, 87, 88, 0, 0, 0, 0, + 0, 0, 0, 251, 252, 0, 0, 253, 89, 90, + 0, 0, 0, 0, 0, 91, 92, 93, 94, 95, + 96, 97, 98, 0, 0, 0, 0, 0, 0, 0, + 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 0, 109, 85, 86, 87, 88, 0, 0, 0, 0, + 0, 0, 131, 0, 0, 0, 0, 0, 89, 90, + 0, 0, 0, 0, 0, 91, 92, 93, 94, 95, + 96, 97, 98, 0, 0, 0, 85, 86, 87, 88, + 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 0, 109, 89, 90, 0, 0, 0, 0, 0, 91, + 92, 93, 94, 95, 96, 97, 98, 0, 0, 0, + 0, 285, 0, 0, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 0, 109, 85, 86, 87, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 88, 89, 0, 0, 0, 0, 0, 90, 91, - 92, 93, 94, 95, 96, 97, 0, 0, 0, 0, - 0, 0, 0, 98, 99, 100, 101, 102, 103, 104, - 105, 106, 107, 0, 108, 303, 84, 85, 86, 87, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 88, 89, 0, 0, 0, 0, 0, 90, - 91, 92, 93, 94, 95, 96, 97, 0, 0, 0, - 0, 0, 0, 0, 98, 99, 100, 101, 102, 103, - 104, 105, 106, 107, 0, 108, 306, 84, 85, 86, - 87, 0, 0, 0, 0, 0, 0, 0, 250, 251, - 0, 0, 252, 88, 89, 0, 0, 0, 0, 0, - 90, 91, 92, 93, 94, 95, 96, 97, 0, 0, - 0, 0, 0, 0, 0, 98, 99, 100, 101, 102, - 103, 104, 105, 106, 107, 0, 108, 84, 85, 86, - 87, 0, 0, 0, 0, 0, 0, 130, 0, 0, - 0, 0, 0, 88, 89, 0, 0, 0, 0, 0, - 90, 91, 92, 93, 94, 95, 96, 97, 0, 0, - 0, 84, 85, 86, 87, 98, 99, 100, 101, 102, - 103, 104, 105, 106, 107, 0, 108, 88, 89, 0, - 0, 0, 0, 0, 90, 91, 92, 93, 94, 95, - 96, 97, 0, 0, 0, 0, 284, 0, 0, 98, - 99, 100, 101, 102, 103, 104, 105, 106, 107, 0, - 108, 84, 85, 86, 87, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 300, 88, 89, 0, - 0, 0, 0, 0, 90, 91, 92, 93, 94, 95, - 96, 97, 0, 0, 0, 0, 0, 0, 0, 98, - 99, 100, 101, 102, 103, 104, 105, 106, 107, 0, - 108, 84, 85, 86, 87, 0, 0, 0, 0, 0, - 0, 301, 0, 0, 0, 0, 0, 88, 89, 0, - 0, 0, 0, 0, 90, 91, 92, 93, 94, 95, - 96, 97, 0, 0, 0, 84, 85, 86, 87, 98, - 99, 100, 101, 102, 103, 104, 105, 106, 107, 0, - 108, 88, 89, 0, 0, 0, 0, 0, 90, 91, - 92, 93, 94, 95, 96, 97, 0, 0, 0, 84, - 85, 86, 87, 98, 99, 100, 101, 102, 103, 104, - 105, 106, 107, 0, 108, 88, 89, 0, 0, 0, - 0, 0, 90, 91, 92, 93, 94, 95, 96, 97, - 0, 0, 0, -157, 85, 86, 0, 0, 0, 100, - 101, 102, 103, 104, 105, 106, 107, 0, 108, 88, - 89, 0, 0, 0, 0, 0, -157, -157, -157, -157, - -157, -157, 96, 97, 0, 0, 85, 86, 0, 0, - 0, 0, 0, -157, 101, 102, 103, 104, 105, 106, - 107, 88, 108, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 96, 97, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 101, 102, 103, 104, - 105, 106, 107, 0, 108 + 0, 301, 89, 90, 0, 0, 0, 0, 0, 91, + 92, 93, 94, 95, 96, 97, 98, 0, 0, 0, + 0, 0, 0, 0, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 0, 109, 85, 86, 87, 88, + 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, + 0, 0, 89, 90, 0, 0, 0, 0, 0, 91, + 92, 93, 94, 95, 96, 97, 98, 0, 0, 0, + 85, 86, 87, 88, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 0, 109, 89, 90, 0, 0, + 0, 0, 0, 91, 92, 93, 94, 95, 96, 97, + 98, 0, 0, 0, 85, 86, 87, 88, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 0, 109, + 89, 90, 0, 0, 0, 0, 0, 91, 92, 93, + 94, 95, 96, 97, 98, 0, 0, 0, -157, 86, + 87, 0, 0, 0, 101, 102, 103, 104, 105, 106, + 107, 108, 0, 109, 89, 90, 0, 0, 0, 0, + 0, -157, -157, -157, -157, -157, -157, 97, 98, 0, + 0, 86, 87, 0, 0, 0, 0, 0, -157, 102, + 103, 104, 105, 106, 107, 108, 89, 109, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, + 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 102, 103, 104, 105, 106, 107, 108, 0, 109 }; static const yytype_int16 yycheck[] = { - 1, 6, 16, 49, 8, 12, 13, 5, 145, 146, - 11, 148, 149, 14, 5, 8, 14, 63, 19, 20, - 180, 22, 68, 14, 49, 49, 21, 179, 23, 0, - 49, 32, 32, 34, 35, 30, 31, 142, 42, 61, - 1, 63, 66, 68, 63, 6, 151, 43, 44, 42, - 46, 17, 18, 55, 56, 57, 5, 59, 131, 132, - 65, 65, 67, 42, 5, 14, 64, 65, 43, 44, - 60, 46, 62, 64, 65, 61, 213, 78, 4, 59, - 6, 233, 4, 84, 85, 86, 87, 88, 89, 90, + 1, 6, 49, 16, 8, 12, 13, 0, 146, 147, + 11, 149, 150, 14, 8, 5, 63, 61, 19, 20, + 32, 22, 5, 181, 14, 49, 21, 49, 23, 59, + 49, 32, 143, 34, 35, 30, 31, 1, 42, 63, + 42, 152, 6, 61, 68, 63, 68, 66, 42, 55, + 56, 57, 5, 59, 43, 44, 5, 46, 17, 18, + 65, 14, 67, 132, 133, 14, 180, 43, 44, 4, + 46, 65, 6, 69, 64, 65, 214, 4, 79, 6, + 48, 64, 65, 29, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, - 101, 102, 103, 104, 105, 106, 107, 267, 260, 6, - 262, 263, 264, 114, 266, 64, 65, 269, 113, 69, - 120, 258, 259, 64, 65, 4, 29, 6, 129, 130, - 48, 62, 133, 134, 1, 60, 143, 62, 145, 146, - 59, 148, 149, 66, 68, 49, 63, 142, 63, 63, - 63, 59, 304, 69, 14, 6, 151, 59, 41, 48, - 41, 59, 61, 59, 48, 66, 1, 61, 63, 4, - 5, 6, 7, 8, 9, 63, 63, 63, 63, 59, - 15, 63, 59, 184, 19, 180, 187, 63, 23, 24, - 59, 41, 193, 28, 59, 30, 31, 32, 59, 63, - 59, 33, 31, 247, 307, 193, 213, 42, 209, 120, - 4, 5, 6, 7, 8, 9, 267, 127, -1, 54, - -1, -1, -1, -1, -1, -1, 61, 228, 63, 64, - 65, 66, 67, 234, 69, -1, -1, 31, 32, -1, - 241, -1, -1, -1, -1, -1, -1, -1, 42, 250, - 251, 258, 259, 254, 255, -1, -1, -1, -1, -1, - 54, -1, -1, -1, -1, -1, -1, 61, -1, -1, - 64, 65, 267, 67, -1, 69, -1, -1, 279, -1, - -1, -1, -1, -1, 0, 1, -1, -1, 4, 5, - -1, -1, 8, -1, 10, 11, 12, 13, 14, -1, - 301, 302, 303, -1, 20, 21, 22, -1, -1, 25, - 26, 27, 313, 29, -1, -1, -1, 33, 34, 35, - 36, 37, 38, 39, 40, -1, 42, -1, -1, 45, - -1, -1, 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, -1, 59, 60, -1, 62, 63, 64, 65, - 66, 1, 68, -1, 4, 5, 6, 7, 8, 9, - -1, -1, -1, -1, -1, 15, -1, -1, -1, 19, - -1, -1, -1, 23, 24, -1, -1, -1, 28, -1, - 30, 31, 32, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 42, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 54, -1, -1, -1, -1, -1, - -1, 61, -1, -1, 64, 65, 66, 67, 1, 69, - -1, 4, 5, 6, 7, 8, 9, -1, -1, -1, - -1, -1, 15, -1, -1, -1, 19, -1, -1, -1, - 23, 24, -1, -1, -1, 28, -1, 30, 31, 32, - -1, -1, 4, 5, 6, 7, 8, 9, -1, 42, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, - -1, 54, 4, 5, 6, 7, 8, 9, 61, 31, - 32, 64, 65, 15, 67, -1, 69, 19, -1, -1, - 42, 23, 24, -1, -1, -1, 28, -1, 30, 31, - 32, -1, -1, -1, -1, -1, -1, -1, -1, 61, - 42, -1, 64, 65, -1, 67, -1, 69, -1, -1, - 1, -1, 54, 4, 5, 6, 7, 8, 9, 61, - -1, -1, 64, 65, 15, 67, -1, 69, 19, -1, - -1, -1, 23, 24, -1, -1, -1, 28, -1, 30, - 31, 32, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 42, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 54, -1, -1, -1, -1, -1, -1, - 61, -1, 1, 64, 65, 4, 67, 6, 69, 8, - -1, 11, 12, -1, -1, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 31, -1, -1, -1, -1, -1, -1, 39, - 40, -1, -1, 42, -1, -1, -1, -1, -1, -1, - -1, 51, 52, 53, 54, 55, 56, 57, 1, 59, - -1, 4, 61, 6, -1, 8, -1, -1, -1, 68, - -1, 14, 15, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 4, - 5, 6, 7, 8, 9, -1, -1, -1, -1, 42, - 15, -1, -1, -1, 19, -1, -1, -1, 23, 24, - -1, -1, -1, 28, -1, 30, 31, 32, 61, -1, - -1, -1, -1, -1, -1, 68, -1, 42, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 54, - -1, -1, -1, -1, -1, 60, 61, -1, -1, 64, - 65, -1, 67, -1, 69, 4, 5, 6, 7, 8, + 101, 102, 103, 104, 105, 106, 107, 108, 62, 121, + 268, 64, 65, 1, 115, 64, 65, 59, 66, 114, + 234, 259, 260, 60, 4, 62, 6, 63, 68, 130, + 131, 63, 63, 134, 135, 63, 60, 144, 62, 146, + 147, 49, 149, 150, 69, 59, 14, 261, 143, 263, + 264, 265, 6, 267, 59, 41, 270, 152, 48, 41, + 59, 59, 66, 48, 61, 61, 59, 1, 63, 63, + 4, 5, 6, 7, 8, 9, 63, 41, 33, 63, + 63, 15, 63, 59, 185, 19, 181, 188, 63, 23, + 24, 305, 59, 194, 28, 121, 30, 31, 32, 59, + 59, 63, 59, 31, 308, 248, 128, 214, 42, 210, + 194, 4, 5, 6, 7, 8, 9, 268, -1, -1, + 54, -1, -1, -1, -1, -1, -1, 61, 229, 63, + 64, 65, 66, 67, 235, 69, -1, -1, 31, 32, + -1, 242, -1, -1, -1, -1, -1, -1, -1, 42, + 251, 252, 259, 260, 255, 256, -1, -1, -1, -1, + -1, 54, -1, -1, -1, -1, -1, -1, 61, -1, + -1, 64, 65, 268, 67, -1, 69, -1, -1, 280, + -1, -1, -1, -1, -1, 0, 1, -1, -1, 4, + 5, -1, -1, 8, -1, 10, 11, 12, 13, 14, + -1, 302, 303, 304, -1, 20, 21, 22, -1, -1, + 25, 26, 27, 314, 29, -1, -1, -1, 33, 34, + 35, 36, 37, 38, 39, 40, -1, 42, -1, -1, + 45, -1, -1, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, -1, 59, 60, -1, 62, 63, 64, + 65, 66, 1, 68, -1, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, 15, -1, -1, -1, 19, -1, -1, -1, 23, 24, -1, -1, -1, 28, -1, 30, 31, 32, -1, -1, -1, -1, -1, -1, -1, -1, -1, 42, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 54, -1, -1, -1, -1, - 11, 12, 61, -1, -1, 64, 65, 66, 67, -1, - 69, 4, 5, 6, 7, 8, 9, -1, -1, -1, - -1, -1, 15, -1, -1, -1, 19, -1, 39, 40, - 23, 24, -1, -1, -1, 28, -1, 30, 31, 32, - 51, 52, 53, 54, 55, 56, 57, -1, 59, 42, + -1, -1, 61, -1, -1, 64, 65, 66, 67, 1, + 69, -1, 4, 5, 6, 7, 8, 9, -1, -1, + -1, -1, -1, 15, -1, -1, -1, 19, -1, -1, + -1, 23, 24, -1, -1, -1, 28, -1, 30, 31, + 32, -1, -1, 4, 5, 6, 7, 8, 9, -1, + 42, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 1, -1, 54, 4, 5, 6, 7, 8, 9, 61, + 31, 32, 64, 65, 15, 67, -1, 69, 19, -1, + -1, 42, 23, 24, -1, -1, -1, 28, -1, 30, + 31, 32, -1, -1, -1, -1, -1, -1, -1, -1, + 61, 42, -1, 64, 65, -1, 67, -1, 69, -1, + -1, 1, -1, 54, 4, 5, 6, 7, 8, 9, + 61, -1, -1, 64, 65, 15, 67, -1, 69, 19, + -1, -1, -1, 23, 24, -1, -1, -1, 28, -1, + 30, 31, 32, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 42, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 54, -1, -1, -1, -1, -1, + -1, 61, -1, 1, 64, 65, 4, 67, 6, 69, + 8, -1, 11, 12, -1, -1, 14, 15, 16, 17, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, -1, -1, -1, -1, -1, + 39, 40, -1, -1, 42, -1, -1, -1, -1, -1, + -1, -1, 51, 52, 53, 54, 55, 56, 57, 1, + 59, -1, 4, 61, 6, -1, 8, -1, -1, -1, + 68, -1, 14, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, -1, -1, -1, 4, 5, 6, 7, 8, 9, + 42, -1, -1, -1, -1, 15, -1, -1, -1, 19, + -1, -1, -1, 23, 24, -1, -1, -1, 28, 61, + 30, 31, 32, -1, -1, -1, 68, -1, -1, -1, + -1, -1, 42, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 54, -1, -1, -1, -1, -1, + 60, 61, -1, -1, 64, 65, -1, 67, -1, 69, + 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, + -1, 15, -1, -1, -1, 19, -1, -1, -1, 23, + 24, -1, -1, -1, 28, -1, 30, 31, 32, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 42, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 54, -1, -1, -1, -1, -1, -1, 61, -1, - -1, 64, 65, 66, 67, -1, 69, 4, 5, 6, - 7, 8, 9, -1, -1, -1, -1, -1, 15, -1, - -1, -1, 19, -1, -1, -1, 23, 24, -1, -1, - -1, 28, -1, 30, 31, 32, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 42, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 54, -1, -1, - -1, -1, -1, -1, 61, -1, 1, 64, 65, 4, - 67, 6, 69, 8, -1, -1, -1, -1, -1, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 42, 10, 11, - 12, 13, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 26, 27, 61, -1, -1, -1, + 54, -1, -1, -1, -1, 11, 12, 61, -1, -1, + 64, 65, 66, 67, -1, 69, 4, 5, 6, 7, + 8, 9, -1, -1, -1, -1, -1, 15, -1, -1, + -1, 19, -1, 39, 40, 23, 24, -1, -1, -1, + 28, -1, 30, 31, 32, 51, 52, 53, 54, 55, + 56, 57, -1, 59, 42, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 54, -1, -1, -1, + -1, -1, -1, 61, -1, -1, 64, 65, 66, 67, + -1, 69, 4, 5, 6, 7, 8, 9, -1, -1, + -1, -1, -1, 15, -1, -1, -1, 19, -1, -1, + -1, 23, 24, -1, -1, -1, 28, -1, 30, 31, + 32, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 42, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 54, -1, -1, -1, -1, -1, -1, 61, + -1, 1, 64, 65, 4, 67, 6, 69, 8, -1, + -1, -1, -1, -1, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 42, 10, 11, 12, 13, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 26, + 27, 61, -1, -1, -1, -1, 33, 34, 35, 36, + 37, 38, 39, 40, -1, -1, -1, 10, 11, 12, + 13, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, -1, 59, 26, 27, -1, 63, -1, -1, 66, + 33, 34, 35, 36, 37, 38, 39, 40, -1, -1, + -1, 10, 11, 12, 13, 48, 49, 50, 51, 52, + 53, 54, 55, 56, 57, -1, 59, 26, 27, -1, + -1, -1, -1, 66, 33, 34, 35, 36, 37, 38, + 39, 40, -1, -1, -1, 10, 11, 12, 13, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, -1, + 59, 26, 27, -1, -1, -1, -1, 66, 33, 34, + 35, 36, 37, 38, 39, 40, -1, -1, -1, 10, + 11, 12, 13, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, -1, 59, 26, 27, -1, -1, -1, + -1, 66, 33, 34, 35, 36, 37, 38, 39, 40, + -1, -1, -1, 10, 11, 12, 13, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 57, -1, 59, 26, + 27, -1, -1, -1, -1, 66, 33, 34, 35, 36, + 37, 38, 39, 40, -1, -1, -1, -1, -1, -1, + -1, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, -1, 59, 60, -1, 62, 10, 11, 12, 13, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 26, 27, -1, -1, -1, -1, -1, 33, + 34, 35, 36, 37, 38, 39, 40, -1, -1, -1, + 10, 11, 12, 13, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, -1, 59, 26, 27, 62, -1, + -1, -1, -1, 33, 34, 35, 36, 37, 38, 39, + 40, -1, -1, -1, 10, 11, 12, 13, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, -1, 59, + 26, 27, 62, -1, -1, -1, -1, 33, 34, 35, + 36, 37, 38, 39, 40, -1, -1, -1, 10, 11, + 12, 13, 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, -1, 59, 26, 27, 62, -1, -1, -1, -1, 33, 34, 35, 36, 37, 38, 39, 40, -1, -1, -1, 10, 11, 12, 13, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, -1, 59, 26, 27, - -1, 63, -1, -1, 66, 33, 34, 35, 36, 37, + 62, -1, -1, -1, -1, 33, 34, 35, 36, 37, 38, 39, 40, -1, -1, -1, 10, 11, 12, 13, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - -1, 59, 26, 27, -1, -1, -1, -1, 66, 33, + -1, 59, 26, 27, 62, -1, -1, -1, -1, 33, 34, 35, 36, 37, 38, 39, 40, -1, -1, -1, - 10, 11, 12, 13, 48, 49, 50, 51, 52, 53, - 54, 55, 56, 57, -1, 59, 26, 27, -1, -1, - -1, -1, 66, 33, 34, 35, 36, 37, 38, 39, - 40, -1, -1, -1, 10, 11, 12, 13, 48, 49, - 50, 51, 52, 53, 54, 55, 56, 57, -1, 59, - 26, 27, -1, -1, -1, -1, 66, 33, 34, 35, - 36, 37, 38, 39, 40, -1, -1, -1, 10, 11, - 12, 13, 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, -1, 59, 26, 27, -1, -1, -1, -1, - 66, 33, 34, 35, 36, 37, 38, 39, 40, -1, - -1, -1, -1, -1, -1, -1, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 57, -1, 59, 60, -1, - 62, 10, 11, 12, 13, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 26, 27, -1, - -1, -1, -1, -1, 33, 34, 35, 36, 37, 38, - 39, 40, -1, -1, -1, 10, 11, 12, 13, 48, - 49, 50, 51, 52, 53, 54, 55, 56, 57, -1, - 59, 26, 27, 62, -1, -1, -1, -1, 33, 34, - 35, 36, 37, 38, 39, 40, -1, -1, -1, 10, - 11, 12, 13, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, -1, 59, 26, 27, 62, -1, -1, - -1, -1, 33, 34, 35, 36, 37, 38, 39, 40, - -1, -1, -1, 10, 11, 12, 13, 48, 49, 50, - 51, 52, 53, 54, 55, 56, 57, -1, 59, 26, - 27, 62, -1, -1, -1, -1, 33, 34, 35, 36, - 37, 38, 39, 40, -1, -1, -1, 10, 11, 12, - 13, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, -1, 59, 26, 27, 62, -1, -1, -1, -1, + -1, -1, -1, -1, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, -1, 59, 60, 10, 11, 12, + 13, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 26, 27, -1, -1, -1, -1, -1, 33, 34, 35, 36, 37, 38, 39, 40, -1, -1, - -1, 10, 11, 12, 13, 48, 49, 50, 51, 52, - 53, 54, 55, 56, 57, -1, 59, 26, 27, 62, + -1, -1, -1, -1, -1, 48, 49, 50, 51, 52, + 53, 54, 55, 56, 57, -1, 59, 60, 10, 11, + 12, 13, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 26, 27, -1, -1, -1, -1, + -1, 33, 34, 35, 36, 37, 38, 39, 40, -1, + -1, -1, -1, -1, -1, -1, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, -1, 59, 60, 10, + 11, 12, 13, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 26, 27, -1, -1, -1, + -1, -1, 33, 34, 35, 36, 37, 38, 39, 40, + -1, -1, -1, -1, -1, -1, -1, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 57, -1, 59, 60, + 10, 11, 12, 13, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 26, 27, -1, -1, + -1, -1, -1, 33, 34, 35, 36, 37, 38, 39, + 40, -1, -1, -1, -1, -1, -1, -1, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, -1, 59, + 60, 10, 11, 12, 13, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 26, 27, -1, -1, -1, -1, -1, 33, 34, 35, 36, 37, 38, 39, 40, -1, -1, -1, -1, -1, -1, -1, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, -1, 59, 60, 10, 11, 12, 13, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 26, 27, + -1, -1, -1, 21, 22, -1, -1, 25, 26, 27, -1, -1, -1, -1, -1, 33, 34, 35, 36, 37, 38, 39, 40, -1, -1, -1, -1, -1, -1, -1, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - -1, 59, 60, 10, 11, 12, 13, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 26, - 27, -1, -1, -1, -1, -1, 33, 34, 35, 36, - 37, 38, 39, 40, -1, -1, -1, -1, -1, -1, - -1, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, -1, 59, 60, 10, 11, 12, 13, -1, -1, + -1, 59, 10, 11, 12, 13, -1, -1, -1, -1, + -1, -1, 20, -1, -1, -1, -1, -1, 26, 27, + -1, -1, -1, -1, -1, 33, 34, 35, 36, 37, + 38, 39, 40, -1, -1, -1, 10, 11, 12, 13, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + -1, 59, 26, 27, -1, -1, -1, -1, -1, 33, + 34, 35, 36, 37, 38, 39, 40, -1, -1, -1, + -1, 45, -1, -1, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, -1, 59, 10, 11, 12, 13, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 26, 27, -1, -1, -1, -1, -1, 33, 34, 35, - 36, 37, 38, 39, 40, -1, -1, -1, -1, -1, - -1, -1, 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, -1, 59, 60, 10, 11, 12, 13, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 26, 27, -1, -1, -1, -1, -1, 33, 34, - 35, 36, 37, 38, 39, 40, -1, -1, -1, -1, - -1, -1, -1, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, -1, 59, 60, 10, 11, 12, 13, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 26, 27, -1, -1, -1, -1, -1, 33, + -1, 25, 26, 27, -1, -1, -1, -1, -1, 33, 34, 35, 36, 37, 38, 39, 40, -1, -1, -1, -1, -1, -1, -1, 48, 49, 50, 51, 52, 53, - 54, 55, 56, 57, -1, 59, 60, 10, 11, 12, - 13, -1, -1, -1, -1, -1, -1, -1, 21, 22, - -1, -1, 25, 26, 27, -1, -1, -1, -1, -1, - 33, 34, 35, 36, 37, 38, 39, 40, -1, -1, - -1, -1, -1, -1, -1, 48, 49, 50, 51, 52, - 53, 54, 55, 56, 57, -1, 59, 10, 11, 12, - 13, -1, -1, -1, -1, -1, -1, 20, -1, -1, - -1, -1, -1, 26, 27, -1, -1, -1, -1, -1, - 33, 34, 35, 36, 37, 38, 39, 40, -1, -1, - -1, 10, 11, 12, 13, 48, 49, 50, 51, 52, - 53, 54, 55, 56, 57, -1, 59, 26, 27, -1, - -1, -1, -1, -1, 33, 34, 35, 36, 37, 38, - 39, 40, -1, -1, -1, -1, 45, -1, -1, 48, - 49, 50, 51, 52, 53, 54, 55, 56, 57, -1, - 59, 10, 11, 12, 13, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 25, 26, 27, -1, - -1, -1, -1, -1, 33, 34, 35, 36, 37, 38, - 39, 40, -1, -1, -1, -1, -1, -1, -1, 48, - 49, 50, 51, 52, 53, 54, 55, 56, 57, -1, - 59, 10, 11, 12, 13, -1, -1, -1, -1, -1, - -1, 20, -1, -1, -1, -1, -1, 26, 27, -1, - -1, -1, -1, -1, 33, 34, 35, 36, 37, 38, - 39, 40, -1, -1, -1, 10, 11, 12, 13, 48, - 49, 50, 51, 52, 53, 54, 55, 56, 57, -1, - 59, 26, 27, -1, -1, -1, -1, -1, 33, 34, - 35, 36, 37, 38, 39, 40, -1, -1, -1, 10, - 11, 12, 13, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, -1, 59, 26, 27, -1, -1, -1, - -1, -1, 33, 34, 35, 36, 37, 38, 39, 40, - -1, -1, -1, 10, 11, 12, -1, -1, -1, 50, - 51, 52, 53, 54, 55, 56, 57, -1, 59, 26, - 27, -1, -1, -1, -1, -1, 33, 34, 35, 36, - 37, 38, 39, 40, -1, -1, 11, 12, -1, -1, - -1, -1, -1, 50, 51, 52, 53, 54, 55, 56, - 57, 26, 59, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 39, 40, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 51, 52, 53, 54, - 55, 56, 57, -1, 59 + 54, 55, 56, 57, -1, 59, 10, 11, 12, 13, + -1, -1, -1, -1, -1, -1, 20, -1, -1, -1, + -1, -1, 26, 27, -1, -1, -1, -1, -1, 33, + 34, 35, 36, 37, 38, 39, 40, -1, -1, -1, + 10, 11, 12, 13, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, -1, 59, 26, 27, -1, -1, + -1, -1, -1, 33, 34, 35, 36, 37, 38, 39, + 40, -1, -1, -1, 10, 11, 12, 13, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, -1, 59, + 26, 27, -1, -1, -1, -1, -1, 33, 34, 35, + 36, 37, 38, 39, 40, -1, -1, -1, 10, 11, + 12, -1, -1, -1, 50, 51, 52, 53, 54, 55, + 56, 57, -1, 59, 26, 27, -1, -1, -1, -1, + -1, 33, 34, 35, 36, 37, 38, 39, 40, -1, + -1, 11, 12, -1, -1, -1, -1, -1, 50, 51, + 52, 53, 54, 55, 56, 57, 26, 59, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 39, + 40, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 51, 52, 53, 54, 55, 56, 57, -1, 59 }; /* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of @@ -1549,31 +1555,31 @@ static const yytype_int8 yystos[] = 88, 88, 75, 6, 1, 6, 83, 75, 1, 75, 1, 4, 8, 82, 1, 66, 75, 1, 4, 6, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 61, 82, - 97, 98, 99, 69, 10, 11, 12, 13, 26, 27, - 33, 34, 35, 36, 37, 38, 39, 40, 48, 49, - 50, 51, 52, 53, 54, 55, 56, 57, 59, 60, - 75, 5, 14, 64, 65, 78, 82, 78, 74, 75, - 79, 73, 60, 75, 75, 89, 90, 84, 61, 63, - 20, 14, 14, 29, 48, 85, 62, 62, 1, 59, - 66, 66, 49, 63, 68, 63, 63, 75, 63, 63, - 68, 49, 69, 75, 75, 75, 75, 75, 75, 75, + 24, 25, 26, 27, 28, 29, 30, 31, 32, 61, + 82, 97, 98, 99, 69, 10, 11, 12, 13, 26, + 27, 33, 34, 35, 36, 37, 38, 39, 40, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 59, + 60, 75, 5, 14, 64, 65, 78, 82, 78, 74, + 75, 79, 73, 60, 75, 75, 89, 90, 84, 61, + 63, 20, 14, 14, 29, 48, 85, 62, 62, 1, + 59, 66, 66, 49, 63, 68, 63, 63, 75, 63, + 63, 68, 49, 69, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, - 75, 75, 75, 75, 75, 75, 75, 59, 6, 65, - 67, 91, 92, 93, 65, 82, 1, 63, 66, 75, - 14, 74, 60, 60, 62, 85, 4, 6, 80, 81, - 75, 1, 75, 92, 92, 1, 75, 75, 43, 44, - 46, 1, 98, 54, 87, 88, 87, 87, 62, 87, - 87, 98, 6, 93, 94, 1, 4, 6, 61, 82, - 95, 96, 97, 41, 48, 66, 75, 59, 66, 75, - 59, 63, 66, 4, 6, 90, 46, 60, 62, 60, - 21, 22, 25, 86, 61, 61, 75, 87, 48, 63, - 49, 66, 63, 63, 63, 75, 63, 49, 68, 63, - 93, 75, 59, 66, 66, 66, 75, 59, 81, 63, - 75, 75, 75, 75, 45, 87, 87, 93, 93, 93, - 93, 62, 93, 96, 93, 59, 59, 59, 66, 75, - 25, 20, 60, 60, 63, 59, 60, 75, 75, 75, - 93, 86, 62, 60, 62, 75, 62 + 75, 75, 75, 75, 75, 75, 75, 75, 59, 6, + 65, 67, 91, 92, 93, 65, 82, 1, 63, 66, + 75, 14, 74, 60, 60, 62, 85, 4, 6, 80, + 81, 75, 1, 75, 92, 92, 1, 75, 75, 43, + 44, 46, 1, 98, 54, 87, 88, 87, 87, 62, + 87, 87, 98, 6, 93, 94, 1, 4, 6, 61, + 82, 95, 96, 97, 41, 48, 66, 75, 59, 66, + 75, 59, 63, 66, 4, 6, 90, 46, 60, 62, + 60, 21, 22, 25, 86, 61, 61, 75, 87, 48, + 63, 49, 66, 63, 63, 63, 75, 63, 49, 68, + 63, 93, 75, 59, 66, 66, 66, 75, 59, 81, + 63, 75, 75, 75, 75, 45, 87, 87, 93, 93, + 93, 93, 62, 93, 96, 93, 59, 59, 59, 66, + 75, 25, 20, 60, 60, 63, 59, 60, 75, 75, + 75, 93, 86, 62, 60, 62, 75, 62 }; /* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */ @@ -1595,7 +1601,8 @@ static const yytype_int8 yyr1[] = 95, 96, 96, 96, 96, 96, 96, 96, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 98, 98, 98, 98, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99 + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99 }; /* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. */ @@ -1617,7 +1624,8 @@ static const yytype_int8 yyr2[] = 3, 1, 3, 3, 3, 3, 5, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 3, 3, - 3, 3, 3, 1, 3, 1, 1, 1, 5, 3 + 3, 3, 3, 1, 3, 1, 1, 1, 1, 5, + 3 }; @@ -2187,193 +2195,193 @@ yydestruct (const char *yymsg, case YYSYMBOL_IDENT: /* IDENT */ #line 36 "src/parser.y" { jv_free(((*yyvaluep).literal)); } -#line 2191 "src/parser.c" +#line 2199 "src/parser.c" break; case YYSYMBOL_FIELD: /* FIELD */ #line 36 "src/parser.y" { jv_free(((*yyvaluep).literal)); } -#line 2197 "src/parser.c" +#line 2205 "src/parser.c" break; case YYSYMBOL_BINDING: /* BINDING */ #line 36 "src/parser.y" { jv_free(((*yyvaluep).literal)); } -#line 2203 "src/parser.c" +#line 2211 "src/parser.c" break; case YYSYMBOL_LITERAL: /* LITERAL */ #line 36 "src/parser.y" { jv_free(((*yyvaluep).literal)); } -#line 2209 "src/parser.c" +#line 2217 "src/parser.c" break; case YYSYMBOL_FORMAT: /* FORMAT */ #line 36 "src/parser.y" { jv_free(((*yyvaluep).literal)); } -#line 2215 "src/parser.c" +#line 2223 "src/parser.c" break; case YYSYMBOL_QQSTRING_TEXT: /* QQSTRING_TEXT */ #line 36 "src/parser.y" { jv_free(((*yyvaluep).literal)); } -#line 2221 "src/parser.c" +#line 2229 "src/parser.c" break; case YYSYMBOL_Module: /* Module */ #line 37 "src/parser.y" { block_free(((*yyvaluep).blk)); } -#line 2227 "src/parser.c" +#line 2235 "src/parser.c" break; case YYSYMBOL_Imports: /* Imports */ #line 37 "src/parser.y" { block_free(((*yyvaluep).blk)); } -#line 2233 "src/parser.c" +#line 2241 "src/parser.c" break; case YYSYMBOL_FuncDefs: /* FuncDefs */ #line 37 "src/parser.y" { block_free(((*yyvaluep).blk)); } -#line 2239 "src/parser.c" +#line 2247 "src/parser.c" break; case YYSYMBOL_Exp: /* Exp */ #line 37 "src/parser.y" { block_free(((*yyvaluep).blk)); } -#line 2245 "src/parser.c" +#line 2253 "src/parser.c" break; case YYSYMBOL_Import: /* Import */ #line 37 "src/parser.y" { block_free(((*yyvaluep).blk)); } -#line 2251 "src/parser.c" +#line 2259 "src/parser.c" break; case YYSYMBOL_ImportWhat: /* ImportWhat */ #line 37 "src/parser.y" { block_free(((*yyvaluep).blk)); } -#line 2257 "src/parser.c" +#line 2265 "src/parser.c" break; case YYSYMBOL_ImportFrom: /* ImportFrom */ #line 37 "src/parser.y" { block_free(((*yyvaluep).blk)); } -#line 2263 "src/parser.c" +#line 2271 "src/parser.c" break; case YYSYMBOL_FuncDef: /* FuncDef */ #line 37 "src/parser.y" { block_free(((*yyvaluep).blk)); } -#line 2269 "src/parser.c" +#line 2277 "src/parser.c" break; case YYSYMBOL_Params: /* Params */ #line 37 "src/parser.y" { block_free(((*yyvaluep).blk)); } -#line 2275 "src/parser.c" +#line 2283 "src/parser.c" break; case YYSYMBOL_Param: /* Param */ #line 37 "src/parser.y" { block_free(((*yyvaluep).blk)); } -#line 2281 "src/parser.c" +#line 2289 "src/parser.c" break; case YYSYMBOL_String: /* String */ #line 37 "src/parser.y" { block_free(((*yyvaluep).blk)); } -#line 2287 "src/parser.c" +#line 2295 "src/parser.c" break; case YYSYMBOL_QQString: /* QQString */ #line 37 "src/parser.y" { block_free(((*yyvaluep).blk)); } -#line 2293 "src/parser.c" +#line 2301 "src/parser.c" break; case YYSYMBOL_ElseBody: /* ElseBody */ #line 37 "src/parser.y" { block_free(((*yyvaluep).blk)); } -#line 2299 "src/parser.c" +#line 2307 "src/parser.c" break; case YYSYMBOL_ExpD: /* ExpD */ #line 37 "src/parser.y" { block_free(((*yyvaluep).blk)); } -#line 2305 "src/parser.c" +#line 2313 "src/parser.c" break; case YYSYMBOL_Term: /* Term */ #line 37 "src/parser.y" { block_free(((*yyvaluep).blk)); } -#line 2311 "src/parser.c" +#line 2319 "src/parser.c" break; case YYSYMBOL_Args: /* Args */ #line 37 "src/parser.y" { block_free(((*yyvaluep).blk)); } -#line 2317 "src/parser.c" +#line 2325 "src/parser.c" break; case YYSYMBOL_Arg: /* Arg */ #line 37 "src/parser.y" { block_free(((*yyvaluep).blk)); } -#line 2323 "src/parser.c" +#line 2331 "src/parser.c" break; case YYSYMBOL_RepPatterns: /* RepPatterns */ #line 37 "src/parser.y" { block_free(((*yyvaluep).blk)); } -#line 2329 "src/parser.c" +#line 2337 "src/parser.c" break; case YYSYMBOL_Patterns: /* Patterns */ #line 37 "src/parser.y" { block_free(((*yyvaluep).blk)); } -#line 2335 "src/parser.c" +#line 2343 "src/parser.c" break; case YYSYMBOL_Pattern: /* Pattern */ #line 37 "src/parser.y" { block_free(((*yyvaluep).blk)); } -#line 2341 "src/parser.c" +#line 2349 "src/parser.c" break; case YYSYMBOL_ArrayPats: /* ArrayPats */ #line 37 "src/parser.y" { block_free(((*yyvaluep).blk)); } -#line 2347 "src/parser.c" +#line 2355 "src/parser.c" break; case YYSYMBOL_ObjPats: /* ObjPats */ #line 37 "src/parser.y" { block_free(((*yyvaluep).blk)); } -#line 2353 "src/parser.c" +#line 2361 "src/parser.c" break; case YYSYMBOL_ObjPat: /* ObjPat */ #line 37 "src/parser.y" { block_free(((*yyvaluep).blk)); } -#line 2359 "src/parser.c" +#line 2367 "src/parser.c" break; case YYSYMBOL_Keyword: /* Keyword */ #line 36 "src/parser.y" { jv_free(((*yyvaluep).literal)); } -#line 2365 "src/parser.c" +#line 2373 "src/parser.c" break; case YYSYMBOL_MkDict: /* MkDict */ #line 37 "src/parser.y" { block_free(((*yyvaluep).blk)); } -#line 2371 "src/parser.c" +#line 2379 "src/parser.c" break; case YYSYMBOL_MkDictPair: /* MkDictPair */ #line 37 "src/parser.y" { block_free(((*yyvaluep).blk)); } -#line 2377 "src/parser.c" +#line 2385 "src/parser.c" break; default: @@ -2677,31 +2685,31 @@ yyreduce: switch (yyn) { case 2: /* TopLevel: Module Imports Exp */ -#line 307 "src/parser.y" +#line 312 "src/parser.y" { *answer = BLOCK((yyvsp[-2].blk), (yyvsp[-1].blk), gen_op_simple(TOP), (yyvsp[0].blk)); } -#line 2685 "src/parser.c" - break; - - case 3: /* TopLevel: Module Imports FuncDefs */ -#line 310 "src/parser.y" - { - *answer = BLOCK((yyvsp[-2].blk), (yyvsp[-1].blk), (yyvsp[0].blk)); -} #line 2693 "src/parser.c" break; - case 4: /* Module: %empty */ + case 3: /* TopLevel: Module Imports FuncDefs */ #line 315 "src/parser.y" - { - (yyval.blk) = gen_noop(); + { + *answer = BLOCK((yyvsp[-2].blk), (yyvsp[-1].blk), (yyvsp[0].blk)); } #line 2701 "src/parser.c" break; + case 4: /* Module: %empty */ +#line 320 "src/parser.y" + { + (yyval.blk) = gen_noop(); +} +#line 2709 "src/parser.c" + break; + case 5: /* Module: "module" Exp ';' */ -#line 318 "src/parser.y" +#line 323 "src/parser.y" { if (!block_is_const((yyvsp[-1].blk))) { FAIL((yyloc), "Module metadata must be constant"); @@ -2715,366 +2723,366 @@ yyreduce: (yyval.blk) = gen_module((yyvsp[-1].blk)); } } -#line 2719 "src/parser.c" - break; - - case 6: /* Imports: %empty */ -#line 333 "src/parser.y" - { - (yyval.blk) = gen_noop(); -} #line 2727 "src/parser.c" break; - case 7: /* Imports: Import Imports */ -#line 336 "src/parser.y" - { - (yyval.blk) = BLOCK((yyvsp[-1].blk), (yyvsp[0].blk)); + case 6: /* Imports: %empty */ +#line 338 "src/parser.y" + { + (yyval.blk) = gen_noop(); } #line 2735 "src/parser.c" break; - case 8: /* FuncDefs: %empty */ + case 7: /* Imports: Import Imports */ #line 341 "src/parser.y" - { - (yyval.blk) = gen_noop(); + { + (yyval.blk) = BLOCK((yyvsp[-1].blk), (yyvsp[0].blk)); } #line 2743 "src/parser.c" break; - case 9: /* FuncDefs: FuncDef FuncDefs */ -#line 344 "src/parser.y" - { - (yyval.blk) = block_join((yyvsp[-1].blk), (yyvsp[0].blk)); + case 8: /* FuncDefs: %empty */ +#line 346 "src/parser.y" + { + (yyval.blk) = gen_noop(); } #line 2751 "src/parser.c" break; - case 10: /* Exp: FuncDef Exp */ + case 9: /* FuncDefs: FuncDef FuncDefs */ #line 349 "src/parser.y" - { - (yyval.blk) = block_bind_referenced((yyvsp[-1].blk), (yyvsp[0].blk), OP_IS_CALL_PSEUDO); + { + (yyval.blk) = block_join((yyvsp[-1].blk), (yyvsp[0].blk)); } #line 2759 "src/parser.c" break; - case 11: /* Exp: Term "as" Patterns '|' Exp */ -#line 353 "src/parser.y" - { - (yyval.blk) = gen_destructure((yyvsp[-4].blk), (yyvsp[-2].blk), (yyvsp[0].blk)); + case 10: /* Exp: FuncDef Exp */ +#line 354 "src/parser.y" + { + (yyval.blk) = block_bind_referenced((yyvsp[-1].blk), (yyvsp[0].blk), OP_IS_CALL_PSEUDO); } #line 2767 "src/parser.c" break; - case 12: /* Exp: "reduce" Term "as" Patterns '(' Exp ';' Exp ')' */ -#line 356 "src/parser.y" - { - (yyval.blk) = gen_reduce((yyvsp[-7].blk), (yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk)); + case 11: /* Exp: Term "as" Patterns '|' Exp */ +#line 358 "src/parser.y" + { + (yyval.blk) = gen_destructure((yyvsp[-4].blk), (yyvsp[-2].blk), (yyvsp[0].blk)); } #line 2775 "src/parser.c" break; - case 13: /* Exp: "foreach" Term "as" Patterns '(' Exp ';' Exp ';' Exp ')' */ -#line 360 "src/parser.y" - { - (yyval.blk) = gen_foreach((yyvsp[-9].blk), (yyvsp[-7].blk), (yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk)); + case 12: /* Exp: "reduce" Term "as" Patterns '(' Exp ';' Exp ')' */ +#line 361 "src/parser.y" + { + (yyval.blk) = gen_reduce((yyvsp[-7].blk), (yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk)); } #line 2783 "src/parser.c" break; - case 14: /* Exp: "foreach" Term "as" Patterns '(' Exp ';' Exp ')' */ -#line 364 "src/parser.y" - { - (yyval.blk) = gen_foreach((yyvsp[-7].blk), (yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk), gen_noop()); + case 13: /* Exp: "foreach" Term "as" Patterns '(' Exp ';' Exp ';' Exp ')' */ +#line 365 "src/parser.y" + { + (yyval.blk) = gen_foreach((yyvsp[-9].blk), (yyvsp[-7].blk), (yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk)); } #line 2791 "src/parser.c" break; - case 15: /* Exp: "if" Exp "then" Exp ElseBody */ -#line 368 "src/parser.y" - { - (yyval.blk) = gen_cond((yyvsp[-3].blk), (yyvsp[-1].blk), (yyvsp[0].blk)); + case 14: /* Exp: "foreach" Term "as" Patterns '(' Exp ';' Exp ')' */ +#line 369 "src/parser.y" + { + (yyval.blk) = gen_foreach((yyvsp[-7].blk), (yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk), gen_noop()); } #line 2799 "src/parser.c" break; + case 15: /* Exp: "if" Exp "then" Exp ElseBody */ +#line 373 "src/parser.y" + { + (yyval.blk) = gen_cond((yyvsp[-3].blk), (yyvsp[-1].blk), (yyvsp[0].blk)); +} +#line 2807 "src/parser.c" + break; + case 16: /* Exp: "if" Exp "then" error */ -#line 371 "src/parser.y" +#line 376 "src/parser.y" { FAIL((yyloc), "Possibly unterminated 'if' statement"); (yyval.blk) = (yyvsp[-2].blk); } -#line 2808 "src/parser.c" +#line 2816 "src/parser.c" break; case 17: /* Exp: "try" Exp "catch" Exp */ -#line 376 "src/parser.y" +#line 381 "src/parser.y" { //$$ = BLOCK(gen_op_target(FORK_OPT, $2), $2, $4); (yyval.blk) = gen_try((yyvsp[-2].blk), gen_try_handler((yyvsp[0].blk))); } -#line 2817 "src/parser.c" +#line 2825 "src/parser.c" break; case 18: /* Exp: "try" Exp */ -#line 380 "src/parser.y" +#line 385 "src/parser.y" { //$$ = BLOCK(gen_op_target(FORK_OPT, $2), $2, gen_op_simple(BACKTRACK)); (yyval.blk) = gen_try((yyvsp[0].blk), gen_op_simple(BACKTRACK)); } -#line 2826 "src/parser.c" +#line 2834 "src/parser.c" break; case 19: /* Exp: "try" Exp "catch" error */ -#line 384 "src/parser.y" +#line 389 "src/parser.y" { FAIL((yyloc), "Possibly unterminated 'try' statement"); (yyval.blk) = (yyvsp[-2].blk); } -#line 2835 "src/parser.c" +#line 2843 "src/parser.c" break; case 20: /* Exp: "label" BINDING '|' Exp */ -#line 389 "src/parser.y" +#line 394 "src/parser.y" { jv v = jv_string_fmt("*label-%s", jv_string_value((yyvsp[-2].literal))); (yyval.blk) = gen_location((yyloc), locations, gen_label(jv_string_value(v), (yyvsp[0].blk))); jv_free((yyvsp[-2].literal)); jv_free(v); } -#line 2846 "src/parser.c" - break; - - case 21: /* Exp: Exp '?' */ -#line 396 "src/parser.y" - { - (yyval.blk) = gen_try((yyvsp[-1].blk), gen_op_simple(BACKTRACK)); -} #line 2854 "src/parser.c" break; - case 22: /* Exp: Exp '=' Exp */ -#line 400 "src/parser.y" - { - (yyval.blk) = gen_call("_assign", BLOCK(gen_lambda((yyvsp[-2].blk)), gen_lambda((yyvsp[0].blk)))); + case 21: /* Exp: Exp '?' */ +#line 401 "src/parser.y" + { + (yyval.blk) = gen_try((yyvsp[-1].blk), gen_op_simple(BACKTRACK)); } #line 2862 "src/parser.c" break; - case 23: /* Exp: Exp "or" Exp */ -#line 404 "src/parser.y" - { - (yyval.blk) = gen_or((yyvsp[-2].blk), (yyvsp[0].blk)); + case 22: /* Exp: Exp '=' Exp */ +#line 405 "src/parser.y" + { + (yyval.blk) = gen_call("_assign", BLOCK(gen_lambda((yyvsp[-2].blk)), gen_lambda((yyvsp[0].blk)))); } #line 2870 "src/parser.c" break; - case 24: /* Exp: Exp "and" Exp */ -#line 408 "src/parser.y" - { - (yyval.blk) = gen_and((yyvsp[-2].blk), (yyvsp[0].blk)); + case 23: /* Exp: Exp "or" Exp */ +#line 409 "src/parser.y" + { + (yyval.blk) = gen_or((yyvsp[-2].blk), (yyvsp[0].blk)); } #line 2878 "src/parser.c" break; - case 25: /* Exp: Exp "//" Exp */ -#line 412 "src/parser.y" - { - (yyval.blk) = gen_definedor((yyvsp[-2].blk), (yyvsp[0].blk)); + case 24: /* Exp: Exp "and" Exp */ +#line 413 "src/parser.y" + { + (yyval.blk) = gen_and((yyvsp[-2].blk), (yyvsp[0].blk)); } #line 2886 "src/parser.c" break; - case 26: /* Exp: Exp "//=" Exp */ -#line 416 "src/parser.y" - { - (yyval.blk) = gen_definedor_assign((yyvsp[-2].blk), (yyvsp[0].blk)); + case 25: /* Exp: Exp "//" Exp */ +#line 417 "src/parser.y" + { + (yyval.blk) = gen_definedor((yyvsp[-2].blk), (yyvsp[0].blk)); } #line 2894 "src/parser.c" break; - case 27: /* Exp: Exp "|=" Exp */ -#line 420 "src/parser.y" - { - (yyval.blk) = gen_call("_modify", BLOCK(gen_lambda((yyvsp[-2].blk)), gen_lambda((yyvsp[0].blk)))); + case 26: /* Exp: Exp "//=" Exp */ +#line 421 "src/parser.y" + { + (yyval.blk) = gen_definedor_assign((yyvsp[-2].blk), (yyvsp[0].blk)); } #line 2902 "src/parser.c" break; - case 28: /* Exp: Exp '|' Exp */ -#line 424 "src/parser.y" - { - (yyval.blk) = block_join((yyvsp[-2].blk), (yyvsp[0].blk)); + case 27: /* Exp: Exp "|=" Exp */ +#line 425 "src/parser.y" + { + (yyval.blk) = gen_call("_modify", BLOCK(gen_lambda((yyvsp[-2].blk)), gen_lambda((yyvsp[0].blk)))); } #line 2910 "src/parser.c" break; - case 29: /* Exp: Exp ',' Exp */ -#line 428 "src/parser.y" + case 28: /* Exp: Exp '|' Exp */ +#line 429 "src/parser.y" { - (yyval.blk) = gen_both((yyvsp[-2].blk), (yyvsp[0].blk)); + (yyval.blk) = block_join((yyvsp[-2].blk), (yyvsp[0].blk)); } #line 2918 "src/parser.c" break; - case 30: /* Exp: Exp '+' Exp */ -#line 432 "src/parser.y" + case 29: /* Exp: Exp ',' Exp */ +#line 433 "src/parser.y" { - (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '+'); + (yyval.blk) = gen_both((yyvsp[-2].blk), (yyvsp[0].blk)); } #line 2926 "src/parser.c" break; - case 31: /* Exp: Exp "+=" Exp */ -#line 436 "src/parser.y" - { - (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '+'); + case 30: /* Exp: Exp '+' Exp */ +#line 437 "src/parser.y" + { + (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '+'); } #line 2934 "src/parser.c" break; - case 32: /* Exp: '-' Exp */ -#line 440 "src/parser.y" - { - (yyval.blk) = BLOCK((yyvsp[0].blk), gen_call("_negate", gen_noop())); + case 31: /* Exp: Exp "+=" Exp */ +#line 441 "src/parser.y" + { + (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '+'); } #line 2942 "src/parser.c" break; - case 33: /* Exp: Exp '-' Exp */ -#line 444 "src/parser.y" - { - (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '-'); + case 32: /* Exp: '-' Exp */ +#line 445 "src/parser.y" + { + (yyval.blk) = BLOCK((yyvsp[0].blk), gen_call("_negate", gen_noop())); } #line 2950 "src/parser.c" break; - case 34: /* Exp: Exp "-=" Exp */ -#line 448 "src/parser.y" - { - (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '-'); + case 33: /* Exp: Exp '-' Exp */ +#line 449 "src/parser.y" + { + (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '-'); } #line 2958 "src/parser.c" break; - case 35: /* Exp: Exp '*' Exp */ -#line 452 "src/parser.y" - { - (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '*'); + case 34: /* Exp: Exp "-=" Exp */ +#line 453 "src/parser.y" + { + (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '-'); } #line 2966 "src/parser.c" break; - case 36: /* Exp: Exp "*=" Exp */ -#line 456 "src/parser.y" - { - (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '*'); + case 35: /* Exp: Exp '*' Exp */ +#line 457 "src/parser.y" + { + (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '*'); } #line 2974 "src/parser.c" break; + case 36: /* Exp: Exp "*=" Exp */ +#line 461 "src/parser.y" + { + (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '*'); +} +#line 2982 "src/parser.c" + break; + case 37: /* Exp: Exp '/' Exp */ -#line 460 "src/parser.y" +#line 465 "src/parser.y" { (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '/'); if (block_is_const_inf((yyval.blk))) FAIL((yyloc), "Division by zero?"); } -#line 2984 "src/parser.c" +#line 2992 "src/parser.c" break; case 38: /* Exp: Exp '%' Exp */ -#line 466 "src/parser.y" +#line 471 "src/parser.y" { (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '%'); if (block_is_const_inf((yyval.blk))) FAIL((yyloc), "Remainder by zero?"); } -#line 2994 "src/parser.c" - break; - - case 39: /* Exp: Exp "/=" Exp */ -#line 472 "src/parser.y" - { - (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '/'); -} #line 3002 "src/parser.c" break; - case 40: /* Exp: Exp "%=" Exp */ -#line 476 "src/parser.y" - { - (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '%'); + case 39: /* Exp: Exp "/=" Exp */ +#line 477 "src/parser.y" + { + (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '/'); } #line 3010 "src/parser.c" break; - case 41: /* Exp: Exp "==" Exp */ -#line 480 "src/parser.y" - { - (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), EQ); + case 40: /* Exp: Exp "%=" Exp */ +#line 481 "src/parser.y" + { + (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '%'); } #line 3018 "src/parser.c" break; - case 42: /* Exp: Exp "!=" Exp */ -#line 484 "src/parser.y" + case 41: /* Exp: Exp "==" Exp */ +#line 485 "src/parser.y" { - (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), NEQ); + (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), EQ); } #line 3026 "src/parser.c" break; - case 43: /* Exp: Exp '<' Exp */ -#line 488 "src/parser.y" - { - (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '<'); + case 42: /* Exp: Exp "!=" Exp */ +#line 489 "src/parser.y" + { + (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), NEQ); } #line 3034 "src/parser.c" break; - case 44: /* Exp: Exp '>' Exp */ -#line 492 "src/parser.y" + case 43: /* Exp: Exp '<' Exp */ +#line 493 "src/parser.y" { - (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '>'); + (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '<'); } #line 3042 "src/parser.c" break; - case 45: /* Exp: Exp "<=" Exp */ -#line 496 "src/parser.y" - { - (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), LESSEQ); + case 44: /* Exp: Exp '>' Exp */ +#line 497 "src/parser.y" + { + (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '>'); } #line 3050 "src/parser.c" break; - case 46: /* Exp: Exp ">=" Exp */ -#line 500 "src/parser.y" + case 45: /* Exp: Exp "<=" Exp */ +#line 501 "src/parser.y" { - (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), GREATEREQ); + (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), LESSEQ); } #line 3058 "src/parser.c" break; - case 47: /* Exp: Term */ -#line 504 "src/parser.y" - { - (yyval.blk) = (yyvsp[0].blk); + case 46: /* Exp: Exp ">=" Exp */ +#line 505 "src/parser.y" + { + (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), GREATEREQ); } #line 3066 "src/parser.c" break; - case 48: /* Import: ImportWhat ';' */ + case 47: /* Exp: Term */ #line 509 "src/parser.y" - { - (yyval.blk) = (yyvsp[-1].blk); + { + (yyval.blk) = (yyvsp[0].blk); } #line 3074 "src/parser.c" break; + case 48: /* Import: ImportWhat ';' */ +#line 514 "src/parser.y" + { + (yyval.blk) = (yyvsp[-1].blk); +} +#line 3082 "src/parser.c" + break; + case 49: /* Import: ImportWhat Exp ';' */ -#line 512 "src/parser.y" +#line 517 "src/parser.y" { if (!block_is_const((yyvsp[-1].blk))) { FAIL((yyloc), "Module metadata must be constant"); @@ -3090,11 +3098,11 @@ yyreduce: (yyval.blk) = gen_import_meta((yyvsp[-2].blk), (yyvsp[-1].blk)); } } -#line 3094 "src/parser.c" +#line 3102 "src/parser.c" break; case 50: /* ImportWhat: "import" ImportFrom "as" BINDING */ -#line 529 "src/parser.y" +#line 534 "src/parser.y" { jv v = block_const((yyvsp[-2].blk)); // XXX Make gen_import take only blocks and the int is_data so we @@ -3104,11 +3112,11 @@ yyreduce: jv_free((yyvsp[0].literal)); jv_free(v); } -#line 3108 "src/parser.c" +#line 3116 "src/parser.c" break; case 51: /* ImportWhat: "import" ImportFrom "as" IDENT */ -#line 538 "src/parser.y" +#line 543 "src/parser.y" { jv v = block_const((yyvsp[-2].blk)); (yyval.blk) = gen_import(jv_string_value(v), jv_string_value((yyvsp[0].literal)), 0); @@ -3116,22 +3124,22 @@ yyreduce: jv_free((yyvsp[0].literal)); jv_free(v); } -#line 3120 "src/parser.c" +#line 3128 "src/parser.c" break; case 52: /* ImportWhat: "include" ImportFrom */ -#line 545 "src/parser.y" +#line 550 "src/parser.y" { jv v = block_const((yyvsp[0].blk)); (yyval.blk) = gen_import(jv_string_value(v), NULL, 0); block_free((yyvsp[0].blk)); jv_free(v); } -#line 3131 "src/parser.c" +#line 3139 "src/parser.c" break; case 53: /* ImportFrom: String */ -#line 553 "src/parser.y" +#line 558 "src/parser.y" { if (!block_is_const((yyvsp[0].blk))) { FAIL((yyloc), "Import path must be constant"); @@ -3141,181 +3149,181 @@ yyreduce: (yyval.blk) = (yyvsp[0].blk); } } -#line 3145 "src/parser.c" +#line 3153 "src/parser.c" break; case 54: /* FuncDef: "def" IDENT ':' Exp ';' */ -#line 564 "src/parser.y" +#line 569 "src/parser.y" { (yyval.blk) = gen_function(jv_string_value((yyvsp[-3].literal)), gen_noop(), (yyvsp[-1].blk)); jv_free((yyvsp[-3].literal)); } -#line 3154 "src/parser.c" +#line 3162 "src/parser.c" break; case 55: /* FuncDef: "def" IDENT '(' Params ')' ':' Exp ';' */ -#line 569 "src/parser.y" +#line 574 "src/parser.y" { (yyval.blk) = gen_function(jv_string_value((yyvsp[-6].literal)), (yyvsp[-4].blk), (yyvsp[-1].blk)); jv_free((yyvsp[-6].literal)); } -#line 3163 "src/parser.c" - break; - - case 56: /* Params: Param */ -#line 575 "src/parser.y" - { - (yyval.blk) = (yyvsp[0].blk); -} #line 3171 "src/parser.c" break; - case 57: /* Params: Params ';' Param */ -#line 578 "src/parser.y" - { - (yyval.blk) = BLOCK((yyvsp[-2].blk), (yyvsp[0].blk)); + case 56: /* Params: Param */ +#line 580 "src/parser.y" + { + (yyval.blk) = (yyvsp[0].blk); } #line 3179 "src/parser.c" break; - case 58: /* Param: BINDING */ + case 57: /* Params: Params ';' Param */ #line 583 "src/parser.y" + { + (yyval.blk) = BLOCK((yyvsp[-2].blk), (yyvsp[0].blk)); +} +#line 3187 "src/parser.c" + break; + + case 58: /* Param: BINDING */ +#line 588 "src/parser.y" { (yyval.blk) = gen_param_regular(jv_string_value((yyvsp[0].literal))); jv_free((yyvsp[0].literal)); } -#line 3188 "src/parser.c" +#line 3196 "src/parser.c" break; case 59: /* Param: IDENT */ -#line 587 "src/parser.y" +#line 592 "src/parser.y" { (yyval.blk) = gen_param(jv_string_value((yyvsp[0].literal))); jv_free((yyvsp[0].literal)); } -#line 3197 "src/parser.c" +#line 3205 "src/parser.c" break; case 60: /* @1: %empty */ -#line 594 "src/parser.y" +#line 599 "src/parser.y" { (yyval.literal) = jv_string("text"); } -#line 3203 "src/parser.c" +#line 3211 "src/parser.c" break; case 61: /* String: QQSTRING_START @1 QQString QQSTRING_END */ -#line 594 "src/parser.y" +#line 599 "src/parser.y" { (yyval.blk) = (yyvsp[-1].blk); jv_free((yyvsp[-2].literal)); } -#line 3212 "src/parser.c" +#line 3220 "src/parser.c" break; case 62: /* @2: %empty */ -#line 598 "src/parser.y" +#line 603 "src/parser.y" { (yyval.literal) = (yyvsp[-1].literal); } -#line 3218 "src/parser.c" +#line 3226 "src/parser.c" break; case 63: /* String: FORMAT QQSTRING_START @2 QQString QQSTRING_END */ -#line 598 "src/parser.y" +#line 603 "src/parser.y" { (yyval.blk) = (yyvsp[-1].blk); jv_free((yyvsp[-2].literal)); } -#line 3227 "src/parser.c" - break; - - case 64: /* QQString: %empty */ -#line 605 "src/parser.y" - { - (yyval.blk) = gen_const(jv_string("")); -} #line 3235 "src/parser.c" break; - case 65: /* QQString: QQString QQSTRING_TEXT */ -#line 608 "src/parser.y" - { - (yyval.blk) = gen_binop((yyvsp[-1].blk), gen_const((yyvsp[0].literal)), '+'); + case 64: /* QQString: %empty */ +#line 610 "src/parser.y" + { + (yyval.blk) = gen_const(jv_string("")); } #line 3243 "src/parser.c" break; - case 66: /* QQString: QQString QQSTRING_INTERP_START Exp QQSTRING_INTERP_END */ -#line 611 "src/parser.y" - { - (yyval.blk) = gen_binop((yyvsp[-3].blk), gen_format((yyvsp[-1].blk), jv_copy((yyvsp[-4].literal))), '+'); + case 65: /* QQString: QQString QQSTRING_TEXT */ +#line 613 "src/parser.y" + { + (yyval.blk) = gen_binop((yyvsp[-1].blk), gen_const((yyvsp[0].literal)), '+'); } #line 3251 "src/parser.c" break; - case 67: /* ElseBody: "elif" Exp "then" Exp ElseBody */ -#line 617 "src/parser.y" - { - (yyval.blk) = gen_cond((yyvsp[-3].blk), (yyvsp[-1].blk), (yyvsp[0].blk)); + case 66: /* QQString: QQString QQSTRING_INTERP_START Exp QQSTRING_INTERP_END */ +#line 616 "src/parser.y" + { + (yyval.blk) = gen_binop((yyvsp[-3].blk), gen_format((yyvsp[-1].blk), jv_copy((yyvsp[-4].literal))), '+'); } #line 3259 "src/parser.c" break; - case 68: /* ElseBody: "else" Exp "end" */ -#line 620 "src/parser.y" - { - (yyval.blk) = (yyvsp[-1].blk); + case 67: /* ElseBody: "elif" Exp "then" Exp ElseBody */ +#line 622 "src/parser.y" + { + (yyval.blk) = gen_cond((yyvsp[-3].blk), (yyvsp[-1].blk), (yyvsp[0].blk)); } #line 3267 "src/parser.c" break; - case 69: /* ElseBody: "end" */ -#line 623 "src/parser.y" - { - (yyval.blk) = gen_noop(); + case 68: /* ElseBody: "else" Exp "end" */ +#line 625 "src/parser.y" + { + (yyval.blk) = (yyvsp[-1].blk); } #line 3275 "src/parser.c" break; - case 70: /* ExpD: ExpD '|' ExpD */ + case 69: /* ElseBody: "end" */ #line 628 "src/parser.y" - { - (yyval.blk) = block_join((yyvsp[-2].blk), (yyvsp[0].blk)); + { + (yyval.blk) = gen_noop(); } #line 3283 "src/parser.c" break; - case 71: /* ExpD: '-' ExpD */ -#line 631 "src/parser.y" - { - (yyval.blk) = BLOCK((yyvsp[0].blk), gen_call("_negate", gen_noop())); + case 70: /* ExpD: ExpD '|' ExpD */ +#line 633 "src/parser.y" + { + (yyval.blk) = block_join((yyvsp[-2].blk), (yyvsp[0].blk)); } #line 3291 "src/parser.c" break; - case 72: /* ExpD: Term */ -#line 634 "src/parser.y" - { - (yyval.blk) = (yyvsp[0].blk); + case 71: /* ExpD: '-' ExpD */ +#line 636 "src/parser.y" + { + (yyval.blk) = BLOCK((yyvsp[0].blk), gen_call("_negate", gen_noop())); } #line 3299 "src/parser.c" break; - case 73: /* Term: '.' */ -#line 640 "src/parser.y" - { - (yyval.blk) = gen_noop(); + case 72: /* ExpD: Term */ +#line 639 "src/parser.y" + { + (yyval.blk) = (yyvsp[0].blk); } #line 3307 "src/parser.c" break; - case 74: /* Term: ".." */ -#line 643 "src/parser.y" + case 73: /* Term: '.' */ +#line 645 "src/parser.y" { - (yyval.blk) = gen_call("recurse", gen_noop()); + (yyval.blk) = gen_noop(); } #line 3315 "src/parser.c" break; + case 74: /* Term: ".." */ +#line 648 "src/parser.y" + { + (yyval.blk) = gen_call("recurse", gen_noop()); +} +#line 3323 "src/parser.c" + break; + case 75: /* Term: "break" BINDING */ -#line 646 "src/parser.y" +#line 651 "src/parser.y" { jv v = jv_string_fmt("*label-%s", jv_string_value((yyvsp[0].literal))); // impossible symbol (yyval.blk) = gen_location((yyloc), locations, @@ -3324,263 +3332,263 @@ yyreduce: jv_free(v); jv_free((yyvsp[0].literal)); } -#line 3328 "src/parser.c" +#line 3336 "src/parser.c" break; case 76: /* Term: "break" error */ -#line 654 "src/parser.y" +#line 659 "src/parser.y" { FAIL((yyloc), "break requires a label to break to"); (yyval.blk) = gen_noop(); } -#line 3337 "src/parser.c" - break; - - case 77: /* Term: Term FIELD '?' */ -#line 658 "src/parser.y" - { - (yyval.blk) = gen_index_opt((yyvsp[-2].blk), gen_const((yyvsp[-1].literal))); -} #line 3345 "src/parser.c" break; - case 78: /* Term: FIELD '?' */ -#line 661 "src/parser.y" - { - (yyval.blk) = gen_index_opt(gen_noop(), gen_const((yyvsp[-1].literal))); + case 77: /* Term: Term FIELD '?' */ +#line 663 "src/parser.y" + { + (yyval.blk) = gen_index_opt((yyvsp[-2].blk), gen_const((yyvsp[-1].literal))); } #line 3353 "src/parser.c" break; - case 79: /* Term: Term '.' String '?' */ -#line 664 "src/parser.y" - { - (yyval.blk) = gen_index_opt((yyvsp[-3].blk), (yyvsp[-1].blk)); + case 78: /* Term: FIELD '?' */ +#line 666 "src/parser.y" + { + (yyval.blk) = gen_index_opt(gen_noop(), gen_const((yyvsp[-1].literal))); } #line 3361 "src/parser.c" break; - case 80: /* Term: '.' String '?' */ -#line 667 "src/parser.y" - { - (yyval.blk) = gen_index_opt(gen_noop(), (yyvsp[-1].blk)); + case 79: /* Term: Term '.' String '?' */ +#line 669 "src/parser.y" + { + (yyval.blk) = gen_index_opt((yyvsp[-3].blk), (yyvsp[-1].blk)); } #line 3369 "src/parser.c" break; - case 81: /* Term: Term FIELD */ -#line 670 "src/parser.y" - { - (yyval.blk) = gen_index((yyvsp[-1].blk), gen_const((yyvsp[0].literal))); + case 80: /* Term: '.' String '?' */ +#line 672 "src/parser.y" + { + (yyval.blk) = gen_index_opt(gen_noop(), (yyvsp[-1].blk)); } #line 3377 "src/parser.c" break; - case 82: /* Term: FIELD */ -#line 673 "src/parser.y" - { - (yyval.blk) = gen_index(gen_noop(), gen_const((yyvsp[0].literal))); + case 81: /* Term: Term FIELD */ +#line 675 "src/parser.y" + { + (yyval.blk) = gen_index((yyvsp[-1].blk), gen_const((yyvsp[0].literal))); } #line 3385 "src/parser.c" break; - case 83: /* Term: Term '.' String */ -#line 676 "src/parser.y" - { - (yyval.blk) = gen_index((yyvsp[-2].blk), (yyvsp[0].blk)); + case 82: /* Term: FIELD */ +#line 678 "src/parser.y" + { + (yyval.blk) = gen_index(gen_noop(), gen_const((yyvsp[0].literal))); } #line 3393 "src/parser.c" break; - case 84: /* Term: '.' String */ -#line 679 "src/parser.y" - { - (yyval.blk) = gen_index(gen_noop(), (yyvsp[0].blk)); + case 83: /* Term: Term '.' String */ +#line 681 "src/parser.y" + { + (yyval.blk) = gen_index((yyvsp[-2].blk), (yyvsp[0].blk)); } #line 3401 "src/parser.c" break; + case 84: /* Term: '.' String */ +#line 684 "src/parser.y" + { + (yyval.blk) = gen_index(gen_noop(), (yyvsp[0].blk)); +} +#line 3409 "src/parser.c" + break; + case 85: /* Term: '.' error */ -#line 682 "src/parser.y" +#line 687 "src/parser.y" { FAIL((yyloc), "try .[\"field\"] instead of .field for unusually named fields"); (yyval.blk) = gen_noop(); } -#line 3410 "src/parser.c" +#line 3418 "src/parser.c" break; case 86: /* Term: '.' IDENT error */ -#line 686 "src/parser.y" +#line 691 "src/parser.y" { jv_free((yyvsp[-1].literal)); FAIL((yyloc), "try .[\"field\"] instead of .field for unusually named fields"); (yyval.blk) = gen_noop(); } -#line 3420 "src/parser.c" - break; - - case 87: /* Term: Term '[' Exp ']' '?' */ -#line 692 "src/parser.y" - { - (yyval.blk) = gen_index_opt((yyvsp[-4].blk), (yyvsp[-2].blk)); -} #line 3428 "src/parser.c" break; - case 88: /* Term: Term '[' Exp ']' */ -#line 695 "src/parser.y" - { - (yyval.blk) = gen_index((yyvsp[-3].blk), (yyvsp[-1].blk)); + case 87: /* Term: Term '[' Exp ']' '?' */ +#line 697 "src/parser.y" + { + (yyval.blk) = gen_index_opt((yyvsp[-4].blk), (yyvsp[-2].blk)); } #line 3436 "src/parser.c" break; - case 89: /* Term: Term '.' '[' Exp ']' '?' */ -#line 698 "src/parser.y" - { - (yyval.blk) = gen_index_opt((yyvsp[-5].blk), (yyvsp[-2].blk)); + case 88: /* Term: Term '[' Exp ']' */ +#line 700 "src/parser.y" + { + (yyval.blk) = gen_index((yyvsp[-3].blk), (yyvsp[-1].blk)); } #line 3444 "src/parser.c" break; - case 90: /* Term: Term '.' '[' Exp ']' */ -#line 701 "src/parser.y" - { - (yyval.blk) = gen_index((yyvsp[-4].blk), (yyvsp[-1].blk)); + case 89: /* Term: Term '.' '[' Exp ']' '?' */ +#line 703 "src/parser.y" + { + (yyval.blk) = gen_index_opt((yyvsp[-5].blk), (yyvsp[-2].blk)); } #line 3452 "src/parser.c" break; - case 91: /* Term: Term '[' ']' '?' */ -#line 704 "src/parser.y" - { - (yyval.blk) = block_join((yyvsp[-3].blk), gen_op_simple(EACH_OPT)); + case 90: /* Term: Term '.' '[' Exp ']' */ +#line 706 "src/parser.y" + { + (yyval.blk) = gen_index((yyvsp[-4].blk), (yyvsp[-1].blk)); } #line 3460 "src/parser.c" break; - case 92: /* Term: Term '[' ']' */ -#line 707 "src/parser.y" - { - (yyval.blk) = block_join((yyvsp[-2].blk), gen_op_simple(EACH)); + case 91: /* Term: Term '[' ']' '?' */ +#line 709 "src/parser.y" + { + (yyval.blk) = block_join((yyvsp[-3].blk), gen_op_simple(EACH_OPT)); } #line 3468 "src/parser.c" break; - case 93: /* Term: Term '.' '[' ']' '?' */ -#line 710 "src/parser.y" - { - (yyval.blk) = block_join((yyvsp[-4].blk), gen_op_simple(EACH_OPT)); + case 92: /* Term: Term '[' ']' */ +#line 712 "src/parser.y" + { + (yyval.blk) = block_join((yyvsp[-2].blk), gen_op_simple(EACH)); } #line 3476 "src/parser.c" break; - case 94: /* Term: Term '.' '[' ']' */ -#line 713 "src/parser.y" - { - (yyval.blk) = block_join((yyvsp[-3].blk), gen_op_simple(EACH)); + case 93: /* Term: Term '.' '[' ']' '?' */ +#line 715 "src/parser.y" + { + (yyval.blk) = block_join((yyvsp[-4].blk), gen_op_simple(EACH_OPT)); } #line 3484 "src/parser.c" break; - case 95: /* Term: Term '[' Exp ':' Exp ']' '?' */ -#line 716 "src/parser.y" - { - (yyval.blk) = gen_slice_index((yyvsp[-6].blk), (yyvsp[-4].blk), (yyvsp[-2].blk), INDEX_OPT); + case 94: /* Term: Term '.' '[' ']' */ +#line 718 "src/parser.y" + { + (yyval.blk) = block_join((yyvsp[-3].blk), gen_op_simple(EACH)); } #line 3492 "src/parser.c" break; - case 96: /* Term: Term '[' Exp ':' ']' '?' */ -#line 719 "src/parser.y" - { - (yyval.blk) = gen_slice_index((yyvsp[-5].blk), (yyvsp[-3].blk), gen_const(jv_null()), INDEX_OPT); + case 95: /* Term: Term '[' Exp ':' Exp ']' '?' */ +#line 721 "src/parser.y" + { + (yyval.blk) = gen_slice_index((yyvsp[-6].blk), (yyvsp[-4].blk), (yyvsp[-2].blk), INDEX_OPT); } #line 3500 "src/parser.c" break; - case 97: /* Term: Term '[' ':' Exp ']' '?' */ -#line 722 "src/parser.y" + case 96: /* Term: Term '[' Exp ':' ']' '?' */ +#line 724 "src/parser.y" { - (yyval.blk) = gen_slice_index((yyvsp[-5].blk), gen_const(jv_null()), (yyvsp[-2].blk), INDEX_OPT); + (yyval.blk) = gen_slice_index((yyvsp[-5].blk), (yyvsp[-3].blk), gen_const(jv_null()), INDEX_OPT); } #line 3508 "src/parser.c" break; - case 98: /* Term: Term '[' Exp ':' Exp ']' */ -#line 725 "src/parser.y" - { - (yyval.blk) = gen_slice_index((yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk), INDEX); + case 97: /* Term: Term '[' ':' Exp ']' '?' */ +#line 727 "src/parser.y" + { + (yyval.blk) = gen_slice_index((yyvsp[-5].blk), gen_const(jv_null()), (yyvsp[-2].blk), INDEX_OPT); } #line 3516 "src/parser.c" break; - case 99: /* Term: Term '[' Exp ':' ']' */ -#line 728 "src/parser.y" - { - (yyval.blk) = gen_slice_index((yyvsp[-4].blk), (yyvsp[-2].blk), gen_const(jv_null()), INDEX); + case 98: /* Term: Term '[' Exp ':' Exp ']' */ +#line 730 "src/parser.y" + { + (yyval.blk) = gen_slice_index((yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk), INDEX); } #line 3524 "src/parser.c" break; - case 100: /* Term: Term '[' ':' Exp ']' */ -#line 731 "src/parser.y" + case 99: /* Term: Term '[' Exp ':' ']' */ +#line 733 "src/parser.y" { - (yyval.blk) = gen_slice_index((yyvsp[-4].blk), gen_const(jv_null()), (yyvsp[-1].blk), INDEX); + (yyval.blk) = gen_slice_index((yyvsp[-4].blk), (yyvsp[-2].blk), gen_const(jv_null()), INDEX); } #line 3532 "src/parser.c" break; - case 101: /* Term: LITERAL */ -#line 734 "src/parser.y" - { - (yyval.blk) = gen_const((yyvsp[0].literal)); + case 100: /* Term: Term '[' ':' Exp ']' */ +#line 736 "src/parser.y" + { + (yyval.blk) = gen_slice_index((yyvsp[-4].blk), gen_const(jv_null()), (yyvsp[-1].blk), INDEX); } #line 3540 "src/parser.c" break; - case 102: /* Term: String */ -#line 737 "src/parser.y" - { - (yyval.blk) = (yyvsp[0].blk); + case 101: /* Term: LITERAL */ +#line 739 "src/parser.y" + { + (yyval.blk) = gen_const((yyvsp[0].literal)); } #line 3548 "src/parser.c" break; - case 103: /* Term: FORMAT */ -#line 740 "src/parser.y" + case 102: /* Term: String */ +#line 742 "src/parser.y" { - (yyval.blk) = gen_format(gen_noop(), (yyvsp[0].literal)); + (yyval.blk) = (yyvsp[0].blk); } #line 3556 "src/parser.c" break; - case 104: /* Term: '(' Exp ')' */ -#line 743 "src/parser.y" - { - (yyval.blk) = (yyvsp[-1].blk); + case 103: /* Term: FORMAT */ +#line 745 "src/parser.y" + { + (yyval.blk) = gen_format(gen_noop(), (yyvsp[0].literal)); } #line 3564 "src/parser.c" break; - case 105: /* Term: '[' Exp ']' */ -#line 746 "src/parser.y" + case 104: /* Term: '(' Exp ')' */ +#line 748 "src/parser.y" { - (yyval.blk) = gen_collect((yyvsp[-1].blk)); + (yyval.blk) = (yyvsp[-1].blk); } #line 3572 "src/parser.c" break; - case 106: /* Term: '[' ']' */ -#line 749 "src/parser.y" - { - (yyval.blk) = gen_const(jv_array()); + case 105: /* Term: '[' Exp ']' */ +#line 751 "src/parser.y" + { + (yyval.blk) = gen_collect((yyvsp[-1].blk)); } #line 3580 "src/parser.c" break; + case 106: /* Term: '[' ']' */ +#line 754 "src/parser.y" + { + (yyval.blk) = gen_const(jv_array()); +} +#line 3588 "src/parser.c" + break; + case 107: /* Term: '{' MkDict '}' */ -#line 752 "src/parser.y" +#line 757 "src/parser.y" { block o = gen_const_object((yyvsp[-1].blk)); if (o.first != NULL) @@ -3588,38 +3596,37 @@ yyreduce: else (yyval.blk) = BLOCK(gen_subexp(gen_const(jv_object())), (yyvsp[-1].blk), gen_op_simple(POP)); } -#line 3592 "src/parser.c" +#line 3600 "src/parser.c" break; case 108: /* Term: '$' '$' '$' BINDING */ -#line 774 "src/parser.y" +#line 779 "src/parser.y" { (yyval.blk) = gen_location((yyloc), locations, gen_op_unbound(LOADVN, jv_string_value((yyvsp[0].literal)))); jv_free((yyvsp[0].literal)); } -#line 3601 "src/parser.c" +#line 3609 "src/parser.c" break; case 109: /* Term: BINDING */ -#line 778 "src/parser.y" +#line 783 "src/parser.y" { (yyval.blk) = gen_location((yyloc), locations, gen_op_unbound(LOADV, jv_string_value((yyvsp[0].literal)))); jv_free((yyvsp[0].literal)); } -#line 3610 "src/parser.c" +#line 3618 "src/parser.c" break; case 110: /* Term: "$__loc__" */ -#line 782 "src/parser.y" +#line 787 "src/parser.y" { - (yyval.blk) = gen_const(JV_OBJECT(jv_string("file"), jv_copy(locations->fname), - jv_string("line"), jv_number(locfile_get_line(locations, (yyloc).start) + 1))); + (yyval.blk) = gen_loc_object(&(yyloc), locations); } -#line 3619 "src/parser.c" +#line 3626 "src/parser.c" break; case 111: /* Term: IDENT */ -#line 786 "src/parser.y" +#line 790 "src/parser.y" { const char *s = jv_string_value((yyvsp[0].literal)); if (strcmp(s, "false") == 0) @@ -3632,198 +3639,198 @@ yyreduce: (yyval.blk) = gen_location((yyloc), locations, gen_call(s, gen_noop())); jv_free((yyvsp[0].literal)); } -#line 3636 "src/parser.c" +#line 3643 "src/parser.c" break; case 112: /* Term: IDENT '(' Args ')' */ -#line 798 "src/parser.y" +#line 802 "src/parser.y" { (yyval.blk) = gen_call(jv_string_value((yyvsp[-3].literal)), (yyvsp[-1].blk)); (yyval.blk) = gen_location((yylsp[-3]), locations, (yyval.blk)); jv_free((yyvsp[-3].literal)); } -#line 3646 "src/parser.c" +#line 3653 "src/parser.c" break; case 113: /* Term: '(' error ')' */ -#line 803 "src/parser.y" +#line 807 "src/parser.y" { (yyval.blk) = gen_noop(); } -#line 3652 "src/parser.c" +#line 3659 "src/parser.c" break; case 114: /* Term: '[' error ']' */ -#line 804 "src/parser.y" +#line 808 "src/parser.y" { (yyval.blk) = gen_noop(); } -#line 3658 "src/parser.c" +#line 3665 "src/parser.c" break; case 115: /* Term: Term '[' error ']' */ -#line 805 "src/parser.y" +#line 809 "src/parser.y" { (yyval.blk) = (yyvsp[-3].blk); } -#line 3664 "src/parser.c" +#line 3671 "src/parser.c" break; case 116: /* Term: '{' error '}' */ -#line 806 "src/parser.y" +#line 810 "src/parser.y" { (yyval.blk) = gen_noop(); } -#line 3670 "src/parser.c" +#line 3677 "src/parser.c" break; case 117: /* Args: Arg */ -#line 809 "src/parser.y" +#line 813 "src/parser.y" { (yyval.blk) = (yyvsp[0].blk); } -#line 3678 "src/parser.c" +#line 3685 "src/parser.c" break; case 118: /* Args: Args ';' Arg */ -#line 812 "src/parser.y" +#line 816 "src/parser.y" { (yyval.blk) = BLOCK((yyvsp[-2].blk), (yyvsp[0].blk)); } -#line 3686 "src/parser.c" +#line 3693 "src/parser.c" break; case 119: /* Arg: Exp */ -#line 817 "src/parser.y" +#line 821 "src/parser.y" { (yyval.blk) = gen_lambda((yyvsp[0].blk)); } -#line 3694 "src/parser.c" +#line 3701 "src/parser.c" break; case 120: /* RepPatterns: RepPatterns "?//" Pattern */ -#line 822 "src/parser.y" +#line 826 "src/parser.y" { (yyval.blk) = BLOCK((yyvsp[-2].blk), gen_destructure_alt((yyvsp[0].blk))); } -#line 3702 "src/parser.c" +#line 3709 "src/parser.c" break; case 121: /* RepPatterns: Pattern */ -#line 825 "src/parser.y" +#line 829 "src/parser.y" { (yyval.blk) = gen_destructure_alt((yyvsp[0].blk)); } -#line 3710 "src/parser.c" +#line 3717 "src/parser.c" break; case 122: /* Patterns: RepPatterns "?//" Pattern */ -#line 830 "src/parser.y" +#line 834 "src/parser.y" { (yyval.blk) = BLOCK((yyvsp[-2].blk), (yyvsp[0].blk)); } -#line 3718 "src/parser.c" +#line 3725 "src/parser.c" break; case 123: /* Patterns: Pattern */ -#line 833 "src/parser.y" +#line 837 "src/parser.y" { (yyval.blk) = (yyvsp[0].blk); } -#line 3726 "src/parser.c" +#line 3733 "src/parser.c" break; case 124: /* Pattern: BINDING */ -#line 838 "src/parser.y" +#line 842 "src/parser.y" { (yyval.blk) = gen_op_unbound(STOREV, jv_string_value((yyvsp[0].literal))); jv_free((yyvsp[0].literal)); } -#line 3735 "src/parser.c" +#line 3742 "src/parser.c" break; case 125: /* Pattern: '[' ArrayPats ']' */ -#line 842 "src/parser.y" +#line 846 "src/parser.y" { (yyval.blk) = BLOCK((yyvsp[-1].blk), gen_op_simple(POP)); } -#line 3743 "src/parser.c" +#line 3750 "src/parser.c" break; case 126: /* Pattern: '{' ObjPats '}' */ -#line 845 "src/parser.y" +#line 849 "src/parser.y" { (yyval.blk) = BLOCK((yyvsp[-1].blk), gen_op_simple(POP)); } -#line 3751 "src/parser.c" +#line 3758 "src/parser.c" break; case 127: /* ArrayPats: Pattern */ -#line 850 "src/parser.y" +#line 854 "src/parser.y" { (yyval.blk) = gen_array_matcher(gen_noop(), (yyvsp[0].blk)); } -#line 3759 "src/parser.c" +#line 3766 "src/parser.c" break; case 128: /* ArrayPats: ArrayPats ',' Pattern */ -#line 853 "src/parser.y" +#line 857 "src/parser.y" { (yyval.blk) = gen_array_matcher((yyvsp[-2].blk), (yyvsp[0].blk)); } -#line 3767 "src/parser.c" +#line 3774 "src/parser.c" break; case 129: /* ObjPats: ObjPat */ -#line 858 "src/parser.y" +#line 862 "src/parser.y" { (yyval.blk) = (yyvsp[0].blk); } -#line 3775 "src/parser.c" +#line 3782 "src/parser.c" break; case 130: /* ObjPats: ObjPats ',' ObjPat */ -#line 861 "src/parser.y" +#line 865 "src/parser.y" { (yyval.blk) = BLOCK((yyvsp[-2].blk), (yyvsp[0].blk)); } -#line 3783 "src/parser.c" +#line 3790 "src/parser.c" break; case 131: /* ObjPat: BINDING */ -#line 866 "src/parser.y" +#line 870 "src/parser.y" { (yyval.blk) = gen_object_matcher(gen_const((yyvsp[0].literal)), gen_op_unbound(STOREV, jv_string_value((yyvsp[0].literal)))); } -#line 3791 "src/parser.c" +#line 3798 "src/parser.c" break; case 132: /* ObjPat: BINDING ':' Pattern */ -#line 869 "src/parser.y" +#line 873 "src/parser.y" { (yyval.blk) = gen_object_matcher(gen_const((yyvsp[-2].literal)), BLOCK(gen_op_simple(DUP), gen_op_unbound(STOREV, jv_string_value((yyvsp[-2].literal))), (yyvsp[0].blk))); } -#line 3799 "src/parser.c" +#line 3806 "src/parser.c" break; case 133: /* ObjPat: IDENT ':' Pattern */ -#line 872 "src/parser.y" +#line 876 "src/parser.y" { (yyval.blk) = gen_object_matcher(gen_const((yyvsp[-2].literal)), (yyvsp[0].blk)); } -#line 3807 "src/parser.c" +#line 3814 "src/parser.c" break; case 134: /* ObjPat: Keyword ':' Pattern */ -#line 875 "src/parser.y" +#line 879 "src/parser.y" { (yyval.blk) = gen_object_matcher(gen_const((yyvsp[-2].literal)), (yyvsp[0].blk)); } -#line 3815 "src/parser.c" +#line 3822 "src/parser.c" break; case 135: /* ObjPat: String ':' Pattern */ -#line 878 "src/parser.y" +#line 882 "src/parser.y" { (yyval.blk) = gen_object_matcher((yyvsp[-2].blk), (yyvsp[0].blk)); } -#line 3823 "src/parser.c" +#line 3830 "src/parser.c" break; case 136: /* ObjPat: '(' Exp ')' ':' Pattern */ -#line 881 "src/parser.y" +#line 885 "src/parser.y" { jv msg = check_object_key((yyvsp[-3].blk)); if (jv_is_valid(msg)) { @@ -3832,259 +3839,268 @@ yyreduce: jv_free(msg); (yyval.blk) = gen_object_matcher((yyvsp[-3].blk), (yyvsp[0].blk)); } -#line 3836 "src/parser.c" +#line 3843 "src/parser.c" break; case 137: /* ObjPat: error ':' Pattern */ -#line 889 "src/parser.y" +#line 893 "src/parser.y" { FAIL((yyloc), "May need parentheses around object key expression"); (yyval.blk) = (yyvsp[0].blk); } -#line 3845 "src/parser.c" +#line 3852 "src/parser.c" break; case 138: /* Keyword: "as" */ -#line 895 "src/parser.y" +#line 899 "src/parser.y" { (yyval.literal) = jv_string("as"); } -#line 3853 "src/parser.c" +#line 3860 "src/parser.c" break; case 139: /* Keyword: "def" */ -#line 898 "src/parser.y" +#line 902 "src/parser.y" { (yyval.literal) = jv_string("def"); } -#line 3861 "src/parser.c" +#line 3868 "src/parser.c" break; case 140: /* Keyword: "module" */ -#line 901 "src/parser.y" +#line 905 "src/parser.y" { (yyval.literal) = jv_string("module"); } -#line 3869 "src/parser.c" +#line 3876 "src/parser.c" break; case 141: /* Keyword: "import" */ -#line 904 "src/parser.y" +#line 908 "src/parser.y" { (yyval.literal) = jv_string("import"); } -#line 3877 "src/parser.c" +#line 3884 "src/parser.c" break; case 142: /* Keyword: "include" */ -#line 907 "src/parser.y" +#line 911 "src/parser.y" { (yyval.literal) = jv_string("include"); } -#line 3885 "src/parser.c" +#line 3892 "src/parser.c" break; case 143: /* Keyword: "if" */ -#line 910 "src/parser.y" +#line 914 "src/parser.y" { (yyval.literal) = jv_string("if"); } -#line 3893 "src/parser.c" +#line 3900 "src/parser.c" break; case 144: /* Keyword: "then" */ -#line 913 "src/parser.y" +#line 917 "src/parser.y" { (yyval.literal) = jv_string("then"); } -#line 3901 "src/parser.c" +#line 3908 "src/parser.c" break; case 145: /* Keyword: "else" */ -#line 916 "src/parser.y" +#line 920 "src/parser.y" { (yyval.literal) = jv_string("else"); } -#line 3909 "src/parser.c" +#line 3916 "src/parser.c" break; case 146: /* Keyword: "elif" */ -#line 919 "src/parser.y" +#line 923 "src/parser.y" { (yyval.literal) = jv_string("elif"); } -#line 3917 "src/parser.c" +#line 3924 "src/parser.c" break; case 147: /* Keyword: "reduce" */ -#line 922 "src/parser.y" +#line 926 "src/parser.y" { (yyval.literal) = jv_string("reduce"); } -#line 3925 "src/parser.c" +#line 3932 "src/parser.c" break; case 148: /* Keyword: "foreach" */ -#line 925 "src/parser.y" +#line 929 "src/parser.y" { (yyval.literal) = jv_string("foreach"); } -#line 3933 "src/parser.c" +#line 3940 "src/parser.c" break; case 149: /* Keyword: "end" */ -#line 928 "src/parser.y" +#line 932 "src/parser.y" { (yyval.literal) = jv_string("end"); } -#line 3941 "src/parser.c" +#line 3948 "src/parser.c" break; case 150: /* Keyword: "and" */ -#line 931 "src/parser.y" +#line 935 "src/parser.y" { (yyval.literal) = jv_string("and"); } -#line 3949 "src/parser.c" +#line 3956 "src/parser.c" break; case 151: /* Keyword: "or" */ -#line 934 "src/parser.y" +#line 938 "src/parser.y" { (yyval.literal) = jv_string("or"); } -#line 3957 "src/parser.c" +#line 3964 "src/parser.c" break; case 152: /* Keyword: "try" */ -#line 937 "src/parser.y" +#line 941 "src/parser.y" { (yyval.literal) = jv_string("try"); } -#line 3965 "src/parser.c" +#line 3972 "src/parser.c" break; case 153: /* Keyword: "catch" */ -#line 940 "src/parser.y" +#line 944 "src/parser.y" { (yyval.literal) = jv_string("catch"); } -#line 3973 "src/parser.c" +#line 3980 "src/parser.c" break; case 154: /* Keyword: "label" */ -#line 943 "src/parser.y" +#line 947 "src/parser.y" { (yyval.literal) = jv_string("label"); } -#line 3981 "src/parser.c" +#line 3988 "src/parser.c" break; case 155: /* Keyword: "break" */ -#line 946 "src/parser.y" +#line 950 "src/parser.y" { (yyval.literal) = jv_string("break"); } -#line 3989 "src/parser.c" +#line 3996 "src/parser.c" break; case 156: /* MkDict: %empty */ -#line 951 "src/parser.y" +#line 955 "src/parser.y" { (yyval.blk)=gen_noop(); } -#line 3997 "src/parser.c" +#line 4004 "src/parser.c" break; case 157: /* MkDict: MkDictPair */ -#line 954 "src/parser.y" +#line 958 "src/parser.y" { (yyval.blk) = (yyvsp[0].blk); } -#line 4003 "src/parser.c" +#line 4010 "src/parser.c" break; case 158: /* MkDict: MkDictPair ',' MkDict */ -#line 955 "src/parser.y" +#line 959 "src/parser.y" { (yyval.blk)=block_join((yyvsp[-2].blk), (yyvsp[0].blk)); } -#line 4009 "src/parser.c" +#line 4016 "src/parser.c" break; case 159: /* MkDict: error ',' MkDict */ -#line 956 "src/parser.y" +#line 960 "src/parser.y" { (yyval.blk) = (yyvsp[0].blk); } -#line 4015 "src/parser.c" +#line 4022 "src/parser.c" break; case 160: /* MkDictPair: IDENT ':' ExpD */ -#line 959 "src/parser.y" +#line 963 "src/parser.y" { (yyval.blk) = gen_dictpair(gen_const((yyvsp[-2].literal)), (yyvsp[0].blk)); } -#line 4023 "src/parser.c" +#line 4030 "src/parser.c" break; case 161: /* MkDictPair: Keyword ':' ExpD */ -#line 962 "src/parser.y" +#line 966 "src/parser.y" { (yyval.blk) = gen_dictpair(gen_const((yyvsp[-2].literal)), (yyvsp[0].blk)); } -#line 4031 "src/parser.c" +#line 4038 "src/parser.c" break; case 162: /* MkDictPair: String ':' ExpD */ -#line 965 "src/parser.y" +#line 969 "src/parser.y" { (yyval.blk) = gen_dictpair((yyvsp[-2].blk), (yyvsp[0].blk)); } -#line 4039 "src/parser.c" +#line 4046 "src/parser.c" break; case 163: /* MkDictPair: String */ -#line 968 "src/parser.y" +#line 972 "src/parser.y" { (yyval.blk) = gen_dictpair((yyvsp[0].blk), BLOCK(gen_op_simple(POP), gen_op_simple(DUP2), gen_op_simple(DUP2), gen_op_simple(INDEX))); } -#line 4048 "src/parser.c" +#line 4055 "src/parser.c" break; case 164: /* MkDictPair: BINDING ':' ExpD */ -#line 972 "src/parser.y" +#line 976 "src/parser.y" { (yyval.blk) = gen_dictpair(gen_location((yyloc), locations, gen_op_unbound(LOADV, jv_string_value((yyvsp[-2].literal)))), (yyvsp[0].blk)); } -#line 4057 "src/parser.c" +#line 4064 "src/parser.c" break; case 165: /* MkDictPair: BINDING */ -#line 976 "src/parser.y" +#line 980 "src/parser.y" { (yyval.blk) = gen_dictpair(gen_const((yyvsp[0].literal)), gen_location((yyloc), locations, gen_op_unbound(LOADV, jv_string_value((yyvsp[0].literal))))); } -#line 4066 "src/parser.c" +#line 4073 "src/parser.c" break; case 166: /* MkDictPair: IDENT */ -#line 980 "src/parser.y" +#line 984 "src/parser.y" { (yyval.blk) = gen_dictpair(gen_const(jv_copy((yyvsp[0].literal))), gen_index(gen_noop(), gen_const((yyvsp[0].literal)))); } -#line 4075 "src/parser.c" +#line 4082 "src/parser.c" break; - case 167: /* MkDictPair: Keyword */ -#line 984 "src/parser.y" + case 167: /* MkDictPair: "$__loc__" */ +#line 988 "src/parser.y" + { + (yyval.blk) = gen_dictpair(gen_const(jv_string("__loc__")), + gen_loc_object(&(yyloc), locations)); + } +#line 4091 "src/parser.c" + break; + + case 168: /* MkDictPair: Keyword */ +#line 992 "src/parser.y" { (yyval.blk) = gen_dictpair(gen_const(jv_copy((yyvsp[0].literal))), gen_index(gen_noop(), gen_const((yyvsp[0].literal)))); } -#line 4084 "src/parser.c" +#line 4100 "src/parser.c" break; - case 168: /* MkDictPair: '(' Exp ')' ':' ExpD */ -#line 988 "src/parser.y" + case 169: /* MkDictPair: '(' Exp ')' ':' ExpD */ +#line 996 "src/parser.y" { jv msg = check_object_key((yyvsp[-3].blk)); if (jv_is_valid(msg)) { @@ -4093,20 +4109,20 @@ yyreduce: jv_free(msg); (yyval.blk) = gen_dictpair((yyvsp[-3].blk), (yyvsp[0].blk)); } -#line 4097 "src/parser.c" +#line 4113 "src/parser.c" break; - case 169: /* MkDictPair: error ':' ExpD */ -#line 996 "src/parser.y" + case 170: /* MkDictPair: error ':' ExpD */ +#line 1004 "src/parser.y" { FAIL((yyloc), "May need parentheses around object key expression"); (yyval.blk) = (yyvsp[0].blk); } -#line 4106 "src/parser.c" +#line 4122 "src/parser.c" break; -#line 4110 "src/parser.c" +#line 4126 "src/parser.c" default: break; } @@ -4335,7 +4351,7 @@ yyreturnlab: return yyresult; } -#line 1000 "src/parser.y" +#line 1008 "src/parser.y" int jq_parse(struct locfile* locations, block* answer) { diff --git a/src/parser.y b/src/parser.y index 511dff5e..6924ad34 100644 --- a/src/parser.y +++ b/src/parser.y @@ -300,6 +300,11 @@ static block gen_update(block object, block val, int optype) { optype))))); } +static block gen_loc_object(location *loc, struct locfile *locations) { + return gen_const(JV_OBJECT(jv_string("file"), jv_copy(locations->fname), + jv_string("line"), jv_number(locfile_get_line(locations, loc->start) + 1))); +} + %} %% @@ -780,8 +785,7 @@ BINDING { jv_free($1); } | "$__loc__" { - $$ = gen_const(JV_OBJECT(jv_string("file"), jv_copy(locations->fname), - jv_string("line"), jv_number(locfile_get_line(locations, @$.start) + 1))); + $$ = gen_loc_object(&@$, locations); } | IDENT { const char *s = jv_string_value($1); @@ -981,6 +985,10 @@ IDENT ':' ExpD { $$ = gen_dictpair(gen_const(jv_copy($1)), gen_index(gen_noop(), gen_const($1))); } +| "$__loc__" { + $$ = gen_dictpair(gen_const(jv_string("__loc__")), + gen_loc_object(&@$, locations)); + } | Keyword { $$ = gen_dictpair(gen_const(jv_copy($1)), gen_index(gen_noop(), gen_const($1))); diff --git a/tests/jq.test b/tests/jq.test index 2bab83e3..3d0135b0 100644 --- a/tests/jq.test +++ b/tests/jq.test @@ -1792,3 +1792,9 @@ reduce .[] as $then (4 as $else | $else; . as $elif | . + $then * $elif) [ foreach .[] as $try (1 as $catch | $catch - 1; . + $try; .) ] [10,9,8,7] [10,19,27,34] + + +# { $__loc__ } works +{ a, $__loc__, c } +{"a":[1,2,3],"b":"foo","c":{"hi":"hey"}} +{"a":[1,2,3],"__loc__":{"file":"","line":1},"c":{"hi":"hey"}}