From bad9ab7479d66dfdb1c8e2d18c23fbcff9ec394b Mon Sep 17 00:00:00 2001 From: Kimplul Date: Tue, 15 Aug 2023 21:41:29 +0300 Subject: updates to syntax --- TODO | 3 + gen/gen_lexer.c | 817 ++++++----- gen/gen_lexer.h | 2 +- gen/gen_parser.c | 3840 ++++++++++++++++++++++++++++------------------------ gen/gen_parser.h | 157 +-- src/ast.c | 7 +- src/lexer.l | 16 +- src/parser.y | 490 ++++--- src/scope.c | 12 +- tests/arr.ek | 5 + tests/blocks.ek | 10 + tests/callbacks.ek | 4 +- tests/resolve.ek | 2 +- tests/structs.ek | 38 +- 14 files changed, 2972 insertions(+), 2431 deletions(-) create mode 100644 tests/arr.ek create mode 100644 tests/blocks.ek diff --git a/TODO b/TODO index 9d9f25e..f692f32 100644 --- a/TODO +++ b/TODO @@ -12,6 +12,9 @@ to be used to interface with C + Come up with some better file extension, .cu seems to be used by cuda - In fact Copper is already taken :( ++ Build new type system (current one build on top of AST fucking sucks) ++ Build the consteval stuff + OPTIMIZATIONS: + Use hashmaps or something similar for lookups for types and calls + Output one procedure at a time through the backend, would allow us to free diff --git a/gen/gen_lexer.c b/gen/gen_lexer.c index 1484b6b..fbd1d94 100644 --- a/gen/gen_lexer.c +++ b/gen/gen_lexer.c @@ -339,8 +339,8 @@ static void yynoreturn yy_fatal_error ( const char* msg , yyscan_t yyscanner ); yyg->yy_hold_char = *yy_cp; \ *yy_cp = '\0'; \ yyg->yy_c_buf_p = yy_cp; -#define YY_NUM_RULES 94 -#define YY_END_OF_BUFFER 95 +#define YY_NUM_RULES 97 +#define YY_END_OF_BUFFER 98 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -348,33 +348,33 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[224] = +static const flex_int16_t yy_accept[231] = { 0, - 0, 0, 0, 0, 95, 93, 92, 92, 20, 93, - 93, 27, 36, 35, 10, 11, 25, 23, 17, 24, - 16, 26, 89, 89, 19, 18, 42, 41, 43, 22, - 91, 14, 15, 28, 91, 91, 91, 91, 91, 91, - 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, - 12, 38, 13, 40, 6, 8, 5, 7, 92, 46, - 0, 88, 0, 21, 54, 37, 57, 0, 0, 0, - 0, 51, 89, 89, 52, 0, 2, 1, 53, 90, - 89, 0, 0, 9, 49, 44, 47, 48, 45, 50, - 91, 55, 29, 62, 91, 91, 91, 91, 79, 91, - - 91, 91, 91, 91, 91, 72, 91, 91, 91, 91, - 91, 91, 91, 91, 91, 91, 91, 91, 58, 39, - 6, 5, 4, 3, 30, 0, 0, 0, 0, 0, - 61, 1, 0, 90, 0, 90, 89, 89, 59, 60, - 56, 91, 91, 91, 91, 91, 91, 91, 91, 77, - 91, 91, 90, 80, 63, 91, 91, 91, 91, 91, - 91, 91, 34, 32, 0, 0, 0, 0, 0, 91, - 76, 91, 91, 91, 91, 74, 91, 84, 91, 73, - 91, 91, 91, 91, 91, 91, 91, 91, 32, 33, - 31, 0, 90, 86, 81, 91, 64, 91, 71, 91, - - 91, 91, 91, 91, 91, 91, 91, 65, 78, 91, - 85, 83, 68, 82, 70, 66, 75, 91, 69, 91, - 67, 87, 0 + 0, 0, 0, 0, 98, 96, 95, 95, 20, 96, + 96, 27, 37, 36, 10, 11, 25, 23, 17, 24, + 16, 26, 91, 91, 19, 18, 43, 42, 44, 35, + 22, 93, 14, 15, 28, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 12, 39, 13, 41, 6, 8, 5, 7, 95, + 47, 0, 90, 0, 21, 55, 38, 58, 0, 0, + 0, 0, 52, 91, 91, 53, 0, 2, 1, 54, + 92, 91, 0, 0, 9, 50, 45, 48, 49, 46, + 51, 0, 94, 93, 56, 29, 63, 93, 93, 93, + + 93, 80, 93, 93, 93, 93, 93, 93, 73, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 59, 40, 6, 5, 4, 3, 30, 0, 0, + 0, 0, 0, 62, 1, 0, 92, 0, 92, 91, + 91, 60, 61, 57, 93, 93, 93, 93, 93, 93, + 93, 93, 78, 93, 93, 92, 81, 64, 93, 93, + 93, 93, 93, 93, 93, 34, 32, 0, 0, 0, + 0, 0, 93, 77, 93, 93, 93, 93, 93, 75, + 93, 85, 93, 74, 93, 93, 93, 93, 93, 93, + 93, 93, 32, 33, 31, 0, 92, 87, 82, 93, + + 93, 65, 93, 72, 93, 93, 93, 93, 93, 93, + 93, 93, 66, 79, 93, 93, 86, 84, 69, 83, + 71, 67, 76, 93, 70, 93, 89, 68, 88, 0 } ; static const YY_CHAR yy_ec[256] = @@ -385,14 +385,14 @@ static const YY_CHAR yy_ec[256] = 1, 2, 4, 5, 6, 1, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 20, 20, 20, 20, 20, 20, 21, 22, 23, 24, - 25, 26, 1, 27, 28, 28, 28, 28, 29, 30, - 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, - 31, 31, 31, 31, 31, 31, 31, 33, 31, 31, - 34, 35, 36, 37, 31, 1, 38, 39, 40, 41, - - 42, 43, 44, 45, 46, 31, 47, 48, 49, 50, - 51, 52, 31, 53, 54, 55, 56, 31, 57, 58, - 59, 60, 61, 62, 63, 64, 1, 1, 1, 1, + 25, 26, 27, 28, 29, 29, 29, 29, 30, 31, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 33, + 32, 32, 32, 32, 32, 32, 32, 34, 32, 32, + 35, 36, 37, 38, 32, 1, 39, 40, 41, 42, + + 43, 44, 45, 46, 47, 32, 48, 49, 50, 51, + 52, 53, 32, 54, 55, 56, 57, 32, 58, 59, + 60, 61, 62, 63, 64, 65, 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, @@ -409,130 +409,181 @@ static const YY_CHAR yy_ec[256] = 1, 1, 1, 1, 1 } ; -static const YY_CHAR yy_meta[65] = +static const YY_CHAR yy_meta[66] = { 0, - 1, 1, 2, 1, 1, 1, 1, 1, 3, 1, - 1, 4, 1, 1, 1, 1, 4, 5, 5, 5, - 5, 1, 1, 1, 1, 1, 1, 5, 5, 5, - 6, 6, 6, 1, 1, 1, 1, 5, 5, 5, - 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 1, 1, 1, 1 + 1, 2, 3, 2, 1, 1, 1, 1, 4, 1, + 1, 5, 1, 1, 1, 1, 5, 6, 6, 6, + 6, 1, 1, 1, 1, 1, 1, 1, 6, 6, + 6, 2, 2, 2, 1, 1, 1, 1, 6, 6, + 6, 6, 6, 6, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 1, 1, 1, 1 } ; -static const flex_int16_t yy_base[234] = +static const flex_int16_t yy_base[241] = { 0, - 0, 0, 62, 63, 367, 368, 65, 67, 341, 66, - 359, 339, 64, 328, 368, 368, 368, 63, 368, 72, - 346, 61, 84, 90, 339, 368, 52, 69, 73, 368, - 0, 368, 368, 82, 306, 306, 74, 45, 66, 307, - 306, 77, 300, 317, 298, 311, 75, 293, 301, 305, - 368, 60, 368, 368, 0, 368, 101, 337, 126, 368, - 126, 368, 345, 368, 368, 368, 368, 338, 115, 120, - 127, 368, 139, 146, 368, 330, 368, 0, 368, 185, - 161, 0, 131, 368, 320, 368, 368, 368, 368, 319, - 0, 368, 318, 0, 300, 287, 290, 296, 0, 284, - - 298, 280, 280, 281, 278, 0, 280, 288, 275, 279, - 289, 272, 266, 272, 278, 271, 276, 275, 368, 368, - 0, 139, 368, 368, 368, 311, 165, 177, 310, 0, - 368, 0, 150, 169, 198, 368, 169, 157, 368, 368, - 368, 280, 275, 137, 178, 274, 273, 265, 271, 0, - 261, 260, 0, 0, 0, 254, 267, 252, 252, 264, - 254, 256, 368, 368, 213, 216, 294, 177, 223, 255, - 0, 246, 254, 246, 248, 0, 256, 0, 243, 0, - 242, 241, 241, 246, 240, 189, 226, 232, 368, 368, - 368, 227, 231, 0, 0, 217, 0, 197, 0, 187, - - 171, 173, 167, 153, 162, 160, 151, 0, 0, 137, - 0, 0, 0, 0, 0, 0, 0, 120, 0, 110, - 0, 0, 368, 252, 258, 264, 266, 272, 278, 284, - 139, 288, 132 + 0, 0, 63, 64, 317, 830, 66, 68, 287, 67, + 300, 269, 65, 257, 830, 830, 830, 64, 830, 73, + 275, 62, 81, 88, 265, 830, 53, 70, 85, 830, + 830, 110, 830, 830, 80, 120, 123, 126, 129, 133, + 139, 142, 145, 148, 151, 154, 157, 160, 164, 183, + 167, 830, 113, 830, 830, 0, 830, 122, 274, 114, + 830, 83, 830, 262, 830, 830, 830, 830, 250, 179, + 207, 224, 830, 230, 236, 830, 231, 830, 0, 830, + 277, 242, 0, 155, 830, 214, 830, 830, 830, 830, + 192, 199, 830, 206, 830, 190, 218, 227, 233, 265, + + 269, 272, 275, 278, 281, 297, 300, 307, 320, 323, + 329, 332, 338, 341, 344, 347, 353, 356, 362, 365, + 375, 830, 830, 0, 176, 830, 830, 830, 205, 352, + 296, 197, 0, 830, 0, 364, 373, 405, 830, 179, + 161, 830, 830, 830, 393, 407, 425, 431, 434, 439, + 442, 445, 449, 452, 455, 458, 461, 464, 469, 481, + 487, 491, 494, 497, 506, 830, 830, 493, 310, 195, + 200, 501, 525, 528, 531, 536, 539, 548, 554, 557, + 561, 564, 567, 572, 575, 578, 582, 586, 589, 595, + 604, 607, 830, 830, 830, 594, 598, 620, 636, 639, + + 642, 649, 654, 657, 660, 663, 666, 669, 672, 675, + 679, 682, 685, 690, 696, 699, 702, 705, 712, 721, + 727, 730, 733, 736, 739, 742, 745, 748, 754, 830, + 785, 791, 797, 802, 808, 814, 820, 114, 823, 80 } ; -static const flex_int16_t yy_def[234] = +static const flex_int16_t yy_def[241] = { 0, - 223, 1, 224, 224, 223, 223, 223, 223, 223, 225, - 223, 223, 223, 226, 223, 223, 223, 223, 223, 223, - 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, - 227, 223, 223, 223, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 223, 223, 223, 223, 228, 223, 223, 223, 223, 223, - 225, 223, 225, 223, 223, 223, 223, 223, 229, 223, - 223, 223, 223, 223, 223, 223, 223, 230, 223, 223, - 223, 231, 223, 223, 223, 223, 223, 223, 223, 223, - 227, 223, 223, 227, 227, 227, 227, 227, 227, 227, - - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 223, 223, - 228, 223, 223, 223, 223, 223, 223, 223, 232, 233, - 223, 230, 223, 223, 223, 223, 231, 223, 223, 223, - 223, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 223, 223, 223, 223, 232, 233, 223, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 223, 223, - 223, 223, 223, 227, 227, 227, 227, 227, 227, 227, - - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 0, 223, 223, 223, 223, 223, 223, 223, - 223, 223, 223 + 230, 1, 231, 231, 230, 230, 230, 230, 230, 232, + 230, 230, 230, 233, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + 230, 234, 230, 230, 230, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 230, 230, 230, 230, 235, 230, 230, 230, 230, + 230, 232, 230, 232, 230, 230, 230, 230, 230, 236, + 230, 230, 230, 230, 230, 230, 230, 230, 237, 230, + 230, 230, 238, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 234, 230, 230, 234, 234, 234, 234, + + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 230, 230, 235, 230, 230, 230, 230, 230, 230, + 230, 239, 240, 230, 237, 230, 230, 230, 230, 238, + 230, 230, 230, 230, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 230, 230, 230, 230, 239, + 240, 230, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 230, 230, 230, 230, 230, 234, 234, 234, + + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 0, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230 } ; -static const flex_int16_t yy_nxt[433] = +static const flex_int16_t yy_nxt[896] = { 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 24, - 24, 25, 26, 27, 28, 29, 30, 31, 31, 31, - 31, 31, 31, 32, 6, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 31, 42, 31, 31, 43, 44, - 31, 45, 46, 47, 48, 49, 50, 31, 31, 31, - 51, 52, 53, 54, 56, 56, 59, 59, 59, 59, - 62, 66, 77, 57, 57, 85, 86, 78, 58, 58, - 70, 71, 71, 71, 119, 79, 98, 72, 67, 73, - 74, 74, 74, 87, 88, 99, 75, 89, 90, 80, - - 63, 81, 81, 81, 74, 80, 92, 74, 74, 74, - 74, 96, 122, 100, 101, 102, 82, 123, 93, 106, - 113, 120, 83, 103, 97, 107, 108, 59, 59, 114, - 62, 115, 127, 127, 127, 80, 168, 71, 71, 71, - 71, 82, 80, 137, 71, 71, 71, 71, 138, 138, - 122, 222, 130, 128, 80, 123, 74, 74, 74, 74, - 63, 80, 221, 74, 74, 74, 74, 134, 134, 134, - 134, 130, 129, 164, 138, 138, 80, 130, 81, 81, - 81, 74, 165, 165, 165, 163, 134, 134, 134, 134, - 172, 173, 220, 219, 166, 166, 130, 133, 136, 133, - - 169, 218, 134, 134, 134, 134, 217, 216, 169, 215, - 133, 136, 133, 135, 136, 134, 134, 134, 134, 174, - 169, 189, 214, 175, 190, 213, 135, 136, 169, 206, - 165, 165, 165, 166, 166, 192, 212, 192, 211, 207, - 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 55, 55, 55, 55, 55, 55, 61, 61, - 61, 61, 61, 61, 68, 68, 210, 68, 68, 68, - 91, 91, 121, 209, 121, 208, 121, 121, 126, 205, - 126, 126, 126, 126, 132, 204, 132, 132, 132, 132, - 167, 203, 167, 202, 201, 200, 199, 198, 197, 196, - - 195, 194, 191, 188, 187, 186, 185, 184, 183, 182, - 181, 180, 179, 178, 177, 176, 171, 170, 163, 163, - 162, 161, 160, 159, 158, 157, 156, 155, 153, 154, - 153, 152, 151, 150, 149, 148, 147, 146, 145, 144, - 143, 142, 141, 140, 139, 131, 125, 223, 124, 118, - 117, 116, 112, 111, 110, 109, 105, 104, 95, 94, - 84, 76, 69, 65, 64, 60, 223, 5, 223, 223, - 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, - 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, - 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, - - 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, - 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, - 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, - 223, 223 + 24, 25, 26, 27, 28, 29, 30, 31, 32, 32, + 32, 32, 32, 32, 33, 6, 34, 35, 36, 37, + 38, 39, 40, 41, 42, 32, 43, 32, 32, 44, + 45, 32, 46, 47, 48, 49, 50, 51, 32, 32, + 32, 52, 53, 54, 55, 57, 57, 60, 60, 60, + 60, 63, 67, 78, 58, 58, 86, 87, 79, 59, + 59, 71, 72, 72, 72, 171, 80, 63, 73, 68, + 74, 75, 75, 75, 88, 89, 81, 76, 82, 82, + + 82, 75, 64, 81, 95, 75, 75, 75, 75, 90, + 91, 92, 92, 93, 83, 60, 60, 96, 64, 140, + 84, 92, 92, 93, 92, 92, 93, 92, 92, 93, + 92, 92, 93, 125, 92, 92, 93, 122, 126, 83, + 92, 92, 93, 92, 92, 93, 92, 92, 93, 92, + 92, 93, 92, 92, 93, 92, 92, 93, 92, 92, + 93, 92, 92, 93, 99, 92, 92, 93, 92, 92, + 93, 101, 141, 141, 97, 123, 98, 100, 141, 141, + 102, 103, 104, 105, 92, 92, 93, 125, 109, 113, + 107, 106, 126, 108, 110, 111, 130, 130, 130, 115, + + 92, 92, 93, 195, 112, 166, 116, 92, 92, 93, + 114, 172, 121, 166, 144, 117, 143, 118, 131, 92, + 92, 93, 81, 119, 72, 72, 72, 72, 92, 92, + 93, 172, 172, 120, 92, 92, 93, 132, 142, 81, + 133, 72, 72, 72, 72, 81, 134, 75, 75, 75, + 75, 81, 172, 75, 75, 75, 75, 81, 128, 82, + 82, 82, 75, 133, 230, 133, 92, 92, 93, 145, + 92, 92, 93, 92, 92, 93, 92, 92, 93, 92, + 92, 93, 92, 92, 93, 127, 85, 146, 133, 136, + 77, 136, 70, 66, 137, 137, 137, 137, 92, 92, + + 93, 92, 92, 93, 166, 65, 138, 139, 92, 92, + 93, 61, 148, 169, 169, 147, 230, 150, 194, 138, + 139, 92, 92, 93, 92, 92, 93, 169, 169, 149, + 92, 92, 93, 92, 92, 93, 230, 151, 230, 92, + 92, 93, 92, 92, 93, 92, 92, 93, 92, 92, + 93, 230, 152, 153, 92, 92, 93, 92, 92, 93, + 167, 230, 154, 92, 92, 93, 92, 92, 93, 168, + 168, 168, 156, 230, 230, 155, 92, 92, 93, 230, + 158, 137, 137, 137, 137, 230, 230, 157, 156, 230, + 137, 137, 137, 137, 92, 92, 93, 230, 230, 159, + + 230, 230, 162, 139, 230, 230, 161, 160, 92, 92, + 93, 164, 230, 230, 163, 230, 139, 136, 230, 136, + 230, 165, 137, 137, 137, 137, 92, 92, 93, 230, + 230, 173, 92, 92, 93, 92, 92, 93, 230, 230, + 92, 92, 93, 92, 92, 93, 92, 92, 93, 174, + 92, 92, 93, 92, 92, 93, 92, 92, 93, 92, + 92, 93, 92, 92, 93, 92, 92, 93, 230, 177, + 92, 92, 93, 178, 230, 230, 180, 179, 230, 175, + 176, 181, 92, 92, 93, 230, 230, 183, 92, 92, + 93, 182, 92, 92, 93, 92, 92, 93, 92, 92, + + 93, 193, 230, 184, 230, 230, 185, 92, 92, 93, + 168, 168, 168, 196, 230, 196, 230, 230, 197, 197, + 197, 197, 230, 187, 230, 186, 92, 92, 93, 92, + 92, 93, 92, 92, 93, 230, 190, 92, 92, 93, + 92, 92, 93, 188, 230, 230, 189, 230, 191, 92, + 92, 93, 230, 230, 192, 92, 92, 93, 92, 92, + 93, 230, 92, 92, 93, 92, 92, 93, 92, 92, + 93, 230, 198, 92, 92, 93, 92, 92, 93, 92, + 92, 93, 200, 92, 92, 93, 199, 92, 92, 93, + 92, 92, 93, 230, 230, 201, 92, 92, 93, 230, + + 230, 202, 204, 230, 203, 92, 92, 93, 92, 92, + 93, 197, 197, 197, 197, 197, 197, 197, 197, 230, + 205, 92, 92, 93, 230, 230, 209, 230, 206, 210, + 230, 207, 230, 208, 230, 230, 211, 92, 92, 93, + 92, 92, 93, 92, 92, 93, 212, 230, 230, 214, + 92, 92, 93, 230, 213, 92, 92, 93, 92, 92, + 93, 92, 92, 93, 92, 92, 93, 92, 92, 93, + 92, 92, 93, 92, 92, 93, 92, 92, 93, 230, + 92, 92, 93, 92, 92, 93, 92, 92, 93, 215, + 216, 92, 92, 93, 230, 230, 217, 92, 92, 93, + + 92, 92, 93, 92, 92, 93, 92, 92, 93, 230, + 218, 230, 221, 92, 92, 93, 220, 230, 219, 230, + 223, 224, 92, 92, 93, 225, 230, 222, 92, 92, + 93, 92, 92, 93, 92, 92, 93, 92, 92, 93, + 92, 92, 93, 92, 92, 93, 92, 92, 93, 92, + 92, 93, 226, 230, 227, 92, 92, 93, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 228, + 230, 230, 230, 230, 229, 56, 56, 56, 56, 56, + 56, 62, 62, 62, 62, 62, 62, 69, 69, 69, + + 230, 69, 69, 94, 94, 230, 230, 94, 124, 124, + 230, 124, 230, 124, 129, 129, 230, 129, 129, 129, + 135, 135, 230, 135, 135, 135, 170, 230, 170, 5, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230 + } ; -static const flex_int16_t yy_chk[433] = +static const flex_int16_t yy_chk[896] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -540,48 +591,99 @@ static const flex_int16_t yy_chk[433] = 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, 3, 4, 7, 7, 8, 8, - 10, 13, 22, 3, 4, 27, 27, 22, 3, 4, - 18, 18, 18, 18, 52, 22, 38, 18, 13, 20, - 20, 20, 20, 28, 28, 38, 20, 29, 29, 23, - - 10, 23, 23, 23, 23, 24, 34, 24, 24, 24, - 24, 37, 57, 39, 39, 39, 23, 57, 34, 42, - 47, 52, 23, 39, 37, 42, 42, 59, 59, 47, - 61, 47, 69, 69, 69, 70, 233, 70, 70, 70, - 70, 23, 71, 231, 71, 71, 71, 71, 83, 83, - 122, 220, 70, 69, 73, 122, 73, 73, 73, 73, - 61, 74, 218, 74, 74, 74, 74, 133, 133, 133, - 133, 73, 69, 127, 138, 138, 81, 70, 81, 81, - 81, 81, 127, 127, 127, 128, 134, 134, 134, 134, - 144, 144, 210, 207, 128, 128, 73, 80, 134, 80, - - 137, 206, 80, 80, 80, 80, 205, 204, 168, 203, - 135, 134, 135, 80, 80, 135, 135, 135, 135, 145, - 137, 165, 202, 145, 166, 201, 80, 80, 168, 186, - 165, 165, 165, 166, 166, 169, 200, 169, 198, 186, - 169, 169, 169, 169, 192, 192, 192, 192, 193, 193, - 193, 193, 224, 224, 224, 224, 224, 224, 225, 225, - 225, 225, 225, 225, 226, 226, 196, 226, 226, 226, - 227, 227, 228, 188, 228, 187, 228, 228, 229, 185, - 229, 229, 229, 229, 230, 184, 230, 230, 230, 230, - 232, 183, 232, 182, 181, 179, 177, 175, 174, 173, - - 172, 170, 167, 162, 161, 160, 159, 158, 157, 156, - 152, 151, 149, 148, 147, 146, 143, 142, 129, 126, - 118, 117, 116, 115, 114, 113, 112, 111, 110, 109, - 108, 107, 105, 104, 103, 102, 101, 100, 98, 97, - 96, 95, 93, 90, 85, 76, 68, 63, 58, 50, - 49, 48, 46, 45, 44, 43, 41, 40, 36, 35, - 25, 21, 14, 12, 11, 9, 5, 223, 223, 223, - 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, - 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, - 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, - - 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, - 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, - 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, - 223, 223 + 1, 1, 1, 1, 1, 3, 4, 7, 7, 8, + 8, 10, 13, 22, 3, 4, 27, 27, 22, 3, + 4, 18, 18, 18, 18, 240, 22, 62, 18, 13, + 20, 20, 20, 20, 28, 28, 23, 20, 23, 23, + + 23, 23, 10, 24, 35, 24, 24, 24, 24, 29, + 29, 32, 32, 32, 23, 60, 60, 35, 62, 238, + 23, 36, 36, 36, 37, 37, 37, 38, 38, 38, + 39, 39, 39, 58, 40, 40, 40, 53, 58, 23, + 41, 41, 41, 42, 42, 42, 43, 43, 43, 44, + 44, 44, 45, 45, 45, 46, 46, 46, 47, 47, + 47, 48, 48, 48, 38, 49, 49, 49, 51, 51, + 51, 39, 84, 84, 36, 53, 37, 38, 141, 141, + 39, 40, 40, 40, 50, 50, 50, 125, 43, 45, + 41, 40, 125, 42, 43, 43, 70, 70, 70, 47, + + 92, 92, 92, 170, 44, 132, 48, 94, 94, 94, + 46, 140, 51, 129, 96, 48, 91, 48, 70, 97, + 97, 97, 71, 49, 71, 71, 71, 71, 98, 98, + 98, 140, 171, 50, 99, 99, 99, 70, 86, 72, + 71, 72, 72, 72, 72, 74, 77, 74, 74, 74, + 74, 75, 171, 75, 75, 75, 75, 82, 69, 82, + 82, 82, 82, 74, 64, 71, 100, 100, 100, 98, + 101, 101, 101, 102, 102, 102, 103, 103, 103, 104, + 104, 104, 105, 105, 105, 59, 25, 99, 74, 81, + 21, 81, 14, 12, 81, 81, 81, 81, 106, 106, + + 106, 107, 107, 107, 131, 11, 81, 81, 108, 108, + 108, 9, 101, 131, 131, 100, 5, 104, 169, 81, + 81, 109, 109, 109, 110, 110, 110, 169, 169, 103, + 111, 111, 111, 112, 112, 112, 0, 105, 0, 113, + 113, 113, 114, 114, 114, 115, 115, 115, 116, 116, + 116, 0, 106, 107, 117, 117, 117, 118, 118, 118, + 130, 0, 108, 119, 119, 119, 120, 120, 120, 130, + 130, 130, 111, 0, 0, 110, 121, 121, 121, 0, + 114, 136, 136, 136, 136, 0, 0, 112, 113, 0, + 137, 137, 137, 137, 145, 145, 145, 0, 0, 115, + + 0, 0, 118, 137, 0, 0, 117, 116, 146, 146, + 146, 120, 0, 0, 119, 0, 137, 138, 0, 138, + 0, 121, 138, 138, 138, 138, 147, 147, 147, 0, + 0, 145, 148, 148, 148, 149, 149, 149, 0, 0, + 150, 150, 150, 151, 151, 151, 152, 152, 152, 146, + 153, 153, 153, 154, 154, 154, 155, 155, 155, 156, + 156, 156, 157, 157, 157, 158, 158, 158, 0, 148, + 159, 159, 159, 148, 0, 0, 149, 148, 0, 147, + 147, 150, 160, 160, 160, 0, 0, 152, 161, 161, + 161, 151, 162, 162, 162, 163, 163, 163, 164, 164, + + 164, 168, 0, 154, 0, 0, 155, 165, 165, 165, + 168, 168, 168, 172, 0, 172, 0, 0, 172, 172, + 172, 172, 0, 160, 0, 159, 173, 173, 173, 174, + 174, 174, 175, 175, 175, 0, 163, 176, 176, 176, + 177, 177, 177, 161, 0, 0, 162, 0, 164, 178, + 178, 178, 0, 0, 165, 179, 179, 179, 180, 180, + 180, 0, 181, 181, 181, 182, 182, 182, 183, 183, + 183, 0, 173, 184, 184, 184, 185, 185, 185, 186, + 186, 186, 176, 187, 187, 187, 175, 188, 188, 188, + 189, 189, 189, 0, 0, 177, 190, 190, 190, 0, + + 0, 178, 181, 0, 179, 191, 191, 191, 192, 192, + 192, 196, 196, 196, 196, 197, 197, 197, 197, 0, + 183, 198, 198, 198, 0, 0, 188, 0, 185, 189, + 0, 186, 0, 187, 0, 0, 190, 199, 199, 199, + 200, 200, 200, 201, 201, 201, 190, 0, 0, 192, + 202, 202, 202, 0, 191, 203, 203, 203, 204, 204, + 204, 205, 205, 205, 206, 206, 206, 207, 207, 207, + 208, 208, 208, 209, 209, 209, 210, 210, 210, 0, + 211, 211, 211, 212, 212, 212, 213, 213, 213, 200, + 201, 214, 214, 214, 0, 0, 203, 215, 215, 215, + + 216, 216, 216, 217, 217, 217, 218, 218, 218, 0, + 205, 0, 208, 219, 219, 219, 207, 0, 206, 0, + 210, 211, 220, 220, 220, 212, 0, 209, 221, 221, + 221, 222, 222, 222, 223, 223, 223, 224, 224, 224, + 225, 225, 225, 226, 226, 226, 227, 227, 227, 228, + 228, 228, 215, 0, 216, 229, 229, 229, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, + 0, 0, 0, 0, 226, 231, 231, 231, 231, 231, + 231, 232, 232, 232, 232, 232, 232, 233, 233, 233, + + 0, 233, 233, 234, 234, 0, 0, 234, 235, 235, + 0, 235, 0, 235, 236, 236, 0, 236, 236, 236, + 237, 237, 0, 237, 237, 237, 239, 0, 239, 230, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230 + } ; /* The intent behind this definition is that it'll catch @@ -619,9 +721,9 @@ static void update_yylloc(struct parser *parser, YYLTYPE *lloc, const char *text } #define YY_USER_ACTION update_yylloc(parser, yylloc, yytext); -#line 623 "gen/gen_lexer.c" +#line 725 "gen/gen_lexer.c" -#line 625 "gen/gen_lexer.c" +#line 727 "gen/gen_lexer.c" #define INITIAL 0 #define SC_COMMENT 1 @@ -880,9 +982,9 @@ YY_DECL } { -#line 48 "src/lexer.l" +#line 49 "src/lexer.l" -#line 886 "gen/gen_lexer.c" +#line 988 "gen/gen_lexer.c" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -909,13 +1011,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 >= 224 ) + if ( yy_current_state >= 231 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 368 ); + while ( yy_base[yy_current_state] != 830 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -941,23 +1043,23 @@ do_action: /* This label is used only to access EOF actions. */ case 1: YY_RULE_SETUP -#line 49 "src/lexer.l" +#line 50 "src/lexer.l" {/* skip line comments */} YY_BREAK case 2: YY_RULE_SETUP -#line 51 "src/lexer.l" +#line 52 "src/lexer.l" {BEGIN(SC_COMMENT);} YY_BREAK case 3: YY_RULE_SETUP -#line 53 "src/lexer.l" +#line 54 "src/lexer.l" {++parser->comment_nesting;} YY_BREAK case 4: YY_RULE_SETUP -#line 54 "src/lexer.l" +#line 55 "src/lexer.l" { if (parser->comment_nesting) --parser->comment_nesting; @@ -967,135 +1069,135 @@ YY_RULE_SETUP YY_BREAK case 5: YY_RULE_SETUP -#line 61 "src/lexer.l" +#line 62 "src/lexer.l" {} YY_BREAK case 6: YY_RULE_SETUP -#line 62 "src/lexer.l" +#line 63 "src/lexer.l" {} YY_BREAK case 7: YY_RULE_SETUP -#line 63 "src/lexer.l" +#line 64 "src/lexer.l" {} YY_BREAK case 8: /* rule 8 can match eol */ YY_RULE_SETUP -#line 64 "src/lexer.l" +#line 65 "src/lexer.l" {} YY_BREAK case 9: YY_RULE_SETUP -#line 67 "src/lexer.l" +#line 68 "src/lexer.l" {return SCOPE;} YY_BREAK case 10: YY_RULE_SETUP -#line 68 "src/lexer.l" +#line 69 "src/lexer.l" {return LPAREN;} YY_BREAK case 11: YY_RULE_SETUP -#line 69 "src/lexer.l" +#line 70 "src/lexer.l" {return RPAREN;} YY_BREAK case 12: YY_RULE_SETUP -#line 70 "src/lexer.l" +#line 71 "src/lexer.l" {return LBRACE;} YY_BREAK case 13: YY_RULE_SETUP -#line 71 "src/lexer.l" +#line 72 "src/lexer.l" {return RBRACE;} YY_BREAK case 14: YY_RULE_SETUP -#line 72 "src/lexer.l" +#line 73 "src/lexer.l" {return LBRACKET;} YY_BREAK case 15: YY_RULE_SETUP -#line 73 "src/lexer.l" +#line 74 "src/lexer.l" {return RBRACKET;} YY_BREAK case 16: YY_RULE_SETUP -#line 74 "src/lexer.l" +#line 75 "src/lexer.l" {return DOT;} YY_BREAK case 17: YY_RULE_SETUP -#line 75 "src/lexer.l" +#line 76 "src/lexer.l" {return COMMA;} YY_BREAK case 18: YY_RULE_SETUP -#line 76 "src/lexer.l" +#line 77 "src/lexer.l" {return SEMICOLON;} YY_BREAK case 19: YY_RULE_SETUP -#line 77 "src/lexer.l" +#line 78 "src/lexer.l" {return COLON;} YY_BREAK case 20: YY_RULE_SETUP -#line 78 "src/lexer.l" +#line 79 "src/lexer.l" {return BANG;} YY_BREAK case 21: YY_RULE_SETUP -#line 79 "src/lexer.l" +#line 80 "src/lexer.l" {return PASTE;} YY_BREAK case 22: YY_RULE_SETUP -#line 80 "src/lexer.l" +#line 81 "src/lexer.l" {return AT;} YY_BREAK case 23: YY_RULE_SETUP -#line 82 "src/lexer.l" +#line 83 "src/lexer.l" {return PLUS;} YY_BREAK case 24: YY_RULE_SETUP -#line 83 "src/lexer.l" +#line 84 "src/lexer.l" {return MINUS;} YY_BREAK case 25: YY_RULE_SETUP -#line 84 "src/lexer.l" +#line 85 "src/lexer.l" {return STAR;} YY_BREAK case 26: YY_RULE_SETUP -#line 85 "src/lexer.l" +#line 86 "src/lexer.l" {return DIV;} YY_BREAK case 27: YY_RULE_SETUP -#line 86 "src/lexer.l" +#line 87 "src/lexer.l" {return REM;} YY_BREAK case 28: YY_RULE_SETUP -#line 87 "src/lexer.l" +#line 88 "src/lexer.l" {return XOR;} YY_BREAK case 29: YY_RULE_SETUP -#line 88 "src/lexer.l" +#line 89 "src/lexer.l" {return POW;} YY_BREAK case 30: /* rule 30 can match eol */ YY_RULE_SETUP -#line 90 "src/lexer.l" +#line 91 "src/lexer.l" { /* regular character constant, 'a' */ yylval->integer = yytext[1]; @@ -1104,7 +1206,7 @@ YY_RULE_SETUP YY_BREAK case 31: YY_RULE_SETUP -#line 96 "src/lexer.l" +#line 97 "src/lexer.l" { /* hex character constant, '\xef' */ /* handling is slightly different from C, here it's more or less just @@ -1115,7 +1217,7 @@ YY_RULE_SETUP YY_BREAK case 32: YY_RULE_SETUP -#line 104 "src/lexer.l" +#line 105 "src/lexer.l" { /* octal character constant, '\033' */ yylval->integer = strtoll(yytext + 2, NULL, 8); @@ -1124,7 +1226,7 @@ YY_RULE_SETUP YY_BREAK case 33: YY_RULE_SETUP -#line 110 "src/lexer.l" +#line 111 "src/lexer.l" { /* binary character constant, '\b101' */ yylval->integer = strtoll(yytext + 3, NULL, 2); @@ -1133,7 +1235,7 @@ YY_RULE_SETUP YY_BREAK case 34: YY_RULE_SETUP -#line 116 "src/lexer.l" +#line 117 "src/lexer.l" { /* escaped character constant */ yylval->integer = match_escape(yytext[2]); @@ -1142,273 +1244,283 @@ YY_RULE_SETUP YY_BREAK case 35: YY_RULE_SETUP -#line 122 "src/lexer.l" -{return SQUOTE;} +#line 123 "src/lexer.l" +{return QUESTION;} YY_BREAK case 36: YY_RULE_SETUP #line 124 "src/lexer.l" -{return AND;} +{return SQUOTE;} YY_BREAK case 37: YY_RULE_SETUP -#line 125 "src/lexer.l" -{return LAND;} +#line 126 "src/lexer.l" +{return AND;} YY_BREAK case 38: YY_RULE_SETUP -#line 126 "src/lexer.l" -{return OR;} +#line 127 "src/lexer.l" +{return LAND;} YY_BREAK case 39: YY_RULE_SETUP -#line 127 "src/lexer.l" -{return LOR;} +#line 128 "src/lexer.l" +{return OR;} YY_BREAK case 40: YY_RULE_SETUP #line 129 "src/lexer.l" -{return TILDE;} +{return LOR;} YY_BREAK case 41: YY_RULE_SETUP -#line 130 "src/lexer.l" -{return TO;} +#line 131 "src/lexer.l" +{return TILDE;} YY_BREAK case 42: YY_RULE_SETUP -#line 131 "src/lexer.l" -{return LT;} +#line 132 "src/lexer.l" +{return TO;} YY_BREAK case 43: YY_RULE_SETUP -#line 132 "src/lexer.l" -{return GT;} +#line 133 "src/lexer.l" +{return LT;} YY_BREAK case 44: YY_RULE_SETUP -#line 133 "src/lexer.l" -{return LE;} +#line 134 "src/lexer.l" +{return GT;} YY_BREAK case 45: YY_RULE_SETUP -#line 134 "src/lexer.l" -{return GE;} +#line 135 "src/lexer.l" +{return LE;} YY_BREAK case 46: YY_RULE_SETUP -#line 135 "src/lexer.l" -{return NE;} +#line 136 "src/lexer.l" +{return GE;} YY_BREAK case 47: YY_RULE_SETUP -#line 136 "src/lexer.l" -{return EQ;} +#line 137 "src/lexer.l" +{return NE;} YY_BREAK case 48: YY_RULE_SETUP #line 138 "src/lexer.l" -{return FATARROW;} +{return EQ;} YY_BREAK case 49: YY_RULE_SETUP #line 140 "src/lexer.l" -{return LSHIFT;} +{return FATARROW;} YY_BREAK case 50: YY_RULE_SETUP -#line 141 "src/lexer.l" -{return RSHIFT;} +#line 142 "src/lexer.l" +{return LSHIFT;} YY_BREAK case 51: YY_RULE_SETUP #line 143 "src/lexer.l" -{return PLUSSELF;} +{return RSHIFT;} YY_BREAK case 52: YY_RULE_SETUP -#line 144 "src/lexer.l" -{return MINUSSELF;} +#line 145 "src/lexer.l" +{return PLUSSELF;} YY_BREAK case 53: YY_RULE_SETUP -#line 145 "src/lexer.l" -{return DIVSELF;} +#line 146 "src/lexer.l" +{return MINUSSELF;} YY_BREAK case 54: YY_RULE_SETUP -#line 146 "src/lexer.l" -{return REMSELF;} +#line 147 "src/lexer.l" +{return DIVSELF;} YY_BREAK case 55: YY_RULE_SETUP -#line 147 "src/lexer.l" -{return XORSELF;} +#line 148 "src/lexer.l" +{return REMSELF;} YY_BREAK case 56: YY_RULE_SETUP -#line 148 "src/lexer.l" -{return POWSELF;} +#line 149 "src/lexer.l" +{return XORSELF;} YY_BREAK case 57: YY_RULE_SETUP -#line 149 "src/lexer.l" -{return ORSELF;} +#line 150 "src/lexer.l" +{return POWSELF;} YY_BREAK case 58: YY_RULE_SETUP -#line 150 "src/lexer.l" +#line 151 "src/lexer.l" {return ORSELF;} YY_BREAK case 59: YY_RULE_SETUP -#line 151 "src/lexer.l" -{return LSHIFTSELF;} +#line 152 "src/lexer.l" +{return ORSELF;} YY_BREAK case 60: YY_RULE_SETUP -#line 152 "src/lexer.l" -{return RSHIFTSELF;} +#line 153 "src/lexer.l" +{return LSHIFTSELF;} YY_BREAK case 61: YY_RULE_SETUP -#line 153 "src/lexer.l" -{return ELLIPSIS;} +#line 154 "src/lexer.l" +{return RSHIFTSELF;} YY_BREAK case 62: YY_RULE_SETUP #line 155 "src/lexer.l" -{return AS;} +{return ELLIPSIS;} YY_BREAK case 63: YY_RULE_SETUP -#line 156 "src/lexer.l" -{return PUB;} +#line 157 "src/lexer.l" +{return AS;} YY_BREAK case 64: YY_RULE_SETUP -#line 157 "src/lexer.l" -{return DEFER;} +#line 158 "src/lexer.l" +{return PUB;} YY_BREAK case 65: YY_RULE_SETUP -#line 158 "src/lexer.l" -{return UNION;} +#line 159 "src/lexer.l" +{return DEFER;} YY_BREAK case 66: YY_RULE_SETUP -#line 159 "src/lexer.l" -{return STRUCT;} +#line 160 "src/lexer.l" +{return UNION;} YY_BREAK case 67: YY_RULE_SETUP -#line 160 "src/lexer.l" -{return TYPEDEF;} +#line 161 "src/lexer.l" +{return STRUCT;} YY_BREAK case 68: YY_RULE_SETUP -#line 161 "src/lexer.l" -{return IMPORT;} +#line 162 "src/lexer.l" +{return TYPEDEF;} YY_BREAK case 69: YY_RULE_SETUP -#line 162 "src/lexer.l" -{return TYPEOF;} +#line 163 "src/lexer.l" +{return IMPORT;} YY_BREAK case 70: YY_RULE_SETUP -#line 163 "src/lexer.l" -{return SIZEOF;} +#line 164 "src/lexer.l" +{return TYPEOF;} YY_BREAK case 71: YY_RULE_SETUP -#line 164 "src/lexer.l" -{return EMBED;} +#line 165 "src/lexer.l" +{return SIZEOF;} YY_BREAK case 72: YY_RULE_SETUP -#line 165 "src/lexer.l" -{return IF;} +#line 166 "src/lexer.l" +{return EMBED;} YY_BREAK case 73: YY_RULE_SETUP -#line 166 "src/lexer.l" -{return GOTO;} +#line 167 "src/lexer.l" +{return IF;} YY_BREAK case 74: YY_RULE_SETUP -#line 167 "src/lexer.l" -{return ELSE;} +#line 168 "src/lexer.l" +{return GOTO;} YY_BREAK case 75: YY_RULE_SETUP -#line 168 "src/lexer.l" -{return SWITCH;} +#line 169 "src/lexer.l" +{return ELSE;} YY_BREAK case 76: YY_RULE_SETUP -#line 169 "src/lexer.l" -{return CASE;} +#line 170 "src/lexer.l" +{return SWITCH;} YY_BREAK case 77: YY_RULE_SETUP -#line 170 "src/lexer.l" -{return FOR;} +#line 171 "src/lexer.l" +{return CASE;} YY_BREAK case 78: YY_RULE_SETUP -#line 171 "src/lexer.l" -{return WHILE;} +#line 172 "src/lexer.l" +{return FOR;} YY_BREAK case 79: YY_RULE_SETUP -#line 172 "src/lexer.l" -{return DO;} +#line 173 "src/lexer.l" +{return WHILE;} YY_BREAK case 80: YY_RULE_SETUP -#line 173 "src/lexer.l" -{return MUT;} +#line 174 "src/lexer.l" +{return DO;} YY_BREAK case 81: YY_RULE_SETUP -#line 174 "src/lexer.l" -{return CONST;} +#line 175 "src/lexer.l" +{return MUT;} YY_BREAK case 82: YY_RULE_SETUP -#line 175 "src/lexer.l" -{return RETURN;} +#line 176 "src/lexer.l" +{return CONST;} YY_BREAK case 83: YY_RULE_SETUP -#line 176 "src/lexer.l" -{return EXTERN;} +#line 177 "src/lexer.l" +{return RETURN;} YY_BREAK case 84: YY_RULE_SETUP -#line 177 "src/lexer.l" -{return ENUM;} +#line 178 "src/lexer.l" +{return EXTERN;} YY_BREAK case 85: YY_RULE_SETUP -#line 178 "src/lexer.l" -{return DEFINE;} +#line 179 "src/lexer.l" +{return ENUM;} YY_BREAK case 86: YY_RULE_SETUP -#line 179 "src/lexer.l" -{return BREAK;} +#line 180 "src/lexer.l" +{return DEFINE;} YY_BREAK case 87: YY_RULE_SETUP -#line 180 "src/lexer.l" -{return CONTINUE;} +#line 181 "src/lexer.l" +{return BREAK;} YY_BREAK case 88: -/* rule 88 can match eol */ YY_RULE_SETUP #line 182 "src/lexer.l" +{return CONTINUE;} + YY_BREAK +case 89: +YY_RULE_SETUP +#line 183 "src/lexer.l" +{return DEFAULT;} + YY_BREAK +case 90: +/* rule 90 can match eol */ +YY_RULE_SETUP +#line 185 "src/lexer.l" { /* seems risky, I know, but letting the parser choose when to allocate a * new string seems to help with syntax error cleanup */ @@ -1416,39 +1528,52 @@ YY_RULE_SETUP return STRING; } YY_BREAK -case 89: +case 91: YY_RULE_SETUP -#line 189 "src/lexer.l" +#line 192 "src/lexer.l" { yylval->integer = strtoll(yytext, 0, 0); return INT; } YY_BREAK -case 90: +case 92: YY_RULE_SETUP -#line 194 "src/lexer.l" +#line 197 "src/lexer.l" { yylval->dbl = strtod(yytext, 0); return FLOAT; } YY_BREAK -case 91: +case 93: YY_RULE_SETUP -#line 199 "src/lexer.l" +#line 202 "src/lexer.l" { yylval->str = yytext; return ID; } YY_BREAK -case 92: -/* rule 92 can match eol */ +case 94: +/* rule 94 can match eol */ +YY_RULE_SETUP +#line 207 "src/lexer.l" +{ + /* strip trailing '!' */ + char *s = yytext + strlen(yytext); + s[-1] = '\0'; + + yylval->str = yytext; + return APPLY; +} + YY_BREAK +case 95: +/* rule 95 can match eol */ YY_RULE_SETUP -#line 205 "src/lexer.l" +#line 217 "src/lexer.l" {/* skip whitespace */} YY_BREAK -case 93: +case 96: YY_RULE_SETUP -#line 207 "src/lexer.l" +#line 219 "src/lexer.l" { struct src_issue issue; issue.level = SRC_ERROR; @@ -1459,12 +1584,12 @@ YY_RULE_SETUP parser->failed = true; } YY_BREAK -case 94: +case 97: YY_RULE_SETUP -#line 216 "src/lexer.l" +#line 228 "src/lexer.l" YY_FATAL_ERROR( "flex scanner jammed" ); YY_BREAK -#line 1468 "gen/gen_lexer.c" +#line 1593 "gen/gen_lexer.c" case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(SC_COMMENT): yyterminate(); @@ -1764,7 +1889,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 >= 224 ) + if ( yy_current_state >= 231 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -1793,11 +1918,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 >= 224 ) + if ( yy_current_state >= 231 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 223); + yy_is_jam = (yy_current_state == 230); (void)yyg; return yy_is_jam ? 0 : yy_current_state; @@ -2596,6 +2721,6 @@ void yyfree (void * ptr , yyscan_t yyscanner) #define YYTABLES_NAME "yytables" -#line 216 "src/lexer.l" +#line 228 "src/lexer.l" diff --git a/gen/gen_lexer.h b/gen/gen_lexer.h index 5d2c6d9..731a8c2 100644 --- a/gen/gen_lexer.h +++ b/gen/gen_lexer.h @@ -485,7 +485,7 @@ extern int yylex (yyscan_t yyscanner); #undef yyTABLES_NAME #endif -#line 216 "src/lexer.l" +#line 228 "src/lexer.l" #line 492 "gen/gen_lexer.h" diff --git a/gen/gen_parser.c b/gen/gen_parser.c index 1657ddb..d923fb3 100644 --- a/gen/gen_parser.c +++ b/gen/gen_parser.c @@ -116,144 +116,151 @@ enum yysymbol_kind_t YYSYMBOL_FLOAT = 4, /* FLOAT */ YYSYMBOL_STRING = 5, /* STRING */ YYSYMBOL_ID = 6, /* ID */ - YYSYMBOL_SQUOTE = 7, /* "'" */ - YYSYMBOL_TO = 8, /* "=" */ - YYSYMBOL_ELLIPSIS = 9, /* "..." */ - YYSYMBOL_SEMICOLON = 10, /* ";" */ - YYSYMBOL_COLON = 11, /* ":" */ - YYSYMBOL_BANG = 12, /* "!" */ - YYSYMBOL_TYPEOF = 13, /* "typeof" */ - YYSYMBOL_SIZEOF = 14, /* "sizeof" */ - YYSYMBOL_PASTE = 15, /* "##" */ - YYSYMBOL_STAR = 16, /* "*" */ - YYSYMBOL_DIV = 17, /* "/" */ - YYSYMBOL_REM = 18, /* "%" */ - YYSYMBOL_MINUS = 19, /* "-" */ - YYSYMBOL_PLUS = 20, /* "+" */ - YYSYMBOL_POW = 21, /* "^^" */ - YYSYMBOL_XOR = 22, /* "^" */ - YYSYMBOL_AND = 23, /* "&" */ - YYSYMBOL_OR = 24, /* "|" */ - YYSYMBOL_LAND = 25, /* "&&" */ - YYSYMBOL_LOR = 26, /* "||" */ - YYSYMBOL_TILDE = 27, /* "~" */ - YYSYMBOL_LT = 28, /* "<" */ - YYSYMBOL_GT = 29, /* ">" */ - YYSYMBOL_LE = 30, /* "<=" */ - YYSYMBOL_GE = 31, /* ">=" */ - YYSYMBOL_NE = 32, /* "!=" */ - YYSYMBOL_EQ = 33, /* "==" */ - YYSYMBOL_LSHIFT = 34, /* "<<" */ - YYSYMBOL_RSHIFT = 35, /* ">>" */ - YYSYMBOL_PLUSSELF = 36, /* "+=" */ - YYSYMBOL_MINUSSELF = 37, /* "-=" */ - YYSYMBOL_STARSELF = 38, /* "*=" */ - YYSYMBOL_DIVSELF = 39, /* "/=" */ - YYSYMBOL_REMSELF = 40, /* "%=" */ - YYSYMBOL_XORSELF = 41, /* "^=" */ - YYSYMBOL_POWSELF = 42, /* "^^=" */ - YYSYMBOL_ANDSELF = 43, /* "&=" */ - YYSYMBOL_ORSELF = 44, /* "|=" */ - YYSYMBOL_LSHIFTSELF = 45, /* "<<=" */ - YYSYMBOL_RSHIFTSELF = 46, /* ">>=" */ - YYSYMBOL_AT = 47, /* "@" */ - YYSYMBOL_COMMA = 48, /* "," */ - YYSYMBOL_PUB = 49, /* "pub" */ - YYSYMBOL_STRUCT = 50, /* "struct" */ - YYSYMBOL_UNION = 51, /* "union" */ - YYSYMBOL_TYPEDEF = 52, /* "typedef" */ - YYSYMBOL_IMPORT = 53, /* "import" */ - YYSYMBOL_DEFER = 54, /* "defer" */ - YYSYMBOL_GOTO = 55, /* "goto" */ - YYSYMBOL_EMBED = 56, /* "embed" */ - YYSYMBOL_IF = 57, /* "if" */ - YYSYMBOL_ELSE = 58, /* "else" */ - YYSYMBOL_BREAK = 59, /* "break" */ - YYSYMBOL_CONTINUE = 60, /* "continue" */ - YYSYMBOL_SWITCH = 61, /* "switch" */ - YYSYMBOL_CASE = 62, /* "case" */ - YYSYMBOL_FOR = 63, /* "for" */ - YYSYMBOL_WHILE = 64, /* "while" */ - YYSYMBOL_DO = 65, /* "do" */ - YYSYMBOL_MUT = 66, /* "mut" */ - YYSYMBOL_RETURN = 67, /* "return" */ - YYSYMBOL_CONST = 68, /* "const" */ - YYSYMBOL_EXTERN = 69, /* "extern" */ - YYSYMBOL_ENUM = 70, /* "enum" */ - YYSYMBOL_DEFINE = 71, /* "define" */ - YYSYMBOL_LPAREN = 72, /* "(" */ - YYSYMBOL_RPAREN = 73, /* ")" */ - YYSYMBOL_LBRACE = 74, /* "{" */ - YYSYMBOL_RBRACE = 75, /* "}" */ - YYSYMBOL_LBRACKET = 76, /* "[" */ - YYSYMBOL_RBRACKET = 77, /* "]" */ - YYSYMBOL_AS = 78, /* "as" */ - YYSYMBOL_DOT = 79, /* "." */ - YYSYMBOL_SCOPE = 80, /* "::" */ - YYSYMBOL_FATARROW = 81, /* "=>" */ - YYSYMBOL_YYACCEPT = 82, /* $accept */ - YYSYMBOL_id = 83, /* id */ - YYSYMBOL_var = 84, /* var */ - YYSYMBOL_embed = 85, /* embed */ - YYSYMBOL_import = 86, /* import */ - YYSYMBOL_assign = 87, /* assign */ - YYSYMBOL_binary_op = 88, /* binary_op */ - YYSYMBOL_unary_op = 89, /* unary_op */ - YYSYMBOL_arg = 90, /* arg */ - YYSYMBOL_arg_list = 91, /* arg_list */ - YYSYMBOL_param_decl = 92, /* param_decl */ - YYSYMBOL_decl_list = 93, /* decl_list */ - YYSYMBOL_call = 94, /* call */ - YYSYMBOL_defer = 95, /* defer */ - YYSYMBOL_expr = 96, /* expr */ - YYSYMBOL_while = 97, /* while */ - YYSYMBOL_do_while = 98, /* do_while */ - YYSYMBOL_goto = 99, /* goto */ - YYSYMBOL_statement = 100, /* statement */ - YYSYMBOL_statement_list = 101, /* statement_list */ - YYSYMBOL_body = 102, /* body */ - YYSYMBOL_macro_list = 103, /* macro_list */ - YYSYMBOL_macro = 104, /* macro */ - YYSYMBOL_expr_list = 105, /* expr_list */ - YYSYMBOL_struct_init = 106, /* struct_init */ - YYSYMBOL_struct_inits = 107, /* struct_inits */ - YYSYMBOL_struct_construct = 108, /* struct_construct */ - YYSYMBOL_init_expr = 109, /* init_expr */ - YYSYMBOL_cond = 110, /* cond */ - YYSYMBOL_expr_if = 111, /* expr_if */ - YYSYMBOL_if = 112, /* if */ - YYSYMBOL_for = 113, /* for */ - YYSYMBOL_case = 114, /* case */ - YYSYMBOL_case_list = 115, /* case_list */ - YYSYMBOL_switch = 116, /* switch */ - YYSYMBOL_const_for = 117, /* const_for */ - YYSYMBOL_const_if = 118, /* const_if */ - YYSYMBOL_const = 119, /* const */ - YYSYMBOL_func_sign = 120, /* func_sign */ - YYSYMBOL_variadic_sign = 121, /* variadic_sign */ - YYSYMBOL_type = 122, /* type */ - YYSYMBOL_var_decl = 123, /* var_decl */ - YYSYMBOL_var_init = 124, /* var_init */ - YYSYMBOL_proc = 125, /* proc */ - YYSYMBOL_lambda = 126, /* lambda */ - YYSYMBOL_struct_elem = 127, /* struct_elem */ - YYSYMBOL_struct_list = 128, /* struct_list */ - YYSYMBOL_union = 129, /* union */ - YYSYMBOL_generic = 130, /* generic */ - YYSYMBOL_generic_list = 131, /* generic_list */ - YYSYMBOL_struct = 132, /* struct */ - YYSYMBOL_template_elem = 133, /* template_elem */ - YYSYMBOL_template_list = 134, /* template_list */ - YYSYMBOL_type_list = 135, /* type_list */ - YYSYMBOL_type_alias = 136, /* type_alias */ - YYSYMBOL_type_template = 137, /* type_template */ - YYSYMBOL_enum_val = 138, /* enum_val */ - YYSYMBOL_enum_list = 139, /* enum_list */ - YYSYMBOL_enum = 140, /* enum */ - YYSYMBOL_top_if = 141, /* top_if */ - YYSYMBOL_top = 142, /* top */ - YYSYMBOL_unit = 143, /* unit */ - YYSYMBOL_input = 144 /* input */ + YYSYMBOL_APPLY = 7, /* APPLY */ + YYSYMBOL_QUESTION = 8, /* "?" */ + YYSYMBOL_SQUOTE = 9, /* "'" */ + YYSYMBOL_TO = 10, /* "=" */ + YYSYMBOL_ELLIPSIS = 11, /* "..." */ + YYSYMBOL_SEMICOLON = 12, /* ";" */ + YYSYMBOL_COLON = 13, /* ":" */ + YYSYMBOL_BANG = 14, /* "!" */ + YYSYMBOL_TYPEOF = 15, /* "typeof" */ + YYSYMBOL_SIZEOF = 16, /* "sizeof" */ + YYSYMBOL_PASTE = 17, /* "##" */ + YYSYMBOL_STAR = 18, /* "*" */ + YYSYMBOL_DIV = 19, /* "/" */ + YYSYMBOL_REM = 20, /* "%" */ + YYSYMBOL_MINUS = 21, /* "-" */ + YYSYMBOL_PLUS = 22, /* "+" */ + YYSYMBOL_POW = 23, /* "^^" */ + YYSYMBOL_XOR = 24, /* "^" */ + YYSYMBOL_AND = 25, /* "&" */ + YYSYMBOL_OR = 26, /* "|" */ + YYSYMBOL_LAND = 27, /* "&&" */ + YYSYMBOL_LOR = 28, /* "||" */ + YYSYMBOL_TILDE = 29, /* "~" */ + YYSYMBOL_LT = 30, /* "<" */ + YYSYMBOL_GT = 31, /* ">" */ + YYSYMBOL_LE = 32, /* "<=" */ + YYSYMBOL_GE = 33, /* ">=" */ + YYSYMBOL_NE = 34, /* "!=" */ + YYSYMBOL_EQ = 35, /* "==" */ + YYSYMBOL_LSHIFT = 36, /* "<<" */ + YYSYMBOL_RSHIFT = 37, /* ">>" */ + YYSYMBOL_PLUSSELF = 38, /* "+=" */ + YYSYMBOL_MINUSSELF = 39, /* "-=" */ + YYSYMBOL_STARSELF = 40, /* "*=" */ + YYSYMBOL_DIVSELF = 41, /* "/=" */ + YYSYMBOL_REMSELF = 42, /* "%=" */ + YYSYMBOL_XORSELF = 43, /* "^=" */ + YYSYMBOL_POWSELF = 44, /* "^^=" */ + YYSYMBOL_ANDSELF = 45, /* "&=" */ + YYSYMBOL_ORSELF = 46, /* "|=" */ + YYSYMBOL_LSHIFTSELF = 47, /* "<<=" */ + YYSYMBOL_RSHIFTSELF = 48, /* ">>=" */ + YYSYMBOL_AT = 49, /* "@" */ + YYSYMBOL_COMMA = 50, /* "," */ + YYSYMBOL_PUB = 51, /* "pub" */ + YYSYMBOL_STRUCT = 52, /* "struct" */ + YYSYMBOL_UNION = 53, /* "union" */ + YYSYMBOL_TYPEDEF = 54, /* "typedef" */ + YYSYMBOL_IMPORT = 55, /* "import" */ + YYSYMBOL_DEFER = 56, /* "defer" */ + YYSYMBOL_GOTO = 57, /* "goto" */ + YYSYMBOL_EMBED = 58, /* "embed" */ + YYSYMBOL_IF = 59, /* "if" */ + YYSYMBOL_ELSE = 60, /* "else" */ + YYSYMBOL_BREAK = 61, /* "break" */ + YYSYMBOL_CONTINUE = 62, /* "continue" */ + YYSYMBOL_DEFAULT = 63, /* "default" */ + YYSYMBOL_SWITCH = 64, /* "switch" */ + YYSYMBOL_CASE = 65, /* "case" */ + YYSYMBOL_FOR = 66, /* "for" */ + YYSYMBOL_WHILE = 67, /* "while" */ + YYSYMBOL_DO = 68, /* "do" */ + YYSYMBOL_MUT = 69, /* "mut" */ + YYSYMBOL_RETURN = 70, /* "return" */ + YYSYMBOL_CONST = 71, /* "const" */ + YYSYMBOL_EXTERN = 72, /* "extern" */ + YYSYMBOL_ENUM = 73, /* "enum" */ + YYSYMBOL_DEFINE = 74, /* "define" */ + YYSYMBOL_LPAREN = 75, /* "(" */ + YYSYMBOL_RPAREN = 76, /* ")" */ + YYSYMBOL_LBRACE = 77, /* "{" */ + YYSYMBOL_RBRACE = 78, /* "}" */ + YYSYMBOL_LBRACKET = 79, /* "[" */ + YYSYMBOL_RBRACKET = 80, /* "]" */ + YYSYMBOL_AS = 81, /* "as" */ + YYSYMBOL_DOT = 82, /* "." */ + YYSYMBOL_SCOPE = 83, /* "::" */ + YYSYMBOL_FATARROW = 84, /* "=>" */ + YYSYMBOL_YYACCEPT = 85, /* $accept */ + YYSYMBOL_id = 86, /* id */ + YYSYMBOL_apply = 87, /* apply */ + YYSYMBOL_var = 88, /* var */ + YYSYMBOL_embed = 89, /* embed */ + YYSYMBOL_import = 90, /* import */ + YYSYMBOL_assign = 91, /* assign */ + YYSYMBOL_binop = 92, /* binop */ + YYSYMBOL_unop = 93, /* unop */ + YYSYMBOL_arg = 94, /* arg */ + YYSYMBOL_args = 95, /* args */ + YYSYMBOL_param_decl = 96, /* param_decl */ + YYSYMBOL_decls = 97, /* decls */ + YYSYMBOL_defer = 98, /* defer */ + YYSYMBOL_const_binop = 99, /* const_binop */ + YYSYMBOL_const_unop = 100, /* const_unop */ + YYSYMBOL_const_expr = 101, /* const_expr */ + YYSYMBOL_expr = 102, /* expr */ + YYSYMBOL_while = 103, /* while */ + YYSYMBOL_do_while = 104, /* do_while */ + YYSYMBOL_goto = 105, /* goto */ + YYSYMBOL_statelet = 106, /* statelet */ + YYSYMBOL_statement = 107, /* statement */ + YYSYMBOL_statements = 108, /* statements */ + YYSYMBOL_body = 109, /* body */ + YYSYMBOL_references = 110, /* references */ + YYSYMBOL_macro = 111, /* macro */ + YYSYMBOL_exprs = 112, /* exprs */ + YYSYMBOL_construct_arg = 113, /* construct_arg */ + YYSYMBOL_construct_args = 114, /* construct_args */ + YYSYMBOL_construct = 115, /* construct */ + YYSYMBOL_if = 116, /* if */ + YYSYMBOL_for = 117, /* for */ + YYSYMBOL_case = 118, /* case */ + YYSYMBOL_cases = 119, /* cases */ + YYSYMBOL_switch = 120, /* switch */ + YYSYMBOL_const_for = 121, /* const_for */ + YYSYMBOL_const_if = 122, /* const_if */ + YYSYMBOL_const = 123, /* const */ + YYSYMBOL_simple_sign = 124, /* simple_sign */ + YYSYMBOL_func_sign = 125, /* func_sign */ + YYSYMBOL_type = 126, /* type */ + YYSYMBOL_var_decl = 127, /* var_decl */ + YYSYMBOL_var_init = 128, /* var_init */ + YYSYMBOL_proc = 129, /* proc */ + YYSYMBOL_lambda = 130, /* lambda */ + YYSYMBOL_struct_elem = 131, /* struct_elem */ + YYSYMBOL_members = 132, /* members */ + YYSYMBOL_union = 133, /* union */ + YYSYMBOL_generic = 134, /* generic */ + YYSYMBOL_generics = 135, /* generics */ + YYSYMBOL_struct = 136, /* struct */ + YYSYMBOL_template_elem = 137, /* template_elem */ + YYSYMBOL_template_elems = 138, /* template_elems */ + YYSYMBOL_types = 139, /* types */ + YYSYMBOL_alias = 140, /* alias */ + YYSYMBOL_template = 141, /* template */ + YYSYMBOL_enum_val = 142, /* enum_val */ + YYSYMBOL_enums = 143, /* enums */ + YYSYMBOL_enum = 144, /* enum */ + YYSYMBOL_top_if = 145, /* top_if */ + YYSYMBOL_top_var_decl = 146, /* top_var_decl */ + YYSYMBOL_top_var_init = 147, /* top_var_init */ + YYSYMBOL_top_var = 148, /* top_var */ + YYSYMBOL_top = 149, /* top */ + YYSYMBOL_unit = 150, /* unit */ + YYSYMBOL_input = 151 /* input */ }; typedef enum yysymbol_kind_t yysymbol_kind_t; @@ -582,21 +589,21 @@ union yyalloc #endif /* !YYCOPY_NEEDED */ /* YYFINAL -- State number of the termination state. */ -#define YYFINAL 61 +#define YYFINAL 69 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 2064 +#define YYLAST 2267 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 82 +#define YYNTOKENS 85 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 63 +#define YYNNTS 67 /* YYNRULES -- Number of rules. */ -#define YYNRULES 219 +#define YYNRULES 253 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 438 +#define YYNSTATES 501 /* YYMAXUTOK -- Last valid token kind. */ -#define YYMAXUTOK 336 +#define YYMAXUTOK 339 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM @@ -643,35 +650,39 @@ static const yytype_int8 yytranslate[] = 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 81 + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_int16 yyrline[] = { - 0, 154, 154, 160, 161, 164, 167, 170, 171, 174, - 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, - 195, 198, 201, 202, 203, 204, 205, 206, 209, 210, - 211, 212, 213, 216, 217, 218, 221, 222, 225, 227, - 228, 229, 230, 234, 235, 238, 242, 243, 244, 245, - 246, 247, 248, 252, 253, 254, 255, 256, 257, 258, - 259, 260, 261, 262, 263, 264, 267, 270, 276, 278, - 279, 280, 281, 282, 284, 285, 286, 287, 288, 289, - 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, - 300, 301, 317, 318, 321, 322, 325, 326, 329, 333, - 340, 346, 347, 350, 351, 357, 358, 361, 364, 365, - 366, 367, 370, 371, 375, 376, 379, 380, 381, 384, - 387, 390, 391, 394, 397, 404, 408, 413, 421, 423, - 427, 430, 432, 434, 436, 440, 441, 448, 449, 453, - 456, 460, 464, 468, 471, 476, 480, 481, 484, 485, - 489, 495, 499, 505, 508, 511, 512, 515, 518, 523, - 524, 525, 528, 531, 538, 539, 540, 541, 544, 545, - 548, 549, 552, 557, 560, 566, 567, 570, 571, 572, - 575, 576, 582, 586, 590, 598, 599, 600, 601, 602, - 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, - 613, 614, 615, 616, 617, 618, 633, 634, 637, 638 + 0, 165, 165, 171, 177, 178, 181, 184, 187, 190, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, + 211, 214, 217, 218, 219, 220, 221, 222, 225, 226, + 227, 228, 229, 232, 233, 234, 237, 238, 241, 244, + 245, 246, 247, 250, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 274, 275, 276, 279, 280, 281, 282, + 283, 284, 288, 289, 290, 291, 292, 293, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 319, 322, + 328, 331, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 368, 371, 372, 373, 376, 377, 380, + 381, 385, 389, 396, 402, 403, 406, 407, 413, 414, + 417, 420, 421, 422, 426, 429, 431, 436, 437, 440, + 444, 451, 455, 460, 468, 469, 472, 475, 476, 477, + 478, 481, 482, 489, 490, 494, 497, 501, 505, 508, + 513, 517, 518, 521, 522, 526, 532, 536, 542, 543, + 546, 549, 550, 553, 556, 561, 564, 565, 568, 571, + 578, 579, 580, 581, 584, 585, 588, 589, 592, 597, + 600, 606, 607, 610, 611, 612, 615, 616, 622, 626, + 630, 636, 640, 641, 644, 645, 646, 649, 650, 655, + 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, + 666, 667, 668, 669, 670, 671, 672, 673, 677, 678, + 693, 694, 697, 698 }; #endif @@ -688,29 +699,29 @@ static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED; static const char *const yytname[] = { "\"end of file\"", "error", "\"invalid token\"", "INT", "FLOAT", - "STRING", "ID", "\"'\"", "\"=\"", "\"...\"", "\";\"", "\":\"", "\"!\"", - "\"typeof\"", "\"sizeof\"", "\"##\"", "\"*\"", "\"/\"", "\"%\"", "\"-\"", - "\"+\"", "\"^^\"", "\"^\"", "\"&\"", "\"|\"", "\"&&\"", "\"||\"", - "\"~\"", "\"<\"", "\">\"", "\"<=\"", "\">=\"", "\"!=\"", "\"==\"", - "\"<<\"", "\">>\"", "\"+=\"", "\"-=\"", "\"*=\"", "\"/=\"", "\"%=\"", - "\"^=\"", "\"^^=\"", "\"&=\"", "\"|=\"", "\"<<=\"", "\">>=\"", "\"@\"", - "\",\"", "\"pub\"", "\"struct\"", "\"union\"", "\"typedef\"", + "STRING", "ID", "APPLY", "\"?\"", "\"'\"", "\"=\"", "\"...\"", "\";\"", + "\":\"", "\"!\"", "\"typeof\"", "\"sizeof\"", "\"##\"", "\"*\"", "\"/\"", + "\"%\"", "\"-\"", "\"+\"", "\"^^\"", "\"^\"", "\"&\"", "\"|\"", "\"&&\"", + "\"||\"", "\"~\"", "\"<\"", "\">\"", "\"<=\"", "\">=\"", "\"!=\"", + "\"==\"", "\"<<\"", "\">>\"", "\"+=\"", "\"-=\"", "\"*=\"", "\"/=\"", + "\"%=\"", "\"^=\"", "\"^^=\"", "\"&=\"", "\"|=\"", "\"<<=\"", "\">>=\"", + "\"@\"", "\",\"", "\"pub\"", "\"struct\"", "\"union\"", "\"typedef\"", "\"import\"", "\"defer\"", "\"goto\"", "\"embed\"", "\"if\"", "\"else\"", - "\"break\"", "\"continue\"", "\"switch\"", "\"case\"", "\"for\"", - "\"while\"", "\"do\"", "\"mut\"", "\"return\"", "\"const\"", + "\"break\"", "\"continue\"", "\"default\"", "\"switch\"", "\"case\"", + "\"for\"", "\"while\"", "\"do\"", "\"mut\"", "\"return\"", "\"const\"", "\"extern\"", "\"enum\"", "\"define\"", "\"(\"", "\")\"", "\"{\"", "\"}\"", "\"[\"", "\"]\"", "\"as\"", "\".\"", "\"::\"", "\"=>\"", - "$accept", "id", "var", "embed", "import", "assign", "binary_op", - "unary_op", "arg", "arg_list", "param_decl", "decl_list", "call", - "defer", "expr", "while", "do_while", "goto", "statement", - "statement_list", "body", "macro_list", "macro", "expr_list", - "struct_init", "struct_inits", "struct_construct", "init_expr", "cond", - "expr_if", "if", "for", "case", "case_list", "switch", "const_for", - "const_if", "const", "func_sign", "variadic_sign", "type", "var_decl", - "var_init", "proc", "lambda", "struct_elem", "struct_list", "union", - "generic", "generic_list", "struct", "template_elem", "template_list", - "type_list", "type_alias", "type_template", "enum_val", "enum_list", - "enum", "top_if", "top", "unit", "input", YY_NULLPTR + "$accept", "id", "apply", "var", "embed", "import", "assign", "binop", + "unop", "arg", "args", "param_decl", "decls", "defer", "const_binop", + "const_unop", "const_expr", "expr", "while", "do_while", "goto", + "statelet", "statement", "statements", "body", "references", "macro", + "exprs", "construct_arg", "construct_args", "construct", "if", "for", + "case", "cases", "switch", "const_for", "const_if", "const", + "simple_sign", "func_sign", "type", "var_decl", "var_init", "proc", + "lambda", "struct_elem", "members", "union", "generic", "generics", + "struct", "template_elem", "template_elems", "types", "alias", + "template", "enum_val", "enums", "enum", "top_if", "top_var_decl", + "top_var_init", "top_var", "top", "unit", "input", YY_NULLPTR }; static const char * @@ -720,12 +731,12 @@ yysymbol_name (yysymbol_kind_t yysymbol) } #endif -#define YYPACT_NINF (-225) +#define YYPACT_NINF (-284) #define yypact_value_is_default(Yyn) \ ((Yyn) == YYPACT_NINF) -#define YYTABLE_NINF (-220) +#define YYTABLE_NINF (-254) #define yytable_value_is_error(Yyn) \ 0 @@ -734,50 +745,57 @@ yysymbol_name (yysymbol_kind_t yysymbol) STATE-NUM. */ static const yytype_int16 yypact[] = { - 653, -225, -225, -225, 429, 27, 27, 27, 42, 3, - 27, 27, 27, 246, 60, 64, -225, 100, -225, -225, - -225, -225, 79, -225, -225, 214, -225, 113, 124, 134, - -225, -225, -225, -225, 144, -225, -225, 99, 112, 149, - -225, 1187, -225, 107, 71, 126, 49, 1187, 46, 65, - 30, 524, -38, -225, 122, -225, -225, -225, 1053, -225, - -225, -225, -225, -225, -225, 27, 27, 27, 27, 51, - -225, -225, -225, -225, 1187, 27, 1187, 1187, 1187, 1187, - 1187, -225, 127, 130, 1187, 27, 38, 92, -225, -225, - -225, -225, -225, -225, 1280, -225, 30, -225, 38, 27, - 22, -225, -225, 137, 1053, -225, 1053, -225, -225, 38, - 25, 165, 31, -225, 173, 38, 1344, 38, 38, 823, - -225, 1217, 604, 1985, 140, -225, -225, 38, 181, 157, - 194, -225, 221, 159, 164, 182, -225, 170, 233, -225, - 29, 186, 137, -225, 137, 137, 314, 1449, 137, 1187, - 263, 81, 1408, 100, 196, 224, 197, -225, 975, 38, - 1131, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, - 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, - 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, - 334, 38, 27, 97, 202, 269, 230, 204, 122, 55, - -225, -225, 207, 38, 38, 38, 27, -225, 168, 38, - -225, 38, 239, 208, -225, -225, -225, 27, 1217, 280, - 283, 1187, 1085, 1187, 122, 1007, 103, -225, 70, 284, - 288, 1472, -225, -225, 289, 747, 226, -225, -225, -225, - -225, -225, -225, -225, 293, -225, -225, 1161, 1985, 122, - 27, 256, 231, -225, 38, -225, 27, 234, 27, -225, - 235, -225, -225, 295, -225, -225, -225, 1536, 237, -225, - -225, 27, 107, 1187, -225, 220, 268, 238, -225, -225, - -225, 1985, -225, 110, 110, 110, 314, 314, 712, 556, - 1449, 1441, 1377, 1313, 913, 913, 913, 913, 837, 837, - 332, 332, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, - 1985, 1985, 244, -225, -225, 27, 1187, 27, -225, -225, - 27, 122, -225, -225, 240, -225, 250, -225, -225, 38, - -225, -225, 122, -225, -225, 1600, 315, 1664, 260, -225, - 316, 1187, 27, -225, -225, -225, -225, -225, -225, -225, - -225, -225, -225, 254, 275, 328, 604, -225, -225, -225, - 27, -225, 27, -225, -225, -225, -225, 122, -225, 1085, - -225, 281, 266, 1985, -225, 270, -225, 38, -225, -225, - 296, 291, 1187, -225, 1187, -225, 1664, 335, -225, -16, - 1053, -225, 282, 297, -225, -225, 33, -225, 122, 272, - 74, 1187, 291, 298, 1729, 1793, 300, 1187, -225, -225, - -225, -225, -225, 334, -225, -225, -225, -225, -225, 1857, - -225, -225, 1187, -225, 95, 1921, 122, 299, 899, 1664, - -225, -225, 1187, -225, -225, -225, -225, -225 + 614, -284, -284, -284, 137, 27, 27, 27, 19, 533, + 27, 27, 27, 775, -284, -284, -284, -284, -284, -284, + -284, -284, -284, 29, -284, -284, 523, -284, 53, -284, + -284, -284, -284, -284, -284, -284, -284, -284, 33, 54, + 350, -284, -284, -284, 533, 533, 533, 533, -284, -284, + -284, 2068, -48, 42, -21, -284, 28, 1352, -48, 400, + 574, 121, -17, -10, -284, 1, -284, 533, -284, -284, + 27, 27, 27, 27, 56, -284, -284, 45, -284, 1940, + 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, + 533, 533, 533, 533, 533, 533, 533, 533, 533, 815, + 121, -284, 326, 27, 36, 533, -284, -284, -284, -284, + 1352, 27, 1157, 1352, 1352, 1352, 1352, 39, 1352, 1352, + 1184, 27, 693, -4, 57, -284, -284, -284, -284, 2003, + -284, -284, -284, -284, -284, 533, -284, 533, -284, -284, + 326, 331, 89, 41, -284, 95, 771, 326, 999, -284, + 2150, 326, 99, 62, 822, -284, 138, 78, 84, 85, + -284, 665, 156, -284, 23, 96, -284, -284, -284, -284, + 45, 45, 2170, 1293, 1399, 330, 2210, 2190, 1204, 1204, + 1204, 1204, 2230, 2230, 180, 180, 97, -46, 100, 168, + 129, 106, 1, 143, 37, 1011, -7, -284, 801, -7, + -7, 232, 615, -7, 182, 1443, 1509, 372, 1575, 118, + 194, 130, 132, -284, 693, 1246, 1352, 1352, 1352, 1352, + 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, + 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, + 1352, 1352, 1352, 1352, 1352, 1352, 1273, 1352, 693, 27, + 2150, 2150, 160, 326, 326, -284, 326, 27, -284, 503, + 326, -284, 163, 157, -284, -284, 1352, 27, -284, -284, + 1379, 1352, 1, 1352, 67, -284, 259, -284, -284, -284, + 1906, -284, -284, -284, 226, 914, 161, -284, -284, -284, + -284, 194, -284, -284, -284, -284, -284, -284, 27, 165, + 27, -284, 166, -284, -284, 228, -284, -284, -284, 187, + 27, 1352, 27, -284, -284, 27, 27, 1, 771, 27, + 1906, 205, 183, 188, 198, 79, 612, 649, -284, -284, + 1352, -284, 80, -284, 1352, -284, 389, 213, 193, 1906, + -284, 1972, -24, -24, -24, 232, 232, 1478, 2037, 615, + 1875, 1611, 1544, 1743, 1743, 1743, 1743, 1677, 1677, 878, + 878, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, + 1972, -284, 199, 1642, -284, -284, -284, -284, -284, -284, + 195, -284, 201, -284, 326, -284, 1906, -284, 272, 1443, + 219, 1906, 533, 27, -284, -284, -284, -284, -284, -284, + -284, 27, -284, 27, -284, -36, 209, 1906, -284, -284, + 212, -284, -284, 280, 801, -284, -284, -28, 278, 533, + 79, 214, 1352, 1352, 1906, -284, 1, -284, 1379, -284, + -284, -284, 326, -284, -284, 1352, -284, 1352, 2102, 282, + 223, 227, 815, -284, -284, 1, 1352, -284, -284, -284, + 1078, 2128, -284, -284, 1906, 1906, -284, -284, 221, 1708, + 1774, 244, 1352, -284, -284, 231, -284, 1906, -284, 1078, + -284, 1352, -284, -27, 1840, 1, -284, -284, 1443, -284, + -284, 1352, -284, -284, -284, 109, 1352, 234, 416, 1352, + 237, 326, 533, 1906, 533, -7, 693, 1090, 1809, 326, + 693 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -785,74 +803,81 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_uint8 yydefact[] = { - 0, 215, 2, 195, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 200, 3, 4, 197, - 199, 198, 0, 204, 196, 0, 218, 0, 0, 0, - 209, 208, 207, 206, 0, 212, 205, 0, 0, 0, - 6, 0, 201, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 147, 145, 0, 157, 213, 202, 0, 203, - 217, 1, 214, 210, 211, 0, 0, 0, 0, 0, - 182, 60, 61, 62, 0, 0, 0, 0, 0, 0, - 0, 59, 0, 0, 0, 0, 0, 56, 74, 64, - 67, 68, 65, 66, 0, 75, 0, 162, 0, 0, - 0, 148, 150, 153, 0, 155, 0, 156, 144, 0, - 147, 52, 0, 48, 51, 0, 0, 0, 0, 0, - 161, 0, 0, 118, 120, 158, 119, 0, 171, 0, - 0, 164, 0, 0, 0, 0, 184, 0, 0, 177, - 179, 0, 41, 58, 39, 70, 38, 40, 42, 0, - 0, 56, 0, 0, 0, 107, 0, 73, 0, 0, + 0, 249, 2, 248, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 236, 233, 230, 232, 231, 237, + 238, 229, 234, 227, 228, 235, 0, 252, 0, 244, + 243, 242, 241, 240, 245, 246, 239, 247, 0, 0, + 0, 7, 78, 79, 0, 0, 0, 0, 77, 80, + 81, 0, 0, 0, 0, 3, 0, 0, 0, 0, + 0, 0, 173, 0, 171, 0, 223, 0, 251, 1, + 0, 0, 0, 0, 0, 208, 74, 73, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 187, 0, 0, 0, 0, 176, 85, 86, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 185, 189, 0, 0, 0, - 159, 160, 0, 0, 0, 0, 0, 141, 0, 0, - 151, 0, 181, 0, 154, 101, 100, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 105, 56, 0, - 0, 0, 91, 92, 0, 0, 0, 99, 94, 86, - 89, 93, 90, 95, 0, 97, 98, 0, 122, 0, - 0, 116, 0, 113, 0, 169, 0, 0, 166, 172, - 0, 167, 174, 0, 176, 178, 183, 0, 0, 63, - 69, 0, 0, 0, 54, 56, 47, 0, 45, 44, - 72, 7, 8, 11, 12, 13, 10, 9, 15, 14, - 16, 18, 17, 19, 32, 33, 34, 35, 36, 37, - 20, 21, 22, 23, 24, 25, 26, 29, 27, 28, - 30, 31, 0, 71, 57, 0, 0, 188, 191, 110, - 0, 0, 143, 50, 0, 142, 0, 49, 152, 0, - 149, 78, 0, 82, 83, 0, 0, 0, 0, 81, - 0, 0, 0, 139, 138, 88, 85, 84, 79, 87, - 102, 104, 96, 0, 0, 0, 0, 117, 121, 170, - 0, 165, 0, 175, 55, 5, 106, 0, 43, 0, - 53, 192, 0, 186, 187, 0, 108, 0, 140, 180, - 126, 0, 0, 76, 0, 80, 0, 0, 123, 0, - 0, 115, 0, 0, 163, 46, 0, 190, 0, 0, - 0, 0, 132, 0, 0, 0, 135, 0, 124, 125, - 114, 173, 168, 0, 194, 109, 146, 127, 128, 0, - 131, 133, 0, 77, 0, 112, 0, 0, 0, 0, - 136, 137, 0, 134, 193, 130, 129, 111 + 0, 0, 0, 82, 0, 102, 89, 95, 96, 178, + 106, 104, 105, 103, 174, 0, 221, 0, 222, 170, + 0, 173, 52, 0, 48, 51, 0, 0, 0, 186, + 224, 0, 197, 0, 0, 190, 0, 0, 0, 0, + 210, 0, 0, 203, 205, 0, 76, 56, 57, 58, + 55, 54, 60, 59, 61, 63, 62, 64, 67, 68, + 69, 70, 71, 72, 65, 66, 0, 0, 0, 211, + 215, 0, 0, 140, 0, 0, 41, 84, 0, 39, + 98, 38, 40, 42, 0, 0, 0, 82, 0, 0, + 0, 0, 0, 101, 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, 0, 0, 0, + 225, 226, 0, 0, 0, 182, 0, 0, 167, 0, + 0, 179, 207, 0, 132, 131, 0, 0, 114, 115, + 0, 0, 0, 113, 0, 138, 82, 117, 116, 128, + 111, 122, 123, 118, 136, 0, 0, 130, 124, 120, + 121, 4, 5, 125, 126, 127, 129, 195, 0, 0, + 192, 198, 0, 193, 200, 0, 202, 204, 209, 218, + 0, 0, 214, 217, 143, 0, 0, 0, 0, 0, + 146, 149, 0, 0, 151, 0, 0, 0, 88, 107, + 0, 97, 0, 100, 0, 94, 82, 47, 0, 45, + 44, 8, 11, 12, 13, 10, 9, 15, 14, 16, + 18, 17, 19, 32, 33, 34, 35, 36, 37, 20, + 21, 22, 23, 24, 25, 26, 29, 27, 28, 30, + 31, 91, 0, 0, 99, 83, 169, 180, 181, 50, + 0, 168, 0, 49, 0, 175, 53, 110, 0, 0, + 0, 112, 0, 0, 165, 164, 119, 133, 134, 137, + 196, 0, 191, 0, 201, 0, 0, 212, 213, 139, + 0, 141, 177, 0, 0, 150, 6, 0, 0, 0, + 158, 0, 0, 0, 183, 189, 0, 43, 0, 93, + 90, 92, 0, 166, 206, 0, 108, 0, 0, 0, + 0, 0, 0, 220, 216, 0, 0, 148, 152, 153, + 0, 0, 157, 159, 184, 185, 188, 46, 0, 0, + 0, 161, 0, 199, 194, 0, 142, 147, 156, 0, + 172, 0, 109, 0, 145, 0, 219, 155, 0, 162, + 163, 0, 160, 154, 144, 0, 0, 173, 0, 0, + 173, 0, 0, 178, 0, 178, 0, 0, 0, 0, + 0 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -225, 0, -3, -225, 4, -225, -225, -225, 133, 6, - -225, -66, -225, -225, 287, -225, -225, -225, -225, -216, - -30, -84, 5, -56, -225, 24, 218, -43, 161, -224, - -19, -225, -225, -20, -225, -225, -36, -225, -17, -225, - 439, 427, -62, 385, -225, -225, -65, 23, -225, -46, - 10, -225, 251, 66, 13, 14, -225, -120, 16, 1, - -225, -23, -225 + -284, 0, 222, -284, -284, 4, -284, -284, -284, 51, + -243, -284, -84, -284, -284, -284, 136, 528, -284, -284, + -284, -284, -284, -283, 88, -120, 11, -170, -284, -91, + -284, -92, -284, -284, -89, -284, -284, -144, -284, -38, + -284, 357, 445, 233, 335, -284, -284, -56, 32, -284, + -53, 14, -284, 179, -26, 17, 18, -284, -139, 21, + -44, -284, -284, 360, -284, 2, -284 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - 0, 87, 14, 88, 15, 89, 90, 91, 276, 277, - 111, 112, 92, 93, 123, 232, 233, 234, 235, 236, - 237, 156, 16, 426, 251, 252, 124, 278, 249, 126, - 239, 240, 402, 403, 241, 343, 344, 242, 53, 54, - 55, 17, 18, 19, 95, 132, 133, 20, 128, 129, - 21, 140, 141, 213, 22, 23, 196, 197, 24, 42, - 25, 26, 27 + 0, 123, 124, 277, 125, 14, 126, 127, 128, 337, + 338, 142, 143, 279, 49, 50, 51, 280, 281, 282, + 283, 284, 285, 286, 287, 194, 15, 475, 321, 322, + 130, 131, 289, 420, 421, 132, 394, 395, 290, 64, + 65, 255, 155, 292, 16, 133, 156, 157, 17, 152, + 153, 18, 164, 165, 263, 19, 20, 190, 191, 21, + 22, 23, 24, 25, 26, 27, 28 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -860,528 +885,583 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { - 13, 28, 60, 135, 13, 37, 38, 39, 29, 30, - 43, 44, 45, 52, 33, 125, 199, 34, 35, 350, - 36, 134, 154, 353, 120, 13, 97, 32, 2, 101, - 193, 2, 46, 2, 117, 2, 2, 46, 47, 52, - 206, 121, 118, 47, 2, 46, 52, 40, 52, 52, - 110, 47, 2, 46, 104, 2, 46, 2, 119, 47, - 41, 200, 47, 201, 320, 127, 130, 127, 130, 137, - 56, 2, 46, 106, 57, 143, 2, 46, 47, 253, - 6, 345, 98, 47, 151, 155, 52, 2, 46, 59, - 41, 203, 139, 204, 47, 198, 110, 117, 52, 195, - 155, 51, 6, 108, 207, 118, 51, 413, 58, 52, - 52, 109, 208, 61, 51, 52, 229, 52, 52, 228, - 263, 96, 51, 230, 238, 51, 136, 52, 321, 243, - 52, 218, 244, 245, 62, 246, 48, 52, 49, 323, - 137, 51, 158, 327, 63, 99, 51, 48, 119, 49, - 159, 52, 341, 158, 64, 2, 46, 51, 275, 52, - 341, 159, 47, 139, 158, 409, 342, 312, 319, 119, - 207, 65, 159, 66, 2, 46, 2, 46, 208, 96, - 262, 47, 340, 47, 67, 154, 68, 366, 191, 192, - 13, 52, 314, 361, 338, 372, 119, 374, 100, 149, - 2, 46, 150, 52, 52, 110, 324, 47, 52, 110, - 359, 52, 435, 205, -216, 1, 192, 331, 254, 354, - 2, 209, 275, 69, 3, 51, 2, 46, 52, 256, - 257, 258, 229, 47, 259, 228, 203, 260, 204, 230, - 238, 325, 96, 264, 51, 243, 51, 151, 244, 245, - 355, 246, 2, 46, 52, 367, 127, 261, 130, 47, - 203, 266, 204, 4, 5, 6, 7, 8, 268, 270, - 51, 155, 271, 275, 272, 52, 315, 316, 317, 318, - 322, 330, 9, 10, 11, 12, 203, 329, 204, -216, - 333, 376, 158, 334, 346, 392, 51, 393, 347, 349, - 159, 351, 380, 352, 356, 363, 357, 383, 360, 362, - 365, 370, 48, 253, 49, 195, 369, 195, 50, 371, - 375, 377, 51, 378, 384, 382, 385, 388, 94, 52, - 161, 162, 163, 389, 103, 1, 390, 394, 116, 396, - 2, 397, 387, 398, 3, 416, 407, 410, 161, 162, - 163, 164, 165, 401, 400, 336, 406, 411, 424, 408, - 130, 142, 130, 144, 145, 146, 147, 148, 415, 275, - 417, 152, 412, 421, 434, 395, 437, 52, 282, 332, - 391, 418, 420, 4, 5, 6, 7, 8, 431, 31, - 427, 265, 191, 192, 430, 379, 433, 414, 0, 436, - 0, 0, 9, 10, 11, 12, 231, 0, 248, 0, - 191, 192, 0, 13, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 229, 0, 0, 228, 0, - 0, 0, 230, 238, 0, 2, 267, 0, 243, 0, - 0, 244, 245, 0, 246, 0, 0, 281, 283, 284, - 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, - 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 114, 70, 5, - 6, 7, 8, 0, 0, 102, 0, 105, 107, 113, - 0, 0, 0, 131, 0, 131, 138, 0, 10, 11, - 12, 0, 0, 0, 0, 248, 0, 0, 335, 0, - 337, 153, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 231, 114, 0, 157, 0, 71, 72, 73, - 2, 74, 0, 75, 152, 113, 76, 194, 77, 0, - 0, 0, 0, 78, 0, 0, 0, 79, 202, 0, - 0, 80, 0, 0, 210, 0, 212, 214, 0, 0, - 147, 0, 0, 0, 0, 0, 255, 138, 0, 0, - 0, 81, 161, 162, 163, 164, 165, 0, 82, 168, - 83, 0, 0, 0, 0, 279, 0, 0, 0, 0, - 178, 179, 0, 0, 0, 0, 84, 0, 280, 0, - 85, 115, 86, 373, 0, 0, 0, 71, 72, 73, - 2, 74, 0, 75, 0, 0, 76, 0, 77, 0, - 0, 0, 0, 78, 0, 0, 0, 79, 386, 0, - 313, 80, 114, 0, 191, 192, 114, 0, 0, 0, - 0, 0, 105, 107, 113, 0, 0, 326, 113, 279, - 328, 81, 0, -219, 1, 0, 0, 0, 82, 2, - 83, 121, 0, 3, 0, 0, 0, 0, 0, 404, - 0, 405, 0, 0, 153, 0, 84, 0, 122, 0, - 85, 0, 86, 250, 0, 131, 0, 0, 419, 0, - 0, 0, 0, 358, 425, 0, 0, 0, 0, 0, - 368, 0, 4, 5, 6, 7, 8, 0, 0, 429, - 0, 0, 0, 0, 0, 231, 0, 0, 0, 425, - 0, 9, 10, 11, 12, 0, 0, 0, 161, 162, - 163, 164, 165, 0, 167, 168, 169, 170, 171, 0, - 172, 173, 174, 175, 176, 177, 178, 179, 215, 0, - 71, 72, 73, 2, 74, 0, 75, 216, 0, 76, - 0, 77, 0, 0, 0, 0, 78, 0, 212, 0, - 79, 0, 0, 0, 80, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 131, 0, 131, - 191, 192, 0, 0, 81, 0, 279, 5, 0, 7, - 8, 82, 217, 83, 218, 0, 219, 220, 221, -103, - 222, 223, 224, 0, 225, 226, 399, 11, 12, 84, - 0, 119, -103, 85, 215, 86, 71, 72, 73, 2, - 74, 0, 75, 216, 0, 76, 0, 77, 0, 0, - 0, 0, 78, 0, 0, 0, 79, 0, 0, 0, - 80, 0, 0, 161, 162, 163, 164, 165, 0, 167, - 168, 169, 0, 0, 0, 172, 173, 174, 175, 0, - 81, 178, 179, 5, 0, 7, 8, 82, 217, 83, - 218, 0, 219, 220, 221, 0, 222, 223, 224, 0, - 225, 226, 0, 11, 12, 84, 0, 119, 227, 85, - 215, 86, 71, 72, 73, 2, 74, 0, 75, 216, - 0, 76, 0, 77, 0, 191, 192, 0, 78, 0, - 0, 0, 79, 0, 0, 0, 80, 0, 0, 161, - 162, 163, 164, 165, 0, 167, 168, 169, 0, 0, - 0, 0, 0, 0, 0, 0, 81, 178, 179, 5, - 0, 7, 8, 82, 217, 83, 218, 0, 219, 220, - 221, 0, 222, 223, 224, 0, 225, 226, 0, 11, - 12, 84, 0, 119, 0, 85, 0, 86, 71, 72, - 73, 2, 74, 0, 75, 0, 0, 76, 0, 77, - 0, 191, 192, 0, 78, 0, 0, 0, 273, 0, - 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, - 71, 72, 73, 2, 74, 0, 75, 339, 0, 76, - 0, 77, 81, 0, 0, 0, 78, 0, 0, 82, - 79, 83, 121, 0, 80, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 84, 274, 122, - 0, 85, 0, 86, 81, 0, 71, 72, 73, 2, - 74, 82, 75, 83, 121, 76, 0, 77, 0, 0, - 0, 0, 78, 0, 0, 0, 79, 0, 0, 84, - 80, 122, 0, 85, 0, 86, 0, 0, 71, 72, - 73, 2, 74, 0, 75, 0, 0, 76, 0, 77, - 81, 0, 0, 0, 78, 0, 0, 82, 273, 83, - 121, 0, 80, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 84, 0, 122, 0, 85, - 0, 86, 81, 0, 71, 72, 73, 2, 74, 82, - 75, 83, 121, 76, 0, 77, 0, 0, 0, 0, - 78, 0, 0, 0, 79, 0, 0, 84, 80, 122, - 0, 85, 0, 86, 71, 72, 73, 2, 74, 0, - 75, 0, 0, 76, 0, 77, 0, 0, 81, 0, - 78, 0, 0, 0, 79, 82, 0, 83, 80, 0, - 71, 72, 73, 2, 74, 0, 75, 0, 0, 76, - 0, 77, 0, 84, 0, 122, 78, 85, 81, 86, - 79, 0, 0, 0, 80, 82, 0, 83, 121, 0, - 71, 72, 73, 2, 74, 0, 75, 0, 0, 76, - 0, 77, 0, 84, 81, 0, 78, 85, 0, 86, - 79, 82, 0, 83, 80, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, - 0, 0, 0, 85, 81, 86, 0, 0, 0, 0, - 0, 82, 0, 83, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 160, 247, - 0, 0, 0, 85, 0, 86, 161, 162, 163, 164, - 165, 166, 167, 168, 169, 170, 171, 0, 172, 173, - 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, - 184, 185, 0, 186, 187, 188, 189, 0, 0, 161, - 162, 163, 164, 165, 0, 167, 168, 169, 170, 0, - 0, 172, 173, 174, 175, 176, 177, 178, 179, 0, - 0, 0, 160, 0, 190, 0, 0, 0, 191, 192, - 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, - 171, 0, 172, 173, 174, 175, 176, 177, 178, 179, - 180, 181, 182, 183, 184, 185, 0, 186, 187, 188, - 189, 191, 192, 161, 162, 163, 164, 165, 0, 167, - 168, 169, 0, 0, 0, 172, 173, 174, 175, 176, - 177, 178, 179, 0, 0, 0, 160, 0, 0, 0, - 0, 211, 191, 192, 161, 162, 163, 164, 165, 166, - 167, 168, 169, 170, 171, 0, 172, 173, 174, 175, - 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, - 0, 186, 187, 188, 189, 191, 192, 161, 162, 163, - 164, 165, 0, 167, 168, 161, 162, 163, 164, 165, - 0, 0, 0, 0, 0, 178, 179, 0, 0, 0, - 160, 269, 348, 178, 179, 0, 191, 192, 161, 162, - 163, 164, 165, 166, 167, 168, 169, 170, 171, 0, - 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, - 182, 183, 184, 185, 0, 186, 187, 188, 189, 191, - 192, 0, 0, 0, 0, 0, 0, 191, 192, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, - 191, 192, 161, 162, 163, 164, 165, 166, 167, 168, - 169, 170, 171, 0, 172, 173, 174, 175, 176, 177, - 178, 179, 180, 181, 182, 183, 184, 185, 0, 186, - 187, 188, 189, 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, 160, 364, - 0, 0, 0, 0, 191, 192, 161, 162, 163, 164, - 165, 166, 167, 168, 169, 170, 171, 0, 172, 173, - 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, - 184, 185, 0, 186, 187, 188, 189, 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, 160, 0, 381, 0, 0, 0, 191, 192, - 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, - 171, 0, 172, 173, 174, 175, 176, 177, 178, 179, - 180, 181, 182, 183, 184, 185, 0, 186, 187, 188, - 189, 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, 160, 119, 422, - 0, 0, 191, 192, 0, 161, 162, 163, 164, 165, - 166, 167, 168, 169, 170, 171, 0, 172, 173, 174, - 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, - 185, 0, 186, 187, 188, 189, 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, 160, 0, 423, 0, 0, 0, 191, 192, 161, - 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, - 0, 172, 173, 174, 175, 176, 177, 178, 179, 180, - 181, 182, 183, 184, 185, 0, 186, 187, 188, 189, - 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, 160, 0, 0, 428, 0, - 0, 191, 192, 161, 162, 163, 164, 165, 166, 167, - 168, 169, 170, 171, 0, 172, 173, 174, 175, 176, - 177, 178, 179, 180, 181, 182, 183, 184, 185, 0, - 186, 187, 188, 189, 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, 160, - 0, 0, 0, 0, 0, 191, 192, 161, 162, 163, - 164, 165, 166, 167, 168, 169, 170, 171, 0, 172, - 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, - 183, 184, 185, 0, 186, 187, 188, 189, 0, 432, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 160, 0, 0, 0, 0, 0, 191, - 192, 161, 162, 163, 164, 165, 166, 167, 168, 169, - 170, 171, 0, 172, 173, 174, 175, 176, 177, 178, - 179, 180, 181, 182, 183, 184, 185, 0, 186, 187, - 188, 189, 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, 191, 192 + 13, 212, 398, 372, 13, 38, 39, 40, 29, 48, + 52, 53, 54, 62, 101, 30, 187, 159, 33, 158, + 134, 34, 35, 9, 41, 36, 13, 100, 68, 2, + 258, 118, 392, 2, 2, 55, 32, 56, 259, 67, + 487, 442, 2, 57, 48, 48, 48, 48, 316, 148, + 148, 246, 257, 69, 104, 102, 62, 248, 249, 62, + 62, 141, 2, 80, 81, 82, 146, 48, 246, 147, + 151, 154, 151, 154, 161, 249, 6, 58, 148, 214, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 13, + 141, 186, 487, 189, 193, 48, 163, 105, 70, 6, + 71, 197, 192, 317, 204, 2, 55, 258, 485, 103, + 207, 193, 490, 305, 486, 259, 392, 2, 55, 72, + 485, 73, 215, 393, 160, 48, 486, 48, 299, 256, + 487, 487, 418, 2, 419, 260, 62, 487, 276, 298, + 300, 487, 278, 149, 487, 100, 301, 148, 58, 288, + 302, 487, 293, 303, 161, 294, 295, 468, 306, 296, + 58, 406, 379, 408, 308, 309, 383, 310, 311, 312, + 76, 77, 78, 79, 313, 457, 477, 323, 492, 5, + 6, 7, 8, 315, 329, 409, 163, 139, 80, 81, + 82, 83, 84, 150, 330, 140, 331, 62, 209, 10, + 11, 12, 332, 384, 490, 336, 167, 168, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 63, 376, 385, 397, 399, + 404, 195, 401, 403, 402, 400, 336, 405, 490, 375, + 217, 218, 219, 487, 487, 414, 141, 380, 417, 487, + 141, 415, 63, 428, 416, 2, 55, 387, 56, 429, + 336, 250, 396, 251, 57, 430, 62, 433, 63, 432, + 314, 63, 63, 63, 435, 276, 437, 444, 445, 278, + 446, 450, 453, 324, 426, 462, 288, 470, 151, 293, + 154, 463, 294, 295, 473, 464, 296, 246, 58, 476, + 189, 484, 189, 248, 249, 193, 410, 491, 62, 413, + 496, 388, 63, 447, 63, 449, 62, 62, 326, 480, + 327, 452, 2, 55, 336, 485, 487, 2, 55, 31, + 485, 486, 214, 307, 63, 440, 486, 441, 80, 81, + 82, 83, 84, 211, 86, 87, 2, 55, 434, 485, + 390, 443, 63, 63, 37, 486, 97, 98, 63, 63, + 66, 0, 0, 63, 0, 58, 63, 0, 2, 55, + 58, 56, 0, 63, 487, 0, 0, 57, 0, 0, + 0, 0, 48, 439, 0, 2, 55, 75, 485, 58, + 253, 154, 254, 154, 486, 411, 2, 55, 0, 56, + 135, 0, 0, 106, 491, 57, 136, 138, 144, 48, + 425, 58, 2, 55, 0, 488, 0, 74, 336, 63, + 0, 489, 487, 0, 0, 0, 63, 0, 58, 0, + 0, 326, 13, 327, 465, 0, 0, 0, 0, 58, + 276, 0, 0, 0, 278, 214, 0, 144, 253, 188, + 254, 288, 0, 0, 293, 58, 0, 294, 295, 276, + 63, 296, 214, 278, 0, 63, 63, 436, 63, 213, + 288, 63, 63, 293, 0, 487, 294, 295, 490, 0, + 296, 487, 48, 0, 48, 494, 490, 252, 63, 487, + 490, 0, 0, 261, 262, 448, 145, 0, 297, 2, + 55, 0, 485, 0, 456, 0, 0, 0, 486, 162, + 0, 0, 0, -250, 1, 0, 461, 0, 438, 2, + 0, 0, 0, 466, 0, 3, 42, 43, 0, 2, + 63, 0, 0, 0, 0, 145, 0, 44, 63, 63, + 0, 0, 58, 0, 45, 451, 0, 0, 63, 0, + 0, 479, 46, 482, 0, 210, 483, 0, 0, 0, + 0, 333, 0, 0, 4, 5, 6, 7, 8, 381, + 2, 55, 9, 56, 137, 129, 0, 0, 0, 57, + 0, 0, 0, 291, 0, 10, 11, 12, 0, 0, + 0, -250, 0, 0, 0, 374, 63, 0, 47, 162, + 377, 378, 0, 144, -253, 1, 382, 144, 2, 55, + 2, 56, 422, 58, 0, 0, 3, 57, 497, 0, + 498, 0, 0, 217, 218, 219, 220, 221, 196, 0, + 199, 200, 201, 202, 203, 0, 205, 206, 208, 0, + 0, 234, 235, 0, 63, 2, 55, 0, 56, 423, + 340, 58, 0, 0, 57, 4, 5, 6, 7, 8, + 0, 2, 55, 9, 485, 412, 0, 304, 0, 0, + 486, 0, 0, 377, 378, 0, 10, 11, 12, 0, + 246, 340, 0, 0, 0, 0, 248, 249, 58, 2, + 55, 145, 488, 0, 0, 145, 0, 63, 489, 0, + 63, 0, 0, 63, 58, 340, 0, 0, 63, 0, + 0, 63, 63, 0, 0, 0, 320, 0, 0, 0, + 291, 0, 0, 0, 253, 0, 254, 0, 0, 0, + 100, 262, 58, 339, 341, 342, 343, 344, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 339, 373, 0, 2, 55, 427, + 56, 2, 55, 0, 56, 0, 57, 0, 0, 458, + 57, 0, 0, 0, 386, 0, 0, 0, 339, 389, + 0, 391, 0, 0, 107, 108, 109, 2, 55, 0, + 110, 0, 111, 0, 0, 112, 1, 113, 0, 0, + 58, 2, 114, 0, 58, 0, 115, 3, 2, 55, + 116, 485, 0, 0, 0, 0, 0, 486, 0, 407, + 0, 0, 106, 0, 59, 106, 60, 0, 261, 0, + 61, 0, 0, 261, 0, 0, 412, 412, 424, 117, + 118, 0, 202, 0, 0, 119, 4, 5, 6, 7, + 8, 58, 0, 340, 9, 0, 120, 0, 0, 0, + 121, 0, 122, 319, 0, 0, 0, 10, 11, 12, + 0, 253, 0, 254, 0, 291, 217, 218, 219, 220, + 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 291, 264, 0, 107, 108, 109, + 2, 55, 0, 110, 0, 111, 265, 0, 112, 0, + 113, 0, 0, 0, 0, 114, 0, 0, 0, 115, + 0, 0, 320, 116, 0, 0, 0, 0, 0, 0, + 454, 455, 0, 246, 0, 0, 339, 0, 0, 248, + 249, 0, 0, 459, 0, 460, 5, 0, 7, 8, + 266, 267, 117, 118, 467, 268, 269, -135, 119, -135, + 270, 271, 272, 0, 273, 274, 0, 11, 12, 120, + 474, 148, -135, 121, 0, 122, 0, 0, 0, 478, + 264, 0, 107, 108, 109, 2, 55, 0, 110, 474, + 111, 265, 0, 112, 493, 113, 0, 495, 0, 0, + 114, 0, 0, 0, 115, 0, 0, 0, 116, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 0, 91, 92, 93, 94, 95, 96, 97, 98, 0, + 0, 5, 0, 7, 8, 266, 267, 117, 118, 0, + 268, 269, 0, 119, 0, 270, 271, 272, 0, 273, + 274, 0, 11, 12, 120, 0, 148, 275, 121, 264, + 122, 107, 108, 109, 2, 55, 0, 110, 0, 111, + 265, 318, 112, 0, 113, 0, 0, 0, 0, 114, + 0, 0, 0, 115, 0, 0, 0, 116, 80, 81, + 82, 83, 84, 85, 86, 87, 88, 89, 90, 0, + 91, 92, 93, 94, 95, 96, 97, 98, 0, 0, + 5, 0, 7, 8, 266, 267, 117, 118, 0, 268, + 269, 0, 119, 0, 270, 271, 272, 0, 273, 274, + 0, 11, 12, 120, 0, 148, 0, 121, 0, 122, + 107, 108, 109, 2, 55, 0, 110, 0, 111, 0, + 499, 112, 0, 113, 0, 0, 0, 0, 114, 0, + 0, 0, 115, 0, 0, 0, 116, 107, 108, 109, + 2, 55, 0, 110, 0, 111, 0, 0, 112, 0, + 113, 0, 0, 0, 0, 114, 0, 0, 0, 115, + 0, 0, 0, 116, 0, 117, 118, 0, 0, 0, + 0, 119, 80, 81, 82, 83, 84, 0, 86, 87, + 88, 0, 120, 0, 198, 0, 121, 0, 122, 0, + 97, 98, 117, 118, 0, 0, 0, 0, 119, 107, + 108, 109, 2, 55, 0, 110, 0, 111, 0, 120, + 112, 148, 113, 121, 0, 122, 0, 114, 0, 0, + 0, 334, 0, 0, 0, 116, 107, 108, 109, 2, + 55, 0, 110, 0, 111, 0, 0, 112, 0, 113, + 0, 0, 0, 0, 114, 0, 0, 0, 334, 0, + 0, 0, 116, 0, 117, 118, 0, 0, 0, 0, + 119, 80, 81, 82, 83, 84, 0, 0, 87, 0, + 0, 120, 335, 0, 0, 121, 0, 122, 0, 97, + 98, 117, 118, 0, 0, 0, 0, 119, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 120, 371, + 0, 0, 121, 0, 122, 107, 108, 109, 2, 55, + 0, 110, 0, 111, 0, 0, 112, 0, 113, 0, + 0, 0, 0, 114, 0, 0, 0, 115, 0, 0, + 0, 116, 107, 108, 109, 2, 55, 0, 110, 0, + 111, 0, 0, 112, 0, 113, 0, 0, 0, 0, + 114, 0, 0, 0, 334, 0, 0, 0, 116, 0, + 117, 118, 0, 0, 0, 0, 119, 80, 81, 82, + 83, 84, 0, 0, 0, 0, 0, 120, 0, 0, + 0, 121, 0, 122, 0, 97, 98, 117, 118, 0, + 0, 0, 0, 119, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 216, 120, 0, 0, 0, 121, 0, + 122, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 0, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 0, 242, 243, + 244, 245, 0, 0, 0, 0, 217, 218, 219, 220, + 221, 0, 223, 224, 225, 226, 227, 0, 228, 229, + 230, 231, 232, 233, 234, 235, 0, 0, 246, 216, + 148, 0, 247, 0, 248, 249, 0, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 0, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 246, 242, 243, 244, 245, 0, 248, + 249, 0, 217, 218, 219, 220, 221, 0, 223, 224, + 225, 226, 0, 0, 228, 229, 230, 231, 232, 233, + 234, 235, 0, 0, 246, 216, 325, 0, 247, 0, + 248, 249, 0, 217, 218, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 0, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 246, + 242, 243, 244, 245, 0, 248, 249, 0, 0, 217, + 218, 219, 220, 221, 0, 223, 224, 225, 0, 0, + 0, 228, 229, 230, 231, 232, 233, 234, 235, 0, + 246, 328, 216, 0, 247, 0, 248, 249, 0, 0, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 0, 228, 229, 230, 231, 232, 233, 234, 235, + 236, 237, 238, 239, 240, 241, 246, 242, 243, 244, + 245, 0, 248, 249, 0, 217, 218, 219, 220, 221, + 0, 223, 224, 225, 0, 0, 0, 228, 229, 230, + 231, 0, 0, 234, 235, 0, 0, 246, 216, 0, + 471, 247, 431, 248, 249, 0, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 0, 228, 229, + 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 246, 242, 243, 244, 245, 0, 248, 249, + 0, 217, 218, 219, 220, 221, 0, 223, 224, 225, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, + 235, 0, 0, 246, 216, 0, 472, 247, 0, 248, + 249, 0, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 0, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 237, 238, 239, 240, 241, 246, 242, + 243, 244, 245, 0, 248, 249, 0, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, 90, 0, 91, + 92, 93, 94, 95, 96, 97, 98, 0, 0, 246, + 216, 0, 0, 247, 0, 248, 249, 0, 217, 218, + 219, 220, 221, 222, 223, 224, 225, 226, 227, 0, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, + 238, 239, 240, 241, 0, 242, 243, 244, 245, 500, + 481, 0, 0, 217, 218, 219, 220, 221, 0, 223, + 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 234, 235, 0, 0, 246, 216, 0, 0, 247, + 0, 248, 249, 0, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 0, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, + 246, 242, 243, 244, 245, 0, 248, 249, 80, 81, + 82, 83, 84, 85, 86, 87, 88, 89, 90, 0, + 91, 92, 93, 94, 95, 96, 97, 98, 0, 0, + 0, 246, 216, 0, 0, 247, 0, 248, 249, 0, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 0, 228, 229, 230, 231, 232, 233, 234, 235, + 236, 237, 238, 239, 240, 241, 166, 242, 243, 244, + 245, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 0, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 246, 242, 243, + 244, 245, 0, 248, 249, 217, 218, 219, 220, 221, + 0, 0, 224, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 234, 235, 0, 0, 0, 246, 0, + 0, 0, 247, 0, 248, 249, 80, 81, 82, 83, + 84, 85, 86, 87, 88, 89, 90, 0, 91, 92, + 93, 94, 95, 96, 97, 98, 0, 0, 0, 0, + 0, 0, 246, 0, 0, 0, 0, 0, 248, 249, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 0, 91, 92, 93, 94, 95, 96, 97, 98, + 0, 469, 0, 0, 0, 99, 80, 81, 82, 83, + 84, 85, 86, 87, 88, 89, 90, 0, 91, 92, + 93, 94, 95, 96, 97, 98, 0, 0, 80, 81, + 82, 83, 84, 85, 86, 87, 88, 89, 90, 148, + 91, 92, 93, 94, 95, 96, 97, 98, 80, 81, + 82, 83, 84, 0, 86, 87, 88, 89, 90, 0, + 91, 92, 93, 94, 95, 96, 97, 98, 80, 81, + 82, 83, 84, 0, 86, 87, 88, 89, 0, 0, + 91, 92, 93, 94, 95, 96, 97, 98, 80, 81, + 82, 83, 84, 0, 86, 87, 88, 0, 0, 0, + 91, 92, 93, 94, 95, 96, 97, 98, 80, 81, + 82, 83, 84, 0, 86, 87, 88, 0, 0, 0, + 91, 92, 93, 94, 0, 0, 97, 98 }; static const yytype_int16 yycheck[] = { - 0, 4, 25, 68, 4, 5, 6, 7, 4, 4, - 10, 11, 12, 13, 4, 58, 100, 4, 4, 235, - 4, 67, 84, 247, 54, 25, 43, 4, 6, 46, - 96, 6, 7, 6, 72, 6, 6, 7, 13, 39, - 9, 57, 80, 13, 6, 7, 46, 5, 48, 49, - 50, 13, 6, 7, 8, 6, 7, 6, 74, 13, - 57, 104, 13, 106, 9, 65, 66, 67, 68, 69, - 10, 6, 7, 8, 10, 75, 6, 7, 13, 122, - 51, 11, 11, 13, 84, 85, 86, 6, 7, 10, - 57, 66, 69, 68, 13, 73, 96, 72, 98, 99, - 100, 76, 51, 73, 73, 80, 76, 74, 8, 109, - 110, 81, 81, 0, 76, 115, 119, 117, 118, 119, - 137, 72, 76, 119, 119, 76, 75, 127, 73, 119, - 130, 57, 119, 119, 10, 119, 66, 137, 68, 205, - 140, 76, 72, 209, 10, 74, 76, 66, 74, 68, - 80, 151, 57, 72, 10, 6, 7, 76, 158, 159, - 57, 80, 13, 140, 72, 389, 63, 190, 198, 74, - 73, 72, 80, 74, 6, 7, 6, 7, 81, 72, - 10, 13, 225, 13, 72, 247, 74, 271, 78, 79, - 190, 191, 192, 258, 224, 315, 74, 317, 72, 72, - 6, 7, 72, 203, 204, 205, 206, 13, 208, 209, - 256, 211, 428, 48, 0, 1, 79, 217, 78, 249, - 6, 48, 222, 74, 10, 76, 6, 7, 228, 48, - 73, 10, 235, 13, 75, 235, 66, 73, 68, 235, - 235, 73, 72, 10, 76, 235, 76, 247, 235, 235, - 250, 235, 6, 7, 254, 272, 256, 75, 258, 13, - 66, 75, 68, 49, 50, 51, 52, 53, 5, 73, - 76, 271, 48, 273, 77, 275, 74, 8, 48, 75, - 73, 73, 68, 69, 70, 71, 66, 48, 68, 75, - 10, 321, 72, 10, 10, 360, 76, 362, 10, 10, - 80, 75, 332, 10, 48, 10, 75, 337, 74, 74, - 73, 73, 66, 356, 68, 315, 48, 317, 72, 75, - 320, 81, 76, 73, 64, 10, 10, 73, 41, 329, - 16, 17, 18, 58, 47, 1, 8, 367, 51, 58, - 6, 75, 342, 73, 10, 73, 11, 390, 16, 17, - 18, 19, 20, 62, 58, 222, 386, 75, 58, 389, - 360, 74, 362, 76, 77, 78, 79, 80, 398, 369, - 400, 84, 75, 75, 75, 369, 432, 377, 160, 218, - 356, 400, 402, 49, 50, 51, 52, 53, 424, 4, - 413, 140, 78, 79, 424, 329, 426, 396, -1, 429, - -1, -1, 68, 69, 70, 71, 119, -1, 121, -1, - 78, 79, -1, 413, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 428, -1, -1, 428, -1, - -1, -1, 428, 428, -1, 6, 149, -1, 428, -1, - -1, 428, 428, -1, 428, -1, -1, 160, 161, 162, - 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, - 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, - 183, 184, 185, 186, 187, 188, 189, 50, 39, 50, - 51, 52, 53, -1, -1, 46, -1, 48, 49, 50, - -1, -1, -1, 66, -1, 68, 69, -1, 69, 70, - 71, -1, -1, -1, -1, 218, -1, -1, 221, -1, - 223, 84, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 235, 96, -1, 86, -1, 3, 4, 5, - 6, 7, -1, 9, 247, 96, 12, 98, 14, -1, - -1, -1, -1, 19, -1, -1, -1, 23, 109, -1, - -1, 27, -1, -1, 115, -1, 117, 118, -1, -1, - 273, -1, -1, -1, -1, -1, 127, 140, -1, -1, - -1, 47, 16, 17, 18, 19, 20, -1, 54, 23, - 56, -1, -1, -1, -1, 158, -1, -1, -1, -1, - 34, 35, -1, -1, -1, -1, 72, -1, 159, -1, - 76, 77, 78, 316, -1, -1, -1, 3, 4, 5, - 6, 7, -1, 9, -1, -1, 12, -1, 14, -1, - -1, -1, -1, 19, -1, -1, -1, 23, 341, -1, - 191, 27, 205, -1, 78, 79, 209, -1, -1, -1, - -1, -1, 203, 204, 205, -1, -1, 208, 209, 222, - 211, 47, -1, 0, 1, -1, -1, -1, 54, 6, - 56, 57, -1, 10, -1, -1, -1, -1, -1, 382, - -1, 384, -1, -1, 247, -1, 72, -1, 74, -1, - 76, -1, 78, 79, -1, 258, -1, -1, 401, -1, - -1, -1, -1, 254, 407, -1, -1, -1, -1, -1, - 273, -1, 49, 50, 51, 52, 53, -1, -1, 422, - -1, -1, -1, -1, -1, 428, -1, -1, -1, 432, - -1, 68, 69, 70, 71, -1, -1, -1, 16, 17, - 18, 19, 20, -1, 22, 23, 24, 25, 26, -1, - 28, 29, 30, 31, 32, 33, 34, 35, 1, -1, - 3, 4, 5, 6, 7, -1, 9, 10, -1, 12, - -1, 14, -1, -1, -1, -1, 19, -1, 329, -1, - 23, -1, -1, -1, 27, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 360, -1, 362, - 78, 79, -1, -1, 47, -1, 369, 50, -1, 52, - 53, 54, 55, 56, 57, -1, 59, 60, 61, 62, - 63, 64, 65, -1, 67, 68, 377, 70, 71, 72, - -1, 74, 75, 76, 1, 78, 3, 4, 5, 6, - 7, -1, 9, 10, -1, 12, -1, 14, -1, -1, - -1, -1, 19, -1, -1, -1, 23, -1, -1, -1, - 27, -1, -1, 16, 17, 18, 19, 20, -1, 22, - 23, 24, -1, -1, -1, 28, 29, 30, 31, -1, - 47, 34, 35, 50, -1, 52, 53, 54, 55, 56, - 57, -1, 59, 60, 61, -1, 63, 64, 65, -1, - 67, 68, -1, 70, 71, 72, -1, 74, 75, 76, - 1, 78, 3, 4, 5, 6, 7, -1, 9, 10, - -1, 12, -1, 14, -1, 78, 79, -1, 19, -1, - -1, -1, 23, -1, -1, -1, 27, -1, -1, 16, - 17, 18, 19, 20, -1, 22, 23, 24, -1, -1, - -1, -1, -1, -1, -1, -1, 47, 34, 35, 50, - -1, 52, 53, 54, 55, 56, 57, -1, 59, 60, - 61, -1, 63, 64, 65, -1, 67, 68, -1, 70, - 71, 72, -1, 74, -1, 76, -1, 78, 3, 4, - 5, 6, 7, -1, 9, -1, -1, 12, -1, 14, - -1, 78, 79, -1, 19, -1, -1, -1, 23, -1, - -1, -1, 27, -1, -1, -1, -1, -1, -1, -1, - 3, 4, 5, 6, 7, -1, 9, 10, -1, 12, - -1, 14, 47, -1, -1, -1, 19, -1, -1, 54, - 23, 56, 57, -1, 27, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 72, 73, 74, - -1, 76, -1, 78, 47, -1, 3, 4, 5, 6, - 7, 54, 9, 56, 57, 12, -1, 14, -1, -1, - -1, -1, 19, -1, -1, -1, 23, -1, -1, 72, - 27, 74, -1, 76, -1, 78, -1, -1, 3, 4, - 5, 6, 7, -1, 9, -1, -1, 12, -1, 14, - 47, -1, -1, -1, 19, -1, -1, 54, 23, 56, - 57, -1, 27, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 72, -1, 74, -1, 76, - -1, 78, 47, -1, 3, 4, 5, 6, 7, 54, - 9, 56, 57, 12, -1, 14, -1, -1, -1, -1, - 19, -1, -1, -1, 23, -1, -1, 72, 27, 74, - -1, 76, -1, 78, 3, 4, 5, 6, 7, -1, - 9, -1, -1, 12, -1, 14, -1, -1, 47, -1, - 19, -1, -1, -1, 23, 54, -1, 56, 27, -1, - 3, 4, 5, 6, 7, -1, 9, -1, -1, 12, - -1, 14, -1, 72, -1, 74, 19, 76, 47, 78, - 23, -1, -1, -1, 27, 54, -1, 56, 57, -1, - 3, 4, 5, 6, 7, -1, 9, -1, -1, 12, - -1, 14, -1, 72, 47, -1, 19, 76, -1, 78, - 23, 54, -1, 56, 27, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 72, - -1, -1, -1, 76, 47, 78, -1, -1, -1, -1, - -1, 54, -1, 56, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 8, 72, - -1, -1, -1, 76, -1, 78, 16, 17, 18, 19, - 20, 21, 22, 23, 24, 25, 26, -1, 28, 29, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, -1, 43, 44, 45, 46, -1, -1, 16, - 17, 18, 19, 20, -1, 22, 23, 24, 25, -1, - -1, 28, 29, 30, 31, 32, 33, 34, 35, -1, - -1, -1, 8, -1, 74, -1, -1, -1, 78, 79, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, - 26, -1, 28, 29, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 40, 41, -1, 43, 44, 45, - 46, 78, 79, 16, 17, 18, 19, 20, -1, 22, - 23, 24, -1, -1, -1, 28, 29, 30, 31, 32, - 33, 34, 35, -1, -1, -1, 8, -1, -1, -1, - -1, 77, 78, 79, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 25, 26, -1, 28, 29, 30, 31, + 0, 121, 285, 246, 4, 5, 6, 7, 4, 9, + 10, 11, 12, 13, 52, 4, 100, 73, 4, 72, + 58, 4, 4, 59, 5, 4, 26, 75, 26, 6, + 76, 59, 59, 6, 6, 7, 4, 9, 84, 10, + 40, 77, 6, 15, 44, 45, 46, 47, 11, 77, + 77, 75, 11, 0, 75, 13, 56, 81, 82, 59, + 60, 61, 6, 18, 19, 20, 83, 67, 75, 79, + 70, 71, 72, 73, 74, 82, 53, 49, 77, 83, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + 100, 99, 102, 103, 104, 105, 74, 79, 75, 53, + 77, 111, 76, 76, 75, 6, 7, 76, 9, 77, + 120, 121, 122, 161, 15, 84, 59, 6, 7, 75, + 9, 77, 75, 66, 78, 135, 15, 137, 76, 50, + 140, 141, 63, 6, 65, 50, 146, 147, 148, 50, + 12, 151, 148, 65, 154, 75, 78, 77, 49, 148, + 76, 161, 148, 78, 164, 148, 148, 450, 12, 148, + 49, 310, 256, 312, 78, 78, 260, 77, 10, 50, + 44, 45, 46, 47, 78, 428, 469, 5, 79, 52, + 53, 54, 55, 50, 76, 315, 164, 76, 18, 19, + 20, 21, 22, 67, 10, 84, 76, 207, 120, 72, + 73, 74, 80, 50, 214, 215, 80, 81, 82, 83, + 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, + 94, 95, 96, 97, 98, 13, 76, 80, 12, 78, + 12, 105, 77, 77, 300, 298, 246, 60, 248, 249, + 18, 19, 20, 253, 254, 50, 256, 257, 60, 259, + 260, 78, 40, 50, 76, 6, 7, 267, 9, 76, + 270, 135, 13, 137, 15, 76, 276, 76, 56, 84, + 192, 59, 60, 61, 12, 285, 67, 78, 76, 285, + 10, 13, 78, 205, 332, 13, 285, 76, 298, 285, + 300, 78, 285, 285, 60, 78, 285, 75, 49, 78, + 310, 481, 312, 81, 82, 315, 316, 83, 318, 319, + 83, 270, 100, 414, 102, 417, 326, 327, 69, 473, + 71, 420, 6, 7, 334, 9, 336, 6, 7, 4, + 9, 15, 83, 164, 122, 401, 15, 403, 18, 19, + 20, 21, 22, 120, 24, 25, 6, 7, 384, 9, + 272, 405, 140, 141, 4, 15, 36, 37, 146, 147, + 13, -1, -1, 151, -1, 49, 154, -1, 6, 7, + 49, 9, -1, 161, 384, -1, -1, 15, -1, -1, + -1, -1, 392, 393, -1, 6, 7, 40, 9, 49, + 69, 401, 71, 403, 15, 317, 6, 7, -1, 9, + 10, -1, -1, 56, 83, 15, 59, 60, 61, 419, + 332, 49, 6, 7, -1, 9, -1, 77, 428, 207, + -1, 15, 432, -1, -1, -1, 214, -1, 49, -1, + -1, 69, 442, 71, 442, -1, -1, -1, -1, 49, + 450, -1, -1, -1, 450, 83, -1, 100, 69, 102, + 71, 450, -1, -1, 450, 49, -1, 450, 450, 469, + 248, 450, 83, 469, -1, 253, 254, 389, 256, 122, + 469, 259, 260, 469, -1, 485, 469, 469, 488, -1, + 469, 491, 492, -1, 494, 79, 496, 140, 276, 499, + 500, -1, -1, 146, 147, 417, 61, -1, 151, 6, + 7, -1, 9, -1, 426, -1, -1, -1, 15, 74, + -1, -1, -1, 0, 1, -1, 438, -1, 392, 6, + -1, -1, -1, 445, -1, 12, 3, 4, -1, 6, + 318, -1, -1, -1, -1, 100, -1, 14, 326, 327, + -1, -1, 49, -1, 21, 419, -1, -1, 336, -1, + -1, 473, 29, 475, -1, 120, 478, -1, -1, -1, + -1, 214, -1, -1, 51, 52, 53, 54, 55, 76, + 6, 7, 59, 9, 10, 57, -1, -1, -1, 15, + -1, -1, -1, 148, -1, 72, 73, 74, -1, -1, + -1, 78, -1, -1, -1, 248, 384, -1, 75, 164, + 253, 254, -1, 256, 0, 1, 259, 260, 6, 7, + 6, 9, 10, 49, -1, -1, 12, 15, 492, -1, + 494, -1, -1, 18, 19, 20, 21, 22, 110, -1, + 112, 113, 114, 115, 116, -1, 118, 119, 120, -1, + -1, 36, 37, -1, 432, 6, 7, -1, 9, 10, + 215, 49, -1, -1, 15, 51, 52, 53, 54, 55, + -1, 6, 7, 59, 9, 318, -1, 12, -1, -1, + 15, -1, -1, 326, 327, -1, 72, 73, 74, -1, + 75, 246, -1, -1, -1, -1, 81, 82, 49, 6, + 7, 256, 9, -1, -1, 260, -1, 485, 15, -1, + 488, -1, -1, 491, 49, 270, -1, -1, 496, -1, + -1, 499, 500, -1, -1, -1, 198, -1, -1, -1, + 285, -1, -1, -1, 69, -1, 71, -1, -1, -1, + 75, 384, 49, 215, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, -1, 6, 7, 334, + 9, 6, 7, -1, 9, -1, 15, -1, -1, 432, + 15, -1, -1, -1, 266, -1, -1, -1, 270, 271, + -1, 273, -1, -1, 3, 4, 5, 6, 7, -1, + 9, -1, 11, -1, -1, 14, 1, 16, -1, -1, + 49, 6, 21, -1, 49, -1, 25, 12, 6, 7, + 29, 9, -1, -1, -1, -1, -1, 15, -1, 311, + -1, -1, 485, -1, 69, 488, 71, -1, 491, -1, + 75, -1, -1, 496, -1, -1, 499, 500, 330, 58, + 59, -1, 334, -1, -1, 64, 51, 52, 53, 54, + 55, 49, -1, 428, 59, -1, 75, -1, -1, -1, + 79, -1, 81, 82, -1, -1, -1, 72, 73, 74, + -1, 69, -1, 71, -1, 450, 18, 19, 20, 21, + 22, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 469, 1, -1, 3, 4, 5, + 6, 7, -1, 9, -1, 11, 12, -1, 14, -1, + 16, -1, -1, -1, -1, 21, -1, -1, -1, 25, + -1, -1, 414, 29, -1, -1, -1, -1, -1, -1, + 422, 423, -1, 75, -1, -1, 428, -1, -1, 81, + 82, -1, -1, 435, -1, 437, 52, -1, 54, 55, + 56, 57, 58, 59, 446, 61, 62, 63, 64, 65, + 66, 67, 68, -1, 70, 71, -1, 73, 74, 75, + 462, 77, 78, 79, -1, 81, -1, -1, -1, 471, + 1, -1, 3, 4, 5, 6, 7, -1, 9, 481, + 11, 12, -1, 14, 486, 16, -1, 489, -1, -1, + 21, -1, -1, -1, 25, -1, -1, -1, 29, 18, + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, + -1, 30, 31, 32, 33, 34, 35, 36, 37, -1, + -1, 52, -1, 54, 55, 56, 57, 58, 59, -1, + 61, 62, -1, 64, -1, 66, 67, 68, -1, 70, + 71, -1, 73, 74, 75, -1, 77, 78, 79, 1, + 81, 3, 4, 5, 6, 7, -1, 9, -1, 11, + 12, 80, 14, -1, 16, -1, -1, -1, -1, 21, + -1, -1, -1, 25, -1, -1, -1, 29, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, -1, + 30, 31, 32, 33, 34, 35, 36, 37, -1, -1, + 52, -1, 54, 55, 56, 57, 58, 59, -1, 61, + 62, -1, 64, -1, 66, 67, 68, -1, 70, 71, + -1, 73, 74, 75, -1, 77, -1, 79, -1, 81, + 3, 4, 5, 6, 7, -1, 9, -1, 11, -1, + 80, 14, -1, 16, -1, -1, -1, -1, 21, -1, + -1, -1, 25, -1, -1, -1, 29, 3, 4, 5, + 6, 7, -1, 9, -1, 11, -1, -1, 14, -1, + 16, -1, -1, -1, -1, 21, -1, -1, -1, 25, + -1, -1, -1, 29, -1, 58, 59, -1, -1, -1, + -1, 64, 18, 19, 20, 21, 22, -1, 24, 25, + 26, -1, 75, -1, 77, -1, 79, -1, 81, -1, + 36, 37, 58, 59, -1, -1, -1, -1, 64, 3, + 4, 5, 6, 7, -1, 9, -1, 11, -1, 75, + 14, 77, 16, 79, -1, 81, -1, 21, -1, -1, + -1, 25, -1, -1, -1, 29, 3, 4, 5, 6, + 7, -1, 9, -1, 11, -1, -1, 14, -1, 16, + -1, -1, -1, -1, 21, -1, -1, -1, 25, -1, + -1, -1, 29, -1, 58, 59, -1, -1, -1, -1, + 64, 18, 19, 20, 21, 22, -1, -1, 25, -1, + -1, 75, 76, -1, -1, 79, -1, 81, -1, 36, + 37, 58, 59, -1, -1, -1, -1, 64, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 75, 76, + -1, -1, 79, -1, 81, 3, 4, 5, 6, 7, + -1, 9, -1, 11, -1, -1, 14, -1, 16, -1, + -1, -1, -1, 21, -1, -1, -1, 25, -1, -1, + -1, 29, 3, 4, 5, 6, 7, -1, 9, -1, + 11, -1, -1, 14, -1, 16, -1, -1, -1, -1, + 21, -1, -1, -1, 25, -1, -1, -1, 29, -1, + 58, 59, -1, -1, -1, -1, 64, 18, 19, 20, + 21, 22, -1, -1, -1, -1, -1, 75, -1, -1, + -1, 79, -1, 81, -1, 36, 37, 58, 59, -1, + -1, -1, -1, 64, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 10, 75, -1, -1, -1, 79, -1, + 81, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, -1, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, -1, 45, 46, + 47, 48, -1, -1, -1, -1, 18, 19, 20, 21, + 22, -1, 24, 25, 26, 27, 28, -1, 30, 31, + 32, 33, 34, 35, 36, 37, -1, -1, 75, 10, + 77, -1, 79, -1, 81, 82, -1, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, -1, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 75, 45, 46, 47, 48, -1, 81, + 82, -1, 18, 19, 20, 21, 22, -1, 24, 25, + 26, 27, -1, -1, 30, 31, 32, 33, 34, 35, + 36, 37, -1, -1, 75, 10, 77, -1, 79, -1, + 81, 82, -1, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, -1, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 75, + 45, 46, 47, 48, -1, 81, 82, -1, -1, 18, + 19, 20, 21, 22, -1, 24, 25, 26, -1, -1, + -1, 30, 31, 32, 33, 34, 35, 36, 37, -1, + 75, 76, 10, -1, 79, -1, 81, 82, -1, -1, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, -1, 30, 31, 32, 33, 34, 35, 36, 37, + 38, 39, 40, 41, 42, 43, 75, 45, 46, 47, + 48, -1, 81, 82, -1, 18, 19, 20, 21, 22, + -1, 24, 25, 26, -1, -1, -1, 30, 31, 32, + 33, -1, -1, 36, 37, -1, -1, 75, 10, -1, + 12, 79, 80, 81, 82, -1, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, -1, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - -1, 43, 44, 45, 46, 78, 79, 16, 17, 18, - 19, 20, -1, 22, 23, 16, 17, 18, 19, 20, - -1, -1, -1, -1, -1, 34, 35, -1, -1, -1, - 8, 73, 10, 34, 35, -1, 78, 79, 16, 17, - 18, 19, 20, 21, 22, 23, 24, 25, 26, -1, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, -1, 43, 44, 45, 46, 78, - 79, -1, -1, -1, -1, -1, -1, 78, 79, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 8, -1, -1, -1, -1, -1, - 78, 79, 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, -1, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 40, 41, -1, 43, - 44, 45, 46, -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, 8, 73, - -1, -1, -1, -1, 78, 79, 16, 17, 18, 19, - 20, 21, 22, 23, 24, 25, 26, -1, 28, 29, + 42, 43, 75, 45, 46, 47, 48, -1, 81, 82, + -1, 18, 19, 20, 21, 22, -1, 24, 25, 26, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 36, + 37, -1, -1, 75, 10, -1, 12, 79, -1, 81, + 82, -1, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, -1, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 43, 75, 45, + 46, 47, 48, -1, 81, 82, -1, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, -1, 30, + 31, 32, 33, 34, 35, 36, 37, -1, -1, 75, + 10, -1, -1, 79, -1, 81, 82, -1, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, -1, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, -1, 43, 44, 45, 46, -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, 8, -1, 74, -1, -1, -1, 78, 79, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, - 26, -1, 28, 29, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 40, 41, -1, 43, 44, 45, - 46, -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, 8, 74, 10, - -1, -1, 78, 79, -1, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 25, 26, -1, 28, 29, 30, - 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, - 41, -1, 43, 44, 45, 46, -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, 8, -1, 10, -1, -1, -1, 78, 79, 16, - 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, - -1, 28, 29, 30, 31, 32, 33, 34, 35, 36, - 37, 38, 39, 40, 41, -1, 43, 44, 45, 46, - -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, 8, -1, -1, 11, -1, - -1, 78, 79, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 25, 26, -1, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, -1, - 43, 44, 45, 46, -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, 8, - -1, -1, -1, -1, -1, 78, 79, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 25, 26, -1, 28, - 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 40, 41, -1, 43, 44, 45, 46, -1, 48, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 8, -1, -1, -1, -1, -1, 78, - 79, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, -1, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 41, -1, 43, 44, - 45, 46, -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, 78, 79 + 40, 41, 42, 43, -1, 45, 46, 47, 48, 80, + 50, -1, -1, 18, 19, 20, 21, 22, -1, 24, + 25, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 36, 37, -1, -1, 75, 10, -1, -1, 79, + -1, 81, 82, -1, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, -1, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, + 75, 45, 46, 47, 48, -1, 81, 82, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, -1, + 30, 31, 32, 33, 34, 35, 36, 37, -1, -1, + -1, 75, 10, -1, -1, 79, -1, 81, 82, -1, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, -1, 30, 31, 32, 33, 34, 35, 36, 37, + 38, 39, 40, 41, 42, 43, 76, 45, 46, 47, + 48, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, -1, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 75, 45, 46, + 47, 48, -1, 81, 82, 18, 19, 20, 21, 22, + -1, -1, 25, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 36, 37, -1, -1, -1, 75, -1, + -1, -1, 79, -1, 81, 82, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, -1, 30, 31, + 32, 33, 34, 35, 36, 37, -1, -1, -1, -1, + -1, -1, 75, -1, -1, -1, -1, -1, 81, 82, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, -1, 30, 31, 32, 33, 34, 35, 36, 37, + -1, 13, -1, -1, -1, 77, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, -1, 30, 31, + 32, 33, 34, 35, 36, 37, -1, -1, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 77, + 30, 31, 32, 33, 34, 35, 36, 37, 18, 19, + 20, 21, 22, -1, 24, 25, 26, 27, 28, -1, + 30, 31, 32, 33, 34, 35, 36, 37, 18, 19, + 20, 21, 22, -1, 24, 25, 26, 27, -1, -1, + 30, 31, 32, 33, 34, 35, 36, 37, 18, 19, + 20, 21, 22, -1, 24, 25, 26, -1, -1, -1, + 30, 31, 32, 33, 34, 35, 36, 37, 18, 19, + 20, 21, 22, -1, 24, 25, 26, -1, -1, -1, + 30, 31, 32, 33, -1, -1, 36, 37 }; /* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { - 0, 1, 6, 10, 49, 50, 51, 52, 53, 68, - 69, 70, 71, 83, 84, 86, 104, 123, 124, 125, - 129, 132, 136, 137, 140, 142, 143, 144, 84, 86, - 104, 125, 129, 132, 136, 137, 140, 83, 83, 83, - 5, 57, 141, 83, 83, 83, 7, 13, 66, 68, - 72, 76, 83, 120, 121, 122, 10, 10, 8, 10, - 143, 0, 10, 10, 10, 72, 74, 72, 74, 74, - 122, 3, 4, 5, 7, 9, 12, 14, 19, 23, - 27, 47, 54, 56, 72, 76, 78, 83, 85, 87, - 88, 89, 94, 95, 96, 126, 72, 120, 11, 74, - 72, 120, 122, 96, 8, 122, 8, 122, 73, 81, - 83, 92, 93, 122, 123, 77, 96, 72, 80, 74, - 102, 57, 74, 96, 108, 109, 111, 83, 130, 131, - 83, 123, 127, 128, 131, 128, 75, 83, 123, 129, - 133, 134, 96, 83, 96, 96, 96, 96, 96, 72, - 72, 83, 96, 123, 124, 83, 103, 122, 72, 80, - 8, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 40, 41, 43, 44, 45, 46, - 74, 78, 79, 93, 122, 83, 138, 139, 73, 103, - 109, 109, 122, 66, 68, 48, 9, 73, 81, 48, - 122, 77, 122, 135, 122, 1, 10, 55, 57, 59, - 60, 61, 63, 64, 65, 67, 68, 75, 83, 84, - 86, 96, 97, 98, 99, 100, 101, 102, 104, 112, - 113, 116, 119, 132, 136, 137, 140, 72, 96, 110, - 79, 106, 107, 109, 78, 122, 48, 73, 10, 75, - 73, 75, 10, 120, 10, 134, 75, 96, 5, 73, - 73, 48, 77, 23, 73, 83, 90, 91, 109, 123, - 122, 96, 108, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 143, 122, 83, 74, 8, 48, 75, 102, - 9, 73, 73, 93, 83, 73, 122, 93, 122, 48, - 73, 83, 110, 10, 10, 96, 90, 96, 102, 10, - 109, 57, 63, 117, 118, 11, 10, 10, 10, 10, - 101, 75, 10, 111, 102, 83, 48, 75, 122, 131, - 74, 128, 74, 10, 73, 73, 103, 120, 123, 48, - 73, 75, 139, 96, 139, 83, 102, 81, 73, 135, - 102, 74, 10, 102, 64, 10, 96, 83, 73, 58, - 8, 107, 128, 128, 102, 91, 58, 75, 73, 122, - 58, 62, 114, 115, 96, 96, 102, 11, 102, 111, - 109, 75, 75, 74, 141, 102, 73, 102, 112, 96, - 115, 75, 10, 10, 58, 96, 105, 143, 11, 96, - 102, 118, 48, 102, 75, 101, 102, 105 + 0, 1, 6, 12, 51, 52, 53, 54, 55, 59, + 72, 73, 74, 86, 90, 111, 129, 133, 136, 140, + 141, 144, 145, 146, 147, 148, 149, 150, 151, 90, + 111, 129, 133, 136, 140, 141, 144, 148, 86, 86, + 86, 5, 3, 4, 14, 21, 29, 75, 86, 99, + 100, 101, 86, 86, 86, 7, 9, 15, 49, 69, + 71, 75, 86, 87, 124, 125, 126, 10, 150, 0, + 75, 77, 75, 77, 77, 126, 101, 101, 101, 101, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 30, 31, 32, 33, 34, 35, 36, 37, 77, + 75, 124, 13, 77, 75, 79, 126, 3, 4, 5, + 9, 11, 14, 16, 21, 25, 29, 58, 59, 64, + 75, 79, 81, 86, 87, 89, 91, 92, 93, 102, + 115, 116, 120, 130, 124, 10, 126, 10, 126, 76, + 84, 86, 96, 97, 126, 127, 83, 79, 77, 109, + 101, 86, 134, 135, 86, 127, 131, 132, 135, 132, + 78, 86, 127, 133, 137, 138, 76, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 150, 97, 126, 86, + 142, 143, 76, 86, 110, 101, 102, 86, 77, 102, + 102, 102, 102, 102, 75, 102, 102, 86, 102, 109, + 127, 128, 110, 126, 83, 75, 10, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 42, 43, 45, 46, 47, 48, 75, 79, 81, 82, + 101, 101, 126, 69, 71, 126, 50, 11, 76, 84, + 50, 126, 126, 139, 1, 12, 56, 57, 61, 62, + 66, 67, 68, 70, 71, 78, 86, 88, 90, 98, + 102, 103, 104, 105, 106, 107, 108, 109, 111, 117, + 123, 127, 128, 136, 140, 141, 144, 126, 50, 76, + 12, 78, 76, 78, 12, 124, 12, 138, 78, 78, + 77, 10, 50, 78, 109, 50, 11, 76, 80, 82, + 102, 113, 114, 5, 109, 77, 69, 71, 76, 76, + 10, 76, 80, 126, 25, 76, 86, 94, 95, 102, + 127, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 76, 95, 102, 126, 86, 76, 126, 126, 97, + 86, 76, 126, 97, 50, 80, 102, 86, 94, 102, + 109, 102, 59, 66, 121, 122, 13, 12, 108, 78, + 135, 77, 132, 77, 12, 60, 143, 102, 143, 110, + 86, 109, 126, 86, 50, 78, 76, 60, 63, 65, + 118, 119, 10, 10, 102, 109, 124, 127, 50, 76, + 76, 80, 84, 76, 139, 12, 109, 67, 101, 86, + 132, 132, 77, 145, 78, 76, 10, 114, 109, 116, + 13, 101, 119, 78, 102, 102, 109, 95, 126, 102, + 102, 109, 13, 78, 78, 150, 109, 102, 108, 13, + 76, 12, 12, 60, 102, 112, 78, 108, 102, 109, + 122, 50, 109, 109, 112, 9, 15, 86, 9, 15, + 86, 83, 79, 102, 79, 102, 83, 101, 101, 80, + 80 }; /* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */ static const yytype_uint8 yyr1[] = { - 0, 82, 83, 84, 84, 85, 86, 87, 87, 88, - 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, - 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, - 88, 88, 88, 88, 88, 88, 88, 88, 89, 89, - 89, 89, 89, 90, 90, 90, 91, 91, 92, 93, - 93, 93, 93, 94, 94, 95, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 97, 98, 99, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 101, 101, 102, 102, 103, 103, 104, 104, - 104, 105, 105, 106, 106, 107, 107, 108, 109, 109, - 109, 109, 110, 110, 111, 111, 112, 112, 112, 113, - 114, 115, 115, 116, 117, 118, 118, 118, 119, 119, - 120, 120, 120, 120, 120, 121, 121, 122, 122, 122, - 122, 122, 122, 122, 122, 123, 123, 123, 124, 124, - 124, 125, 125, 126, 127, 128, 128, 129, 129, 130, - 131, 131, 132, 132, 133, 133, 133, 133, 134, 134, - 135, 135, 136, 137, 137, 138, 138, 139, 139, 139, - 140, 140, 141, 141, 141, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 143, 143, 144, 144 + 0, 85, 86, 87, 88, 88, 89, 90, 91, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 93, 93, + 93, 93, 93, 94, 94, 94, 95, 95, 96, 97, + 97, 97, 97, 98, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 100, 100, 100, 101, 101, 101, 101, + 101, 101, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 103, 104, + 105, 106, 106, 106, 106, 106, 106, 106, 106, 106, + 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, + 106, 106, 106, 107, 108, 108, 108, 109, 109, 110, + 110, 111, 111, 111, 112, 112, 113, 113, 114, 114, + 115, 116, 116, 116, 117, 118, 118, 119, 119, 120, + 121, 122, 122, 122, 123, 123, 124, 124, 124, 124, + 124, 125, 125, 126, 126, 126, 126, 126, 126, 126, + 127, 127, 127, 128, 128, 128, 129, 129, 130, 130, + 131, 132, 132, 133, 133, 134, 135, 135, 136, 136, + 137, 137, 137, 137, 138, 138, 139, 139, 140, 141, + 141, 142, 142, 143, 143, 143, 144, 144, 145, 145, + 145, 146, 146, 146, 147, 147, 147, 148, 148, 149, + 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 150, 150, 151, 151 }; /* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. */ static const yytype_int8 yyr2[] = { - 0, 2, 1, 1, 1, 4, 2, 3, 3, 3, + 0, 2, 1, 1, 1, 1, 4, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 1, 1, 3, 1, 1, 3, - 3, 1, 1, 4, 3, 4, 1, 3, 2, 1, - 1, 1, 1, 3, 1, 1, 1, 1, 1, 3, - 2, 3, 3, 2, 1, 1, 3, 5, 2, 2, - 3, 2, 2, 2, 2, 2, 1, 2, 2, 1, - 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, - 1, 1, 2, 1, 3, 2, 3, 1, 6, 8, - 5, 3, 1, 1, 4, 3, 1, 3, 1, 1, - 1, 3, 1, 3, 5, 5, 3, 5, 5, 7, - 4, 2, 1, 5, 5, 3, 5, 5, 2, 2, - 5, 3, 4, 4, 2, 1, 7, 1, 2, 4, - 2, 3, 4, 2, 3, 3, 3, 2, 3, 4, - 4, 3, 3, 5, 1, 3, 2, 5, 8, 2, - 3, 1, 5, 8, 2, 3, 2, 1, 2, 1, - 3, 1, 3, 5, 4, 1, 3, 3, 2, 1, - 7, 5, 5, 9, 7, 1, 1, 1, 1, 1, - 1, 2, 2, 2, 1, 2, 2, 2, 2, 2, - 3, 3, 2, 2, 3, 1, 1, 2, 1, 0 + 3, 1, 1, 2, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 2, 2, 2, 3, 1, 1, 1, + 1, 1, 1, 3, 2, 1, 1, 1, 3, 1, + 4, 3, 4, 4, 3, 1, 1, 3, 2, 3, + 3, 2, 1, 1, 1, 1, 1, 3, 3, 5, + 2, 1, 2, 1, 1, 1, 1, 1, 1, 2, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 1, 1, 3, 2, 3, + 1, 6, 8, 5, 3, 1, 1, 4, 3, 1, + 4, 3, 5, 5, 7, 4, 3, 2, 1, 5, + 5, 3, 5, 5, 2, 2, 5, 3, 4, 4, + 2, 1, 7, 1, 2, 4, 2, 5, 2, 3, + 3, 3, 2, 3, 4, 4, 3, 3, 5, 4, + 1, 3, 2, 5, 8, 2, 3, 1, 5, 8, + 2, 3, 2, 1, 2, 1, 3, 1, 3, 5, + 4, 1, 3, 3, 2, 1, 7, 5, 5, 9, + 7, 3, 3, 2, 3, 4, 4, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, + 1, 2, 1, 0 }; @@ -1945,393 +2025,423 @@ yydestruct (const char *yymsg, switch (yykind) { case YYSYMBOL_INT: /* INT */ -#line 149 "src/parser.y" +#line 159 "src/parser.y" {} -#line 1951 "gen/gen_parser.c" +#line 2031 "gen/gen_parser.c" break; case YYSYMBOL_FLOAT: /* FLOAT */ -#line 149 "src/parser.y" +#line 159 "src/parser.y" {} -#line 1957 "gen/gen_parser.c" +#line 2037 "gen/gen_parser.c" break; case YYSYMBOL_STRING: /* STRING */ -#line 149 "src/parser.y" +#line 159 "src/parser.y" {} -#line 1963 "gen/gen_parser.c" +#line 2043 "gen/gen_parser.c" break; case YYSYMBOL_ID: /* ID */ -#line 149 "src/parser.y" +#line 159 "src/parser.y" + {} +#line 2049 "gen/gen_parser.c" + break; + + case YYSYMBOL_APPLY: /* APPLY */ +#line 159 "src/parser.y" {} -#line 1969 "gen/gen_parser.c" +#line 2055 "gen/gen_parser.c" break; case YYSYMBOL_id: /* id */ -#line 150 "src/parser.y" +#line 160 "src/parser.y" + { destroy_ast_tree(((*yyvaluep).node)); } +#line 2061 "gen/gen_parser.c" + break; + + case YYSYMBOL_apply: /* apply */ +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 1975 "gen/gen_parser.c" +#line 2067 "gen/gen_parser.c" break; case YYSYMBOL_var: /* var */ -#line 150 "src/parser.y" +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 1981 "gen/gen_parser.c" +#line 2073 "gen/gen_parser.c" break; case YYSYMBOL_embed: /* embed */ -#line 150 "src/parser.y" +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 1987 "gen/gen_parser.c" +#line 2079 "gen/gen_parser.c" break; case YYSYMBOL_import: /* import */ -#line 150 "src/parser.y" +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 1993 "gen/gen_parser.c" +#line 2085 "gen/gen_parser.c" break; case YYSYMBOL_assign: /* assign */ -#line 150 "src/parser.y" +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 1999 "gen/gen_parser.c" +#line 2091 "gen/gen_parser.c" break; - case YYSYMBOL_binary_op: /* binary_op */ -#line 150 "src/parser.y" + case YYSYMBOL_binop: /* binop */ +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2005 "gen/gen_parser.c" +#line 2097 "gen/gen_parser.c" break; - case YYSYMBOL_unary_op: /* unary_op */ -#line 150 "src/parser.y" + case YYSYMBOL_unop: /* unop */ +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2011 "gen/gen_parser.c" +#line 2103 "gen/gen_parser.c" break; case YYSYMBOL_arg: /* arg */ -#line 150 "src/parser.y" +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2017 "gen/gen_parser.c" +#line 2109 "gen/gen_parser.c" break; - case YYSYMBOL_arg_list: /* arg_list */ -#line 150 "src/parser.y" + case YYSYMBOL_args: /* args */ +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2023 "gen/gen_parser.c" +#line 2115 "gen/gen_parser.c" break; case YYSYMBOL_param_decl: /* param_decl */ -#line 150 "src/parser.y" +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2029 "gen/gen_parser.c" +#line 2121 "gen/gen_parser.c" break; - case YYSYMBOL_decl_list: /* decl_list */ -#line 150 "src/parser.y" + case YYSYMBOL_decls: /* decls */ +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2035 "gen/gen_parser.c" +#line 2127 "gen/gen_parser.c" break; - case YYSYMBOL_call: /* call */ -#line 150 "src/parser.y" + case YYSYMBOL_defer: /* defer */ +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2041 "gen/gen_parser.c" +#line 2133 "gen/gen_parser.c" break; - case YYSYMBOL_defer: /* defer */ -#line 150 "src/parser.y" + case YYSYMBOL_const_binop: /* const_binop */ +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2047 "gen/gen_parser.c" +#line 2139 "gen/gen_parser.c" break; - case YYSYMBOL_expr: /* expr */ -#line 150 "src/parser.y" + case YYSYMBOL_const_unop: /* const_unop */ +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2053 "gen/gen_parser.c" +#line 2145 "gen/gen_parser.c" break; - case YYSYMBOL_while: /* while */ -#line 150 "src/parser.y" + case YYSYMBOL_const_expr: /* const_expr */ +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2059 "gen/gen_parser.c" +#line 2151 "gen/gen_parser.c" break; - case YYSYMBOL_do_while: /* do_while */ -#line 150 "src/parser.y" + case YYSYMBOL_expr: /* expr */ +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2065 "gen/gen_parser.c" +#line 2157 "gen/gen_parser.c" break; - case YYSYMBOL_goto: /* goto */ -#line 150 "src/parser.y" + case YYSYMBOL_while: /* while */ +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2071 "gen/gen_parser.c" +#line 2163 "gen/gen_parser.c" break; - case YYSYMBOL_statement: /* statement */ -#line 150 "src/parser.y" + case YYSYMBOL_do_while: /* do_while */ +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2077 "gen/gen_parser.c" +#line 2169 "gen/gen_parser.c" break; - case YYSYMBOL_statement_list: /* statement_list */ -#line 150 "src/parser.y" + case YYSYMBOL_goto: /* goto */ +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2083 "gen/gen_parser.c" +#line 2175 "gen/gen_parser.c" break; - case YYSYMBOL_body: /* body */ -#line 150 "src/parser.y" + case YYSYMBOL_statelet: /* statelet */ +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2089 "gen/gen_parser.c" +#line 2181 "gen/gen_parser.c" break; - case YYSYMBOL_macro_list: /* macro_list */ -#line 150 "src/parser.y" + case YYSYMBOL_statement: /* statement */ +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2095 "gen/gen_parser.c" +#line 2187 "gen/gen_parser.c" break; - case YYSYMBOL_macro: /* macro */ -#line 150 "src/parser.y" + case YYSYMBOL_statements: /* statements */ +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2101 "gen/gen_parser.c" +#line 2193 "gen/gen_parser.c" break; - case YYSYMBOL_expr_list: /* expr_list */ -#line 150 "src/parser.y" + case YYSYMBOL_body: /* body */ +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2107 "gen/gen_parser.c" +#line 2199 "gen/gen_parser.c" break; - case YYSYMBOL_struct_init: /* struct_init */ -#line 150 "src/parser.y" + case YYSYMBOL_references: /* references */ +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2113 "gen/gen_parser.c" +#line 2205 "gen/gen_parser.c" break; - case YYSYMBOL_struct_inits: /* struct_inits */ -#line 150 "src/parser.y" + case YYSYMBOL_macro: /* macro */ +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2119 "gen/gen_parser.c" +#line 2211 "gen/gen_parser.c" break; - case YYSYMBOL_struct_construct: /* struct_construct */ -#line 150 "src/parser.y" + case YYSYMBOL_exprs: /* exprs */ +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2125 "gen/gen_parser.c" +#line 2217 "gen/gen_parser.c" break; - case YYSYMBOL_init_expr: /* init_expr */ -#line 150 "src/parser.y" + case YYSYMBOL_construct_arg: /* construct_arg */ +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2131 "gen/gen_parser.c" +#line 2223 "gen/gen_parser.c" break; - case YYSYMBOL_cond: /* cond */ -#line 150 "src/parser.y" + case YYSYMBOL_construct_args: /* construct_args */ +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2137 "gen/gen_parser.c" +#line 2229 "gen/gen_parser.c" break; - case YYSYMBOL_expr_if: /* expr_if */ -#line 150 "src/parser.y" + case YYSYMBOL_construct: /* construct */ +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2143 "gen/gen_parser.c" +#line 2235 "gen/gen_parser.c" break; case YYSYMBOL_if: /* if */ -#line 150 "src/parser.y" +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2149 "gen/gen_parser.c" +#line 2241 "gen/gen_parser.c" break; case YYSYMBOL_for: /* for */ -#line 150 "src/parser.y" +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2155 "gen/gen_parser.c" +#line 2247 "gen/gen_parser.c" break; case YYSYMBOL_case: /* case */ -#line 150 "src/parser.y" +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2161 "gen/gen_parser.c" +#line 2253 "gen/gen_parser.c" break; - case YYSYMBOL_case_list: /* case_list */ -#line 150 "src/parser.y" + case YYSYMBOL_cases: /* cases */ +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2167 "gen/gen_parser.c" +#line 2259 "gen/gen_parser.c" break; case YYSYMBOL_switch: /* switch */ -#line 150 "src/parser.y" +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2173 "gen/gen_parser.c" +#line 2265 "gen/gen_parser.c" break; case YYSYMBOL_const_for: /* const_for */ -#line 150 "src/parser.y" +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2179 "gen/gen_parser.c" +#line 2271 "gen/gen_parser.c" break; case YYSYMBOL_const_if: /* const_if */ -#line 150 "src/parser.y" +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2185 "gen/gen_parser.c" +#line 2277 "gen/gen_parser.c" break; case YYSYMBOL_const: /* const */ -#line 150 "src/parser.y" +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2191 "gen/gen_parser.c" +#line 2283 "gen/gen_parser.c" break; - case YYSYMBOL_func_sign: /* func_sign */ -#line 150 "src/parser.y" + case YYSYMBOL_simple_sign: /* simple_sign */ +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2197 "gen/gen_parser.c" +#line 2289 "gen/gen_parser.c" break; - case YYSYMBOL_variadic_sign: /* variadic_sign */ -#line 150 "src/parser.y" + case YYSYMBOL_func_sign: /* func_sign */ +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2203 "gen/gen_parser.c" +#line 2295 "gen/gen_parser.c" break; case YYSYMBOL_type: /* type */ -#line 150 "src/parser.y" +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2209 "gen/gen_parser.c" +#line 2301 "gen/gen_parser.c" break; case YYSYMBOL_var_decl: /* var_decl */ -#line 150 "src/parser.y" +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2215 "gen/gen_parser.c" +#line 2307 "gen/gen_parser.c" break; case YYSYMBOL_var_init: /* var_init */ -#line 150 "src/parser.y" +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2221 "gen/gen_parser.c" +#line 2313 "gen/gen_parser.c" break; case YYSYMBOL_proc: /* proc */ -#line 150 "src/parser.y" +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2227 "gen/gen_parser.c" +#line 2319 "gen/gen_parser.c" break; case YYSYMBOL_lambda: /* lambda */ -#line 150 "src/parser.y" +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2233 "gen/gen_parser.c" +#line 2325 "gen/gen_parser.c" break; case YYSYMBOL_struct_elem: /* struct_elem */ -#line 150 "src/parser.y" +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2239 "gen/gen_parser.c" +#line 2331 "gen/gen_parser.c" break; - case YYSYMBOL_struct_list: /* struct_list */ -#line 150 "src/parser.y" + case YYSYMBOL_members: /* members */ +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2245 "gen/gen_parser.c" +#line 2337 "gen/gen_parser.c" break; case YYSYMBOL_union: /* union */ -#line 150 "src/parser.y" +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2251 "gen/gen_parser.c" +#line 2343 "gen/gen_parser.c" break; case YYSYMBOL_generic: /* generic */ -#line 150 "src/parser.y" +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2257 "gen/gen_parser.c" +#line 2349 "gen/gen_parser.c" break; - case YYSYMBOL_generic_list: /* generic_list */ -#line 150 "src/parser.y" + case YYSYMBOL_generics: /* generics */ +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2263 "gen/gen_parser.c" +#line 2355 "gen/gen_parser.c" break; case YYSYMBOL_struct: /* struct */ -#line 150 "src/parser.y" +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2269 "gen/gen_parser.c" +#line 2361 "gen/gen_parser.c" break; case YYSYMBOL_template_elem: /* template_elem */ -#line 150 "src/parser.y" +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2275 "gen/gen_parser.c" +#line 2367 "gen/gen_parser.c" break; - case YYSYMBOL_template_list: /* template_list */ -#line 150 "src/parser.y" + case YYSYMBOL_template_elems: /* template_elems */ +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2281 "gen/gen_parser.c" +#line 2373 "gen/gen_parser.c" break; - case YYSYMBOL_type_list: /* type_list */ -#line 150 "src/parser.y" + case YYSYMBOL_types: /* types */ +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2287 "gen/gen_parser.c" +#line 2379 "gen/gen_parser.c" break; - case YYSYMBOL_type_alias: /* type_alias */ -#line 150 "src/parser.y" + case YYSYMBOL_alias: /* alias */ +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2293 "gen/gen_parser.c" +#line 2385 "gen/gen_parser.c" break; - case YYSYMBOL_type_template: /* type_template */ -#line 150 "src/parser.y" + case YYSYMBOL_template: /* template */ +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2299 "gen/gen_parser.c" +#line 2391 "gen/gen_parser.c" break; case YYSYMBOL_enum_val: /* enum_val */ -#line 150 "src/parser.y" +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2305 "gen/gen_parser.c" +#line 2397 "gen/gen_parser.c" break; - case YYSYMBOL_enum_list: /* enum_list */ -#line 150 "src/parser.y" + case YYSYMBOL_enums: /* enums */ +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2311 "gen/gen_parser.c" +#line 2403 "gen/gen_parser.c" break; case YYSYMBOL_enum: /* enum */ -#line 150 "src/parser.y" +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2317 "gen/gen_parser.c" +#line 2409 "gen/gen_parser.c" break; case YYSYMBOL_top_if: /* top_if */ -#line 150 "src/parser.y" +#line 160 "src/parser.y" + { destroy_ast_tree(((*yyvaluep).node)); } +#line 2415 "gen/gen_parser.c" + break; + + case YYSYMBOL_top_var_decl: /* top_var_decl */ +#line 160 "src/parser.y" + { destroy_ast_tree(((*yyvaluep).node)); } +#line 2421 "gen/gen_parser.c" + break; + + case YYSYMBOL_top_var_init: /* top_var_init */ +#line 160 "src/parser.y" + { destroy_ast_tree(((*yyvaluep).node)); } +#line 2427 "gen/gen_parser.c" + break; + + case YYSYMBOL_top_var: /* top_var */ +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2323 "gen/gen_parser.c" +#line 2433 "gen/gen_parser.c" break; case YYSYMBOL_top: /* top */ -#line 150 "src/parser.y" +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2329 "gen/gen_parser.c" +#line 2439 "gen/gen_parser.c" break; case YYSYMBOL_unit: /* unit */ -#line 150 "src/parser.y" +#line 160 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2335 "gen/gen_parser.c" +#line 2445 "gen/gen_parser.c" break; default: @@ -2635,615 +2745,803 @@ yyreduce: switch (yyn) { case 2: /* id: ID */ -#line 154 "src/parser.y" - { +#line 165 "src/parser.y" + { (yyval.node) = gen_id(strdup((yyvsp[0].str))); (yyval.node)->loc = to_src_loc(&yylloc); } -#line 2644 "gen/gen_parser.c" +#line 2754 "gen/gen_parser.c" break; - case 3: /* var: var_decl */ -#line 160 "src/parser.y" - { (yyval.node) = (yyvsp[0].node); } -#line 2650 "gen/gen_parser.c" + case 3: /* apply: APPLY */ +#line 171 "src/parser.y" + { + (yyval.node) = gen_id(strdup((yyvsp[0].str))); + (yyval.node)->loc = to_src_loc(&yylloc); + } +#line 2763 "gen/gen_parser.c" break; - case 4: /* var: var_init */ -#line 161 "src/parser.y" + case 4: /* var: var_decl */ +#line 177 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 2656 "gen/gen_parser.c" +#line 2769 "gen/gen_parser.c" break; - case 5: /* embed: "embed" "(" STRING ")" */ -#line 164 "src/parser.y" - { (yyval.node) = gen_embed(clone_string((yyvsp[-1].str))); } -#line 2662 "gen/gen_parser.c" + case 5: /* var: var_init */ +#line 178 "src/parser.y" + { (yyval.node) = (yyvsp[0].node); } +#line 2775 "gen/gen_parser.c" break; - case 6: /* import: "import" STRING */ -#line 167 "src/parser.y" - { (yyval.node) = gen_import(clone_string((yyvsp[0].str))); } -#line 2668 "gen/gen_parser.c" + case 6: /* embed: "embed" "(" STRING ")" */ +#line 181 "src/parser.y" + { (yyval.node) = gen_embed(clone_string((yyvsp[-1].str))); } +#line 2781 "gen/gen_parser.c" break; - case 7: /* assign: expr "=" expr */ -#line 170 "src/parser.y" - { (yyval.node) = gen_assign((yyvsp[-2].node), (yyvsp[0].node)); } -#line 2674 "gen/gen_parser.c" + case 7: /* import: "import" STRING */ +#line 184 "src/parser.y" + { (yyval.node) = gen_import(clone_string((yyvsp[0].str))); } +#line 2787 "gen/gen_parser.c" break; - case 8: /* assign: expr "=" struct_construct */ -#line 171 "src/parser.y" - { (yyval.node) = gen_assign((yyvsp[-2].node), (yyvsp[0].node)); } -#line 2680 "gen/gen_parser.c" + case 8: /* assign: expr "=" expr */ +#line 187 "src/parser.y" + { (yyval.node) = gen_assign((yyvsp[-2].node), (yyvsp[0].node)); } +#line 2793 "gen/gen_parser.c" break; - case 9: /* binary_op: expr "+" expr */ -#line 174 "src/parser.y" - { (yyval.node) = gen_binop(AST_ADD, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2686 "gen/gen_parser.c" + case 9: /* binop: expr "+" expr */ +#line 190 "src/parser.y" + { (yyval.node) = gen_binop(AST_ADD, (yyvsp[-2].node), (yyvsp[0].node)); } +#line 2799 "gen/gen_parser.c" break; - case 10: /* binary_op: expr "-" expr */ -#line 175 "src/parser.y" + case 10: /* binop: expr "-" expr */ +#line 191 "src/parser.y" { (yyval.node) = gen_binop(AST_SUB, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2692 "gen/gen_parser.c" +#line 2805 "gen/gen_parser.c" break; - case 11: /* binary_op: expr "*" expr */ -#line 176 "src/parser.y" + case 11: /* binop: expr "*" expr */ +#line 192 "src/parser.y" { (yyval.node) = gen_binop(AST_MUL, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2698 "gen/gen_parser.c" +#line 2811 "gen/gen_parser.c" break; - case 12: /* binary_op: expr "/" expr */ -#line 177 "src/parser.y" + case 12: /* binop: expr "/" expr */ +#line 193 "src/parser.y" { (yyval.node) = gen_binop(AST_DIV, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2704 "gen/gen_parser.c" +#line 2817 "gen/gen_parser.c" break; - case 13: /* binary_op: expr "%" expr */ -#line 178 "src/parser.y" + case 13: /* binop: expr "%" expr */ +#line 194 "src/parser.y" { (yyval.node) = gen_binop(AST_REM, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2710 "gen/gen_parser.c" +#line 2823 "gen/gen_parser.c" break; - case 14: /* binary_op: expr "^" expr */ -#line 179 "src/parser.y" + case 14: /* binop: expr "^" expr */ +#line 195 "src/parser.y" { (yyval.node) = gen_binop(AST_XOR, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2716 "gen/gen_parser.c" +#line 2829 "gen/gen_parser.c" break; - case 15: /* binary_op: expr "^^" expr */ -#line 180 "src/parser.y" + case 15: /* binop: expr "^^" expr */ +#line 196 "src/parser.y" { (yyval.node) = gen_binop(AST_POW, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2722 "gen/gen_parser.c" +#line 2835 "gen/gen_parser.c" break; - case 16: /* binary_op: expr "&" expr */ -#line 181 "src/parser.y" + case 16: /* binop: expr "&" expr */ +#line 197 "src/parser.y" { (yyval.node) = gen_binop(AST_AND, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2728 "gen/gen_parser.c" +#line 2841 "gen/gen_parser.c" break; - case 17: /* binary_op: expr "&&" expr */ -#line 182 "src/parser.y" + case 17: /* binop: expr "&&" expr */ +#line 198 "src/parser.y" { (yyval.node) = gen_binop(AST_LAND, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2734 "gen/gen_parser.c" +#line 2847 "gen/gen_parser.c" break; - case 18: /* binary_op: expr "|" expr */ -#line 183 "src/parser.y" + case 18: /* binop: expr "|" expr */ +#line 199 "src/parser.y" { (yyval.node) = gen_binop(AST_OR, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2740 "gen/gen_parser.c" +#line 2853 "gen/gen_parser.c" break; - case 19: /* binary_op: expr "||" expr */ -#line 184 "src/parser.y" + case 19: /* binop: expr "||" expr */ +#line 200 "src/parser.y" { (yyval.node) = gen_binop(AST_LOR, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2746 "gen/gen_parser.c" +#line 2859 "gen/gen_parser.c" break; - case 20: /* binary_op: expr "<<" expr */ -#line 185 "src/parser.y" + case 20: /* binop: expr "<<" expr */ +#line 201 "src/parser.y" { (yyval.node) = gen_binop(AST_LSHIFT, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2752 "gen/gen_parser.c" +#line 2865 "gen/gen_parser.c" break; - case 21: /* binary_op: expr ">>" expr */ -#line 186 "src/parser.y" + case 21: /* binop: expr ">>" expr */ +#line 202 "src/parser.y" { (yyval.node) = gen_binop(AST_RSHIFT, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2758 "gen/gen_parser.c" +#line 2871 "gen/gen_parser.c" break; - case 22: /* binary_op: expr "+=" expr */ -#line 187 "src/parser.y" + case 22: /* binop: expr "+=" expr */ +#line 203 "src/parser.y" { (yyval.node) = gen_binop(AST_ASSIGN_ADD, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2764 "gen/gen_parser.c" +#line 2877 "gen/gen_parser.c" break; - case 23: /* binary_op: expr "-=" expr */ -#line 188 "src/parser.y" + case 23: /* binop: expr "-=" expr */ +#line 204 "src/parser.y" { (yyval.node) = gen_binop(AST_ASSIGN_SUB, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2770 "gen/gen_parser.c" +#line 2883 "gen/gen_parser.c" break; - case 24: /* binary_op: expr "*=" expr */ -#line 189 "src/parser.y" + case 24: /* binop: expr "*=" expr */ +#line 205 "src/parser.y" { (yyval.node) = gen_binop(AST_ASSIGN_MUL, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2776 "gen/gen_parser.c" +#line 2889 "gen/gen_parser.c" break; - case 25: /* binary_op: expr "/=" expr */ -#line 190 "src/parser.y" + case 25: /* binop: expr "/=" expr */ +#line 206 "src/parser.y" { (yyval.node) = gen_binop(AST_ASSIGN_DIV, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2782 "gen/gen_parser.c" +#line 2895 "gen/gen_parser.c" break; - case 26: /* binary_op: expr "%=" expr */ -#line 191 "src/parser.y" + case 26: /* binop: expr "%=" expr */ +#line 207 "src/parser.y" { (yyval.node) = gen_binop(AST_ASSIGN_REM, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2788 "gen/gen_parser.c" +#line 2901 "gen/gen_parser.c" break; - case 27: /* binary_op: expr "&=" expr */ -#line 192 "src/parser.y" + case 27: /* binop: expr "&=" expr */ +#line 208 "src/parser.y" { (yyval.node) = gen_binop(AST_ASSIGN_AND, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2794 "gen/gen_parser.c" +#line 2907 "gen/gen_parser.c" break; - case 28: /* binary_op: expr "|=" expr */ -#line 193 "src/parser.y" + case 28: /* binop: expr "|=" expr */ +#line 209 "src/parser.y" { (yyval.node) = gen_binop(AST_ASSIGN_OR, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2800 "gen/gen_parser.c" +#line 2913 "gen/gen_parser.c" break; - case 29: /* binary_op: expr "^=" expr */ -#line 194 "src/parser.y" + case 29: /* binop: expr "^=" expr */ +#line 210 "src/parser.y" { (yyval.node) = gen_binop(AST_ASSIGN_XOR, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2806 "gen/gen_parser.c" +#line 2919 "gen/gen_parser.c" break; - case 30: /* binary_op: expr "<<=" expr */ -#line 195 "src/parser.y" + case 30: /* binop: expr "<<=" expr */ +#line 211 "src/parser.y" { (yyval.node) = gen_binop(AST_ASSIGN_LSHIFT, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2814 "gen/gen_parser.c" +#line 2927 "gen/gen_parser.c" break; - case 31: /* binary_op: expr ">>=" expr */ -#line 198 "src/parser.y" + case 31: /* binop: expr ">>=" expr */ +#line 214 "src/parser.y" { (yyval.node) = gen_binop(AST_ASSIGN_RSHIFT, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2822 "gen/gen_parser.c" +#line 2935 "gen/gen_parser.c" break; - case 32: /* binary_op: expr "<" expr */ -#line 201 "src/parser.y" + case 32: /* binop: expr "<" expr */ +#line 217 "src/parser.y" { (yyval.node) = gen_binop(AST_LT, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2828 "gen/gen_parser.c" +#line 2941 "gen/gen_parser.c" break; - case 33: /* binary_op: expr ">" expr */ -#line 202 "src/parser.y" + case 33: /* binop: expr ">" expr */ +#line 218 "src/parser.y" { (yyval.node) = gen_binop(AST_GT, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2834 "gen/gen_parser.c" +#line 2947 "gen/gen_parser.c" break; - case 34: /* binary_op: expr "<=" expr */ -#line 203 "src/parser.y" + case 34: /* binop: expr "<=" expr */ +#line 219 "src/parser.y" { (yyval.node) = gen_binop(AST_LE, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2840 "gen/gen_parser.c" +#line 2953 "gen/gen_parser.c" break; - case 35: /* binary_op: expr ">=" expr */ -#line 204 "src/parser.y" + case 35: /* binop: expr ">=" expr */ +#line 220 "src/parser.y" { (yyval.node) = gen_binop(AST_GE, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2846 "gen/gen_parser.c" +#line 2959 "gen/gen_parser.c" break; - case 36: /* binary_op: expr "!=" expr */ -#line 205 "src/parser.y" + case 36: /* binop: expr "!=" expr */ +#line 221 "src/parser.y" { (yyval.node) = gen_binop(AST_NE, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2852 "gen/gen_parser.c" +#line 2965 "gen/gen_parser.c" break; - case 37: /* binary_op: expr "==" expr */ -#line 206 "src/parser.y" + case 37: /* binop: expr "==" expr */ +#line 222 "src/parser.y" { (yyval.node) = gen_binop(AST_EQ, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2858 "gen/gen_parser.c" +#line 2971 "gen/gen_parser.c" break; - case 38: /* unary_op: "-" expr */ -#line 209 "src/parser.y" + case 38: /* unop: "-" expr */ +#line 225 "src/parser.y" { (yyval.node) = gen_unop(AST_NEG, (yyvsp[0].node)); } -#line 2864 "gen/gen_parser.c" +#line 2977 "gen/gen_parser.c" break; - case 39: /* unary_op: "!" expr */ -#line 210 "src/parser.y" + case 39: /* unop: "!" expr */ +#line 226 "src/parser.y" { (yyval.node) = gen_unop(AST_LNOT, (yyvsp[0].node)); } -#line 2870 "gen/gen_parser.c" +#line 2983 "gen/gen_parser.c" break; - case 40: /* unary_op: "&" expr */ -#line 211 "src/parser.y" + case 40: /* unop: "&" expr */ +#line 227 "src/parser.y" { (yyval.node) = gen_unop(AST_REF, (yyvsp[0].node)); } -#line 2876 "gen/gen_parser.c" +#line 2989 "gen/gen_parser.c" break; - case 41: /* unary_op: "'" expr */ -#line 212 "src/parser.y" + case 41: /* unop: "'" expr */ +#line 228 "src/parser.y" { (yyval.node) = gen_unop(AST_DEREF, (yyvsp[0].node)); } -#line 2882 "gen/gen_parser.c" +#line 2995 "gen/gen_parser.c" break; - case 42: /* unary_op: "~" expr */ -#line 213 "src/parser.y" + case 42: /* unop: "~" expr */ +#line 229 "src/parser.y" { (yyval.node) = gen_unop(AST_NOT, (yyvsp[0].node)); } -#line 2888 "gen/gen_parser.c" +#line 3001 "gen/gen_parser.c" break; case 43: /* arg: "&" var_decl */ -#line 216 "src/parser.y" - { (yyval.node) = gen_unop(AST_REF, (yyvsp[0].node)); } -#line 2894 "gen/gen_parser.c" +#line 232 "src/parser.y" + { (yyval.node) = gen_unop(AST_REF, (yyvsp[0].node)); } +#line 3007 "gen/gen_parser.c" break; case 44: /* arg: var_decl */ -#line 217 "src/parser.y" - { (yyval.node) = (yyvsp[0].node); } -#line 2900 "gen/gen_parser.c" - break; - - case 45: /* arg: init_expr */ -#line 218 "src/parser.y" - { (yyval.node) = (yyvsp[0].node); } -#line 2906 "gen/gen_parser.c" - break; - - case 46: /* arg_list: arg "," arg_list */ -#line 221 "src/parser.y" - { (yyval.node) = (yyvsp[-2].node); (yyvsp[-2].node)->next = (yyvsp[0].node); } -#line 2912 "gen/gen_parser.c" - break; - - case 47: /* arg_list: arg */ -#line 222 "src/parser.y" - { (yyval.node) = (yyvsp[0].node); } -#line 2918 "gen/gen_parser.c" - break; - - case 48: /* param_decl: type */ -#line 225 "src/parser.y" - { (yyval.node) = gen_var(NULL, (yyvsp[0].node), NULL); } -#line 2924 "gen/gen_parser.c" - break; - - case 49: /* decl_list: var_decl "," decl_list */ -#line 227 "src/parser.y" - { (yyval.node) = (yyvsp[-2].node); (yyvsp[-2].node)->next = (yyvsp[0].node); } -#line 2930 "gen/gen_parser.c" - break; - - case 50: /* decl_list: param_decl "," decl_list */ -#line 228 "src/parser.y" - { (yyval.node) = (yyvsp[-2].node); (yyvsp[-2].node)->next = (yyvsp[0].node); } -#line 2936 "gen/gen_parser.c" - break; - - case 51: /* decl_list: var_decl */ -#line 229 "src/parser.y" +#line 233 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 2942 "gen/gen_parser.c" - break; - - case 52: /* decl_list: param_decl */ -#line 230 "src/parser.y" - { (yyval.node) = (yyvsp[0].node); } -#line 2948 "gen/gen_parser.c" +#line 3013 "gen/gen_parser.c" break; - case 53: /* call: id "(" arg_list ")" */ + case 45: /* arg: expr */ #line 234 "src/parser.y" - { (yyval.node) = gen_call((yyvsp[-3].node), (yyvsp[-1].node)); } -#line 2954 "gen/gen_parser.c" + { (yyval.node) = (yyvsp[0].node); } +#line 3019 "gen/gen_parser.c" break; - case 54: /* call: id "(" ")" */ -#line 235 "src/parser.y" - { (yyval.node) = gen_call((yyvsp[-2].node), NULL); } -#line 2960 "gen/gen_parser.c" + case 46: /* args: arg "," args */ +#line 237 "src/parser.y" + { (yyval.node) = (yyvsp[-2].node); (yyvsp[-2].node)->next = (yyvsp[0].node); } +#line 3025 "gen/gen_parser.c" break; - case 55: /* defer: "defer" "(" expr ")" */ + case 47: /* args: arg */ #line 238 "src/parser.y" - { (yyval.node) = gen_defer((yyvsp[-1].node)); } -#line 2966 "gen/gen_parser.c" - break; - - case 56: /* expr: id */ -#line 242 "src/parser.y" - { (yyval.node) = (yyvsp[0].node); } -#line 2972 "gen/gen_parser.c" + { (yyval.node) = (yyvsp[0].node); } +#line 3031 "gen/gen_parser.c" break; - case 57: /* expr: expr "." id */ -#line 243 "src/parser.y" - { (yyval.node) = gen_dot((yyvsp[-2].node), (yyvsp[0].node)); } -#line 2978 "gen/gen_parser.c" + case 48: /* param_decl: type */ +#line 241 "src/parser.y" + { (yyval.node) = gen_var(NULL, (yyvsp[0].node), NULL); } +#line 3037 "gen/gen_parser.c" break; - case 58: /* expr: "..." id */ + case 49: /* decls: var_decl "," decls */ #line 244 "src/parser.y" - { (yyval.node) = (yyvsp[0].node); } -#line 2984 "gen/gen_parser.c" + { (yyval.node) = (yyvsp[-2].node); (yyvsp[-2].node)->next = (yyvsp[0].node); } +#line 3043 "gen/gen_parser.c" break; - case 59: /* expr: "@" */ + case 50: /* decls: param_decl "," decls */ #line 245 "src/parser.y" - { (yyval.node) = gen_last(); } -#line 2990 "gen/gen_parser.c" + { (yyval.node) = (yyvsp[-2].node); (yyvsp[-2].node)->next = (yyvsp[0].node); } +#line 3049 "gen/gen_parser.c" break; - case 60: /* expr: INT */ + case 51: /* decls: var_decl */ #line 246 "src/parser.y" - { (yyval.node) = gen_int((yyvsp[0].integer)); (yyval.node)->loc = to_src_loc(&yylloc); } -#line 2996 "gen/gen_parser.c" + { (yyval.node) = (yyvsp[0].node); } +#line 3055 "gen/gen_parser.c" break; - case 61: /* expr: FLOAT */ + case 52: /* decls: param_decl */ #line 247 "src/parser.y" - { (yyval.node) = gen_float((yyvsp[0].dbl)); (yyval.node)->loc = to_src_loc(&yylloc); } -#line 3002 "gen/gen_parser.c" - break; - - case 62: /* expr: STRING */ -#line 248 "src/parser.y" - { - (yyval.node) = gen_string(clone_string((yyvsp[0].str))); - (yyval.node)->loc = to_src_loc(&yylloc); - } -#line 3011 "gen/gen_parser.c" + { (yyval.node) = (yyvsp[0].node); } +#line 3061 "gen/gen_parser.c" break; - case 63: /* expr: "(" expr ")" */ -#line 252 "src/parser.y" - { (yyval.node) = (yyvsp[-1].node); } -#line 3017 "gen/gen_parser.c" + case 53: /* defer: "defer" expr */ +#line 250 "src/parser.y" + { (yyval.node) = gen_defer((yyvsp[0].node)); } +#line 3067 "gen/gen_parser.c" break; - case 64: /* expr: assign */ + case 54: /* const_binop: const_expr "+" const_expr */ #line 253 "src/parser.y" - { (yyval.node) = (yyvsp[0].node); } -#line 3023 "gen/gen_parser.c" + { (yyval.node) = gen_binop(AST_ADD, (yyvsp[-2].node), (yyvsp[0].node)); } +#line 3073 "gen/gen_parser.c" break; - case 65: /* expr: call */ + case 55: /* const_binop: const_expr "-" const_expr */ #line 254 "src/parser.y" - { (yyval.node) = (yyvsp[0].node); } -#line 3029 "gen/gen_parser.c" + { (yyval.node) = gen_binop(AST_SUB, (yyvsp[-2].node), (yyvsp[0].node)); } +#line 3079 "gen/gen_parser.c" break; - case 66: /* expr: defer */ + case 56: /* const_binop: const_expr "*" const_expr */ #line 255 "src/parser.y" - { (yyval.node) = (yyvsp[0].node); } -#line 3035 "gen/gen_parser.c" + { (yyval.node) = gen_binop(AST_MUL, (yyvsp[-2].node), (yyvsp[0].node)); } +#line 3085 "gen/gen_parser.c" break; - case 67: /* expr: binary_op */ + case 57: /* const_binop: const_expr "/" const_expr */ #line 256 "src/parser.y" - { (yyval.node) = (yyvsp[0].node); } -#line 3041 "gen/gen_parser.c" + { (yyval.node) = gen_binop(AST_DIV, (yyvsp[-2].node), (yyvsp[0].node)); } +#line 3091 "gen/gen_parser.c" break; - case 68: /* expr: unary_op */ + case 58: /* const_binop: const_expr "%" const_expr */ #line 257 "src/parser.y" - { (yyval.node) = (yyvsp[0].node); } -#line 3047 "gen/gen_parser.c" + { (yyval.node) = gen_binop(AST_REM, (yyvsp[-2].node), (yyvsp[0].node)); } +#line 3097 "gen/gen_parser.c" break; - case 69: /* expr: "(" var_init ")" */ + case 59: /* const_binop: const_expr "^" const_expr */ #line 258 "src/parser.y" - { (yyval.node) = (yyvsp[-1].node); } -#line 3053 "gen/gen_parser.c" + { (yyval.node) = gen_binop(AST_XOR, (yyvsp[-2].node), (yyvsp[0].node)); } +#line 3103 "gen/gen_parser.c" break; - case 70: /* expr: "sizeof" expr */ + case 60: /* const_binop: const_expr "^^" const_expr */ #line 259 "src/parser.y" - { (yyval.node) = gen_sizeof((yyvsp[0].node)); } -#line 3059 "gen/gen_parser.c" + { (yyval.node) = gen_binop(AST_POW, (yyvsp[-2].node), (yyvsp[0].node)); } +#line 3109 "gen/gen_parser.c" break; - case 71: /* expr: expr "as" type */ + case 61: /* const_binop: const_expr "&" const_expr */ #line 260 "src/parser.y" - { (yyval.node) = gen_cast((yyvsp[-2].node), (yyvsp[0].node)); } -#line 3065 "gen/gen_parser.c" + { (yyval.node) = gen_binop(AST_AND, (yyvsp[-2].node), (yyvsp[0].node)); } +#line 3115 "gen/gen_parser.c" break; - case 72: /* expr: id "::" type */ + case 62: /* const_binop: const_expr "&&" const_expr */ #line 261 "src/parser.y" - { (yyval.node) = gen_fetch((yyvsp[-2].node), (yyvsp[0].node)); } -#line 3071 "gen/gen_parser.c" + { (yyval.node) = gen_binop(AST_LAND, (yyvsp[-2].node), (yyvsp[0].node)); } +#line 3121 "gen/gen_parser.c" break; - case 73: /* expr: "as" type */ + case 63: /* const_binop: const_expr "|" const_expr */ #line 262 "src/parser.y" - { (yyval.node) = gen_as((yyvsp[0].node)); } -#line 3077 "gen/gen_parser.c" + { (yyval.node) = gen_binop(AST_OR, (yyvsp[-2].node), (yyvsp[0].node)); } +#line 3127 "gen/gen_parser.c" break; - case 74: /* expr: embed */ + case 64: /* const_binop: const_expr "||" const_expr */ #line 263 "src/parser.y" - { (yyval.node) = (yyvsp[0].node); } -#line 3083 "gen/gen_parser.c" + { (yyval.node) = gen_binop(AST_LOR, (yyvsp[-2].node), (yyvsp[0].node)); } +#line 3133 "gen/gen_parser.c" break; - case 75: /* expr: lambda */ + case 65: /* const_binop: const_expr "<<" const_expr */ #line 264 "src/parser.y" - { (yyval.node) = (yyvsp[0].node); } -#line 3089 "gen/gen_parser.c" + { (yyval.node) = gen_binop(AST_LSHIFT, (yyvsp[-2].node), (yyvsp[0].node)); } +#line 3139 "gen/gen_parser.c" break; - case 76: /* while: "while" expr body */ -#line 267 "src/parser.y" - { (yyval.node) = gen_while((yyvsp[-1].node), (yyvsp[0].node)); } -#line 3095 "gen/gen_parser.c" + case 66: /* const_binop: const_expr ">>" const_expr */ +#line 265 "src/parser.y" + { (yyval.node) = gen_binop(AST_RSHIFT, (yyvsp[-2].node), (yyvsp[0].node)); } +#line 3145 "gen/gen_parser.c" break; - case 77: /* do_while: "do" body "while" expr ";" */ -#line 270 "src/parser.y" - { - (yyval.node) = gen_while((yyvsp[-3].node), (yyvsp[-1].node)); - ast_set_flags((yyval.node), AST_FLAG_DELAYED); - } -#line 3104 "gen/gen_parser.c" + case 67: /* const_binop: const_expr "<" const_expr */ +#line 266 "src/parser.y" + { (yyval.node) = gen_binop(AST_LT, (yyvsp[-2].node), (yyvsp[0].node)); } +#line 3151 "gen/gen_parser.c" break; - case 78: /* goto: "goto" id */ -#line 276 "src/parser.y" - { (yyval.node) = gen_goto(gen_label((yyvsp[0].node))); } -#line 3110 "gen/gen_parser.c" + case 68: /* const_binop: const_expr ">" const_expr */ +#line 267 "src/parser.y" + { (yyval.node) = gen_binop(AST_GT, (yyvsp[-2].node), (yyvsp[0].node)); } +#line 3157 "gen/gen_parser.c" break; - case 79: /* statement: expr ";" */ -#line 278 "src/parser.y" - { (yyval.node) = (yyvsp[-1].node); } -#line 3116 "gen/gen_parser.c" + case 69: /* const_binop: const_expr "<=" const_expr */ +#line 268 "src/parser.y" + { (yyval.node) = gen_binop(AST_LE, (yyvsp[-2].node), (yyvsp[0].node)); } +#line 3163 "gen/gen_parser.c" break; - case 80: /* statement: "return" init_expr ";" */ -#line 279 "src/parser.y" - { (yyval.node) = gen_return((yyvsp[-1].node)); } -#line 3122 "gen/gen_parser.c" + case 70: /* const_binop: const_expr ">=" const_expr */ +#line 269 "src/parser.y" + { (yyval.node) = gen_binop(AST_GE, (yyvsp[-2].node), (yyvsp[0].node)); } +#line 3169 "gen/gen_parser.c" break; - case 81: /* statement: "return" ";" */ -#line 280 "src/parser.y" - { (yyval.node) = gen_return(NULL); } -#line 3128 "gen/gen_parser.c" + case 71: /* const_binop: const_expr "!=" const_expr */ +#line 270 "src/parser.y" + { (yyval.node) = gen_binop(AST_NE, (yyvsp[-2].node), (yyvsp[0].node)); } +#line 3175 "gen/gen_parser.c" break; - case 82: /* statement: "break" ";" */ -#line 281 "src/parser.y" - { (yyval.node) = gen_ctrl(AST_CTRL_BREAK, to_src_loc(&yylloc)); } -#line 3134 "gen/gen_parser.c" + case 72: /* const_binop: const_expr "==" const_expr */ +#line 271 "src/parser.y" + { (yyval.node) = gen_binop(AST_EQ, (yyvsp[-2].node), (yyvsp[0].node)); } +#line 3181 "gen/gen_parser.c" break; - case 83: /* statement: "continue" ";" */ -#line 282 "src/parser.y" - { (yyval.node) = gen_ctrl(AST_CTRL_CONTINUE, - to_src_loc(&yylloc)); } -#line 3141 "gen/gen_parser.c" + case 73: /* const_unop: "-" const_expr */ +#line 274 "src/parser.y" + { (yyval.node) = gen_unop(AST_NEG, (yyvsp[0].node)); } +#line 3187 "gen/gen_parser.c" break; - case 84: /* statement: import ";" */ -#line 284 "src/parser.y" - { (yyval.node) = (yyvsp[-1].node); } -#line 3147 "gen/gen_parser.c" + case 74: /* const_unop: "!" const_expr */ +#line 275 "src/parser.y" + { (yyval.node) = gen_unop(AST_LNOT, (yyvsp[0].node)); } +#line 3193 "gen/gen_parser.c" break; - case 85: /* statement: var ";" */ -#line 285 "src/parser.y" - { (yyval.node) = (yyvsp[-1].node); } -#line 3153 "gen/gen_parser.c" + case 75: /* const_unop: "~" const_expr */ +#line 276 "src/parser.y" + { (yyval.node) = gen_unop(AST_NOT, (yyvsp[0].node)); } +#line 3199 "gen/gen_parser.c" break; - case 86: /* statement: if */ -#line 286 "src/parser.y" - { (yyval.node) = (yyvsp[0].node); } -#line 3159 "gen/gen_parser.c" + case 76: /* const_expr: "(" const_expr ")" */ +#line 279 "src/parser.y" + { (yyval.node) = (yyvsp[-1].node); } +#line 3205 "gen/gen_parser.c" break; - case 87: /* statement: goto ";" */ -#line 287 "src/parser.y" - { (yyval.node) = (yyvsp[-1].node); } -#line 3165 "gen/gen_parser.c" + case 77: /* const_expr: id */ +#line 280 "src/parser.y" + { (yyval.node) = (yyvsp[0].node); } +#line 3211 "gen/gen_parser.c" + break; + + case 78: /* const_expr: INT */ +#line 281 "src/parser.y" + { (yyval.node) = gen_int((yyvsp[0].integer)); } +#line 3217 "gen/gen_parser.c" + break; + + case 79: /* const_expr: FLOAT */ +#line 282 "src/parser.y" + { (yyval.node) = gen_float((yyvsp[0].dbl)); } +#line 3223 "gen/gen_parser.c" + break; + + case 80: /* const_expr: const_binop */ +#line 283 "src/parser.y" + { (yyval.node) = (yyvsp[0].node); } +#line 3229 "gen/gen_parser.c" + break; + + case 81: /* const_expr: const_unop */ +#line 284 "src/parser.y" + { (yyval.node) = (yyvsp[0].node); } +#line 3235 "gen/gen_parser.c" break; - case 88: /* statement: id ":" */ + case 82: /* expr: id */ #line 288 "src/parser.y" - { (yyval.node) = gen_label((yyvsp[-1].node)); } -#line 3171 "gen/gen_parser.c" + { (yyval.node) = (yyvsp[0].node); } +#line 3241 "gen/gen_parser.c" break; - case 89: /* statement: for */ + case 83: /* expr: expr "." id */ #line 289 "src/parser.y" - { (yyval.node) = (yyvsp[0].node); } -#line 3177 "gen/gen_parser.c" + { (yyval.node) = gen_dot((yyvsp[-2].node), (yyvsp[0].node)); } +#line 3247 "gen/gen_parser.c" break; - case 90: /* statement: const */ + case 84: /* expr: "..." id */ #line 290 "src/parser.y" - { (yyval.node) = (yyvsp[0].node); } -#line 3183 "gen/gen_parser.c" + { (yyval.node) = (yyvsp[0].node); } +#line 3253 "gen/gen_parser.c" break; - case 91: /* statement: while */ + case 85: /* expr: INT */ #line 291 "src/parser.y" - { (yyval.node) = (yyvsp[0].node); } -#line 3189 "gen/gen_parser.c" + { (yyval.node) = gen_int((yyvsp[0].integer)); (yyval.node)->loc = to_src_loc(&yylloc); } +#line 3259 "gen/gen_parser.c" break; - case 92: /* statement: do_while */ + case 86: /* expr: FLOAT */ #line 292 "src/parser.y" - { (yyval.node) = (yyvsp[0].node); } -#line 3195 "gen/gen_parser.c" + { (yyval.node) = gen_float((yyvsp[0].dbl)); (yyval.node)->loc = to_src_loc(&yylloc); } +#line 3265 "gen/gen_parser.c" break; - case 93: /* statement: switch */ + case 87: /* expr: STRING */ #line 293 "src/parser.y" + { + (yyval.node) = gen_string(clone_string((yyvsp[0].str))); + (yyval.node)->loc = to_src_loc(&yylloc); + } +#line 3274 "gen/gen_parser.c" + break; + + case 88: /* expr: "(" expr ")" */ +#line 297 "src/parser.y" + { (yyval.node) = (yyvsp[-1].node); } +#line 3280 "gen/gen_parser.c" + break; + + case 89: /* expr: assign */ +#line 298 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3201 "gen/gen_parser.c" +#line 3286 "gen/gen_parser.c" + break; + + case 90: /* expr: expr "(" args ")" */ +#line 299 "src/parser.y" + { (yyval.node) = gen_call((yyvsp[-3].node), (yyvsp[-1].node)); } +#line 3292 "gen/gen_parser.c" + break; + + case 91: /* expr: expr "(" ")" */ +#line 300 "src/parser.y" + { (yyval.node) = gen_call((yyvsp[-2].node), NULL); } +#line 3298 "gen/gen_parser.c" break; - case 94: /* statement: macro */ -#line 294 "src/parser.y" + case 92: /* expr: expr "[" expr "]" */ +#line 301 "src/parser.y" + { (yyval.node) = gen_call((yyvsp[-3].node), (yyvsp[-1].node)); /** @todo add arr access */} +#line 3304 "gen/gen_parser.c" + break; + + case 93: /* expr: apply "(" args ")" */ +#line 302 "src/parser.y" + { (yyval.node) = gen_call((yyvsp[-3].node), (yyvsp[-1].node)); /* macro call */} +#line 3310 "gen/gen_parser.c" + break; + + case 94: /* expr: apply "(" ")" */ +#line 303 "src/parser.y" + { (yyval.node) = gen_call((yyvsp[-2].node), NULL); /* macro call */} +#line 3316 "gen/gen_parser.c" + break; + + case 95: /* expr: binop */ +#line 304 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3207 "gen/gen_parser.c" +#line 3322 "gen/gen_parser.c" + break; + + case 96: /* expr: unop */ +#line 305 "src/parser.y" + { (yyval.node) = (yyvsp[0].node); } +#line 3328 "gen/gen_parser.c" + break; + + case 97: /* expr: "(" var_init ")" */ +#line 306 "src/parser.y" + { (yyval.node) = (yyvsp[-1].node); } +#line 3334 "gen/gen_parser.c" + break; + + case 98: /* expr: "sizeof" expr */ +#line 307 "src/parser.y" + { (yyval.node) = gen_sizeof((yyvsp[0].node)); } +#line 3340 "gen/gen_parser.c" break; - case 95: /* statement: struct */ -#line 295 "src/parser.y" + case 99: /* expr: expr "as" type */ +#line 308 "src/parser.y" + { (yyval.node) = gen_cast((yyvsp[-2].node), (yyvsp[0].node)); } +#line 3346 "gen/gen_parser.c" + break; + + case 100: /* expr: id "::" type */ +#line 309 "src/parser.y" + { (yyval.node) = gen_fetch((yyvsp[-2].node), (yyvsp[0].node)); } +#line 3352 "gen/gen_parser.c" + break; + + case 101: /* expr: "as" type */ +#line 310 "src/parser.y" + { (yyval.node) = gen_as((yyvsp[0].node)); } +#line 3358 "gen/gen_parser.c" + break; + + case 102: /* expr: embed */ +#line 311 "src/parser.y" + { (yyval.node) = (yyvsp[0].node); } +#line 3364 "gen/gen_parser.c" + break; + + case 103: /* expr: lambda */ +#line 312 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3213 "gen/gen_parser.c" +#line 3370 "gen/gen_parser.c" break; - case 96: /* statement: type_alias ";" */ -#line 296 "src/parser.y" - { (yyval.node) = (yyvsp[-1].node); } -#line 3219 "gen/gen_parser.c" + case 104: /* expr: if */ +#line 313 "src/parser.y" + { (yyval.node) = (yyvsp[0].node); } +#line 3376 "gen/gen_parser.c" break; - case 97: /* statement: type_template */ -#line 297 "src/parser.y" - { (yyval.node) = (yyvsp[0].node); } -#line 3225 "gen/gen_parser.c" + case 105: /* expr: switch */ +#line 314 "src/parser.y" + { (yyval.node) = (yyvsp[0].node); } +#line 3382 "gen/gen_parser.c" break; - case 98: /* statement: enum */ -#line 298 "src/parser.y" + case 106: /* expr: construct */ +#line 315 "src/parser.y" + { (yyval.node) = (yyvsp[0].node); } +#line 3388 "gen/gen_parser.c" + break; + + case 107: /* expr: "(" body ")" */ +#line 316 "src/parser.y" + { (yyval.node) = (yyvsp[-1].node); } +#line 3394 "gen/gen_parser.c" + break; + + case 108: /* while: "while" expr body */ +#line 319 "src/parser.y" + { (yyval.node) = gen_while((yyvsp[-1].node), (yyvsp[0].node)); } +#line 3400 "gen/gen_parser.c" + break; + + case 109: /* do_while: "do" body "while" expr ";" */ +#line 322 "src/parser.y" + { + (yyval.node) = gen_while((yyvsp[-3].node), (yyvsp[-1].node)); + ast_set_flags((yyval.node), AST_FLAG_DELAYED); + } +#line 3409 "gen/gen_parser.c" + break; + + case 110: /* goto: "goto" id */ +#line 328 "src/parser.y" + { (yyval.node) = gen_goto(gen_label((yyvsp[0].node))); } +#line 3415 "gen/gen_parser.c" + break; + + case 111: /* statelet: expr */ +#line 331 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3231 "gen/gen_parser.c" +#line 3421 "gen/gen_parser.c" break; - case 99: /* statement: body */ -#line 299 "src/parser.y" + case 112: /* statelet: "return" expr */ +#line 332 "src/parser.y" + { (yyval.node) = gen_return((yyvsp[0].node)); } +#line 3427 "gen/gen_parser.c" + break; + + case 113: /* statelet: "return" */ +#line 333 "src/parser.y" + { (yyval.node) = gen_return(NULL); } +#line 3433 "gen/gen_parser.c" + break; + + case 114: /* statelet: "break" */ +#line 334 "src/parser.y" + { (yyval.node) = gen_ctrl(AST_CTRL_BREAK, to_src_loc(&yylloc)); } +#line 3439 "gen/gen_parser.c" + break; + + case 115: /* statelet: "continue" */ +#line 335 "src/parser.y" + { (yyval.node) = gen_ctrl(AST_CTRL_CONTINUE, to_src_loc(&yylloc)); } +#line 3445 "gen/gen_parser.c" + break; + + case 116: /* statelet: import */ +#line 336 "src/parser.y" + { (yyval.node) = (yyvsp[0].node); } +#line 3451 "gen/gen_parser.c" + break; + + case 117: /* statelet: var */ +#line 337 "src/parser.y" + { (yyval.node) = (yyvsp[0].node); } +#line 3457 "gen/gen_parser.c" + break; + + case 118: /* statelet: goto */ +#line 338 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3237 "gen/gen_parser.c" +#line 3463 "gen/gen_parser.c" break; - case 100: /* statement: ";" */ -#line 300 "src/parser.y" + case 119: /* statelet: id ":" */ +#line 339 "src/parser.y" + { (yyval.node) = gen_label((yyvsp[-1].node)); } +#line 3469 "gen/gen_parser.c" + break; + + case 120: /* statelet: for */ +#line 340 "src/parser.y" + { (yyval.node) = (yyvsp[0].node); } +#line 3475 "gen/gen_parser.c" + break; + + case 121: /* statelet: const */ +#line 341 "src/parser.y" + { (yyval.node) = (yyvsp[0].node); } +#line 3481 "gen/gen_parser.c" + break; + + case 122: /* statelet: while */ +#line 342 "src/parser.y" + { (yyval.node) = (yyvsp[0].node); } +#line 3487 "gen/gen_parser.c" + break; + + case 123: /* statelet: do_while */ +#line 343 "src/parser.y" + { (yyval.node) = (yyvsp[0].node); } +#line 3493 "gen/gen_parser.c" + break; + + case 124: /* statelet: macro */ +#line 344 "src/parser.y" + { (yyval.node) = (yyvsp[0].node); } +#line 3499 "gen/gen_parser.c" + break; + + case 125: /* statelet: struct */ +#line 345 "src/parser.y" + { (yyval.node) = (yyvsp[0].node); } +#line 3505 "gen/gen_parser.c" + break; + + case 126: /* statelet: alias */ +#line 346 "src/parser.y" + { (yyval.node) = (yyvsp[0].node); } +#line 3511 "gen/gen_parser.c" + break; + + case 127: /* statelet: template */ +#line 347 "src/parser.y" + { (yyval.node) = (yyvsp[0].node); } +#line 3517 "gen/gen_parser.c" + break; + + case 128: /* statelet: defer */ +#line 348 "src/parser.y" + { (yyval.node) = (yyvsp[0].node); } +#line 3523 "gen/gen_parser.c" + break; + + case 129: /* statelet: enum */ +#line 349 "src/parser.y" + { (yyval.node) = (yyvsp[0].node); } +#line 3529 "gen/gen_parser.c" + break; + + case 130: /* statelet: body */ +#line 350 "src/parser.y" + { (yyval.node) = (yyvsp[0].node); } +#line 3535 "gen/gen_parser.c" + break; + + case 131: /* statelet: ";" */ +#line 351 "src/parser.y" { (yyval.node) = gen_empty(); } -#line 3243 "gen/gen_parser.c" +#line 3541 "gen/gen_parser.c" break; - case 101: /* statement: error */ -#line 301 "src/parser.y" + case 132: /* statelet: error */ +#line 352 "src/parser.y" { /* TODO: figure out how to destroy any and all possible ast nodes we * may have generated up until the error */ @@ -3258,56 +3556,68 @@ yyreduce: yyclearin; yyerrok; } -#line 3262 "gen/gen_parser.c" +#line 3560 "gen/gen_parser.c" + break; + + case 133: /* statement: statelet ";" */ +#line 368 "src/parser.y" + { (yyval.node) = (yyvsp[-1].node); } +#line 3566 "gen/gen_parser.c" break; - case 102: /* statement_list: statement statement_list */ -#line 317 "src/parser.y" - { (yyval.node) = (yyvsp[-1].node); (yyvsp[-1].node)->next = (yyvsp[0].node); } -#line 3268 "gen/gen_parser.c" + case 134: /* statements: statement statements */ +#line 371 "src/parser.y" + { (yyval.node) = (yyvsp[-1].node); (yyvsp[-1].node)->next = (yyvsp[0].node); } +#line 3572 "gen/gen_parser.c" break; - case 103: /* statement_list: statement */ -#line 318 "src/parser.y" + case 135: /* statements: statement */ +#line 372 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3274 "gen/gen_parser.c" +#line 3578 "gen/gen_parser.c" break; - case 104: /* body: "{" statement_list "}" */ -#line 321 "src/parser.y" + case 136: /* statements: statelet */ +#line 373 "src/parser.y" + { (yyval.node) = (yyvsp[0].node); } +#line 3584 "gen/gen_parser.c" + break; + + case 137: /* body: "{" statements "}" */ +#line 376 "src/parser.y" { (yyval.node) = gen_block((yyvsp[-1].node)); } -#line 3280 "gen/gen_parser.c" +#line 3590 "gen/gen_parser.c" break; - case 105: /* body: "{" "}" */ -#line 322 "src/parser.y" + case 138: /* body: "{" "}" */ +#line 377 "src/parser.y" { (yyval.node) = gen_block(gen_empty()); } -#line 3286 "gen/gen_parser.c" +#line 3596 "gen/gen_parser.c" break; - case 106: /* macro_list: id "," macro_list */ -#line 325 "src/parser.y" - { (yyval.node) = (yyvsp[-2].node); (yyval.node)->next = (yyvsp[0].node); } -#line 3292 "gen/gen_parser.c" + case 139: /* references: id "," references */ +#line 380 "src/parser.y" + { (yyval.node) = (yyvsp[-2].node); (yyval.node)->next = (yyvsp[0].node); } +#line 3602 "gen/gen_parser.c" break; - case 107: /* macro_list: id */ -#line 326 "src/parser.y" + case 140: /* references: id */ +#line 381 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3298 "gen/gen_parser.c" +#line 3608 "gen/gen_parser.c" break; - case 108: /* macro: "define" id "(" macro_list ")" body */ -#line 329 "src/parser.y" - { + case 141: /* macro: "define" id "(" references ")" body */ +#line 385 "src/parser.y" + { (yyval.node) = gen_macro((yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); ast_set_flags((yyvsp[0].node), AST_FLAG_UNHYGIENIC); } -#line 3307 "gen/gen_parser.c" +#line 3617 "gen/gen_parser.c" break; - case 109: /* macro: "define" id "(" macro_list "..." id ")" body */ -#line 333 "src/parser.y" + case 142: /* macro: "define" id "(" references "..." id ")" body */ +#line 389 "src/parser.y" { /* TODO: the location data of the variadic ID is way off */ ast_append((yyvsp[-4].node), (yyvsp[-2].node)); @@ -3315,731 +3625,737 @@ yyreduce: ast_set_flags((yyval.node), AST_FLAG_VARIADIC); ast_set_flags((yyvsp[0].node), AST_FLAG_UNHYGIENIC); } -#line 3319 "gen/gen_parser.c" +#line 3629 "gen/gen_parser.c" break; - case 110: /* macro: "define" id "(" ")" body */ -#line 340 "src/parser.y" + case 143: /* macro: "define" id "(" ")" body */ +#line 396 "src/parser.y" { (yyval.node) = gen_macro((yyvsp[-3].node), NULL, (yyvsp[0].node)); ast_set_flags((yyvsp[0].node), AST_FLAG_UNHYGIENIC); } -#line 3328 "gen/gen_parser.c" +#line 3638 "gen/gen_parser.c" break; - case 111: /* expr_list: expr "," expr_list */ -#line 346 "src/parser.y" - { (yyval.node) = (yyvsp[-2].node); (yyvsp[-2].node)->next = (yyvsp[0].node); } -#line 3334 "gen/gen_parser.c" + case 144: /* exprs: expr "," exprs */ +#line 402 "src/parser.y" + { (yyval.node) = (yyvsp[-2].node); (yyvsp[-2].node)->next = (yyvsp[0].node); } +#line 3644 "gen/gen_parser.c" break; - case 112: /* expr_list: expr */ -#line 347 "src/parser.y" + case 145: /* exprs: expr */ +#line 403 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3340 "gen/gen_parser.c" +#line 3650 "gen/gen_parser.c" break; - case 113: /* struct_init: init_expr */ -#line 350 "src/parser.y" - { (yyval.node) = (yyvsp[0].node); } -#line 3346 "gen/gen_parser.c" + case 146: /* construct_arg: expr */ +#line 406 "src/parser.y" + { (yyval.node) = (yyvsp[0].node); } +#line 3656 "gen/gen_parser.c" break; - case 114: /* struct_init: "." id "=" init_expr */ -#line 351 "src/parser.y" - { + case 147: /* construct_arg: "." id "=" expr */ +#line 407 "src/parser.y" + { (yyval.node) = gen_var((yyvsp[-2].node), NULL, (yyvsp[0].node)); ast_set_flags((yyval.node), AST_FLAG_MEMBER); } -#line 3355 "gen/gen_parser.c" +#line 3665 "gen/gen_parser.c" break; - case 115: /* struct_inits: struct_init "," struct_inits */ -#line 357 "src/parser.y" + case 148: /* construct_args: construct_arg "," construct_args */ +#line 413 "src/parser.y" { (yyval.node) = (yyvsp[-2].node); (yyvsp[-2].node)->next = (yyvsp[0].node); } -#line 3361 "gen/gen_parser.c" - break; - - case 116: /* struct_inits: struct_init */ -#line 358 "src/parser.y" - { (yyval.node) = (yyvsp[0].node); } -#line 3367 "gen/gen_parser.c" - break; - - case 117: /* struct_construct: "{" struct_inits "}" */ -#line 361 "src/parser.y" - { (yyval.node) = gen_init((yyvsp[-1].node)); } -#line 3373 "gen/gen_parser.c" - break; - - case 118: /* init_expr: expr */ -#line 364 "src/parser.y" - { (yyval.node) = (yyvsp[0].node); } -#line 3379 "gen/gen_parser.c" - break; - - case 119: /* init_expr: expr_if */ -#line 365 "src/parser.y" - { (yyval.node) = (yyvsp[0].node); } -#line 3385 "gen/gen_parser.c" - break; - - case 120: /* init_expr: struct_construct */ -#line 366 "src/parser.y" - { (yyval.node) = (yyvsp[0].node); } -#line 3391 "gen/gen_parser.c" - break; - - case 121: /* init_expr: struct_construct "as" type */ -#line 367 "src/parser.y" - { (yyval.node) = gen_cast((yyvsp[-2].node), (yyvsp[0].node)); } -#line 3397 "gen/gen_parser.c" - break; - - case 122: /* cond: expr */ -#line 370 "src/parser.y" - { (yyval.node) = (yyvsp[0].node); } -#line 3403 "gen/gen_parser.c" - break; - - case 123: /* cond: "(" expr_if ")" */ -#line 371 "src/parser.y" - { (yyval.node) = (yyvsp[-1].node); } -#line 3409 "gen/gen_parser.c" +#line 3671 "gen/gen_parser.c" break; - case 124: /* expr_if: "if" cond body "else" body */ -#line 375 "src/parser.y" - { (yyval.node) = gen_if((yyvsp[-3].node), (yyvsp[-2].node), (yyvsp[0].node)); } -#line 3415 "gen/gen_parser.c" + case 149: /* construct_args: construct_arg */ +#line 414 "src/parser.y" + { (yyval.node) = (yyvsp[0].node); } +#line 3677 "gen/gen_parser.c" break; - case 125: /* expr_if: "if" cond body "else" expr_if */ -#line 376 "src/parser.y" - { (yyval.node) = gen_if((yyvsp[-3].node), (yyvsp[-2].node), (yyvsp[0].node)); } -#line 3421 "gen/gen_parser.c" + case 150: /* construct: "!" "{" construct_args "}" */ +#line 417 "src/parser.y" + { (yyval.node) = gen_init((yyvsp[-1].node)); } +#line 3683 "gen/gen_parser.c" break; - case 126: /* if: "if" cond body */ -#line 379 "src/parser.y" - { (yyval.node) = gen_if((yyvsp[-1].node), (yyvsp[0].node), NULL); } -#line 3427 "gen/gen_parser.c" + case 151: /* if: "if" expr body */ +#line 420 "src/parser.y" + { (yyval.node) = gen_if((yyvsp[-1].node), (yyvsp[0].node), NULL); } +#line 3689 "gen/gen_parser.c" break; - case 127: /* if: "if" cond body "else" body */ -#line 380 "src/parser.y" + case 152: /* if: "if" expr body "else" body */ +#line 421 "src/parser.y" { (yyval.node) = gen_if((yyvsp[-3].node), (yyvsp[-2].node), (yyvsp[0].node)); } -#line 3433 "gen/gen_parser.c" +#line 3695 "gen/gen_parser.c" break; - case 128: /* if: "if" cond body "else" if */ -#line 381 "src/parser.y" + case 153: /* if: "if" expr body "else" if */ +#line 422 "src/parser.y" { (yyval.node) = gen_if((yyvsp[-3].node), (yyvsp[-2].node), (yyvsp[0].node)); } -#line 3439 "gen/gen_parser.c" +#line 3701 "gen/gen_parser.c" break; - case 129: /* for: "for" arg ";" expr ";" expr body */ -#line 384 "src/parser.y" - { (yyval.node) = gen_for((yyvsp[-5].node), (yyvsp[-3].node), (yyvsp[-1].node), (yyvsp[0].node)); } -#line 3445 "gen/gen_parser.c" + case 154: /* for: "for" arg ";" expr ";" expr body */ +#line 426 "src/parser.y" + { (yyval.node) = gen_for((yyvsp[-5].node), (yyvsp[-3].node), (yyvsp[-1].node), (yyvsp[0].node)); } +#line 3707 "gen/gen_parser.c" break; - case 130: /* case: "case" expr ":" statement_list */ -#line 387 "src/parser.y" - { (yyval.node) = gen_case((yyvsp[-2].node), (yyvsp[0].node)); } -#line 3451 "gen/gen_parser.c" + case 155: /* case: "case" const_expr ":" statements */ +#line 429 "src/parser.y" + { + (yyval.node) = gen_case((yyvsp[-2].node), (yyvsp[0].node)); } +#line 3714 "gen/gen_parser.c" break; - case 131: /* case_list: case case_list */ -#line 390 "src/parser.y" - { (yyval.node) = (yyvsp[-1].node); (yyvsp[-1].node)->next = (yyvsp[0].node); } -#line 3457 "gen/gen_parser.c" + case 156: /* case: "default" ":" statements */ +#line 431 "src/parser.y" + { + (yyval.node) = gen_case(NULL, (yyvsp[0].node)); + } +#line 3722 "gen/gen_parser.c" break; - case 132: /* case_list: case */ -#line 391 "src/parser.y" + case 157: /* cases: case cases */ +#line 436 "src/parser.y" + { (yyval.node) = (yyvsp[-1].node); (yyvsp[-1].node)->next = (yyvsp[0].node); } +#line 3728 "gen/gen_parser.c" + break; + + case 158: /* cases: case */ +#line 437 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3463 "gen/gen_parser.c" +#line 3734 "gen/gen_parser.c" break; - case 133: /* switch: "switch" expr "{" case_list "}" */ -#line 394 "src/parser.y" - { (yyval.node) = gen_switch((yyvsp[-3].node), (yyvsp[-1].node)); } -#line 3469 "gen/gen_parser.c" + case 159: /* switch: "switch" expr "{" cases "}" */ +#line 440 "src/parser.y" + { (yyval.node) = gen_switch((yyvsp[-3].node), (yyvsp[-1].node)); } +#line 3740 "gen/gen_parser.c" break; - case 134: /* const_for: "for" id ":" expr_list body */ -#line 397 "src/parser.y" - { + case 160: /* const_for: "for" id ":" exprs body */ +#line 444 "src/parser.y" + { /* TODO: should id be a separate rule? */ (yyval.node) = gen_for((yyvsp[-3].node), NULL, (yyvsp[-1].node), (yyvsp[0].node)); ast_set_flags((yyvsp[0].node), AST_FLAG_UNHYGIENIC); } -#line 3479 "gen/gen_parser.c" +#line 3750 "gen/gen_parser.c" break; - case 135: /* const_if: "if" expr body */ -#line 404 "src/parser.y" - { + case 161: /* const_if: "if" const_expr body */ +#line 451 "src/parser.y" + { (yyval.node) = gen_if((yyvsp[-1].node), (yyvsp[0].node), NULL); ast_set_flags((yyvsp[0].node), AST_FLAG_UNHYGIENIC); } -#line 3488 "gen/gen_parser.c" +#line 3759 "gen/gen_parser.c" break; - case 136: /* const_if: "if" expr body "else" body */ -#line 408 "src/parser.y" - { + case 162: /* const_if: "if" const_expr body "else" body */ +#line 455 "src/parser.y" + { (yyval.node) = gen_if((yyvsp[-3].node), (yyvsp[-2].node), (yyvsp[0].node)); ast_set_flags((yyvsp[-2].node), AST_FLAG_UNHYGIENIC); ast_set_flags((yyvsp[0].node), AST_FLAG_UNHYGIENIC); } -#line 3498 "gen/gen_parser.c" +#line 3769 "gen/gen_parser.c" break; - case 137: /* const_if: "if" expr body "else" const_if */ -#line 413 "src/parser.y" - { + case 163: /* const_if: "if" const_expr body "else" const_if */ +#line 460 "src/parser.y" + { (yyval.node) = gen_if((yyvsp[-3].node), (yyvsp[-2].node), (yyvsp[0].node)); ast_set_flags((yyvsp[-2].node), AST_FLAG_UNHYGIENIC); } -#line 3507 "gen/gen_parser.c" +#line 3778 "gen/gen_parser.c" break; - case 138: /* const: "const" const_if */ -#line 421 "src/parser.y" - { (yyval.node) = (yyvsp[0].node); ast_set_flags((yyval.node), AST_FLAG_CONST); - } -#line 3514 "gen/gen_parser.c" + case 164: /* const: "const" const_if */ +#line 468 "src/parser.y" + { (yyval.node) = (yyvsp[0].node); ast_set_flags((yyval.node), AST_FLAG_CONST); } +#line 3784 "gen/gen_parser.c" break; - case 139: /* const: "const" const_for */ -#line 423 "src/parser.y" - { (yyval.node) = (yyvsp[0].node); ast_set_flags((yyval.node), AST_FLAG_CONST); - } -#line 3521 "gen/gen_parser.c" + case 165: /* const: "const" const_for */ +#line 469 "src/parser.y" + { (yyval.node) = (yyvsp[0].node); ast_set_flags((yyval.node), AST_FLAG_CONST); } +#line 3790 "gen/gen_parser.c" break; - case 140: /* func_sign: "(" decl_list "=>" type ")" */ -#line 427 "src/parser.y" - { + case 166: /* simple_sign: "(" decls "=>" type ")" */ +#line 472 "src/parser.y" + { (yyval.node) = gen_type(AST_TYPE_SIGN, NULL, (yyvsp[-3].node), (yyvsp[-1].node)); } -#line 3529 "gen/gen_parser.c" +#line 3798 "gen/gen_parser.c" break; - case 141: /* func_sign: "(" decl_list ")" */ -#line 430 "src/parser.y" - { (yyval.node) = gen_type(AST_TYPE_SIGN, NULL, (yyvsp[-1].node), NULL); - } -#line 3536 "gen/gen_parser.c" + case 167: /* simple_sign: "(" decls ")" */ +#line 475 "src/parser.y" + { (yyval.node) = gen_type(AST_TYPE_SIGN, NULL, (yyvsp[-1].node), NULL); } +#line 3804 "gen/gen_parser.c" break; - case 142: /* func_sign: "(" decl_list "=>" ")" */ -#line 432 "src/parser.y" - { (yyval.node) = gen_type(AST_TYPE_SIGN, NULL, (yyvsp[-2].node), NULL); - } -#line 3543 "gen/gen_parser.c" + case 168: /* simple_sign: "(" decls "=>" ")" */ +#line 476 "src/parser.y" + { (yyval.node) = gen_type(AST_TYPE_SIGN, NULL, (yyvsp[-2].node), NULL); } +#line 3810 "gen/gen_parser.c" break; - case 143: /* func_sign: "(" "=>" type ")" */ -#line 434 "src/parser.y" - { (yyval.node) = gen_type(AST_TYPE_SIGN, NULL, NULL, (yyvsp[-1].node)); - } -#line 3550 "gen/gen_parser.c" + case 169: /* simple_sign: "(" "=>" type ")" */ +#line 477 "src/parser.y" + { (yyval.node) = gen_type(AST_TYPE_SIGN, NULL, NULL, (yyvsp[-1].node)); } +#line 3816 "gen/gen_parser.c" break; - case 144: /* func_sign: "(" ")" */ -#line 436 "src/parser.y" - { (yyval.node) = gen_type(AST_TYPE_SIGN, NULL, NULL, NULL); - } -#line 3557 "gen/gen_parser.c" + case 170: /* simple_sign: "(" ")" */ +#line 478 "src/parser.y" + { (yyval.node) = gen_type(AST_TYPE_SIGN, NULL, NULL, NULL); } +#line 3822 "gen/gen_parser.c" break; - case 145: /* variadic_sign: func_sign */ -#line 440 "src/parser.y" - { (yyval.node) = (yyvsp[0].node); } -#line 3563 "gen/gen_parser.c" + case 171: /* func_sign: simple_sign */ +#line 481 "src/parser.y" + { (yyval.node) = (yyvsp[0].node); } +#line 3828 "gen/gen_parser.c" break; - case 146: /* variadic_sign: "(" decl_list "..." id "=>" type ")" */ -#line 441 "src/parser.y" - { + case 172: /* func_sign: "(" decls "..." id "=>" type ")" */ +#line 482 "src/parser.y" + { ast_append((yyvsp[-5].node), (yyvsp[-3].node)); (yyval.node) = gen_type(AST_TYPE_SIGN, NULL, (yyvsp[-5].node), (yyvsp[-1].node)); ast_set_flags((yyval.node), AST_FLAG_VARIADIC); } -#line 3573 "gen/gen_parser.c" +#line 3838 "gen/gen_parser.c" break; - case 147: /* type: id */ -#line 448 "src/parser.y" - { (yyval.node) = gen_type(AST_TYPE_ID, (yyvsp[0].node), NULL, NULL); } -#line 3579 "gen/gen_parser.c" + case 173: /* type: id */ +#line 489 "src/parser.y" + { (yyval.node) = gen_type(AST_TYPE_ID, (yyvsp[0].node), NULL, NULL); } +#line 3844 "gen/gen_parser.c" break; - case 148: /* type: "'" func_sign */ -#line 449 "src/parser.y" - { + case 174: /* type: "@" simple_sign */ +#line 490 "src/parser.y" + { (yyval.node) = gen_type(AST_TYPE_POINTER, NULL, NULL, NULL); (yyval.node)->_type.next = (yyvsp[0].node); } -#line 3588 "gen/gen_parser.c" +#line 3853 "gen/gen_parser.c" break; - case 149: /* type: id "(" type_list ")" */ -#line 453 "src/parser.y" - { + case 175: /* type: apply "[" types "]" */ +#line 494 "src/parser.y" + { (yyval.node) = gen_type(AST_TYPE_GENERIC, (yyvsp[-3].node), (yyvsp[-1].node), NULL); } -#line 3596 "gen/gen_parser.c" +#line 3861 "gen/gen_parser.c" break; - case 150: /* type: "'" type */ -#line 456 "src/parser.y" + case 176: /* type: "'" type */ +#line 497 "src/parser.y" { (yyval.node) = gen_type(AST_TYPE_POINTER, NULL, NULL, NULL); (yyval.node)->_type.next = (yyvsp[0].node); } -#line 3605 "gen/gen_parser.c" +#line 3870 "gen/gen_parser.c" break; - case 151: /* type: "[" "]" type */ -#line 460 "src/parser.y" - { - (yyval.node) = gen_type(AST_TYPE_ARR, NULL, NULL, NULL); - (yyval.node)->_type.next = (yyvsp[0].node); - } -#line 3614 "gen/gen_parser.c" - break; - - case 152: /* type: "[" expr "]" type */ -#line 464 "src/parser.y" - { + case 177: /* type: "'" "[" const_expr "]" type */ +#line 501 "src/parser.y" + { (yyval.node) = gen_type(AST_TYPE_ARR, NULL, (yyvsp[-2].node), NULL); (yyval.node)->_type.next = (yyvsp[0].node); } -#line 3623 "gen/gen_parser.c" +#line 3879 "gen/gen_parser.c" break; - case 153: /* type: "typeof" expr */ -#line 468 "src/parser.y" + case 178: /* type: "typeof" expr */ +#line 505 "src/parser.y" { (yyval.node) = gen_type(AST_TYPE_TYPEOF, NULL, (yyvsp[0].node), NULL); } -#line 3631 "gen/gen_parser.c" +#line 3887 "gen/gen_parser.c" break; - case 154: /* type: id "::" type */ -#line 471 "src/parser.y" + case 179: /* type: id "::" type */ +#line 508 "src/parser.y" { (yyval.node) = gen_type(AST_TYPE_MEMBER, (yyvsp[-2].node), (yyvsp[0].node), NULL); } -#line 3639 "gen/gen_parser.c" +#line 3895 "gen/gen_parser.c" break; - case 155: /* var_decl: id "mut" type */ -#line 476 "src/parser.y" + case 180: /* var_decl: id "mut" type */ +#line 513 "src/parser.y" { (yyval.node) = gen_var((yyvsp[-2].node), (yyvsp[0].node), NULL); ast_set_flags((yyval.node), AST_FLAG_MUTABLE); } -#line 3648 "gen/gen_parser.c" +#line 3904 "gen/gen_parser.c" break; - case 156: /* var_decl: id "const" type */ -#line 480 "src/parser.y" + case 181: /* var_decl: id "const" type */ +#line 517 "src/parser.y" { (yyval.node) = gen_var((yyvsp[-2].node), (yyvsp[0].node), NULL); } -#line 3654 "gen/gen_parser.c" +#line 3910 "gen/gen_parser.c" break; - case 157: /* var_decl: id type */ -#line 481 "src/parser.y" + case 182: /* var_decl: id type */ +#line 518 "src/parser.y" { (yyval.node) = gen_var((yyvsp[-1].node), (yyvsp[0].node), NULL); } -#line 3660 "gen/gen_parser.c" +#line 3916 "gen/gen_parser.c" break; - case 158: /* var_init: var_decl "=" init_expr */ -#line 484 "src/parser.y" - { (yyval.node) = (yyvsp[-2].node); (yyvsp[-2].node)->_var.init = (yyvsp[0].node); } -#line 3666 "gen/gen_parser.c" + case 183: /* var_init: var_decl "=" expr */ +#line 521 "src/parser.y" + { (yyval.node) = (yyvsp[-2].node); (yyvsp[-2].node)->_var.init = (yyvsp[0].node); } +#line 3922 "gen/gen_parser.c" break; - case 159: /* var_init: id "mut" "=" init_expr */ -#line 485 "src/parser.y" - { + case 184: /* var_init: id "mut" "=" expr */ +#line 522 "src/parser.y" + { (yyval.node) = gen_var((yyvsp[-3].node), NULL, (yyvsp[0].node)); ast_set_flags((yyval.node), AST_FLAG_UNTYPED | AST_FLAG_MUTABLE); } -#line 3675 "gen/gen_parser.c" +#line 3931 "gen/gen_parser.c" break; - case 160: /* var_init: id "const" "=" init_expr */ -#line 489 "src/parser.y" - { + case 185: /* var_init: id "const" "=" expr */ +#line 526 "src/parser.y" + { (yyval.node) = gen_var((yyvsp[-3].node), NULL, (yyvsp[0].node)); ast_set_flags((yyval.node), AST_FLAG_UNTYPED); } -#line 3684 "gen/gen_parser.c" +#line 3940 "gen/gen_parser.c" break; - case 161: /* proc: id variadic_sign body */ -#line 495 "src/parser.y" + case 186: /* proc: id func_sign body */ +#line 532 "src/parser.y" { (yyval.node) = gen_proc((yyvsp[-2].node), (yyvsp[-1].node), (yyvsp[0].node)); ast_set_flags((yyval.node), (yyvsp[-1].node)->flags); } -#line 3693 "gen/gen_parser.c" +#line 3949 "gen/gen_parser.c" break; - case 162: /* proc: "extern" id func_sign */ -#line 499 "src/parser.y" - { + case 187: /* proc: "extern" id simple_sign */ +#line 536 "src/parser.y" + { (yyval.node) = gen_proc((yyvsp[-1].node), (yyvsp[0].node), NULL); ast_set_flags((yyval.node), AST_FLAG_EXTERN); } -#line 3702 "gen/gen_parser.c" +#line 3958 "gen/gen_parser.c" break; - case 163: /* lambda: "[" macro_list "]" func_sign body */ -#line 505 "src/parser.y" - { (yyval.node) = gen_lambda((yyvsp[-3].node), (yyvsp[-1].node), (yyvsp[0].node)); } -#line 3708 "gen/gen_parser.c" + case 188: /* lambda: "[" references "]" simple_sign body */ +#line 542 "src/parser.y" + { (yyval.node) = gen_lambda((yyvsp[-3].node), (yyvsp[-1].node), (yyvsp[0].node)); } +#line 3964 "gen/gen_parser.c" break; - case 164: /* struct_elem: var_decl */ -#line 508 "src/parser.y" - { (yyval.node) = (yyvsp[0].node); } -#line 3714 "gen/gen_parser.c" + case 189: /* lambda: "[" references "]" body */ +#line 543 "src/parser.y" + { (yyval.node) = gen_lambda((yyvsp[-2].node), NULL, (yyvsp[0].node)); } +#line 3970 "gen/gen_parser.c" + break; + + case 190: /* struct_elem: var_decl */ +#line 546 "src/parser.y" + { (yyval.node) = (yyvsp[0].node); } +#line 3976 "gen/gen_parser.c" break; - case 165: /* struct_list: struct_elem ";" struct_list */ -#line 511 "src/parser.y" - { (yyval.node) = (yyvsp[-2].node); (yyvsp[-2].node)->next = (yyvsp[0].node); } -#line 3720 "gen/gen_parser.c" + case 191: /* members: struct_elem ";" members */ +#line 549 "src/parser.y" + { (yyval.node) = (yyvsp[-2].node); (yyvsp[-2].node)->next = (yyvsp[0].node); } +#line 3982 "gen/gen_parser.c" break; - case 166: /* struct_list: struct_elem ";" */ -#line 512 "src/parser.y" + case 192: /* members: struct_elem ";" */ +#line 550 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); } -#line 3726 "gen/gen_parser.c" +#line 3988 "gen/gen_parser.c" break; - case 167: /* union: "union" id "{" struct_list "}" */ -#line 515 "src/parser.y" - { + case 193: /* union: "union" id "{" members "}" */ +#line 553 "src/parser.y" + { (yyval.node) = gen_union((yyvsp[-3].node), NULL, (yyvsp[-1].node)); } -#line 3734 "gen/gen_parser.c" +#line 3996 "gen/gen_parser.c" break; - case 168: /* union: "union" id "(" generic_list ")" "{" struct_list "}" */ -#line 518 "src/parser.y" - { + case 194: /* union: "union" id "(" generics ")" "{" members "}" */ +#line 556 "src/parser.y" + { (yyval.node) = gen_union((yyvsp[-6].node), (yyvsp[-4].node), (yyvsp[-1].node)); } -#line 3742 "gen/gen_parser.c" +#line 4004 "gen/gen_parser.c" break; - case 169: /* generic: id type */ -#line 523 "src/parser.y" - { (yyval.node) = gen_alias((yyvsp[-1].node), (yyvsp[0].node)); } -#line 3748 "gen/gen_parser.c" + case 195: /* generic: id type */ +#line 561 "src/parser.y" + { (yyval.node) = gen_alias((yyvsp[-1].node), (yyvsp[0].node)); } +#line 4010 "gen/gen_parser.c" break; - case 170: /* generic_list: generic "," generic_list */ -#line 524 "src/parser.y" - { (yyval.node) = (yyvsp[-2].node); (yyval.node)->next = (yyvsp[0].node); } -#line 3754 "gen/gen_parser.c" + case 196: /* generics: generic "," generics */ +#line 564 "src/parser.y" + { (yyval.node) = (yyvsp[-2].node); (yyval.node)->next = (yyvsp[0].node); } +#line 4016 "gen/gen_parser.c" break; - case 171: /* generic_list: generic */ -#line 525 "src/parser.y" + case 197: /* generics: generic */ +#line 565 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3760 "gen/gen_parser.c" +#line 4022 "gen/gen_parser.c" break; - case 172: /* struct: "struct" id "{" struct_list "}" */ -#line 528 "src/parser.y" - { + case 198: /* struct: "struct" id "{" members "}" */ +#line 568 "src/parser.y" + { (yyval.node) = gen_struct((yyvsp[-3].node), NULL, (yyvsp[-1].node)); } -#line 3768 "gen/gen_parser.c" +#line 4030 "gen/gen_parser.c" break; - case 173: /* struct: "struct" id "(" generic_list ")" "{" struct_list "}" */ -#line 531 "src/parser.y" - { + case 199: /* struct: "struct" id "(" generics ")" "{" members "}" */ +#line 571 "src/parser.y" + { (yyval.node) = gen_struct((yyvsp[-6].node), (yyvsp[-4].node), (yyvsp[-1].node)); } -#line 3776 "gen/gen_parser.c" +#line 4038 "gen/gen_parser.c" break; - case 174: /* template_elem: id ";" */ -#line 538 "src/parser.y" - { (yyval.node) = (yyvsp[-1].node); } -#line 3782 "gen/gen_parser.c" + case 200: /* template_elem: id ";" */ +#line 578 "src/parser.y" + { (yyval.node) = (yyvsp[-1].node); } +#line 4044 "gen/gen_parser.c" break; - case 175: /* template_elem: id func_sign ";" */ -#line 539 "src/parser.y" - { (yyval.node) = gen_proc((yyvsp[-2].node), (yyvsp[-1].node), NULL); } -#line 3788 "gen/gen_parser.c" + case 201: /* template_elem: id simple_sign ";" */ +#line 579 "src/parser.y" + { (yyval.node) = gen_proc((yyvsp[-2].node), (yyvsp[-1].node), NULL); } +#line 4050 "gen/gen_parser.c" break; - case 176: /* template_elem: var_decl ";" */ -#line 540 "src/parser.y" + case 202: /* template_elem: var_decl ";" */ +#line 580 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); } -#line 3794 "gen/gen_parser.c" +#line 4056 "gen/gen_parser.c" break; - case 177: /* template_elem: union */ -#line 541 "src/parser.y" + case 203: /* template_elem: union */ +#line 581 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3800 "gen/gen_parser.c" +#line 4062 "gen/gen_parser.c" break; - case 178: /* template_list: template_elem template_list */ -#line 544 "src/parser.y" - { (yyval.node) = (yyvsp[-1].node); (yyvsp[-1].node)->next = (yyvsp[0].node); } -#line 3806 "gen/gen_parser.c" + case 204: /* template_elems: template_elem template_elems */ +#line 584 "src/parser.y" + { (yyval.node) = (yyvsp[-1].node); (yyvsp[-1].node)->next = (yyvsp[0].node); } +#line 4068 "gen/gen_parser.c" break; - case 179: /* template_list: template_elem */ -#line 545 "src/parser.y" - { (yyval.node) = (yyvsp[0].node); } -#line 3812 "gen/gen_parser.c" + case 205: /* template_elems: template_elem */ +#line 585 "src/parser.y" + { (yyval.node) = (yyvsp[0].node); } +#line 4074 "gen/gen_parser.c" break; - case 180: /* type_list: type "," type_list */ -#line 548 "src/parser.y" - { (yyval.node) = (yyvsp[-2].node); (yyvsp[-2].node)->next = (yyvsp[0].node); } -#line 3818 "gen/gen_parser.c" + case 206: /* types: type "," types */ +#line 588 "src/parser.y" + { (yyval.node) = (yyvsp[-2].node); (yyvsp[-2].node)->next = (yyvsp[0].node); } +#line 4080 "gen/gen_parser.c" break; - case 181: /* type_list: type */ -#line 549 "src/parser.y" + case 207: /* types: type */ +#line 589 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3824 "gen/gen_parser.c" +#line 4086 "gen/gen_parser.c" break; - case 182: /* type_alias: "typedef" id type */ -#line 552 "src/parser.y" - { (yyval.node) = gen_alias((yyvsp[-1].node), (yyvsp[0].node)); } -#line 3830 "gen/gen_parser.c" + case 208: /* alias: "typedef" id type */ +#line 592 "src/parser.y" + { (yyval.node) = gen_alias((yyvsp[-1].node), (yyvsp[0].node)); } +#line 4092 "gen/gen_parser.c" break; - case 183: /* type_template: "typedef" id "{" template_list "}" */ -#line 557 "src/parser.y" - { + case 209: /* template: "typedef" id "{" template_elems "}" */ +#line 597 "src/parser.y" + { (yyval.node) = gen_template((yyvsp[-3].node), (yyvsp[-1].node)); } -#line 3838 "gen/gen_parser.c" +#line 4100 "gen/gen_parser.c" break; - case 184: /* type_template: "typedef" id "{" "}" */ -#line 560 "src/parser.y" + case 210: /* template: "typedef" id "{" "}" */ +#line 600 "src/parser.y" { /* should match anything, but doesn't implement anything */ (yyval.node) = gen_template((yyvsp[-2].node), NULL); } -#line 3847 "gen/gen_parser.c" +#line 4109 "gen/gen_parser.c" break; - case 185: /* enum_val: id */ -#line 566 "src/parser.y" + case 211: /* enum_val: id */ +#line 606 "src/parser.y" { (yyval.node) = gen_val((yyvsp[0].node), NULL); } -#line 3853 "gen/gen_parser.c" +#line 4115 "gen/gen_parser.c" break; - case 186: /* enum_val: id "=" expr */ -#line 567 "src/parser.y" + case 212: /* enum_val: id "=" expr */ +#line 607 "src/parser.y" { (yyval.node) = gen_val((yyvsp[-2].node), (yyvsp[0].node)); } -#line 3859 "gen/gen_parser.c" +#line 4121 "gen/gen_parser.c" break; - case 187: /* enum_list: enum_val "," enum_list */ -#line 570 "src/parser.y" - { (yyval.node) = (yyvsp[-2].node); (yyvsp[-2].node)->next = (yyvsp[0].node); } -#line 3865 "gen/gen_parser.c" + case 213: /* enums: enum_val "," enums */ +#line 610 "src/parser.y" + { (yyval.node) = (yyvsp[-2].node); (yyvsp[-2].node)->next = (yyvsp[0].node); } +#line 4127 "gen/gen_parser.c" break; - case 188: /* enum_list: enum_val "," */ -#line 571 "src/parser.y" + case 214: /* enums: enum_val "," */ +#line 611 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); } -#line 3871 "gen/gen_parser.c" +#line 4133 "gen/gen_parser.c" break; - case 189: /* enum_list: enum_val */ -#line 572 "src/parser.y" + case 215: /* enums: enum_val */ +#line 612 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3877 "gen/gen_parser.c" +#line 4139 "gen/gen_parser.c" break; - case 190: /* enum: "enum" id ":" type "{" enum_list "}" */ -#line 575 "src/parser.y" + case 216: /* enum: "enum" id ":" type "{" enums "}" */ +#line 615 "src/parser.y" { (yyval.node) = gen_enum((yyvsp[-5].node), (yyvsp[-3].node), (yyvsp[-1].node)); } -#line 3883 "gen/gen_parser.c" +#line 4145 "gen/gen_parser.c" break; - case 191: /* enum: "enum" id "{" enum_list "}" */ -#line 576 "src/parser.y" - { + case 217: /* enum: "enum" id "{" enums "}" */ +#line 616 "src/parser.y" + { (yyval.node) = gen_enum((yyvsp[-3].node), NULL, (yyvsp[-1].node)); ast_set_flags((yyval.node), AST_FLAG_UNTYPED); } -#line 3892 "gen/gen_parser.c" +#line 4154 "gen/gen_parser.c" break; - case 192: /* top_if: "if" expr "{" unit "}" */ -#line 582 "src/parser.y" - { + case 218: /* top_if: "if" const_expr "{" unit "}" */ +#line 622 "src/parser.y" + { (yyval.node) = gen_if((yyvsp[-3].node), (yyvsp[-1].node), NULL); ast_set_flags((yyval.node), AST_FLAG_UNHYGIENIC); } -#line 3901 "gen/gen_parser.c" +#line 4163 "gen/gen_parser.c" break; - case 193: /* top_if: "if" expr "{" unit "}" "else" "{" unit "}" */ -#line 586 "src/parser.y" - { + case 219: /* top_if: "if" const_expr "{" unit "}" "else" "{" unit "}" */ +#line 626 "src/parser.y" + { (yyval.node) = gen_if((yyvsp[-7].node), (yyvsp[-5].node), (yyvsp[-1].node)); ast_set_flags((yyval.node), AST_FLAG_UNHYGIENIC); } -#line 3910 "gen/gen_parser.c" +#line 4172 "gen/gen_parser.c" break; - case 194: /* top_if: "if" expr "{" unit "}" "else" top_if */ -#line 590 "src/parser.y" - { + case 220: /* top_if: "if" const_expr "{" unit "}" "else" top_if */ +#line 630 "src/parser.y" + { (yyval.node) = gen_if((yyvsp[-5].node), (yyvsp[-3].node), (yyvsp[0].node)); ast_set_flags((yyval.node), AST_FLAG_UNHYGIENIC); } -#line 3919 "gen/gen_parser.c" +#line 4181 "gen/gen_parser.c" + break; + + case 221: /* top_var_decl: id "mut" type */ +#line 636 "src/parser.y" + { + (yyval.node) = gen_var((yyvsp[-2].node), (yyvsp[0].node), NULL); + ast_set_flags((yyval.node), AST_FLAG_MUTABLE); + } +#line 4190 "gen/gen_parser.c" + break; + + case 222: /* top_var_decl: id "const" type */ +#line 640 "src/parser.y" + { (yyval.node) = gen_var((yyvsp[-2].node), (yyvsp[0].node), NULL); } +#line 4196 "gen/gen_parser.c" + break; + + case 223: /* top_var_decl: id type */ +#line 641 "src/parser.y" + { (yyval.node) = gen_var((yyvsp[-1].node), (yyvsp[0].node), NULL); } +#line 4202 "gen/gen_parser.c" + break; + + case 224: /* top_var_init: top_var_decl "=" const_expr */ +#line 644 "src/parser.y" + { (yyval.node) = (yyvsp[-2].node); (yyvsp[-2].node)->_var.init = (yyvsp[0].node); } +#line 4208 "gen/gen_parser.c" + break; + + case 225: /* top_var_init: id "mut" "=" const_expr */ +#line 645 "src/parser.y" + { (yyval.node) = (yyvsp[-3].node); (yyvsp[-3].node)->_var.init = (yyvsp[0].node); } +#line 4214 "gen/gen_parser.c" + break; + + case 226: /* top_var_init: id "const" "=" const_expr */ +#line 646 "src/parser.y" + { (yyval.node) = (yyvsp[-3].node); (yyvsp[-3].node)->_var.init = (yyvsp[0].node); } +#line 4220 "gen/gen_parser.c" + break; + + case 227: /* top_var: top_var_decl */ +#line 649 "src/parser.y" + { (yyval.node) = (yyvsp[0].node); } +#line 4226 "gen/gen_parser.c" break; - case 195: /* top: ";" */ -#line 598 "src/parser.y" - { (yyval.node) = gen_empty(); } -#line 3925 "gen/gen_parser.c" + case 228: /* top_var: top_var_init */ +#line 650 "src/parser.y" + { (yyval.node) = (yyvsp[0].node); } +#line 4232 "gen/gen_parser.c" break; - case 196: /* top: enum */ -#line 599 "src/parser.y" + case 229: /* top: enum */ +#line 655 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3931 "gen/gen_parser.c" +#line 4238 "gen/gen_parser.c" break; - case 197: /* top: proc */ -#line 600 "src/parser.y" + case 230: /* top: proc */ +#line 656 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3937 "gen/gen_parser.c" +#line 4244 "gen/gen_parser.c" break; - case 198: /* top: struct */ -#line 601 "src/parser.y" + case 231: /* top: struct */ +#line 657 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3943 "gen/gen_parser.c" +#line 4250 "gen/gen_parser.c" break; - case 199: /* top: union */ -#line 602 "src/parser.y" + case 232: /* top: union */ +#line 658 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3949 "gen/gen_parser.c" +#line 4256 "gen/gen_parser.c" break; - case 200: /* top: macro */ -#line 603 "src/parser.y" + case 233: /* top: macro */ +#line 659 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3955 "gen/gen_parser.c" +#line 4262 "gen/gen_parser.c" break; - case 201: /* top: "const" top_if */ -#line 604 "src/parser.y" - { (yyval.node) = (yyvsp[0].node); ast_set_flags((yyval.node), AST_FLAG_CONST); } -#line 3961 "gen/gen_parser.c" + case 234: /* top: top_if */ +#line 660 "src/parser.y" + { (yyval.node) = (yyvsp[0].node); ast_set_flags((yyval.node), AST_FLAG_CONST); } +#line 4268 "gen/gen_parser.c" break; - case 202: /* top: import ";" */ -#line 605 "src/parser.y" - { (yyval.node) = (yyvsp[-1].node); } -#line 3967 "gen/gen_parser.c" + case 235: /* top: top_var */ +#line 661 "src/parser.y" + { (yyval.node) = (yyvsp[0].node); ast_set_flags((yyval.node), AST_FLAG_CONST); } +#line 4274 "gen/gen_parser.c" break; - case 203: /* top: type_alias ";" */ -#line 606 "src/parser.y" - { (yyval.node) = (yyvsp[-1].node); } -#line 3973 "gen/gen_parser.c" + case 236: /* top: import */ +#line 662 "src/parser.y" + { (yyval.node) = (yyvsp[0].node); } +#line 4280 "gen/gen_parser.c" break; - case 204: /* top: type_template */ -#line 607 "src/parser.y" - { (yyval.node) = (yyvsp[0].node); } -#line 3979 "gen/gen_parser.c" + case 237: /* top: alias */ +#line 663 "src/parser.y" + { (yyval.node) = (yyvsp[0].node); } +#line 4286 "gen/gen_parser.c" + break; + + case 238: /* top: template */ +#line 664 "src/parser.y" + { (yyval.node) = (yyvsp[0].node); } +#line 4292 "gen/gen_parser.c" break; - case 205: /* top: "pub" enum */ -#line 608 "src/parser.y" + case 239: /* top: "pub" enum */ +#line 665 "src/parser.y" { (yyval.node) = (yyvsp[0].node); ast_set_flags((yyvsp[0].node), AST_FLAG_PUBLIC); } -#line 3985 "gen/gen_parser.c" +#line 4298 "gen/gen_parser.c" break; - case 206: /* top: "pub" struct */ -#line 609 "src/parser.y" + case 240: /* top: "pub" struct */ +#line 666 "src/parser.y" { (yyval.node) = (yyvsp[0].node); ast_set_flags((yyvsp[0].node), AST_FLAG_PUBLIC); } -#line 3991 "gen/gen_parser.c" +#line 4304 "gen/gen_parser.c" break; - case 207: /* top: "pub" union */ -#line 610 "src/parser.y" + case 241: /* top: "pub" union */ +#line 667 "src/parser.y" { (yyval.node) = (yyvsp[0].node); ast_set_flags((yyvsp[0].node), AST_FLAG_PUBLIC); } -#line 3997 "gen/gen_parser.c" +#line 4310 "gen/gen_parser.c" break; - case 208: /* top: "pub" proc */ -#line 611 "src/parser.y" + case 242: /* top: "pub" proc */ +#line 668 "src/parser.y" { (yyval.node) = (yyvsp[0].node); ast_set_flags((yyvsp[0].node), AST_FLAG_PUBLIC); } -#line 4003 "gen/gen_parser.c" +#line 4316 "gen/gen_parser.c" break; - case 209: /* top: "pub" macro */ -#line 612 "src/parser.y" + case 243: /* top: "pub" macro */ +#line 669 "src/parser.y" { (yyval.node) = (yyvsp[0].node); ast_set_flags((yyvsp[0].node), AST_FLAG_PUBLIC); } -#line 4009 "gen/gen_parser.c" +#line 4322 "gen/gen_parser.c" break; - case 210: /* top: "pub" import ";" */ -#line 613 "src/parser.y" - { (yyval.node) = (yyvsp[-1].node); ast_set_flags((yyvsp[-1].node), AST_FLAG_PUBLIC); } -#line 4015 "gen/gen_parser.c" + case 244: /* top: "pub" import */ +#line 670 "src/parser.y" + { (yyval.node) = (yyvsp[0].node); ast_set_flags((yyvsp[0].node), AST_FLAG_PUBLIC); } +#line 4328 "gen/gen_parser.c" break; - case 211: /* top: "pub" type_alias ";" */ -#line 614 "src/parser.y" - { (yyval.node) = (yyvsp[-1].node); ast_set_flags((yyvsp[-1].node), AST_FLAG_PUBLIC); } -#line 4021 "gen/gen_parser.c" + case 245: /* top: "pub" alias */ +#line 671 "src/parser.y" + { (yyval.node) = (yyvsp[0].node); ast_set_flags((yyvsp[0].node), AST_FLAG_PUBLIC); } +#line 4334 "gen/gen_parser.c" break; - case 212: /* top: "pub" type_template */ -#line 615 "src/parser.y" - { (yyval.node) = (yyvsp[0].node); ast_set_flags((yyvsp[0].node), AST_FLAG_PUBLIC); } -#line 4027 "gen/gen_parser.c" + case 246: /* top: "pub" template */ +#line 672 "src/parser.y" + { (yyval.node) = (yyvsp[0].node); ast_set_flags((yyvsp[0].node), AST_FLAG_PUBLIC); } +#line 4340 "gen/gen_parser.c" break; - case 213: /* top: var ";" */ -#line 616 "src/parser.y" - { (yyval.node) = (yyvsp[-1].node); } -#line 4033 "gen/gen_parser.c" + case 247: /* top: "pub" top_var */ +#line 673 "src/parser.y" + { + (yyval.node) = (yyvsp[0].node); ast_set_flags((yyvsp[0].node), AST_FLAG_PUBLIC); + ast_set_flags((yyval.node), AST_FLAG_CONST); + } +#line 4349 "gen/gen_parser.c" break; - case 214: /* top: "pub" var ";" */ -#line 617 "src/parser.y" - { (yyval.node) = (yyvsp[-1].node); ast_set_flags((yyvsp[-1].node), AST_FLAG_PUBLIC); } -#line 4039 "gen/gen_parser.c" + case 248: /* top: ";" */ +#line 677 "src/parser.y" + { (yyval.node) = gen_empty(); } +#line 4355 "gen/gen_parser.c" break; - case 215: /* top: error */ -#line 618 "src/parser.y" + case 249: /* top: error */ +#line 678 "src/parser.y" { (yyval.node) = gen_empty(); parser->failed = true; @@ -4052,30 +4368,30 @@ yyreduce: } yyclearin; yyerrok; - } -#line 4057 "gen/gen_parser.c" + } +#line 4373 "gen/gen_parser.c" break; - case 216: /* unit: top */ -#line 633 "src/parser.y" - { (yyval.node) = (yyvsp[0].node); } -#line 4063 "gen/gen_parser.c" + case 250: /* unit: top */ +#line 693 "src/parser.y" + { (yyval.node) = (yyvsp[0].node); } +#line 4379 "gen/gen_parser.c" break; - case 217: /* unit: top unit */ -#line 634 "src/parser.y" + case 251: /* unit: top unit */ +#line 694 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); (yyvsp[-1].node)->next = (yyvsp[0].node); } -#line 4069 "gen/gen_parser.c" +#line 4385 "gen/gen_parser.c" break; - case 218: /* input: unit */ -#line 637 "src/parser.y" - { parser->tree = (yyvsp[0].node); } -#line 4075 "gen/gen_parser.c" + case 252: /* input: unit */ +#line 697 "src/parser.y" + { parser->tree = (yyvsp[0].node); } +#line 4391 "gen/gen_parser.c" break; -#line 4079 "gen/gen_parser.c" +#line 4395 "gen/gen_parser.c" default: break; } @@ -4304,5 +4620,5 @@ yyreturnlab: return yyresult; } -#line 640 "src/parser.y" +#line 700 "src/parser.y" diff --git a/gen/gen_parser.h b/gen/gen_parser.h index 38a4d29..fee61c0 100644 --- a/gen/gen_parser.h +++ b/gen/gen_parser.h @@ -58,81 +58,84 @@ extern int yydebug; FLOAT = 259, /* FLOAT */ STRING = 260, /* STRING */ ID = 261, /* ID */ - SQUOTE = 262, /* "'" */ - TO = 263, /* "=" */ - ELLIPSIS = 264, /* "..." */ - SEMICOLON = 265, /* ";" */ - COLON = 266, /* ":" */ - BANG = 267, /* "!" */ - TYPEOF = 268, /* "typeof" */ - SIZEOF = 269, /* "sizeof" */ - PASTE = 270, /* "##" */ - STAR = 271, /* "*" */ - DIV = 272, /* "/" */ - REM = 273, /* "%" */ - MINUS = 274, /* "-" */ - PLUS = 275, /* "+" */ - POW = 276, /* "^^" */ - XOR = 277, /* "^" */ - AND = 278, /* "&" */ - OR = 279, /* "|" */ - LAND = 280, /* "&&" */ - LOR = 281, /* "||" */ - TILDE = 282, /* "~" */ - LT = 283, /* "<" */ - GT = 284, /* ">" */ - LE = 285, /* "<=" */ - GE = 286, /* ">=" */ - NE = 287, /* "!=" */ - EQ = 288, /* "==" */ - LSHIFT = 289, /* "<<" */ - RSHIFT = 290, /* ">>" */ - PLUSSELF = 291, /* "+=" */ - MINUSSELF = 292, /* "-=" */ - STARSELF = 293, /* "*=" */ - DIVSELF = 294, /* "/=" */ - REMSELF = 295, /* "%=" */ - XORSELF = 296, /* "^=" */ - POWSELF = 297, /* "^^=" */ - ANDSELF = 298, /* "&=" */ - ORSELF = 299, /* "|=" */ - LSHIFTSELF = 300, /* "<<=" */ - RSHIFTSELF = 301, /* ">>=" */ - AT = 302, /* "@" */ - COMMA = 303, /* "," */ - PUB = 304, /* "pub" */ - STRUCT = 305, /* "struct" */ - UNION = 306, /* "union" */ - TYPEDEF = 307, /* "typedef" */ - IMPORT = 308, /* "import" */ - DEFER = 309, /* "defer" */ - GOTO = 310, /* "goto" */ - EMBED = 311, /* "embed" */ - IF = 312, /* "if" */ - ELSE = 313, /* "else" */ - BREAK = 314, /* "break" */ - CONTINUE = 315, /* "continue" */ - SWITCH = 316, /* "switch" */ - CASE = 317, /* "case" */ - FOR = 318, /* "for" */ - WHILE = 319, /* "while" */ - DO = 320, /* "do" */ - MUT = 321, /* "mut" */ - RETURN = 322, /* "return" */ - CONST = 323, /* "const" */ - EXTERN = 324, /* "extern" */ - ENUM = 325, /* "enum" */ - DEFINE = 326, /* "define" */ - LPAREN = 327, /* "(" */ - RPAREN = 328, /* ")" */ - LBRACE = 329, /* "{" */ - RBRACE = 330, /* "}" */ - LBRACKET = 331, /* "[" */ - RBRACKET = 332, /* "]" */ - AS = 333, /* "as" */ - DOT = 334, /* "." */ - SCOPE = 335, /* "::" */ - FATARROW = 336 /* "=>" */ + APPLY = 262, /* APPLY */ + QUESTION = 263, /* "?" */ + SQUOTE = 264, /* "'" */ + TO = 265, /* "=" */ + ELLIPSIS = 266, /* "..." */ + SEMICOLON = 267, /* ";" */ + COLON = 268, /* ":" */ + BANG = 269, /* "!" */ + TYPEOF = 270, /* "typeof" */ + SIZEOF = 271, /* "sizeof" */ + PASTE = 272, /* "##" */ + STAR = 273, /* "*" */ + DIV = 274, /* "/" */ + REM = 275, /* "%" */ + MINUS = 276, /* "-" */ + PLUS = 277, /* "+" */ + POW = 278, /* "^^" */ + XOR = 279, /* "^" */ + AND = 280, /* "&" */ + OR = 281, /* "|" */ + LAND = 282, /* "&&" */ + LOR = 283, /* "||" */ + TILDE = 284, /* "~" */ + LT = 285, /* "<" */ + GT = 286, /* ">" */ + LE = 287, /* "<=" */ + GE = 288, /* ">=" */ + NE = 289, /* "!=" */ + EQ = 290, /* "==" */ + LSHIFT = 291, /* "<<" */ + RSHIFT = 292, /* ">>" */ + PLUSSELF = 293, /* "+=" */ + MINUSSELF = 294, /* "-=" */ + STARSELF = 295, /* "*=" */ + DIVSELF = 296, /* "/=" */ + REMSELF = 297, /* "%=" */ + XORSELF = 298, /* "^=" */ + POWSELF = 299, /* "^^=" */ + ANDSELF = 300, /* "&=" */ + ORSELF = 301, /* "|=" */ + LSHIFTSELF = 302, /* "<<=" */ + RSHIFTSELF = 303, /* ">>=" */ + AT = 304, /* "@" */ + COMMA = 305, /* "," */ + PUB = 306, /* "pub" */ + STRUCT = 307, /* "struct" */ + UNION = 308, /* "union" */ + TYPEDEF = 309, /* "typedef" */ + IMPORT = 310, /* "import" */ + DEFER = 311, /* "defer" */ + GOTO = 312, /* "goto" */ + EMBED = 313, /* "embed" */ + IF = 314, /* "if" */ + ELSE = 315, /* "else" */ + BREAK = 316, /* "break" */ + CONTINUE = 317, /* "continue" */ + DEFAULT = 318, /* "default" */ + SWITCH = 319, /* "switch" */ + CASE = 320, /* "case" */ + FOR = 321, /* "for" */ + WHILE = 322, /* "while" */ + DO = 323, /* "do" */ + MUT = 324, /* "mut" */ + RETURN = 325, /* "return" */ + CONST = 326, /* "const" */ + EXTERN = 327, /* "extern" */ + ENUM = 328, /* "enum" */ + DEFINE = 329, /* "define" */ + LPAREN = 330, /* "(" */ + RPAREN = 331, /* ")" */ + LBRACE = 332, /* "{" */ + RBRACE = 333, /* "}" */ + LBRACKET = 334, /* "[" */ + RBRACKET = 335, /* "]" */ + AS = 336, /* "as" */ + DOT = 337, /* "." */ + SCOPE = 338, /* "::" */ + FATARROW = 339 /* "=>" */ }; typedef enum yytokentype yytoken_kind_t; #endif @@ -141,14 +144,14 @@ extern int yydebug; #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED union YYSTYPE { -#line 27 "src/parser.y" +#line 28 "src/parser.y" struct ast_node *node; long long integer; double dbl; char *str; -#line 152 "gen/gen_parser.h" +#line 155 "gen/gen_parser.h" }; typedef union YYSTYPE YYSTYPE; diff --git a/src/ast.c b/src/ast.c index 2719dd3..3ddf7c4 100644 --- a/src/ast.c +++ b/src/ast.c @@ -411,7 +411,7 @@ struct ast_node *gen_case(struct ast_node *cond, struct ast_node *body) n->_case.body = body; /* TODO: where should I check the fallthrough flag? In the * actualization stage, I guess */ - n->loc = cond->loc; + n->loc = body->loc; return n; } @@ -461,7 +461,8 @@ struct ast_node *gen_type(enum ast_type_kind kind, struct ast_node *id, case AST_TYPE_ARR: n->_type.arr.size = expr; - n->loc = expr->loc; + if (expr) + n->loc = expr->loc; break; case AST_TYPE_TYPEOF: @@ -682,7 +683,7 @@ struct ast_node *gen_lambda(struct ast_node *captures, n->_lambda.captures = captures; n->_lambda.sign = type; n->_lambda.body = body; - n->loc = type->loc; + n->loc = captures->loc; return n; } diff --git a/src/lexer.l b/src/lexer.l index c30e802..ac8ed67 100644 --- a/src/lexer.l +++ b/src/lexer.l @@ -40,6 +40,7 @@ DECF [+-]?[0-9]+[.]([eE]?[+-]?[0-9]+)?[fF]? FLOAT {HEXF}|{DECF}|inf|nan ID [_a-zA-Z][_a-zA-Z0-9]* +APPLY {ID}[[:space:]]*! STRING \"(\\.|[^"\\])*\" @@ -60,8 +61,8 @@ STRING \"(\\.|[^"\\])*\" "*"+ {} [^/*\n]+ {} - [/] {} - \n {} + [/] {} + \n {} } "::" {return SCOPE;} @@ -119,6 +120,7 @@ STRING \"(\\.|[^"\\])*\" return INT; } +"?" {return QUESTION;} "'" {return SQUOTE;} "&" {return AND;} @@ -178,6 +180,7 @@ STRING \"(\\.|[^"\\])*\" "define" {return DEFINE;} "break" {return BREAK;} "continue" {return CONTINUE;} +"default" {return DEFAULT;} {STRING} { /* seems risky, I know, but letting the parser choose when to allocate a @@ -201,6 +204,15 @@ STRING \"(\\.|[^"\\])*\" return ID; } +{APPLY} { + /* strip trailing '!' */ + char *s = yytext + strlen(yytext); + s[-1] = '\0'; + + yylval->str = yytext; + return APPLY; +} + [[:space:]]+ {/* skip whitespace */} diff --git a/src/parser.y b/src/parser.y index a7a3e4a..22a6bf8 100644 --- a/src/parser.y +++ b/src/parser.y @@ -20,6 +20,7 @@ %define parse.trace %define parse.error verbose %define api.pure full +%define lr.type ielr %lex-param {void *scanner} {struct parser *parser} %parse-param {void *scanner} {struct parser* parser} @@ -35,7 +36,9 @@ %token FLOAT %token STRING %token ID +%token APPLY +%token QUESTION "?" %token SQUOTE "'" %token TO "=" %token ELLIPSIS "..." @@ -92,6 +95,7 @@ %token ELSE "else" %token BREAK "break" %token CONTINUE "continue" +%token DEFAULT "default" %token SWITCH "switch" %token CASE "case" %token FOR "for" @@ -135,43 +139,55 @@ %left "::" /* why doesn't bison allow <*> for %nterm? would be so much easier */ -%nterm import binary_op unary_op arg arg_list decl_list call expr -%nterm while do_while statement statement_list body macro_list macro -%nterm expr_list init_expr expr_if if for case case_list switch const -%nterm func_sign variadic_sign type var_decl var -%nterm var_init proc lambda template_elem template_list type_list -%nterm type_alias type_template enum_val enum_list enum top unit id -%nterm embed param_decl union struct struct_list struct_elem +%nterm import binop unop arg args decls expr +%nterm while do_while statement statements body references macro +%nterm exprs if for case cases switch const +%nterm simple_sign func_sign type var_decl var +%nterm var_init proc lambda template_elem template_elems types +%nterm alias template enum_val enums enum top unit id +%nterm embed param_decl union struct members struct_elem %nterm top_if const_if const_for defer goto assign -%nterm struct_construct struct_inits struct_init cond -%nterm generic generic_list +%nterm construct construct_args construct_arg +%nterm generic generics statelet apply -%destructor {} FLOAT INT STRING ID +/* special handling for top level variables */ +%nterm top_var_decl top_var_init top_var + +/* constant operations */ +%nterm const_expr const_unop const_binop + +%destructor {} FLOAT INT STRING ID APPLY %destructor { destroy_ast_tree($$); } <*> %start input; %% -id: ID { +id + : ID { $$ = gen_id(strdup($1)); $$->loc = to_src_loc(&yylloc); } - ; -var: var_decl { $$ = $1; } +apply + : APPLY { + $$ = gen_id(strdup($1)); + $$->loc = to_src_loc(&yylloc); + } + +var + : var_decl { $$ = $1; } | var_init { $$ = $1; } - ; -embed: "embed" "(" STRING ")" { $$ = gen_embed(clone_string($3)); } - ; +embed + : "embed" "(" STRING ")" { $$ = gen_embed(clone_string($3)); } -import: "import" STRING { $$ = gen_import(clone_string($2)); } - ; +import + : "import" STRING { $$ = gen_import(clone_string($2)); } -assign: expr "=" expr { $$ = gen_assign($1, $3); } - | expr "=" struct_construct { $$ = gen_assign($1, $3); } - ; +assign + : expr "=" expr { $$ = gen_assign($1, $3); } -binary_op: expr "+" expr { $$ = gen_binop(AST_ADD, $1, $3); } +binop + : expr "+" expr { $$ = gen_binop(AST_ADD, $1, $3); } | expr "-" expr { $$ = gen_binop(AST_SUB, $1, $3); } | expr "*" expr { $$ = gen_binop(AST_MUL, $1, $3); } | expr "/" expr { $$ = gen_binop(AST_DIV, $1, $3); } @@ -204,45 +220,74 @@ binary_op: expr "+" expr { $$ = gen_binop(AST_ADD, $1, $3); } | expr ">=" expr { $$ = gen_binop(AST_GE, $1, $3); } | expr "!=" expr { $$ = gen_binop(AST_NE, $1, $3); } | expr "==" expr { $$ = gen_binop(AST_EQ, $1, $3); } - ; -unary_op: "-" expr { $$ = gen_unop(AST_NEG, $2); } +unop + : "-" expr { $$ = gen_unop(AST_NEG, $2); } | "!" expr { $$ = gen_unop(AST_LNOT, $2); } | "&" expr { $$ = gen_unop(AST_REF, $2); } | "'" expr { $$ = gen_unop(AST_DEREF, $2); } | "~" expr { $$ = gen_unop(AST_NOT, $2); } - ; -arg: "&" var_decl { $$ = gen_unop(AST_REF, $2); } +arg + : "&" var_decl { $$ = gen_unop(AST_REF, $2); } | var_decl { $$ = $1; } - | init_expr { $$ = $1; } - ; + | expr { $$ = $1; } -arg_list: arg "," arg_list { $$ = $1; $1->next = $3; } +args + : arg "," args { $$ = $1; $1->next = $3; } | arg { $$ = $1; } - ; -param_decl: type { $$ = gen_var(NULL, $1, NULL); } +param_decl + : type { $$ = gen_var(NULL, $1, NULL); } -decl_list: var_decl "," decl_list { $$ = $1; $1->next = $3; } - | param_decl "," decl_list { $$ = $1; $1->next = $3; } +decls + : var_decl "," decls { $$ = $1; $1->next = $3; } + | param_decl "," decls { $$ = $1; $1->next = $3; } | var_decl { $$ = $1; } | param_decl { $$ = $1; } - ; - -/* call also works for arrays in this case */ -call: id "(" arg_list ")" { $$ = gen_call($1, $3); } - | id "(" ")" { $$ = gen_call($1, NULL); } - ; - -defer: "defer" "(" expr ")" { $$ = gen_defer($3); } - ; -/* TODO: concatenate multiple strings together */ -expr: id { $$ = $1; } +defer + : "defer" expr { $$ = gen_defer($2); } + +const_binop + : const_expr "+" const_expr { $$ = gen_binop(AST_ADD, $1, $3); } + | const_expr "-" const_expr { $$ = gen_binop(AST_SUB, $1, $3); } + | const_expr "*" const_expr { $$ = gen_binop(AST_MUL, $1, $3); } + | const_expr "/" const_expr { $$ = gen_binop(AST_DIV, $1, $3); } + | const_expr "%" const_expr { $$ = gen_binop(AST_REM, $1, $3); } + | const_expr "^" const_expr { $$ = gen_binop(AST_XOR, $1, $3); } + | const_expr "^^" const_expr { $$ = gen_binop(AST_POW, $1, $3); } + | const_expr "&" const_expr { $$ = gen_binop(AST_AND, $1, $3); } + | const_expr "&&" const_expr { $$ = gen_binop(AST_LAND, $1, $3); } + | const_expr "|" const_expr { $$ = gen_binop(AST_OR, $1, $3); } + | const_expr "||" const_expr { $$ = gen_binop(AST_LOR, $1, $3); } + | const_expr "<<" const_expr { $$ = gen_binop(AST_LSHIFT, $1, $3); } + | const_expr ">>" const_expr { $$ = gen_binop(AST_RSHIFT, $1, $3); } + | const_expr "<" const_expr { $$ = gen_binop(AST_LT, $1, $3); } + | const_expr ">" const_expr { $$ = gen_binop(AST_GT, $1, $3); } + | const_expr "<=" const_expr { $$ = gen_binop(AST_LE, $1, $3); } + | const_expr ">=" const_expr { $$ = gen_binop(AST_GE, $1, $3); } + | const_expr "!=" const_expr { $$ = gen_binop(AST_NE, $1, $3); } + | const_expr "==" const_expr { $$ = gen_binop(AST_EQ, $1, $3); } + +const_unop + : "-" const_expr { $$ = gen_unop(AST_NEG, $2); } + | "!" const_expr { $$ = gen_unop(AST_LNOT, $2); } + | "~" const_expr { $$ = gen_unop(AST_NOT, $2); } + +const_expr + : "(" const_expr ")" { $$ = $2; } + | id { $$ = $1; } + | INT { $$ = gen_int($1); } + | FLOAT { $$ = gen_float($1); } + | const_binop { $$ = $1; } + | const_unop { $$ = $1; } + +/* TODO: concatenate multiple strings together? Or is that the lexer's job? */ +expr + : id { $$ = $1; } | expr "." id { $$ = gen_dot($1, $3); } | "..." id { $$ = $2; } - | "@" { $$ = gen_last(); } | INT { $$ = gen_int($1); $$->loc = to_src_loc(&yylloc); } | FLOAT { $$ = gen_float($1); $$->loc = to_src_loc(&yylloc); } | STRING { @@ -251,10 +296,13 @@ expr: id { $$ = $1; } } | "(" expr ")" { $$ = $2; } | assign { $$ = $1; } - | call { $$ = $1; } - | defer { $$ = $1; } - | binary_op { $$ = $1; } - | unary_op { $$ = $1; } + | expr "(" args ")" { $$ = gen_call($1, $3); } + | expr "(" ")" { $$ = gen_call($1, NULL); } + | expr "[" expr "]" { $$ = gen_call($1, $3); /** @todo add arr access */} + | apply "(" args ")" { $$ = gen_call($1, $3); /* macro call */} + | apply "(" ")" { $$ = gen_call($1, NULL); /* macro call */} + | binop { $$ = $1; } + | unop { $$ = $1; } | "(" var_init ")" { $$ = $2; } | "sizeof" expr { $$ = gen_sizeof($2); } | expr "as" type { $$ = gen_cast($1, $3); } @@ -262,39 +310,42 @@ expr: id { $$ = $1; } | "as" type { $$ = gen_as($2); } | embed { $$ = $1; } | lambda { $$ = $1; } - ; + | if { $$ = $1; } + | switch { $$ = $1; } + | construct { $$ = $1; } + | "(" body ")" { $$ = $2; } -while: "while" expr body { $$ = gen_while($2, $3); } - ; +while + : "while" expr body { $$ = gen_while($2, $3); } -do_while: "do" body "while" expr ";" { +do_while + : "do" body "while" expr ";" { $$ = gen_while($2, $4); ast_set_flags($$, AST_FLAG_DELAYED); } - ; -goto: "goto" id { $$ = gen_goto(gen_label($2)); } +goto + : "goto" id { $$ = gen_goto(gen_label($2)); } -statement: expr ";" { $$ = $1; } - | "return" init_expr ";" { $$ = gen_return($2); } - | "return" ";" { $$ = gen_return(NULL); } - | "break" ";" { $$ = gen_ctrl(AST_CTRL_BREAK, to_src_loc(&yylloc)); } - | "continue" ";" { $$ = gen_ctrl(AST_CTRL_CONTINUE, - to_src_loc(&yylloc)); } - | import ";" { $$ = $1; } - | var ";" { $$ = $1; } - | if { $$ = $1; } - | goto ";"{ $$ = $1; } +statelet + : expr { $$ = $1; } + | "return" expr { $$ = gen_return($2); } + | "return" { $$ = gen_return(NULL); } + | "break" { $$ = gen_ctrl(AST_CTRL_BREAK, to_src_loc(&yylloc)); } + | "continue" { $$ = gen_ctrl(AST_CTRL_CONTINUE, to_src_loc(&yylloc)); } + | import { $$ = $1; } + | var { $$ = $1; } + | goto { $$ = $1; } | id ":" { $$ = gen_label($1); } | for { $$ = $1; } | const { $$ = $1; } | while { $$ = $1; } | do_while { $$ = $1; } - | switch { $$ = $1; } | macro { $$ = $1; } | struct { $$ = $1; } - | type_alias ";" { $$ = $1; } - | type_template { $$ = $1; } + | alias { $$ = $1; } + | template { $$ = $1; } + | defer { $$ = $1; } | enum { $$ = $1; } | body { $$ = $1; } | ";" { $$ = gen_empty(); } @@ -312,25 +363,30 @@ statement: expr ";" { $$ = $1; } yyclearin; yyerrok; } - ; -statement_list: statement statement_list { $$ = $1; $1->next = $2; } +statement + : statelet ";" { $$ = $1; } + +statements + : statement statements { $$ = $1; $1->next = $2; } | statement { $$ = $1; } - ; + | statelet { $$ = $1; } -body: "{" statement_list "}" { $$ = gen_block($2); } +body + : "{" statements "}" { $$ = gen_block($2); } | "{" "}" { $$ = gen_block(gen_empty()); } - ; -macro_list: id "," macro_list { $$ = $1; $$->next = $3; } +references + : id "," references { $$ = $1; $$->next = $3; } | id { $$ = $1; } - ; -macro: "define" id "(" macro_list ")" body { +/* TODO: rethink how macros play into everyting */ +macro + : "define" id "(" references ")" body { $$ = gen_macro($2, $4, $6); ast_set_flags($6, AST_FLAG_UNHYGIENIC); } - | "define" id "(" macro_list "..." id ")" body { + | "define" id "(" references "..." id ")" body { /* TODO: the location data of the variadic ID is way off */ ast_append($4, $6); $$ = gen_macro($2, $4, $8); @@ -341,129 +397,110 @@ macro: "define" id "(" macro_list ")" body { $$ = gen_macro($2, NULL, $5); ast_set_flags($5, AST_FLAG_UNHYGIENIC); } - ; -expr_list: expr "," expr_list { $$ = $1; $1->next = $3; } +exprs + : expr "," exprs { $$ = $1; $1->next = $3; } | expr { $$ = $1; } - ; -struct_init: init_expr { $$ = $1; } - | "." id "=" init_expr { +construct_arg + : expr { $$ = $1; } + | "." id "=" expr { $$ = gen_var($2, NULL, $4); ast_set_flags($$, AST_FLAG_MEMBER); } - ; -struct_inits: struct_init "," struct_inits { $$ = $1; $1->next = $3; } - | struct_init { $$ = $1; } - ; +construct_args + : construct_arg "," construct_args { $$ = $1; $1->next = $3; } + | construct_arg { $$ = $1; } -struct_construct: "{" struct_inits "}" { $$ = gen_init($2); } - ; +construct + : "!" "{" construct_args "}" { $$ = gen_init($3); } -init_expr: expr { $$ = $1; } - | expr_if { $$ = $1; } - | struct_construct { $$ = $1; } - | struct_construct "as" type { $$ = gen_cast($1, $3); } - ; +if + : "if" expr body { $$ = gen_if($2, $3, NULL); } + | "if" expr body "else" body { $$ = gen_if($2, $3, $5); } + | "if" expr body "else" if { $$ = gen_if($2, $3, $5); } -cond: expr { $$ = $1; } - | "(" expr_if ")" { $$ = $2; } - /* note no struct construct */ - ; +/* todo how about leaving out some parts? */ +for + : "for" arg ";" expr ";" expr body { $$ = gen_for($2, $4, $6, $7); } -expr_if: "if" cond body "else" body { $$ = gen_if($2, $3, $5); } - | "if" cond body "else" expr_if { $$ = gen_if($2, $3, $5); } - ; - -if: "if" cond body { $$ = gen_if($2, $3, NULL); } - | "if" cond body "else" body { $$ = gen_if($2, $3, $5); } - | "if" cond body "else" if { $$ = gen_if($2, $3, $5); } - ; - -for: "for" arg ";" expr ";" expr body { $$ = gen_for($2, $4, $6, $7); } - ; - -case: "case" expr ":" statement_list { $$ = gen_case($2, $4); } - ; +case + : "case" const_expr ":" statements { + $$ = gen_case($2, $4); } + | "default" ":" statements { + $$ = gen_case(NULL, $3); + } -case_list: case case_list { $$ = $1; $1->next = $2; } +cases + : case cases { $$ = $1; $1->next = $2; } | case { $$ = $1; } - ; -switch: "switch" expr "{" case_list "}" { $$ = gen_switch($2, $4); } - ; +switch + : "switch" expr "{" cases "}" { $$ = gen_switch($2, $4); } -const_for: "for" id ":" expr_list body { +/* could there be a use case for number based iteration? */ +const_for + : "for" id ":" exprs body { /* TODO: should id be a separate rule? */ $$ = gen_for($2, NULL, $4, $5); ast_set_flags($5, AST_FLAG_UNHYGIENIC); } - ; -const_if: "if" expr body { +const_if + : "if" const_expr body { $$ = gen_if($2, $3, NULL); ast_set_flags($3, AST_FLAG_UNHYGIENIC); } - | "if" expr body "else" body { + | "if" const_expr body "else" body { $$ = gen_if($2, $3, $5); ast_set_flags($3, AST_FLAG_UNHYGIENIC); ast_set_flags($5, AST_FLAG_UNHYGIENIC); } - | "if" expr body "else" const_if { + | "if" const_expr body "else" const_if { $$ = gen_if($2, $3, $5); ast_set_flags($3, AST_FLAG_UNHYGIENIC); } - ; /* maybe I should add a separate gen_iter_for or something and just support * iterator for? */ -const: "const" const_if { $$ = $2; ast_set_flags($$, AST_FLAG_CONST); - } - | "const" const_for { $$ = $2; ast_set_flags($$, AST_FLAG_CONST); - } - ; +const + : "const" const_if { $$ = $2; ast_set_flags($$, AST_FLAG_CONST); } + | "const" const_for { $$ = $2; ast_set_flags($$, AST_FLAG_CONST); } -func_sign: "(" decl_list "=>" type ")" { +simple_sign + : "(" decls "=>" type ")" { $$ = gen_type(AST_TYPE_SIGN, NULL, $2, $4); } - | "(" decl_list ")" { $$ = gen_type(AST_TYPE_SIGN, NULL, $2, NULL); - } - | "(" decl_list "=>" ")" { $$ = gen_type(AST_TYPE_SIGN, NULL, $2, NULL); - } - | "(" "=>" type ")" { $$ = gen_type(AST_TYPE_SIGN, NULL, NULL, $3); - } - | "(" ")" { $$ = gen_type(AST_TYPE_SIGN, NULL, NULL, NULL); - } - ; - -variadic_sign: func_sign { $$ = $1; } - | "(" decl_list "..." id "=>" type ")" { + | "(" decls ")" { $$ = gen_type(AST_TYPE_SIGN, NULL, $2, NULL); } + | "(" decls "=>" ")" { $$ = gen_type(AST_TYPE_SIGN, NULL, $2, NULL); } + | "(" "=>" type ")" { $$ = gen_type(AST_TYPE_SIGN, NULL, NULL, $3); } + | "(" ")" { $$ = gen_type(AST_TYPE_SIGN, NULL, NULL, NULL); } + +func_sign + : simple_sign { $$ = $1; } + | "(" decls "..." id "=>" type ")" { ast_append($2, $4); $$ = gen_type(AST_TYPE_SIGN, NULL, $2, $6); ast_set_flags($$, AST_FLAG_VARIADIC); } - ; -type: id { $$ = gen_type(AST_TYPE_ID, $1, NULL, NULL); } - | "'" func_sign { +type + : id { $$ = gen_type(AST_TYPE_ID, $1, NULL, NULL); } + | "@" simple_sign { $$ = gen_type(AST_TYPE_POINTER, NULL, NULL, NULL); $$->_type.next = $2; } - | id "(" type_list ")" { + | apply "[" types "]" { $$ = gen_type(AST_TYPE_GENERIC, $1, $3, NULL); } | "'" type { $$ = gen_type(AST_TYPE_POINTER, NULL, NULL, NULL); $$->_type.next = $2; } - | "[" "]" type { - $$ = gen_type(AST_TYPE_ARR, NULL, NULL, NULL); - $$->_type.next = $3; - } - | "[" expr "]" type { - $$ = gen_type(AST_TYPE_ARR, NULL, $2, NULL); - $$->_type.next = $4; + | "'" "[" const_expr "]" type { + $$ = gen_type(AST_TYPE_ARR, NULL, $3, NULL); + $$->_type.next = $5; } | "typeof" expr { $$ = gen_type(AST_TYPE_TYPEOF, NULL, $2, NULL); @@ -471,150 +508,173 @@ type: id { $$ = gen_type(AST_TYPE_ID, $1, NULL, NULL); } | id "::" type { $$ = gen_type(AST_TYPE_MEMBER, $1, $3, NULL); } - ; -var_decl: id "mut" type { +var_decl + : id "mut" type { $$ = gen_var($1, $3, NULL); ast_set_flags($$, AST_FLAG_MUTABLE); } | id "const" type { $$ = gen_var($1, $3, NULL); } | id type { $$ = gen_var($1, $2, NULL); } - ; -var_init: var_decl "=" init_expr { $$ = $1; $1->_var.init = $3; } - | id "mut" "=" init_expr { +var_init + : var_decl "=" expr { $$ = $1; $1->_var.init = $3; } + | id "mut" "=" expr { $$ = gen_var($1, NULL, $4); ast_set_flags($$, AST_FLAG_UNTYPED | AST_FLAG_MUTABLE); } - | id "const" "=" init_expr { + | id "const" "=" expr { $$ = gen_var($1, NULL, $4); ast_set_flags($$, AST_FLAG_UNTYPED); } - ; -proc: id variadic_sign body { +proc + : id func_sign body { $$ = gen_proc($1, $2, $3); ast_set_flags($$, $2->flags); } - | "extern" id func_sign { + | "extern" id simple_sign { $$ = gen_proc($2, $3, NULL); ast_set_flags($$, AST_FLAG_EXTERN); } - ; -lambda: "[" macro_list "]" func_sign body { $$ = gen_lambda($2, $4, $5); } - ; +lambda + : "[" references "]" simple_sign body { $$ = gen_lambda($2, $4, $5); } + | "[" references "]" body { $$ = gen_lambda($2, NULL, $4); } -struct_elem: var_decl { $$ = $1; } - ; +struct_elem + : var_decl { $$ = $1; } -struct_list: struct_elem ";" struct_list { $$ = $1; $1->next = $3; } +members + : struct_elem ";" members { $$ = $1; $1->next = $3; } | struct_elem ";" { $$ = $1; } - ; -union: "union" id "{" struct_list "}" { +union + : "union" id "{" members "}" { $$ = gen_union($2, NULL, $4); } - | "union" id "(" generic_list ")" "{" struct_list "}" { + | "union" id "(" generics ")" "{" members "}" { $$ = gen_union($2, $4, $7); } - ; -generic: id type { $$ = gen_alias($1, $2); } -generic_list: generic "," generic_list { $$ = $1; $$->next = $3; } +generic + : id type { $$ = gen_alias($1, $2); } + +generics + : generic "," generics { $$ = $1; $$->next = $3; } | generic { $$ = $1; } - ; -struct: "struct" id "{" struct_list "}" { +struct + : "struct" id "{" members "}" { $$ = gen_struct($2, NULL, $4); } - | "struct" id "(" generic_list ")" "{" struct_list "}" { + | "struct" id "(" generics ")" "{" members "}" { $$ = gen_struct($2, $4, $7); } - ; /* since traits aren't generic, they don't have to implement anything, meaning * we can keep a pretty clean separation between procs and supertraits */ -template_elem: id ";" { $$ = $1; } - | id func_sign ";" { $$ = gen_proc($1, $2, NULL); } +template_elem + : id ";" { $$ = $1; } + | id simple_sign ";" { $$ = gen_proc($1, $2, NULL); } | var_decl ";" { $$ = $1; } | union { $$ = $1; } - ; -template_list: template_elem template_list { $$ = $1; $1->next = $2; } - | template_elem { $$ = $1; } - ; +template_elems + : template_elem template_elems { $$ = $1; $1->next = $2; } + | template_elem { $$ = $1; } -type_list: type "," type_list { $$ = $1; $1->next = $3; } +types + : type "," types { $$ = $1; $1->next = $3; } | type { $$ = $1; } - ; -type_alias: "typedef" id type { $$ = gen_alias($2, $3); } - ; +alias + : "typedef" id type { $$ = gen_alias($2, $3); } /* we'll parse the arg list later in the AST and check that each node is of some * specific type */ -type_template: "typedef" id "{" template_list "}" { +template + : "typedef" id "{" template_elems "}" { $$ = gen_template($2, $4); } | "typedef" id "{" "}" { /* should match anything, but doesn't implement anything */ $$ = gen_template($2, NULL); } - ; -enum_val: id { $$ = gen_val($1, NULL); } +enum_val + : id { $$ = gen_val($1, NULL); } | id "=" expr { $$ = gen_val($1, $3); } - ; -enum_list: enum_val "," enum_list { $$ = $1; $1->next = $3; } +enums + : enum_val "," enums { $$ = $1; $1->next = $3; } | enum_val "," { $$ = $1; } | enum_val { $$ = $1; } - ; -enum: "enum" id ":" type "{" enum_list "}" { $$ = gen_enum($2, $4, $6); } - | "enum" id "{" enum_list "}" { +enum + : "enum" id ":" type "{" enums "}" { $$ = gen_enum($2, $4, $6); } + | "enum" id "{" enums "}" { $$ = gen_enum($2, NULL, $4); ast_set_flags($$, AST_FLAG_UNTYPED); } - ; -top_if: "if" expr "{" unit "}" { +top_if + : "if" const_expr "{" unit "}" { $$ = gen_if($2, $4, NULL); ast_set_flags($$, AST_FLAG_UNHYGIENIC); } - | "if" expr "{" unit "}" "else" "{" unit "}" { + | "if" const_expr "{" unit "}" "else" "{" unit "}" { $$ = gen_if($2, $4, $8); ast_set_flags($$, AST_FLAG_UNHYGIENIC); } - | "if" expr "{" unit "}" "else" top_if { + | "if" const_expr "{" unit "}" "else" top_if { $$ = gen_if($2, $4, $7); ast_set_flags($$, AST_FLAG_UNHYGIENIC); } - ; + +top_var_decl + : id "mut" type { + $$ = gen_var($1, $3, NULL); + ast_set_flags($$, AST_FLAG_MUTABLE); + } + | id "const" type { $$ = gen_var($1, $3, NULL); } + | id type { $$ = gen_var($1, $2, NULL); } + +top_var_init + : top_var_decl "=" const_expr { $$ = $1; $1->_var.init = $3; } + | id "mut" "=" const_expr { $$ = $1; $1->_var.init = $4; } + | id "const" "=" const_expr { $$ = $1; $1->_var.init = $4; } + +top_var + : top_var_decl { $$ = $1; } + | top_var_init { $$ = $1; } /* slightly silly to allow stray semicolons at a top level, but seems to help * with recovering from certain syntax errors */ -top: ";" { $$ = gen_empty(); } - | enum { $$ = $1; } +top + : enum { $$ = $1; } | proc { $$ = $1; } | struct { $$ = $1; } | union { $$ = $1; } | macro { $$ = $1; } - | "const" top_if { $$ = $2; ast_set_flags($$, AST_FLAG_CONST); } - | import ";" { $$ = $1; } - | type_alias ";" { $$ = $1; } - | type_template { $$ = $1; } + | top_if { $$ = $1; ast_set_flags($$, AST_FLAG_CONST); } + | top_var { $$ = $1; ast_set_flags($$, AST_FLAG_CONST); } + | import { $$ = $1; } + | alias { $$ = $1; } + | template { $$ = $1; } | "pub" enum { $$ = $2; ast_set_flags($2, AST_FLAG_PUBLIC); } | "pub" struct { $$ = $2; ast_set_flags($2, AST_FLAG_PUBLIC); } | "pub" union { $$ = $2; ast_set_flags($2, AST_FLAG_PUBLIC); } | "pub" proc { $$ = $2; ast_set_flags($2, AST_FLAG_PUBLIC); } | "pub" macro { $$ = $2; ast_set_flags($2, AST_FLAG_PUBLIC); } - | "pub" import ";" { $$ = $2; ast_set_flags($2, AST_FLAG_PUBLIC); } - | "pub" type_alias ";" { $$ = $2; ast_set_flags($2, AST_FLAG_PUBLIC); } - | "pub" type_template { $$ = $2; ast_set_flags($2, AST_FLAG_PUBLIC); } - | var ";" { $$ = $1; } - | "pub" var ";" { $$ = $2; ast_set_flags($2, AST_FLAG_PUBLIC); } + | "pub" import { $$ = $2; ast_set_flags($2, AST_FLAG_PUBLIC); } + | "pub" alias { $$ = $2; ast_set_flags($2, AST_FLAG_PUBLIC); } + | "pub" template { $$ = $2; ast_set_flags($2, AST_FLAG_PUBLIC); } + | "pub" top_var { + $$ = $2; ast_set_flags($2, AST_FLAG_PUBLIC); + ast_set_flags($$, AST_FLAG_CONST); + } + | ";" { $$ = gen_empty(); } | error { $$ = gen_empty(); parser->failed = true; @@ -627,14 +687,14 @@ top: ";" { $$ = gen_empty(); } } yyclearin; yyerrok; - } - ; + } -unit: top { $$ = $1; } +unit + : top { $$ = $1; } | top unit { $$ = $1; $1->next = $2; } - ; -input: unit { parser->tree = $1; } +input + : unit { parser->tree = $1; } | /* empty */ - ; + %% diff --git a/src/scope.c b/src/scope.c index 8e9f74e..b6ce773 100644 --- a/src/scope.c +++ b/src/scope.c @@ -1190,6 +1190,8 @@ static struct ast_node *match_proc(enum match_flags flags, struct scope *scope, while (cb) { if (identical_ast_nodes(0, cb->id, id)) return proc_resolve(scope, cb->root, args); + + cb = cb->next; } return NULL; } @@ -1597,12 +1599,15 @@ struct ast_node *file_scope_resolve_type(struct scope *scope, /* this might be useful somewhere else as well */ static const char *default_types[] = {"u8", "u16", "u32", "u64", "i8" "i16", "i32", "i64", - "usize", "isize", "f32", "f64", "void"}; + "usize", "isize", + "f32", "f64", + "bool", "void"}; /* TODO: add error checking */ int scope_add_defaults(struct scope *root) { - for (size_t i = 0; i < sizeof(default_types) / sizeof(default_types[0]); + for (size_t i = 0; + i < sizeof(default_types) / sizeof(default_types[0]); ++i) { const char *type = default_types[i]; struct ast_node *n = gen_id(strdup(type)); @@ -1625,7 +1630,8 @@ void scope_destroy_defaults(struct scope *scope) struct ast_node type = {0}; type.node_type = AST_ID; - for (size_t i = 0; i < sizeof(default_types) / sizeof(default_types[0]); + for (size_t i = 0; + i < sizeof(default_types) / sizeof(default_types[0]); ++i) { type._id.id = default_types[i]; struct ast_node *n = scope_find_alias(scope, &type); diff --git a/tests/arr.ek b/tests/arr.ek new file mode 100644 index 0000000..d4f35f7 --- /dev/null +++ b/tests/arr.ek @@ -0,0 +1,5 @@ +main() +{ + a '[20]'[20]'type![u32, u32]; + a[20] = 200; +} diff --git a/tests/blocks.ek b/tests/blocks.ek new file mode 100644 index 0000000..e91d33c --- /dev/null +++ b/tests/blocks.ek @@ -0,0 +1,10 @@ +main() +{ + a mut = switch 1 { + case 2: 2 + case 1: 1 + default: 20; 20 + }; + + c mut = ({2 + 2; 4 + 4}); +} diff --git a/tests/callbacks.ek b/tests/callbacks.ek index 0249065..9b9d649 100644 --- a/tests/callbacks.ek +++ b/tests/callbacks.ek @@ -1,4 +1,4 @@ -do_stuff(proc '(u32)) +do_stuff(proc @(u32)) { proc(); } @@ -13,5 +13,5 @@ other_proc() main() { - do_stuff(other_proc as '(u32)); + do_stuff(other_proc as @(u32)); } diff --git a/tests/resolve.ek b/tests/resolve.ek index 1be0916..5ac7d71 100644 --- a/tests/resolve.ek +++ b/tests/resolve.ek @@ -30,6 +30,6 @@ some_func(generic){5;} main(){ // TODO: not fully qualified types in bodies should cause an error - a generic(i64, generic); + a [20]generic![i64, generic]; some_func(a); } diff --git a/tests/structs.ek b/tests/structs.ek index 8a3a1bb..ed0b30f 100644 --- a/tests/structs.ek +++ b/tests/structs.ek @@ -15,34 +15,34 @@ struct complex_struct (A any, B any, C any) { main() { /* infer types */ - simple_named const = {.a = 1, .b = 2, .c = 3} as basic_struct; - simple_ordinal const = {1, 2, 3} as basic_struct; - simple_mixed const = {1, .b = 2, 3} as basic_struct; + simple_named const = !{.a = 1, .b = 2, .c = 3} as basic_struct; + simple_ordinal const = !{1, 2, 3} as basic_struct; + simple_mixed const = !{1, .b = 2, 3} as basic_struct; - complex_named const = {.a = 1, .b = 2, .c = 3} as complex_struct; + complex_named const = !{.a = 1, .b = 2, .c = 3} as complex_struct; /* should parentheses be required around typeof? */ - complex_ordinal const = {1, 2, 3} as typeof complex_named; - complex_mixed const = {1, .b = 2, 3} as complex_struct; + complex_ordinal const = !{1, 2, 3} as typeof complex_named; + complex_mixed const = !{1, .b = 2, 3} as complex_struct; /* force types */ - force_named complex_struct(u32, u32, u32) = {.a = 1, .b = 2, .c = 3}; - force_ordinal typeof force_named = {1, 2, 3}; - force_mixed typeof force_ordinal = {1, .b = 2, 3}; + force_named complex_struct![u32, u32, u32] = !{.a = 1, .b = 2, .c = 3}; + force_ordinal typeof force_named = !{1, 2, 3}; + force_mixed typeof force_ordinal = !{1, .b = 2, 3}; - force_inferred_named mut = {.a = 1, .b = 2, .c = 3} as - complex_struct(u32, u32, u32); + force_inferred_named mut = !{.a = 1, .b = 2, .c = 3} as + complex_struct![u32, u32, u32]; - force_inferred_ordinal mut = {1, 2, 3} as - complex_struct(u32, u32, u32); + force_inferred_ordinal mut = !{1, 2, 3} as + complex_struct![u32, u32, u32]; - force_inferred_mixed mut = {1, .b = 2, 3} as - complex_struct(u32, u32, u32); + force_inferred_mixed mut = !{1, .b = 2, 3} as + complex_struct![u32, u32, u32]; /* shouldn't be compileable due to not enough type info */ - // error_named const = {.a = 1, .b = 2, .c = 3}; + // error_named const = !{.a = 1, .b = 2, .c = 3}; /* types should be inferred */ - force_inferred_named = {.a = 2, .b = 3, .c = 4}; - force_inferred_ordinal = {2, 3, 4}; - force_inferred_mixed = {2, .b = 3, 4}; + force_inferred_named = !{.a = 2, .b = 3, .c = 4}; + force_inferred_ordinal = !{2, 3, 4}; + force_inferred_mixed = !{2, .b = 3, 4}; } -- cgit v1.3