From 24005287f4ed1ffe486060b3156d5dfe6a3847da Mon Sep 17 00:00:00 2001 From: Nicolas Williams Date: Mon, 30 Mar 2015 15:55:54 -0500 Subject: [PATCH] Add `$__loc__` (fix #740) --- docs/content/3.manual/manual.yml | 12 + lexer.c | 338 +++--- lexer.h | 2 +- lexer.l | 1 + locfile.c | 2 +- locfile.h | 1 + parser.c | 1909 +++++++++++++++--------------- parser.h | 56 +- parser.y | 5 + tests/all.test | 4 + 10 files changed, 1178 insertions(+), 1152 deletions(-) diff --git a/docs/content/3.manual/manual.yml b/docs/content/3.manual/manual.yml index 1041f2ca..931aeb98 100644 --- a/docs/content/3.manual/manual.yml +++ b/docs/content/3.manual/manual.yml @@ -804,6 +804,18 @@ sections: null and objects would, but with the given message as the error's value. + - title: "`$__loc__`" + body: | + + Produces an object with a "file" key and a "line" key, with + the filename and line number where `$__loc__` occurs, as + values. + + examples: + - program: 'try error("\($__loc__)") catch .' + input: 'null' + output: ['"{\"file\":\"\",\"line\":1}"'] + - title: "`map(x)`, `map_values(x)`" body: | diff --git a/lexer.c b/lexer.c index 7350fe59..c71dc234 100644 --- a/lexer.c +++ b/lexer.c @@ -358,8 +358,8 @@ static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner ); *yy_cp = '\0'; \ yyg->yy_c_buf_p = yy_cp; -#define YY_NUM_RULES 47 -#define YY_END_OF_BUFFER 48 +#define YY_NUM_RULES 48 +#define YY_END_OF_BUFFER 49 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -367,23 +367,24 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static yyconst flex_int16_t yy_accept[141] = +static yyconst flex_int16_t yy_accept[148] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 48, 46, 45, 45, 46, 37, 1, 32, - 32, 33, 34, 32, 32, 32, 32, 32, 36, 32, - 32, 32, 46, 43, 43, 43, 43, 43, 43, 43, - 43, 43, 43, 43, 43, 43, 32, 41, 41, 39, - 42, 45, 2, 1, 27, 25, 23, 24, 31, 36, - 44, 44, 17, 26, 0, 29, 3, 30, 35, 43, - 0, 43, 4, 43, 43, 43, 43, 43, 43, 8, - 43, 43, 43, 13, 43, 43, 43, 22, 41, 40, - 38, 40, 44, 0, 36, 28, 36, 0, 12, 43, + 0, 0, 49, 47, 46, 46, 47, 38, 1, 33, + 33, 34, 35, 33, 33, 33, 33, 33, 37, 33, + 33, 33, 47, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 33, 42, 42, + 40, 43, 46, 2, 1, 28, 26, 24, 25, 32, + 37, 45, 45, 17, 27, 0, 30, 3, 31, 36, + 44, 0, 44, 44, 4, 44, 44, 44, 44, 44, + 44, 8, 44, 44, 44, 13, 44, 44, 44, 23, + 42, 41, 39, 41, 45, 0, 37, 29, 37, 0, - 43, 7, 43, 43, 14, 43, 43, 43, 43, 43, - 43, 18, 0, 40, 43, 43, 43, 11, 10, 43, - 43, 43, 43, 43, 9, 40, 21, 19, 43, 43, - 20, 43, 43, 40, 43, 5, 6, 15, 16, 0 + 44, 12, 44, 44, 7, 44, 44, 14, 44, 44, + 44, 44, 44, 44, 18, 0, 41, 44, 44, 44, + 44, 11, 10, 44, 44, 44, 44, 44, 9, 41, + 44, 21, 19, 44, 44, 20, 44, 44, 41, 44, + 44, 5, 6, 15, 22, 16, 0 } ; static yyconst flex_int32_t yy_ec[256] = @@ -428,130 +429,132 @@ static yyconst flex_int32_t yy_meta[54] = 1, 1, 1 } ; -static yyconst flex_int16_t yy_base[154] = +static yyconst flex_int16_t yy_base[161] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 51, 52, 293, 294, 57, 59, 270, 294, 0, 294, - 269, 294, 294, 268, 267, 266, 47, 47, 50, 265, - 264, 263, 0, 265, 48, 51, 52, 37, 53, 56, - 66, 57, 60, 59, 63, 68, 261, 0, 0, 294, - 78, 90, 294, 0, 294, 294, 294, 294, 93, 94, - 0, 100, 260, 294, 104, 294, 294, 294, 0, 262, - 259, 88, 255, 97, 83, 105, 106, 109, 113, 251, - 107, 115, 116, 248, 119, 120, 117, 294, 0, 234, - 294, 231, 0, 240, 228, 294, 223, 0, 218, 118, + 51, 52, 306, 307, 57, 59, 283, 307, 0, 307, + 282, 307, 307, 281, 280, 279, 47, 47, 50, 278, + 277, 276, 0, 278, 48, 51, 53, 52, 37, 59, + 57, 66, 56, 63, 68, 70, 71, 274, 0, 0, + 307, 81, 90, 307, 0, 307, 307, 307, 307, 95, + 100, 0, 97, 273, 307, 106, 307, 307, 307, 0, + 275, 274, 85, 104, 273, 101, 77, 109, 110, 113, + 114, 272, 116, 119, 115, 271, 121, 122, 123, 307, + 0, 258, 307, 254, 0, 261, 258, 307, 254, 0, - 121, 213, 124, 122, 211, 127, 128, 130, 138, 141, - 143, 208, 154, 196, 196, 149, 146, 183, 182, 150, - 151, 152, 154, 157, 181, 165, 169, 166, 158, 156, - 164, 160, 162, 149, 161, 155, 82, 79, 71, 294, - 204, 213, 219, 224, 229, 238, 247, 252, 257, 259, - 264, 268, 272 + 124, 250, 132, 125, 248, 126, 134, 236, 135, 128, + 143, 136, 146, 147, 231, 157, 217, 222, 150, 156, + 155, 220, 217, 157, 158, 159, 161, 163, 215, 195, + 167, 193, 192, 169, 162, 188, 172, 173, 176, 168, + 175, 182, 164, 86, 78, 76, 307, 213, 222, 228, + 233, 238, 247, 256, 261, 266, 268, 273, 277, 281 } ; -static yyconst flex_int16_t yy_def[154] = +static yyconst flex_int16_t yy_def[161] = { 0, - 140, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 141, 141, 140, 140, 140, 140, 140, 140, 142, 140, - 140, 140, 140, 140, 140, 140, 143, 140, 140, 140, - 140, 140, 144, 145, 145, 145, 145, 145, 145, 145, - 145, 145, 145, 145, 145, 145, 140, 146, 146, 140, - 147, 140, 140, 142, 140, 140, 140, 140, 140, 140, - 148, 148, 140, 140, 140, 140, 140, 140, 144, 145, - 140, 145, 145, 145, 145, 145, 145, 145, 145, 145, - 145, 145, 145, 145, 145, 145, 145, 140, 146, 140, - 140, 149, 148, 140, 148, 140, 140, 150, 145, 145, + 147, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 148, 148, 147, 147, 147, 147, 147, 147, 149, 147, + 147, 147, 147, 147, 147, 147, 150, 147, 147, 147, + 147, 147, 151, 152, 152, 152, 152, 152, 152, 152, + 152, 152, 152, 152, 152, 152, 152, 147, 153, 153, + 147, 154, 147, 147, 149, 147, 147, 147, 147, 147, + 147, 155, 155, 147, 147, 147, 147, 147, 147, 151, + 152, 147, 152, 152, 152, 152, 152, 152, 152, 152, + 152, 152, 152, 152, 152, 152, 152, 152, 152, 147, + 153, 147, 147, 156, 155, 147, 155, 147, 147, 157, - 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, - 145, 145, 147, 151, 145, 145, 145, 145, 145, 145, - 145, 145, 145, 145, 145, 152, 145, 145, 145, 145, - 145, 145, 145, 153, 145, 145, 145, 145, 145, 0, - 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, - 140, 140, 140 + 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, + 152, 152, 152, 152, 152, 154, 158, 152, 152, 152, + 152, 152, 152, 152, 152, 152, 152, 152, 152, 159, + 152, 152, 152, 152, 152, 152, 152, 152, 160, 152, + 152, 152, 152, 152, 152, 152, 0, 147, 147, 147, + 147, 147, 147, 147, 147, 147, 147, 147, 147, 147 } ; -static yyconst flex_int16_t yy_nxt[348] = +static yyconst flex_int16_t yy_nxt[361] = { 0, 14, 15, 16, 14, 17, 18, 19, 20, 21, 22, 23, 24, 25, 20, 26, 27, 28, 29, 20, 20, 30, 31, 32, 20, 33, 34, 34, 22, 14, 23, - 34, 35, 36, 37, 38, 39, 40, 34, 41, 34, - 42, 43, 34, 44, 34, 45, 34, 46, 34, 34, - 22, 47, 23, 49, 49, 71, 50, 50, 52, 52, - 52, 52, 59, 63, 60, 60, 71, 60, 64, 71, - 71, 71, 76, 62, 71, 71, 65, 71, 71, 51, - 51, 71, 62, 75, 71, 65, 71, 91, 82, 71, - 72, 52, 52, 77, 73, 78, 74, 71, 85, 79, + 35, 36, 37, 38, 39, 40, 41, 34, 42, 34, + 43, 44, 34, 45, 34, 46, 34, 47, 34, 34, + 22, 48, 23, 50, 50, 72, 51, 51, 53, 53, + 53, 53, 60, 64, 61, 61, 72, 61, 65, 72, + 72, 72, 78, 63, 72, 72, 66, 72, 73, 52, + 52, 72, 63, 77, 72, 66, 72, 84, 72, 72, + 93, 53, 53, 74, 72, 72, 72, 75, 76, 79, - 71, 71, 80, 83, 84, 86, 71, 81, 60, 60, - 60, 60, 94, 87, 94, 71, 94, 95, 94, 65, - 65, 97, 99, 71, 71, 71, 92, 71, 65, 65, - 101, 71, 100, 71, 71, 71, 71, 71, 71, 71, - 71, 102, 71, 105, 103, 71, 71, 108, 71, 116, - 109, 107, 104, 110, 117, 111, 71, 119, 106, 71, - 118, 71, 120, 140, 71, 122, 112, 71, 71, 71, - 71, 121, 71, 71, 71, 71, 71, 113, 71, 71, - 71, 129, 71, 128, 71, 125, 123, 71, 127, 124, - 133, 135, 131, 113, 132, 137, 130, 138, 139, 71, + 81, 80, 82, 72, 72, 87, 85, 83, 88, 96, + 61, 96, 61, 86, 97, 61, 89, 61, 96, 72, + 96, 66, 72, 99, 104, 101, 66, 72, 72, 94, + 66, 72, 72, 72, 72, 66, 103, 72, 102, 72, + 72, 72, 72, 72, 72, 105, 72, 108, 106, 112, + 72, 111, 72, 72, 72, 113, 107, 114, 121, 109, + 110, 72, 122, 120, 72, 72, 147, 119, 72, 123, + 124, 125, 115, 72, 72, 72, 72, 72, 126, 72, + 72, 72, 72, 131, 127, 72, 72, 72, 134, 129, + 72, 72, 133, 72, 128, 132, 138, 140, 145, 136, - 71, 71, 92, 136, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 54, 71, 54, 54, 54, 54, 54, - 54, 54, 61, 61, 113, 61, 71, 61, 69, 71, - 69, 71, 69, 70, 70, 70, 71, 70, 89, 89, - 97, 89, 89, 89, 89, 95, 89, 90, 90, 90, - 90, 90, 90, 90, 90, 90, 93, 97, 93, 113, - 93, 114, 113, 114, 114, 115, 71, 115, 126, 71, - 126, 126, 134, 71, 134, 134, 90, 98, 90, 90, - 71, 96, 88, 71, 68, 67, 66, 58, 57, 56, - 55, 53, 140, 13, 140, 140, 140, 140, 140, 140, + 72, 137, 141, 135, 116, 94, 72, 143, 144, 142, + 72, 72, 146, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 55, 116, 55, 55, 55, 55, 55, 55, + 55, 62, 62, 72, 62, 72, 62, 70, 72, 70, + 72, 70, 71, 71, 71, 116, 71, 91, 91, 72, + 91, 91, 91, 91, 72, 91, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 95, 72, 95, 72, 95, + 117, 99, 117, 117, 118, 97, 118, 130, 99, 130, + 130, 139, 116, 139, 139, 92, 116, 92, 92, 72, + 72, 72, 100, 72, 98, 90, 72, 69, 68, 67, - 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, - 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, - 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, - 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, - 140, 140, 140, 140, 140, 140, 140 + 59, 58, 57, 56, 54, 147, 13, 147, 147, 147, + 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, + 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, + 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, + 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, + 147, 147, 147, 147, 147, 147, 147, 147, 147, 147 } ; -static yyconst flex_int16_t yy_chk[348] = +static yyconst flex_int16_t yy_chk[361] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 11, 12, 38, 11, 12, 15, 15, + 1, 1, 1, 11, 12, 39, 11, 12, 15, 15, 16, 16, 27, 28, 27, 29, 35, 29, 28, 36, - 37, 39, 38, 27, 40, 42, 29, 44, 43, 11, - 12, 45, 27, 37, 41, 29, 46, 51, 42, 139, - 35, 52, 52, 39, 35, 39, 36, 138, 45, 40, + 38, 37, 39, 27, 43, 41, 29, 40, 35, 11, + 12, 44, 27, 38, 42, 29, 45, 43, 46, 47, + 52, 53, 53, 36, 146, 77, 145, 36, 37, 40, - 137, 75, 41, 43, 44, 46, 72, 41, 59, 60, - 59, 60, 62, 46, 62, 74, 65, 62, 65, 59, - 60, 65, 72, 76, 77, 81, 51, 78, 59, 60, - 75, 79, 74, 82, 83, 87, 100, 85, 86, 101, - 104, 76, 103, 78, 77, 106, 107, 82, 108, 100, - 83, 81, 77, 85, 101, 86, 109, 104, 79, 110, - 103, 111, 106, 113, 117, 108, 87, 116, 120, 121, - 122, 107, 123, 136, 130, 124, 129, 134, 132, 135, - 133, 120, 131, 117, 128, 111, 109, 127, 116, 110, - 124, 129, 122, 126, 123, 132, 121, 133, 135, 125, + 41, 40, 42, 73, 144, 46, 44, 42, 47, 63, + 60, 63, 60, 45, 63, 61, 47, 61, 66, 76, + 66, 60, 74, 66, 77, 73, 61, 78, 79, 52, + 60, 80, 81, 85, 83, 61, 76, 84, 74, 87, + 88, 89, 101, 104, 106, 78, 110, 80, 79, 85, + 103, 84, 107, 109, 112, 87, 79, 88, 104, 81, + 83, 111, 106, 103, 113, 114, 116, 101, 119, 107, + 109, 110, 89, 121, 120, 124, 125, 126, 111, 127, + 135, 128, 143, 119, 112, 131, 140, 134, 124, 114, + 137, 138, 121, 141, 113, 120, 128, 131, 140, 126, - 119, 118, 113, 130, 141, 141, 141, 141, 141, 141, - 141, 141, 141, 142, 115, 142, 142, 142, 142, 142, - 142, 142, 143, 143, 114, 143, 112, 143, 144, 105, - 144, 102, 144, 145, 145, 145, 99, 145, 146, 146, - 97, 146, 146, 146, 146, 95, 146, 147, 147, 147, - 147, 147, 147, 147, 147, 147, 148, 94, 148, 92, - 148, 149, 90, 149, 149, 150, 84, 150, 151, 80, - 151, 151, 152, 73, 152, 152, 153, 71, 153, 153, - 70, 63, 47, 34, 32, 31, 30, 26, 25, 24, - 21, 17, 13, 140, 140, 140, 140, 140, 140, 140, + 142, 127, 134, 125, 139, 116, 136, 137, 138, 135, + 133, 132, 141, 148, 148, 148, 148, 148, 148, 148, + 148, 148, 149, 130, 149, 149, 149, 149, 149, 149, + 149, 150, 150, 129, 150, 123, 150, 151, 122, 151, + 118, 151, 152, 152, 152, 117, 152, 153, 153, 115, + 153, 153, 153, 153, 108, 153, 154, 154, 154, 154, + 154, 154, 154, 154, 154, 155, 105, 155, 102, 155, + 156, 99, 156, 156, 157, 97, 157, 158, 96, 158, + 158, 159, 94, 159, 159, 160, 92, 160, 160, 86, + 82, 75, 72, 71, 64, 48, 34, 32, 31, 30, - 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, - 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, - 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, - 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, - 140, 140, 140, 140, 140, 140, 140 + 26, 25, 24, 21, 17, 13, 147, 147, 147, 147, + 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, + 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, + 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, + 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, + 147, 147, 147, 147, 147, 147, 147, 147, 147, 147 } ; /* The intent behind this definition is that it'll catch @@ -587,7 +590,7 @@ struct lexer_param; static int enter(int opening, int state, yyscan_t yyscanner); static int try_exit(int closing, int state, yyscan_t yyscanner); #define YY_NO_INPUT 1 -#line 591 "lexer.c" +#line 594 "lexer.c" #define INITIAL 0 #define IN_PAREN 1 @@ -843,7 +846,7 @@ YY_DECL #line 38 "lexer.l" -#line 847 "lexer.c" +#line 850 "lexer.c" yylval = yylval_param; @@ -900,13 +903,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 141 ) + if ( yy_current_state >= 148 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 294 ); + while ( yy_base[yy_current_state] != 307 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -1038,114 +1041,119 @@ YY_RULE_SETUP case 22: YY_RULE_SETUP #line 62 "lexer.l" -{ return SETPIPE; } +{ return LOC; } YY_BREAK case 23: YY_RULE_SETUP #line 63 "lexer.l" -{ return SETPLUS; } +{ return SETPIPE; } YY_BREAK case 24: YY_RULE_SETUP #line 64 "lexer.l" -{ return SETMINUS; } +{ return SETPLUS; } YY_BREAK case 25: YY_RULE_SETUP #line 65 "lexer.l" -{ return SETMULT; } +{ return SETMINUS; } YY_BREAK case 26: YY_RULE_SETUP #line 66 "lexer.l" -{ return SETDIV; } +{ return SETMULT; } YY_BREAK case 27: YY_RULE_SETUP #line 67 "lexer.l" -{ return SETMOD; } +{ return SETDIV; } YY_BREAK case 28: YY_RULE_SETUP #line 68 "lexer.l" -{ return SETDEFINEDOR; } +{ return SETMOD; } YY_BREAK case 29: YY_RULE_SETUP #line 69 "lexer.l" -{ return LESSEQ; } +{ return SETDEFINEDOR; } YY_BREAK case 30: YY_RULE_SETUP #line 70 "lexer.l" -{ return GREATEREQ; } +{ return LESSEQ; } YY_BREAK case 31: YY_RULE_SETUP #line 71 "lexer.l" -{ return REC; } +{ return GREATEREQ; } YY_BREAK case 32: YY_RULE_SETUP #line 72 "lexer.l" -{ return yytext[0];} +{ return REC; } YY_BREAK case 33: YY_RULE_SETUP -#line 74 "lexer.l" +#line 73 "lexer.l" +{ return yytext[0];} + YY_BREAK +case 34: +YY_RULE_SETUP +#line 75 "lexer.l" { return enter(yytext[0], YY_START, yyscanner); } YY_BREAK -case 34: +case 35: YY_RULE_SETUP -#line 78 "lexer.l" +#line 79 "lexer.l" { return try_exit(yytext[0], YY_START, yyscanner); } YY_BREAK -case 35: +case 36: YY_RULE_SETUP -#line 82 "lexer.l" +#line 83 "lexer.l" { yylval->literal = jv_string_sized(yytext + 1, yyleng - 1); return FORMAT; } YY_BREAK -case 36: +case 37: YY_RULE_SETUP -#line 86 "lexer.l" +#line 87 "lexer.l" { yylval->literal = jv_parse_sized(yytext, yyleng); return LITERAL; } YY_BREAK -case 37: +case 38: YY_RULE_SETUP -#line 90 "lexer.l" +#line 91 "lexer.l" { yy_push_state(IN_QQSTRING, yyscanner); return QQSTRING_START; } YY_BREAK -case 38: +case 39: YY_RULE_SETUP -#line 96 "lexer.l" +#line 97 "lexer.l" { return enter(QQSTRING_INTERP_START, YY_START, yyscanner); } YY_BREAK -case 39: +case 40: YY_RULE_SETUP -#line 99 "lexer.l" +#line 100 "lexer.l" { yy_pop_state(yyscanner); return QQSTRING_END; } YY_BREAK -case 40: -/* rule 40 can match eol */ +case 41: +/* rule 41 can match eol */ YY_RULE_SETUP -#line 103 "lexer.l" +#line 104 "lexer.l" { /* pass escapes to the json parser */ jv escapes = jv_string_fmt("\"%.*s\"", (int)yyleng, yytext); @@ -1154,50 +1162,50 @@ YY_RULE_SETUP return QQSTRING_TEXT; } YY_BREAK -case 41: -/* rule 41 can match eol */ +case 42: +/* rule 42 can match eol */ YY_RULE_SETUP -#line 110 "lexer.l" +#line 111 "lexer.l" { yylval->literal = jv_string_sized(yytext, yyleng); return QQSTRING_TEXT; } YY_BREAK -case 42: +case 43: YY_RULE_SETUP -#line 114 "lexer.l" +#line 115 "lexer.l" { return INVALID_CHARACTER; } YY_BREAK -case 43: -YY_RULE_SETUP -#line 120 "lexer.l" -{ yylval->literal = jv_string(yytext); return IDENT;} - YY_BREAK case 44: YY_RULE_SETUP #line 121 "lexer.l" -{ yylval->literal = jv_string(yytext+1); return FIELD;} +{ yylval->literal = jv_string(yytext); return IDENT;} YY_BREAK case 45: -/* rule 45 can match eol */ YY_RULE_SETUP -#line 123 "lexer.l" -{} +#line 122 "lexer.l" +{ yylval->literal = jv_string(yytext+1); return FIELD;} YY_BREAK case 46: +/* rule 46 can match eol */ YY_RULE_SETUP -#line 125 "lexer.l" -{ return INVALID_CHARACTER; } +#line 124 "lexer.l" +{} YY_BREAK case 47: YY_RULE_SETUP -#line 127 "lexer.l" +#line 126 "lexer.l" +{ return INVALID_CHARACTER; } + YY_BREAK +case 48: +YY_RULE_SETUP +#line 128 "lexer.l" YY_FATAL_ERROR( "flex scanner jammed" ); YY_BREAK -#line 1201 "lexer.c" +#line 1209 "lexer.c" case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(IN_PAREN): case YY_STATE_EOF(IN_BRACKET): @@ -1496,7 +1504,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 141 ) + if ( yy_current_state >= 148 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; @@ -1525,11 +1533,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 141 ) + if ( yy_current_state >= 148 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - yy_is_jam = (yy_current_state == 140); + yy_is_jam = (yy_current_state == 147); return yy_is_jam ? 0 : yy_current_state; } @@ -2361,7 +2369,7 @@ static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner) #define YYTABLES_NAME "yytables" -#line 127 "lexer.l" +#line 128 "lexer.l" /* perhaps these should be calls... */ diff --git a/lexer.h b/lexer.h index 36b63351..9e0ecef8 100644 --- a/lexer.h +++ b/lexer.h @@ -354,7 +354,7 @@ extern int jq_yylex \ #undef YY_DECL #endif -#line 127 "lexer.l" +#line 128 "lexer.l" #line 361 "lexer.h" diff --git a/lexer.l b/lexer.l index bde11fb9..98ea9167 100644 --- a/lexer.l +++ b/lexer.l @@ -59,6 +59,7 @@ struct lexer_param; "catch" { return CATCH; } "label" { return LABEL; } "break" { return BREAK; } +"__loc__" { return LOC; } "|=" { return SETPIPE; } "+=" { return SETPLUS; } "-=" { return SETMINUS; } diff --git a/locfile.c b/locfile.c index 7753d901..97bb3482 100644 --- a/locfile.c +++ b/locfile.c @@ -47,7 +47,7 @@ void locfile_free(struct locfile* l) { } } -static int locfile_get_line(struct locfile* l, int pos) { +int locfile_get_line(struct locfile* l, int pos) { assert(pos < l->length); int line = 1; while (l->linemap[line] <= pos) line++; // == if pos at start (before, never ==, because pos never on \n) diff --git a/locfile.h b/locfile.h index 8c141698..a7801916 100644 --- a/locfile.h +++ b/locfile.h @@ -22,6 +22,7 @@ struct locfile { struct locfile* locfile_init(jq_state *, const char *, const char *, int); struct locfile* locfile_retain(struct locfile *); +int locfile_get_line(struct locfile *, int); void locfile_free(struct locfile *); void locfile_locate(struct locfile *, location, const char *, ...); diff --git a/parser.c b/parser.c index 2c977428..48547ab7 100644 --- a/parser.c +++ b/parser.c @@ -154,19 +154,20 @@ struct lexer_param; CATCH = 282, LABEL = 283, BREAK = 284, - SETPIPE = 285, - SETPLUS = 286, - SETMINUS = 287, - SETMULT = 288, - SETDIV = 289, - SETDEFINEDOR = 290, - LESSEQ = 291, - GREATEREQ = 292, - QQSTRING_START = 293, - QQSTRING_TEXT = 294, - QQSTRING_INTERP_START = 295, - QQSTRING_INTERP_END = 296, - QQSTRING_END = 297 + LOC = 285, + SETPIPE = 286, + SETPLUS = 287, + SETMINUS = 288, + SETMULT = 289, + SETDIV = 290, + SETDEFINEDOR = 291, + LESSEQ = 292, + GREATEREQ = 293, + QQSTRING_START = 294, + QQSTRING_TEXT = 295, + QQSTRING_INTERP_START = 296, + QQSTRING_INTERP_END = 297, + QQSTRING_END = 298 }; #endif /* Tokens. */ @@ -197,19 +198,20 @@ struct lexer_param; #define CATCH 282 #define LABEL 283 #define BREAK 284 -#define SETPIPE 285 -#define SETPLUS 286 -#define SETMINUS 287 -#define SETMULT 288 -#define SETDIV 289 -#define SETDEFINEDOR 290 -#define LESSEQ 291 -#define GREATEREQ 292 -#define QQSTRING_START 293 -#define QQSTRING_TEXT 294 -#define QQSTRING_INTERP_START 295 -#define QQSTRING_INTERP_END 296 -#define QQSTRING_END 297 +#define LOC 285 +#define SETPIPE 286 +#define SETPLUS 287 +#define SETMINUS 288 +#define SETMULT 289 +#define SETDIV 290 +#define SETDEFINEDOR 291 +#define LESSEQ 292 +#define GREATEREQ 293 +#define QQSTRING_START 294 +#define QQSTRING_TEXT 295 +#define QQSTRING_INTERP_START 296 +#define QQSTRING_INTERP_END 297 +#define QQSTRING_END 298 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -221,7 +223,7 @@ union YYSTYPE jv literal; block blk; -#line 225 "parser.c" /* yacc.c:355 */ +#line 227 "parser.c" /* yacc.c:355 */ }; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 @@ -248,7 +250,7 @@ int yyparse (block* answer, int* errors, struct locfile* locations, struct lexer #endif /* !YY_YY_PARSER_H_INCLUDED */ /* Copy the second part of user declarations. */ -#line 110 "parser.y" /* yacc.c:358 */ +#line 111 "parser.y" /* yacc.c:358 */ #include "lexer.h" struct lexer_param { @@ -404,7 +406,7 @@ static block gen_update(block object, block val, int optype) { } -#line 408 "parser.c" /* yacc.c:358 */ +#line 410 "parser.c" /* yacc.c:358 */ #ifdef short # undef short @@ -648,21 +650,21 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 27 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 1845 +#define YYLAST 1753 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 64 +#define YYNTOKENS 65 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 21 /* YYNRULES -- Number of rules. */ -#define YYNRULES 120 +#define YYNRULES 121 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 253 +#define YYNSTATES 254 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 297 +#define YYMAXUTOK 298 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) @@ -674,16 +676,16 @@ 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, 55, 52, 2, 2, - 56, 57, 50, 48, 44, 49, 59, 51, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 58, 54, - 46, 45, 47, 53, 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, 2, 2, 59, 55, + 47, 46, 48, 54, 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, 60, 2, 61, 2, 2, 2, 2, 2, 2, + 2, 61, 2, 62, 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, 62, 43, 63, 2, 2, 2, 2, + 2, 2, 2, 63, 44, 64, 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, @@ -700,26 +702,26 @@ static const yytype_uint8 yytranslate[] = 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 41, 42 + 35, 36, 37, 38, 39, 40, 41, 42, 43 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 268, 268, 271, 276, 279, 289, 292, 297, 300, - 305, 309, 314, 319, 324, 329, 332, 337, 341, 345, - 350, 362, 366, 370, 374, 378, 382, 386, 390, 394, - 398, 402, 406, 410, 414, 418, 422, 426, 430, 434, - 438, 442, 446, 450, 454, 458, 462, 466, 471, 480, - 487, 499, 513, 518, 524, 527, 532, 537, 544, 544, - 548, 548, 555, 558, 561, 567, 570, 575, 578, 581, - 587, 590, 593, 601, 605, 608, 611, 614, 617, 620, - 623, 626, 629, 633, 639, 642, 645, 648, 651, 654, - 657, 660, 663, 666, 669, 672, 675, 678, 681, 684, - 687, 694, 698, 710, 715, 716, 717, 718, 721, 724, - 729, 734, 737, 738, 739, 742, 745, 748, 752, 756, - 759 + 0, 269, 269, 272, 277, 280, 290, 293, 298, 301, + 306, 310, 315, 320, 325, 330, 333, 338, 342, 346, + 351, 363, 367, 371, 375, 379, 383, 387, 391, 395, + 399, 403, 407, 411, 415, 419, 423, 427, 431, 435, + 439, 443, 447, 451, 455, 459, 463, 467, 472, 481, + 488, 500, 514, 519, 525, 528, 533, 538, 545, 545, + 549, 549, 556, 559, 562, 568, 571, 576, 579, 582, + 588, 591, 594, 602, 606, 609, 612, 615, 618, 621, + 624, 627, 630, 634, 640, 643, 646, 649, 652, 655, + 658, 661, 664, 667, 670, 673, 676, 679, 682, 685, + 688, 695, 699, 703, 715, 720, 721, 722, 723, 726, + 729, 734, 739, 742, 743, 744, 747, 750, 753, 757, + 761, 764 }; #endif @@ -733,14 +735,14 @@ static const char *const yytname[] = "\"as\"", "\"def\"", "\"module\"", "\"import\"", "\"if\"", "\"then\"", "\"else\"", "\"elif\"", "\"reduce\"", "\"foreach\"", "\"end\"", "\"and\"", "\"or\"", "\"try\"", "\"catch\"", "\"label\"", "\"break\"", - "\"|=\"", "\"+=\"", "\"-=\"", "\"*=\"", "\"/=\"", "\"//=\"", "\"<=\"", - "\">=\"", "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", "MkDict", "MkDictPair", YY_NULLPTR + "\"__loc__\"", "\"|=\"", "\"+=\"", "\"-=\"", "\"*=\"", "\"/=\"", + "\"//=\"", "\"<=\"", "\">=\"", "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", "MkDict", "MkDictPair", YY_NULLPTR }; #endif @@ -753,52 +755,52 @@ static const yytype_uint16 yytoknum[] = 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, - 295, 296, 297, 124, 44, 61, 60, 62, 43, 45, - 42, 47, 37, 63, 59, 36, 40, 41, 58, 46, - 91, 93, 123, 125 + 295, 296, 297, 298, 124, 44, 61, 60, 62, 43, + 45, 42, 47, 37, 63, 59, 36, 40, 41, 58, + 46, 91, 93, 123, 125 }; # endif -#define YYPACT_NINF -97 +#define YYPACT_NINF -121 #define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-97))) + (!!((Yystate) == (-121))) -#define YYTABLE_NINF -112 +#define YYTABLE_NINF -113 #define yytable_value_is_error(Yytable_value) \ - (!!((Yytable_value) == (-112))) + (!!((Yytable_value) == (-113))) /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ static const yytype_int16 yypact[] = { - 9, 769, 14, 15, -23, -18, -97, 1, -97, 47, - 769, 452, 452, 769, -19, 28, -97, 769, 50, 412, - 227, 350, 49, 1151, 769, -97, -2, -97, 0, 769, - 15, 769, -97, -97, -54, 1518, 32, 35, 72, 98, - -97, 99, -97, 56, -97, 58, 1031, -97, 112, 1, - 63, 60, -97, 847, -36, 70, 472, 71, 67, 87, - 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, - 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, - 769, 769, 769, 769, -97, -97, 1668, 80, 79, 0, - 288, 123, -97, 1668, 769, -97, 1668, -44, -97, -97, - -3, 769, 532, 82, 83, 592, 100, -97, 2, -97, - -97, -97, -97, -97, -97, 89, -97, 154, 84, 1061, - 154, -97, 89, 1728, 1774, 1774, 1698, 1792, 1746, 1728, - 1728, 1728, 1728, 1728, 1728, 1774, 1774, 1668, 1698, 1728, - 1774, 1774, 56, 56, 95, 95, 95, -97, 138, 96, - 90, 769, 101, 802, 30, -97, 769, -97, 7, -97, - 149, -32, -97, 1197, -97, 1473, 153, 159, -97, -97, - 769, -97, 769, -97, 120, -97, 154, 122, 38, 108, - 110, 122, -97, 129, -97, -97, 892, -97, 118, 128, - 651, 171, -97, -97, -97, -3, 124, -97, 769, 769, - -97, 130, 132, 1668, 1548, -97, 154, 154, 154, 769, - 131, 137, 937, -97, -97, 1243, 710, -97, 769, 1593, - 1638, 769, 769, -97, 122, 122, 122, 1668, -97, -97, - 140, -97, -97, 1289, 1335, -97, 769, 1381, 1427, -97, - -97, -97, 1473, 769, 769, -97, 1091, 982, -97, 769, - -97, 1121, -97 + 7, 698, 8, 15, -25, -40, -121, 5, -121, 31, + 698, 533, 533, 698, 40, 28, -121, 698, 3, 379, + 228, 316, 91, 1090, 698, -121, -2, -121, -3, 698, + 15, 698, -121, -121, -7, 1465, 108, 114, 24, 49, + -121, 50, -121, -14, -121, -121, 41, 966, -121, 54, + 5, 60, 55, -121, 778, -43, 57, 405, 61, 58, + 78, 698, 698, 698, 698, 698, 698, 698, 698, 698, + 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, + 698, 698, 698, 698, 698, -121, -121, 1619, 70, 69, + -3, 290, 113, -121, 1619, 698, -121, 1619, -45, -121, + -121, 30, 698, 466, 72, 73, 492, 89, -121, 2, + -121, -121, -121, -121, -121, -121, 93, -121, 102, 76, + 997, 102, -121, 93, 1681, 935, 935, 1650, 1699, 129, + 1681, 1681, 1681, 1681, 1681, 1681, 935, 935, 1619, 1650, + 1681, 935, 935, -14, -14, 81, 81, 81, -121, 132, + 83, 80, 698, 84, 732, 37, -121, 698, -121, 6, + -121, 139, -31, -121, 1137, -121, 1419, 140, 141, -121, + -121, 698, -121, 698, -121, 101, -121, 102, 103, 43, + 90, 95, 103, -121, 116, -121, -121, 824, -121, 552, + 107, 578, 160, -121, -121, -121, 30, 125, -121, 698, + 698, -121, 128, 130, 1619, 1496, -121, 102, 102, 102, + 698, 119, 135, 870, -121, -121, 1184, 638, -121, 698, + 1542, 1588, 698, 698, -121, 103, 103, 103, 1619, -121, + -121, 137, -121, -121, 1231, 1278, -121, 698, 1325, 1372, + -121, -121, -121, 1419, 698, 698, -121, 1028, 916, -121, + 698, -121, 1059, -121 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -806,48 +808,48 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_uint8 yydefact[] = { - 4, 0, 0, 6, 102, 79, 94, 96, 71, 0, + 4, 0, 0, 6, 103, 79, 94, 96, 71, 0, 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, 101, 0, 0, 82, 0, 0, - 81, 0, 99, 0, 0, 118, 0, 117, 0, 112, + 73, 0, 62, 32, 102, 101, 0, 0, 82, 0, + 0, 81, 0, 99, 0, 0, 119, 0, 118, 0, + 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, - 0, 0, 3, 2, 8, 7, 110, 0, 108, 62, - 0, 0, 0, 0, 0, 0, 0, 72, 0, 104, - 97, 83, 77, 105, 98, 0, 107, 0, 0, 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, 103, 0, 57, - 0, 0, 54, 0, 16, 0, 0, 0, 19, 17, - 0, 63, 0, 59, 0, 114, 0, 115, 69, 0, - 0, 116, 113, 0, 76, 106, 0, 86, 0, 85, - 0, 0, 109, 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, 120, 119, 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, 0, 0, 21, 5, 10, 78, 0, + 0, 0, 0, 3, 2, 8, 7, 111, 0, 109, + 62, 0, 0, 0, 0, 0, 0, 0, 72, 0, + 105, 97, 83, 77, 106, 98, 0, 108, 0, 0, + 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, 115, 0, 116, 69, + 0, 0, 117, 114, 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, 121, 120, 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 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -97, -97, -97, 146, 91, -1, -97, -8, -97, -4, - -5, -97, -97, 97, -48, -88, -6, -97, 39, -96, - -97 + -121, -121, -121, 156, 97, -1, -121, -4, -121, 0, + -5, -121, -121, 94, -50, -120, -6, -121, 38, -97, + -121 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 2, 3, 29, 92, 86, 30, 24, 161, 162, - 25, 42, 99, 108, 200, 177, 26, 97, 98, 58, - 59 + -1, 2, 3, 29, 93, 87, 30, 24, 162, 163, + 25, 42, 100, 109, 201, 178, 26, 98, 99, 59, + 60 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -855,430 +857,412 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { - 23, 159, 100, 87, 101, 36, 37, 49, 115, 35, - 156, 88, 38, 157, 27, 50, 43, 57, 46, 175, - 53, 94, 195, 91, 1, 196, 182, 116, 93, 40, - 96, 28, 181, 31, 190, 32, 39, 87, 16, 33, - 87, 171, 172, 87, 173, 103, 171, 172, 104, 193, - 54, 34, 160, 55, 44, 119, 49, 89, 90, 123, + 23, 182, 116, 88, 50, 36, 37, 44, 27, 35, + 157, 89, 38, 158, 32, 51, 43, 58, 47, 176, + 54, 117, 1, 92, 196, 95, 183, 197, 94, 40, + 97, 28, 31, 45, 160, 34, 16, 82, 83, 84, + 85, 191, 172, 173, 33, 174, 172, 173, 88, 194, + 101, 106, 102, 107, 108, 112, 120, 206, 90, 91, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, - 144, 145, 146, 41, 149, 191, 94, 16, 205, 153, - 174, 89, 90, 55, 89, 90, 49, 89, 90, 105, - 163, 165, 106, 107, 169, 56, 81, 82, 83, 84, - 57, 178, -111, 111, 178, 109, 112, 57, 224, 225, - 226, 113, 4, 5, 6, 7, 8, 16, 117, 120, - 121, 122, 9, 147, 148, 10, 154, 166, 167, 11, - 12, 179, 183, 170, 13, 56, 14, 15, 84, 184, - 186, 185, -111, 194, 187, 96, 16, 201, 4, 5, - 6, 7, 8, 202, 115, 206, 207, 17, 208, 203, - 178, 204, 209, 18, 19, 216, 95, 20, 21, 211, - 22, 213, 218, 15, 228, 155, 221, 212, 222, 215, - 229, 217, 16, 239, 245, 192, 158, 219, 220, 0, - 178, 178, 178, 176, 0, 0, 0, 0, 227, 18, - 19, 0, 0, 20, 21, 233, 22, 234, 0, 0, - 237, 238, 0, 0, 0, 0, 0, -70, 47, 0, - 0, 48, -70, 0, 49, 242, -70, -70, -70, -70, - -70, 0, 246, 247, 0, -70, -70, -70, 251, 0, - -70, -70, -70, 0, -70, 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, 150, - -70, 0, 4, 5, 6, 7, 8, 0, 0, 0, + 144, 145, 146, 147, 41, 150, 161, 225, 226, 227, + 154, 95, 55, 192, 175, 56, 39, 56, 50, 110, + 50, 164, 166, 90, 91, 170, 4, 5, 6, 7, + 8, 58, 179, 88, 113, 179, 118, 114, 58, 88, + 121, 104, 122, 123, 148, 149, 155, 105, 167, 168, + 16, 15, 16, 171, 180, 85, 184, 185, 188, 62, + 63, 16, 186, 195, 202, 203, 116, 207, 57, 208, + 57, 187, 177, 65, 209, -112, 97, -112, 18, 19, + 210, 214, 20, 21, 217, 22, 73, 74, 90, 91, + 204, 179, 205, 229, 90, 91, 78, 79, 80, 81, + 82, 83, 84, 85, 219, 222, 96, 223, 213, 230, + 216, 240, 156, 246, 159, 193, 218, 0, 220, 221, + 0, 179, 179, 179, 0, 0, 0, 0, 0, 228, + 0, 0, 0, 0, 0, 0, 234, 0, 235, 0, + 0, 238, 239, 0, 0, 0, 0, 0, -70, 48, + 0, 0, 49, -70, 0, 50, 243, -70, -70, -70, + -70, -70, 0, 247, 248, 0, -70, -70, -70, 252, + 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, 151, -70, 0, 4, 5, 6, 7, 8, 0, + 0, 0, 0, 0, 9, 0, 0, 10, 0, 0, + 0, 11, 12, 0, 0, 0, 13, 52, 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, 152, + 20, 21, 153, 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, 53, 22, + 46, 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, 119, 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, + 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, + 0, 18, 19, 0, 0, 20, 21, 165, 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, 169, 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, 212, 22, 0, 16, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, + 0, 0, 0, 215, 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, 16, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, - 0, 0, 0, 18, 19, 0, 151, 20, 21, 152, - 22, 51, 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, 0, 14, 15, - 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, 19, 0, 0, 20, - 21, 52, 22, 45, 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, 0, - 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, - 16, 0, 0, 0, 0, 0, 4, 5, 6, 7, - 8, 17, 0, 0, 0, 0, 0, 18, 19, 0, - 0, 20, 21, 118, 22, 0, 4, 5, 6, 7, - 8, 15, 0, 0, 0, 0, 9, 0, 0, 10, - 16, 0, 0, 11, 12, 0, 0, 0, 13, 0, - 14, 15, 0, 0, 0, 0, 0, 18, 19, 0, - 16, 20, 21, 0, 22, 0, 0, 0, 0, 0, - 0, 17, 0, 0, 0, 0, 0, 18, 19, 0, - 0, 20, 21, 164, 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, 0, - 14, 15, 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, 19, 0, - 0, 20, 21, 168, 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, 0, - 14, 15, 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, 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, 16, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 17, 0, 0, 0, 0, 214, 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, 16, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, - 0, 0, 0, 0, 232, 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, 16, 0, 0, - 0, 60, 61, 62, 63, 0, 0, 0, 17, 0, - 0, 0, 0, 0, 18, 19, 64, 65, 20, 21, - 0, 22, 66, 67, 68, 69, 70, 71, 72, 73, - 0, 0, 0, 0, 0, 74, 75, 76, 77, 78, - 79, 80, 81, 82, 83, 84, 60, 61, 62, 63, - 188, 0, 0, 189, 0, 0, 0, 0, 0, 0, - 0, 64, 65, 0, 0, 0, 0, 66, 67, 68, - 69, 70, 71, 72, 73, 0, 0, 0, 0, 0, - 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, - 84, 60, 61, 62, 63, 0, 0, 0, 114, 0, - 0, 0, 0, 0, 0, 0, 64, 65, 0, 0, - 0, 0, 66, 67, 68, 69, 70, 71, 72, 73, - 0, 0, 0, 0, 0, 74, 75, 76, 77, 78, - 79, 80, 81, 82, 83, 84, 60, 61, 62, 63, - 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, - 0, 64, 65, 0, 0, 0, 0, 66, 67, 68, - 69, 70, 71, 72, 73, 0, 0, 0, 0, 0, - 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, - 84, 60, 61, 62, 63, 0, 0, 0, 230, 0, - 0, 0, 0, 0, 0, 0, 64, 65, 0, 0, - 0, 0, 66, 67, 68, 69, 70, 71, 72, 73, - 0, 0, 0, 0, 0, 74, 75, 76, 77, 78, - 79, 80, 81, 82, 83, 84, 249, 0, 0, 250, - 60, 61, 62, 63, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 64, 65, 0, 0, 0, - 0, 66, 67, 68, 69, 70, 71, 72, 73, 0, - 60, 61, 62, 63, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 64, 65, 0, 110, 0, - 0, 66, 67, 68, 69, 70, 71, 72, 73, 0, - 60, 61, 62, 63, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 64, 65, 0, 180, 0, - 0, 66, 67, 68, 69, 70, 71, 72, 73, 0, - 60, 61, 62, 63, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 64, 65, 0, 248, 0, - 0, 66, 67, 68, 69, 70, 71, 72, 73, 0, - 60, 61, 62, 63, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 64, 65, 0, 252, 0, - 0, 66, 67, 68, 69, 70, 71, 72, 73, 0, - 0, 0, 0, 0, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 60, 61, 62, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, + 0, 0, 0, 233, 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, 61, 62, 63, 64, 0, 0, 0, 17, 0, + 0, 0, 0, 0, 18, 19, 65, 66, 20, 21, + 0, 22, 0, 67, 68, 69, 70, 71, 72, 73, + 74, 0, 0, 0, 0, 0, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 61, 62, 63, + 64, 189, 0, 0, 190, 0, 0, 0, 0, 0, + 0, 0, 65, 66, 0, 0, 0, 0, 0, 67, + 68, 69, 70, 71, 72, 73, 74, 0, 0, 0, + 0, 0, 75, 76, 77, 78, 79, 80, 81, 82, + 83, 84, 85, 61, 62, 63, 64, 0, 0, 0, + 115, 0, 0, 0, 0, 0, 0, 0, 65, 66, + 0, 0, 0, 0, 0, 67, 68, 69, 70, 71, + 72, 73, 74, 0, 0, 0, 0, 0, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 61, + 62, 63, 64, 0, 0, 0, 211, 0, 0, 0, + 0, 0, 0, 0, 65, 66, 0, 0, 0, 0, + 0, 67, 68, 69, 70, 71, 72, 73, 74, 0, + 0, 0, 0, 0, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 61, 62, 63, 64, 0, + 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, + 65, 66, 0, 0, 0, -113, -113, 67, 68, 69, + 70, 71, 72, 73, 74, 0, 0, 0, 0, 0, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + 85, 250, -113, -113, 251, 61, 62, 63, 64, 0, + 0, 0, -113, -113, 80, 81, 82, 83, 84, 85, + 65, 66, 0, 0, 0, 0, 0, 67, 68, 69, + 70, 71, 72, 73, 74, 0, 61, 62, 63, 64, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + 85, 65, 66, 0, 111, 0, 0, 0, 67, 68, + 69, 70, 71, 72, 73, 74, 0, 61, 62, 63, + 64, 75, 76, 77, 78, 79, 80, 81, 82, 83, + 84, 85, 65, 66, 0, 181, 0, 0, 0, 67, + 68, 69, 70, 71, 72, 73, 74, 0, 61, 62, + 63, 64, 75, 76, 77, 78, 79, 80, 81, 82, + 83, 84, 85, 65, 66, 0, 249, 0, 0, 0, + 67, 68, 69, 70, 71, 72, 73, 74, 0, 61, + 62, 63, 64, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 65, 66, 0, 253, 0, 0, + 0, 67, 68, 69, 70, 71, 72, 73, 74, 0, + 0, 0, 0, 0, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 61, 62, 63, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 64, 65, 0, 0, 0, 0, 66, 67, 68, - 69, 70, 71, 72, 73, 0, 0, 0, 0, 0, - 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, - 84, 197, 60, 61, 62, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 64, 65, 0, - 0, 0, 0, 66, 67, 68, 69, 70, 71, 72, - 73, 0, 0, 0, 0, 0, 74, 75, 76, 77, - 78, 79, 80, 81, 82, 83, 84, 231, 60, 61, - 62, 63, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 64, 65, 0, 0, 0, 0, 66, - 67, 68, 69, 70, 71, 72, 73, 0, 0, 0, - 0, 0, 74, 75, 76, 77, 78, 79, 80, 81, - 82, 83, 84, 240, 60, 61, 62, 63, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, - 65, 0, 0, 0, 0, 66, 67, 68, 69, 70, - 71, 72, 73, 0, 0, 0, 0, 0, 74, 75, - 76, 77, 78, 79, 80, 81, 82, 83, 84, 241, - 60, 61, 62, 63, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 64, 65, 0, 0, 0, - 0, 66, 67, 68, 69, 70, 71, 72, 73, 0, - 0, 0, 0, 0, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 243, 60, 61, 62, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 64, 65, 0, 0, 0, 0, 66, 67, 68, - 69, 70, 71, 72, 73, 0, 0, 0, 0, 0, - 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, - 84, 244, 60, 61, 62, 63, 0, 0, 0, 0, - 0, 0, 198, 199, 0, 0, 0, 64, 65, 0, - 0, 0, 0, 66, 67, 68, 69, 70, 71, 72, - 73, 0, 0, 0, 0, 0, 74, 75, 76, 77, - 78, 79, 80, 81, 82, 83, 84, 60, 61, 62, - 63, 0, 0, 0, 0, 0, 102, 0, 0, 0, - 0, 0, 64, 65, 0, 0, 0, 0, 66, 67, - 68, 69, 70, 71, 72, 73, 0, 60, 61, 62, - 63, 74, 75, 76, 77, 78, 79, 80, 81, 82, - 83, 84, 64, 65, 0, 0, 0, 0, 66, 67, - 68, 69, 70, 71, 72, 73, 0, 0, 0, 223, - 0, 74, 75, 76, 77, 78, 79, 80, 81, 82, - 83, 84, 60, 61, 62, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 235, 64, 65, 0, - 0, 0, 0, 66, 67, 68, 69, 70, 71, 72, - 73, 0, 0, 0, 0, 0, 74, 75, 76, 77, - 78, 79, 80, 81, 82, 83, 84, 60, 61, 62, - 63, 0, 0, 0, 0, 0, 236, 0, 0, 0, - 0, 0, 64, 65, 0, 0, 0, 0, 66, 67, - 68, 69, 70, 71, 72, 73, 0, 60, 61, 62, - 63, 74, 75, 76, 77, 78, 79, 80, 81, 82, - 83, 84, 64, 65, 0, 0, 0, 0, 66, 67, - 68, 69, 70, 71, 72, 73, 0, 60, 61, 62, - 63, 74, 75, 76, 77, 78, 79, 80, 81, 82, - 83, 84, 64, 65, 0, 0, 0, 0, 66, 67, - 68, 69, 70, 71, 72, 73, 0, -112, 61, 62, - 0, 0, 0, 76, 77, 78, 79, 80, 81, 82, - 83, 84, 64, 65, 0, 0, 61, 62, -112, -112, - -112, -112, -112, -112, 72, 73, 0, 0, 0, 0, - 64, 0, 0, -112, 77, 78, 79, 80, 81, 82, - 83, 84, 72, 73, -112, -112, 0, 0, 0, 0, - 0, 0, 77, 78, 79, 80, 81, 82, 83, 84, - 0, 0, 61, 62, 0, 0, 0, 0, 0, 0, - -112, -112, 0, 0, 0, 0, 0, 0, 0, 0, - -112, -112, 79, 80, 81, 82, 83, 84, 72, 73, - 0, 0, 0, 0, 0, 0, 0, 0, 77, 78, - 79, 80, 81, 82, 83, 84 + 0, 65, 66, 0, 0, 0, 0, 0, 67, 68, + 69, 70, 71, 72, 73, 74, 0, 0, 0, 0, + 0, 75, 76, 77, 78, 79, 80, 81, 82, 83, + 84, 85, 198, 61, 62, 63, 64, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 65, 66, + 0, 0, 0, 0, 0, 67, 68, 69, 70, 71, + 72, 73, 74, 0, 0, 0, 0, 0, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 232, + 61, 62, 63, 64, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 65, 66, 0, 0, 0, + 0, 0, 67, 68, 69, 70, 71, 72, 73, 74, + 0, 0, 0, 0, 0, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 241, 61, 62, 63, + 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 65, 66, 0, 0, 0, 0, 0, 67, + 68, 69, 70, 71, 72, 73, 74, 0, 0, 0, + 0, 0, 75, 76, 77, 78, 79, 80, 81, 82, + 83, 84, 85, 242, 61, 62, 63, 64, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, + 66, 0, 0, 0, 0, 0, 67, 68, 69, 70, + 71, 72, 73, 74, 0, 0, 0, 0, 0, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 244, 61, 62, 63, 64, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 65, 66, 0, 0, + 0, 0, 0, 67, 68, 69, 70, 71, 72, 73, + 74, 0, 0, 0, 0, 0, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 245, 61, 62, + 63, 64, 0, 0, 0, 0, 0, 0, 199, 200, + 0, 0, 0, 65, 66, 0, 0, 0, 0, 0, + 67, 68, 69, 70, 71, 72, 73, 74, 0, 0, + 0, 0, 0, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 61, 62, 63, 64, 0, 0, + 0, 0, 0, 103, 0, 0, 0, 0, 0, 65, + 66, 0, 0, 0, 0, 0, 67, 68, 69, 70, + 71, 72, 73, 74, 0, 61, 62, 63, 64, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 65, 66, 0, 0, 0, 0, 0, 67, 68, 69, + 70, 71, 72, 73, 74, 0, 0, 0, 224, 0, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + 85, 61, 62, 63, 64, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 236, 65, 66, 0, 0, + 0, 0, 0, 67, 68, 69, 70, 71, 72, 73, + 74, 0, 0, 0, 0, 0, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 61, 62, 63, + 64, 0, 0, 0, 0, 0, 237, 0, 0, 0, + 0, 0, 65, 66, 0, 0, 0, 0, 0, 67, + 68, 69, 70, 71, 72, 73, 74, 0, 61, 62, + 63, 64, 75, 76, 77, 78, 79, 80, 81, 82, + 83, 84, 85, 65, 66, 0, 0, 0, 0, 0, + 67, 68, 69, 70, 71, 72, 73, 74, 0, 61, + 62, 63, 64, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 65, 66, 0, 0, 0, 0, + 0, 67, 68, 69, 70, 71, 72, 73, 74, 0, + -113, 62, 63, 0, 0, 0, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 65, 66, 0, 0, 62, + 63, 0, -113, -113, -113, -113, -113, -113, 73, 74, + 0, 0, 0, 0, 0, 0, 0, -113, 78, 79, + 80, 81, 82, 83, 84, 85, 73, 74, 0, 0, + 0, 0, 0, 0, 0, 0, 78, 79, 80, 81, + 82, 83, 84, 85 }; static const yytype_int16 yycheck[] = { - 1, 4, 56, 5, 58, 11, 12, 7, 44, 10, - 54, 13, 13, 57, 0, 20, 17, 22, 19, 115, - 21, 29, 54, 28, 15, 57, 122, 63, 29, 1, - 31, 16, 120, 56, 4, 53, 55, 5, 38, 38, - 5, 39, 40, 5, 42, 13, 39, 40, 13, 42, - 1, 4, 55, 4, 4, 56, 7, 59, 60, 60, + 1, 121, 45, 5, 7, 11, 12, 4, 0, 10, + 55, 13, 13, 58, 54, 20, 17, 22, 19, 116, + 21, 64, 15, 28, 55, 29, 123, 58, 29, 1, + 31, 16, 57, 30, 4, 4, 39, 51, 52, 53, + 54, 4, 40, 41, 39, 43, 40, 41, 5, 43, + 57, 27, 59, 4, 4, 1, 57, 177, 60, 61, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, - 81, 82, 83, 55, 89, 55, 94, 38, 176, 90, - 1, 59, 60, 4, 59, 60, 7, 59, 60, 27, - 101, 102, 4, 4, 105, 56, 50, 51, 52, 53, - 115, 117, 63, 1, 120, 57, 53, 122, 206, 207, - 208, 61, 4, 5, 6, 7, 8, 38, 58, 58, - 63, 44, 14, 53, 55, 17, 13, 55, 55, 21, - 22, 57, 4, 43, 26, 56, 28, 29, 53, 53, - 151, 61, 63, 4, 53, 156, 38, 4, 4, 5, - 6, 7, 8, 4, 44, 43, 58, 49, 58, 170, - 176, 172, 43, 55, 56, 4, 30, 59, 60, 61, - 62, 53, 58, 29, 53, 94, 56, 188, 56, 190, - 53, 195, 38, 53, 242, 156, 99, 198, 199, -1, - 206, 207, 208, 49, -1, -1, -1, -1, 209, 55, - 56, -1, -1, 59, 60, 216, 62, 218, -1, -1, - 221, 222, -1, -1, -1, -1, -1, 0, 1, -1, - -1, 4, 5, -1, 7, 236, 9, 10, 11, 12, - 13, -1, 243, 244, -1, 18, 19, 20, 249, -1, - 23, 24, 25, -1, 27, -1, -1, 30, 31, 32, - 33, 34, 35, 36, 37, 38, -1, -1, 41, -1, - 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, - 53, 54, -1, -1, 57, 58, 59, 60, 61, 1, - 63, -1, 4, 5, 6, 7, 8, -1, -1, -1, + 81, 82, 83, 84, 56, 90, 56, 207, 208, 209, + 91, 95, 1, 56, 1, 4, 56, 4, 7, 58, + 7, 102, 103, 60, 61, 106, 4, 5, 6, 7, + 8, 116, 118, 5, 54, 121, 59, 62, 123, 5, + 59, 13, 64, 45, 54, 56, 13, 13, 56, 56, + 39, 29, 39, 44, 58, 54, 4, 54, 54, 10, + 11, 39, 62, 4, 4, 4, 45, 44, 57, 59, + 57, 152, 50, 24, 59, 64, 157, 64, 56, 57, + 44, 54, 60, 61, 4, 63, 37, 38, 60, 61, + 171, 177, 173, 54, 60, 61, 47, 48, 49, 50, + 51, 52, 53, 54, 59, 57, 30, 57, 189, 54, + 191, 54, 95, 243, 100, 157, 196, -1, 199, 200, + -1, 207, 208, 209, -1, -1, -1, -1, -1, 210, + -1, -1, -1, -1, -1, -1, 217, -1, 219, -1, + -1, 222, 223, -1, -1, -1, -1, -1, 0, 1, + -1, -1, 4, 5, -1, 7, 237, 9, 10, 11, + 12, 13, -1, 244, 245, -1, 18, 19, 20, 250, + -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, 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, 59, + 60, 61, 62, 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, 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, 57, -1, -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, -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, 38, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 49, -1, -1, - -1, -1, -1, 55, 56, -1, 58, 59, 60, 61, - 62, 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, - -1, -1, -1, -1, -1, -1, -1, -1, 38, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 49, - -1, -1, -1, -1, -1, 55, 56, -1, -1, 59, - 60, 61, 62, 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, -1, -1, -1, -1, -1, -1, -1, -1, - 38, -1, -1, -1, -1, -1, 4, 5, 6, 7, - 8, 49, -1, -1, -1, -1, -1, 55, 56, -1, - -1, 59, 60, 1, 62, -1, 4, 5, 6, 7, - 8, 29, -1, -1, -1, -1, 14, -1, -1, 17, - 38, -1, -1, 21, 22, -1, -1, -1, 26, -1, - 28, 29, -1, -1, -1, -1, -1, 55, 56, -1, - 38, 59, 60, -1, 62, -1, -1, -1, -1, -1, - -1, 49, -1, -1, -1, -1, -1, 55, 56, -1, - -1, 59, 60, 1, 62, -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, -1, -1, -1, -1, -1, -1, -1, -1, - 38, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 49, -1, -1, -1, -1, -1, 55, 56, -1, - -1, 59, 60, 1, 62, -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, -1, -1, -1, -1, -1, -1, -1, -1, - 38, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 49, -1, -1, -1, -1, -1, 55, 56, -1, - -1, 59, 60, -1, 62, 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, 38, + -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, 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, 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, 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, -1, + 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, -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, 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, - 49, -1, -1, -1, -1, 54, 55, 56, -1, -1, - 59, 60, -1, 62, 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, 38, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 49, - -1, -1, -1, -1, 54, 55, 56, -1, -1, 59, - 60, -1, 62, 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, 38, -1, -1, - -1, 9, 10, 11, 12, -1, -1, -1, 49, -1, - -1, -1, -1, -1, 55, 56, 24, 25, 59, 60, - -1, 62, 30, 31, 32, 33, 34, 35, 36, 37, - -1, -1, -1, -1, -1, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 9, 10, 11, 12, - 58, -1, -1, 61, -1, -1, -1, -1, -1, -1, - -1, 24, 25, -1, -1, -1, -1, 30, 31, 32, - 33, 34, 35, 36, 37, -1, -1, -1, -1, -1, - 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, - 53, 9, 10, 11, 12, -1, -1, -1, 61, -1, - -1, -1, -1, -1, -1, -1, 24, 25, -1, -1, - -1, -1, 30, 31, 32, 33, 34, 35, 36, 37, - -1, -1, -1, -1, -1, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 9, 10, 11, 12, - -1, -1, -1, 61, -1, -1, -1, -1, -1, -1, - -1, 24, 25, -1, -1, -1, -1, 30, 31, 32, - 33, 34, 35, 36, 37, -1, -1, -1, -1, -1, - 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, - 53, 9, 10, 11, 12, -1, -1, -1, 61, -1, - -1, -1, -1, -1, -1, -1, 24, 25, -1, -1, - -1, -1, 30, 31, 32, 33, 34, 35, 36, 37, - -1, -1, -1, -1, -1, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, -1, -1, 57, + -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, -1, -1, -1, -1, -1, -1, -1, -1, 24, 25, -1, -1, -1, - -1, 30, 31, 32, 33, 34, 35, 36, 37, -1, - 9, 10, 11, 12, 43, 44, 45, 46, 47, 48, - 49, 50, 51, 52, 53, 24, 25, -1, 57, -1, - -1, 30, 31, 32, 33, 34, 35, 36, 37, -1, - 9, 10, 11, 12, 43, 44, 45, 46, 47, 48, - 49, 50, 51, 52, 53, 24, 25, -1, 57, -1, - -1, 30, 31, 32, 33, 34, 35, 36, 37, -1, - 9, 10, 11, 12, 43, 44, 45, 46, 47, 48, - 49, 50, 51, 52, 53, 24, 25, -1, 57, -1, - -1, 30, 31, 32, 33, 34, 35, 36, 37, -1, - 9, 10, 11, 12, 43, 44, 45, 46, 47, 48, - 49, 50, 51, 52, 53, 24, 25, -1, 57, -1, - -1, 30, 31, 32, 33, 34, 35, 36, 37, -1, - -1, -1, -1, -1, 43, 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, - -1, 24, 25, -1, -1, -1, -1, 30, 31, 32, - 33, 34, 35, 36, 37, -1, -1, -1, -1, -1, - 43, 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, -1, 24, 25, -1, - -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, - 37, -1, -1, -1, -1, -1, 43, 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, -1, 24, 25, -1, -1, -1, -1, 30, - 31, 32, 33, 34, 35, 36, 37, -1, -1, -1, - -1, -1, 43, 44, 45, 46, 47, 48, 49, 50, - 51, 52, 53, 54, 9, 10, 11, 12, -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, -1, -1, -1, -1, -1, -1, -1, -1, 24, - 25, -1, -1, -1, -1, 30, 31, 32, 33, 34, - 35, 36, 37, -1, -1, -1, -1, -1, 43, 44, + 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, -1, - -1, -1, -1, -1, -1, 24, 25, -1, -1, -1, - -1, 30, 31, 32, 33, 34, 35, 36, 37, -1, - -1, -1, -1, -1, 43, 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, - -1, 24, 25, -1, -1, -1, -1, 30, 31, 32, - 33, 34, 35, 36, 37, -1, -1, -1, -1, -1, - 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, - 53, 54, 9, 10, 11, 12, -1, -1, -1, -1, - -1, -1, 19, 20, -1, -1, -1, 24, 25, -1, - -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, - 37, -1, -1, -1, -1, -1, 43, 44, 45, 46, - 47, 48, 49, 50, 51, 52, 53, 9, 10, 11, + 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, 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, -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, 30, 31, - 32, 33, 34, 35, 36, 37, -1, 9, 10, 11, - 12, 43, 44, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 24, 25, -1, -1, -1, -1, 30, 31, - 32, 33, 34, 35, 36, 37, -1, -1, -1, 41, - -1, 43, 44, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 9, 10, 11, 12, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 23, 24, 25, -1, - -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, - 37, -1, -1, -1, -1, -1, 43, 44, 45, 46, - 47, 48, 49, 50, 51, 52, 53, 9, 10, 11, - 12, -1, -1, -1, -1, -1, 18, -1, -1, -1, - -1, -1, 24, 25, -1, -1, -1, -1, 30, 31, - 32, 33, 34, 35, 36, 37, -1, 9, 10, 11, - 12, 43, 44, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 24, 25, -1, -1, -1, -1, 30, 31, - 32, 33, 34, 35, 36, 37, -1, 9, 10, 11, - 12, 43, 44, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 24, 25, -1, -1, -1, -1, 30, 31, - 32, 33, 34, 35, 36, 37, -1, 9, 10, 11, - -1, -1, -1, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 24, 25, -1, -1, 10, 11, 30, 31, - 32, 33, 34, 35, 36, 37, -1, -1, -1, -1, - 24, -1, -1, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 36, 37, 10, 11, -1, -1, -1, -1, - -1, -1, 46, 47, 48, 49, 50, 51, 52, 53, - -1, -1, 10, 11, -1, -1, -1, -1, -1, -1, - 36, 37, -1, -1, -1, -1, -1, -1, -1, -1, - 46, 47, 48, 49, 50, 51, 52, 53, 36, 37, - -1, -1, -1, -1, -1, -1, -1, -1, 46, 47, - 48, 49, 50, 51, 52, 53 + -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 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { - 0, 15, 65, 66, 4, 5, 6, 7, 8, 14, - 17, 21, 22, 26, 28, 29, 38, 49, 55, 56, - 59, 60, 62, 69, 71, 74, 80, 0, 16, 67, - 70, 56, 53, 38, 4, 69, 80, 80, 69, 55, - 1, 55, 75, 69, 4, 1, 69, 1, 4, 7, - 74, 1, 61, 69, 1, 4, 56, 74, 83, 84, - 9, 10, 11, 12, 24, 25, 30, 31, 32, 33, - 34, 35, 36, 37, 43, 44, 45, 46, 47, 48, - 49, 50, 51, 52, 53, 54, 69, 5, 13, 59, - 60, 74, 68, 69, 71, 67, 69, 81, 82, 76, - 56, 58, 18, 13, 13, 27, 4, 4, 77, 57, - 57, 1, 53, 61, 61, 44, 63, 58, 1, 69, - 58, 63, 44, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 53, 55, 74, - 1, 58, 61, 69, 13, 68, 54, 57, 77, 4, - 55, 72, 73, 69, 1, 69, 55, 55, 1, 69, - 43, 39, 40, 42, 1, 83, 49, 79, 80, 57, - 57, 79, 83, 4, 53, 61, 69, 53, 58, 61, - 4, 55, 82, 42, 4, 54, 57, 54, 19, 20, - 78, 4, 4, 69, 69, 79, 43, 58, 58, 43, - 61, 61, 69, 53, 54, 69, 4, 73, 58, 69, - 69, 56, 56, 41, 79, 79, 79, 69, 53, 53, - 61, 54, 54, 69, 69, 23, 18, 69, 69, 53, - 54, 54, 69, 54, 54, 78, 69, 69, 57, 54, - 57, 69, 57 + 0, 15, 66, 67, 4, 5, 6, 7, 8, 14, + 17, 21, 22, 26, 28, 29, 39, 50, 56, 57, + 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, + 7, 75, 1, 62, 70, 1, 4, 57, 75, 84, + 85, 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, 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, 84, 50, 80, 81, + 58, 58, 80, 84, 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 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { - 0, 64, 65, 65, 66, 66, 67, 67, 68, 68, - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, 70, 70, - 70, 70, 71, 71, 72, 72, 73, 73, 75, 74, - 76, 74, 77, 77, 77, 78, 78, 79, 79, 79, - 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, - 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, - 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, - 80, 80, 80, 80, 80, 80, 80, 80, 81, 81, - 82, 83, 83, 83, 83, 84, 84, 84, 84, 84, - 84 + 0, 65, 66, 66, 67, 67, 68, 68, 69, 69, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 71, 71, + 71, 71, 72, 72, 73, 73, 74, 74, 76, 75, + 77, 75, 78, 78, 78, 79, 79, 80, 80, 80, + 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, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 82, + 82, 83, 84, 84, 84, 84, 85, 85, 85, 85, + 85, 85 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ @@ -1294,9 +1278,9 @@ static const yytype_uint8 yyr2[] = 1, 1, 3, 2, 3, 2, 4, 3, 2, 1, 3, 2, 2, 3, 5, 4, 4, 3, 7, 6, 6, 6, 5, 5, 1, 1, 1, 3, 3, 2, - 3, 2, 1, 4, 3, 3, 4, 3, 1, 3, - 1, 0, 1, 3, 3, 3, 3, 1, 1, 5, - 5 + 3, 2, 2, 1, 4, 3, 3, 4, 3, 1, + 3, 1, 0, 1, 3, 3, 3, 3, 1, 1, + 5, 5 }; @@ -1799,133 +1783,133 @@ 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 1803 "parser.c" /* yacc.c:1257 */ +#line 1787 "parser.c" /* yacc.c:1257 */ break; case 5: /* FIELD */ #line 35 "parser.y" /* yacc.c:1257 */ { jv_free(((*yyvaluep).literal)); } -#line 1809 "parser.c" /* yacc.c:1257 */ +#line 1793 "parser.c" /* yacc.c:1257 */ break; case 6: /* LITERAL */ #line 35 "parser.y" /* yacc.c:1257 */ { jv_free(((*yyvaluep).literal)); } -#line 1815 "parser.c" /* yacc.c:1257 */ +#line 1799 "parser.c" /* yacc.c:1257 */ break; case 7: /* FORMAT */ #line 35 "parser.y" /* yacc.c:1257 */ { jv_free(((*yyvaluep).literal)); } -#line 1821 "parser.c" /* yacc.c:1257 */ +#line 1805 "parser.c" /* yacc.c:1257 */ break; - case 39: /* QQSTRING_TEXT */ + case 40: /* QQSTRING_TEXT */ #line 35 "parser.y" /* yacc.c:1257 */ { jv_free(((*yyvaluep).literal)); } -#line 1827 "parser.c" /* yacc.c:1257 */ +#line 1811 "parser.c" /* yacc.c:1257 */ break; - case 66: /* Module */ + case 67: /* Module */ #line 36 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1833 "parser.c" /* yacc.c:1257 */ +#line 1817 "parser.c" /* yacc.c:1257 */ break; - case 67: /* Imports */ + case 68: /* Imports */ #line 36 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1839 "parser.c" /* yacc.c:1257 */ +#line 1823 "parser.c" /* yacc.c:1257 */ break; - case 68: /* FuncDefs */ + case 69: /* FuncDefs */ #line 36 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1845 "parser.c" /* yacc.c:1257 */ +#line 1829 "parser.c" /* yacc.c:1257 */ break; - case 69: /* Exp */ + case 70: /* Exp */ #line 36 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1851 "parser.c" /* yacc.c:1257 */ +#line 1835 "parser.c" /* yacc.c:1257 */ break; - case 70: /* Import */ + case 71: /* Import */ #line 36 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1857 "parser.c" /* yacc.c:1257 */ +#line 1841 "parser.c" /* yacc.c:1257 */ break; - case 71: /* FuncDef */ + case 72: /* FuncDef */ #line 36 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1863 "parser.c" /* yacc.c:1257 */ +#line 1847 "parser.c" /* yacc.c:1257 */ break; - case 72: /* Params */ + case 73: /* Params */ #line 36 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1869 "parser.c" /* yacc.c:1257 */ +#line 1853 "parser.c" /* yacc.c:1257 */ break; - case 73: /* Param */ + case 74: /* Param */ #line 36 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1875 "parser.c" /* yacc.c:1257 */ +#line 1859 "parser.c" /* yacc.c:1257 */ break; - case 74: /* String */ + case 75: /* String */ #line 36 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1881 "parser.c" /* yacc.c:1257 */ +#line 1865 "parser.c" /* yacc.c:1257 */ break; - case 77: /* QQString */ + case 78: /* QQString */ #line 36 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1887 "parser.c" /* yacc.c:1257 */ +#line 1871 "parser.c" /* yacc.c:1257 */ break; - case 78: /* ElseBody */ + case 79: /* ElseBody */ #line 36 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1893 "parser.c" /* yacc.c:1257 */ +#line 1877 "parser.c" /* yacc.c:1257 */ break; - case 79: /* ExpD */ + case 80: /* ExpD */ #line 36 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1899 "parser.c" /* yacc.c:1257 */ +#line 1883 "parser.c" /* yacc.c:1257 */ break; - case 80: /* Term */ + case 81: /* Term */ #line 36 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1905 "parser.c" /* yacc.c:1257 */ +#line 1889 "parser.c" /* yacc.c:1257 */ break; - case 81: /* Args */ + case 82: /* Args */ #line 36 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1911 "parser.c" /* yacc.c:1257 */ +#line 1895 "parser.c" /* yacc.c:1257 */ break; - case 82: /* Arg */ + case 83: /* Arg */ #line 36 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1917 "parser.c" /* yacc.c:1257 */ +#line 1901 "parser.c" /* yacc.c:1257 */ break; - case 83: /* MkDict */ + case 84: /* MkDict */ #line 36 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1923 "parser.c" /* yacc.c:1257 */ +#line 1907 "parser.c" /* yacc.c:1257 */ break; - case 84: /* MkDictPair */ + case 85: /* MkDictPair */ #line 36 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1929 "parser.c" /* yacc.c:1257 */ +#line 1913 "parser.c" /* yacc.c:1257 */ break; @@ -2217,31 +2201,31 @@ yyreduce: switch (yyn) { case 2: -#line 268 "parser.y" /* yacc.c:1646 */ +#line 269 "parser.y" /* yacc.c:1646 */ { *answer = BLOCK((yyvsp[-2].blk), (yyvsp[-1].blk), gen_op_simple(TOP), (yyvsp[0].blk)); } +#line 2209 "parser.c" /* yacc.c:1646 */ + break; + + case 3: +#line 272 "parser.y" /* yacc.c:1646 */ + { + *answer = BLOCK((yyvsp[-2].blk), (yyvsp[-1].blk), (yyvsp[0].blk)); +} +#line 2217 "parser.c" /* yacc.c:1646 */ + break; + + case 4: +#line 277 "parser.y" /* yacc.c:1646 */ + { + (yyval.blk) = gen_noop(); +} #line 2225 "parser.c" /* yacc.c:1646 */ break; - case 3: -#line 271 "parser.y" /* yacc.c:1646 */ - { - *answer = BLOCK((yyvsp[-2].blk), (yyvsp[-1].blk), (yyvsp[0].blk)); -} -#line 2233 "parser.c" /* yacc.c:1646 */ - break; - - case 4: -#line 276 "parser.y" /* yacc.c:1646 */ - { - (yyval.blk) = gen_noop(); -} -#line 2241 "parser.c" /* yacc.c:1646 */ - break; - case 5: -#line 279 "parser.y" /* yacc.c:1646 */ +#line 280 "parser.y" /* yacc.c:1646 */ { if (!block_is_const((yyvsp[-1].blk))) { FAIL((yyloc), "Module metadata must be constant."); @@ -2250,358 +2234,358 @@ yyreduce: (yyval.blk) = gen_module((yyvsp[-1].blk)); } } -#line 2254 "parser.c" /* yacc.c:1646 */ +#line 2238 "parser.c" /* yacc.c:1646 */ break; case 6: -#line 289 "parser.y" /* yacc.c:1646 */ +#line 290 "parser.y" /* yacc.c:1646 */ + { + (yyval.blk) = gen_noop(); +} +#line 2246 "parser.c" /* yacc.c:1646 */ + break; + + case 7: +#line 293 "parser.y" /* yacc.c:1646 */ + { + (yyval.blk) = BLOCK((yyvsp[-1].blk), (yyvsp[0].blk)); +} +#line 2254 "parser.c" /* yacc.c:1646 */ + break; + + case 8: +#line 298 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_noop(); } #line 2262 "parser.c" /* yacc.c:1646 */ break; - case 7: -#line 292 "parser.y" /* yacc.c:1646 */ + case 9: +#line 301 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = BLOCK((yyvsp[-1].blk), (yyvsp[0].blk)); + (yyval.blk) = block_bind((yyvsp[-1].blk), (yyvsp[0].blk), OP_IS_CALL_PSEUDO); } #line 2270 "parser.c" /* yacc.c:1646 */ break; - case 8: -#line 297 "parser.y" /* yacc.c:1646 */ + case 10: +#line 306 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = gen_noop(); + (yyval.blk) = block_bind_referenced((yyvsp[-1].blk), (yyvsp[0].blk), OP_IS_CALL_PSEUDO); } #line 2278 "parser.c" /* yacc.c:1646 */ break; - case 9: -#line 300 "parser.y" /* yacc.c:1646 */ - { - (yyval.blk) = block_bind((yyvsp[-1].blk), (yyvsp[0].blk), OP_IS_CALL_PSEUDO); -} -#line 2286 "parser.c" /* yacc.c:1646 */ - break; - - case 10: -#line 305 "parser.y" /* yacc.c:1646 */ - { - (yyval.blk) = block_bind_referenced((yyvsp[-1].blk), (yyvsp[0].blk), OP_IS_CALL_PSEUDO); -} -#line 2294 "parser.c" /* yacc.c:1646 */ - break; - case 11: -#line 309 "parser.y" /* yacc.c:1646 */ +#line 310 "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 2303 "parser.c" /* yacc.c:1646 */ +#line 2287 "parser.c" /* yacc.c:1646 */ break; case 12: -#line 314 "parser.y" /* yacc.c:1646 */ +#line 315 "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 2312 "parser.c" /* yacc.c:1646 */ +#line 2296 "parser.c" /* yacc.c:1646 */ break; case 13: -#line 319 "parser.y" /* yacc.c:1646 */ +#line 320 "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 2321 "parser.c" /* yacc.c:1646 */ +#line 2305 "parser.c" /* yacc.c:1646 */ break; case 14: -#line 324 "parser.y" /* yacc.c:1646 */ +#line 325 "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 2330 "parser.c" /* yacc.c:1646 */ +#line 2314 "parser.c" /* yacc.c:1646 */ break; case 15: -#line 329 "parser.y" /* yacc.c:1646 */ +#line 330 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_cond((yyvsp[-3].blk), (yyvsp[-1].blk), (yyvsp[0].blk)); } -#line 2338 "parser.c" /* yacc.c:1646 */ +#line 2322 "parser.c" /* yacc.c:1646 */ break; case 16: -#line 332 "parser.y" /* yacc.c:1646 */ +#line 333 "parser.y" /* yacc.c:1646 */ { FAIL((yyloc), "Possibly unterminated 'if' statement"); (yyval.blk) = (yyvsp[-2].blk); } -#line 2347 "parser.c" /* yacc.c:1646 */ +#line 2331 "parser.c" /* yacc.c:1646 */ break; case 17: -#line 337 "parser.y" /* yacc.c:1646 */ +#line 338 "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 2356 "parser.c" /* yacc.c:1646 */ +#line 2340 "parser.c" /* yacc.c:1646 */ break; case 18: -#line 341 "parser.y" /* yacc.c:1646 */ +#line 342 "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 2365 "parser.c" /* yacc.c:1646 */ +#line 2349 "parser.c" /* yacc.c:1646 */ break; case 19: -#line 345 "parser.y" /* yacc.c:1646 */ +#line 346 "parser.y" /* yacc.c:1646 */ { FAIL((yyloc), "Possibly unterminated 'try' statement"); (yyval.blk) = (yyvsp[-2].blk); } -#line 2374 "parser.c" /* yacc.c:1646 */ +#line 2358 "parser.c" /* yacc.c:1646 */ break; case 20: -#line 350 "parser.y" /* yacc.c:1646 */ +#line 351 "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 2385 "parser.c" /* yacc.c:1646 */ +#line 2369 "parser.c" /* yacc.c:1646 */ break; case 21: -#line 362 "parser.y" /* yacc.c:1646 */ +#line 363 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_try((yyvsp[-1].blk), gen_op_simple(BACKTRACK)); } +#line 2377 "parser.c" /* yacc.c:1646 */ + break; + + case 22: +#line 367 "parser.y" /* yacc.c:1646 */ + { + (yyval.blk) = gen_call("_assign", BLOCK(gen_lambda((yyvsp[-2].blk)), gen_lambda((yyvsp[0].blk)))); +} +#line 2385 "parser.c" /* yacc.c:1646 */ + break; + + case 23: +#line 371 "parser.y" /* yacc.c:1646 */ + { + (yyval.blk) = gen_or((yyvsp[-2].blk), (yyvsp[0].blk)); +} #line 2393 "parser.c" /* yacc.c:1646 */ break; - case 22: -#line 366 "parser.y" /* yacc.c:1646 */ + case 24: +#line 375 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = gen_call("_assign", BLOCK(gen_lambda((yyvsp[-2].blk)), gen_lambda((yyvsp[0].blk)))); + (yyval.blk) = gen_and((yyvsp[-2].blk), (yyvsp[0].blk)); } #line 2401 "parser.c" /* yacc.c:1646 */ break; - case 23: -#line 370 "parser.y" /* yacc.c:1646 */ + case 25: +#line 379 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = gen_or((yyvsp[-2].blk), (yyvsp[0].blk)); + (yyval.blk) = gen_definedor((yyvsp[-2].blk), (yyvsp[0].blk)); } #line 2409 "parser.c" /* yacc.c:1646 */ break; - case 24: -#line 374 "parser.y" /* yacc.c:1646 */ + case 26: +#line 383 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = gen_and((yyvsp[-2].blk), (yyvsp[0].blk)); + (yyval.blk) = gen_definedor_assign((yyvsp[-2].blk), (yyvsp[0].blk)); } #line 2417 "parser.c" /* yacc.c:1646 */ break; - case 25: -#line 378 "parser.y" /* yacc.c:1646 */ + case 27: +#line 387 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = gen_definedor((yyvsp[-2].blk), (yyvsp[0].blk)); + (yyval.blk) = gen_call("_modify", BLOCK(gen_lambda((yyvsp[-2].blk)), gen_lambda((yyvsp[0].blk)))); } #line 2425 "parser.c" /* yacc.c:1646 */ break; - case 26: -#line 382 "parser.y" /* yacc.c:1646 */ - { - (yyval.blk) = gen_definedor_assign((yyvsp[-2].blk), (yyvsp[0].blk)); + case 28: +#line 391 "parser.y" /* yacc.c:1646 */ + { + (yyval.blk) = block_join((yyvsp[-2].blk), (yyvsp[0].blk)); } #line 2433 "parser.c" /* yacc.c:1646 */ break; - case 27: -#line 386 "parser.y" /* yacc.c:1646 */ - { - (yyval.blk) = gen_call("_modify", BLOCK(gen_lambda((yyvsp[-2].blk)), gen_lambda((yyvsp[0].blk)))); + case 29: +#line 395 "parser.y" /* yacc.c:1646 */ + { + (yyval.blk) = gen_both((yyvsp[-2].blk), (yyvsp[0].blk)); } #line 2441 "parser.c" /* yacc.c:1646 */ break; - case 28: -#line 390 "parser.y" /* yacc.c:1646 */ - { - (yyval.blk) = block_join((yyvsp[-2].blk), (yyvsp[0].blk)); + case 30: +#line 399 "parser.y" /* yacc.c:1646 */ + { + (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '+'); } #line 2449 "parser.c" /* yacc.c:1646 */ break; - case 29: -#line 394 "parser.y" /* yacc.c:1646 */ - { - (yyval.blk) = gen_both((yyvsp[-2].blk), (yyvsp[0].blk)); + case 31: +#line 403 "parser.y" /* yacc.c:1646 */ + { + (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '+'); } #line 2457 "parser.c" /* yacc.c:1646 */ break; - case 30: -#line 398 "parser.y" /* yacc.c:1646 */ + case 32: +#line 407 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '+'); + (yyval.blk) = BLOCK((yyvsp[0].blk), gen_call("_negate", gen_noop())); } #line 2465 "parser.c" /* yacc.c:1646 */ break; - case 31: -#line 402 "parser.y" /* yacc.c:1646 */ + case 33: +#line 411 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '+'); + (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '-'); } #line 2473 "parser.c" /* yacc.c:1646 */ break; - case 32: -#line 406 "parser.y" /* yacc.c:1646 */ + case 34: +#line 415 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = BLOCK((yyvsp[0].blk), gen_call("_negate", gen_noop())); + (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '-'); } #line 2481 "parser.c" /* yacc.c:1646 */ break; - case 33: -#line 410 "parser.y" /* yacc.c:1646 */ + case 35: +#line 419 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '-'); + (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '*'); } #line 2489 "parser.c" /* yacc.c:1646 */ break; - case 34: -#line 414 "parser.y" /* yacc.c:1646 */ + case 36: +#line 423 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '-'); + (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '*'); } #line 2497 "parser.c" /* yacc.c:1646 */ break; - case 35: -#line 418 "parser.y" /* yacc.c:1646 */ + case 37: +#line 427 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '*'); + (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '/'); } #line 2505 "parser.c" /* yacc.c:1646 */ break; - case 36: -#line 422 "parser.y" /* yacc.c:1646 */ + case 38: +#line 431 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '*'); + (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '%'); } #line 2513 "parser.c" /* yacc.c:1646 */ break; - case 37: -#line 426 "parser.y" /* yacc.c:1646 */ + case 39: +#line 435 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '/'); + (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '/'); } #line 2521 "parser.c" /* yacc.c:1646 */ break; - case 38: -#line 430 "parser.y" /* yacc.c:1646 */ + case 40: +#line 439 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '%'); + (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '%'); } #line 2529 "parser.c" /* yacc.c:1646 */ break; - case 39: -#line 434 "parser.y" /* yacc.c:1646 */ + case 41: +#line 443 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '/'); + (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), EQ); } #line 2537 "parser.c" /* yacc.c:1646 */ break; - case 40: -#line 438 "parser.y" /* yacc.c:1646 */ + case 42: +#line 447 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '%'); + (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), NEQ); } #line 2545 "parser.c" /* yacc.c:1646 */ break; - case 41: -#line 442 "parser.y" /* yacc.c:1646 */ + case 43: +#line 451 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), EQ); + (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '<'); } #line 2553 "parser.c" /* yacc.c:1646 */ break; - case 42: -#line 446 "parser.y" /* yacc.c:1646 */ + case 44: +#line 455 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), NEQ); + (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '>'); } #line 2561 "parser.c" /* yacc.c:1646 */ break; - case 43: -#line 450 "parser.y" /* yacc.c:1646 */ + case 45: +#line 459 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '<'); + (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), LESSEQ); } #line 2569 "parser.c" /* yacc.c:1646 */ break; - case 44: -#line 454 "parser.y" /* yacc.c:1646 */ + case 46: +#line 463 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '>'); + (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), GREATEREQ); } #line 2577 "parser.c" /* yacc.c:1646 */ break; - case 45: -#line 458 "parser.y" /* yacc.c:1646 */ - { - (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), LESSEQ); + case 47: +#line 467 "parser.y" /* yacc.c:1646 */ + { + (yyval.blk) = (yyvsp[0].blk); } #line 2585 "parser.c" /* yacc.c:1646 */ break; - case 46: -#line 462 "parser.y" /* yacc.c:1646 */ - { - (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), GREATEREQ); -} -#line 2593 "parser.c" /* yacc.c:1646 */ - break; - - case 47: -#line 466 "parser.y" /* yacc.c:1646 */ - { - (yyval.blk) = (yyvsp[0].blk); -} -#line 2601 "parser.c" /* yacc.c:1646 */ - break; - case 48: -#line 471 "parser.y" /* yacc.c:1646 */ +#line 472 "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 @@ -2611,11 +2595,11 @@ yyreduce: jv_free((yyvsp[-1].literal)); jv_free(v); } -#line 2615 "parser.c" /* yacc.c:1646 */ +#line 2599 "parser.c" /* yacc.c:1646 */ break; case 49: -#line 480 "parser.y" /* yacc.c:1646 */ +#line 481 "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); @@ -2623,11 +2607,11 @@ yyreduce: jv_free((yyvsp[-1].literal)); jv_free(v); } -#line 2627 "parser.c" /* yacc.c:1646 */ +#line 2611 "parser.c" /* yacc.c:1646 */ break; case 50: -#line 487 "parser.y" /* yacc.c:1646 */ +#line 488 "parser.y" /* yacc.c:1646 */ { if (!block_is_const((yyvsp[-1].blk))) { FAIL((yyloc), "Module metadata must be constant."); @@ -2640,11 +2624,11 @@ yyreduce: block_free((yyvsp[-4].blk)); jv_free((yyvsp[-2].literal)); } -#line 2644 "parser.c" /* yacc.c:1646 */ +#line 2628 "parser.c" /* yacc.c:1646 */ break; case 51: -#line 499 "parser.y" /* yacc.c:1646 */ +#line 500 "parser.y" /* yacc.c:1646 */ { if (!block_is_const((yyvsp[-1].blk))) { FAIL((yyloc), "Module metadata must be constant."); @@ -2657,173 +2641,173 @@ yyreduce: block_free((yyvsp[-5].blk)); jv_free((yyvsp[-2].literal)); } -#line 2661 "parser.c" /* yacc.c:1646 */ +#line 2645 "parser.c" /* yacc.c:1646 */ break; case 52: -#line 513 "parser.y" /* yacc.c:1646 */ +#line 514 "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 2670 "parser.c" /* yacc.c:1646 */ +#line 2654 "parser.c" /* yacc.c:1646 */ break; case 53: -#line 518 "parser.y" /* yacc.c:1646 */ +#line 519 "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 2679 "parser.c" /* yacc.c:1646 */ +#line 2663 "parser.c" /* yacc.c:1646 */ break; case 54: -#line 524 "parser.y" /* yacc.c:1646 */ +#line 525 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = (yyvsp[0].blk); } -#line 2687 "parser.c" /* yacc.c:1646 */ +#line 2671 "parser.c" /* yacc.c:1646 */ break; case 55: -#line 527 "parser.y" /* yacc.c:1646 */ +#line 528 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = BLOCK((yyvsp[-2].blk), (yyvsp[0].blk)); } -#line 2695 "parser.c" /* yacc.c:1646 */ +#line 2679 "parser.c" /* yacc.c:1646 */ break; case 56: -#line 532 "parser.y" /* yacc.c:1646 */ +#line 533 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_param_regular(jv_string_value((yyvsp[0].literal))); jv_free((yyvsp[0].literal)); } -#line 2704 "parser.c" /* yacc.c:1646 */ +#line 2688 "parser.c" /* yacc.c:1646 */ break; case 57: -#line 537 "parser.y" /* yacc.c:1646 */ +#line 538 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_param(jv_string_value((yyvsp[0].literal))); jv_free((yyvsp[0].literal)); } -#line 2713 "parser.c" /* yacc.c:1646 */ +#line 2697 "parser.c" /* yacc.c:1646 */ break; case 58: -#line 544 "parser.y" /* yacc.c:1646 */ +#line 545 "parser.y" /* yacc.c:1646 */ { (yyval.literal) = jv_string("text"); } -#line 2719 "parser.c" /* yacc.c:1646 */ +#line 2703 "parser.c" /* yacc.c:1646 */ break; case 59: -#line 544 "parser.y" /* yacc.c:1646 */ +#line 545 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = (yyvsp[-1].blk); jv_free((yyvsp[-2].literal)); } -#line 2728 "parser.c" /* yacc.c:1646 */ +#line 2712 "parser.c" /* yacc.c:1646 */ break; case 60: -#line 548 "parser.y" /* yacc.c:1646 */ +#line 549 "parser.y" /* yacc.c:1646 */ { (yyval.literal) = (yyvsp[-1].literal); } -#line 2734 "parser.c" /* yacc.c:1646 */ +#line 2718 "parser.c" /* yacc.c:1646 */ break; case 61: -#line 548 "parser.y" /* yacc.c:1646 */ +#line 549 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = (yyvsp[-1].blk); jv_free((yyvsp[-2].literal)); } +#line 2727 "parser.c" /* yacc.c:1646 */ + break; + + case 62: +#line 556 "parser.y" /* yacc.c:1646 */ + { + (yyval.blk) = gen_const(jv_string("")); +} +#line 2735 "parser.c" /* yacc.c:1646 */ + break; + + case 63: +#line 559 "parser.y" /* yacc.c:1646 */ + { + (yyval.blk) = gen_binop((yyvsp[-1].blk), gen_const((yyvsp[0].literal)), '+'); +} #line 2743 "parser.c" /* yacc.c:1646 */ break; - case 62: -#line 555 "parser.y" /* yacc.c:1646 */ + case 64: +#line 562 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = gen_const(jv_string("")); + (yyval.blk) = gen_binop((yyvsp[-3].blk), gen_format((yyvsp[-1].blk), jv_copy((yyvsp[-4].literal))), '+'); } #line 2751 "parser.c" /* yacc.c:1646 */ break; - case 63: -#line 558 "parser.y" /* yacc.c:1646 */ + case 65: +#line 568 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = gen_binop((yyvsp[-1].blk), gen_const((yyvsp[0].literal)), '+'); + (yyval.blk) = gen_cond((yyvsp[-3].blk), (yyvsp[-1].blk), (yyvsp[0].blk)); } #line 2759 "parser.c" /* yacc.c:1646 */ break; - case 64: -#line 561 "parser.y" /* yacc.c:1646 */ + case 66: +#line 571 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = gen_binop((yyvsp[-3].blk), gen_format((yyvsp[-1].blk), jv_copy((yyvsp[-4].literal))), '+'); + (yyval.blk) = (yyvsp[-1].blk); } #line 2767 "parser.c" /* yacc.c:1646 */ break; - case 65: -#line 567 "parser.y" /* yacc.c:1646 */ - { - (yyval.blk) = gen_cond((yyvsp[-3].blk), (yyvsp[-1].blk), (yyvsp[0].blk)); + case 67: +#line 576 "parser.y" /* yacc.c:1646 */ + { + (yyval.blk) = block_join((yyvsp[-2].blk), (yyvsp[0].blk)); } #line 2775 "parser.c" /* yacc.c:1646 */ break; - case 66: -#line 570 "parser.y" /* yacc.c:1646 */ + case 68: +#line 579 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = (yyvsp[-1].blk); + (yyval.blk) = BLOCK((yyvsp[0].blk), gen_call("_negate", gen_noop())); } #line 2783 "parser.c" /* yacc.c:1646 */ break; - case 67: -#line 575 "parser.y" /* yacc.c:1646 */ - { - (yyval.blk) = block_join((yyvsp[-2].blk), (yyvsp[0].blk)); + case 69: +#line 582 "parser.y" /* yacc.c:1646 */ + { + (yyval.blk) = (yyvsp[0].blk); } #line 2791 "parser.c" /* yacc.c:1646 */ break; - case 68: -#line 578 "parser.y" /* yacc.c:1646 */ + case 70: +#line 588 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = BLOCK((yyvsp[0].blk), gen_call("_negate", gen_noop())); + (yyval.blk) = gen_noop(); } #line 2799 "parser.c" /* yacc.c:1646 */ break; - case 69: -#line 581 "parser.y" /* yacc.c:1646 */ + case 71: +#line 591 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = (yyvsp[0].blk); + (yyval.blk) = gen_call("recurse", gen_noop()); } #line 2807 "parser.c" /* yacc.c:1646 */ break; - case 70: -#line 587 "parser.y" /* yacc.c:1646 */ - { - (yyval.blk) = gen_noop(); -} -#line 2815 "parser.c" /* yacc.c:1646 */ - break; - - case 71: -#line 590 "parser.y" /* yacc.c:1646 */ - { - (yyval.blk) = gen_call("recurse", gen_noop()); -} -#line 2823 "parser.c" /* yacc.c:1646 */ - break; - case 72: -#line 593 "parser.y" /* yacc.c:1646 */ +#line 594 "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, @@ -2832,231 +2816,231 @@ yyreduce: jv_free(v); jv_free((yyvsp[0].literal)); } -#line 2836 "parser.c" /* yacc.c:1646 */ +#line 2820 "parser.c" /* yacc.c:1646 */ break; case 73: -#line 601 "parser.y" /* yacc.c:1646 */ +#line 602 "parser.y" /* yacc.c:1646 */ { FAIL((yyloc), "break requires a label to break to"); (yyval.blk) = gen_noop(); } -#line 2845 "parser.c" /* yacc.c:1646 */ +#line 2829 "parser.c" /* yacc.c:1646 */ break; case 74: -#line 605 "parser.y" /* yacc.c:1646 */ +#line 606 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_index_opt((yyvsp[-2].blk), gen_const((yyvsp[-1].literal))); } +#line 2837 "parser.c" /* yacc.c:1646 */ + break; + + case 75: +#line 609 "parser.y" /* yacc.c:1646 */ + { + (yyval.blk) = gen_index_opt(gen_noop(), gen_const((yyvsp[-1].literal))); +} +#line 2845 "parser.c" /* yacc.c:1646 */ + break; + + case 76: +#line 612 "parser.y" /* yacc.c:1646 */ + { + (yyval.blk) = gen_index_opt((yyvsp[-3].blk), (yyvsp[-1].blk)); +} #line 2853 "parser.c" /* yacc.c:1646 */ break; - case 75: -#line 608 "parser.y" /* yacc.c:1646 */ - { - (yyval.blk) = gen_index_opt(gen_noop(), gen_const((yyvsp[-1].literal))); + case 77: +#line 615 "parser.y" /* yacc.c:1646 */ + { + (yyval.blk) = gen_index_opt(gen_noop(), (yyvsp[-1].blk)); } #line 2861 "parser.c" /* yacc.c:1646 */ break; - case 76: -#line 611 "parser.y" /* yacc.c:1646 */ + case 78: +#line 618 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = gen_index_opt((yyvsp[-3].blk), (yyvsp[-1].blk)); + (yyval.blk) = gen_index((yyvsp[-1].blk), gen_const((yyvsp[0].literal))); } #line 2869 "parser.c" /* yacc.c:1646 */ break; - case 77: -#line 614 "parser.y" /* yacc.c:1646 */ - { - (yyval.blk) = gen_index_opt(gen_noop(), (yyvsp[-1].blk)); + case 79: +#line 621 "parser.y" /* yacc.c:1646 */ + { + (yyval.blk) = gen_index(gen_noop(), gen_const((yyvsp[0].literal))); } #line 2877 "parser.c" /* yacc.c:1646 */ break; - case 78: -#line 617 "parser.y" /* yacc.c:1646 */ + case 80: +#line 624 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = gen_index((yyvsp[-1].blk), gen_const((yyvsp[0].literal))); + (yyval.blk) = gen_index((yyvsp[-2].blk), (yyvsp[0].blk)); } #line 2885 "parser.c" /* yacc.c:1646 */ break; - case 79: -#line 620 "parser.y" /* yacc.c:1646 */ - { - (yyval.blk) = gen_index(gen_noop(), gen_const((yyvsp[0].literal))); + case 81: +#line 627 "parser.y" /* yacc.c:1646 */ + { + (yyval.blk) = gen_index(gen_noop(), (yyvsp[0].blk)); } #line 2893 "parser.c" /* yacc.c:1646 */ break; - case 80: -#line 623 "parser.y" /* yacc.c:1646 */ - { - (yyval.blk) = gen_index((yyvsp[-2].blk), (yyvsp[0].blk)); -} -#line 2901 "parser.c" /* yacc.c:1646 */ - break; - - case 81: -#line 626 "parser.y" /* yacc.c:1646 */ - { - (yyval.blk) = gen_index(gen_noop(), (yyvsp[0].blk)); -} -#line 2909 "parser.c" /* yacc.c:1646 */ - break; - case 82: -#line 629 "parser.y" /* yacc.c:1646 */ +#line 630 "parser.y" /* yacc.c:1646 */ { FAIL((yyloc), "try .[\"field\"] instead of .field for unusually named fields"); (yyval.blk) = gen_noop(); } -#line 2918 "parser.c" /* yacc.c:1646 */ +#line 2902 "parser.c" /* yacc.c:1646 */ break; case 83: -#line 633 "parser.y" /* yacc.c:1646 */ +#line 634 "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 2928 "parser.c" /* yacc.c:1646 */ +#line 2912 "parser.c" /* yacc.c:1646 */ break; case 84: -#line 639 "parser.y" /* yacc.c:1646 */ +#line 640 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_index_opt((yyvsp[-4].blk), (yyvsp[-2].blk)); } +#line 2920 "parser.c" /* yacc.c:1646 */ + break; + + case 85: +#line 643 "parser.y" /* yacc.c:1646 */ + { + (yyval.blk) = gen_index((yyvsp[-3].blk), (yyvsp[-1].blk)); +} +#line 2928 "parser.c" /* yacc.c:1646 */ + break; + + case 86: +#line 646 "parser.y" /* yacc.c:1646 */ + { + (yyval.blk) = block_join((yyvsp[-3].blk), gen_op_simple(EACH_OPT)); +} #line 2936 "parser.c" /* yacc.c:1646 */ break; - case 85: -#line 642 "parser.y" /* yacc.c:1646 */ + case 87: +#line 649 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = gen_index((yyvsp[-3].blk), (yyvsp[-1].blk)); + (yyval.blk) = block_join((yyvsp[-2].blk), gen_op_simple(EACH)); } #line 2944 "parser.c" /* yacc.c:1646 */ break; - case 86: -#line 645 "parser.y" /* yacc.c:1646 */ + case 88: +#line 652 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = block_join((yyvsp[-3].blk), gen_op_simple(EACH_OPT)); + (yyval.blk) = gen_slice_index((yyvsp[-6].blk), (yyvsp[-4].blk), (yyvsp[-2].blk), INDEX_OPT); } #line 2952 "parser.c" /* yacc.c:1646 */ break; - case 87: -#line 648 "parser.y" /* yacc.c:1646 */ + case 89: +#line 655 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = block_join((yyvsp[-2].blk), gen_op_simple(EACH)); + (yyval.blk) = gen_slice_index((yyvsp[-5].blk), (yyvsp[-3].blk), gen_const(jv_null()), INDEX_OPT); } #line 2960 "parser.c" /* yacc.c:1646 */ break; - case 88: -#line 651 "parser.y" /* yacc.c:1646 */ + case 90: +#line 658 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = gen_slice_index((yyvsp[-6].blk), (yyvsp[-4].blk), (yyvsp[-2].blk), INDEX_OPT); + (yyval.blk) = gen_slice_index((yyvsp[-5].blk), gen_const(jv_null()), (yyvsp[-2].blk), INDEX_OPT); } #line 2968 "parser.c" /* yacc.c:1646 */ break; - case 89: -#line 654 "parser.y" /* yacc.c:1646 */ + case 91: +#line 661 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = gen_slice_index((yyvsp[-5].blk), (yyvsp[-3].blk), gen_const(jv_null()), INDEX_OPT); + (yyval.blk) = gen_slice_index((yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk), INDEX); } #line 2976 "parser.c" /* yacc.c:1646 */ break; - case 90: -#line 657 "parser.y" /* yacc.c:1646 */ + case 92: +#line 664 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = gen_slice_index((yyvsp[-5].blk), gen_const(jv_null()), (yyvsp[-2].blk), INDEX_OPT); + (yyval.blk) = gen_slice_index((yyvsp[-4].blk), (yyvsp[-2].blk), gen_const(jv_null()), INDEX); } #line 2984 "parser.c" /* yacc.c:1646 */ break; - case 91: -#line 660 "parser.y" /* yacc.c:1646 */ + case 93: +#line 667 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = gen_slice_index((yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk), INDEX); + (yyval.blk) = gen_slice_index((yyvsp[-4].blk), gen_const(jv_null()), (yyvsp[-1].blk), INDEX); } #line 2992 "parser.c" /* yacc.c:1646 */ break; - case 92: -#line 663 "parser.y" /* yacc.c:1646 */ + case 94: +#line 670 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = gen_slice_index((yyvsp[-4].blk), (yyvsp[-2].blk), gen_const(jv_null()), INDEX); + (yyval.blk) = gen_const((yyvsp[0].literal)); } #line 3000 "parser.c" /* yacc.c:1646 */ break; - case 93: -#line 666 "parser.y" /* yacc.c:1646 */ + case 95: +#line 673 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = gen_slice_index((yyvsp[-4].blk), gen_const(jv_null()), (yyvsp[-1].blk), INDEX); + (yyval.blk) = (yyvsp[0].blk); } #line 3008 "parser.c" /* yacc.c:1646 */ break; - case 94: -#line 669 "parser.y" /* yacc.c:1646 */ + case 96: +#line 676 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = gen_const((yyvsp[0].literal)); + (yyval.blk) = gen_format(gen_noop(), (yyvsp[0].literal)); } #line 3016 "parser.c" /* yacc.c:1646 */ break; - case 95: -#line 672 "parser.y" /* yacc.c:1646 */ - { - (yyval.blk) = (yyvsp[0].blk); + case 97: +#line 679 "parser.y" /* yacc.c:1646 */ + { + (yyval.blk) = (yyvsp[-1].blk); } #line 3024 "parser.c" /* yacc.c:1646 */ break; - case 96: -#line 675 "parser.y" /* yacc.c:1646 */ - { - (yyval.blk) = gen_format(gen_noop(), (yyvsp[0].literal)); + case 98: +#line 682 "parser.y" /* yacc.c:1646 */ + { + (yyval.blk) = gen_collect((yyvsp[-1].blk)); } #line 3032 "parser.c" /* yacc.c:1646 */ break; - case 97: -#line 678 "parser.y" /* yacc.c:1646 */ + case 99: +#line 685 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = (yyvsp[-1].blk); + (yyval.blk) = gen_const(jv_array()); } #line 3040 "parser.c" /* yacc.c:1646 */ break; - case 98: -#line 681 "parser.y" /* yacc.c:1646 */ - { - (yyval.blk) = gen_collect((yyvsp[-1].blk)); -} -#line 3048 "parser.c" /* yacc.c:1646 */ - break; - - case 99: -#line 684 "parser.y" /* yacc.c:1646 */ - { - (yyval.blk) = gen_const(jv_array()); -} -#line 3056 "parser.c" /* yacc.c:1646 */ - break; - case 100: -#line 687 "parser.y" /* yacc.c:1646 */ +#line 688 "parser.y" /* yacc.c:1646 */ { block o = gen_const_object((yyvsp[-1].blk)); if (o.first != NULL) @@ -3064,20 +3048,29 @@ yyreduce: else (yyval.blk) = BLOCK(gen_subexp(gen_const(jv_object())), (yyvsp[-1].blk), gen_op_simple(POP)); } -#line 3068 "parser.c" /* yacc.c:1646 */ +#line 3052 "parser.c" /* yacc.c:1646 */ break; case 101: -#line 694 "parser.y" /* yacc.c:1646 */ +#line 695 "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 3061 "parser.c" /* yacc.c:1646 */ + break; + + case 102: +#line 699 "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 3077 "parser.c" /* yacc.c:1646 */ +#line 3070 "parser.c" /* yacc.c:1646 */ break; - case 102: -#line 698 "parser.y" /* yacc.c:1646 */ + case 103: +#line 703 "parser.y" /* yacc.c:1646 */ { const char *s = jv_string_value((yyvsp[0].literal)); if (strcmp(s, "false") == 0) @@ -3090,143 +3083,143 @@ yyreduce: (yyval.blk) = gen_location((yyloc), locations, gen_call(s, gen_noop())); jv_free((yyvsp[0].literal)); } -#line 3094 "parser.c" /* yacc.c:1646 */ +#line 3087 "parser.c" /* yacc.c:1646 */ break; - case 103: -#line 710 "parser.y" /* yacc.c:1646 */ + case 104: +#line 715 "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 3104 "parser.c" /* yacc.c:1646 */ - break; - - case 104: -#line 715 "parser.y" /* yacc.c:1646 */ - { (yyval.blk) = gen_noop(); } -#line 3110 "parser.c" /* yacc.c:1646 */ +#line 3097 "parser.c" /* yacc.c:1646 */ break; case 105: -#line 716 "parser.y" /* yacc.c:1646 */ +#line 720 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_noop(); } -#line 3116 "parser.c" /* yacc.c:1646 */ +#line 3103 "parser.c" /* yacc.c:1646 */ break; case 106: -#line 717 "parser.y" /* yacc.c:1646 */ - { (yyval.blk) = (yyvsp[-3].blk); } -#line 3122 "parser.c" /* yacc.c:1646 */ +#line 721 "parser.y" /* yacc.c:1646 */ + { (yyval.blk) = gen_noop(); } +#line 3109 "parser.c" /* yacc.c:1646 */ break; case 107: -#line 718 "parser.y" /* yacc.c:1646 */ - { (yyval.blk) = gen_noop(); } -#line 3128 "parser.c" /* yacc.c:1646 */ +#line 722 "parser.y" /* yacc.c:1646 */ + { (yyval.blk) = (yyvsp[-3].blk); } +#line 3115 "parser.c" /* yacc.c:1646 */ break; case 108: -#line 721 "parser.y" /* yacc.c:1646 */ - { - (yyval.blk) = (yyvsp[0].blk); -} -#line 3136 "parser.c" /* yacc.c:1646 */ +#line 723 "parser.y" /* yacc.c:1646 */ + { (yyval.blk) = gen_noop(); } +#line 3121 "parser.c" /* yacc.c:1646 */ break; case 109: -#line 724 "parser.y" /* yacc.c:1646 */ +#line 726 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = BLOCK((yyvsp[-2].blk), (yyvsp[0].blk)); + (yyval.blk) = (yyvsp[0].blk); } -#line 3144 "parser.c" /* yacc.c:1646 */ +#line 3129 "parser.c" /* yacc.c:1646 */ break; case 110: #line 729 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = gen_lambda((yyvsp[0].blk)); + (yyval.blk) = BLOCK((yyvsp[-2].blk), (yyvsp[0].blk)); } -#line 3152 "parser.c" /* yacc.c:1646 */ +#line 3137 "parser.c" /* yacc.c:1646 */ break; case 111: #line 734 "parser.y" /* yacc.c:1646 */ - { - (yyval.blk)=gen_noop(); + { + (yyval.blk) = gen_lambda((yyvsp[0].blk)); } -#line 3160 "parser.c" /* yacc.c:1646 */ +#line 3145 "parser.c" /* yacc.c:1646 */ break; case 112: -#line 737 "parser.y" /* yacc.c:1646 */ - { (yyval.blk) = (yyvsp[0].blk); } -#line 3166 "parser.c" /* yacc.c:1646 */ +#line 739 "parser.y" /* yacc.c:1646 */ + { + (yyval.blk)=gen_noop(); +} +#line 3153 "parser.c" /* yacc.c:1646 */ break; case 113: -#line 738 "parser.y" /* yacc.c:1646 */ - { (yyval.blk)=block_join((yyvsp[-2].blk), (yyvsp[0].blk)); } -#line 3172 "parser.c" /* yacc.c:1646 */ +#line 742 "parser.y" /* yacc.c:1646 */ + { (yyval.blk) = (yyvsp[0].blk); } +#line 3159 "parser.c" /* yacc.c:1646 */ break; case 114: -#line 739 "parser.y" /* yacc.c:1646 */ - { (yyval.blk) = (yyvsp[0].blk); } -#line 3178 "parser.c" /* yacc.c:1646 */ +#line 743 "parser.y" /* yacc.c:1646 */ + { (yyval.blk)=block_join((yyvsp[-2].blk), (yyvsp[0].blk)); } +#line 3165 "parser.c" /* yacc.c:1646 */ break; case 115: -#line 742 "parser.y" /* yacc.c:1646 */ - { - (yyval.blk) = gen_dictpair(gen_const((yyvsp[-2].literal)), (yyvsp[0].blk)); - } -#line 3186 "parser.c" /* yacc.c:1646 */ +#line 744 "parser.y" /* yacc.c:1646 */ + { (yyval.blk) = (yyvsp[0].blk); } +#line 3171 "parser.c" /* yacc.c:1646 */ break; case 116: -#line 745 "parser.y" /* yacc.c:1646 */ - { - (yyval.blk) = gen_dictpair((yyvsp[-2].blk), (yyvsp[0].blk)); - } -#line 3194 "parser.c" /* yacc.c:1646 */ +#line 747 "parser.y" /* yacc.c:1646 */ + { + (yyval.blk) = gen_dictpair(gen_const((yyvsp[-2].literal)), (yyvsp[0].blk)); + } +#line 3179 "parser.c" /* yacc.c:1646 */ break; case 117: -#line 748 "parser.y" /* yacc.c:1646 */ +#line 750 "parser.y" /* yacc.c:1646 */ + { + (yyval.blk) = gen_dictpair((yyvsp[-2].blk), (yyvsp[0].blk)); + } +#line 3187 "parser.c" /* yacc.c:1646 */ + break; + + case 118: +#line 753 "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 3203 "parser.c" /* yacc.c:1646 */ +#line 3196 "parser.c" /* yacc.c:1646 */ break; - case 118: -#line 752 "parser.y" /* yacc.c:1646 */ + case 119: +#line 757 "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 3212 "parser.c" /* yacc.c:1646 */ - break; - - case 119: -#line 756 "parser.y" /* yacc.c:1646 */ - { - (yyval.blk) = gen_dictpair((yyvsp[-3].blk), (yyvsp[0].blk)); - } -#line 3220 "parser.c" /* yacc.c:1646 */ +#line 3205 "parser.c" /* yacc.c:1646 */ break; case 120: -#line 759 "parser.y" /* yacc.c:1646 */ +#line 761 "parser.y" /* yacc.c:1646 */ + { + (yyval.blk) = gen_dictpair((yyvsp[-3].blk), (yyvsp[0].blk)); + } +#line 3213 "parser.c" /* yacc.c:1646 */ + break; + + case 121: +#line 764 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = (yyvsp[0].blk); } -#line 3226 "parser.c" /* yacc.c:1646 */ +#line 3219 "parser.c" /* yacc.c:1646 */ break; -#line 3230 "parser.c" /* yacc.c:1646 */ +#line 3223 "parser.c" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -3461,7 +3454,7 @@ yyreturn: #endif return yyresult; } -#line 760 "parser.y" /* yacc.c:1906 */ +#line 765 "parser.y" /* yacc.c:1906 */ int jq_parse(struct locfile* locations, block* answer) { diff --git a/parser.h b/parser.h index 55dace4e..a7b64d3d 100644 --- a/parser.h +++ b/parser.h @@ -92,19 +92,20 @@ struct lexer_param; CATCH = 282, LABEL = 283, BREAK = 284, - SETPIPE = 285, - SETPLUS = 286, - SETMINUS = 287, - SETMULT = 288, - SETDIV = 289, - SETDEFINEDOR = 290, - LESSEQ = 291, - GREATEREQ = 292, - QQSTRING_START = 293, - QQSTRING_TEXT = 294, - QQSTRING_INTERP_START = 295, - QQSTRING_INTERP_END = 296, - QQSTRING_END = 297 + LOC = 285, + SETPIPE = 286, + SETPLUS = 287, + SETMINUS = 288, + SETMULT = 289, + SETDIV = 290, + SETDEFINEDOR = 291, + LESSEQ = 292, + GREATEREQ = 293, + QQSTRING_START = 294, + QQSTRING_TEXT = 295, + QQSTRING_INTERP_START = 296, + QQSTRING_INTERP_END = 297, + QQSTRING_END = 298 }; #endif /* Tokens. */ @@ -135,19 +136,20 @@ struct lexer_param; #define CATCH 282 #define LABEL 283 #define BREAK 284 -#define SETPIPE 285 -#define SETPLUS 286 -#define SETMINUS 287 -#define SETMULT 288 -#define SETDIV 289 -#define SETDEFINEDOR 290 -#define LESSEQ 291 -#define GREATEREQ 292 -#define QQSTRING_START 293 -#define QQSTRING_TEXT 294 -#define QQSTRING_INTERP_START 295 -#define QQSTRING_INTERP_END 296 -#define QQSTRING_END 297 +#define LOC 285 +#define SETPIPE 286 +#define SETPLUS 287 +#define SETMINUS 288 +#define SETMULT 289 +#define SETDIV 290 +#define SETDEFINEDOR 291 +#define LESSEQ 292 +#define GREATEREQ 293 +#define QQSTRING_START 294 +#define QQSTRING_TEXT 295 +#define QQSTRING_INTERP_START 296 +#define QQSTRING_INTERP_END 297 +#define QQSTRING_END 298 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -159,7 +161,7 @@ union YYSTYPE jv literal; block blk; -#line 163 "parser.h" /* yacc.c:1909 */ +#line 165 "parser.h" /* yacc.c:1909 */ }; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 diff --git a/parser.y b/parser.y index 03b80599..00d097c9 100644 --- a/parser.y +++ b/parser.y @@ -72,6 +72,7 @@ struct lexer_param; %token CATCH "catch" %token LABEL "label" %token BREAK "break" +%token LOC "__loc__" %token SETPIPE "|=" %token SETPLUS "+=" %token SETMINUS "-=" @@ -691,6 +692,10 @@ FORMAT { else $$ = BLOCK(gen_subexp(gen_const(jv_object())), $2, gen_op_simple(POP)); } | +'$' LOC { + $$ = gen_const(JV_OBJECT(jv_string("file"), jv_copy(locations->fname), + jv_string("line"), jv_number(locfile_get_line(locations, @$.start) + 1))); +} | '$' IDENT { $$ = gen_location(@$, locations, gen_op_unbound(LOADV, jv_string_value($2))); jv_free($2); diff --git a/tests/all.test b/tests/all.test index 5b90420d..075e8471 100644 --- a/tests/all.test +++ b/tests/all.test @@ -814,6 +814,10 @@ def inc(x): x |= .+1; inc(.[].a) [null,true,{"a":1}] [] +try error("\($__loc__)") catch . +null +"{\"file\":\"\",\"line\":1}" + # string operations [.[]|startswith("foo")] ["fo", "foo", "barfoo", "foobar", "barfoob"]