diff --git a/compile.c b/compile.c index 4aa2d211..02653ac7 100644 --- a/compile.c +++ b/compile.c @@ -675,15 +675,25 @@ block gen_collect(block expr) { gen_op_bound(LOADVN, array_var)); } -block gen_reduce(const char* varname, block source, block init, block body) { +static block bind_matcher(block matcher, block body) { + // cannot call block_bind(matcher, body) because that requires + // block_has_only_binders(matcher), which is not true here as matchers + // may also contain code to extract the correct elements + for (inst* i = matcher.first; i; i = i->next) { + if (i->op == STOREV && !i->bound_by) + block_bind_subblock(inst_block(i), body, OP_HAS_VARIABLE, 0); + } + return BLOCK(matcher, body); +} + +block gen_reduce(block source, block matcher, block init, block body) { block res_var = gen_op_var_fresh(STOREV, "reduce"); block loop = BLOCK(gen_op_simple(DUPN), source, - block_bind(gen_op_unbound(STOREV, varname), - BLOCK(gen_op_bound(LOADVN, res_var), - body, - gen_op_bound(STOREV, res_var)), - OP_HAS_VARIABLE), + bind_matcher(matcher, + BLOCK(gen_op_bound(LOADVN, res_var), + body, + gen_op_bound(STOREV, res_var))), gen_op_simple(BACKTRACK)); return BLOCK(gen_op_simple(DUP), init, @@ -693,37 +703,36 @@ block gen_reduce(const char* varname, block source, block init, block body) { gen_op_bound(LOADVN, res_var)); } -block gen_foreach(const char* varname, block source, block init, block update, block extract) { +block gen_foreach(block source, block matcher, block init, block update, block extract) { block output = gen_op_targetlater(JUMP); block state_var = gen_op_var_fresh(STOREV, "foreach"); block loop = BLOCK(gen_op_simple(DUPN), // get a value from the source expression: source, - // bind the $varname to that value for all the code in - // this block_bind() to see: - block_bind(gen_op_unbound(STOREV, varname), - // load the loop state variable - BLOCK(gen_op_bound(LOADVN, state_var), - // generate updated state - update, - // save the updated state for value extraction - gen_op_simple(DUP), - // save new state - gen_op_bound(STOREV, state_var), - // extract an output... - extract, - // ...and output it by jumping - // past the BACKTRACK that comes - // right after the loop body, - // which in turn is there - // because... - // - // (Incidentally, extract can also - // backtrack, e.g., if it calls - // empty, in which case we don't - // get here.) - output), - OP_HAS_VARIABLE)); + // destructure the value into variable(s) for all the code + // in the body to see + bind_matcher(matcher, + // load the loop state variable + BLOCK(gen_op_bound(LOADVN, state_var), + // generate updated state + update, + // save the updated state for value extraction + gen_op_simple(DUP), + // save new state + gen_op_bound(STOREV, state_var), + // extract an output... + extract, + // ...and output it by jumping + // past the BACKTRACK that comes + // right after the loop body, + // which in turn is there + // because... + // + // (Incidentally, extract can also + // backtrack, e.g., if it calls + // empty, in which case we don't + // get here.) + output))); block foreach = BLOCK(gen_op_simple(DUP), init, state_var, @@ -809,13 +818,39 @@ block gen_or(block a, block b) { } block gen_var_binding(block var, const char* name, block body) { + return gen_destructure(var, gen_op_unbound(STOREV, name), body); +} + +block gen_array_matcher(block left, block curr) { + int index; + if (block_is_noop(left)) + index = 0; + else { + // `left` was returned by this function, so the third inst is the + // constant containing the previously used index + assert(left.first->op == DUP); + assert(left.first->next->op == SUBEXP_BEGIN); + assert(left.first->next->next->op == LOADK); + index = 1 + (int) jv_number_value(left.first->next->next->imm.constant); + } + + // `left` goes at the end so that the const index is in a predictable place + return BLOCK(gen_op_simple(DUP), gen_subexp(gen_const(jv_number(index))), + gen_op_simple(INDEX), curr, left); +} + +block gen_object_matcher(block name, block curr) { + return BLOCK(gen_op_simple(DUP), gen_subexp(name), gen_op_simple(INDEX), + curr); +} + +block gen_destructure(block var, block matcher, block body) { // var bindings can be added after coding the program; leave the TOP first. block top = gen_noop(); if (body.first && body.first->op == TOP) top = inst_block(block_take(&body)); - return BLOCK(top, gen_op_simple(DUP), var, - block_bind(gen_op_unbound(STOREV, name), - body, OP_HAS_VARIABLE)); + + return BLOCK(top, gen_op_simple(DUP), var, bind_matcher(matcher, body)); } // Like gen_var_binding(), but bind `break`'s wildcard unbound variable diff --git a/compile.h b/compile.h index 45012847..b3a28230 100644 --- a/compile.h +++ b/compile.h @@ -41,14 +41,17 @@ block gen_subexp(block a); block gen_both(block a, block b); block gen_const_object(block expr); block gen_collect(block expr); -block gen_reduce(const char* varname, block source, block init, block body); -block gen_foreach(const char* varname, block source, block init, block update, block extract); +block gen_reduce(block source, block matcher, block init, block body); +block gen_foreach(block source, block matcher, block init, block update, block extract); block gen_definedor(block a, block b); block gen_condbranch(block iftrue, block iffalse); block gen_and(block a, block b); block gen_or(block a, block b); block gen_var_binding(block var, const char* name, block body); +block gen_array_matcher(block left, block curr); +block gen_object_matcher(block name, block curr); +block gen_destructure(block var, block matcher, block body); block gen_cond(block cond, block iftrue, block iffalse); block gen_try_handler(block handler); diff --git a/docs/content/3.manual/manual.yml b/docs/content/3.manual/manual.yml index 8028e47a..4e3d330c 100644 --- a/docs/content/3.manual/manual.yml +++ b/docs/content/3.manual/manual.yml @@ -2147,6 +2147,11 @@ sections: with `$x` set to that value. Thus `as` functions as something of a foreach loop. + Multiple variables may be declared using a single `as` expression by + providing a pattern that matches the structure of the input: + + . as {realnames: $names, posts: [$first, $second]} | ... + Variables are scoped over the rest of the expression that defines them, so @@ -2171,6 +2176,9 @@ sections: - program: '. as $i|[(.*2|. as $i| $i), $i]' input: '5' output: ['[10,5]'] + - program: '. as [$a, $b, {c: $c}] | $a + $b + $c' + input: '[2, 3, {c: 4, d: 5}]' + output: ['9'] - title: 'Defining Functions' body: | diff --git a/parser.c b/parser.c index 35cbe69f..63cbcb93 100644 --- a/parser.c +++ b/parser.c @@ -650,16 +650,16 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 27 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 1830 +#define YYLAST 1986 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 65 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 22 +#define YYNNTS 26 /* YYNRULES -- Number of rules. */ -#define YYNRULES 140 +#define YYNRULES 151 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 275 +#define YYNSTATES 300 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned by yylex, with out-of-bounds checking. */ @@ -676,8 +676,8 @@ static const yytype_uint8 yytranslate[] = 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 56, 53, 2, 2, - 57, 58, 51, 49, 45, 50, 60, 52, 2, 2, + 2, 2, 2, 2, 2, 2, 58, 53, 2, 2, + 56, 57, 51, 49, 45, 50, 60, 52, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 59, 55, 47, 46, 48, 54, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -710,20 +710,21 @@ static const yytype_uint8 yytranslate[] = static const yytype_uint16 yyrline[] = { 0, 270, 270, 273, 278, 281, 291, 294, 299, 302, - 307, 311, 316, 321, 326, 331, 334, 339, 343, 347, - 352, 364, 368, 372, 376, 380, 384, 388, 392, 396, - 400, 404, 408, 412, 416, 420, 424, 428, 432, 436, - 440, 444, 448, 452, 456, 460, 464, 468, 473, 482, - 489, 501, 515, 520, 526, 529, 534, 539, 546, 546, - 550, 550, 557, 560, 563, 569, 572, 577, 580, 583, - 589, 592, 595, 603, 607, 610, 613, 616, 619, 622, - 625, 628, 631, 635, 641, 644, 647, 650, 653, 656, - 659, 662, 665, 668, 671, 674, 677, 680, 683, 686, - 689, 696, 700, 704, 716, 721, 722, 723, 724, 727, - 730, 735, 740, 743, 746, 749, 752, 755, 758, 761, - 764, 767, 770, 773, 776, 779, 782, 785, 788, 791, - 796, 799, 800, 801, 804, 807, 810, 813, 817, 821, - 824 + 307, 311, 315, 319, 323, 327, 330, 335, 339, 343, + 348, 360, 364, 368, 372, 376, 380, 384, 388, 392, + 396, 400, 404, 408, 412, 416, 420, 424, 428, 432, + 436, 440, 444, 448, 452, 456, 460, 464, 469, 478, + 485, 497, 511, 516, 522, 525, 530, 535, 542, 542, + 546, 546, 553, 556, 559, 565, 568, 573, 576, 579, + 585, 588, 591, 599, 603, 606, 609, 612, 615, 618, + 621, 624, 627, 631, 637, 640, 643, 646, 649, 652, + 655, 658, 661, 664, 667, 670, 673, 676, 679, 682, + 685, 692, 696, 700, 712, 717, 718, 719, 720, 723, + 726, 731, 736, 740, 743, 748, 751, 756, 759, 764, + 767, 770, 773, 778, 781, 784, 787, 790, 793, 796, + 799, 802, 805, 808, 811, 814, 817, 820, 823, 826, + 829, 834, 837, 838, 839, 842, 845, 848, 851, 855, + 859, 862 }; #endif @@ -741,11 +742,11 @@ static const char *const yytname[] = "\"//=\"", "\"<=\"", "\">=\"", "QQSTRING_START", "QQSTRING_TEXT", "QQSTRING_INTERP_START", "QQSTRING_INTERP_END", "QQSTRING_END", "'|'", "','", "'='", "'<'", "'>'", "'+'", "'-'", "'*'", "'/'", "'%'", "'?'", - "';'", "'$'", "'('", "')'", "':'", "'.'", "'['", "']'", "'{'", "'}'", + "';'", "'('", "')'", "'$'", "':'", "'.'", "'['", "']'", "'{'", "'}'", "$accept", "TopLevel", "Module", "Imports", "FuncDefs", "Exp", "Import", "FuncDef", "Params", "Param", "String", "@1", "@2", "QQString", - "ElseBody", "ExpD", "Term", "Args", "Arg", "Keyword", "MkDict", - "MkDictPair", YY_NULLPTR + "ElseBody", "ExpD", "Term", "Args", "Arg", "Pattern", "ArrayPats", + "ObjPats", "ObjPat", "Keyword", "MkDict", "MkDictPair", YY_NULLPTR }; #endif @@ -759,53 +760,55 @@ static const yytype_uint16 yytoknum[] = 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 124, 44, 61, 60, 62, 43, - 45, 42, 47, 37, 63, 59, 36, 40, 41, 58, + 45, 42, 47, 37, 63, 59, 40, 41, 36, 58, 46, 91, 93, 123, 125 }; # endif -#define YYPACT_NINF -111 +#define YYPACT_NINF -171 #define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-111))) + (!!((Yystate) == (-171))) -#define YYTABLE_NINF -131 +#define YYTABLE_NINF -142 #define yytable_value_is_error(Yytable_value) \ - (!!((Yytable_value) == (-131))) + (!!((Yytable_value) == (-142))) /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ static const yytype_int16 yypact[] = { - -11, 775, 40, 27, -7, 7, -111, 15, -111, 51, - 775, 610, 610, 775, 3, 0, -111, 775, 23, 456, - 249, 393, 311, 1167, 775, -111, -3, -111, -4, 775, - 27, 775, -111, -111, -10, 1542, 6, 9, 37, 61, - -111, 64, -111, -15, -111, -111, 13, 1043, -111, 71, - 15, 19, 16, -111, 855, -32, 18, -111, -111, -111, - -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, - -111, -111, -111, -111, -111, 482, 44, 46, 11, 62, - 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, - 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, - 775, 775, 775, 775, -111, -111, 1696, 56, 55, -4, - 144, 99, -111, 1696, 775, -111, 1696, -29, -111, -111, - 4, 775, 543, 57, 58, 569, 72, -111, 1, -111, - -111, -111, -111, -111, -111, 363, -111, 695, 59, 1074, - 695, 695, -111, 363, 1758, 306, 306, 1727, 1776, 1012, - 1758, 1758, 1758, 1758, 1758, 1758, 306, 306, 1696, 1727, - 1758, 306, 306, -15, -15, 65, 65, 65, -111, 111, - 68, 63, 775, 69, 809, 20, -111, 775, -111, 5, - -111, 114, -24, -111, 1214, -111, 1496, 122, 123, -111, - -111, 775, -111, 775, -111, 83, -111, 695, 85, 2, - 73, 74, 85, 85, -111, 92, -111, -111, 901, -111, - 629, 88, 655, 133, -111, -111, -111, 4, 84, -111, - 775, 775, -111, 87, 89, 1696, 1573, -111, 695, 695, - 695, 775, 93, 100, 947, -111, -111, 1261, 715, -111, - 775, 1619, 1665, 775, 775, -111, 85, 85, 85, 1696, - -111, -111, 101, -111, -111, 1308, 1355, -111, 775, 1402, - 1449, -111, -111, -111, 1496, 775, 775, -111, 1105, 993, - -111, 775, -111, 1136, -111 + 19, 862, 41, 28, 48, -2, -171, 25, -171, 53, + 862, 152, 152, 862, 56, 1, -171, 862, 508, 21, + 267, 482, 329, 1323, 862, -171, 6, -171, 3, 862, + 28, 862, -171, -171, -20, 1698, 8, 10, 81, 73, + -171, 111, -171, 9, 59, 1168, -171, -171, -171, 116, + 25, 64, 57, -171, 950, -31, 63, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, 569, 67, 69, 65, 86, + 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, + 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, + 862, 862, 862, 862, -171, -171, 1852, 78, -23, 3, + 419, 121, -171, 1852, 862, -171, 1852, -12, -171, -171, + 18, 862, 595, -23, -23, 656, 91, -171, 13, -171, + -171, -171, -171, -171, -171, 382, -171, 144, 83, 1199, + 144, 144, -171, 382, 1914, 324, 324, 1883, 1088, 1932, + 1914, 1914, 1914, 1914, 1914, 1914, 324, 324, 1852, 1883, + 1914, 324, 324, 9, 9, 84, 84, 84, -171, 137, + -23, 1093, 98, 89, 82, 862, 92, 904, 54, -171, + 862, -171, 32, -171, 141, -8, -171, 1370, -171, 1652, + 97, 99, -171, -171, 862, -171, 862, -171, 109, -171, + 144, 117, 50, 103, 104, 117, 117, -171, -171, -171, + -14, 105, 862, 106, -18, -171, 108, 862, -171, -171, + 996, -171, 682, 114, 742, 165, -171, -171, -171, 18, + 112, -171, 862, 862, -171, 862, 862, 1852, 1729, -171, + 144, 144, 144, -23, -171, -23, 1230, -23, 1093, -171, + -23, 1852, 118, 122, 1042, -171, -171, 1417, 802, -171, + 862, 1775, 1821, 1464, 1511, -171, 117, 117, 117, -171, + -171, 119, -171, -171, -171, -171, -171, 123, -171, -171, + 1558, 1605, -171, 862, 862, 862, -23, -171, -171, -171, + 1652, 1261, 1119, -171, -171, -171, 862, -171, 1292, -171 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -817,10 +820,10 @@ static const yytype_uint8 yydefact[] = 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 95, 47, 1, 0, 8, 6, 0, 75, 60, 0, 0, 0, 0, 18, 0, - 73, 0, 62, 32, 102, 101, 0, 0, 82, 0, - 0, 81, 0, 99, 0, 0, 138, 112, 113, 114, - 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, - 125, 126, 127, 128, 129, 0, 137, 0, 0, 131, + 73, 0, 62, 32, 0, 0, 102, 101, 82, 0, + 0, 81, 0, 99, 0, 0, 149, 123, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 138, 139, 140, 0, 148, 0, 0, 142, 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, 78, 0, 0, @@ -830,33 +833,35 @@ static const yytype_uint8 yydefact[] = 0, 0, 100, 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, 74, 0, - 80, 0, 0, 87, 0, 0, 9, 0, 104, 0, - 57, 0, 0, 54, 0, 16, 0, 0, 0, 19, - 17, 0, 63, 0, 59, 0, 133, 0, 134, 69, - 0, 0, 136, 135, 132, 0, 76, 107, 0, 86, - 0, 85, 0, 0, 110, 61, 56, 0, 0, 52, - 0, 0, 15, 0, 0, 20, 0, 68, 0, 0, - 0, 0, 93, 92, 0, 84, 49, 0, 0, 55, - 0, 0, 0, 0, 0, 64, 67, 140, 139, 11, - 90, 89, 91, 50, 48, 0, 0, 66, 0, 0, - 0, 88, 51, 53, 0, 0, 0, 65, 0, 0, - 12, 0, 14, 0, 13 + 0, 0, 0, 80, 0, 0, 87, 0, 0, 9, + 0, 104, 0, 57, 0, 0, 54, 0, 16, 0, + 0, 0, 19, 17, 0, 63, 0, 59, 0, 144, + 0, 145, 69, 0, 0, 147, 146, 143, 112, 115, + 0, 0, 0, 0, 0, 117, 0, 0, 76, 107, + 0, 86, 0, 85, 0, 0, 110, 61, 56, 0, + 0, 52, 0, 0, 15, 0, 0, 20, 0, 68, + 0, 0, 0, 0, 113, 0, 0, 0, 0, 114, + 0, 11, 93, 92, 0, 84, 49, 0, 0, 55, + 0, 0, 0, 0, 0, 64, 67, 151, 150, 116, + 119, 0, 121, 118, 120, 90, 89, 91, 50, 48, + 0, 0, 66, 0, 0, 0, 0, 88, 51, 53, + 0, 0, 0, 122, 65, 12, 0, 14, 0, 13 }; /* YYPGOTO[NTERM-NUM]. */ -static const yytype_int8 yypgoto[] = +static const yytype_int16 yypgoto[] = { - -111, -111, -111, 126, 39, -1, -111, -8, -111, -60, - -5, -111, -111, 41, -105, -89, -6, -111, -14, -111, - -110, -111 + -171, -171, -171, 140, 66, -1, -171, -11, -171, -47, + 4, -171, -171, 68, -105, -135, -4, -171, 12, -120, + -171, -171, -64, -170, -106, -171 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 2, 3, 29, 112, 106, 30, 24, 182, 183, - 25, 42, 119, 128, 222, 198, 26, 117, 118, 77, - 78, 79 + -1, 2, 3, 29, 112, 106, 30, 24, 185, 186, + 25, 42, 119, 128, 234, 201, 26, 117, 118, 172, + 210, 214, 215, 77, 78, 79 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -864,314 +869,354 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { - 23, 40, 107, 50, 1, 36, 37, 107, 180, 35, - 108, 107, 38, 135, 107, 51, 43, 76, 47, 123, - 54, 114, 124, 111, 212, 196, 177, 44, 113, 178, - 116, 217, 136, 204, 218, 16, 101, 102, 103, 104, - 27, 192, 193, 28, 194, 192, 193, 120, 215, 121, - 31, 202, 203, 45, 33, 34, 41, 109, 110, 39, - 181, 32, 109, 110, 125, 126, 109, 110, 127, 109, - 110, 129, 131, 132, 139, 142, 213, 137, 133, 144, + 23, 216, 40, 190, 191, 205, 206, 36, 37, 35, + 50, 107, 38, 107, 135, 107, 43, 45, 114, 108, + 54, 123, 183, 124, 51, 46, 76, 248, 113, 199, + 116, 243, 111, 136, 1, 169, 120, 207, 170, 121, + 171, 27, 16, 180, 28, 181, 249, 229, 244, 230, + 209, 47, 32, 195, 196, 107, 197, 34, 224, 41, + 101, 102, 103, 104, 33, 239, 109, 110, 109, 110, + 109, 110, 195, 196, 139, 227, 184, 126, 216, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, - 165, 166, 167, 140, 170, 141, 114, 143, 227, 174, - 168, 169, 175, 187, 188, 205, 191, 200, 216, 104, - 184, 186, 206, 209, 190, 207, 223, 224, 135, 228, - 76, 199, 229, 230, 199, 199, 231, 238, 76, 246, - 247, 248, 235, 240, 243, 171, 244, 250, 4, 5, - 6, 7, 8, 176, 251, 261, 115, 239, 9, 267, - 179, 10, 0, 214, 0, 11, 12, 0, 0, 0, - 13, 208, 14, 15, 0, 0, 116, 0, 0, 0, - 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, - 225, 199, 226, 0, 17, 0, 0, 0, 0, 0, - 18, 19, 0, 172, 20, 21, 173, 22, 0, 234, - 0, 237, 0, 0, 0, 0, 0, 0, 0, 241, - 242, 0, 199, 199, 199, 0, 0, 0, 0, 0, - 249, 0, 0, 0, 0, 0, 0, 255, 0, 256, - 0, 0, 259, 260, 0, 0, 0, 0, 0, -70, - 48, 0, 0, 49, -70, 0, 50, 264, -70, -70, - -70, -70, -70, 0, 268, 269, 0, -70, -70, -70, - 273, 0, -70, -70, -70, 0, -70, 0, 0, 0, - -70, -70, -70, -70, -70, -70, -70, -70, 16, 0, - 0, -70, 0, -70, -70, -70, -70, -70, -70, -70, - -70, -70, -70, -70, -70, 0, 0, -70, -70, -70, - -70, -70, 55, -70, 0, 56, -131, -131, 50, 0, - 0, 0, 0, 0, 57, 58, 59, 60, 61, 62, - 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, - 73, 74, 0, -131, -131, 0, 0, 0, 0, 0, - 16, 0, 0, -131, -131, 99, 100, 101, 102, 103, - 104, 0, 0, 0, 195, 0, 0, 56, 75, 0, - 50, 0, 0, 0, 0, -130, 57, 58, 59, 60, - 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, - 71, 72, 73, 74, 52, 0, 0, 4, 5, 6, - 7, 8, 16, 0, 0, 0, 0, 9, 0, 0, - 10, 0, 0, 0, 11, 12, 0, 0, 0, 13, - 75, 14, 15, 0, 0, 0, 0, -130, 0, 0, - 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 17, 0, 0, 0, 0, 0, 18, - 19, 0, 0, 20, 21, 53, 22, 46, 0, 0, + 165, 166, 167, 114, 31, 266, 267, 268, 125, 177, + 109, 110, 225, 173, 39, 127, 129, 131, 132, 133, + 187, 189, 137, 269, 193, 270, 140, 272, 141, 142, + 274, 143, 168, 202, 178, 194, 202, 202, 104, 76, + 203, 208, 217, 218, 219, 228, 221, 76, 4, 5, + 6, 7, 8, 235, 135, 236, 4, 5, 6, 7, + 8, 240, 241, 242, 245, 247, 293, 250, 255, 258, + 115, 260, 275, 15, 220, 213, 276, 287, 286, 116, + 179, 15, 259, 16, 273, 294, 0, 182, 0, 0, + 0, 16, 226, 237, 200, 238, 202, 0, 0, 0, + 18, 0, 19, 0, 20, 21, 0, 22, 18, 0, + 19, 246, 20, 21, 0, 22, 251, 0, 0, 0, + 0, 254, 0, 257, 0, 0, 0, 0, 0, 0, + 0, 261, 262, 0, 263, 264, 202, 202, 202, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 213, 0, 0, 0, 0, 280, 0, 281, + 0, 0, 0, 0, 0, 0, 0, -70, 48, 0, + 0, 49, -70, 0, 50, 0, -70, -70, -70, -70, + -70, 0, 290, 291, 292, -70, -70, -70, 0, 0, + -70, -70, -70, 0, -70, 298, 0, 0, -70, -70, + -70, -70, -70, -70, -70, -70, 16, 0, 0, -70, + 0, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, 0, -70, 0, -70, -70, -70, -70, + 55, -70, 0, 56, -142, -142, 50, 0, 0, 0, + 0, 0, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 0, -142, -142, 0, 0, 0, 0, 0, 16, 0, + 0, -142, -142, 99, 100, 101, 102, 103, 104, 0, + 0, 0, 0, 198, 0, 75, 56, 0, 0, 50, + 0, 0, 0, -141, 0, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 0, 0, 0, 0, 0, 0, 0, + 174, 16, 0, 4, 5, 6, 7, 8, 0, 0, + 0, 0, 0, 9, 0, 0, 10, 0, 75, 0, + 11, 12, 0, 0, 0, 13, -141, 14, 15, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, + 0, 0, 0, 0, 0, 18, 0, 19, 175, 20, + 21, 176, 22, 52, 0, 0, 4, 5, 6, 7, + 8, 0, 0, 0, 0, 0, 9, 0, 0, 10, + 0, 0, 0, 11, 12, 0, 0, 0, 13, 44, + 14, 15, 4, 5, 6, 7, 8, 0, 0, 0, + 0, 16, 9, 0, 0, 10, 0, 0, 0, 11, + 12, 0, 17, 0, 13, 0, 14, 15, 18, 0, + 19, 0, 20, 21, 53, 22, 0, 16, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, + 0, 0, 0, 0, 18, 0, 19, 0, 20, 21, + 138, 22, 0, 4, 5, 6, 7, 8, 0, 0, + 0, 0, 0, 9, 0, 0, 10, 0, 0, 0, + 11, 12, 0, 0, 0, 13, 188, 14, 15, 4, + 5, 6, 7, 8, 0, 0, 0, 0, 16, 9, + 0, 0, 10, 0, 0, 0, 11, 12, 0, 17, + 0, 13, 0, 14, 15, 18, 0, 19, 0, 20, + 21, 0, 22, 0, 16, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, + 0, 18, 0, 19, 0, 20, 21, 192, 22, 0, 4, 5, 6, 7, 8, 0, 0, 0, 0, 0, 9, 0, 0, 10, 0, 0, 0, 11, 12, 0, - 0, 0, 13, 138, 14, 15, 4, 5, 6, 7, + 0, 0, 13, 0, 14, 15, 4, 5, 6, 7, 8, 0, 0, 0, 0, 16, 9, 0, 0, 10, 0, 0, 0, 11, 12, 0, 17, 0, 13, 0, - 14, 15, 18, 19, 0, 0, 20, 21, 0, 22, + 14, 15, 18, 0, 19, 0, 20, 21, 0, 22, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 17, 0, 0, 0, 0, 0, 18, 19, - 0, 0, 20, 21, 185, 22, 0, 4, 5, 6, - 7, 8, 0, 0, 0, 0, 0, 9, 0, 0, - 10, 0, 0, 0, 11, 12, 0, 0, 0, 13, - 189, 14, 15, 4, 5, 6, 7, 8, 0, 0, - 0, 0, 16, 9, 0, 0, 10, 0, 0, 0, - 11, 12, 0, 17, 0, 13, 0, 14, 15, 18, - 19, 0, 0, 20, 21, 0, 22, 0, 16, 0, - 0, 0, 0, 0, 4, 5, 6, 7, 8, 17, - 0, 0, 0, 0, 0, 18, 19, 0, 0, 20, - 21, 0, 22, 4, 5, 6, 7, 8, 0, 15, - 0, 0, 0, 9, 0, 0, 10, 0, 0, 16, - 11, 12, 0, 0, 0, 13, 0, 14, 15, 4, - 5, 6, 7, 8, 0, 0, 18, 19, 16, 9, - 20, 21, 10, 22, 0, 0, 11, 12, 0, 17, - 0, 13, 0, 14, 15, 18, 19, 0, 0, 20, - 21, 233, 22, 0, 16, 0, 0, 0, 0, 4, - 5, 6, 7, 8, 0, 17, 0, 0, 0, 0, - 236, 18, 19, 0, 0, 20, 21, 0, 22, 4, - 5, 6, 7, 8, 15, 0, 0, 0, 0, 9, - 0, 0, 10, 0, 16, 0, 11, 12, 0, 0, - 0, 13, 0, 14, 15, 197, 0, 0, 0, 0, - 0, 18, 19, 0, 16, 20, 21, 0, 22, 0, - 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, - 254, 18, 19, 0, 0, 20, 21, 0, 22, 4, - 5, 6, 7, 8, 0, 0, 0, 0, 0, 9, - 0, 0, 10, 0, 0, 0, 11, 12, 0, 0, - 0, 13, 0, 14, 15, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 16, 0, 0, 0, 80, 81, - 82, 83, 0, 0, 0, 17, 0, 0, 0, 0, - 0, 18, 19, 84, 85, 20, 21, 0, 22, 0, + 0, 0, 17, 0, 0, 0, 0, 0, 18, 0, + 19, 0, 20, 21, 253, 22, 4, 5, 6, 7, + 8, 0, 0, 0, 0, 0, 9, 0, 0, 10, + 0, 0, 0, 11, 12, 0, 0, 0, 13, 0, + 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 17, 0, 0, 0, 0, 256, 18, 0, + 19, 0, 20, 21, 0, 22, 4, 5, 6, 7, + 8, 0, 0, 0, 0, 0, 9, 0, 0, 10, + 0, 0, 0, 11, 12, 0, 0, 0, 13, 0, + 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 17, 0, 0, 0, 0, 279, 18, 0, + 19, 0, 20, 21, 0, 22, 4, 5, 6, 7, + 8, 0, 0, 0, 0, 0, 9, 0, 0, 10, + 0, 0, 0, 11, 12, 0, 0, 0, 13, 0, + 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 17, 80, 81, 82, 83, 0, 18, 0, + 19, 0, 20, 21, 0, 22, 0, 0, 84, 85, + 0, 0, 0, 0, 0, 86, 87, 88, 89, 90, + 91, 92, 93, 0, 0, 0, 0, 0, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 80, + 81, 82, 83, 222, 0, 0, 223, 0, 0, 0, + 0, 0, 0, 0, 84, 85, 0, 0, 0, 0, + 0, 86, 87, 88, 89, 90, 91, 92, 93, 0, + 0, 0, 0, 0, 94, 95, 96, 97, 98, 99, + 100, 101, 102, 103, 104, 80, 81, 82, 83, 0, + 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, + 84, 85, 0, 0, 0, 0, 0, 86, 87, 88, + 89, 90, 91, 92, 93, 0, 0, 0, 0, 0, + 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, + 104, 80, 81, 82, 83, 0, 0, 0, 252, 0, + 0, 0, 0, 0, 0, 0, 84, 85, 0, 0, + 0, 0, 0, 86, 87, 88, 89, 90, 91, 92, + 93, 0, 0, 0, 0, 0, 94, 95, 96, 97, + 98, 99, 100, 101, 102, 103, 104, 211, 81, 82, + 50, 0, 0, 0, 277, 0, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 0, 92, 93, 0, 80, 81, + 82, 83, 16, 0, 0, 97, 98, 99, 100, 101, + 102, 103, 104, 84, 85, 0, 0, 0, 0, 212, 86, 87, 88, 89, 90, 91, 92, 93, 0, 0, 0, 0, 0, 94, 95, 96, 97, 98, 99, 100, - 101, 102, 103, 104, 80, 81, 82, 83, 210, 0, - 0, 211, 0, 0, 0, 0, 0, 0, 0, 84, - 85, 0, 0, 0, 0, 0, 86, 87, 88, 89, - 90, 91, 92, 93, 0, 0, 0, 0, 0, 94, - 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, - 80, 81, 82, 83, 0, 0, 0, 134, 0, 0, - 0, 0, 0, 0, 0, 84, 85, 0, 0, 0, + 101, 102, 103, 104, 296, 0, 297, 80, 81, 82, + 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 84, 85, 0, 0, 0, 0, 0, 86, + 87, 88, 89, 90, 91, 92, 93, 0, 80, 81, + 82, 83, 94, 95, 96, 97, 98, 99, 100, 101, + 102, 103, 104, 84, 85, 130, 0, 0, 0, 0, + 86, 87, 88, 89, 90, 91, 92, 93, 0, 80, + 81, 82, 83, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 84, 85, 204, 0, 0, 0, + 0, 86, 87, 88, 89, 90, 91, 92, 93, 0, + 80, 81, 82, 83, 94, 95, 96, 97, 98, 99, + 100, 101, 102, 103, 104, 84, 85, 271, 0, 0, 0, 0, 86, 87, 88, 89, 90, 91, 92, 93, - 0, 0, 0, 0, 0, 94, 95, 96, 97, 98, - 99, 100, 101, 102, 103, 104, 80, 81, 82, 83, - 0, 0, 0, 232, 0, 0, 0, 0, 0, 0, + 0, 80, 81, 82, 83, 94, 95, 96, 97, 98, + 99, 100, 101, 102, 103, 104, 84, 85, 295, 0, + 0, 0, 0, 86, 87, 88, 89, 90, 91, 92, + 93, 0, 80, 81, 82, 83, 94, 95, 96, 97, + 98, 99, 100, 101, 102, 103, 104, 84, 85, 299, + 0, 0, 0, 0, 86, 87, 88, 89, 90, 91, + 92, 93, 0, 0, 0, 0, 0, 94, 95, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 105, 80, + 81, 82, 83, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 84, 85, 0, 0, 0, 0, + 0, 86, 87, 88, 89, 90, 91, 92, 93, 0, + 0, 0, 0, 0, 94, 95, 96, 97, 98, 99, + 100, 101, 102, 103, 104, 231, 80, 81, 82, 83, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 85, 0, 0, 0, 0, 0, 86, 87, 88, 89, 90, 91, 92, 93, 0, 0, 0, 0, 0, 94, 95, 96, 97, 98, 99, 100, 101, 102, - 103, 104, 80, 81, 82, 83, 0, 0, 0, 252, - 0, 0, 0, 0, 0, 0, 0, 84, 85, 0, - 0, 0, 81, 82, 86, 87, 88, 89, 90, 91, - 92, 93, 0, 0, 0, 0, 84, 94, 95, 96, - 97, 98, 99, 100, 101, 102, 103, 104, 271, 92, - 93, 272, 80, 81, 82, 83, 0, 0, 0, 97, - 98, 99, 100, 101, 102, 103, 104, 84, 85, 0, - 0, 0, 0, 0, 86, 87, 88, 89, 90, 91, - 92, 93, 0, 80, 81, 82, 83, 94, 95, 96, - 97, 98, 99, 100, 101, 102, 103, 104, 84, 85, - 0, 130, 0, 0, 0, 86, 87, 88, 89, 90, - 91, 92, 93, 0, 80, 81, 82, 83, 94, 95, - 96, 97, 98, 99, 100, 101, 102, 103, 104, 84, - 85, 0, 201, 0, 0, 0, 86, 87, 88, 89, - 90, 91, 92, 93, 0, 80, 81, 82, 83, 94, - 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, - 84, 85, 0, 270, 0, 0, 0, 86, 87, 88, - 89, 90, 91, 92, 93, 0, 80, 81, 82, 83, - 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, - 104, 84, 85, 0, 274, 0, 0, 0, 86, 87, - 88, 89, 90, 91, 92, 93, 0, 0, 0, 0, - 0, 94, 95, 96, 97, 98, 99, 100, 101, 102, - 103, 104, 105, 80, 81, 82, 83, 0, 0, 0, + 103, 104, 278, 80, 81, 82, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 85, 0, 0, 0, 0, 0, 86, 87, 88, 89, 90, 91, 92, 93, 0, 0, 0, 0, 0, 94, 95, - 96, 97, 98, 99, 100, 101, 102, 103, 104, 219, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 284, 80, 81, 82, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 85, 0, 0, 0, 0, 0, 86, 87, 88, 89, 90, 91, 92, 93, 0, 0, 0, 0, 0, 94, 95, 96, 97, 98, - 99, 100, 101, 102, 103, 104, 253, 80, 81, 82, + 99, 100, 101, 102, 103, 104, 285, 80, 81, 82, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 85, 0, 0, 0, 0, 0, 86, 87, 88, 89, 90, 91, 92, 93, 0, 0, 0, 0, 0, 94, 95, 96, 97, 98, 99, 100, 101, - 102, 103, 104, 262, 80, 81, 82, 83, 0, 0, + 102, 103, 104, 288, 80, 81, 82, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 85, 0, 0, 0, 0, 0, 86, 87, 88, 89, 90, 91, 92, 93, 0, 0, 0, 0, 0, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, - 263, 80, 81, 82, 83, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 84, 85, 0, 0, + 289, 80, 81, 82, 83, 0, 0, 0, 0, 0, + 0, 232, 233, 0, 0, 0, 84, 85, 0, 0, 0, 0, 0, 86, 87, 88, 89, 90, 91, 92, 93, 0, 0, 0, 0, 0, 94, 95, 96, 97, - 98, 99, 100, 101, 102, 103, 104, 265, 80, 81, - 82, 83, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 84, 85, 0, 0, 0, 0, 0, + 98, 99, 100, 101, 102, 103, 104, 80, 81, 82, + 83, 0, 0, 0, 0, 0, 122, 0, 0, 0, + 0, 0, 84, 85, 0, 0, 0, 0, 0, 86, + 87, 88, 89, 90, 91, 92, 93, 0, 80, 81, + 82, 83, 94, 95, 96, 97, 98, 99, 100, 101, + 102, 103, 104, 84, 85, 0, 0, 0, 0, 0, 86, 87, 88, 89, 90, 91, 92, 93, 0, 0, - 0, 0, 0, 94, 95, 96, 97, 98, 99, 100, - 101, 102, 103, 104, 266, 80, 81, 82, 83, 0, - 0, 0, 0, 0, 0, 220, 221, 0, 0, 0, - 84, 85, 0, 0, 0, 0, 0, 86, 87, 88, - 89, 90, 91, 92, 93, 0, 0, 0, 0, 0, - 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, - 104, 80, 81, 82, 83, 0, 0, 0, 0, 0, - 122, 0, 0, 0, 0, 0, 84, 85, 0, 0, + 0, 265, 0, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 80, 81, 82, 83, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 282, 84, + 85, 0, 0, 0, 0, 0, 86, 87, 88, 89, + 90, 91, 92, 93, 0, 0, 0, 0, 0, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 80, 81, 82, 83, 0, 0, 0, 0, 0, 283, + 0, 0, 0, 0, 0, 84, 85, 0, 0, 0, + 0, 0, 86, 87, 88, 89, 90, 91, 92, 93, + 0, 80, 81, 82, 83, 94, 95, 96, 97, 98, + 99, 100, 101, 102, 103, 104, 84, 85, 0, 0, 0, 0, 0, 86, 87, 88, 89, 90, 91, 92, 93, 0, 80, 81, 82, 83, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 84, 85, 0, 0, 0, 0, 0, 86, 87, 88, 89, 90, 91, - 92, 93, 0, 0, 0, 245, 0, 94, 95, 96, - 97, 98, 99, 100, 101, 102, 103, 104, 80, 81, - 82, 83, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 257, 84, 85, 0, 0, 0, 0, 0, - 86, 87, 88, 89, 90, 91, 92, 93, 0, 0, - 0, 0, 0, 94, 95, 96, 97, 98, 99, 100, - 101, 102, 103, 104, 80, 81, 82, 83, 0, 0, - 0, 0, 0, 258, 0, 0, 0, 0, 0, 84, - 85, 0, 0, 0, 0, 0, 86, 87, 88, 89, - 90, 91, 92, 93, 0, 80, 81, 82, 83, 94, - 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, - 84, 85, 0, 0, 0, 0, 0, 86, 87, 88, - 89, 90, 91, 92, 93, 0, 80, 81, 82, 83, - 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, - 104, 84, 85, 0, 0, 0, 0, 0, 86, 87, - 88, 89, 90, 91, 92, 93, 0, -131, 81, 82, - 0, 0, 0, 96, 97, 98, 99, 100, 101, 102, - 103, 104, 84, 85, 0, 0, 81, 82, 0, -131, - -131, -131, -131, -131, -131, 92, 93, 0, 0, 0, - 0, 0, 0, 0, -131, 97, 98, 99, 100, 101, - 102, 103, 104, 92, 93, 0, 0, 0, 0, 0, - 0, 0, 0, 97, 98, 99, 100, 101, 102, 103, - 104 + 92, 93, 0, -142, 81, 82, 0, 0, 0, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 84, 85, + 0, 0, 81, 82, 0, -142, -142, -142, -142, -142, + -142, 92, 93, 0, 0, 0, 84, 0, 0, 0, + -142, 97, 98, 99, 100, 101, 102, 103, 104, 92, + 93, 0, 0, 0, 0, 0, 0, 0, 0, 97, + 98, 99, 100, 101, 102, 103, 104 }; static const yytype_int16 yycheck[] = { - 1, 1, 5, 7, 15, 11, 12, 5, 4, 10, - 13, 5, 13, 45, 5, 20, 17, 22, 19, 13, - 21, 29, 13, 28, 4, 135, 55, 4, 29, 58, - 31, 55, 64, 143, 58, 39, 51, 52, 53, 54, - 0, 40, 41, 16, 43, 40, 41, 57, 43, 59, - 57, 140, 141, 30, 39, 4, 56, 60, 61, 56, - 56, 54, 60, 61, 27, 4, 60, 61, 4, 60, - 61, 58, 1, 54, 75, 64, 56, 59, 62, 80, + 1, 171, 1, 123, 124, 140, 141, 11, 12, 10, + 7, 5, 13, 5, 45, 5, 17, 18, 29, 13, + 21, 13, 4, 13, 20, 4, 22, 45, 29, 135, + 31, 45, 28, 64, 15, 58, 56, 143, 61, 59, + 63, 0, 39, 55, 16, 57, 64, 55, 62, 57, + 170, 30, 54, 40, 41, 5, 43, 4, 4, 58, + 51, 52, 53, 54, 39, 200, 60, 61, 60, 61, + 60, 61, 40, 41, 75, 43, 58, 4, 248, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, - 101, 102, 103, 59, 109, 59, 114, 45, 197, 110, - 54, 56, 13, 56, 56, 4, 44, 58, 4, 54, - 121, 122, 54, 54, 125, 62, 4, 4, 45, 44, - 135, 137, 59, 59, 140, 141, 44, 4, 143, 228, - 229, 230, 54, 59, 57, 1, 57, 54, 4, 5, - 6, 7, 8, 114, 54, 54, 30, 217, 14, 264, - 119, 17, -1, 177, -1, 21, 22, -1, -1, -1, - 26, 172, 28, 29, -1, -1, 177, -1, -1, -1, - -1, -1, -1, 39, -1, -1, -1, -1, -1, -1, - 191, 197, 193, -1, 50, -1, -1, -1, -1, -1, - 56, 57, -1, 59, 60, 61, 62, 63, -1, 210, - -1, 212, -1, -1, -1, -1, -1, -1, -1, 220, - 221, -1, 228, 229, 230, -1, -1, -1, -1, -1, - 231, -1, -1, -1, -1, -1, -1, 238, -1, 240, - -1, -1, 243, 244, -1, -1, -1, -1, -1, 0, - 1, -1, -1, 4, 5, -1, 7, 258, 9, 10, - 11, 12, 13, -1, 265, 266, -1, 18, 19, 20, - 271, -1, 23, 24, 25, -1, 27, -1, -1, -1, - 31, 32, 33, 34, 35, 36, 37, 38, 39, -1, - -1, 42, -1, 44, 45, 46, 47, 48, 49, 50, - 51, 52, 53, 54, 55, -1, -1, 58, 59, 60, - 61, 62, 1, 64, -1, 4, 10, 11, 7, -1, - -1, -1, -1, -1, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, - 29, 30, -1, 37, 38, -1, -1, -1, -1, -1, - 39, -1, -1, 47, 48, 49, 50, 51, 52, 53, - 54, -1, -1, -1, 1, -1, -1, 4, 57, -1, - 7, -1, -1, -1, -1, 64, 13, 14, 15, 16, - 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 1, -1, -1, 4, 5, 6, - 7, 8, 39, -1, -1, -1, -1, 14, -1, -1, - 17, -1, -1, -1, 21, 22, -1, -1, -1, 26, - 57, 28, 29, -1, -1, -1, -1, 64, -1, -1, - -1, -1, 39, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 50, -1, -1, -1, -1, -1, 56, - 57, -1, -1, 60, 61, 62, 63, 1, -1, -1, + 101, 102, 103, 114, 56, 240, 241, 242, 27, 110, + 60, 61, 58, 109, 58, 4, 57, 1, 54, 62, + 121, 122, 59, 243, 125, 245, 59, 247, 59, 64, + 250, 45, 54, 137, 13, 44, 140, 141, 54, 135, + 57, 4, 44, 54, 62, 4, 54, 143, 4, 5, + 6, 7, 8, 56, 45, 56, 4, 5, 6, 7, + 8, 44, 59, 59, 59, 59, 286, 59, 54, 4, + 30, 59, 54, 29, 175, 171, 54, 54, 59, 180, + 114, 29, 229, 39, 248, 290, -1, 119, -1, -1, + -1, 39, 180, 194, 50, 196, 200, -1, -1, -1, + 56, -1, 58, -1, 60, 61, -1, 63, 56, -1, + 58, 212, 60, 61, -1, 63, 217, -1, -1, -1, + -1, 222, -1, 224, -1, -1, -1, -1, -1, -1, + -1, 232, 233, -1, 235, 236, 240, 241, 242, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 248, -1, -1, -1, -1, 258, -1, 260, + -1, -1, -1, -1, -1, -1, -1, 0, 1, -1, + -1, 4, 5, -1, 7, -1, 9, 10, 11, 12, + 13, -1, 283, 284, 285, 18, 19, 20, -1, -1, + 23, 24, 25, -1, 27, 296, -1, -1, 31, 32, + 33, 34, 35, 36, 37, 38, 39, -1, -1, 42, + -1, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, -1, 57, -1, 59, 60, 61, 62, + 1, 64, -1, 4, 10, 11, 7, -1, -1, -1, + -1, -1, 13, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + -1, 37, 38, -1, -1, -1, -1, -1, 39, -1, + -1, 47, 48, 49, 50, 51, 52, 53, 54, -1, + -1, -1, -1, 1, -1, 56, 4, -1, -1, 7, + -1, -1, -1, 64, -1, 13, 14, 15, 16, 17, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 30, -1, -1, -1, -1, -1, -1, -1, + 1, 39, -1, 4, 5, 6, 7, 8, -1, -1, + -1, -1, -1, 14, -1, -1, 17, -1, 56, -1, + 21, 22, -1, -1, -1, 26, 64, 28, 29, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 39, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 50, + -1, -1, -1, -1, -1, 56, -1, 58, 59, 60, + 61, 62, 63, 1, -1, -1, 4, 5, 6, 7, + 8, -1, -1, -1, -1, -1, 14, -1, -1, 17, + -1, -1, -1, 21, 22, -1, -1, -1, 26, 1, + 28, 29, 4, 5, 6, 7, 8, -1, -1, -1, + -1, 39, 14, -1, -1, 17, -1, -1, -1, 21, + 22, -1, 50, -1, 26, -1, 28, 29, 56, -1, + 58, -1, 60, 61, 62, 63, -1, 39, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 50, -1, + -1, -1, -1, -1, 56, -1, 58, -1, 60, 61, + 1, 63, -1, 4, 5, 6, 7, 8, -1, -1, + -1, -1, -1, 14, -1, -1, 17, -1, -1, -1, + 21, 22, -1, -1, -1, 26, 1, 28, 29, 4, + 5, 6, 7, 8, -1, -1, -1, -1, 39, 14, + -1, -1, 17, -1, -1, -1, 21, 22, -1, 50, + -1, 26, -1, 28, 29, 56, -1, 58, -1, 60, + 61, -1, 63, -1, 39, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 50, -1, -1, -1, -1, + -1, 56, -1, 58, -1, 60, 61, 1, 63, -1, 4, 5, 6, 7, 8, -1, -1, -1, -1, -1, 14, -1, -1, 17, -1, -1, -1, 21, 22, -1, - -1, -1, 26, 1, 28, 29, 4, 5, 6, 7, + -1, -1, 26, -1, 28, 29, 4, 5, 6, 7, 8, -1, -1, -1, -1, 39, 14, -1, -1, 17, -1, -1, -1, 21, 22, -1, 50, -1, 26, -1, - 28, 29, 56, 57, -1, -1, 60, 61, -1, 63, + 28, 29, 56, -1, 58, -1, 60, 61, -1, 63, -1, 39, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 50, -1, -1, -1, -1, -1, 56, 57, - -1, -1, 60, 61, 1, 63, -1, 4, 5, 6, - 7, 8, -1, -1, -1, -1, -1, 14, -1, -1, - 17, -1, -1, -1, 21, 22, -1, -1, -1, 26, - 1, 28, 29, 4, 5, 6, 7, 8, -1, -1, - -1, -1, 39, 14, -1, -1, 17, -1, -1, -1, - 21, 22, -1, 50, -1, 26, -1, 28, 29, 56, - 57, -1, -1, 60, 61, -1, 63, -1, 39, -1, - -1, -1, -1, -1, 4, 5, 6, 7, 8, 50, - -1, -1, -1, -1, -1, 56, 57, -1, -1, 60, - 61, -1, 63, 4, 5, 6, 7, 8, -1, 29, - -1, -1, -1, 14, -1, -1, 17, -1, -1, 39, - 21, 22, -1, -1, -1, 26, -1, 28, 29, 4, - 5, 6, 7, 8, -1, -1, 56, 57, 39, 14, - 60, 61, 17, 63, -1, -1, 21, 22, -1, 50, - -1, 26, -1, 28, 29, 56, 57, -1, -1, 60, - 61, 62, 63, -1, 39, -1, -1, -1, -1, 4, - 5, 6, 7, 8, -1, 50, -1, -1, -1, -1, - 55, 56, 57, -1, -1, 60, 61, -1, 63, 4, - 5, 6, 7, 8, 29, -1, -1, -1, -1, 14, - -1, -1, 17, -1, 39, -1, 21, 22, -1, -1, - -1, 26, -1, 28, 29, 50, -1, -1, -1, -1, - -1, 56, 57, -1, 39, 60, 61, -1, 63, -1, - -1, -1, -1, -1, -1, 50, -1, -1, -1, -1, - 55, 56, 57, -1, -1, 60, 61, -1, 63, 4, - 5, 6, 7, 8, -1, -1, -1, -1, -1, 14, - -1, -1, 17, -1, -1, -1, 21, 22, -1, -1, - -1, 26, -1, 28, 29, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 39, -1, -1, -1, 9, 10, - 11, 12, -1, -1, -1, 50, -1, -1, -1, -1, - -1, 56, 57, 24, 25, 60, 61, -1, 63, -1, + -1, -1, 50, -1, -1, -1, -1, -1, 56, -1, + 58, -1, 60, 61, 62, 63, 4, 5, 6, 7, + 8, -1, -1, -1, -1, -1, 14, -1, -1, 17, + -1, -1, -1, 21, 22, -1, -1, -1, 26, -1, + 28, 29, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 39, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 50, -1, -1, -1, -1, 55, 56, -1, + 58, -1, 60, 61, -1, 63, 4, 5, 6, 7, + 8, -1, -1, -1, -1, -1, 14, -1, -1, 17, + -1, -1, -1, 21, 22, -1, -1, -1, 26, -1, + 28, 29, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 39, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 50, -1, -1, -1, -1, 55, 56, -1, + 58, -1, 60, 61, -1, 63, 4, 5, 6, 7, + 8, -1, -1, -1, -1, -1, 14, -1, -1, 17, + -1, -1, -1, 21, 22, -1, -1, -1, 26, -1, + 28, 29, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 39, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 50, 9, 10, 11, 12, -1, 56, -1, + 58, -1, 60, 61, -1, 63, -1, -1, 24, 25, + -1, -1, -1, -1, -1, 31, 32, 33, 34, 35, + 36, 37, 38, -1, -1, -1, -1, -1, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 9, + 10, 11, 12, 59, -1, -1, 62, -1, -1, -1, + -1, -1, -1, -1, 24, 25, -1, -1, -1, -1, + -1, 31, 32, 33, 34, 35, 36, 37, 38, -1, + -1, -1, -1, -1, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 9, 10, 11, 12, -1, + -1, -1, 62, -1, -1, -1, -1, -1, -1, -1, + 24, 25, -1, -1, -1, -1, -1, 31, 32, 33, + 34, 35, 36, 37, 38, -1, -1, -1, -1, -1, + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 9, 10, 11, 12, -1, -1, -1, 62, -1, + -1, -1, -1, -1, -1, -1, 24, 25, -1, -1, + -1, -1, -1, 31, 32, 33, 34, 35, 36, 37, + 38, -1, -1, -1, -1, -1, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 4, 10, 11, + 7, -1, -1, -1, 62, -1, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, -1, 37, 38, -1, 9, 10, + 11, 12, 39, -1, -1, 47, 48, 49, 50, 51, + 52, 53, 54, 24, 25, -1, -1, -1, -1, 56, 31, 32, 33, 34, 35, 36, 37, 38, -1, -1, -1, -1, -1, 44, 45, 46, 47, 48, 49, 50, - 51, 52, 53, 54, 9, 10, 11, 12, 59, -1, - -1, 62, -1, -1, -1, -1, -1, -1, -1, 24, - 25, -1, -1, -1, -1, -1, 31, 32, 33, 34, - 35, 36, 37, 38, -1, -1, -1, -1, -1, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 9, 10, 11, 12, -1, -1, -1, 62, -1, -1, - -1, -1, -1, -1, -1, 24, 25, -1, -1, -1, + 51, 52, 53, 54, 55, -1, 57, 9, 10, 11, + 12, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 24, 25, -1, -1, -1, -1, -1, 31, + 32, 33, 34, 35, 36, 37, 38, -1, 9, 10, + 11, 12, 44, 45, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 24, 25, 57, -1, -1, -1, -1, + 31, 32, 33, 34, 35, 36, 37, 38, -1, 9, + 10, 11, 12, 44, 45, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 24, 25, 57, -1, -1, -1, + -1, 31, 32, 33, 34, 35, 36, 37, 38, -1, + 9, 10, 11, 12, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 24, 25, 57, -1, -1, -1, -1, 31, 32, 33, 34, 35, 36, 37, 38, - -1, -1, -1, -1, -1, 44, 45, 46, 47, 48, - 49, 50, 51, 52, 53, 54, 9, 10, 11, 12, - -1, -1, -1, 62, -1, -1, -1, -1, -1, -1, - -1, 24, 25, -1, -1, -1, -1, -1, 31, 32, - 33, 34, 35, 36, 37, 38, -1, -1, -1, -1, - -1, 44, 45, 46, 47, 48, 49, 50, 51, 52, - 53, 54, 9, 10, 11, 12, -1, -1, -1, 62, - -1, -1, -1, -1, -1, -1, -1, 24, 25, -1, - -1, -1, 10, 11, 31, 32, 33, 34, 35, 36, - 37, 38, -1, -1, -1, -1, 24, 44, 45, 46, - 47, 48, 49, 50, 51, 52, 53, 54, 55, 37, - 38, 58, 9, 10, 11, 12, -1, -1, -1, 47, - 48, 49, 50, 51, 52, 53, 54, 24, 25, -1, + -1, 9, 10, 11, 12, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 24, 25, 57, -1, + -1, -1, -1, 31, 32, 33, 34, 35, 36, 37, + 38, -1, 9, 10, 11, 12, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 24, 25, 57, -1, -1, -1, -1, 31, 32, 33, 34, 35, 36, - 37, 38, -1, 9, 10, 11, 12, 44, 45, 46, - 47, 48, 49, 50, 51, 52, 53, 54, 24, 25, - -1, 58, -1, -1, -1, 31, 32, 33, 34, 35, - 36, 37, 38, -1, 9, 10, 11, 12, 44, 45, - 46, 47, 48, 49, 50, 51, 52, 53, 54, 24, - 25, -1, 58, -1, -1, -1, 31, 32, 33, 34, - 35, 36, 37, 38, -1, 9, 10, 11, 12, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 24, 25, -1, 58, -1, -1, -1, 31, 32, 33, - 34, 35, 36, 37, 38, -1, 9, 10, 11, 12, - 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, - 54, 24, 25, -1, 58, -1, -1, -1, 31, 32, + 37, 38, -1, -1, -1, -1, -1, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 9, + 10, 11, 12, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 24, 25, -1, -1, -1, -1, + -1, 31, 32, 33, 34, 35, 36, 37, 38, -1, + -1, -1, -1, -1, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 9, 10, 11, 12, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 24, 25, -1, -1, -1, -1, -1, 31, 32, 33, 34, 35, 36, 37, 38, -1, -1, -1, -1, -1, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 9, 10, 11, 12, -1, -1, -1, @@ -1194,48 +1239,38 @@ static const yytype_int16 yycheck[] = 35, 36, 37, 38, -1, -1, -1, -1, -1, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 9, 10, 11, 12, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 24, 25, -1, -1, + -1, 19, 20, -1, -1, -1, 24, 25, -1, -1, -1, -1, -1, 31, 32, 33, 34, 35, 36, 37, 38, -1, -1, -1, -1, -1, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 9, 10, - 11, 12, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 24, 25, -1, -1, -1, -1, -1, + 48, 49, 50, 51, 52, 53, 54, 9, 10, 11, + 12, -1, -1, -1, -1, -1, 18, -1, -1, -1, + -1, -1, 24, 25, -1, -1, -1, -1, -1, 31, + 32, 33, 34, 35, 36, 37, 38, -1, 9, 10, + 11, 12, 44, 45, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 24, 25, -1, -1, -1, -1, -1, 31, 32, 33, 34, 35, 36, 37, 38, -1, -1, - -1, -1, -1, 44, 45, 46, 47, 48, 49, 50, - 51, 52, 53, 54, 55, 9, 10, 11, 12, -1, - -1, -1, -1, -1, -1, 19, 20, -1, -1, -1, - 24, 25, -1, -1, -1, -1, -1, 31, 32, 33, - 34, 35, 36, 37, 38, -1, -1, -1, -1, -1, - 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, - 54, 9, 10, 11, 12, -1, -1, -1, -1, -1, - 18, -1, -1, -1, -1, -1, 24, 25, -1, -1, + -1, 42, -1, 44, 45, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 9, 10, 11, 12, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 23, 24, + 25, -1, -1, -1, -1, -1, 31, 32, 33, 34, + 35, 36, 37, 38, -1, -1, -1, -1, -1, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 9, 10, 11, 12, -1, -1, -1, -1, -1, 18, + -1, -1, -1, -1, -1, 24, 25, -1, -1, -1, + -1, -1, 31, 32, 33, 34, 35, 36, 37, 38, + -1, 9, 10, 11, 12, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 24, 25, -1, -1, -1, -1, -1, 31, 32, 33, 34, 35, 36, 37, 38, -1, 9, 10, 11, 12, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 24, 25, -1, -1, -1, -1, -1, 31, 32, 33, 34, 35, 36, - 37, 38, -1, -1, -1, 42, -1, 44, 45, 46, - 47, 48, 49, 50, 51, 52, 53, 54, 9, 10, - 11, 12, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 23, 24, 25, -1, -1, -1, -1, -1, - 31, 32, 33, 34, 35, 36, 37, 38, -1, -1, - -1, -1, -1, 44, 45, 46, 47, 48, 49, 50, - 51, 52, 53, 54, 9, 10, 11, 12, -1, -1, - -1, -1, -1, 18, -1, -1, -1, -1, -1, 24, - 25, -1, -1, -1, -1, -1, 31, 32, 33, 34, - 35, 36, 37, 38, -1, 9, 10, 11, 12, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 24, 25, -1, -1, -1, -1, -1, 31, 32, 33, - 34, 35, 36, 37, 38, -1, 9, 10, 11, 12, - 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, - 54, 24, 25, -1, -1, -1, -1, -1, 31, 32, - 33, 34, 35, 36, 37, 38, -1, 9, 10, 11, - -1, -1, -1, 46, 47, 48, 49, 50, 51, 52, - 53, 54, 24, 25, -1, -1, 10, 11, -1, 31, - 32, 33, 34, 35, 36, 37, 38, -1, -1, -1, - -1, -1, -1, -1, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 37, 38, -1, -1, -1, -1, -1, - -1, -1, -1, 47, 48, 49, 50, 51, 52, 53, - 54 + 37, 38, -1, 9, 10, 11, -1, -1, -1, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 24, 25, + -1, -1, 10, 11, -1, 31, 32, 33, 34, 35, + 36, 37, 38, -1, -1, -1, 24, -1, -1, -1, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 37, + 38, -1, -1, -1, -1, -1, -1, -1, -1, 47, + 48, 49, 50, 51, 52, 53, 54 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing @@ -1243,33 +1278,35 @@ static const yytype_int16 yycheck[] = static const yytype_uint8 yystos[] = { 0, 15, 66, 67, 4, 5, 6, 7, 8, 14, - 17, 21, 22, 26, 28, 29, 39, 50, 56, 57, + 17, 21, 22, 26, 28, 29, 39, 50, 56, 58, 60, 61, 63, 70, 72, 75, 81, 0, 16, 68, - 71, 57, 54, 39, 4, 70, 81, 81, 70, 56, - 1, 56, 76, 70, 4, 30, 1, 70, 1, 4, + 71, 56, 54, 39, 4, 70, 81, 81, 70, 58, + 1, 58, 76, 70, 1, 70, 4, 30, 1, 4, 7, 75, 1, 62, 70, 1, 4, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, - 26, 27, 28, 29, 30, 57, 75, 84, 85, 86, + 26, 27, 28, 29, 30, 56, 75, 88, 89, 90, 9, 10, 11, 12, 24, 25, 31, 32, 33, 34, 35, 36, 37, 38, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 70, 5, 13, 60, 61, 75, 69, 70, 72, 68, 70, 82, 83, 77, - 57, 59, 18, 13, 13, 27, 4, 4, 78, 58, - 58, 1, 54, 62, 62, 45, 64, 59, 1, 70, + 56, 59, 18, 13, 13, 27, 4, 4, 78, 57, + 57, 1, 54, 62, 62, 45, 64, 59, 1, 70, 59, 59, 64, 45, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, - 70, 70, 70, 70, 70, 70, 70, 70, 54, 56, - 75, 1, 59, 62, 70, 13, 69, 55, 58, 78, - 4, 56, 73, 74, 70, 1, 70, 56, 56, 1, - 70, 44, 40, 41, 43, 1, 85, 50, 80, 81, - 58, 58, 80, 80, 85, 4, 54, 62, 70, 54, - 59, 62, 4, 56, 83, 43, 4, 55, 58, 55, - 19, 20, 79, 4, 4, 70, 70, 80, 44, 59, - 59, 44, 62, 62, 70, 54, 55, 70, 4, 74, - 59, 70, 70, 57, 57, 42, 80, 80, 80, 70, - 54, 54, 62, 55, 55, 70, 70, 23, 18, 70, - 70, 54, 55, 55, 70, 55, 55, 79, 70, 70, - 58, 55, 58, 70, 58 + 70, 70, 70, 70, 70, 70, 70, 70, 54, 58, + 61, 63, 84, 75, 1, 59, 62, 70, 13, 69, + 55, 57, 78, 4, 58, 73, 74, 70, 1, 70, + 84, 84, 1, 70, 44, 40, 41, 43, 1, 89, + 50, 80, 81, 57, 57, 80, 80, 89, 4, 84, + 85, 4, 56, 75, 86, 87, 88, 44, 54, 62, + 70, 54, 59, 62, 4, 58, 83, 43, 4, 55, + 57, 55, 19, 20, 79, 56, 56, 70, 70, 80, + 44, 59, 59, 45, 62, 59, 70, 59, 45, 64, + 59, 70, 62, 62, 70, 54, 55, 70, 4, 74, + 59, 70, 70, 70, 70, 42, 80, 80, 80, 84, + 84, 57, 84, 87, 84, 54, 54, 62, 55, 55, + 70, 70, 23, 18, 55, 55, 59, 54, 55, 55, + 70, 70, 70, 84, 79, 57, 55, 57, 70, 57 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ @@ -1286,17 +1323,18 @@ static const yytype_uint8 yyr1[] = 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 82, - 82, 83, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 85, 85, 85, 85, 86, 86, 86, 86, 86, 86, - 86 + 82, 83, 84, 84, 84, 85, 85, 86, 86, 87, + 87, 87, 87, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, + 88, 89, 89, 89, 89, 90, 90, 90, 90, 90, + 90, 90 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 3, 3, 0, 3, 0, 2, 0, 2, - 2, 6, 10, 12, 10, 5, 4, 4, 2, 4, + 2, 5, 9, 11, 9, 5, 4, 4, 2, 4, 5, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 6, 5, @@ -1306,10 +1344,11 @@ static const yytype_uint8 yyr2[] = 3, 2, 2, 3, 5, 4, 4, 3, 7, 6, 6, 6, 5, 5, 1, 1, 1, 3, 3, 2, 3, 2, 2, 1, 4, 3, 3, 4, 3, 1, - 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 3, 1, 2, 3, 3, 1, 3, 1, 3, 3, + 3, 3, 5, 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, 1, 5, - 5 + 1, 0, 1, 3, 3, 3, 3, 3, 1, 1, + 5, 5 }; @@ -1812,139 +1851,163 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio case 4: /* IDENT */ #line 35 "parser.y" /* yacc.c:1257 */ { jv_free(((*yyvaluep).literal)); } -#line 1816 "parser.c" /* yacc.c:1257 */ +#line 1855 "parser.c" /* yacc.c:1257 */ break; case 5: /* FIELD */ #line 35 "parser.y" /* yacc.c:1257 */ { jv_free(((*yyvaluep).literal)); } -#line 1822 "parser.c" /* yacc.c:1257 */ +#line 1861 "parser.c" /* yacc.c:1257 */ break; case 6: /* LITERAL */ #line 35 "parser.y" /* yacc.c:1257 */ { jv_free(((*yyvaluep).literal)); } -#line 1828 "parser.c" /* yacc.c:1257 */ +#line 1867 "parser.c" /* yacc.c:1257 */ break; case 7: /* FORMAT */ #line 35 "parser.y" /* yacc.c:1257 */ { jv_free(((*yyvaluep).literal)); } -#line 1834 "parser.c" /* yacc.c:1257 */ +#line 1873 "parser.c" /* yacc.c:1257 */ break; case 40: /* QQSTRING_TEXT */ #line 35 "parser.y" /* yacc.c:1257 */ { jv_free(((*yyvaluep).literal)); } -#line 1840 "parser.c" /* yacc.c:1257 */ +#line 1879 "parser.c" /* yacc.c:1257 */ break; case 67: /* Module */ #line 36 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1846 "parser.c" /* yacc.c:1257 */ +#line 1885 "parser.c" /* yacc.c:1257 */ break; case 68: /* Imports */ #line 36 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1852 "parser.c" /* yacc.c:1257 */ +#line 1891 "parser.c" /* yacc.c:1257 */ break; case 69: /* FuncDefs */ #line 36 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1858 "parser.c" /* yacc.c:1257 */ +#line 1897 "parser.c" /* yacc.c:1257 */ break; case 70: /* Exp */ #line 36 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1864 "parser.c" /* yacc.c:1257 */ +#line 1903 "parser.c" /* yacc.c:1257 */ break; case 71: /* Import */ #line 36 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1870 "parser.c" /* yacc.c:1257 */ +#line 1909 "parser.c" /* yacc.c:1257 */ break; case 72: /* FuncDef */ #line 36 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1876 "parser.c" /* yacc.c:1257 */ +#line 1915 "parser.c" /* yacc.c:1257 */ break; case 73: /* Params */ #line 36 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1882 "parser.c" /* yacc.c:1257 */ +#line 1921 "parser.c" /* yacc.c:1257 */ break; case 74: /* Param */ #line 36 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1888 "parser.c" /* yacc.c:1257 */ +#line 1927 "parser.c" /* yacc.c:1257 */ break; case 75: /* String */ #line 36 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1894 "parser.c" /* yacc.c:1257 */ +#line 1933 "parser.c" /* yacc.c:1257 */ break; case 78: /* QQString */ #line 36 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1900 "parser.c" /* yacc.c:1257 */ +#line 1939 "parser.c" /* yacc.c:1257 */ break; case 79: /* ElseBody */ #line 36 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1906 "parser.c" /* yacc.c:1257 */ +#line 1945 "parser.c" /* yacc.c:1257 */ break; case 80: /* ExpD */ #line 36 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1912 "parser.c" /* yacc.c:1257 */ +#line 1951 "parser.c" /* yacc.c:1257 */ break; case 81: /* Term */ #line 36 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1918 "parser.c" /* yacc.c:1257 */ +#line 1957 "parser.c" /* yacc.c:1257 */ break; case 82: /* Args */ #line 36 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1924 "parser.c" /* yacc.c:1257 */ +#line 1963 "parser.c" /* yacc.c:1257 */ break; case 83: /* Arg */ #line 36 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1930 "parser.c" /* yacc.c:1257 */ +#line 1969 "parser.c" /* yacc.c:1257 */ break; - case 84: /* Keyword */ + case 84: /* Pattern */ +#line 36 "parser.y" /* yacc.c:1257 */ + { block_free(((*yyvaluep).blk)); } +#line 1975 "parser.c" /* yacc.c:1257 */ + break; + + case 85: /* ArrayPats */ +#line 36 "parser.y" /* yacc.c:1257 */ + { block_free(((*yyvaluep).blk)); } +#line 1981 "parser.c" /* yacc.c:1257 */ + break; + + case 86: /* ObjPats */ +#line 36 "parser.y" /* yacc.c:1257 */ + { block_free(((*yyvaluep).blk)); } +#line 1987 "parser.c" /* yacc.c:1257 */ + break; + + case 87: /* ObjPat */ +#line 36 "parser.y" /* yacc.c:1257 */ + { block_free(((*yyvaluep).blk)); } +#line 1993 "parser.c" /* yacc.c:1257 */ + break; + + case 88: /* Keyword */ #line 35 "parser.y" /* yacc.c:1257 */ { jv_free(((*yyvaluep).literal)); } -#line 1936 "parser.c" /* yacc.c:1257 */ +#line 1999 "parser.c" /* yacc.c:1257 */ break; - case 85: /* MkDict */ + case 89: /* MkDict */ #line 36 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1942 "parser.c" /* yacc.c:1257 */ +#line 2005 "parser.c" /* yacc.c:1257 */ break; - case 86: /* MkDictPair */ + case 90: /* MkDictPair */ #line 36 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1948 "parser.c" /* yacc.c:1257 */ +#line 2011 "parser.c" /* yacc.c:1257 */ break; @@ -2240,7 +2303,7 @@ yyreduce: { *answer = BLOCK((yyvsp[-2].blk), (yyvsp[-1].blk), gen_op_simple(TOP), (yyvsp[0].blk)); } -#line 2244 "parser.c" /* yacc.c:1646 */ +#line 2307 "parser.c" /* yacc.c:1646 */ break; case 3: @@ -2248,7 +2311,7 @@ yyreduce: { *answer = BLOCK((yyvsp[-2].blk), (yyvsp[-1].blk), (yyvsp[0].blk)); } -#line 2252 "parser.c" /* yacc.c:1646 */ +#line 2315 "parser.c" /* yacc.c:1646 */ break; case 4: @@ -2256,7 +2319,7 @@ yyreduce: { (yyval.blk) = gen_noop(); } -#line 2260 "parser.c" /* yacc.c:1646 */ +#line 2323 "parser.c" /* yacc.c:1646 */ break; case 5: @@ -2269,7 +2332,7 @@ yyreduce: (yyval.blk) = gen_module((yyvsp[-1].blk)); } } -#line 2273 "parser.c" /* yacc.c:1646 */ +#line 2336 "parser.c" /* yacc.c:1646 */ break; case 6: @@ -2277,7 +2340,7 @@ yyreduce: { (yyval.blk) = gen_noop(); } -#line 2281 "parser.c" /* yacc.c:1646 */ +#line 2344 "parser.c" /* yacc.c:1646 */ break; case 7: @@ -2285,7 +2348,7 @@ yyreduce: { (yyval.blk) = BLOCK((yyvsp[-1].blk), (yyvsp[0].blk)); } -#line 2289 "parser.c" /* yacc.c:1646 */ +#line 2352 "parser.c" /* yacc.c:1646 */ break; case 8: @@ -2293,7 +2356,7 @@ yyreduce: { (yyval.blk) = gen_noop(); } -#line 2297 "parser.c" /* yacc.c:1646 */ +#line 2360 "parser.c" /* yacc.c:1646 */ break; case 9: @@ -2301,7 +2364,7 @@ yyreduce: { (yyval.blk) = block_bind((yyvsp[-1].blk), (yyvsp[0].blk), OP_IS_CALL_PSEUDO); } -#line 2305 "parser.c" /* yacc.c:1646 */ +#line 2368 "parser.c" /* yacc.c:1646 */ break; case 10: @@ -2309,318 +2372,314 @@ yyreduce: { (yyval.blk) = block_bind_referenced((yyvsp[-1].blk), (yyvsp[0].blk), OP_IS_CALL_PSEUDO); } -#line 2313 "parser.c" /* yacc.c:1646 */ +#line 2376 "parser.c" /* yacc.c:1646 */ break; case 11: #line 311 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = gen_var_binding((yyvsp[-5].blk), jv_string_value((yyvsp[-2].literal)), (yyvsp[0].blk)); - jv_free((yyvsp[-2].literal)); -} -#line 2322 "parser.c" /* yacc.c:1646 */ - break; - - case 12: -#line 316 "parser.y" /* yacc.c:1646 */ - { - (yyval.blk) = gen_reduce(jv_string_value((yyvsp[-5].literal)), (yyvsp[-8].blk), (yyvsp[-3].blk), (yyvsp[-1].blk)); - jv_free((yyvsp[-5].literal)); -} -#line 2331 "parser.c" /* yacc.c:1646 */ - break; - - case 13: -#line 321 "parser.y" /* yacc.c:1646 */ - { - (yyval.blk) = gen_foreach(jv_string_value((yyvsp[-7].literal)), (yyvsp[-10].blk), (yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk)); - jv_free((yyvsp[-7].literal)); -} -#line 2340 "parser.c" /* yacc.c:1646 */ - break; - - case 14: -#line 326 "parser.y" /* yacc.c:1646 */ - { - (yyval.blk) = gen_foreach(jv_string_value((yyvsp[-5].literal)), (yyvsp[-8].blk), (yyvsp[-3].blk), (yyvsp[-1].blk), gen_noop()); - jv_free((yyvsp[-5].literal)); -} -#line 2349 "parser.c" /* yacc.c:1646 */ - break; - - case 15: -#line 331 "parser.y" /* yacc.c:1646 */ - { - (yyval.blk) = gen_cond((yyvsp[-3].blk), (yyvsp[-1].blk), (yyvsp[0].blk)); -} -#line 2357 "parser.c" /* yacc.c:1646 */ - break; - - case 16: -#line 334 "parser.y" /* yacc.c:1646 */ - { - FAIL((yyloc), "Possibly unterminated 'if' statement"); - (yyval.blk) = (yyvsp[-2].blk); -} -#line 2366 "parser.c" /* yacc.c:1646 */ - break; - - case 17: -#line 339 "parser.y" /* yacc.c:1646 */ - { - //$$ = BLOCK(gen_op_target(FORK_OPT, $2), $2, $4); - (yyval.blk) = gen_try((yyvsp[-2].blk), gen_try_handler((yyvsp[0].blk))); -} -#line 2375 "parser.c" /* yacc.c:1646 */ - break; - - case 18: -#line 343 "parser.y" /* yacc.c:1646 */ - { - //$$ = BLOCK(gen_op_target(FORK_OPT, $2), $2, gen_op_simple(BACKTRACK)); - (yyval.blk) = gen_try((yyvsp[0].blk), gen_op_simple(BACKTRACK)); + (yyval.blk) = gen_destructure((yyvsp[-4].blk), (yyvsp[-2].blk), (yyvsp[0].blk)); } #line 2384 "parser.c" /* yacc.c:1646 */ break; + case 12: +#line 315 "parser.y" /* yacc.c:1646 */ + { + (yyval.blk) = gen_reduce((yyvsp[-7].blk), (yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk)); +} +#line 2392 "parser.c" /* yacc.c:1646 */ + break; + + case 13: +#line 319 "parser.y" /* yacc.c:1646 */ + { + (yyval.blk) = gen_foreach((yyvsp[-9].blk), (yyvsp[-7].blk), (yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk)); +} +#line 2400 "parser.c" /* yacc.c:1646 */ + break; + + case 14: +#line 323 "parser.y" /* yacc.c:1646 */ + { + (yyval.blk) = gen_foreach((yyvsp[-7].blk), (yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk), gen_noop()); +} +#line 2408 "parser.c" /* yacc.c:1646 */ + break; + + case 15: +#line 327 "parser.y" /* yacc.c:1646 */ + { + (yyval.blk) = gen_cond((yyvsp[-3].blk), (yyvsp[-1].blk), (yyvsp[0].blk)); +} +#line 2416 "parser.c" /* yacc.c:1646 */ + break; + + case 16: +#line 330 "parser.y" /* yacc.c:1646 */ + { + FAIL((yyloc), "Possibly unterminated 'if' statement"); + (yyval.blk) = (yyvsp[-2].blk); +} +#line 2425 "parser.c" /* yacc.c:1646 */ + break; + + case 17: +#line 335 "parser.y" /* yacc.c:1646 */ + { + //$$ = BLOCK(gen_op_target(FORK_OPT, $2), $2, $4); + (yyval.blk) = gen_try((yyvsp[-2].blk), gen_try_handler((yyvsp[0].blk))); +} +#line 2434 "parser.c" /* yacc.c:1646 */ + break; + + case 18: +#line 339 "parser.y" /* yacc.c:1646 */ + { + //$$ = BLOCK(gen_op_target(FORK_OPT, $2), $2, gen_op_simple(BACKTRACK)); + (yyval.blk) = gen_try((yyvsp[0].blk), gen_op_simple(BACKTRACK)); +} +#line 2443 "parser.c" /* yacc.c:1646 */ + break; + case 19: -#line 347 "parser.y" /* yacc.c:1646 */ +#line 343 "parser.y" /* yacc.c:1646 */ { FAIL((yyloc), "Possibly unterminated 'try' statement"); (yyval.blk) = (yyvsp[-2].blk); } -#line 2393 "parser.c" /* yacc.c:1646 */ +#line 2452 "parser.c" /* yacc.c:1646 */ break; case 20: -#line 352 "parser.y" /* yacc.c:1646 */ +#line 348 "parser.y" /* yacc.c:1646 */ { 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 2404 "parser.c" /* yacc.c:1646 */ +#line 2463 "parser.c" /* yacc.c:1646 */ break; case 21: -#line 364 "parser.y" /* yacc.c:1646 */ +#line 360 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_try((yyvsp[-1].blk), gen_op_simple(BACKTRACK)); } -#line 2412 "parser.c" /* yacc.c:1646 */ +#line 2471 "parser.c" /* yacc.c:1646 */ break; case 22: -#line 368 "parser.y" /* yacc.c:1646 */ +#line 364 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_call("_assign", BLOCK(gen_lambda((yyvsp[-2].blk)), gen_lambda((yyvsp[0].blk)))); } -#line 2420 "parser.c" /* yacc.c:1646 */ +#line 2479 "parser.c" /* yacc.c:1646 */ break; case 23: -#line 372 "parser.y" /* yacc.c:1646 */ +#line 368 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_or((yyvsp[-2].blk), (yyvsp[0].blk)); } -#line 2428 "parser.c" /* yacc.c:1646 */ +#line 2487 "parser.c" /* yacc.c:1646 */ break; case 24: -#line 376 "parser.y" /* yacc.c:1646 */ +#line 372 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_and((yyvsp[-2].blk), (yyvsp[0].blk)); } -#line 2436 "parser.c" /* yacc.c:1646 */ +#line 2495 "parser.c" /* yacc.c:1646 */ break; case 25: -#line 380 "parser.y" /* yacc.c:1646 */ +#line 376 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_definedor((yyvsp[-2].blk), (yyvsp[0].blk)); } -#line 2444 "parser.c" /* yacc.c:1646 */ +#line 2503 "parser.c" /* yacc.c:1646 */ break; case 26: -#line 384 "parser.y" /* yacc.c:1646 */ +#line 380 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_definedor_assign((yyvsp[-2].blk), (yyvsp[0].blk)); } -#line 2452 "parser.c" /* yacc.c:1646 */ +#line 2511 "parser.c" /* yacc.c:1646 */ break; case 27: -#line 388 "parser.y" /* yacc.c:1646 */ +#line 384 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_call("_modify", BLOCK(gen_lambda((yyvsp[-2].blk)), gen_lambda((yyvsp[0].blk)))); } -#line 2460 "parser.c" /* yacc.c:1646 */ +#line 2519 "parser.c" /* yacc.c:1646 */ break; case 28: -#line 392 "parser.y" /* yacc.c:1646 */ +#line 388 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = block_join((yyvsp[-2].blk), (yyvsp[0].blk)); } -#line 2468 "parser.c" /* yacc.c:1646 */ +#line 2527 "parser.c" /* yacc.c:1646 */ break; case 29: -#line 396 "parser.y" /* yacc.c:1646 */ +#line 392 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_both((yyvsp[-2].blk), (yyvsp[0].blk)); } -#line 2476 "parser.c" /* yacc.c:1646 */ +#line 2535 "parser.c" /* yacc.c:1646 */ break; case 30: -#line 400 "parser.y" /* yacc.c:1646 */ +#line 396 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '+'); } -#line 2484 "parser.c" /* yacc.c:1646 */ +#line 2543 "parser.c" /* yacc.c:1646 */ break; case 31: -#line 404 "parser.y" /* yacc.c:1646 */ +#line 400 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '+'); } -#line 2492 "parser.c" /* yacc.c:1646 */ +#line 2551 "parser.c" /* yacc.c:1646 */ break; case 32: -#line 408 "parser.y" /* yacc.c:1646 */ +#line 404 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = BLOCK((yyvsp[0].blk), gen_call("_negate", gen_noop())); } -#line 2500 "parser.c" /* yacc.c:1646 */ +#line 2559 "parser.c" /* yacc.c:1646 */ break; case 33: -#line 412 "parser.y" /* yacc.c:1646 */ +#line 408 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '-'); } -#line 2508 "parser.c" /* yacc.c:1646 */ +#line 2567 "parser.c" /* yacc.c:1646 */ break; case 34: -#line 416 "parser.y" /* yacc.c:1646 */ +#line 412 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '-'); } -#line 2516 "parser.c" /* yacc.c:1646 */ +#line 2575 "parser.c" /* yacc.c:1646 */ break; case 35: -#line 420 "parser.y" /* yacc.c:1646 */ +#line 416 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '*'); } -#line 2524 "parser.c" /* yacc.c:1646 */ +#line 2583 "parser.c" /* yacc.c:1646 */ break; case 36: -#line 424 "parser.y" /* yacc.c:1646 */ +#line 420 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '*'); } -#line 2532 "parser.c" /* yacc.c:1646 */ +#line 2591 "parser.c" /* yacc.c:1646 */ break; case 37: -#line 428 "parser.y" /* yacc.c:1646 */ +#line 424 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '/'); } -#line 2540 "parser.c" /* yacc.c:1646 */ +#line 2599 "parser.c" /* yacc.c:1646 */ break; case 38: -#line 432 "parser.y" /* yacc.c:1646 */ +#line 428 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '%'); } -#line 2548 "parser.c" /* yacc.c:1646 */ +#line 2607 "parser.c" /* yacc.c:1646 */ break; case 39: -#line 436 "parser.y" /* yacc.c:1646 */ +#line 432 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '/'); } -#line 2556 "parser.c" /* yacc.c:1646 */ +#line 2615 "parser.c" /* yacc.c:1646 */ break; case 40: -#line 440 "parser.y" /* yacc.c:1646 */ +#line 436 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '%'); } -#line 2564 "parser.c" /* yacc.c:1646 */ +#line 2623 "parser.c" /* yacc.c:1646 */ break; case 41: -#line 444 "parser.y" /* yacc.c:1646 */ +#line 440 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), EQ); } -#line 2572 "parser.c" /* yacc.c:1646 */ +#line 2631 "parser.c" /* yacc.c:1646 */ break; case 42: -#line 448 "parser.y" /* yacc.c:1646 */ +#line 444 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), NEQ); } -#line 2580 "parser.c" /* yacc.c:1646 */ +#line 2639 "parser.c" /* yacc.c:1646 */ break; case 43: -#line 452 "parser.y" /* yacc.c:1646 */ +#line 448 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '<'); } -#line 2588 "parser.c" /* yacc.c:1646 */ +#line 2647 "parser.c" /* yacc.c:1646 */ break; case 44: -#line 456 "parser.y" /* yacc.c:1646 */ +#line 452 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '>'); } -#line 2596 "parser.c" /* yacc.c:1646 */ +#line 2655 "parser.c" /* yacc.c:1646 */ break; case 45: -#line 460 "parser.y" /* yacc.c:1646 */ +#line 456 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), LESSEQ); } -#line 2604 "parser.c" /* yacc.c:1646 */ +#line 2663 "parser.c" /* yacc.c:1646 */ break; case 46: -#line 464 "parser.y" /* yacc.c:1646 */ +#line 460 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), GREATEREQ); } -#line 2612 "parser.c" /* yacc.c:1646 */ +#line 2671 "parser.c" /* yacc.c:1646 */ break; case 47: -#line 468 "parser.y" /* yacc.c:1646 */ +#line 464 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = (yyvsp[0].blk); } -#line 2620 "parser.c" /* yacc.c:1646 */ +#line 2679 "parser.c" /* yacc.c:1646 */ break; case 48: -#line 473 "parser.y" /* yacc.c:1646 */ +#line 469 "parser.y" /* yacc.c:1646 */ { jv v = block_const((yyvsp[-4].blk)); // XXX Make gen_import take only blocks and the int is_data so we @@ -2630,11 +2689,11 @@ yyreduce: jv_free((yyvsp[-1].literal)); jv_free(v); } -#line 2634 "parser.c" /* yacc.c:1646 */ +#line 2693 "parser.c" /* yacc.c:1646 */ break; case 49: -#line 482 "parser.y" /* yacc.c:1646 */ +#line 478 "parser.y" /* yacc.c:1646 */ { jv v = block_const((yyvsp[-3].blk)); (yyval.blk) = gen_import(jv_string_value(v), gen_noop(), jv_string_value((yyvsp[-1].literal)), 0); @@ -2642,11 +2701,11 @@ yyreduce: jv_free((yyvsp[-1].literal)); jv_free(v); } -#line 2646 "parser.c" /* yacc.c:1646 */ +#line 2705 "parser.c" /* yacc.c:1646 */ break; case 50: -#line 489 "parser.y" /* yacc.c:1646 */ +#line 485 "parser.y" /* yacc.c:1646 */ { if (!block_is_const((yyvsp[-1].blk))) { FAIL((yyloc), "Module metadata must be constant."); @@ -2659,11 +2718,11 @@ yyreduce: block_free((yyvsp[-4].blk)); jv_free((yyvsp[-2].literal)); } -#line 2663 "parser.c" /* yacc.c:1646 */ +#line 2722 "parser.c" /* yacc.c:1646 */ break; case 51: -#line 501 "parser.y" /* yacc.c:1646 */ +#line 497 "parser.y" /* yacc.c:1646 */ { if (!block_is_const((yyvsp[-1].blk))) { FAIL((yyloc), "Module metadata must be constant."); @@ -2676,173 +2735,173 @@ yyreduce: block_free((yyvsp[-5].blk)); jv_free((yyvsp[-2].literal)); } -#line 2680 "parser.c" /* yacc.c:1646 */ +#line 2739 "parser.c" /* yacc.c:1646 */ break; case 52: -#line 515 "parser.y" /* yacc.c:1646 */ +#line 511 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_function(jv_string_value((yyvsp[-3].literal)), gen_noop(), (yyvsp[-1].blk)); jv_free((yyvsp[-3].literal)); } -#line 2689 "parser.c" /* yacc.c:1646 */ +#line 2748 "parser.c" /* yacc.c:1646 */ break; case 53: -#line 520 "parser.y" /* yacc.c:1646 */ +#line 516 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_function(jv_string_value((yyvsp[-6].literal)), (yyvsp[-4].blk), (yyvsp[-1].blk)); jv_free((yyvsp[-6].literal)); } -#line 2698 "parser.c" /* yacc.c:1646 */ +#line 2757 "parser.c" /* yacc.c:1646 */ break; case 54: -#line 526 "parser.y" /* yacc.c:1646 */ +#line 522 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = (yyvsp[0].blk); } -#line 2706 "parser.c" /* yacc.c:1646 */ +#line 2765 "parser.c" /* yacc.c:1646 */ break; case 55: -#line 529 "parser.y" /* yacc.c:1646 */ +#line 525 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = BLOCK((yyvsp[-2].blk), (yyvsp[0].blk)); } -#line 2714 "parser.c" /* yacc.c:1646 */ +#line 2773 "parser.c" /* yacc.c:1646 */ break; case 56: -#line 534 "parser.y" /* yacc.c:1646 */ +#line 530 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_param_regular(jv_string_value((yyvsp[0].literal))); jv_free((yyvsp[0].literal)); } -#line 2723 "parser.c" /* yacc.c:1646 */ +#line 2782 "parser.c" /* yacc.c:1646 */ break; case 57: -#line 539 "parser.y" /* yacc.c:1646 */ +#line 535 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_param(jv_string_value((yyvsp[0].literal))); jv_free((yyvsp[0].literal)); } -#line 2732 "parser.c" /* yacc.c:1646 */ +#line 2791 "parser.c" /* yacc.c:1646 */ break; case 58: -#line 546 "parser.y" /* yacc.c:1646 */ +#line 542 "parser.y" /* yacc.c:1646 */ { (yyval.literal) = jv_string("text"); } -#line 2738 "parser.c" /* yacc.c:1646 */ +#line 2797 "parser.c" /* yacc.c:1646 */ break; case 59: +#line 542 "parser.y" /* yacc.c:1646 */ + { + (yyval.blk) = (yyvsp[-1].blk); + jv_free((yyvsp[-2].literal)); +} +#line 2806 "parser.c" /* yacc.c:1646 */ + break; + + case 60: +#line 546 "parser.y" /* yacc.c:1646 */ + { (yyval.literal) = (yyvsp[-1].literal); } +#line 2812 "parser.c" /* yacc.c:1646 */ + break; + + case 61: #line 546 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = (yyvsp[-1].blk); jv_free((yyvsp[-2].literal)); } -#line 2747 "parser.c" /* yacc.c:1646 */ - break; - - case 60: -#line 550 "parser.y" /* yacc.c:1646 */ - { (yyval.literal) = (yyvsp[-1].literal); } -#line 2753 "parser.c" /* yacc.c:1646 */ - break; - - case 61: -#line 550 "parser.y" /* yacc.c:1646 */ - { - (yyval.blk) = (yyvsp[-1].blk); - jv_free((yyvsp[-2].literal)); -} -#line 2762 "parser.c" /* yacc.c:1646 */ +#line 2821 "parser.c" /* yacc.c:1646 */ break; case 62: -#line 557 "parser.y" /* yacc.c:1646 */ +#line 553 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_const(jv_string("")); } -#line 2770 "parser.c" /* yacc.c:1646 */ +#line 2829 "parser.c" /* yacc.c:1646 */ break; case 63: -#line 560 "parser.y" /* yacc.c:1646 */ +#line 556 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_binop((yyvsp[-1].blk), gen_const((yyvsp[0].literal)), '+'); } -#line 2778 "parser.c" /* yacc.c:1646 */ +#line 2837 "parser.c" /* yacc.c:1646 */ break; case 64: -#line 563 "parser.y" /* yacc.c:1646 */ +#line 559 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_binop((yyvsp[-3].blk), gen_format((yyvsp[-1].blk), jv_copy((yyvsp[-4].literal))), '+'); } -#line 2786 "parser.c" /* yacc.c:1646 */ +#line 2845 "parser.c" /* yacc.c:1646 */ break; case 65: -#line 569 "parser.y" /* yacc.c:1646 */ +#line 565 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_cond((yyvsp[-3].blk), (yyvsp[-1].blk), (yyvsp[0].blk)); } -#line 2794 "parser.c" /* yacc.c:1646 */ +#line 2853 "parser.c" /* yacc.c:1646 */ break; case 66: -#line 572 "parser.y" /* yacc.c:1646 */ +#line 568 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = (yyvsp[-1].blk); } -#line 2802 "parser.c" /* yacc.c:1646 */ +#line 2861 "parser.c" /* yacc.c:1646 */ break; case 67: -#line 577 "parser.y" /* yacc.c:1646 */ +#line 573 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = block_join((yyvsp[-2].blk), (yyvsp[0].blk)); } -#line 2810 "parser.c" /* yacc.c:1646 */ +#line 2869 "parser.c" /* yacc.c:1646 */ break; case 68: -#line 580 "parser.y" /* yacc.c:1646 */ +#line 576 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = BLOCK((yyvsp[0].blk), gen_call("_negate", gen_noop())); } -#line 2818 "parser.c" /* yacc.c:1646 */ +#line 2877 "parser.c" /* yacc.c:1646 */ break; case 69: -#line 583 "parser.y" /* yacc.c:1646 */ +#line 579 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = (yyvsp[0].blk); } -#line 2826 "parser.c" /* yacc.c:1646 */ +#line 2885 "parser.c" /* yacc.c:1646 */ break; case 70: -#line 589 "parser.y" /* yacc.c:1646 */ +#line 585 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_noop(); } -#line 2834 "parser.c" /* yacc.c:1646 */ +#line 2893 "parser.c" /* yacc.c:1646 */ break; case 71: -#line 592 "parser.y" /* yacc.c:1646 */ +#line 588 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_call("recurse", gen_noop()); } -#line 2842 "parser.c" /* yacc.c:1646 */ +#line 2901 "parser.c" /* yacc.c:1646 */ break; case 72: -#line 595 "parser.y" /* yacc.c:1646 */ +#line 591 "parser.y" /* yacc.c:1646 */ { jv v = jv_string_fmt("*label-%s", jv_string_value((yyvsp[0].literal))); // impossible symbol (yyval.blk) = gen_location((yyloc), locations, @@ -2851,231 +2910,231 @@ yyreduce: jv_free(v); jv_free((yyvsp[0].literal)); } -#line 2855 "parser.c" /* yacc.c:1646 */ +#line 2914 "parser.c" /* yacc.c:1646 */ break; case 73: -#line 603 "parser.y" /* yacc.c:1646 */ +#line 599 "parser.y" /* yacc.c:1646 */ { FAIL((yyloc), "break requires a label to break to"); (yyval.blk) = gen_noop(); } -#line 2864 "parser.c" /* yacc.c:1646 */ +#line 2923 "parser.c" /* yacc.c:1646 */ break; case 74: -#line 607 "parser.y" /* yacc.c:1646 */ +#line 603 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_index_opt((yyvsp[-2].blk), gen_const((yyvsp[-1].literal))); } -#line 2872 "parser.c" /* yacc.c:1646 */ +#line 2931 "parser.c" /* yacc.c:1646 */ break; case 75: -#line 610 "parser.y" /* yacc.c:1646 */ +#line 606 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_index_opt(gen_noop(), gen_const((yyvsp[-1].literal))); } -#line 2880 "parser.c" /* yacc.c:1646 */ +#line 2939 "parser.c" /* yacc.c:1646 */ break; case 76: -#line 613 "parser.y" /* yacc.c:1646 */ +#line 609 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_index_opt((yyvsp[-3].blk), (yyvsp[-1].blk)); } -#line 2888 "parser.c" /* yacc.c:1646 */ +#line 2947 "parser.c" /* yacc.c:1646 */ break; case 77: -#line 616 "parser.y" /* yacc.c:1646 */ +#line 612 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_index_opt(gen_noop(), (yyvsp[-1].blk)); } -#line 2896 "parser.c" /* yacc.c:1646 */ +#line 2955 "parser.c" /* yacc.c:1646 */ break; case 78: -#line 619 "parser.y" /* yacc.c:1646 */ +#line 615 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_index((yyvsp[-1].blk), gen_const((yyvsp[0].literal))); } -#line 2904 "parser.c" /* yacc.c:1646 */ +#line 2963 "parser.c" /* yacc.c:1646 */ break; case 79: -#line 622 "parser.y" /* yacc.c:1646 */ +#line 618 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_index(gen_noop(), gen_const((yyvsp[0].literal))); } -#line 2912 "parser.c" /* yacc.c:1646 */ +#line 2971 "parser.c" /* yacc.c:1646 */ break; case 80: -#line 625 "parser.y" /* yacc.c:1646 */ +#line 621 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_index((yyvsp[-2].blk), (yyvsp[0].blk)); } -#line 2920 "parser.c" /* yacc.c:1646 */ +#line 2979 "parser.c" /* yacc.c:1646 */ break; case 81: -#line 628 "parser.y" /* yacc.c:1646 */ +#line 624 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_index(gen_noop(), (yyvsp[0].blk)); } -#line 2928 "parser.c" /* yacc.c:1646 */ +#line 2987 "parser.c" /* yacc.c:1646 */ break; case 82: -#line 631 "parser.y" /* yacc.c:1646 */ +#line 627 "parser.y" /* yacc.c:1646 */ { FAIL((yyloc), "try .[\"field\"] instead of .field for unusually named fields"); (yyval.blk) = gen_noop(); } -#line 2937 "parser.c" /* yacc.c:1646 */ +#line 2996 "parser.c" /* yacc.c:1646 */ break; case 83: -#line 635 "parser.y" /* yacc.c:1646 */ +#line 631 "parser.y" /* yacc.c:1646 */ { jv_free((yyvsp[-1].literal)); FAIL((yyloc), "try .[\"field\"] instead of .field for unusually named fields"); (yyval.blk) = gen_noop(); } -#line 2947 "parser.c" /* yacc.c:1646 */ +#line 3006 "parser.c" /* yacc.c:1646 */ break; case 84: -#line 641 "parser.y" /* yacc.c:1646 */ +#line 637 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_index_opt((yyvsp[-4].blk), (yyvsp[-2].blk)); } -#line 2955 "parser.c" /* yacc.c:1646 */ +#line 3014 "parser.c" /* yacc.c:1646 */ break; case 85: -#line 644 "parser.y" /* yacc.c:1646 */ +#line 640 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_index((yyvsp[-3].blk), (yyvsp[-1].blk)); } -#line 2963 "parser.c" /* yacc.c:1646 */ +#line 3022 "parser.c" /* yacc.c:1646 */ break; case 86: -#line 647 "parser.y" /* yacc.c:1646 */ +#line 643 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = block_join((yyvsp[-3].blk), gen_op_simple(EACH_OPT)); } -#line 2971 "parser.c" /* yacc.c:1646 */ +#line 3030 "parser.c" /* yacc.c:1646 */ break; case 87: -#line 650 "parser.y" /* yacc.c:1646 */ +#line 646 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = block_join((yyvsp[-2].blk), gen_op_simple(EACH)); } -#line 2979 "parser.c" /* yacc.c:1646 */ +#line 3038 "parser.c" /* yacc.c:1646 */ break; case 88: -#line 653 "parser.y" /* yacc.c:1646 */ +#line 649 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_slice_index((yyvsp[-6].blk), (yyvsp[-4].blk), (yyvsp[-2].blk), INDEX_OPT); } -#line 2987 "parser.c" /* yacc.c:1646 */ +#line 3046 "parser.c" /* yacc.c:1646 */ break; case 89: -#line 656 "parser.y" /* yacc.c:1646 */ +#line 652 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_slice_index((yyvsp[-5].blk), (yyvsp[-3].blk), gen_const(jv_null()), INDEX_OPT); } -#line 2995 "parser.c" /* yacc.c:1646 */ +#line 3054 "parser.c" /* yacc.c:1646 */ break; case 90: -#line 659 "parser.y" /* yacc.c:1646 */ +#line 655 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_slice_index((yyvsp[-5].blk), gen_const(jv_null()), (yyvsp[-2].blk), INDEX_OPT); } -#line 3003 "parser.c" /* yacc.c:1646 */ +#line 3062 "parser.c" /* yacc.c:1646 */ break; case 91: -#line 662 "parser.y" /* yacc.c:1646 */ +#line 658 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_slice_index((yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk), INDEX); } -#line 3011 "parser.c" /* yacc.c:1646 */ +#line 3070 "parser.c" /* yacc.c:1646 */ break; case 92: -#line 665 "parser.y" /* yacc.c:1646 */ +#line 661 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_slice_index((yyvsp[-4].blk), (yyvsp[-2].blk), gen_const(jv_null()), INDEX); } -#line 3019 "parser.c" /* yacc.c:1646 */ +#line 3078 "parser.c" /* yacc.c:1646 */ break; case 93: -#line 668 "parser.y" /* yacc.c:1646 */ +#line 664 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_slice_index((yyvsp[-4].blk), gen_const(jv_null()), (yyvsp[-1].blk), INDEX); } -#line 3027 "parser.c" /* yacc.c:1646 */ +#line 3086 "parser.c" /* yacc.c:1646 */ break; case 94: -#line 671 "parser.y" /* yacc.c:1646 */ +#line 667 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_const((yyvsp[0].literal)); } -#line 3035 "parser.c" /* yacc.c:1646 */ +#line 3094 "parser.c" /* yacc.c:1646 */ break; case 95: -#line 674 "parser.y" /* yacc.c:1646 */ +#line 670 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = (yyvsp[0].blk); } -#line 3043 "parser.c" /* yacc.c:1646 */ +#line 3102 "parser.c" /* yacc.c:1646 */ break; case 96: -#line 677 "parser.y" /* yacc.c:1646 */ +#line 673 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_format(gen_noop(), (yyvsp[0].literal)); } -#line 3051 "parser.c" /* yacc.c:1646 */ +#line 3110 "parser.c" /* yacc.c:1646 */ break; case 97: -#line 680 "parser.y" /* yacc.c:1646 */ +#line 676 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = (yyvsp[-1].blk); } -#line 3059 "parser.c" /* yacc.c:1646 */ +#line 3118 "parser.c" /* yacc.c:1646 */ break; case 98: -#line 683 "parser.y" /* yacc.c:1646 */ +#line 679 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_collect((yyvsp[-1].blk)); } -#line 3067 "parser.c" /* yacc.c:1646 */ +#line 3126 "parser.c" /* yacc.c:1646 */ break; case 99: -#line 686 "parser.y" /* yacc.c:1646 */ +#line 682 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_const(jv_array()); } -#line 3075 "parser.c" /* yacc.c:1646 */ +#line 3134 "parser.c" /* yacc.c:1646 */ break; case 100: -#line 689 "parser.y" /* yacc.c:1646 */ +#line 685 "parser.y" /* yacc.c:1646 */ { block o = gen_const_object((yyvsp[-1].blk)); if (o.first != NULL) @@ -3083,29 +3142,29 @@ yyreduce: else (yyval.blk) = BLOCK(gen_subexp(gen_const(jv_object())), (yyvsp[-1].blk), gen_op_simple(POP)); } -#line 3087 "parser.c" /* yacc.c:1646 */ +#line 3146 "parser.c" /* yacc.c:1646 */ break; case 101: -#line 696 "parser.y" /* yacc.c:1646 */ +#line 692 "parser.y" /* yacc.c:1646 */ { (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))); } -#line 3096 "parser.c" /* yacc.c:1646 */ +#line 3155 "parser.c" /* yacc.c:1646 */ break; case 102: -#line 700 "parser.y" /* yacc.c:1646 */ +#line 696 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_location((yyloc), locations, gen_op_unbound(LOADV, jv_string_value((yyvsp[0].literal)))); jv_free((yyvsp[0].literal)); } -#line 3105 "parser.c" /* yacc.c:1646 */ +#line 3164 "parser.c" /* yacc.c:1646 */ break; case 103: -#line 704 "parser.y" /* yacc.c:1646 */ +#line 700 "parser.y" /* yacc.c:1646 */ { const char *s = jv_string_value((yyvsp[0].literal)); if (strcmp(s, "false") == 0) @@ -3118,295 +3177,384 @@ yyreduce: (yyval.blk) = gen_location((yyloc), locations, gen_call(s, gen_noop())); jv_free((yyvsp[0].literal)); } -#line 3122 "parser.c" /* yacc.c:1646 */ +#line 3181 "parser.c" /* yacc.c:1646 */ break; case 104: -#line 716 "parser.y" /* yacc.c:1646 */ +#line 712 "parser.y" /* yacc.c:1646 */ { (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 3132 "parser.c" /* yacc.c:1646 */ +#line 3191 "parser.c" /* yacc.c:1646 */ break; case 105: -#line 721 "parser.y" /* yacc.c:1646 */ +#line 717 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_noop(); } -#line 3138 "parser.c" /* yacc.c:1646 */ +#line 3197 "parser.c" /* yacc.c:1646 */ break; case 106: -#line 722 "parser.y" /* yacc.c:1646 */ +#line 718 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_noop(); } -#line 3144 "parser.c" /* yacc.c:1646 */ +#line 3203 "parser.c" /* yacc.c:1646 */ break; case 107: -#line 723 "parser.y" /* yacc.c:1646 */ +#line 719 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = (yyvsp[-3].blk); } -#line 3150 "parser.c" /* yacc.c:1646 */ +#line 3209 "parser.c" /* yacc.c:1646 */ break; case 108: -#line 724 "parser.y" /* yacc.c:1646 */ +#line 720 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_noop(); } -#line 3156 "parser.c" /* yacc.c:1646 */ +#line 3215 "parser.c" /* yacc.c:1646 */ break; case 109: -#line 727 "parser.y" /* yacc.c:1646 */ +#line 723 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = (yyvsp[0].blk); } -#line 3164 "parser.c" /* yacc.c:1646 */ +#line 3223 "parser.c" /* yacc.c:1646 */ break; case 110: -#line 730 "parser.y" /* yacc.c:1646 */ +#line 726 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = BLOCK((yyvsp[-2].blk), (yyvsp[0].blk)); } -#line 3172 "parser.c" /* yacc.c:1646 */ +#line 3231 "parser.c" /* yacc.c:1646 */ break; case 111: -#line 735 "parser.y" /* yacc.c:1646 */ +#line 731 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_lambda((yyvsp[0].blk)); } -#line 3180 "parser.c" /* yacc.c:1646 */ +#line 3239 "parser.c" /* yacc.c:1646 */ break; case 112: -#line 740 "parser.y" /* yacc.c:1646 */ +#line 736 "parser.y" /* yacc.c:1646 */ { - (yyval.literal) = jv_string("as"); + (yyval.blk) = gen_op_unbound(STOREV, jv_string_value((yyvsp[0].literal))); + jv_free((yyvsp[0].literal)); } -#line 3188 "parser.c" /* yacc.c:1646 */ +#line 3248 "parser.c" /* yacc.c:1646 */ break; case 113: -#line 743 "parser.y" /* yacc.c:1646 */ +#line 740 "parser.y" /* yacc.c:1646 */ { - (yyval.literal) = jv_string("def"); + (yyval.blk) = BLOCK((yyvsp[-1].blk), gen_op_simple(POP)); } -#line 3196 "parser.c" /* yacc.c:1646 */ +#line 3256 "parser.c" /* yacc.c:1646 */ break; case 114: -#line 746 "parser.y" /* yacc.c:1646 */ +#line 743 "parser.y" /* yacc.c:1646 */ { - (yyval.literal) = jv_string("module"); + (yyval.blk) = BLOCK((yyvsp[-1].blk), gen_op_simple(POP)); } -#line 3204 "parser.c" /* yacc.c:1646 */ +#line 3264 "parser.c" /* yacc.c:1646 */ break; case 115: -#line 749 "parser.y" /* yacc.c:1646 */ +#line 748 "parser.y" /* yacc.c:1646 */ { - (yyval.literal) = jv_string("import"); + (yyval.blk) = gen_array_matcher(gen_noop(), (yyvsp[0].blk)); } -#line 3212 "parser.c" /* yacc.c:1646 */ +#line 3272 "parser.c" /* yacc.c:1646 */ break; case 116: -#line 752 "parser.y" /* yacc.c:1646 */ +#line 751 "parser.y" /* yacc.c:1646 */ { - (yyval.literal) = jv_string("if"); + (yyval.blk) = gen_array_matcher((yyvsp[-2].blk), (yyvsp[0].blk)); } -#line 3220 "parser.c" /* yacc.c:1646 */ +#line 3280 "parser.c" /* yacc.c:1646 */ break; case 117: -#line 755 "parser.y" /* yacc.c:1646 */ +#line 756 "parser.y" /* yacc.c:1646 */ { - (yyval.literal) = jv_string("then"); + (yyval.blk) = (yyvsp[0].blk); } -#line 3228 "parser.c" /* yacc.c:1646 */ +#line 3288 "parser.c" /* yacc.c:1646 */ break; case 118: -#line 758 "parser.y" /* yacc.c:1646 */ +#line 759 "parser.y" /* yacc.c:1646 */ { - (yyval.literal) = jv_string("else"); + (yyval.blk) = BLOCK((yyvsp[-2].blk), (yyvsp[0].blk)); } -#line 3236 "parser.c" /* yacc.c:1646 */ +#line 3296 "parser.c" /* yacc.c:1646 */ break; case 119: -#line 761 "parser.y" /* yacc.c:1646 */ +#line 764 "parser.y" /* yacc.c:1646 */ { - (yyval.literal) = jv_string("elif"); + (yyval.blk) = gen_object_matcher(gen_const((yyvsp[-2].literal)), (yyvsp[0].blk)); } -#line 3244 "parser.c" /* yacc.c:1646 */ +#line 3304 "parser.c" /* yacc.c:1646 */ break; case 120: -#line 764 "parser.y" /* yacc.c:1646 */ +#line 767 "parser.y" /* yacc.c:1646 */ { - (yyval.literal) = jv_string("reduce"); + (yyval.blk) = gen_object_matcher(gen_const((yyvsp[-2].literal)), (yyvsp[0].blk)); } -#line 3252 "parser.c" /* yacc.c:1646 */ +#line 3312 "parser.c" /* yacc.c:1646 */ break; case 121: -#line 767 "parser.y" /* yacc.c:1646 */ +#line 770 "parser.y" /* yacc.c:1646 */ { - (yyval.literal) = jv_string("foreach"); + (yyval.blk) = gen_object_matcher((yyvsp[-2].blk), (yyvsp[0].blk)); } -#line 3260 "parser.c" /* yacc.c:1646 */ +#line 3320 "parser.c" /* yacc.c:1646 */ break; case 122: -#line 770 "parser.y" /* yacc.c:1646 */ +#line 773 "parser.y" /* yacc.c:1646 */ { - (yyval.literal) = jv_string("end"); + (yyval.blk) = gen_object_matcher((yyvsp[-3].blk), (yyvsp[0].blk)); } -#line 3268 "parser.c" /* yacc.c:1646 */ +#line 3328 "parser.c" /* yacc.c:1646 */ break; case 123: -#line 773 "parser.y" /* yacc.c:1646 */ +#line 778 "parser.y" /* yacc.c:1646 */ { - (yyval.literal) = jv_string("and"); + (yyval.literal) = jv_string("as"); } -#line 3276 "parser.c" /* yacc.c:1646 */ +#line 3336 "parser.c" /* yacc.c:1646 */ break; case 124: -#line 776 "parser.y" /* yacc.c:1646 */ +#line 781 "parser.y" /* yacc.c:1646 */ { - (yyval.literal) = jv_string("or"); + (yyval.literal) = jv_string("def"); } -#line 3284 "parser.c" /* yacc.c:1646 */ - break; - - case 125: -#line 779 "parser.y" /* yacc.c:1646 */ - { - (yyval.literal) = jv_string("try"); -} -#line 3292 "parser.c" /* yacc.c:1646 */ - break; - - case 126: -#line 782 "parser.y" /* yacc.c:1646 */ - { - (yyval.literal) = jv_string("catch"); -} -#line 3300 "parser.c" /* yacc.c:1646 */ - break; - - case 127: -#line 785 "parser.y" /* yacc.c:1646 */ - { - (yyval.literal) = jv_string("label"); -} -#line 3308 "parser.c" /* yacc.c:1646 */ - break; - - case 128: -#line 788 "parser.y" /* yacc.c:1646 */ - { - (yyval.literal) = jv_string("break"); -} -#line 3316 "parser.c" /* yacc.c:1646 */ - break; - - case 129: -#line 791 "parser.y" /* yacc.c:1646 */ - { - (yyval.literal) = jv_string("__loc__"); -} -#line 3324 "parser.c" /* yacc.c:1646 */ - break; - - case 130: -#line 796 "parser.y" /* yacc.c:1646 */ - { - (yyval.blk)=gen_noop(); -} -#line 3332 "parser.c" /* yacc.c:1646 */ - break; - - case 131: -#line 799 "parser.y" /* yacc.c:1646 */ - { (yyval.blk) = (yyvsp[0].blk); } -#line 3338 "parser.c" /* yacc.c:1646 */ - break; - - case 132: -#line 800 "parser.y" /* yacc.c:1646 */ - { (yyval.blk)=block_join((yyvsp[-2].blk), (yyvsp[0].blk)); } #line 3344 "parser.c" /* yacc.c:1646 */ break; + case 125: +#line 784 "parser.y" /* yacc.c:1646 */ + { + (yyval.literal) = jv_string("module"); +} +#line 3352 "parser.c" /* yacc.c:1646 */ + break; + + case 126: +#line 787 "parser.y" /* yacc.c:1646 */ + { + (yyval.literal) = jv_string("import"); +} +#line 3360 "parser.c" /* yacc.c:1646 */ + break; + + case 127: +#line 790 "parser.y" /* yacc.c:1646 */ + { + (yyval.literal) = jv_string("if"); +} +#line 3368 "parser.c" /* yacc.c:1646 */ + break; + + case 128: +#line 793 "parser.y" /* yacc.c:1646 */ + { + (yyval.literal) = jv_string("then"); +} +#line 3376 "parser.c" /* yacc.c:1646 */ + break; + + case 129: +#line 796 "parser.y" /* yacc.c:1646 */ + { + (yyval.literal) = jv_string("else"); +} +#line 3384 "parser.c" /* yacc.c:1646 */ + break; + + case 130: +#line 799 "parser.y" /* yacc.c:1646 */ + { + (yyval.literal) = jv_string("elif"); +} +#line 3392 "parser.c" /* yacc.c:1646 */ + break; + + case 131: +#line 802 "parser.y" /* yacc.c:1646 */ + { + (yyval.literal) = jv_string("reduce"); +} +#line 3400 "parser.c" /* yacc.c:1646 */ + break; + + case 132: +#line 805 "parser.y" /* yacc.c:1646 */ + { + (yyval.literal) = jv_string("foreach"); +} +#line 3408 "parser.c" /* yacc.c:1646 */ + break; + case 133: -#line 801 "parser.y" /* yacc.c:1646 */ - { (yyval.blk) = (yyvsp[0].blk); } -#line 3350 "parser.c" /* yacc.c:1646 */ +#line 808 "parser.y" /* yacc.c:1646 */ + { + (yyval.literal) = jv_string("end"); +} +#line 3416 "parser.c" /* yacc.c:1646 */ break; case 134: -#line 804 "parser.y" /* yacc.c:1646 */ - { - (yyval.blk) = gen_dictpair(gen_const((yyvsp[-2].literal)), (yyvsp[0].blk)); - } -#line 3358 "parser.c" /* yacc.c:1646 */ +#line 811 "parser.y" /* yacc.c:1646 */ + { + (yyval.literal) = jv_string("and"); +} +#line 3424 "parser.c" /* yacc.c:1646 */ break; case 135: -#line 807 "parser.y" /* yacc.c:1646 */ +#line 814 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = gen_dictpair(gen_const((yyvsp[-2].literal)), (yyvsp[0].blk)); - } -#line 3366 "parser.c" /* yacc.c:1646 */ + (yyval.literal) = jv_string("or"); +} +#line 3432 "parser.c" /* yacc.c:1646 */ break; case 136: -#line 810 "parser.y" /* yacc.c:1646 */ +#line 817 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = gen_dictpair((yyvsp[-2].blk), (yyvsp[0].blk)); - } -#line 3374 "parser.c" /* yacc.c:1646 */ + (yyval.literal) = jv_string("try"); +} +#line 3440 "parser.c" /* yacc.c:1646 */ break; case 137: -#line 813 "parser.y" /* yacc.c:1646 */ +#line 820 "parser.y" /* yacc.c:1646 */ + { + (yyval.literal) = jv_string("catch"); +} +#line 3448 "parser.c" /* yacc.c:1646 */ + break; + + case 138: +#line 823 "parser.y" /* yacc.c:1646 */ + { + (yyval.literal) = jv_string("label"); +} +#line 3456 "parser.c" /* yacc.c:1646 */ + break; + + case 139: +#line 826 "parser.y" /* yacc.c:1646 */ + { + (yyval.literal) = jv_string("break"); +} +#line 3464 "parser.c" /* yacc.c:1646 */ + break; + + case 140: +#line 829 "parser.y" /* yacc.c:1646 */ + { + (yyval.literal) = jv_string("__loc__"); +} +#line 3472 "parser.c" /* yacc.c:1646 */ + break; + + case 141: +#line 834 "parser.y" /* yacc.c:1646 */ + { + (yyval.blk)=gen_noop(); +} +#line 3480 "parser.c" /* yacc.c:1646 */ + break; + + case 142: +#line 837 "parser.y" /* yacc.c:1646 */ + { (yyval.blk) = (yyvsp[0].blk); } +#line 3486 "parser.c" /* yacc.c:1646 */ + break; + + case 143: +#line 838 "parser.y" /* yacc.c:1646 */ + { (yyval.blk)=block_join((yyvsp[-2].blk), (yyvsp[0].blk)); } +#line 3492 "parser.c" /* yacc.c:1646 */ + break; + + case 144: +#line 839 "parser.y" /* yacc.c:1646 */ + { (yyval.blk) = (yyvsp[0].blk); } +#line 3498 "parser.c" /* yacc.c:1646 */ + break; + + case 145: +#line 842 "parser.y" /* yacc.c:1646 */ + { + (yyval.blk) = gen_dictpair(gen_const((yyvsp[-2].literal)), (yyvsp[0].blk)); + } +#line 3506 "parser.c" /* yacc.c:1646 */ + break; + + case 146: +#line 845 "parser.y" /* yacc.c:1646 */ + { + (yyval.blk) = gen_dictpair(gen_const((yyvsp[-2].literal)), (yyvsp[0].blk)); + } +#line 3514 "parser.c" /* yacc.c:1646 */ + break; + + case 147: +#line 848 "parser.y" /* yacc.c:1646 */ + { + (yyval.blk) = gen_dictpair((yyvsp[-2].blk), (yyvsp[0].blk)); + } +#line 3522 "parser.c" /* yacc.c:1646 */ + break; + + case 148: +#line 851 "parser.y" /* yacc.c:1646 */ { (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 3383 "parser.c" /* yacc.c:1646 */ +#line 3531 "parser.c" /* yacc.c:1646 */ break; - case 138: -#line 817 "parser.y" /* yacc.c:1646 */ + case 149: +#line 855 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_dictpair(gen_const(jv_copy((yyvsp[0].literal))), gen_index(gen_noop(), gen_const((yyvsp[0].literal)))); } -#line 3392 "parser.c" /* yacc.c:1646 */ +#line 3540 "parser.c" /* yacc.c:1646 */ break; - case 139: -#line 821 "parser.y" /* yacc.c:1646 */ + case 150: +#line 859 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_dictpair((yyvsp[-3].blk), (yyvsp[0].blk)); } -#line 3400 "parser.c" /* yacc.c:1646 */ +#line 3548 "parser.c" /* yacc.c:1646 */ break; - case 140: -#line 824 "parser.y" /* yacc.c:1646 */ + case 151: +#line 862 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = (yyvsp[0].blk); } -#line 3406 "parser.c" /* yacc.c:1646 */ +#line 3554 "parser.c" /* yacc.c:1646 */ break; -#line 3410 "parser.c" /* yacc.c:1646 */ +#line 3558 "parser.c" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -3641,7 +3789,7 @@ yyreturn: #endif return yyresult; } -#line 825 "parser.y" /* yacc.c:1906 */ +#line 863 "parser.y" /* yacc.c:1906 */ int jq_parse(struct locfile* locations, block* answer) { diff --git a/parser.y b/parser.y index 029b879d..ec30888b 100644 --- a/parser.y +++ b/parser.y @@ -107,7 +107,7 @@ struct lexer_param; %type Exp Term MkDict MkDictPair ExpD ElseBody QQString %type FuncDef FuncDefs String Import Imports Param Params -%type Arg Args Module +%type Arg Args Module Pattern ArrayPats ObjPats ObjPat %type Keyword %{ #include "lexer.h" @@ -308,24 +308,20 @@ FuncDef Exp %prec ';' { $$ = block_bind_referenced($1, $2, OP_IS_CALL_PSEUDO); } | -Term "as" '$' IDENT '|' Exp { - $$ = gen_var_binding($1, jv_string_value($4), $6); - jv_free($4); +Term "as" Pattern '|' Exp { + $$ = gen_destructure($1, $3, $5); } | -"reduce" Term "as" '$' IDENT '(' Exp ';' Exp ')' { - $$ = gen_reduce(jv_string_value($5), $2, $7, $9); - jv_free($5); +"reduce" Term "as" Pattern '(' Exp ';' Exp ')' { + $$ = gen_reduce($2, $4, $6, $8); } | -"foreach" Term "as" '$' IDENT '(' Exp ';' Exp ';' Exp ')' { - $$ = gen_foreach(jv_string_value($5), $2, $7, $9, $11); - jv_free($5); +"foreach" Term "as" Pattern '(' Exp ';' Exp ';' Exp ')' { + $$ = gen_foreach($2, $4, $6, $8, $10); } | -"foreach" Term "as" '$' IDENT '(' Exp ';' Exp ')' { - $$ = gen_foreach(jv_string_value($5), $2, $7, $9, gen_noop()); - jv_free($5); +"foreach" Term "as" Pattern '(' Exp ';' Exp ')' { + $$ = gen_foreach($2, $4, $6, $8, gen_noop()); } | "if" Exp "then" Exp ElseBody { @@ -736,6 +732,48 @@ Exp { $$ = gen_lambda($1); } +Pattern: +'$' IDENT { + $$ = gen_op_unbound(STOREV, jv_string_value($2)); + jv_free($2); +} | +'[' ArrayPats ']' { + $$ = BLOCK($2, gen_op_simple(POP)); +} | +'{' ObjPats '}' { + $$ = BLOCK($2, gen_op_simple(POP)); +} + +ArrayPats: +Pattern { + $$ = gen_array_matcher(gen_noop(), $1); +} | +ArrayPats ',' Pattern { + $$ = gen_array_matcher($1, $3); +} + +ObjPats: +ObjPat { + $$ = $1; +} | +ObjPats ',' ObjPat { + $$ = BLOCK($1, $3); +} + +ObjPat: +IDENT ':' Pattern { + $$ = gen_object_matcher(gen_const($1), $3); +} | +Keyword ':' Pattern { + $$ = gen_object_matcher(gen_const($1), $3); +} | +String ':' Pattern { + $$ = gen_object_matcher($1, $3); +} | +'(' Exp ')' ':' Pattern { + $$ = gen_object_matcher($2, $5); +} + Keyword: "as" { $$ = jv_string("as"); diff --git a/tests/all.test b/tests/all.test index 0511597a..d7c5ebf4 100644 --- a/tests/all.test +++ b/tests/all.test @@ -271,6 +271,14 @@ jq: error: *label-foo/0 is not defined at , line 1: null [0,1,2,3,4] +[foreach .[] as [$i, $j] (0; . + $i - $j)] +[[2,1], [5,3], [6,4]] +[1,3,5] + +[foreach .[] as {a:$a} (0; . + $a; -.)] +[{"a":1}, {"b":2}, {"a":3, "b":4}] +[-1, -1, -4] + [limit(3; .[])] [11,22,33,44,55,66,77,88,99] [11,22,33] @@ -373,6 +381,37 @@ null null [1,1,1] +[1, {c:3, d:4}] as [$a, {c:$b, b:$c}] | $a, $b, $c +null +1 +3 +null + +. as {as: $kw, "str": $str, ("e"+"x"+"p"): $exp} | [$kw, $str, $exp] +{"as": 1, "str": 2, "exp": 3} +[1, 2, 3] + +.[] as [$a, $b] | [$b, $a] +[[1], [1, 2, 3]] +[null, 1] +[2, 1] + +. as $i | . as [$i] | $i +[0] +0 + +. as [$i] | . as $i | $i +[0] +[0] + +%%FAIL +. as [] | null +jq: error: syntax error, unexpected ']', expecting '$' or '[' or '{' (Unix shell quoting issues?) at , line 1: + +%%FAIL +. as {} | null +jq: error: syntax error, unexpected '}' (Unix shell quoting issues?) at , line 1: + # [.,(.[] | {x:.},.),.,.[]] # @@ -610,6 +649,14 @@ reduce .[] as $x (0; . + $x) [1,2,4] 7 +reduce .[] as [$i, {j:$j}] (0; . + $i - $j) +[[2,{"j":1}], [5,{"j":3}], [6,{"j":4}]] +5 + +reduce [[1,2,10], [3,4,10]][] as [$i,$j] (0; . + $i * $j) +null +14 + . as $dot|any($dot[];not) [1,2,3,4,true,false,1,2,3,4,5] true