diff options
| author | Kimplul <kimi.h.kuparinen@gmail.com> | 2023-03-24 03:16:41 +0200 |
|---|---|---|
| committer | Kimplul <kimi.h.kuparinen@gmail.com> | 2023-03-24 03:16:41 +0200 |
| commit | 3bd9103ce0b18f6900ba544a8b2786145868524f (patch) | |
| tree | 235ed722d5058ee0c2bf32d7c0eabd9f581e9273 | |
| parent | 5b038666c3e911ffeb78a4d656044e5bd076705b (diff) | |
| download | ek-3bd9103ce0b18f6900ba544a8b2786145868524f.tar.gz ek-3bd9103ce0b18f6900ba544a8b2786145868524f.zip | |
struct initializers
| -rw-r--r-- | src/actualize.c | 11 | ||||
| -rw-r--r-- | src/ast.c | 116 | ||||
| -rw-r--r-- | src/compiler.c | 12 | ||||
| -rw-r--r-- | src/gen_parser.c | 2858 | ||||
| -rw-r--r-- | src/parser.y | 73 | ||||
| -rw-r--r-- | tests/structs.cu | 48 |
6 files changed, 1671 insertions, 1447 deletions
diff --git a/src/actualize.c b/src/actualize.c index 0148569..df268ad 100644 --- a/src/actualize.c +++ b/src/actualize.c @@ -1312,12 +1312,21 @@ static int pointer_conversion(struct ast_node *a, struct ast_node *b) return 0; } +static int actualize_init_cast(struct act_state *state, + struct scope *scope, struct ast_node *cast) +{ + semantic_error(scope->fctx, cast, "structure init casts not yet implemented"); + return -1; +} + static int actualize_cast(struct act_state *state, struct scope *scope, struct ast_node *cast) { assert(cast->node_type == AST_CAST); - struct ast_node *expr = cast->_cast.expr; + if (expr->node_type == AST_INIT) + return actualize_init_cast(state, scope, cast); + if (actualize(state, scope, expr)) return -1; @@ -47,7 +47,8 @@ static struct src_loc loc_span(struct ast_node *left, struct ast_node *right) return loc; } -struct ast_node *gen_binop(int op, struct ast_node *left, struct ast_node *right) +struct ast_node *gen_binop(enum ast_binops op, + struct ast_node *left, struct ast_node *right) { ALLOC_NODE(n, binop); n->node_type = AST_BINOP; @@ -66,7 +67,7 @@ void destroy_binop(struct ast_node *binop) free(binop); } -struct ast_node *gen_unop(int op, struct ast_node *expr) +struct ast_node *gen_unop(enum ast_unops op, struct ast_node *expr) { ALLOC_NODE(n, unop); n->node_type = AST_UNOP; @@ -117,6 +118,40 @@ void destroy_id(struct ast_node *id) free(id); } +struct ast_node *gen_assign(struct ast_node *to, struct ast_node *from) +{ + ALLOC_NODE(n, assign); + n->node_type = AST_ASSIGN; + n->_assign.to = to; + n->_assign.from = from; + n->loc = loc_span(to, from); + return n; +} + +static void destroy_assign(struct ast_node *assign) +{ + assert(assign->node_type == AST_ASSIGN); + destroy_ast_node(assign->_assign.to); + destroy_ast_node(assign->_assign.from); + free(assign); +} + +struct ast_node *gen_init(struct ast_node *body) +{ + ALLOC_NODE(n, struct init); + n->node_type = AST_INIT; + n->_init.body = body; + n->loc = body->loc; + return n; +} + +static void destroy_init(struct ast_node *init) +{ + assert(init->node_type == AST_INIT); + DESTROY_LIST(init->_init.body); + free(init); +} + struct ast_node *gen_int(long long integer) { ALLOC_NODE(n, int); @@ -405,9 +440,9 @@ struct ast_node *gen_type(enum ast_type_kind kind, struct ast_node *id, break; case AST_TYPE_STRUCT: - n->_type.struc.struc = expr; - n->_type.struc.impls = ret; - n->loc = expr->loc; + n->_type.struc.struc = id; + n->_type.struc.impls = expr; + n->loc = id->loc; break; case AST_TYPE_SIGN: @@ -467,10 +502,7 @@ void destroy_type(struct ast_node *type) break; case AST_TYPE_STRUCT: - /* struc is reference, I think, so don't free it */ - /* TODO: should structure types clone the whole body for each - * node, or maybe for each implementation of generics one - * instance shared between all of the same type? hmm */ + destroy_ast_node(type->_type.struc.struc); DESTROY_LIST(type->_type.struc.impls); break; @@ -834,6 +866,8 @@ void destroy_ast_node(struct ast_node *node) assert(node->node_type); switch (node->node_type) { + case AST_ASSIGN: destroy_assign(node); break; + case AST_INIT: destroy_init(node); break; case AST_SIZEOF: destroy_sizeof(node); break; case AST_DOT: destroy_dot(node); break; case AST_BINOP: destroy_binop(node); break; @@ -895,7 +929,6 @@ void ast_append(struct ast_node *list, struct ast_node *elem) static const char *binop_symbol(int op) { switch (op) { - case AST_ASSIGN: return "="; case AST_ADD: return "+"; case AST_SUB: return "-"; case AST_MUL: return "*"; @@ -989,6 +1022,27 @@ static void dump_flags(struct ast_node *node) static void __dump_ast(int depth, struct ast_node *node) { switch (node->node_type) { + case AST_ASSIGN: + dump(depth, "{ASSIGN:"); + dump_flags(node); + putchar('\n'); + + dump_ast(depth + 1, node->_assign.to); + dump_ast(depth + 1, node->_assign.from); + + dump(depth, "}\n"); + break; + + case AST_INIT: + dump(depth, "{INIT:"); + dump_flags(node); + putchar('\n'); + + dump_ast(depth + 1, node->_init.body); + + dump(depth, "}\n"); + break; + case AST_SIZEOF: dump(depth, "{SIZEOF:"); dump_flags(node); @@ -1207,7 +1261,9 @@ static void __dump_ast(int depth, struct ast_node *node) case AST_TYPE_STRUCT: printf(" STRUCT\n"); - dump_ast(depth + 1, node->_type.struc.struc->_struct.id); + /* oh yeah, struc is at least right now just an ID that + * we can use to fetch the actual struct with. */ + dump_ast(depth + 1, node->_type.struc.struc); dump_ast(depth + 1, node->_type.struc.impls); break; @@ -1438,6 +1494,14 @@ struct ast_node *clone_ast_node(struct ast_node *node) assert(node->node_type); struct ast_node *new = NULL; switch (node->node_type) { + case AST_ASSIGN: + new = gen_assign(clone_ast_node(node->_assign.to), + clone_ast_node(node->_assign.from)); + break; + + case AST_INIT: new = gen_init(clone_ast_node(node->_init.body)); + break; + case AST_SIZEOF: new = gen_sizeof(clone_ast_node(node->_sizeof.expr)); break; @@ -1554,11 +1618,10 @@ struct ast_node *clone_ast_node(struct ast_node *node) break; case AST_TYPE_STRUCT: - new = gen_type(AST_TYPE_STRUCT, NULL, - /* reference */ - node->_type.struc.struc, - clone_ast_node(node->_type.struc.impls) - ); + new = gen_type(AST_TYPE_STRUCT, + clone_ast_node(node->_type.struc.struc), + clone_ast_node(node->_type.struc.impls), + NULL); break; case AST_TYPE_UNION: @@ -1751,6 +1814,18 @@ int identical_ast_nodes(int exact, struct ast_node *left, struct ast_node *right return 0; switch (left->node_type) { + case AST_ASSIGN: + if (!identical_ast_nodes(exact, left->_assign.to, right->_assign.to)) + return 0; + + if (!identical_ast_nodes(exact, left->_assign.from, right->_assign.from)) + return 0; + break; + + case AST_INIT: + if (!identical_ast_nodes(exact, left->_init.body, right->_init.body)) + return 0; + break; case AST_SIZEOF: if (!identical_ast_nodes(exact, left->_sizeof.expr, right->_sizeof.expr)) return 0; @@ -2192,6 +2267,15 @@ int ast_call_on(int (*call)(struct ast_node *, void *data), return ret; switch (node->node_type) { + case AST_ASSIGN: + ret |= call(node->_assign.to, data); + ret |= call(node->_assign.from, data); + break; + + case AST_INIT: + ret |= call(node->_init.body, data); + break; + case AST_SIZEOF: ret |= call(node->_sizeof.expr, data); break; diff --git a/src/compiler.c b/src/compiler.c index 782001f..22c5f81 100644 --- a/src/compiler.c +++ b/src/compiler.c @@ -55,6 +55,14 @@ static int process(struct scope **parent, int public, const char *file) if (!p) return -1; parse(p, file, buf); + struct ast_node *tree = p->tree; + bool failed = p->failed; + destroy_parser(p); + + if (failed) + return -1; + + dump_ast(0, tree); struct scope *scope = create_scope(); if (!scope) @@ -73,11 +81,9 @@ static int process(struct scope **parent, int public, const char *file) else *parent = scope; - if (analyze_root(scope, p->tree)) + if (analyze_root(scope, tree)) return -1; - destroy_parser(p); - return 0; } diff --git a/src/gen_parser.c b/src/gen_parser.c index 7cf33ac..7b26b5c 100644 --- a/src/gen_parser.c +++ b/src/gen_parser.c @@ -195,60 +195,63 @@ enum yysymbol_kind_t YYSYMBOL_var = 83, /* var */ YYSYMBOL_embed = 84, /* embed */ YYSYMBOL_import = 85, /* import */ - YYSYMBOL_binary_op = 86, /* binary_op */ - YYSYMBOL_unary_op = 87, /* unary_op */ - YYSYMBOL_arg = 88, /* arg */ - YYSYMBOL_arg_list = 89, /* arg_list */ - YYSYMBOL_param_decl = 90, /* param_decl */ - YYSYMBOL_decl_list = 91, /* decl_list */ - YYSYMBOL_call = 92, /* call */ - YYSYMBOL_defer = 93, /* defer */ - YYSYMBOL_expr = 94, /* expr */ - YYSYMBOL_while = 95, /* while */ - YYSYMBOL_do_while = 96, /* do_while */ - YYSYMBOL_goto = 97, /* goto */ - YYSYMBOL_statement = 98, /* statement */ - YYSYMBOL_statement_list = 99, /* statement_list */ - YYSYMBOL_body = 100, /* body */ - YYSYMBOL_macro_list = 101, /* macro_list */ - YYSYMBOL_macro = 102, /* macro */ - YYSYMBOL_expr_list = 103, /* expr_list */ - YYSYMBOL_init_expr = 104, /* init_expr */ - YYSYMBOL_expr_if = 105, /* expr_if */ - YYSYMBOL_if = 106, /* if */ - YYSYMBOL_for = 107, /* for */ - YYSYMBOL_case = 108, /* case */ - YYSYMBOL_case_list = 109, /* case_list */ - YYSYMBOL_switch = 110, /* switch */ - YYSYMBOL_const_for = 111, /* const_for */ - YYSYMBOL_const_if = 112, /* const_if */ - YYSYMBOL_const = 113, /* const */ - YYSYMBOL_func_sign = 114, /* func_sign */ - YYSYMBOL_variadic_sign = 115, /* variadic_sign */ - YYSYMBOL_impl = 116, /* impl */ - YYSYMBOL_impl_list = 117, /* impl_list */ - YYSYMBOL_type = 118, /* type */ - YYSYMBOL_var_decl = 119, /* var_decl */ - YYSYMBOL_var_init = 120, /* var_init */ - YYSYMBOL_proc = 121, /* proc */ - YYSYMBOL_lambda = 122, /* lambda */ - YYSYMBOL_union_elem = 123, /* union_elem */ - YYSYMBOL_union_list = 124, /* union_list */ - YYSYMBOL_union = 125, /* union */ - YYSYMBOL_struct_list = 126, /* struct_list */ - YYSYMBOL_struct = 127, /* struct */ - YYSYMBOL_template_elem = 128, /* template_elem */ - YYSYMBOL_template_list = 129, /* template_list */ - YYSYMBOL_type_list = 130, /* type_list */ - YYSYMBOL_type_alias = 131, /* type_alias */ - YYSYMBOL_type_template = 132, /* type_template */ - YYSYMBOL_enum_val = 133, /* enum_val */ - YYSYMBOL_enum_list = 134, /* enum_list */ - YYSYMBOL_enum = 135, /* enum */ - YYSYMBOL_top_if = 136, /* top_if */ - YYSYMBOL_top = 137, /* top */ - YYSYMBOL_unit = 138, /* unit */ - YYSYMBOL_input = 139 /* input */ + YYSYMBOL_assign = 86, /* assign */ + YYSYMBOL_binary_op = 87, /* binary_op */ + YYSYMBOL_unary_op = 88, /* unary_op */ + YYSYMBOL_arg = 89, /* arg */ + YYSYMBOL_arg_list = 90, /* arg_list */ + YYSYMBOL_param_decl = 91, /* param_decl */ + YYSYMBOL_decl_list = 92, /* decl_list */ + YYSYMBOL_call = 93, /* call */ + YYSYMBOL_defer = 94, /* defer */ + YYSYMBOL_expr = 95, /* expr */ + YYSYMBOL_while = 96, /* while */ + YYSYMBOL_do_while = 97, /* do_while */ + YYSYMBOL_goto = 98, /* goto */ + YYSYMBOL_statement = 99, /* statement */ + YYSYMBOL_statement_list = 100, /* statement_list */ + YYSYMBOL_body = 101, /* body */ + YYSYMBOL_macro_list = 102, /* macro_list */ + YYSYMBOL_macro = 103, /* macro */ + YYSYMBOL_expr_list = 104, /* expr_list */ + YYSYMBOL_struct_init = 105, /* struct_init */ + YYSYMBOL_struct_inits = 106, /* struct_inits */ + YYSYMBOL_struct_construct = 107, /* struct_construct */ + YYSYMBOL_init_expr = 108, /* init_expr */ + YYSYMBOL_cond = 109, /* cond */ + YYSYMBOL_expr_if = 110, /* expr_if */ + YYSYMBOL_if = 111, /* if */ + YYSYMBOL_for = 112, /* for */ + YYSYMBOL_case = 113, /* case */ + YYSYMBOL_case_list = 114, /* case_list */ + YYSYMBOL_switch = 115, /* switch */ + YYSYMBOL_const_for = 116, /* const_for */ + YYSYMBOL_const_if = 117, /* const_if */ + YYSYMBOL_const = 118, /* const */ + YYSYMBOL_func_sign = 119, /* func_sign */ + YYSYMBOL_variadic_sign = 120, /* variadic_sign */ + YYSYMBOL_type = 121, /* type */ + YYSYMBOL_var_decl = 122, /* var_decl */ + YYSYMBOL_var_init = 123, /* var_init */ + YYSYMBOL_proc = 124, /* proc */ + YYSYMBOL_lambda = 125, /* lambda */ + YYSYMBOL_union_elem = 126, /* union_elem */ + YYSYMBOL_union_list = 127, /* union_list */ + YYSYMBOL_union = 128, /* union */ + YYSYMBOL_struct_list = 129, /* struct_list */ + YYSYMBOL_struct = 130, /* struct */ + YYSYMBOL_template_elem = 131, /* template_elem */ + YYSYMBOL_template_list = 132, /* template_list */ + YYSYMBOL_type_list = 133, /* type_list */ + YYSYMBOL_type_alias = 134, /* type_alias */ + YYSYMBOL_type_template = 135, /* type_template */ + YYSYMBOL_enum_val = 136, /* enum_val */ + YYSYMBOL_enum_list = 137, /* enum_list */ + YYSYMBOL_enum = 138, /* enum */ + YYSYMBOL_top_if = 139, /* top_if */ + YYSYMBOL_top = 140, /* top */ + YYSYMBOL_unit = 141, /* unit */ + YYSYMBOL_input = 142 /* input */ }; typedef enum yysymbol_kind_t yysymbol_kind_t; @@ -579,16 +582,16 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 57 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 1950 +#define YYLAST 2009 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 81 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 59 +#define YYNNTS 62 /* YYNRULES -- Number of rules. */ -#define YYNRULES 210 +#define YYNRULES 215 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 418 +#define YYNSTATES 428 /* YYMAXUTOK -- Last valid token kind. */ #define YYMAXUTOK 335 @@ -645,28 +648,28 @@ static const yytype_int8 yytranslate[] = /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_int16 yyrline[] = { - 0, 146, 146, 152, 153, 156, 159, 162, 163, 164, - 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, - 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, - 187, 190, 191, 192, 193, 194, 195, 198, 199, 200, - 201, 202, 205, 206, 207, 210, 211, 214, 216, 217, - 218, 219, 223, 224, 227, 231, 232, 233, 234, 235, - 236, 237, 238, 242, 243, 244, 245, 246, 247, 248, - 249, 250, 251, 252, 255, 258, 264, 266, 267, 268, - 269, 270, 272, 273, 274, 275, 276, 277, 278, 279, - 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, - 305, 306, 309, 310, 313, 314, 317, 321, 328, 334, - 335, 338, 339, 340, 341, 344, 345, 348, 349, 350, - 353, 357, 360, 361, 364, 367, 374, 378, 383, 391, - 393, 397, 400, 402, 404, 406, 410, 411, 418, 420, - 423, 424, 427, 428, 432, 435, 439, 443, 447, 452, - 456, 457, 460, 461, 465, 471, 475, 481, 485, 486, - 489, 490, 493, 496, 501, 504, 507, 512, 513, 514, - 515, 518, 519, 522, 523, 526, 531, 534, 540, 541, - 544, 545, 546, 549, 550, 556, 560, 564, 572, 573, - 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, - 584, 585, 586, 587, 588, 589, 590, 605, 606, 609, - 610 + 0, 147, 147, 153, 154, 157, 160, 163, 164, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, + 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, + 188, 191, 194, 195, 196, 197, 198, 199, 202, 203, + 204, 205, 206, 209, 210, 211, 214, 215, 218, 220, + 221, 222, 223, 227, 228, 231, 235, 236, 237, 238, + 239, 240, 241, 242, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 260, 263, 269, 271, + 272, 273, 274, 275, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 310, 311, 314, 315, 318, 319, 322, 326, + 333, 339, 340, 343, 344, 347, 348, 351, 354, 355, + 356, 357, 360, 361, 365, 366, 369, 370, 371, 374, + 377, 380, 381, 384, 387, 394, 398, 403, 411, 413, + 417, 420, 422, 424, 426, 430, 431, 438, 439, 443, + 446, 450, 454, 458, 463, 467, 468, 471, 472, 476, + 482, 486, 492, 496, 497, 500, 501, 504, 507, 512, + 515, 518, 525, 526, 527, 528, 531, 532, 535, 536, + 539, 544, 547, 553, 554, 557, 558, 559, 562, 563, + 569, 573, 577, 585, 586, 587, 588, 589, 590, 591, + 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, + 602, 603, 618, 619, 622, 623 }; #endif @@ -695,16 +698,16 @@ static const char *const yytname[] = "\"do\"", "\"mut\"", "\"return\"", "\"const\"", "\"extern\"", "\"enum\"", "\"define\"", "\"(\"", "\")\"", "\"{\"", "\"}\"", "\"[\"", "\"]\"", "\"as\"", "\".\"", "\"=>\"", "$accept", "id", "var", "embed", "import", - "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", - "init_expr", "expr_if", "if", "for", "case", "case_list", "switch", - "const_for", "const_if", "const", "func_sign", "variadic_sign", "impl", - "impl_list", "type", "var_decl", "var_init", "proc", "lambda", - "union_elem", "union_list", "union", "struct_list", "struct", - "template_elem", "template_list", "type_list", "type_alias", - "type_template", "enum_val", "enum_list", "enum", "top_if", "top", - "unit", "input", YY_NULLPTR + "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", "union_elem", + "union_list", "union", "struct_list", "struct", "template_elem", + "template_list", "type_list", "type_alias", "type_template", "enum_val", + "enum_list", "enum", "top_if", "top", "unit", "input", YY_NULLPTR }; static const char * @@ -714,12 +717,12 @@ yysymbol_name (yysymbol_kind_t yysymbol) } #endif -#define YYPACT_NINF (-225) +#define YYPACT_NINF (-235) #define yypact_value_is_default(Yyn) \ ((Yyn) == YYPACT_NINF) -#define YYTABLE_NINF (-211) +#define YYTABLE_NINF (-216) #define yytable_value_is_error(Yyn) \ 0 @@ -728,48 +731,49 @@ yysymbol_name (yysymbol_kind_t yysymbol) STATE-NUM. */ static const yytype_int16 yypact[] = { - 482, -225, -225, -225, 246, 42, 42, 50, -30, 42, - 42, 42, 408, 61, 62, -225, 74, -225, -225, -225, - 75, -225, -225, 1028, -225, 107, 120, 128, -225, -225, - -225, 131, -225, -225, 65, 30, -225, 1039, -225, 77, - 27, 83, 141, 1039, 227, 284, 70, 153, 97, -225, - 68, -225, -225, -225, 915, -225, -225, -225, -225, -225, - -225, 127, 33, 23, -225, -225, -225, -225, 1039, 42, - 1039, 1039, 1039, 1039, 1039, -225, 98, 99, 1039, 42, - 127, 53, -225, -225, -225, -225, -225, 1102, -225, 70, - -225, 127, 42, 22, -225, -225, 1871, 915, -225, 915, - -225, -225, 127, 429, 118, 8, -225, 125, 127, 1166, - 42, 731, -225, 1039, 915, 280, 1871, -225, -225, 74, - -225, 126, 102, 12, 51, -225, 167, -225, -225, 103, - -225, 438, 169, 172, -225, 33, 114, 111, -225, 111, - 1871, 176, 1327, 111, 1039, 186, 1230, 122, 158, 135, - -225, 42, 883, 1039, 1039, 1039, 1039, 1039, 1039, 1039, - 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, - 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, - 1039, 1039, 1039, 567, 127, 42, -40, 134, 208, 170, - 144, 68, 56, -225, -225, 147, 127, 127, 127, 42, - -225, 253, 127, -225, 127, 148, 175, 151, -225, -225, - 42, 915, 217, 222, 1039, 961, 1039, 68, 993, -16, - -225, 256, 226, 231, 1294, -225, -225, 240, 649, 181, - -225, -225, -225, -225, -225, -225, -225, 241, -225, -225, - -225, 68, 127, 190, 33, 191, 33, -225, 127, 258, - -225, -225, -225, -225, 1358, 197, -225, -225, 42, 77, - -225, 1039, -225, 224, 201, -225, 74, 1871, -19, -19, - -19, 176, 176, 1135, 1071, 1327, 745, 1263, 1199, 562, - 562, 562, 562, 821, 821, 437, 437, 1871, 1871, 1871, - 1871, 1871, 1871, 1871, 1871, 1871, 1871, 200, -225, -225, - 42, 1039, 42, -225, -225, 42, 68, -225, -225, 196, - -225, 204, -225, -225, 42, -225, -225, 68, -225, -225, - 1422, 269, 1486, 225, -225, 1551, 1039, 42, -225, -225, - -225, -225, -225, -225, -225, -225, -225, -225, 236, -225, - 33, 232, 33, -225, 233, -225, -225, -225, -225, 68, - 74, 961, -225, 243, 234, 1871, -225, 237, -225, 127, - -225, -225, 248, 250, 1039, -225, 1039, -225, 1486, 302, - -25, 244, -225, 245, -225, -225, -225, -23, -225, 68, - 252, 13, 1039, 250, 255, 1615, 1679, 260, 1039, -225, - -225, -225, -225, 567, -225, -225, -225, -225, -225, 1743, - -225, -225, 1039, -225, 79, 1807, 68, 259, 807, 1486, - -225, -225, 1039, -225, -225, -225, -225, -225 + 413, -235, -235, -235, 504, 46, 46, 29, -1, 46, + 46, 46, 496, 49, 76, -235, 60, -235, -235, -235, + 77, -235, -235, 269, -235, 88, 79, 81, -235, -235, + -235, 86, -235, -235, -19, 69, -235, 1116, -235, 41, + 28, 61, 209, 1116, 270, 341, 25, 1006, 67, -235, + 70, -235, -235, -235, 928, -235, -235, -235, -235, -235, + -235, 960, 30, 44, -235, -235, -235, -235, 1116, 46, + 1116, 1116, 1116, 1116, 1116, -235, 74, 91, 1116, 46, + 350, 1, -235, -235, -235, -235, -235, -235, 1225, -235, + 25, -235, 350, 46, 45, -235, -235, 62, 928, -235, + 928, -235, -235, 350, 540, 101, 56, -235, 105, 350, + 1289, 350, 693, -235, 1162, 522, 1930, 82, -235, -235, + 1116, 93, 120, 98, -235, -235, 23, 64, -235, 162, + -235, -235, 106, -235, 292, 163, -235, 30, 107, 62, + -235, 62, 62, 159, 1458, 62, 1116, 175, 259, 1353, + 60, 110, 136, 108, -235, 46, 850, 1038, 1116, 1116, + 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, + 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, + 1116, 1116, 1116, 1116, 1116, 1116, 1116, 490, 350, 46, + -43, 112, 185, 146, 121, 70, 58, -235, -235, 122, + 350, 350, 350, 46, -235, 184, 350, -235, 350, 150, + 126, -235, -235, 46, 1162, 194, 197, 1116, 960, 1116, + 70, 882, -9, -235, 151, 200, 202, 1417, -235, -235, + 204, 617, 145, -235, -235, -235, -235, -235, -235, -235, + 211, -235, -235, 1084, 1930, 70, 46, 177, 153, -235, + 350, -235, 960, 156, 30, 158, 30, -235, -235, 223, + -235, -235, -235, 1481, 166, -235, -235, 46, 41, -235, + -235, 167, 1930, -235, 6, 6, 6, 159, 159, 1258, + 1194, 1458, 1450, 1386, 1322, 631, 631, 631, 631, 788, + 788, 488, 488, 1930, 1930, 1930, 1930, 1930, 1930, 1930, + 1930, 1930, 1930, 161, -235, -235, 46, 1116, 46, -235, + -235, 46, 70, -235, -235, 169, -235, 178, -235, -235, + 350, -235, -235, 70, -235, -235, 1545, 245, 1609, 198, + -235, 248, 1116, 46, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, 188, 206, 260, 522, -235, -235, + -235, 30, 196, 30, -235, -235, -235, -235, -235, 70, + -235, 215, 205, 1930, -235, 220, -235, 350, -235, -235, + 224, 235, 1116, -235, 1116, -235, 1609, 289, -235, -17, + 928, -235, 226, -235, 228, -235, -16, -235, 70, 231, + -14, 1116, 235, 234, 1674, 1738, 252, 1116, -235, -235, + -235, -235, -235, 490, -235, -235, -235, -235, -235, 1802, + -235, -235, 1116, -235, 9, 1866, 70, 237, 774, 1609, + -235, -235, 1116, -235, -235, -235, -235, -235 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -777,70 +781,73 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_uint8 yydefact[] = { - 0, 206, 2, 188, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 192, 3, 4, 190, 191, - 0, 196, 189, 0, 209, 0, 0, 0, 200, 199, - 198, 0, 203, 197, 0, 0, 6, 0, 193, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 142, 136, - 0, 151, 204, 194, 0, 195, 208, 1, 205, 201, - 202, 0, 0, 0, 175, 60, 61, 62, 0, 0, - 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, - 0, 55, 72, 66, 67, 64, 65, 0, 73, 0, - 156, 0, 0, 0, 143, 145, 148, 0, 149, 0, - 150, 135, 0, 142, 51, 0, 47, 50, 0, 0, - 0, 0, 155, 0, 0, 55, 111, 152, 114, 0, - 112, 174, 0, 0, 0, 159, 0, 164, 158, 0, - 177, 139, 0, 0, 170, 172, 0, 40, 58, 38, - 69, 37, 39, 41, 0, 0, 0, 0, 105, 0, - 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 211, 2, 193, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 197, 3, 4, 195, 196, + 0, 201, 194, 0, 214, 0, 0, 0, 205, 204, + 203, 0, 208, 202, 0, 0, 6, 0, 198, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 147, 145, + 0, 156, 209, 199, 0, 200, 213, 1, 210, 206, + 207, 0, 0, 0, 180, 61, 62, 63, 0, 0, + 0, 0, 0, 0, 0, 60, 0, 0, 0, 0, + 0, 56, 74, 65, 68, 69, 66, 67, 0, 75, + 0, 161, 0, 0, 0, 148, 150, 153, 0, 154, + 0, 155, 144, 0, 147, 52, 0, 48, 51, 0, + 0, 0, 0, 160, 0, 0, 118, 120, 157, 119, + 0, 56, 47, 0, 45, 44, 0, 0, 164, 0, + 169, 163, 0, 182, 0, 0, 175, 177, 0, 41, + 59, 39, 71, 38, 40, 42, 0, 0, 56, 0, + 0, 0, 107, 0, 73, 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, 178, 182, - 0, 0, 0, 153, 154, 0, 0, 0, 0, 0, - 132, 0, 0, 146, 0, 139, 141, 0, 99, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 103, 55, 0, 0, 0, 89, 90, 0, 0, 0, - 97, 92, 84, 87, 91, 88, 93, 0, 95, 96, - 113, 0, 0, 0, 0, 0, 161, 165, 0, 0, - 167, 169, 171, 176, 0, 0, 63, 68, 0, 0, - 57, 0, 53, 46, 0, 44, 43, 7, 10, 11, - 12, 9, 8, 14, 13, 15, 17, 16, 18, 31, - 32, 33, 34, 35, 36, 19, 20, 21, 22, 23, - 24, 25, 28, 26, 27, 29, 30, 0, 70, 56, - 0, 0, 181, 184, 108, 0, 0, 134, 49, 0, - 133, 0, 48, 147, 0, 144, 76, 0, 80, 81, - 0, 0, 0, 0, 79, 0, 0, 0, 130, 129, - 86, 83, 82, 77, 85, 100, 102, 94, 0, 173, - 0, 0, 0, 160, 0, 168, 54, 5, 104, 0, - 42, 0, 52, 185, 0, 179, 180, 0, 106, 0, - 131, 140, 117, 0, 0, 74, 0, 78, 0, 0, - 0, 0, 163, 0, 138, 157, 45, 0, 183, 0, - 0, 0, 0, 123, 0, 0, 0, 126, 0, 115, - 116, 166, 162, 0, 187, 107, 137, 118, 119, 0, - 122, 124, 0, 75, 0, 110, 0, 0, 0, 0, - 127, 128, 0, 125, 186, 121, 120, 109 + 0, 0, 183, 187, 0, 0, 0, 158, 159, 0, + 0, 0, 0, 0, 141, 0, 0, 151, 0, 179, + 0, 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, 43, 0, 0, 0, 0, 166, 170, 172, 0, + 174, 176, 181, 0, 0, 64, 70, 0, 0, 58, + 54, 0, 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, 72, 57, 0, 0, 186, 189, + 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, + 46, 0, 0, 0, 165, 173, 55, 5, 106, 0, + 53, 190, 0, 184, 185, 0, 108, 0, 140, 178, + 126, 0, 0, 76, 0, 80, 0, 0, 123, 0, + 0, 115, 0, 168, 0, 162, 0, 188, 0, 0, + 0, 0, 132, 0, 0, 0, 135, 0, 124, 125, + 114, 171, 167, 0, 192, 109, 146, 127, 128, 0, + 131, 133, 0, 77, 0, 112, 0, 0, 0, 0, + 136, 137, 0, 134, 191, 130, 129, 111 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -225, 0, -2, -225, 9, -225, -225, 116, -18, -225, - -86, -225, -225, 210, -225, -225, -225, -225, -220, 94, - -77, 10, -76, -24, -33, -43, -225, -225, -44, -225, - -225, -63, -225, 14, -225, -109, 29, 359, 431, -47, - 340, -225, -225, -224, -39, 5, 11, -225, 212, -148, - 15, 17, -225, -139, 21, -28, -225, 3, -225 + -235, 0, -2, -235, 3, -235, -235, -235, 95, -135, + -235, -64, -235, -235, 216, -235, -235, -235, -235, -207, + 97, -93, 4, -108, -235, -32, 193, -51, 102, -225, + -67, -235, -235, -68, -235, -235, -88, -235, -20, -235, + 409, 89, -65, 330, -235, -235, -229, -30, 8, 10, + -235, 218, 32, 11, 13, -235, -234, 16, -25, -235, + 5, -235 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - 0, 81, 13, 82, 14, 83, 84, 263, 264, 104, - 105, 85, 86, 116, 225, 226, 227, 228, 229, 230, - 149, 15, 406, 265, 118, 232, 233, 383, 384, 234, - 328, 329, 235, 49, 50, 132, 207, 51, 16, 17, - 18, 88, 126, 127, 128, 129, 19, 135, 136, 122, - 20, 21, 189, 190, 22, 38, 23, 24, 25 + 0, 81, 13, 82, 14, 83, 84, 85, 122, 123, + 105, 106, 86, 87, 116, 228, 229, 230, 231, 232, + 233, 153, 15, 416, 247, 248, 117, 124, 245, 119, + 235, 236, 392, 393, 237, 334, 335, 238, 49, 50, + 51, 16, 17, 18, 89, 129, 130, 131, 132, 19, + 137, 138, 210, 20, 21, 193, 194, 22, 38, 23, + 24, 25 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -848,402 +855,412 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { - 12, 206, 26, 186, 12, 34, 35, 120, 335, 39, - 40, 41, 48, 27, 28, 30, 192, 199, 2, 31, - 341, 32, 343, 12, 134, 33, 56, 37, 2, 2, - 117, 147, 114, 200, 37, 48, 2, 42, 91, 2, - 201, 326, 48, 43, 48, 48, 103, 327, 2, 111, - 120, 393, 120, 90, 115, 36, 94, 2, 42, 184, - 185, 48, 124, 131, 43, 305, 240, 120, 151, 138, - 211, 52, 53, 193, 123, 194, 2, 42, 115, 148, - 48, 200, 54, 43, 123, 55, 244, 111, 201, 103, - 241, 48, 188, 148, 339, 191, 134, 115, 130, 115, - 344, 92, 48, 48, 63, 120, 47, 57, 48, 222, - 205, 221, 308, 115, 115, 48, 312, 196, 373, 197, - 223, 231, 236, 245, 48, 152, 237, 47, 238, 306, - 58, 48, 239, 2, 42, 131, 326, 61, 59, 62, - 43, 60, 111, 101, 112, 249, 47, 2, 42, 89, - 102, 260, 115, 111, 43, 93, 65, 66, 67, 2, - 68, 354, 69, 356, 120, 70, 198, 71, 120, 110, - 144, 145, 72, 202, 242, 243, 73, 246, 247, 250, - 74, 348, 251, 12, 48, 299, 297, 317, 415, 253, - 185, 255, 154, 155, 156, 257, 48, 48, 103, 309, - 75, 48, 103, 47, 48, 206, 258, 76, 300, 77, - 316, 115, 259, 89, 240, 115, 301, 47, 302, 303, - 307, 48, 248, 314, 315, 78, 222, 318, 221, 79, - 108, 80, 319, 2, 42, 97, 331, 223, 231, 236, - 43, 332, 48, 237, 124, 238, 124, 87, 48, 239, - 334, 337, 2, 96, 184, 185, 336, 109, 148, 2, - 42, 115, 2, 42, 340, 342, 43, 330, 345, 43, - 347, 151, 351, 349, 352, 353, 359, 360, 137, 364, - 139, 140, 141, 142, 143, 304, 2, 42, 146, 366, - 2, 42, 99, 43, 370, 151, 5, 43, 6, 7, - 188, 377, 188, 47, 120, 357, 381, 372, 374, 378, - 379, 323, 382, 388, 205, 9, 10, 11, 404, 391, - 392, 224, 44, 142, 45, 396, 310, 369, 152, 47, - 401, 321, 47, 376, 414, 338, 417, 390, 398, 400, - 124, 411, 124, 361, 29, 371, 44, 252, 45, 394, - 0, 115, 152, 0, 254, 0, 47, 0, 0, 48, - 47, 0, 0, 267, 268, 269, 270, 271, 272, 273, - 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, - 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, - 294, 295, 296, 12, 64, 0, 407, 0, 0, 0, - 358, 95, 0, 98, 100, 106, 222, 0, 221, 0, - 0, 362, 0, 0, 2, 42, 365, 223, 231, 236, - 121, 43, 0, 237, 320, 238, 322, 0, 325, 239, - 0, 0, 0, 0, 0, 2, 42, 0, 224, 150, - 0, 0, 43, 375, 2, 42, 0, 0, 106, 0, - 187, 43, 0, 154, 155, 156, 157, 158, 0, 0, - 0, 195, 387, 0, 389, 0, 0, 203, 0, 0, - 0, 142, 0, 395, 44, 397, 45, 107, 0, 0, - 46, 0, -210, 1, 47, 119, 0, 0, 2, 0, - 0, 0, 3, 125, 133, 196, 0, 197, 410, 0, - 413, 110, 0, 416, 196, 47, 197, 0, 0, 119, - 89, 355, 248, 0, 47, 184, 185, 0, 0, 0, - 107, 0, 0, 0, 0, 0, 0, 0, 119, 0, - 119, 4, 5, 0, 6, 7, 368, 0, 0, 0, - 0, 0, 0, 298, 119, 119, 0, 0, 0, 0, - 8, 9, 10, 11, 0, 98, 100, 106, 0, 0, - 311, 106, 0, 313, 0, 0, 133, 0, 1, 0, - 0, 0, 0, 2, 385, 0, 386, 3, 154, 155, - 156, 157, 158, 266, 160, 161, 162, 0, 0, 0, - 0, 0, 399, 0, 0, 0, 171, 172, 405, 0, - 0, 121, 0, 0, 0, 0, 0, 121, 0, 0, - 0, 0, 409, 0, 0, 0, 4, 5, 224, 6, - 7, 0, 405, 0, 0, 0, 0, 0, 0, 107, - 0, 0, 0, 107, 0, 8, 9, 10, 11, 0, - 184, 185, 119, 0, 0, 0, 266, 0, 0, 0, - 208, 0, 65, 66, 67, 2, 68, 0, 69, 209, - 0, 70, 0, 71, 0, 0, 0, 0, 72, 0, - 0, 0, 73, 0, 0, 125, 74, 125, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 350, 0, 0, 0, 75, 0, 0, 5, - 0, 6, 7, 76, 210, 77, 211, 0, 212, 213, - 214, -101, 215, 216, 217, 0, 218, 219, 380, 10, - 11, 78, 0, 111, -101, 79, 0, 80, 0, 0, - 0, 0, 208, 0, 65, 66, 67, 2, 68, 0, - 69, 209, 0, 70, 0, 71, 0, 0, 0, 0, - 72, 0, 0, 0, 73, 0, 0, 0, 74, 0, - 0, 154, 155, 156, 157, 158, 0, 160, 161, 0, - 0, 125, 0, 125, 0, 0, 0, 0, 75, 171, - 172, 5, 266, 6, 7, 76, 210, 77, 211, 0, - 212, 213, 214, 0, 215, 216, 217, 0, 218, 219, - 0, 10, 11, 78, 0, 111, 220, 79, 208, 80, - 65, 66, 67, 2, 68, 0, 69, 209, 0, 70, - 0, 71, 0, 184, 185, 0, 72, 0, 0, 0, - 73, 0, 0, 0, 74, 0, 0, 154, 155, 156, - 157, 158, 0, 160, 161, 162, 0, 0, 0, 165, - 166, 167, 168, 0, 75, 171, 172, 5, 0, 6, - 7, 76, 210, 77, 211, 0, 212, 213, 214, 0, - 215, 216, 217, 0, 218, 219, 0, 10, 11, 78, - 0, 111, 0, 79, 0, 80, 65, 66, 67, 2, - 68, 0, 69, 0, 0, 70, 0, 71, 0, 184, - 185, 0, 72, 0, 0, 0, 261, 0, 0, 0, - 74, 0, 0, 0, 0, 0, 0, 0, 65, 66, - 67, 2, 68, 0, 69, 0, 0, 70, 0, 71, - 75, 0, 0, 0, 72, 0, 0, 76, 113, 77, - 114, 0, 74, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 78, 262, 0, 0, 79, - 0, 80, 75, 0, 65, 66, 67, 2, 68, 76, - 69, 77, 114, 70, 0, 71, 0, 0, 0, 0, - 72, 0, 0, 0, 261, 0, 0, 78, 74, 0, - 0, 79, 0, 80, 0, 0, 65, 66, 67, 2, - 68, 0, 69, 324, 0, 70, 0, 71, 75, 0, - 0, 0, 72, 0, 0, 76, 73, 77, 114, 0, - 74, 0, 0, 0, 0, 0, 0, 0, -207, 1, - 0, 0, 0, 78, 2, 0, 0, 79, 3, 80, - 75, 0, 65, 66, 67, 2, 68, 76, 69, 77, - 0, 70, 0, 71, 0, 0, 0, 0, 72, 0, - 0, 0, 73, 0, 0, 78, 74, 0, 0, 79, - 0, 80, 0, 0, 0, 0, 0, 4, 5, 0, - 6, 7, 0, 0, 0, 0, 75, 154, 155, 156, - 157, 158, 0, 76, 161, 77, 8, 9, 10, 11, - 0, 0, 0, -207, 0, 171, 172, 0, 0, 0, - 153, 78, 0, 0, 0, 79, 0, 80, 154, 155, - 156, 157, 158, 159, 160, 161, 162, 163, 164, 0, - 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, - 175, 176, 177, 178, 0, 179, 180, 181, 182, 184, - 185, 154, 155, 156, 157, 158, 0, 160, 161, 162, - 163, 164, 0, 165, 166, 167, 168, 169, 170, 171, - 172, 0, 0, 0, 153, 0, 183, 0, 0, 0, - 184, 185, 154, 155, 156, 157, 158, 159, 160, 161, - 162, 163, 164, 0, 165, 166, 167, 168, 169, 170, - 171, 172, 173, 174, 175, 176, 177, 178, 0, 179, - 180, 181, 182, 184, 185, 154, 155, 156, 157, 158, - 0, 160, 161, 162, 163, 0, 0, 165, 166, 167, - 168, 169, 170, 171, 172, 0, 0, 0, 153, 0, - 0, 0, 0, 204, 184, 185, 154, 155, 156, 157, - 158, 159, 160, 161, 162, 163, 164, 0, 165, 166, - 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, - 177, 178, 0, 179, 180, 181, 182, 184, 185, 154, - 155, 156, 157, 158, 0, 160, 161, 162, 0, 0, - 0, 165, 166, 167, 168, 169, 170, 171, 172, 0, - 0, 0, 153, 256, 333, 0, 0, 0, 184, 185, - 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, - 164, 0, 165, 166, 167, 168, 169, 170, 171, 172, - 173, 174, 175, 176, 177, 178, 0, 179, 180, 181, - 182, 184, 185, 154, 155, 156, 157, 158, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 171, 172, 0, 0, 0, 153, 0, 0, 0, - 0, 0, 184, 185, 154, 155, 156, 157, 158, 159, - 160, 161, 162, 163, 164, 0, 165, 166, 167, 168, - 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, - 0, 179, 180, 181, 182, 184, 185, 0, 0, 0, + 12, 196, 26, 118, 12, 34, 35, 27, 28, 39, + 40, 41, 48, 151, 30, 31, 155, 32, 344, 91, + 33, 271, 95, 12, 341, 352, 190, 354, 56, 2, + 204, 2, 42, 136, 36, 48, 2, 205, 43, 92, + 114, 37, 48, 214, 48, 48, 104, 197, 332, 198, + 2, 2, 2, 61, 333, 62, 37, 112, 403, 52, + 112, 121, 127, 134, 249, 203, 332, 311, 54, 140, + 2, 42, 362, 156, 364, 2, 42, 43, 148, 152, + 48, 126, 43, 112, 188, 189, 53, 55, 57, 58, + 104, 59, 48, 192, 152, 126, 60, 254, 102, 2, + 42, 47, 93, 48, 48, 103, 43, 136, 155, 48, + 225, 48, 224, 90, 259, 226, 234, 350, 195, 133, + 121, 48, 239, 240, 384, 241, 255, 48, 242, 204, + 200, 312, 201, 94, 48, 108, 205, 134, 314, 111, + 47, 189, 318, 63, 112, 47, 146, 113, 48, 202, + 125, 128, 135, 206, 399, 269, 121, 2, 42, 200, + 250, 201, 336, 147, 43, 156, 155, 150, 252, 47, + 331, 253, 256, 260, 358, 158, 159, 160, 151, 108, + 264, 257, 262, 266, 267, 268, 306, 12, 48, 305, + 2, 42, 303, 307, 308, 313, 309, 43, 320, 321, + 48, 48, 104, 315, 324, 48, 104, 325, 48, 251, + 337, 425, 338, 322, 340, 2, 42, 44, 121, 45, + 342, 343, 43, 156, 48, 347, 135, 47, 348, 225, + 351, 224, 353, 355, 226, 234, 361, 188, 189, 357, + 360, 239, 240, 148, 241, 125, 346, 242, 359, 367, + 48, 368, 121, 88, 127, 372, 127, 316, 375, 97, + 47, 378, 374, 110, 379, 2, 42, 152, 380, -212, + 1, 383, 43, 386, 155, 2, 2, 42, 98, 3, + 387, 90, 390, 43, 139, 47, 141, 142, 143, 144, + 145, 108, 310, 388, 149, 108, 249, 391, 2, 42, + 397, 401, 258, 402, 406, 43, 192, 125, 192, 411, + 414, 365, 424, 327, 427, 381, 323, 329, 4, 5, + 48, 6, 7, 408, 410, 44, 421, 45, 227, 400, + 244, 156, 150, 377, 29, 47, 144, 8, 9, 10, + 11, 125, 345, 128, -212, 128, 47, 2, 42, 100, + 273, 127, 369, 127, 43, 261, 2, 42, 200, 382, + 201, 404, 263, 43, 90, 0, 0, 48, 47, 0, + 0, 0, 0, 272, 274, 275, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 12, 0, 0, 0, 0, 417, 366, + 0, 0, 0, -215, 1, 0, 225, 47, 224, 2, + 370, 226, 234, 3, 0, 373, 47, 0, 239, 240, + 244, 241, 0, 326, 242, 328, 0, 0, 0, 0, + 128, 0, 128, 0, 64, 0, 0, 227, 0, 0, + 0, 96, 0, 99, 101, 107, 385, 0, 0, 149, + 0, 0, 4, 5, 0, 6, 7, 0, 0, 0, + 0, 0, 0, 396, 0, 0, 398, 0, 0, 0, + 0, 8, 9, 10, 11, 405, 0, 407, 0, 154, + 0, 1, 0, 0, 0, 0, 2, 0, 0, 107, + 3, 191, 2, 42, 158, 159, 160, 161, 162, 43, + 2, 420, 199, 423, 0, 0, 426, 0, 207, 0, + 209, 0, 0, 363, 0, 65, 66, 67, 2, 68, + 0, 69, 0, 0, 70, 0, 71, 0, 0, 4, + 5, 72, 6, 7, 0, 73, 2, 42, 376, 74, + 0, 0, 0, 43, 5, 0, 6, 7, 8, 9, + 10, 11, 44, 0, 45, 0, 188, 189, 46, 75, + 0, 0, 47, 9, 10, 11, 76, 0, 77, 114, + 0, 0, 0, 0, 0, 0, 0, 0, 394, 0, + 395, 0, 0, 0, 78, 0, 115, 304, 79, 0, + 80, 246, 0, 0, 0, 0, 200, 409, 201, 99, + 101, 107, 111, 415, 317, 107, 47, 319, 211, 0, + 65, 66, 67, 2, 68, 0, 69, 212, 419, 70, + 0, 71, 0, 0, 227, 0, 72, 0, 415, 0, + 73, 0, 0, 0, 74, 0, 0, 158, 159, 160, + 161, 162, 0, 164, 165, 166, 0, 0, 0, 349, + 0, 0, 0, 0, 75, 175, 176, 5, 0, 6, + 7, 76, 213, 77, 214, 0, 215, 216, 217, -103, + 218, 219, 220, 0, 221, 222, 0, 10, 11, 78, + 0, 112, -103, 79, 211, 80, 65, 66, 67, 2, + 68, 0, 69, 212, 0, 70, 0, 71, 0, 188, + 189, 0, 72, 0, 0, 0, 73, 0, 0, 0, + 74, 0, 0, 0, 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 75, 0, 0, 5, 0, 6, 7, 76, 213, 77, + 214, 0, 215, 216, 217, 0, 218, 219, 220, 0, + 221, 222, 0, 10, 11, 78, 0, 112, 223, 79, + 0, 80, 0, 0, 0, 211, 389, 65, 66, 67, + 2, 68, 0, 69, 212, 0, 70, 0, 71, 0, + 0, 0, 0, 72, 0, 0, 0, 73, 0, 0, + 0, 74, 0, 0, 158, 159, 160, 161, 162, 0, + 164, 165, 166, 0, 0, 0, 169, 170, 171, 172, + 0, 75, 175, 176, 5, 0, 6, 7, 76, 213, + 77, 214, 0, 215, 216, 217, 0, 218, 219, 220, + 0, 221, 222, 0, 10, 11, 78, 0, 112, 0, + 79, 0, 80, 65, 66, 67, 2, 68, 0, 69, + 0, 0, 70, 0, 71, 0, 188, 189, 0, 72, + 0, 0, 0, 120, 0, 0, 0, 74, 0, 0, + 0, 0, 0, 0, 0, 65, 66, 67, 2, 68, + 0, 69, 330, 0, 70, 0, 71, 75, 0, 0, + 0, 72, 0, 0, 76, 73, 77, 114, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 153, 346, 0, 0, 0, 0, 184, 185, 154, 155, - 156, 157, 158, 159, 160, 161, 162, 163, 164, 0, - 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, - 175, 176, 177, 178, 0, 179, 180, 181, 182, 0, + 0, 0, 78, 270, 115, 0, 79, 0, 80, 75, + 0, 65, 66, 67, 2, 68, 76, 69, 77, 114, + 70, 0, 71, 0, 0, 0, 0, 72, 0, 0, + 0, 73, 0, 0, 78, 74, 115, 0, 79, 0, + 80, 0, 0, 65, 66, 67, 2, 68, 0, 69, + 0, 0, 70, 0, 71, 75, 0, 0, 0, 72, + 0, 0, 76, 120, 77, 114, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 78, 0, 115, 0, 79, 0, 80, 75, 0, 65, + 66, 67, 2, 68, 76, 69, 77, 114, 70, 0, + 71, 0, 0, 0, 0, 72, 0, 0, 0, 73, + 0, 0, 78, 74, 115, 0, 79, 0, 80, 0, + 0, 65, 66, 67, 2, 68, 0, 69, 0, 0, + 70, 0, 71, 75, 0, 0, 0, 72, 0, 0, + 76, 73, 77, 0, 0, 74, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, + 0, 0, 79, 109, 80, 75, 0, 65, 66, 67, + 2, 68, 76, 69, 77, 0, 70, 0, 71, 0, + 0, 0, 0, 72, 0, 0, 0, 73, 0, 0, + 78, 74, 115, 0, 79, 0, 80, 0, 0, 65, + 66, 67, 2, 68, 0, 69, 0, 0, 70, 0, + 71, 75, 0, 0, 0, 72, 0, 0, 76, 73, + 77, 114, 0, 74, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, + 79, 0, 80, 75, 0, 65, 66, 67, 2, 68, + 76, 69, 77, 0, 70, 0, 71, 0, 0, 0, + 0, 72, 0, 0, 0, 73, 0, 0, 78, 74, + 0, 0, 79, 0, 80, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, + 158, 159, 160, 161, 162, 0, 76, 165, 77, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 175, 176, + 0, 0, 0, 157, 243, 0, 0, 0, 79, 0, + 80, 158, 159, 160, 161, 162, 163, 164, 165, 166, + 167, 168, 0, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 0, 183, 184, + 185, 186, 188, 189, 158, 159, 160, 161, 162, 0, + 164, 165, 166, 167, 168, 0, 169, 170, 171, 172, + 173, 174, 175, 176, 0, 0, 0, 157, 0, 187, + 0, 0, 0, 188, 189, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 0, 169, 170, 171, + 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, + 182, 0, 183, 184, 185, 186, 188, 189, 158, 159, + 160, 161, 162, 0, 164, 165, 166, 167, 0, 0, + 169, 170, 171, 172, 173, 174, 175, 176, 0, 0, + 0, 157, 0, 0, 0, 0, 208, 188, 189, 158, + 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, + 0, 169, 170, 171, 172, 173, 174, 175, 176, 177, + 178, 179, 180, 181, 182, 0, 183, 184, 185, 186, + 188, 189, 158, 159, 160, 161, 162, 0, 164, 165, + 166, 0, 0, 0, 169, 170, 171, 172, 173, 174, + 175, 176, 0, 0, 0, 157, 265, 339, 0, 0, + 0, 188, 189, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 0, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 0, + 183, 184, 185, 186, 188, 189, 158, 159, 160, 161, + 162, 0, 164, 165, 158, 159, 160, 161, 162, 0, + 0, 0, 0, 0, 175, 176, 0, 0, 0, 157, + 0, 0, 175, 176, 0, 188, 189, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 0, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, + 180, 181, 182, 0, 183, 184, 185, 186, 188, 189, + 0, 0, 0, 0, 0, 0, 188, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 153, 0, 363, 0, 0, 0, - 184, 185, 154, 155, 156, 157, 158, 159, 160, 161, - 162, 163, 164, 0, 165, 166, 167, 168, 169, 170, - 171, 172, 173, 174, 175, 176, 177, 178, 0, 179, - 180, 181, 182, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 157, 356, 0, 0, 0, 0, 188, + 189, 158, 159, 160, 161, 162, 163, 164, 165, 166, + 167, 168, 0, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 0, 183, 184, + 185, 186, 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, 153, - 111, 367, 0, 0, 184, 185, 0, 154, 155, 156, - 157, 158, 159, 160, 161, 162, 163, 164, 0, 165, - 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, - 176, 177, 178, 0, 179, 180, 181, 182, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 157, 0, 371, + 0, 0, 0, 188, 189, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 0, 169, 170, 171, + 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, + 182, 0, 183, 184, 185, 186, 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, 153, 0, 402, 0, 0, 0, 184, - 185, 154, 155, 156, 157, 158, 159, 160, 161, 162, - 163, 164, 0, 165, 166, 167, 168, 169, 170, 171, - 172, 173, 174, 175, 176, 177, 178, 0, 179, 180, - 181, 182, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 157, 112, 412, 0, 0, 188, 189, 0, + 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 0, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 0, 183, 184, 185, + 186, 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, 153, 0, 403, - 0, 0, 0, 184, 185, 154, 155, 156, 157, 158, - 159, 160, 161, 162, 163, 164, 0, 165, 166, 167, - 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, - 178, 0, 179, 180, 181, 182, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 157, 0, 413, 0, + 0, 0, 188, 189, 158, 159, 160, 161, 162, 163, + 164, 165, 166, 167, 168, 0, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, + 0, 183, 184, 185, 186, 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, 153, 0, 0, 408, 0, 0, 184, 185, 154, - 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, - 0, 165, 166, 167, 168, 169, 170, 171, 172, 173, - 174, 175, 176, 177, 178, 0, 179, 180, 181, 182, + 157, 0, 0, 418, 0, 0, 188, 189, 158, 159, + 160, 161, 162, 163, 164, 165, 166, 167, 168, 0, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, + 179, 180, 181, 182, 0, 183, 184, 185, 186, 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, 153, 0, 0, 0, 0, - 0, 184, 185, 154, 155, 156, 157, 158, 159, 160, - 161, 162, 163, 164, 0, 165, 166, 167, 168, 169, - 170, 171, 172, 173, 174, 175, 176, 177, 178, 0, - 179, 180, 181, 182, 0, 412, 0, 0, 0, 0, + 0, 0, 0, 0, 157, 0, 0, 0, 0, 0, + 188, 189, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 0, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 0, 183, + 184, 185, 186, 0, 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, - 0, 0, 0, 0, 0, 184, 185, 154, 155, 156, - 157, 158, 159, 160, 161, 162, 163, 164, 0, 165, - 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, - 176, 177, 178, 0, 179, 180, 181, 182, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 157, 0, + 0, 0, 0, 0, 188, 189, 158, 159, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 0, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 0, 183, 184, 185, 186, 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, 184, - 185 + 0, 0, 0, 0, 0, 0, 0, 0, 188, 189 }; static const yytype_int16 yycheck[] = { - 0, 110, 4, 89, 4, 5, 6, 54, 228, 9, - 10, 11, 12, 4, 4, 4, 93, 9, 6, 4, - 244, 4, 246, 23, 63, 4, 23, 57, 6, 6, - 54, 78, 57, 73, 57, 35, 6, 7, 11, 6, - 80, 57, 42, 13, 44, 45, 46, 63, 6, 74, - 97, 74, 99, 39, 54, 5, 42, 6, 7, 78, - 79, 61, 62, 63, 13, 9, 113, 114, 15, 69, - 57, 10, 10, 97, 51, 99, 6, 7, 78, 79, - 80, 73, 8, 13, 51, 10, 74, 74, 80, 89, - 114, 91, 92, 93, 242, 73, 135, 97, 75, 99, - 248, 74, 102, 103, 74, 152, 76, 0, 108, 111, - 110, 111, 198, 113, 114, 115, 202, 66, 342, 68, - 111, 111, 111, 123, 124, 72, 111, 76, 111, 73, - 10, 131, 111, 6, 7, 135, 57, 72, 10, 74, - 13, 10, 74, 73, 50, 131, 76, 6, 7, 72, - 80, 151, 152, 74, 13, 72, 3, 4, 5, 6, - 7, 300, 9, 302, 211, 12, 48, 14, 215, 72, - 72, 72, 19, 48, 48, 73, 23, 10, 75, 10, - 27, 258, 10, 183, 184, 185, 183, 211, 408, 75, - 79, 5, 16, 17, 18, 73, 196, 197, 198, 199, - 47, 201, 202, 76, 204, 314, 48, 54, 74, 56, - 210, 211, 77, 72, 261, 215, 8, 76, 48, 75, - 73, 221, 74, 48, 73, 72, 228, 10, 228, 76, - 77, 78, 10, 6, 7, 8, 10, 228, 228, 228, - 13, 10, 242, 228, 244, 228, 246, 37, 248, 228, - 10, 10, 6, 43, 78, 79, 75, 47, 258, 6, - 7, 261, 6, 7, 74, 74, 13, 11, 10, 13, - 73, 15, 48, 259, 73, 75, 80, 73, 68, 10, - 70, 71, 72, 73, 74, 191, 6, 7, 78, 64, - 6, 7, 8, 13, 58, 15, 50, 13, 52, 53, - 300, 58, 302, 76, 351, 305, 58, 75, 75, 75, - 73, 217, 62, 11, 314, 69, 70, 71, 58, 75, - 75, 111, 66, 113, 68, 73, 73, 327, 72, 76, - 75, 215, 76, 351, 75, 241, 412, 370, 381, 383, - 340, 404, 342, 314, 4, 340, 66, 135, 68, 377, - -1, 351, 72, -1, 144, -1, 76, -1, -1, 359, - 76, -1, -1, 153, 154, 155, 156, 157, 158, 159, - 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, - 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, - 180, 181, 182, 393, 35, -1, 393, -1, -1, -1, - 306, 42, -1, 44, 45, 46, 408, -1, 408, -1, - -1, 317, -1, -1, 6, 7, 322, 408, 408, 408, - 61, 13, -1, 408, 214, 408, 216, -1, 218, 408, - -1, -1, -1, -1, -1, 6, 7, -1, 228, 80, - -1, -1, 13, 349, 6, 7, -1, -1, 89, -1, - 91, 13, -1, 16, 17, 18, 19, 20, -1, -1, - -1, 102, 368, -1, 370, -1, -1, 108, -1, -1, - -1, 261, -1, 379, 66, 381, 68, 46, -1, -1, - 72, -1, 0, 1, 76, 54, -1, -1, 6, -1, - -1, -1, 10, 62, 63, 66, -1, 68, 404, -1, - 406, 72, -1, 409, 66, 76, 68, -1, -1, 78, - 72, 301, 74, -1, 76, 78, 79, -1, -1, -1, - 89, -1, -1, -1, -1, -1, -1, -1, 97, -1, - 99, 49, 50, -1, 52, 53, 326, -1, -1, -1, - -1, -1, -1, 184, 113, 114, -1, -1, -1, -1, - 68, 69, 70, 71, -1, 196, 197, 198, -1, -1, - 201, 202, -1, 204, -1, -1, 135, -1, 1, -1, - -1, -1, -1, 6, 364, -1, 366, 10, 16, 17, - 18, 19, 20, 152, 22, 23, 24, -1, -1, -1, - -1, -1, 382, -1, -1, -1, 34, 35, 388, -1, - -1, 242, -1, -1, -1, -1, -1, 248, -1, -1, - -1, -1, 402, -1, -1, -1, 49, 50, 408, 52, - 53, -1, 412, -1, -1, -1, -1, -1, -1, 198, - -1, -1, -1, 202, -1, 68, 69, 70, 71, -1, - 78, 79, 211, -1, -1, -1, 215, -1, -1, -1, - 1, -1, 3, 4, 5, 6, 7, -1, 9, 10, - -1, 12, -1, 14, -1, -1, -1, -1, 19, -1, - -1, -1, 23, -1, -1, 244, 27, 246, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 261, -1, -1, -1, 47, -1, -1, 50, - -1, 52, 53, 54, 55, 56, 57, -1, 59, 60, - 61, 62, 63, 64, 65, -1, 67, 68, 359, 70, - 71, 72, -1, 74, 75, 76, -1, 78, -1, -1, - -1, -1, 1, -1, 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, -1, - -1, 340, -1, 342, -1, -1, -1, -1, 47, 34, - 35, 50, 351, 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, + 0, 94, 4, 54, 4, 5, 6, 4, 4, 9, + 10, 11, 12, 78, 4, 4, 15, 4, 243, 39, + 4, 156, 42, 23, 231, 254, 90, 256, 23, 6, + 73, 6, 7, 63, 5, 35, 6, 80, 13, 11, + 57, 57, 42, 57, 44, 45, 46, 98, 57, 100, + 6, 6, 6, 72, 63, 74, 57, 74, 74, 10, + 74, 61, 62, 63, 115, 9, 57, 9, 8, 69, + 6, 7, 306, 72, 308, 6, 7, 13, 78, 79, + 80, 51, 13, 74, 78, 79, 10, 10, 0, 10, + 90, 10, 92, 93, 94, 51, 10, 74, 73, 6, + 7, 76, 74, 103, 104, 80, 13, 137, 15, 109, + 112, 111, 112, 72, 134, 112, 112, 252, 73, 75, + 120, 121, 112, 112, 353, 112, 126, 127, 112, 73, + 66, 73, 68, 72, 134, 46, 80, 137, 202, 72, + 76, 79, 206, 74, 74, 76, 72, 50, 148, 48, + 61, 62, 63, 48, 379, 155, 156, 6, 7, 66, + 78, 68, 11, 72, 13, 72, 15, 78, 48, 76, + 221, 73, 10, 10, 267, 16, 17, 18, 243, 90, + 5, 75, 75, 73, 48, 77, 74, 187, 188, 189, + 6, 7, 187, 8, 48, 73, 75, 13, 48, 73, + 200, 201, 202, 203, 10, 205, 206, 10, 208, 120, + 10, 418, 10, 213, 10, 6, 7, 66, 218, 68, + 75, 10, 13, 72, 224, 48, 137, 76, 75, 231, + 74, 231, 74, 10, 231, 231, 75, 78, 79, 73, + 73, 231, 231, 243, 231, 156, 246, 231, 268, 80, + 250, 73, 252, 37, 254, 10, 256, 73, 10, 43, + 76, 73, 64, 47, 58, 6, 7, 267, 8, 0, + 1, 75, 13, 58, 15, 6, 6, 7, 8, 10, + 75, 72, 58, 13, 68, 76, 70, 71, 72, 73, + 74, 202, 195, 73, 78, 206, 347, 62, 6, 7, + 11, 75, 10, 75, 73, 13, 306, 218, 308, 75, + 58, 311, 75, 218, 422, 347, 214, 220, 49, 50, + 320, 52, 53, 390, 392, 66, 414, 68, 112, 380, + 114, 72, 243, 333, 4, 76, 120, 68, 69, 70, + 71, 252, 245, 254, 75, 256, 76, 6, 7, 8, + 157, 351, 320, 353, 13, 137, 6, 7, 66, 351, + 68, 386, 146, 13, 72, -1, -1, 367, 76, -1, + -1, -1, -1, 157, 158, 159, 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, 403, -1, -1, -1, -1, 403, 312, + -1, -1, -1, 0, 1, -1, 418, 76, 418, 6, + 323, 418, 418, 10, -1, 328, 76, -1, 418, 418, + 214, 418, -1, 217, 418, 219, -1, -1, -1, -1, + 351, -1, 353, -1, 35, -1, -1, 231, -1, -1, + -1, 42, -1, 44, 45, 46, 359, -1, -1, 243, + -1, -1, 49, 50, -1, 52, 53, -1, -1, -1, + -1, -1, -1, 376, -1, -1, 379, -1, -1, -1, + -1, 68, 69, 70, 71, 388, -1, 390, -1, 80, + -1, 1, -1, -1, -1, -1, 6, -1, -1, 90, + 10, 92, 6, 7, 16, 17, 18, 19, 20, 13, + 6, 414, 103, 416, -1, -1, 419, -1, 109, -1, + 111, -1, -1, 307, -1, 3, 4, 5, 6, 7, + -1, 9, -1, -1, 12, -1, 14, -1, -1, 49, + 50, 19, 52, 53, -1, 23, 6, 7, 332, 27, + -1, -1, -1, 13, 50, -1, 52, 53, 68, 69, + 70, 71, 66, -1, 68, -1, 78, 79, 72, 47, + -1, -1, 76, 69, 70, 71, 54, -1, 56, 57, + -1, -1, -1, -1, -1, -1, -1, -1, 372, -1, + 374, -1, -1, -1, 72, -1, 74, 188, 76, -1, + 78, 79, -1, -1, -1, -1, 66, 391, 68, 200, + 201, 202, 72, 397, 205, 206, 76, 208, 1, -1, + 3, 4, 5, 6, 7, -1, 9, 10, 412, 12, + -1, 14, -1, -1, 418, -1, 19, -1, 422, -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, + 19, 20, -1, 22, 23, 24, -1, -1, -1, 250, + -1, -1, -1, -1, 47, 34, 35, 50, -1, 52, + 53, 54, 55, 56, 57, -1, 59, 60, 61, 62, 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, + -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, -1, -1, -1, -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, 73, -1, -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, -1, - -1, 76, -1, 78, -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, 0, 1, - -1, -1, -1, 72, 6, -1, -1, 76, 10, 78, - 47, -1, 3, 4, 5, 6, 7, 54, 9, 56, - -1, 12, -1, 14, -1, -1, -1, -1, 19, -1, - -1, -1, 23, -1, -1, 72, 27, -1, -1, 76, - -1, 78, -1, -1, -1, -1, -1, 49, 50, -1, - 52, 53, -1, -1, -1, -1, 47, 16, 17, 18, - 19, 20, -1, 54, 23, 56, 68, 69, 70, 71, - -1, -1, -1, 75, -1, 34, 35, -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, 78, - 79, 16, 17, 18, 19, 20, -1, 22, 23, 24, - 25, 26, -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, 25, -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, 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, 73, 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, 78, 79, 16, 17, 18, 19, 20, -1, -1, + 27, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 34, 35, -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, 78, 79, -1, -1, -1, + 47, -1, -1, 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, -1, -1, -1, 1, 367, 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, -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, - 8, 73, -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, -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, + 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, -1, + -1, 3, 4, 5, 6, 7, -1, 9, -1, -1, + 12, -1, 14, 47, -1, -1, -1, 19, -1, -1, + 54, 23, 56, -1, -1, 27, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 72, -1, + -1, -1, 76, 77, 78, 47, -1, 3, 4, 5, + 6, 7, 54, 9, 56, -1, 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, -1, -1, + 76, -1, 78, 47, -1, 3, 4, 5, 6, 7, + 54, 9, 56, -1, 12, -1, 14, -1, -1, -1, + -1, 19, -1, -1, -1, 23, -1, -1, 72, 27, + -1, -1, 76, -1, 78, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 47, + 16, 17, 18, 19, 20, -1, 54, 23, 56, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 34, 35, + -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, 78, 79, 16, 17, 18, 19, 20, -1, + 22, 23, 24, 25, 26, -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, 25, -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, 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, 73, 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, 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, + -1, -1, 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, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 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, 10, -1, -1, -1, 78, + -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, 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, -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, 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, 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, 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, + 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, 78, - 79 + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 78, 79 }; /* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of @@ -1251,74 +1268,75 @@ static const yytype_int16 yycheck[] = static const yytype_uint8 yystos[] = { 0, 1, 6, 10, 49, 50, 52, 53, 68, 69, - 70, 71, 82, 83, 85, 102, 119, 120, 121, 127, - 131, 132, 135, 137, 138, 139, 83, 85, 102, 121, - 127, 131, 132, 135, 82, 82, 5, 57, 136, 82, - 82, 82, 7, 13, 66, 68, 72, 76, 82, 114, - 115, 118, 10, 10, 8, 10, 138, 0, 10, 10, - 10, 72, 74, 74, 118, 3, 4, 5, 7, 9, + 70, 71, 82, 83, 85, 103, 122, 123, 124, 130, + 134, 135, 138, 140, 141, 142, 83, 85, 103, 124, + 130, 134, 135, 138, 82, 82, 5, 57, 139, 82, + 82, 82, 7, 13, 66, 68, 72, 76, 82, 119, + 120, 121, 10, 10, 8, 10, 141, 0, 10, 10, + 10, 72, 74, 74, 121, 3, 4, 5, 7, 9, 12, 14, 19, 23, 27, 47, 54, 56, 72, 76, - 78, 82, 84, 86, 87, 92, 93, 94, 122, 72, - 114, 11, 74, 72, 114, 118, 94, 8, 118, 8, - 118, 73, 80, 82, 90, 91, 118, 119, 77, 94, - 72, 74, 100, 23, 57, 82, 94, 104, 105, 119, - 120, 118, 130, 51, 82, 119, 123, 124, 125, 126, - 75, 82, 116, 119, 125, 128, 129, 94, 82, 94, - 94, 94, 94, 94, 72, 72, 94, 120, 82, 101, - 118, 15, 72, 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, 91, 118, 82, 133, - 134, 73, 101, 104, 104, 118, 66, 68, 48, 9, - 73, 80, 48, 118, 77, 82, 116, 117, 1, 10, - 55, 57, 59, 60, 61, 63, 64, 65, 67, 68, - 75, 82, 83, 85, 94, 95, 96, 97, 98, 99, - 100, 102, 106, 107, 110, 113, 127, 131, 132, 135, - 120, 104, 48, 73, 74, 82, 10, 75, 74, 114, - 10, 10, 129, 75, 94, 5, 73, 73, 48, 77, - 82, 23, 73, 88, 89, 104, 119, 94, 94, 94, - 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, - 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, - 94, 94, 94, 94, 94, 94, 94, 138, 118, 82, - 74, 8, 48, 75, 100, 9, 73, 73, 91, 82, - 73, 118, 91, 118, 48, 73, 82, 104, 10, 10, - 94, 88, 94, 100, 10, 94, 57, 63, 111, 112, - 11, 10, 10, 10, 10, 99, 75, 10, 100, 130, - 74, 124, 74, 124, 130, 10, 73, 73, 101, 114, - 119, 48, 73, 75, 134, 94, 134, 82, 100, 80, - 73, 117, 100, 74, 10, 100, 64, 10, 94, 82, - 58, 126, 75, 124, 75, 100, 89, 58, 75, 73, - 118, 58, 62, 108, 109, 94, 94, 100, 11, 100, - 105, 75, 75, 74, 136, 100, 73, 100, 106, 94, - 109, 75, 10, 10, 58, 94, 103, 138, 11, 94, - 100, 112, 48, 100, 75, 99, 100, 103 + 78, 82, 84, 86, 87, 88, 93, 94, 95, 125, + 72, 119, 11, 74, 72, 119, 121, 95, 8, 121, + 8, 121, 73, 80, 82, 91, 92, 121, 122, 77, + 95, 72, 74, 101, 57, 74, 95, 107, 108, 110, + 23, 82, 89, 90, 108, 122, 51, 82, 122, 126, + 127, 128, 129, 75, 82, 122, 128, 131, 132, 95, + 82, 95, 95, 95, 95, 95, 72, 72, 82, 95, + 122, 123, 82, 102, 121, 15, 72, 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, + 92, 121, 82, 136, 137, 73, 102, 108, 108, 121, + 66, 68, 48, 9, 73, 80, 48, 121, 77, 121, + 133, 1, 10, 55, 57, 59, 60, 61, 63, 64, + 65, 67, 68, 75, 82, 83, 85, 95, 96, 97, + 98, 99, 100, 101, 103, 111, 112, 115, 118, 130, + 134, 135, 138, 72, 95, 109, 79, 105, 106, 108, + 78, 122, 48, 73, 74, 82, 10, 75, 10, 119, + 10, 132, 75, 95, 5, 73, 73, 48, 77, 82, + 73, 90, 95, 107, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 141, 121, 82, 74, 8, 48, 75, + 101, 9, 73, 73, 92, 82, 73, 121, 92, 121, + 48, 73, 82, 109, 10, 10, 95, 89, 95, 101, + 10, 108, 57, 63, 116, 117, 11, 10, 10, 10, + 10, 100, 75, 10, 110, 101, 82, 48, 75, 121, + 90, 74, 127, 74, 127, 10, 73, 73, 102, 119, + 73, 75, 137, 95, 137, 82, 101, 80, 73, 133, + 101, 74, 10, 101, 64, 10, 95, 82, 73, 58, + 8, 106, 129, 75, 127, 101, 58, 75, 73, 121, + 58, 62, 113, 114, 95, 95, 101, 11, 101, 110, + 108, 75, 75, 74, 139, 101, 73, 101, 111, 95, + 114, 75, 10, 10, 58, 95, 104, 141, 11, 95, + 101, 117, 48, 101, 75, 100, 101, 104 }; /* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */ static const yytype_uint8 yyr1[] = { - 0, 81, 82, 83, 83, 84, 85, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 87, 87, 87, - 87, 87, 88, 88, 88, 89, 89, 90, 91, 91, - 91, 91, 92, 92, 93, 94, 94, 94, 94, 94, - 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, - 94, 94, 94, 94, 95, 96, 97, 98, 98, 98, - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, - 99, 99, 100, 100, 101, 101, 102, 102, 102, 103, - 103, 104, 104, 104, 104, 105, 105, 106, 106, 106, - 107, 108, 109, 109, 110, 111, 112, 112, 112, 113, - 113, 114, 114, 114, 114, 114, 115, 115, 116, 116, - 117, 117, 118, 118, 118, 118, 118, 118, 118, 119, - 119, 119, 120, 120, 120, 121, 121, 122, 123, 123, - 124, 124, 125, 125, 126, 127, 127, 128, 128, 128, - 128, 129, 129, 130, 130, 131, 132, 132, 133, 133, - 134, 134, 134, 135, 135, 136, 136, 136, 137, 137, - 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, - 137, 137, 137, 137, 137, 137, 137, 138, 138, 139, - 139 + 0, 81, 82, 83, 83, 84, 85, 86, 86, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 88, 88, + 88, 88, 88, 89, 89, 89, 90, 90, 91, 92, + 92, 92, 92, 93, 93, 94, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 96, 97, 98, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 100, 100, 101, 101, 102, 102, 103, 103, + 103, 104, 104, 105, 105, 106, 106, 107, 108, 108, + 108, 108, 109, 109, 110, 110, 111, 111, 111, 112, + 113, 114, 114, 115, 116, 117, 117, 117, 118, 118, + 119, 119, 119, 119, 119, 120, 120, 121, 121, 121, + 121, 121, 121, 121, 122, 122, 122, 123, 123, 123, + 124, 124, 125, 126, 126, 127, 127, 128, 128, 129, + 130, 130, 131, 131, 131, 131, 132, 132, 133, 133, + 134, 135, 135, 136, 136, 137, 137, 137, 138, 138, + 139, 139, 139, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 141, 141, 142, 142 }; /* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. */ @@ -1327,25 +1345,25 @@ static const yytype_int8 yyr2[] = 0, 2, 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, 3, 2, 1, - 1, 1, 1, 3, 1, 1, 1, 1, 3, 2, - 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, 1, 2, 1, 5, 5, 3, 5, 5, - 7, 4, 2, 1, 5, 5, 3, 5, 5, 2, - 2, 5, 3, 4, 4, 2, 1, 7, 4, 1, - 3, 1, 1, 2, 4, 2, 3, 4, 2, 3, - 3, 2, 3, 4, 4, 3, 3, 5, 1, 1, - 3, 2, 5, 4, 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, 2, 2, 2, 1, 2, 2, 2, - 2, 3, 3, 2, 2, 3, 1, 1, 2, 1, - 0 + 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, 3, 2, + 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, + 3, 2, 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, 2, 3, 4, 4, + 3, 3, 5, 1, 1, 3, 2, 5, 4, 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, 2, 2, + 2, 1, 2, 2, 2, 2, 3, 3, 2, 2, + 3, 1, 1, 2, 1, 0 }; @@ -1909,369 +1927,387 @@ yydestruct (const char *yymsg, switch (yykind) { case YYSYMBOL_INT: /* INT */ -#line 141 "src/parser.y" +#line 142 "src/parser.y" {} -#line 1915 "src/gen_parser.c" +#line 1933 "src/gen_parser.c" break; case YYSYMBOL_FLOAT: /* FLOAT */ -#line 141 "src/parser.y" +#line 142 "src/parser.y" {} -#line 1921 "src/gen_parser.c" +#line 1939 "src/gen_parser.c" break; case YYSYMBOL_STRING: /* STRING */ -#line 141 "src/parser.y" +#line 142 "src/parser.y" {} -#line 1927 "src/gen_parser.c" +#line 1945 "src/gen_parser.c" break; case YYSYMBOL_ID: /* ID */ -#line 141 "src/parser.y" +#line 142 "src/parser.y" {} -#line 1933 "src/gen_parser.c" +#line 1951 "src/gen_parser.c" break; case YYSYMBOL_id: /* id */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 1939 "src/gen_parser.c" +#line 1957 "src/gen_parser.c" break; case YYSYMBOL_var: /* var */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 1945 "src/gen_parser.c" +#line 1963 "src/gen_parser.c" break; case YYSYMBOL_embed: /* embed */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 1951 "src/gen_parser.c" +#line 1969 "src/gen_parser.c" break; case YYSYMBOL_import: /* import */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 1957 "src/gen_parser.c" +#line 1975 "src/gen_parser.c" + break; + + case YYSYMBOL_assign: /* assign */ +#line 143 "src/parser.y" + { destroy_ast_tree(((*yyvaluep).node)); } +#line 1981 "src/gen_parser.c" break; case YYSYMBOL_binary_op: /* binary_op */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 1963 "src/gen_parser.c" +#line 1987 "src/gen_parser.c" break; case YYSYMBOL_unary_op: /* unary_op */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 1969 "src/gen_parser.c" +#line 1993 "src/gen_parser.c" break; case YYSYMBOL_arg: /* arg */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 1975 "src/gen_parser.c" +#line 1999 "src/gen_parser.c" break; case YYSYMBOL_arg_list: /* arg_list */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 1981 "src/gen_parser.c" +#line 2005 "src/gen_parser.c" break; case YYSYMBOL_param_decl: /* param_decl */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 1987 "src/gen_parser.c" +#line 2011 "src/gen_parser.c" break; case YYSYMBOL_decl_list: /* decl_list */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 1993 "src/gen_parser.c" +#line 2017 "src/gen_parser.c" break; case YYSYMBOL_call: /* call */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 1999 "src/gen_parser.c" +#line 2023 "src/gen_parser.c" break; case YYSYMBOL_defer: /* defer */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2005 "src/gen_parser.c" +#line 2029 "src/gen_parser.c" break; case YYSYMBOL_expr: /* expr */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2011 "src/gen_parser.c" +#line 2035 "src/gen_parser.c" break; case YYSYMBOL_while: /* while */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2017 "src/gen_parser.c" +#line 2041 "src/gen_parser.c" break; case YYSYMBOL_do_while: /* do_while */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2023 "src/gen_parser.c" +#line 2047 "src/gen_parser.c" break; case YYSYMBOL_goto: /* goto */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2029 "src/gen_parser.c" +#line 2053 "src/gen_parser.c" break; case YYSYMBOL_statement: /* statement */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2035 "src/gen_parser.c" +#line 2059 "src/gen_parser.c" break; case YYSYMBOL_statement_list: /* statement_list */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2041 "src/gen_parser.c" +#line 2065 "src/gen_parser.c" break; case YYSYMBOL_body: /* body */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2047 "src/gen_parser.c" +#line 2071 "src/gen_parser.c" break; case YYSYMBOL_macro_list: /* macro_list */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2053 "src/gen_parser.c" +#line 2077 "src/gen_parser.c" break; case YYSYMBOL_macro: /* macro */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2059 "src/gen_parser.c" +#line 2083 "src/gen_parser.c" break; case YYSYMBOL_expr_list: /* expr_list */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2065 "src/gen_parser.c" +#line 2089 "src/gen_parser.c" + break; + + case YYSYMBOL_struct_init: /* struct_init */ +#line 143 "src/parser.y" + { destroy_ast_tree(((*yyvaluep).node)); } +#line 2095 "src/gen_parser.c" + break; + + case YYSYMBOL_struct_inits: /* struct_inits */ +#line 143 "src/parser.y" + { destroy_ast_tree(((*yyvaluep).node)); } +#line 2101 "src/gen_parser.c" + break; + + case YYSYMBOL_struct_construct: /* struct_construct */ +#line 143 "src/parser.y" + { destroy_ast_tree(((*yyvaluep).node)); } +#line 2107 "src/gen_parser.c" break; case YYSYMBOL_init_expr: /* init_expr */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2071 "src/gen_parser.c" +#line 2113 "src/gen_parser.c" + break; + + case YYSYMBOL_cond: /* cond */ +#line 143 "src/parser.y" + { destroy_ast_tree(((*yyvaluep).node)); } +#line 2119 "src/gen_parser.c" break; case YYSYMBOL_expr_if: /* expr_if */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2077 "src/gen_parser.c" +#line 2125 "src/gen_parser.c" break; case YYSYMBOL_if: /* if */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2083 "src/gen_parser.c" +#line 2131 "src/gen_parser.c" break; case YYSYMBOL_for: /* for */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2089 "src/gen_parser.c" +#line 2137 "src/gen_parser.c" break; case YYSYMBOL_case: /* case */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2095 "src/gen_parser.c" +#line 2143 "src/gen_parser.c" break; case YYSYMBOL_case_list: /* case_list */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2101 "src/gen_parser.c" +#line 2149 "src/gen_parser.c" break; case YYSYMBOL_switch: /* switch */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2107 "src/gen_parser.c" +#line 2155 "src/gen_parser.c" break; case YYSYMBOL_const_for: /* const_for */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2113 "src/gen_parser.c" +#line 2161 "src/gen_parser.c" break; case YYSYMBOL_const_if: /* const_if */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2119 "src/gen_parser.c" +#line 2167 "src/gen_parser.c" break; case YYSYMBOL_const: /* const */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2125 "src/gen_parser.c" +#line 2173 "src/gen_parser.c" break; case YYSYMBOL_func_sign: /* func_sign */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2131 "src/gen_parser.c" +#line 2179 "src/gen_parser.c" break; case YYSYMBOL_variadic_sign: /* variadic_sign */ -#line 142 "src/parser.y" - { destroy_ast_tree(((*yyvaluep).node)); } -#line 2137 "src/gen_parser.c" - break; - - case YYSYMBOL_impl: /* impl */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2143 "src/gen_parser.c" - break; - - case YYSYMBOL_impl_list: /* impl_list */ -#line 142 "src/parser.y" - { destroy_ast_tree(((*yyvaluep).node)); } -#line 2149 "src/gen_parser.c" +#line 2185 "src/gen_parser.c" break; case YYSYMBOL_type: /* type */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2155 "src/gen_parser.c" +#line 2191 "src/gen_parser.c" break; case YYSYMBOL_var_decl: /* var_decl */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2161 "src/gen_parser.c" +#line 2197 "src/gen_parser.c" break; case YYSYMBOL_var_init: /* var_init */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2167 "src/gen_parser.c" +#line 2203 "src/gen_parser.c" break; case YYSYMBOL_proc: /* proc */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2173 "src/gen_parser.c" +#line 2209 "src/gen_parser.c" break; case YYSYMBOL_lambda: /* lambda */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2179 "src/gen_parser.c" +#line 2215 "src/gen_parser.c" break; case YYSYMBOL_union_elem: /* union_elem */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2185 "src/gen_parser.c" +#line 2221 "src/gen_parser.c" break; case YYSYMBOL_union_list: /* union_list */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2191 "src/gen_parser.c" +#line 2227 "src/gen_parser.c" break; case YYSYMBOL_union: /* union */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2197 "src/gen_parser.c" +#line 2233 "src/gen_parser.c" break; case YYSYMBOL_struct_list: /* struct_list */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2203 "src/gen_parser.c" +#line 2239 "src/gen_parser.c" break; case YYSYMBOL_struct: /* struct */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2209 "src/gen_parser.c" +#line 2245 "src/gen_parser.c" break; case YYSYMBOL_template_elem: /* template_elem */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2215 "src/gen_parser.c" +#line 2251 "src/gen_parser.c" break; case YYSYMBOL_template_list: /* template_list */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2221 "src/gen_parser.c" +#line 2257 "src/gen_parser.c" break; case YYSYMBOL_type_list: /* type_list */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2227 "src/gen_parser.c" +#line 2263 "src/gen_parser.c" break; case YYSYMBOL_type_alias: /* type_alias */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2233 "src/gen_parser.c" +#line 2269 "src/gen_parser.c" break; case YYSYMBOL_type_template: /* type_template */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2239 "src/gen_parser.c" +#line 2275 "src/gen_parser.c" break; case YYSYMBOL_enum_val: /* enum_val */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2245 "src/gen_parser.c" +#line 2281 "src/gen_parser.c" break; case YYSYMBOL_enum_list: /* enum_list */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2251 "src/gen_parser.c" +#line 2287 "src/gen_parser.c" break; case YYSYMBOL_enum: /* enum */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2257 "src/gen_parser.c" +#line 2293 "src/gen_parser.c" break; case YYSYMBOL_top_if: /* top_if */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2263 "src/gen_parser.c" +#line 2299 "src/gen_parser.c" break; case YYSYMBOL_top: /* top */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2269 "src/gen_parser.c" +#line 2305 "src/gen_parser.c" break; case YYSYMBOL_unit: /* unit */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2275 "src/gen_parser.c" +#line 2311 "src/gen_parser.c" break; default: @@ -2575,603 +2611,615 @@ yyreduce: switch (yyn) { case 2: /* id: ID */ -#line 146 "src/parser.y" +#line 147 "src/parser.y" { (yyval.node) = gen_id(strdup((yyvsp[0].str))); (yyval.node)->loc = to_src_loc(&yylloc); } -#line 2584 "src/gen_parser.c" +#line 2620 "src/gen_parser.c" break; case 3: /* var: var_decl */ -#line 152 "src/parser.y" +#line 153 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 2590 "src/gen_parser.c" +#line 2626 "src/gen_parser.c" break; case 4: /* var: var_init */ -#line 153 "src/parser.y" +#line 154 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 2596 "src/gen_parser.c" +#line 2632 "src/gen_parser.c" break; case 5: /* embed: "embed" "(" STRING ")" */ -#line 156 "src/parser.y" +#line 157 "src/parser.y" { (yyval.node) = gen_embed(clone_string((yyvsp[-1].str))); } -#line 2602 "src/gen_parser.c" +#line 2638 "src/gen_parser.c" break; case 6: /* import: "import" STRING */ -#line 159 "src/parser.y" +#line 160 "src/parser.y" { (yyval.node) = gen_import(clone_string((yyvsp[0].str))); } -#line 2608 "src/gen_parser.c" - break; - - case 7: /* binary_op: expr "=" expr */ -#line 162 "src/parser.y" - { (yyval.node) = gen_binop(AST_ASSIGN, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2614 "src/gen_parser.c" +#line 2644 "src/gen_parser.c" break; - case 8: /* binary_op: expr "+" expr */ + case 7: /* assign: expr "=" expr */ #line 163 "src/parser.y" - { (yyval.node) = gen_binop(AST_ADD, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2620 "src/gen_parser.c" + { (yyval.node) = gen_assign((yyvsp[-2].node), (yyvsp[0].node)); } +#line 2650 "src/gen_parser.c" break; - case 9: /* binary_op: expr "-" expr */ + case 8: /* assign: expr "=" struct_construct */ #line 164 "src/parser.y" + { (yyval.node) = gen_assign((yyvsp[-2].node), (yyvsp[0].node)); } +#line 2656 "src/gen_parser.c" + break; + + case 9: /* binary_op: expr "+" expr */ +#line 167 "src/parser.y" + { (yyval.node) = gen_binop(AST_ADD, (yyvsp[-2].node), (yyvsp[0].node)); } +#line 2662 "src/gen_parser.c" + break; + + case 10: /* binary_op: expr "-" expr */ +#line 168 "src/parser.y" { (yyval.node) = gen_binop(AST_SUB, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2626 "src/gen_parser.c" +#line 2668 "src/gen_parser.c" break; - case 10: /* binary_op: expr "*" expr */ -#line 165 "src/parser.y" + case 11: /* binary_op: expr "*" expr */ +#line 169 "src/parser.y" { (yyval.node) = gen_binop(AST_MUL, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2632 "src/gen_parser.c" +#line 2674 "src/gen_parser.c" break; - case 11: /* binary_op: expr "/" expr */ -#line 166 "src/parser.y" + case 12: /* binary_op: expr "/" expr */ +#line 170 "src/parser.y" { (yyval.node) = gen_binop(AST_DIV, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2638 "src/gen_parser.c" +#line 2680 "src/gen_parser.c" break; - case 12: /* binary_op: expr "%" expr */ -#line 167 "src/parser.y" + case 13: /* binary_op: expr "%" expr */ +#line 171 "src/parser.y" { (yyval.node) = gen_binop(AST_REM, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2644 "src/gen_parser.c" +#line 2686 "src/gen_parser.c" break; - case 13: /* binary_op: expr "^" expr */ -#line 168 "src/parser.y" + case 14: /* binary_op: expr "^" expr */ +#line 172 "src/parser.y" { (yyval.node) = gen_binop(AST_XOR, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2650 "src/gen_parser.c" +#line 2692 "src/gen_parser.c" break; - case 14: /* binary_op: expr "^^" expr */ -#line 169 "src/parser.y" + case 15: /* binary_op: expr "^^" expr */ +#line 173 "src/parser.y" { (yyval.node) = gen_binop(AST_POW, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2656 "src/gen_parser.c" +#line 2698 "src/gen_parser.c" break; - case 15: /* binary_op: expr "&" expr */ -#line 170 "src/parser.y" + case 16: /* binary_op: expr "&" expr */ +#line 174 "src/parser.y" { (yyval.node) = gen_binop(AST_AND, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2662 "src/gen_parser.c" +#line 2704 "src/gen_parser.c" break; - case 16: /* binary_op: expr "&&" expr */ -#line 171 "src/parser.y" + case 17: /* binary_op: expr "&&" expr */ +#line 175 "src/parser.y" { (yyval.node) = gen_binop(AST_LAND, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2668 "src/gen_parser.c" +#line 2710 "src/gen_parser.c" break; - case 17: /* binary_op: expr "|" expr */ -#line 172 "src/parser.y" + case 18: /* binary_op: expr "|" expr */ +#line 176 "src/parser.y" { (yyval.node) = gen_binop(AST_OR, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2674 "src/gen_parser.c" +#line 2716 "src/gen_parser.c" break; - case 18: /* binary_op: expr "||" expr */ -#line 173 "src/parser.y" + case 19: /* binary_op: expr "||" expr */ +#line 177 "src/parser.y" { (yyval.node) = gen_binop(AST_LOR, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2680 "src/gen_parser.c" +#line 2722 "src/gen_parser.c" break; - case 19: /* binary_op: expr "<<" expr */ -#line 174 "src/parser.y" + case 20: /* binary_op: expr "<<" expr */ +#line 178 "src/parser.y" { (yyval.node) = gen_binop(AST_LSHIFT, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2686 "src/gen_parser.c" +#line 2728 "src/gen_parser.c" break; - case 20: /* binary_op: expr ">>" expr */ -#line 175 "src/parser.y" + case 21: /* binary_op: expr ">>" expr */ +#line 179 "src/parser.y" { (yyval.node) = gen_binop(AST_RSHIFT, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2692 "src/gen_parser.c" +#line 2734 "src/gen_parser.c" break; - case 21: /* binary_op: expr "+=" expr */ -#line 176 "src/parser.y" + case 22: /* binary_op: expr "+=" expr */ +#line 180 "src/parser.y" { (yyval.node) = gen_binop(AST_ASSIGN_ADD, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2698 "src/gen_parser.c" +#line 2740 "src/gen_parser.c" break; - case 22: /* binary_op: expr "-=" expr */ -#line 177 "src/parser.y" + case 23: /* binary_op: expr "-=" expr */ +#line 181 "src/parser.y" { (yyval.node) = gen_binop(AST_ASSIGN_SUB, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2704 "src/gen_parser.c" +#line 2746 "src/gen_parser.c" break; - case 23: /* binary_op: expr "*=" expr */ -#line 178 "src/parser.y" + case 24: /* binary_op: expr "*=" expr */ +#line 182 "src/parser.y" { (yyval.node) = gen_binop(AST_ASSIGN_MUL, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2710 "src/gen_parser.c" +#line 2752 "src/gen_parser.c" break; - case 24: /* binary_op: expr "/=" expr */ -#line 179 "src/parser.y" + case 25: /* binary_op: expr "/=" expr */ +#line 183 "src/parser.y" { (yyval.node) = gen_binop(AST_ASSIGN_DIV, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2716 "src/gen_parser.c" +#line 2758 "src/gen_parser.c" break; - case 25: /* binary_op: expr "%=" expr */ -#line 180 "src/parser.y" + case 26: /* binary_op: expr "%=" expr */ +#line 184 "src/parser.y" { (yyval.node) = gen_binop(AST_ASSIGN_REM, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2722 "src/gen_parser.c" +#line 2764 "src/gen_parser.c" break; - case 26: /* binary_op: expr "&=" expr */ -#line 181 "src/parser.y" + case 27: /* binary_op: expr "&=" expr */ +#line 185 "src/parser.y" { (yyval.node) = gen_binop(AST_ASSIGN_AND, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2728 "src/gen_parser.c" +#line 2770 "src/gen_parser.c" break; - case 27: /* binary_op: expr "|=" expr */ -#line 182 "src/parser.y" + case 28: /* binary_op: expr "|=" expr */ +#line 186 "src/parser.y" { (yyval.node) = gen_binop(AST_ASSIGN_OR, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2734 "src/gen_parser.c" +#line 2776 "src/gen_parser.c" break; - case 28: /* binary_op: expr "^=" expr */ -#line 183 "src/parser.y" + case 29: /* binary_op: expr "^=" expr */ +#line 187 "src/parser.y" { (yyval.node) = gen_binop(AST_ASSIGN_XOR, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2740 "src/gen_parser.c" +#line 2782 "src/gen_parser.c" break; - case 29: /* binary_op: expr "<<=" expr */ -#line 184 "src/parser.y" + case 30: /* binary_op: expr "<<=" expr */ +#line 188 "src/parser.y" { (yyval.node) = gen_binop(AST_ASSIGN_LSHIFT, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2748 "src/gen_parser.c" +#line 2790 "src/gen_parser.c" break; - case 30: /* binary_op: expr ">>=" expr */ -#line 187 "src/parser.y" + case 31: /* binary_op: expr ">>=" expr */ +#line 191 "src/parser.y" { (yyval.node) = gen_binop(AST_ASSIGN_RSHIFT, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2756 "src/gen_parser.c" +#line 2798 "src/gen_parser.c" break; - case 31: /* binary_op: expr "<" expr */ -#line 190 "src/parser.y" + case 32: /* binary_op: expr "<" expr */ +#line 194 "src/parser.y" { (yyval.node) = gen_binop(AST_LT, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2762 "src/gen_parser.c" +#line 2804 "src/gen_parser.c" break; - case 32: /* binary_op: expr ">" expr */ -#line 191 "src/parser.y" + case 33: /* binary_op: expr ">" expr */ +#line 195 "src/parser.y" { (yyval.node) = gen_binop(AST_GT, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2768 "src/gen_parser.c" +#line 2810 "src/gen_parser.c" break; - case 33: /* binary_op: expr "<=" expr */ -#line 192 "src/parser.y" + case 34: /* binary_op: expr "<=" expr */ +#line 196 "src/parser.y" { (yyval.node) = gen_binop(AST_LE, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2774 "src/gen_parser.c" +#line 2816 "src/gen_parser.c" break; - case 34: /* binary_op: expr ">=" expr */ -#line 193 "src/parser.y" + case 35: /* binary_op: expr ">=" expr */ +#line 197 "src/parser.y" { (yyval.node) = gen_binop(AST_GE, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2780 "src/gen_parser.c" +#line 2822 "src/gen_parser.c" break; - case 35: /* binary_op: expr "!=" expr */ -#line 194 "src/parser.y" + case 36: /* binary_op: expr "!=" expr */ +#line 198 "src/parser.y" { (yyval.node) = gen_binop(AST_NE, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2786 "src/gen_parser.c" +#line 2828 "src/gen_parser.c" break; - case 36: /* binary_op: expr "==" expr */ -#line 195 "src/parser.y" + case 37: /* binary_op: expr "==" expr */ +#line 199 "src/parser.y" { (yyval.node) = gen_binop(AST_EQ, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2792 "src/gen_parser.c" +#line 2834 "src/gen_parser.c" break; - case 37: /* unary_op: "-" expr */ -#line 198 "src/parser.y" + case 38: /* unary_op: "-" expr */ +#line 202 "src/parser.y" { (yyval.node) = gen_unop(AST_NEG, (yyvsp[0].node)); } -#line 2798 "src/gen_parser.c" +#line 2840 "src/gen_parser.c" break; - case 38: /* unary_op: "!" expr */ -#line 199 "src/parser.y" + case 39: /* unary_op: "!" expr */ +#line 203 "src/parser.y" { (yyval.node) = gen_unop(AST_LNOT, (yyvsp[0].node)); } -#line 2804 "src/gen_parser.c" +#line 2846 "src/gen_parser.c" break; - case 39: /* unary_op: "&" expr */ -#line 200 "src/parser.y" + case 40: /* unary_op: "&" expr */ +#line 204 "src/parser.y" { (yyval.node) = gen_unop(AST_REF, (yyvsp[0].node)); } -#line 2810 "src/gen_parser.c" +#line 2852 "src/gen_parser.c" break; - case 40: /* unary_op: "'" expr */ -#line 201 "src/parser.y" + case 41: /* unary_op: "'" expr */ +#line 205 "src/parser.y" { (yyval.node) = gen_unop(AST_DEREF, (yyvsp[0].node)); } -#line 2816 "src/gen_parser.c" +#line 2858 "src/gen_parser.c" break; - case 41: /* unary_op: "~" expr */ -#line 202 "src/parser.y" + case 42: /* unary_op: "~" expr */ +#line 206 "src/parser.y" { (yyval.node) = gen_unop(AST_NOT, (yyvsp[0].node)); } -#line 2822 "src/gen_parser.c" +#line 2864 "src/gen_parser.c" break; - case 42: /* arg: "&" var_decl */ -#line 205 "src/parser.y" - { (yyval.node) = gen_unop(SQUOTE, (yyvsp[0].node)); } -#line 2828 "src/gen_parser.c" + case 43: /* arg: "&" var_decl */ +#line 209 "src/parser.y" + { (yyval.node) = gen_unop(AST_REF, (yyvsp[0].node)); } +#line 2870 "src/gen_parser.c" break; - case 43: /* arg: var_decl */ -#line 206 "src/parser.y" + case 44: /* arg: var_decl */ +#line 210 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 2834 "src/gen_parser.c" +#line 2876 "src/gen_parser.c" break; - case 44: /* arg: init_expr */ -#line 207 "src/parser.y" + case 45: /* arg: init_expr */ +#line 211 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 2840 "src/gen_parser.c" +#line 2882 "src/gen_parser.c" break; - case 45: /* arg_list: arg "," arg_list */ -#line 210 "src/parser.y" + case 46: /* arg_list: arg "," arg_list */ +#line 214 "src/parser.y" { (yyval.node) = (yyvsp[-2].node); (yyvsp[-2].node)->next = (yyvsp[0].node); } -#line 2846 "src/gen_parser.c" +#line 2888 "src/gen_parser.c" break; - case 46: /* arg_list: arg */ -#line 211 "src/parser.y" + case 47: /* arg_list: arg */ +#line 215 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 2852 "src/gen_parser.c" +#line 2894 "src/gen_parser.c" break; - case 47: /* param_decl: type */ -#line 214 "src/parser.y" + case 48: /* param_decl: type */ +#line 218 "src/parser.y" { (yyval.node) = gen_var(NULL, (yyvsp[0].node), NULL); } -#line 2858 "src/gen_parser.c" +#line 2900 "src/gen_parser.c" break; - case 48: /* decl_list: var_decl "," decl_list */ -#line 216 "src/parser.y" + case 49: /* decl_list: var_decl "," decl_list */ +#line 220 "src/parser.y" { (yyval.node) = (yyvsp[-2].node); (yyvsp[-2].node)->next = (yyvsp[0].node); } -#line 2864 "src/gen_parser.c" +#line 2906 "src/gen_parser.c" break; - case 49: /* decl_list: param_decl "," decl_list */ -#line 217 "src/parser.y" + case 50: /* decl_list: param_decl "," decl_list */ +#line 221 "src/parser.y" { (yyval.node) = (yyvsp[-2].node); (yyvsp[-2].node)->next = (yyvsp[0].node); } -#line 2870 "src/gen_parser.c" +#line 2912 "src/gen_parser.c" break; - case 50: /* decl_list: var_decl */ -#line 218 "src/parser.y" + case 51: /* decl_list: var_decl */ +#line 222 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 2876 "src/gen_parser.c" +#line 2918 "src/gen_parser.c" break; - case 51: /* decl_list: param_decl */ -#line 219 "src/parser.y" + case 52: /* decl_list: param_decl */ +#line 223 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 2882 "src/gen_parser.c" +#line 2924 "src/gen_parser.c" break; - case 52: /* call: id "(" arg_list ")" */ -#line 223 "src/parser.y" + case 53: /* call: id "(" arg_list ")" */ +#line 227 "src/parser.y" { (yyval.node) = gen_call((yyvsp[-3].node), (yyvsp[-1].node)); } -#line 2888 "src/gen_parser.c" +#line 2930 "src/gen_parser.c" break; - case 53: /* call: id "(" ")" */ -#line 224 "src/parser.y" + case 54: /* call: id "(" ")" */ +#line 228 "src/parser.y" { (yyval.node) = gen_call((yyvsp[-2].node), NULL); } -#line 2894 "src/gen_parser.c" +#line 2936 "src/gen_parser.c" break; - case 54: /* defer: "defer" "(" expr ")" */ -#line 227 "src/parser.y" + case 55: /* defer: "defer" "(" expr ")" */ +#line 231 "src/parser.y" { (yyval.node) = gen_defer((yyvsp[-1].node)); } -#line 2900 "src/gen_parser.c" +#line 2942 "src/gen_parser.c" break; - case 55: /* expr: id */ -#line 231 "src/parser.y" + case 56: /* expr: id */ +#line 235 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 2906 "src/gen_parser.c" +#line 2948 "src/gen_parser.c" break; - case 56: /* expr: expr "." id */ -#line 232 "src/parser.y" + case 57: /* expr: expr "." id */ +#line 236 "src/parser.y" { (yyval.node) = gen_dot((yyvsp[-2].node), (yyvsp[0].node)); } -#line 2912 "src/gen_parser.c" +#line 2954 "src/gen_parser.c" break; - case 57: /* expr: id "##" id */ -#line 233 "src/parser.y" + case 58: /* expr: id "##" id */ +#line 237 "src/parser.y" { (yyval.node) = gen_paste((yyvsp[-2].node), (yyvsp[0].node)); } -#line 2918 "src/gen_parser.c" +#line 2960 "src/gen_parser.c" break; - case 58: /* expr: "..." id */ -#line 234 "src/parser.y" + case 59: /* expr: "..." id */ +#line 238 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 2924 "src/gen_parser.c" +#line 2966 "src/gen_parser.c" break; - case 59: /* expr: "@" */ -#line 235 "src/parser.y" + case 60: /* expr: "@" */ +#line 239 "src/parser.y" { (yyval.node) = gen_last(); } -#line 2930 "src/gen_parser.c" +#line 2972 "src/gen_parser.c" break; - case 60: /* expr: INT */ -#line 236 "src/parser.y" + case 61: /* expr: INT */ +#line 240 "src/parser.y" { (yyval.node) = gen_int((yyvsp[0].integer)); (yyval.node)->loc = to_src_loc(&yylloc); } -#line 2936 "src/gen_parser.c" +#line 2978 "src/gen_parser.c" break; - case 61: /* expr: FLOAT */ -#line 237 "src/parser.y" + case 62: /* expr: FLOAT */ +#line 241 "src/parser.y" { (yyval.node) = gen_float((yyvsp[0].dbl)); (yyval.node)->loc = to_src_loc(&yylloc); } -#line 2942 "src/gen_parser.c" +#line 2984 "src/gen_parser.c" break; - case 62: /* expr: STRING */ -#line 238 "src/parser.y" + case 63: /* expr: STRING */ +#line 242 "src/parser.y" { (yyval.node) = gen_string(clone_string((yyvsp[0].str))); (yyval.node)->loc = to_src_loc(&yylloc); } -#line 2951 "src/gen_parser.c" +#line 2993 "src/gen_parser.c" break; - case 63: /* expr: "(" expr ")" */ -#line 242 "src/parser.y" + case 64: /* expr: "(" expr ")" */ +#line 246 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); } -#line 2957 "src/gen_parser.c" +#line 2999 "src/gen_parser.c" + break; + + case 65: /* expr: assign */ +#line 247 "src/parser.y" + { (yyval.node) = (yyvsp[0].node); } +#line 3005 "src/gen_parser.c" break; - case 64: /* expr: call */ -#line 243 "src/parser.y" + case 66: /* expr: call */ +#line 248 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 2963 "src/gen_parser.c" +#line 3011 "src/gen_parser.c" break; - case 65: /* expr: defer */ -#line 244 "src/parser.y" + case 67: /* expr: defer */ +#line 249 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 2969 "src/gen_parser.c" +#line 3017 "src/gen_parser.c" break; - case 66: /* expr: binary_op */ -#line 245 "src/parser.y" + case 68: /* expr: binary_op */ +#line 250 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 2975 "src/gen_parser.c" +#line 3023 "src/gen_parser.c" break; - case 67: /* expr: unary_op */ -#line 246 "src/parser.y" + case 69: /* expr: unary_op */ +#line 251 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 2981 "src/gen_parser.c" +#line 3029 "src/gen_parser.c" break; - case 68: /* expr: "(" var_init ")" */ -#line 247 "src/parser.y" + case 70: /* expr: "(" var_init ")" */ +#line 252 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); } -#line 2987 "src/gen_parser.c" +#line 3035 "src/gen_parser.c" break; - case 69: /* expr: "sizeof" expr */ -#line 248 "src/parser.y" + case 71: /* expr: "sizeof" expr */ +#line 253 "src/parser.y" { (yyval.node) = gen_sizeof((yyvsp[0].node)); } -#line 2993 "src/gen_parser.c" +#line 3041 "src/gen_parser.c" break; - case 70: /* expr: expr "as" type */ -#line 249 "src/parser.y" + case 72: /* expr: expr "as" type */ +#line 254 "src/parser.y" { (yyval.node) = gen_cast((yyvsp[-2].node), (yyvsp[0].node)); } -#line 2999 "src/gen_parser.c" +#line 3047 "src/gen_parser.c" break; - case 71: /* expr: "as" type */ -#line 250 "src/parser.y" + case 73: /* expr: "as" type */ +#line 255 "src/parser.y" { (yyval.node) = gen_as((yyvsp[0].node)); } -#line 3005 "src/gen_parser.c" +#line 3053 "src/gen_parser.c" break; - case 72: /* expr: embed */ -#line 251 "src/parser.y" + case 74: /* expr: embed */ +#line 256 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3011 "src/gen_parser.c" +#line 3059 "src/gen_parser.c" break; - case 73: /* expr: lambda */ -#line 252 "src/parser.y" + case 75: /* expr: lambda */ +#line 257 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3017 "src/gen_parser.c" +#line 3065 "src/gen_parser.c" break; - case 74: /* while: "while" expr body */ -#line 255 "src/parser.y" + case 76: /* while: "while" expr body */ +#line 260 "src/parser.y" { (yyval.node) = gen_while((yyvsp[-1].node), (yyvsp[0].node)); } -#line 3023 "src/gen_parser.c" +#line 3071 "src/gen_parser.c" break; - case 75: /* do_while: "do" body "while" expr ";" */ -#line 258 "src/parser.y" + case 77: /* do_while: "do" body "while" expr ";" */ +#line 263 "src/parser.y" { (yyval.node) = gen_while((yyvsp[-3].node), (yyvsp[-1].node)); ast_set_flags((yyval.node), AST_FLAG_DELAYED); } -#line 3032 "src/gen_parser.c" +#line 3080 "src/gen_parser.c" break; - case 76: /* goto: "goto" id */ -#line 264 "src/parser.y" + case 78: /* goto: "goto" id */ +#line 269 "src/parser.y" { (yyval.node) = gen_goto(gen_label((yyvsp[0].node))); } -#line 3038 "src/gen_parser.c" +#line 3086 "src/gen_parser.c" break; - case 77: /* statement: expr ";" */ -#line 266 "src/parser.y" + case 79: /* statement: expr ";" */ +#line 271 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); } -#line 3044 "src/gen_parser.c" +#line 3092 "src/gen_parser.c" break; - case 78: /* statement: "return" expr ";" */ -#line 267 "src/parser.y" - { (yyval.node) = gen_return((yyvsp[-1].node)); } -#line 3050 "src/gen_parser.c" + case 80: /* statement: "return" init_expr ";" */ +#line 272 "src/parser.y" + { (yyval.node) = gen_return((yyvsp[-1].node)); } +#line 3098 "src/gen_parser.c" break; - case 79: /* statement: "return" ";" */ -#line 268 "src/parser.y" + case 81: /* statement: "return" ";" */ +#line 273 "src/parser.y" { (yyval.node) = gen_return(NULL); } -#line 3056 "src/gen_parser.c" +#line 3104 "src/gen_parser.c" break; - case 80: /* statement: "break" ";" */ -#line 269 "src/parser.y" + case 82: /* statement: "break" ";" */ +#line 274 "src/parser.y" { (yyval.node) = gen_ctrl(AST_CTRL_BREAK, to_src_loc(&yylloc)); } -#line 3062 "src/gen_parser.c" +#line 3110 "src/gen_parser.c" break; - case 81: /* statement: "continue" ";" */ -#line 270 "src/parser.y" + case 83: /* statement: "continue" ";" */ +#line 275 "src/parser.y" { (yyval.node) = gen_ctrl(AST_CTRL_CONTINUE, to_src_loc(&yylloc)); } -#line 3069 "src/gen_parser.c" +#line 3117 "src/gen_parser.c" break; - case 82: /* statement: import ";" */ -#line 272 "src/parser.y" + case 84: /* statement: import ";" */ +#line 277 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); } -#line 3075 "src/gen_parser.c" +#line 3123 "src/gen_parser.c" break; - case 83: /* statement: var ";" */ -#line 273 "src/parser.y" + case 85: /* statement: var ";" */ +#line 278 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); } -#line 3081 "src/gen_parser.c" +#line 3129 "src/gen_parser.c" break; - case 84: /* statement: if */ -#line 274 "src/parser.y" + case 86: /* statement: if */ +#line 279 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3087 "src/gen_parser.c" +#line 3135 "src/gen_parser.c" break; - case 85: /* statement: goto ";" */ -#line 275 "src/parser.y" + case 87: /* statement: goto ";" */ +#line 280 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); } -#line 3093 "src/gen_parser.c" +#line 3141 "src/gen_parser.c" break; - case 86: /* statement: id ":" */ -#line 276 "src/parser.y" + case 88: /* statement: id ":" */ +#line 281 "src/parser.y" { (yyval.node) = gen_label((yyvsp[-1].node)); } -#line 3099 "src/gen_parser.c" +#line 3147 "src/gen_parser.c" break; - case 87: /* statement: for */ -#line 277 "src/parser.y" + case 89: /* statement: for */ +#line 282 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3105 "src/gen_parser.c" +#line 3153 "src/gen_parser.c" break; - case 88: /* statement: const */ -#line 278 "src/parser.y" + case 90: /* statement: const */ +#line 283 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3111 "src/gen_parser.c" +#line 3159 "src/gen_parser.c" break; - case 89: /* statement: while */ -#line 279 "src/parser.y" + case 91: /* statement: while */ +#line 284 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3117 "src/gen_parser.c" +#line 3165 "src/gen_parser.c" break; - case 90: /* statement: do_while */ -#line 280 "src/parser.y" + case 92: /* statement: do_while */ +#line 285 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3123 "src/gen_parser.c" +#line 3171 "src/gen_parser.c" break; - case 91: /* statement: switch */ -#line 281 "src/parser.y" + case 93: /* statement: switch */ +#line 286 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3129 "src/gen_parser.c" +#line 3177 "src/gen_parser.c" break; - case 92: /* statement: macro */ -#line 282 "src/parser.y" + case 94: /* statement: macro */ +#line 287 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3135 "src/gen_parser.c" +#line 3183 "src/gen_parser.c" break; - case 93: /* statement: struct */ -#line 283 "src/parser.y" + case 95: /* statement: struct */ +#line 288 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3141 "src/gen_parser.c" +#line 3189 "src/gen_parser.c" break; - case 94: /* statement: type_alias ";" */ -#line 284 "src/parser.y" + case 96: /* statement: type_alias ";" */ +#line 289 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); } -#line 3147 "src/gen_parser.c" +#line 3195 "src/gen_parser.c" break; - case 95: /* statement: type_template */ -#line 285 "src/parser.y" + case 97: /* statement: type_template */ +#line 290 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3153 "src/gen_parser.c" +#line 3201 "src/gen_parser.c" break; - case 96: /* statement: enum */ -#line 286 "src/parser.y" + case 98: /* statement: enum */ +#line 291 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3159 "src/gen_parser.c" +#line 3207 "src/gen_parser.c" break; - case 97: /* statement: body */ -#line 287 "src/parser.y" + case 99: /* statement: body */ +#line 292 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3165 "src/gen_parser.c" +#line 3213 "src/gen_parser.c" break; - case 98: /* statement: ";" */ -#line 288 "src/parser.y" + case 100: /* statement: ";" */ +#line 293 "src/parser.y" { (yyval.node) = gen_empty(); } -#line 3171 "src/gen_parser.c" +#line 3219 "src/gen_parser.c" break; - case 99: /* statement: error */ -#line 289 "src/parser.y" + case 101: /* statement: error */ +#line 294 "src/parser.y" { /* TODO: figure out how to destroy any and all possible ast nodes we * may have generated up until the error */ @@ -3186,56 +3234,56 @@ yyreduce: yyclearin; yyerrok; } -#line 3190 "src/gen_parser.c" +#line 3238 "src/gen_parser.c" break; - case 100: /* statement_list: statement statement_list */ -#line 305 "src/parser.y" + case 102: /* statement_list: statement statement_list */ +#line 310 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); (yyvsp[-1].node)->next = (yyvsp[0].node); } -#line 3196 "src/gen_parser.c" +#line 3244 "src/gen_parser.c" break; - case 101: /* statement_list: statement */ -#line 306 "src/parser.y" + case 103: /* statement_list: statement */ +#line 311 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3202 "src/gen_parser.c" +#line 3250 "src/gen_parser.c" break; - case 102: /* body: "{" statement_list "}" */ -#line 309 "src/parser.y" + case 104: /* body: "{" statement_list "}" */ +#line 314 "src/parser.y" { (yyval.node) = gen_block((yyvsp[-1].node)); } -#line 3208 "src/gen_parser.c" +#line 3256 "src/gen_parser.c" break; - case 103: /* body: "{" "}" */ -#line 310 "src/parser.y" + case 105: /* body: "{" "}" */ +#line 315 "src/parser.y" { (yyval.node) = gen_block(gen_empty()); } -#line 3214 "src/gen_parser.c" +#line 3262 "src/gen_parser.c" break; - case 104: /* macro_list: id "," macro_list */ -#line 313 "src/parser.y" + case 106: /* macro_list: id "," macro_list */ +#line 318 "src/parser.y" { (yyval.node) = (yyvsp[-2].node); (yyval.node)->next = (yyvsp[0].node); } -#line 3220 "src/gen_parser.c" +#line 3268 "src/gen_parser.c" break; - case 105: /* macro_list: id */ -#line 314 "src/parser.y" + case 107: /* macro_list: id */ +#line 319 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3226 "src/gen_parser.c" +#line 3274 "src/gen_parser.c" break; - case 106: /* macro: "define" id "(" macro_list ")" body */ -#line 317 "src/parser.y" + case 108: /* macro: "define" id "(" macro_list ")" body */ +#line 322 "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 3235 "src/gen_parser.c" +#line 3283 "src/gen_parser.c" break; - case 107: /* macro: "define" id "(" macro_list "..." id ")" body */ -#line 321 "src/parser.y" + case 109: /* macro: "define" id "(" macro_list "..." id ")" body */ +#line 326 "src/parser.y" { /* TODO: the location data of the variadic ID is way off */ ast_append((yyvsp[-4].node), (yyvsp[-2].node)); @@ -3243,686 +3291,702 @@ yyreduce: ast_set_flags((yyval.node), AST_FLAG_VARIADIC); ast_set_flags((yyvsp[0].node), AST_FLAG_UNHYGIENIC); } -#line 3247 "src/gen_parser.c" +#line 3295 "src/gen_parser.c" break; - case 108: /* macro: "define" id "(" ")" body */ -#line 328 "src/parser.y" + case 110: /* macro: "define" id "(" ")" body */ +#line 333 "src/parser.y" { (yyval.node) = gen_macro((yyvsp[-3].node), NULL, (yyvsp[0].node)); ast_set_flags((yyvsp[0].node), AST_FLAG_UNHYGIENIC); } -#line 3256 "src/gen_parser.c" +#line 3304 "src/gen_parser.c" break; - case 109: /* expr_list: expr "," expr_list */ -#line 334 "src/parser.y" + case 111: /* expr_list: expr "," expr_list */ +#line 339 "src/parser.y" { (yyval.node) = (yyvsp[-2].node); (yyvsp[-2].node)->next = (yyvsp[0].node); } -#line 3262 "src/gen_parser.c" +#line 3310 "src/gen_parser.c" break; - case 110: /* expr_list: expr */ -#line 335 "src/parser.y" + case 112: /* expr_list: expr */ +#line 340 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3268 "src/gen_parser.c" +#line 3316 "src/gen_parser.c" break; - case 111: /* init_expr: expr */ -#line 338 "src/parser.y" - { (yyval.node) = (yyvsp[0].node); } -#line 3274 "src/gen_parser.c" + case 113: /* struct_init: init_expr */ +#line 343 "src/parser.y" + { (yyval.node) = (yyvsp[0].node); } +#line 3322 "src/gen_parser.c" break; - case 112: /* init_expr: var_init */ -#line 339 "src/parser.y" - { (yyval.node) = (yyvsp[0].node); } -#line 3280 "src/gen_parser.c" + case 114: /* struct_init: "." id "=" init_expr */ +#line 344 "src/parser.y" + { (yyval.node) = gen_var((yyvsp[-2].node), NULL, (yyvsp[0].node)); } +#line 3328 "src/gen_parser.c" break; - case 113: /* init_expr: "&" var_init */ -#line 340 "src/parser.y" - { (yyval.node) = gen_unop(AND, (yyvsp[0].node)); } -#line 3286 "src/gen_parser.c" + case 115: /* struct_inits: struct_init "," struct_inits */ +#line 347 "src/parser.y" + { (yyval.node) = (yyvsp[-2].node); (yyvsp[-2].node)->next = (yyvsp[0].node); } +#line 3334 "src/gen_parser.c" break; - case 114: /* init_expr: expr_if */ -#line 341 "src/parser.y" + case 116: /* struct_inits: struct_init */ +#line 348 "src/parser.y" + { (yyval.node) = (yyvsp[0].node); } +#line 3340 "src/gen_parser.c" + break; + + case 117: /* struct_construct: "{" struct_inits "}" */ +#line 351 "src/parser.y" + { (yyval.node) = gen_init((yyvsp[-1].node)); } +#line 3346 "src/gen_parser.c" + break; + + case 118: /* init_expr: expr */ +#line 354 "src/parser.y" + { (yyval.node) = (yyvsp[0].node); } +#line 3352 "src/gen_parser.c" + break; + + case 119: /* init_expr: expr_if */ +#line 355 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3292 "src/gen_parser.c" +#line 3358 "src/gen_parser.c" break; - case 115: /* expr_if: "if" init_expr body "else" body */ -#line 344 "src/parser.y" - { (yyval.node) = gen_if((yyvsp[-3].node), (yyvsp[-2].node), (yyvsp[0].node)); } -#line 3298 "src/gen_parser.c" + case 120: /* init_expr: struct_construct */ +#line 356 "src/parser.y" + { (yyval.node) = (yyvsp[0].node); } +#line 3364 "src/gen_parser.c" break; - case 116: /* expr_if: "if" init_expr body "else" expr_if */ -#line 345 "src/parser.y" - { (yyval.node) = gen_if((yyvsp[-3].node), (yyvsp[-2].node), (yyvsp[0].node)); } -#line 3304 "src/gen_parser.c" + case 121: /* init_expr: struct_construct "as" type */ +#line 357 "src/parser.y" + { (yyval.node) = gen_cast((yyvsp[-2].node), (yyvsp[0].node)); } +#line 3370 "src/gen_parser.c" break; - case 117: /* if: "if" init_expr body */ -#line 348 "src/parser.y" - { (yyval.node) = gen_if((yyvsp[-1].node), (yyvsp[0].node), NULL); } -#line 3310 "src/gen_parser.c" + case 122: /* cond: expr */ +#line 360 "src/parser.y" + { (yyval.node) = (yyvsp[0].node); } +#line 3376 "src/gen_parser.c" break; - case 118: /* if: "if" init_expr body "else" body */ -#line 349 "src/parser.y" - { (yyval.node) = gen_if((yyvsp[-3].node), (yyvsp[-2].node), (yyvsp[0].node)); } -#line 3316 "src/gen_parser.c" + case 123: /* cond: "(" expr_if ")" */ +#line 361 "src/parser.y" + { (yyval.node) = (yyvsp[-1].node); } +#line 3382 "src/gen_parser.c" break; - case 119: /* if: "if" init_expr body "else" if */ -#line 350 "src/parser.y" + case 124: /* expr_if: "if" cond body "else" body */ +#line 365 "src/parser.y" + { (yyval.node) = gen_if((yyvsp[-3].node), (yyvsp[-2].node), (yyvsp[0].node)); } +#line 3388 "src/gen_parser.c" + break; + + case 125: /* expr_if: "if" cond body "else" expr_if */ +#line 366 "src/parser.y" { (yyval.node) = gen_if((yyvsp[-3].node), (yyvsp[-2].node), (yyvsp[0].node)); } -#line 3322 "src/gen_parser.c" +#line 3394 "src/gen_parser.c" break; - case 120: /* for: "for" arg ";" expr ";" expr body */ -#line 353 "src/parser.y" - { (yyval.node) = gen_for((yyvsp[-5].node), (yyvsp[-3].node), (yyvsp[-1].node), (yyvsp[0].node)); - } -#line 3329 "src/gen_parser.c" + case 126: /* if: "if" cond body */ +#line 369 "src/parser.y" + { (yyval.node) = gen_if((yyvsp[-1].node), (yyvsp[0].node), NULL); } +#line 3400 "src/gen_parser.c" break; - case 121: /* case: "case" expr ":" statement_list */ -#line 357 "src/parser.y" + case 127: /* if: "if" cond body "else" body */ +#line 370 "src/parser.y" + { (yyval.node) = gen_if((yyvsp[-3].node), (yyvsp[-2].node), (yyvsp[0].node)); } +#line 3406 "src/gen_parser.c" + break; + + case 128: /* if: "if" cond body "else" if */ +#line 371 "src/parser.y" + { (yyval.node) = gen_if((yyvsp[-3].node), (yyvsp[-2].node), (yyvsp[0].node)); } +#line 3412 "src/gen_parser.c" + break; + + case 129: /* for: "for" arg ";" expr ";" expr body */ +#line 374 "src/parser.y" + { (yyval.node) = gen_for((yyvsp[-5].node), (yyvsp[-3].node), (yyvsp[-1].node), (yyvsp[0].node)); } +#line 3418 "src/gen_parser.c" + break; + + case 130: /* case: "case" expr ":" statement_list */ +#line 377 "src/parser.y" { (yyval.node) = gen_case((yyvsp[-2].node), (yyvsp[0].node)); } -#line 3335 "src/gen_parser.c" +#line 3424 "src/gen_parser.c" break; - case 122: /* case_list: case case_list */ -#line 360 "src/parser.y" + case 131: /* case_list: case case_list */ +#line 380 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); (yyvsp[-1].node)->next = (yyvsp[0].node); } -#line 3341 "src/gen_parser.c" +#line 3430 "src/gen_parser.c" break; - case 123: /* case_list: case */ -#line 361 "src/parser.y" + case 132: /* case_list: case */ +#line 381 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3347 "src/gen_parser.c" +#line 3436 "src/gen_parser.c" break; - case 124: /* switch: "switch" expr "{" case_list "}" */ -#line 364 "src/parser.y" + case 133: /* switch: "switch" expr "{" case_list "}" */ +#line 384 "src/parser.y" { (yyval.node) = gen_switch((yyvsp[-3].node), (yyvsp[-1].node)); } -#line 3353 "src/gen_parser.c" +#line 3442 "src/gen_parser.c" break; - case 125: /* const_for: "for" id ":" expr_list body */ -#line 367 "src/parser.y" + case 134: /* const_for: "for" id ":" expr_list body */ +#line 387 "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 3363 "src/gen_parser.c" +#line 3452 "src/gen_parser.c" break; - case 126: /* const_if: "if" expr body */ -#line 374 "src/parser.y" + case 135: /* const_if: "if" expr body */ +#line 394 "src/parser.y" { (yyval.node) = gen_if((yyvsp[-1].node), (yyvsp[0].node), NULL); ast_set_flags((yyvsp[0].node), AST_FLAG_UNHYGIENIC); } -#line 3372 "src/gen_parser.c" +#line 3461 "src/gen_parser.c" break; - case 127: /* const_if: "if" expr body "else" body */ -#line 378 "src/parser.y" + case 136: /* const_if: "if" expr body "else" body */ +#line 398 "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 3382 "src/gen_parser.c" +#line 3471 "src/gen_parser.c" break; - case 128: /* const_if: "if" expr body "else" const_if */ -#line 383 "src/parser.y" + case 137: /* const_if: "if" expr body "else" const_if */ +#line 403 "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 3391 "src/gen_parser.c" +#line 3480 "src/gen_parser.c" break; - case 129: /* const: "const" const_if */ -#line 391 "src/parser.y" + case 138: /* const: "const" const_if */ +#line 411 "src/parser.y" { (yyval.node) = (yyvsp[0].node); ast_set_flags((yyval.node), AST_FLAG_CONST); } -#line 3398 "src/gen_parser.c" +#line 3487 "src/gen_parser.c" break; - case 130: /* const: "const" const_for */ -#line 393 "src/parser.y" + case 139: /* const: "const" const_for */ +#line 413 "src/parser.y" { (yyval.node) = (yyvsp[0].node); ast_set_flags((yyval.node), AST_FLAG_CONST); } -#line 3405 "src/gen_parser.c" +#line 3494 "src/gen_parser.c" break; - case 131: /* func_sign: "(" decl_list "=>" type ")" */ -#line 397 "src/parser.y" + case 140: /* func_sign: "(" decl_list "=>" type ")" */ +#line 417 "src/parser.y" { (yyval.node) = gen_type(AST_TYPE_SIGN, NULL, (yyvsp[-3].node), (yyvsp[-1].node)); } -#line 3413 "src/gen_parser.c" +#line 3502 "src/gen_parser.c" break; - case 132: /* func_sign: "(" decl_list ")" */ -#line 400 "src/parser.y" + case 141: /* func_sign: "(" decl_list ")" */ +#line 420 "src/parser.y" { (yyval.node) = gen_type(AST_TYPE_SIGN, NULL, (yyvsp[-1].node), NULL); } -#line 3420 "src/gen_parser.c" +#line 3509 "src/gen_parser.c" break; - case 133: /* func_sign: "(" decl_list "=>" ")" */ -#line 402 "src/parser.y" + case 142: /* func_sign: "(" decl_list "=>" ")" */ +#line 422 "src/parser.y" { (yyval.node) = gen_type(AST_TYPE_SIGN, NULL, (yyvsp[-2].node), NULL); } -#line 3427 "src/gen_parser.c" +#line 3516 "src/gen_parser.c" break; - case 134: /* func_sign: "(" "=>" type ")" */ -#line 404 "src/parser.y" + case 143: /* func_sign: "(" "=>" type ")" */ +#line 424 "src/parser.y" { (yyval.node) = gen_type(AST_TYPE_SIGN, NULL, NULL, (yyvsp[-1].node)); } -#line 3434 "src/gen_parser.c" +#line 3523 "src/gen_parser.c" break; - case 135: /* func_sign: "(" ")" */ -#line 406 "src/parser.y" + case 144: /* func_sign: "(" ")" */ +#line 426 "src/parser.y" { (yyval.node) = gen_type(AST_TYPE_SIGN, NULL, NULL, NULL); } -#line 3441 "src/gen_parser.c" +#line 3530 "src/gen_parser.c" break; - case 136: /* variadic_sign: func_sign */ -#line 410 "src/parser.y" + case 145: /* variadic_sign: func_sign */ +#line 430 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3447 "src/gen_parser.c" +#line 3536 "src/gen_parser.c" break; - case 137: /* variadic_sign: "(" decl_list "..." id "=>" type ")" */ -#line 411 "src/parser.y" + case 146: /* variadic_sign: "(" decl_list "..." id "=>" type ")" */ +#line 431 "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 3457 "src/gen_parser.c" - break; - - case 138: /* impl: id "{" type_list "}" */ -#line 418 "src/parser.y" - { (yyval.node) = gen_type(AST_TYPE_IMPL, (yyvsp[-3].node), (yyvsp[-1].node), NULL); - } -#line 3464 "src/gen_parser.c" - break; - - case 139: /* impl: id */ -#line 420 "src/parser.y" - { (yyval.node) = gen_type(AST_TYPE_IMPL, (yyvsp[0].node), NULL, NULL); } -#line 3470 "src/gen_parser.c" +#line 3546 "src/gen_parser.c" break; - case 140: /* impl_list: impl "," impl_list */ -#line 423 "src/parser.y" - { (yyval.node) = (yyvsp[-2].node); (yyvsp[-2].node)->next = (yyvsp[0].node);} -#line 3476 "src/gen_parser.c" - break; - - case 141: /* impl_list: impl */ -#line 424 "src/parser.y" - { (yyval.node) = (yyvsp[0].node); } -#line 3482 "src/gen_parser.c" - break; - - case 142: /* type: id */ -#line 427 "src/parser.y" + case 147: /* type: id */ +#line 438 "src/parser.y" { (yyval.node) = gen_type(AST_TYPE_ID, (yyvsp[0].node), NULL, NULL); } -#line 3488 "src/gen_parser.c" +#line 3552 "src/gen_parser.c" break; - case 143: /* type: "'" func_sign */ -#line 428 "src/parser.y" + case 148: /* type: "'" func_sign */ +#line 439 "src/parser.y" { (yyval.node) = gen_type(AST_TYPE_POINTER, NULL, NULL, NULL); (yyval.node)->next = (yyvsp[0].node); } -#line 3497 "src/gen_parser.c" +#line 3561 "src/gen_parser.c" break; - case 144: /* type: id "(" impl_list ")" */ -#line 432 "src/parser.y" + case 149: /* type: id "(" type_list ")" */ +#line 443 "src/parser.y" { (yyval.node) = gen_type(AST_TYPE_STRUCT, (yyvsp[-3].node), (yyvsp[-1].node), NULL); } -#line 3505 "src/gen_parser.c" +#line 3569 "src/gen_parser.c" break; - case 145: /* type: "'" type */ -#line 435 "src/parser.y" + case 150: /* type: "'" type */ +#line 446 "src/parser.y" { (yyval.node) = gen_type(AST_TYPE_POINTER, NULL, NULL, NULL); (yyval.node)->_type.next = (yyvsp[0].node); } -#line 3514 "src/gen_parser.c" +#line 3578 "src/gen_parser.c" break; - case 146: /* type: "[" "]" type */ -#line 439 "src/parser.y" + case 151: /* type: "[" "]" type */ +#line 450 "src/parser.y" { (yyval.node) = gen_type(AST_TYPE_ARR, NULL, NULL, NULL); (yyval.node)->_type.next = (yyvsp[0].node); } -#line 3523 "src/gen_parser.c" +#line 3587 "src/gen_parser.c" break; - case 147: /* type: "[" expr "]" type */ -#line 443 "src/parser.y" + case 152: /* type: "[" expr "]" type */ +#line 454 "src/parser.y" { (yyval.node) = gen_type(AST_TYPE_ARR, NULL, (yyvsp[-2].node), NULL); (yyval.node)->_type.next = (yyvsp[0].node); } -#line 3532 "src/gen_parser.c" +#line 3596 "src/gen_parser.c" break; - case 148: /* type: "typeof" expr */ -#line 447 "src/parser.y" + case 153: /* type: "typeof" expr */ +#line 458 "src/parser.y" { (yyval.node) = gen_type(AST_TYPE_TYPEOF, NULL, (yyvsp[0].node), NULL); } -#line 3540 "src/gen_parser.c" +#line 3604 "src/gen_parser.c" break; - case 149: /* var_decl: id "mut" type */ -#line 452 "src/parser.y" + case 154: /* var_decl: id "mut" type */ +#line 463 "src/parser.y" { (yyval.node) = gen_var((yyvsp[-2].node), (yyvsp[0].node), NULL); ast_set_flags((yyval.node), AST_FLAG_MUTABLE); } -#line 3549 "src/gen_parser.c" +#line 3613 "src/gen_parser.c" break; - case 150: /* var_decl: id "const" type */ -#line 456 "src/parser.y" + case 155: /* var_decl: id "const" type */ +#line 467 "src/parser.y" { (yyval.node) = gen_var((yyvsp[-2].node), (yyvsp[0].node), NULL); } -#line 3555 "src/gen_parser.c" +#line 3619 "src/gen_parser.c" break; - case 151: /* var_decl: id type */ -#line 457 "src/parser.y" + case 156: /* var_decl: id type */ +#line 468 "src/parser.y" { (yyval.node) = gen_var((yyvsp[-1].node), (yyvsp[0].node), NULL); } -#line 3561 "src/gen_parser.c" +#line 3625 "src/gen_parser.c" break; - case 152: /* var_init: var_decl "=" init_expr */ -#line 460 "src/parser.y" + case 157: /* var_init: var_decl "=" init_expr */ +#line 471 "src/parser.y" { (yyval.node) = (yyvsp[-2].node); (yyvsp[-2].node)->_var.init = (yyvsp[0].node); } -#line 3567 "src/gen_parser.c" +#line 3631 "src/gen_parser.c" break; - case 153: /* var_init: id "mut" "=" init_expr */ -#line 461 "src/parser.y" + case 158: /* var_init: id "mut" "=" init_expr */ +#line 472 "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 3576 "src/gen_parser.c" +#line 3640 "src/gen_parser.c" break; - case 154: /* var_init: id "const" "=" init_expr */ -#line 465 "src/parser.y" + case 159: /* var_init: id "const" "=" init_expr */ +#line 476 "src/parser.y" { (yyval.node) = gen_var((yyvsp[-3].node), NULL, (yyvsp[0].node)); ast_set_flags((yyval.node), AST_FLAG_UNTYPED); } -#line 3585 "src/gen_parser.c" +#line 3649 "src/gen_parser.c" break; - case 155: /* proc: id variadic_sign body */ -#line 471 "src/parser.y" + case 160: /* proc: id variadic_sign body */ +#line 482 "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 3594 "src/gen_parser.c" +#line 3658 "src/gen_parser.c" break; - case 156: /* proc: "extern" id func_sign */ -#line 475 "src/parser.y" + case 161: /* proc: "extern" id func_sign */ +#line 486 "src/parser.y" { (yyval.node) = gen_proc((yyvsp[-1].node), (yyvsp[0].node), NULL); ast_set_flags((yyval.node), AST_FLAG_EXTERN); } -#line 3603 "src/gen_parser.c" +#line 3667 "src/gen_parser.c" break; - case 157: /* lambda: "[" macro_list "]" func_sign body */ -#line 481 "src/parser.y" + case 162: /* lambda: "[" macro_list "]" func_sign body */ +#line 492 "src/parser.y" { (yyval.node) = gen_lambda((yyvsp[-3].node), (yyvsp[-1].node), (yyvsp[0].node)); } -#line 3610 "src/gen_parser.c" +#line 3674 "src/gen_parser.c" break; - case 158: /* union_elem: union */ -#line 485 "src/parser.y" + case 163: /* union_elem: union */ +#line 496 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3616 "src/gen_parser.c" +#line 3680 "src/gen_parser.c" break; - case 159: /* union_elem: var_decl */ -#line 486 "src/parser.y" + case 164: /* union_elem: var_decl */ +#line 497 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3622 "src/gen_parser.c" +#line 3686 "src/gen_parser.c" break; - case 160: /* union_list: union_elem ";" union_list */ -#line 489 "src/parser.y" + case 165: /* union_list: union_elem ";" union_list */ +#line 500 "src/parser.y" { (yyval.node) = (yyvsp[-2].node); (yyvsp[-2].node)->next = (yyvsp[0].node); } -#line 3628 "src/gen_parser.c" +#line 3692 "src/gen_parser.c" break; - case 161: /* union_list: union_elem ";" */ -#line 490 "src/parser.y" + case 166: /* union_list: union_elem ";" */ +#line 501 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); } -#line 3634 "src/gen_parser.c" +#line 3698 "src/gen_parser.c" break; - case 162: /* union: "union" id "{" union_list "}" */ -#line 493 "src/parser.y" + case 167: /* union: "union" id "{" union_list "}" */ +#line 504 "src/parser.y" { (yyval.node) = gen_type(AST_TYPE_UNION, (yyvsp[-3].node), (yyvsp[-1].node), NULL); } -#line 3642 "src/gen_parser.c" +#line 3706 "src/gen_parser.c" break; - case 163: /* union: "union" "{" union_list "}" */ -#line 496 "src/parser.y" + case 168: /* union: "union" "{" union_list "}" */ +#line 507 "src/parser.y" { (yyval.node) = gen_type(AST_TYPE_UNION, NULL, (yyvsp[-1].node), NULL); } -#line 3649 "src/gen_parser.c" +#line 3713 "src/gen_parser.c" break; - case 164: /* struct_list: union_list */ -#line 501 "src/parser.y" + case 169: /* struct_list: union_list */ +#line 512 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3655 "src/gen_parser.c" +#line 3719 "src/gen_parser.c" break; - case 165: /* struct: "struct" id "{" struct_list "}" */ -#line 504 "src/parser.y" + case 170: /* struct: "struct" id "{" struct_list "}" */ +#line 515 "src/parser.y" { (yyval.node) = gen_struct((yyvsp[-3].node), NULL, (yyvsp[-1].node)); } -#line 3663 "src/gen_parser.c" +#line 3727 "src/gen_parser.c" break; - case 166: /* struct: "struct" id "(" type_list ")" "{" struct_list "}" */ -#line 507 "src/parser.y" - { + case 171: /* struct: "struct" id "(" arg_list ")" "{" struct_list "}" */ +#line 518 "src/parser.y" + { (yyval.node) = gen_struct((yyvsp[-6].node), (yyvsp[-4].node), (yyvsp[-1].node)); } -#line 3671 "src/gen_parser.c" +#line 3735 "src/gen_parser.c" break; - case 167: /* template_elem: impl ";" */ -#line 512 "src/parser.y" - { (yyval.node) = (yyvsp[-1].node); } -#line 3677 "src/gen_parser.c" + case 172: /* template_elem: id ";" */ +#line 525 "src/parser.y" + { (yyval.node) = (yyvsp[-1].node); } +#line 3741 "src/gen_parser.c" break; - case 168: /* template_elem: id func_sign ";" */ -#line 513 "src/parser.y" + case 173: /* template_elem: id func_sign ";" */ +#line 526 "src/parser.y" { (yyval.node) = gen_proc((yyvsp[-2].node), (yyvsp[-1].node), NULL); } -#line 3683 "src/gen_parser.c" +#line 3747 "src/gen_parser.c" break; - case 169: /* template_elem: var_decl ";" */ -#line 514 "src/parser.y" + case 174: /* template_elem: var_decl ";" */ +#line 527 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); } -#line 3689 "src/gen_parser.c" +#line 3753 "src/gen_parser.c" break; - case 170: /* template_elem: union */ -#line 515 "src/parser.y" + case 175: /* template_elem: union */ +#line 528 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3695 "src/gen_parser.c" +#line 3759 "src/gen_parser.c" break; - case 171: /* template_list: template_elem template_list */ -#line 518 "src/parser.y" + case 176: /* template_list: template_elem template_list */ +#line 531 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); (yyvsp[-1].node)->next = (yyvsp[0].node); } -#line 3701 "src/gen_parser.c" +#line 3765 "src/gen_parser.c" break; - case 172: /* template_list: template_elem */ -#line 519 "src/parser.y" + case 177: /* template_list: template_elem */ +#line 532 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3707 "src/gen_parser.c" +#line 3771 "src/gen_parser.c" break; - case 173: /* type_list: type "," type_list */ -#line 522 "src/parser.y" + case 178: /* type_list: type "," type_list */ +#line 535 "src/parser.y" { (yyval.node) = (yyvsp[-2].node); (yyvsp[-2].node)->next = (yyvsp[0].node); } -#line 3713 "src/gen_parser.c" +#line 3777 "src/gen_parser.c" break; - case 174: /* type_list: type */ -#line 523 "src/parser.y" + case 179: /* type_list: type */ +#line 536 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3719 "src/gen_parser.c" +#line 3783 "src/gen_parser.c" break; - case 175: /* type_alias: "type" id type */ -#line 526 "src/parser.y" + case 180: /* type_alias: "type" id type */ +#line 539 "src/parser.y" { (yyval.node) = gen_alias((yyvsp[-1].node), (yyvsp[0].node)); } -#line 3725 "src/gen_parser.c" +#line 3789 "src/gen_parser.c" break; - case 176: /* type_template: "type" id "{" template_list "}" */ -#line 531 "src/parser.y" + case 181: /* type_template: "type" id "{" template_list "}" */ +#line 544 "src/parser.y" { (yyval.node) = gen_template((yyvsp[-3].node), (yyvsp[-1].node)); } -#line 3733 "src/gen_parser.c" +#line 3797 "src/gen_parser.c" break; - case 177: /* type_template: "type" id "{" "}" */ -#line 534 "src/parser.y" + case 182: /* type_template: "type" id "{" "}" */ +#line 547 "src/parser.y" { /* should match anything, but doesn't implement anything */ (yyval.node) = gen_template((yyvsp[-2].node), NULL); } -#line 3742 "src/gen_parser.c" +#line 3806 "src/gen_parser.c" break; - case 178: /* enum_val: id */ -#line 540 "src/parser.y" + case 183: /* enum_val: id */ +#line 553 "src/parser.y" { (yyval.node) = gen_val((yyvsp[0].node), gen_int(0)); } -#line 3748 "src/gen_parser.c" +#line 3812 "src/gen_parser.c" break; - case 179: /* enum_val: id "=" expr */ -#line 541 "src/parser.y" + case 184: /* enum_val: id "=" expr */ +#line 554 "src/parser.y" { (yyval.node) = gen_val((yyvsp[-2].node), (yyvsp[0].node)); } -#line 3754 "src/gen_parser.c" +#line 3818 "src/gen_parser.c" break; - case 180: /* enum_list: enum_val "," enum_list */ -#line 544 "src/parser.y" + case 185: /* enum_list: enum_val "," enum_list */ +#line 557 "src/parser.y" { (yyval.node) = (yyvsp[-2].node); (yyvsp[-2].node)->next = (yyvsp[0].node); } -#line 3760 "src/gen_parser.c" +#line 3824 "src/gen_parser.c" break; - case 181: /* enum_list: enum_val "," */ -#line 545 "src/parser.y" + case 186: /* enum_list: enum_val "," */ +#line 558 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); } -#line 3766 "src/gen_parser.c" +#line 3830 "src/gen_parser.c" break; - case 182: /* enum_list: enum_val */ -#line 546 "src/parser.y" + case 187: /* enum_list: enum_val */ +#line 559 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3772 "src/gen_parser.c" +#line 3836 "src/gen_parser.c" break; - case 183: /* enum: "enum" id ":" type "{" enum_list "}" */ -#line 549 "src/parser.y" + case 188: /* enum: "enum" id ":" type "{" enum_list "}" */ +#line 562 "src/parser.y" { (yyval.node) = gen_enum((yyvsp[-5].node), (yyvsp[-3].node), (yyvsp[-1].node)); } -#line 3778 "src/gen_parser.c" +#line 3842 "src/gen_parser.c" break; - case 184: /* enum: "enum" id "{" enum_list "}" */ -#line 550 "src/parser.y" + case 189: /* enum: "enum" id "{" enum_list "}" */ +#line 563 "src/parser.y" { (yyval.node) = gen_enum((yyvsp[-3].node), NULL, (yyvsp[-1].node)); ast_set_flags((yyval.node), AST_FLAG_UNTYPED); } -#line 3787 "src/gen_parser.c" +#line 3851 "src/gen_parser.c" break; - case 185: /* top_if: "if" expr "{" unit "}" */ -#line 556 "src/parser.y" + case 190: /* top_if: "if" expr "{" unit "}" */ +#line 569 "src/parser.y" { (yyval.node) = gen_if((yyvsp[-3].node), (yyvsp[-1].node), NULL); ast_set_flags((yyval.node), AST_FLAG_UNHYGIENIC); } -#line 3796 "src/gen_parser.c" +#line 3860 "src/gen_parser.c" break; - case 186: /* top_if: "if" expr "{" unit "}" "else" "{" unit "}" */ -#line 560 "src/parser.y" + case 191: /* top_if: "if" expr "{" unit "}" "else" "{" unit "}" */ +#line 573 "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 3805 "src/gen_parser.c" +#line 3869 "src/gen_parser.c" break; - case 187: /* top_if: "if" expr "{" unit "}" "else" top_if */ -#line 564 "src/parser.y" + case 192: /* top_if: "if" expr "{" unit "}" "else" top_if */ +#line 577 "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 3814 "src/gen_parser.c" +#line 3878 "src/gen_parser.c" break; - case 188: /* top: ";" */ -#line 572 "src/parser.y" + case 193: /* top: ";" */ +#line 585 "src/parser.y" { (yyval.node) = gen_empty(); } -#line 3820 "src/gen_parser.c" +#line 3884 "src/gen_parser.c" break; - case 189: /* top: enum */ -#line 573 "src/parser.y" + case 194: /* top: enum */ +#line 586 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3826 "src/gen_parser.c" +#line 3890 "src/gen_parser.c" break; - case 190: /* top: proc */ -#line 574 "src/parser.y" + case 195: /* top: proc */ +#line 587 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3832 "src/gen_parser.c" +#line 3896 "src/gen_parser.c" break; - case 191: /* top: struct */ -#line 575 "src/parser.y" + case 196: /* top: struct */ +#line 588 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3838 "src/gen_parser.c" +#line 3902 "src/gen_parser.c" break; - case 192: /* top: macro */ -#line 576 "src/parser.y" + case 197: /* top: macro */ +#line 589 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3844 "src/gen_parser.c" +#line 3908 "src/gen_parser.c" break; - case 193: /* top: "const" top_if */ -#line 577 "src/parser.y" + case 198: /* top: "const" top_if */ +#line 590 "src/parser.y" { (yyval.node) = (yyvsp[0].node); ast_set_flags((yyval.node), AST_FLAG_CONST); } -#line 3850 "src/gen_parser.c" +#line 3914 "src/gen_parser.c" break; - case 194: /* top: import ";" */ -#line 578 "src/parser.y" + case 199: /* top: import ";" */ +#line 591 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); } -#line 3856 "src/gen_parser.c" +#line 3920 "src/gen_parser.c" break; - case 195: /* top: type_alias ";" */ -#line 579 "src/parser.y" + case 200: /* top: type_alias ";" */ +#line 592 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); } -#line 3862 "src/gen_parser.c" +#line 3926 "src/gen_parser.c" break; - case 196: /* top: type_template */ -#line 580 "src/parser.y" + case 201: /* top: type_template */ +#line 593 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3868 "src/gen_parser.c" +#line 3932 "src/gen_parser.c" break; - case 197: /* top: "pub" enum */ -#line 581 "src/parser.y" + case 202: /* top: "pub" enum */ +#line 594 "src/parser.y" { (yyval.node) = (yyvsp[0].node); ast_set_flags((yyvsp[0].node), AST_FLAG_PUBLIC); } -#line 3874 "src/gen_parser.c" +#line 3938 "src/gen_parser.c" break; - case 198: /* top: "pub" struct */ -#line 582 "src/parser.y" + case 203: /* top: "pub" struct */ +#line 595 "src/parser.y" { (yyval.node) = (yyvsp[0].node); ast_set_flags((yyvsp[0].node), AST_FLAG_PUBLIC); } -#line 3880 "src/gen_parser.c" +#line 3944 "src/gen_parser.c" break; - case 199: /* top: "pub" proc */ -#line 583 "src/parser.y" + case 204: /* top: "pub" proc */ +#line 596 "src/parser.y" { (yyval.node) = (yyvsp[0].node); ast_set_flags((yyvsp[0].node), AST_FLAG_PUBLIC); } -#line 3886 "src/gen_parser.c" +#line 3950 "src/gen_parser.c" break; - case 200: /* top: "pub" macro */ -#line 584 "src/parser.y" + case 205: /* top: "pub" macro */ +#line 597 "src/parser.y" { (yyval.node) = (yyvsp[0].node); ast_set_flags((yyvsp[0].node), AST_FLAG_PUBLIC); } -#line 3892 "src/gen_parser.c" +#line 3956 "src/gen_parser.c" break; - case 201: /* top: "pub" import ";" */ -#line 585 "src/parser.y" + case 206: /* top: "pub" import ";" */ +#line 598 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); ast_set_flags((yyvsp[-1].node), AST_FLAG_PUBLIC); } -#line 3898 "src/gen_parser.c" +#line 3962 "src/gen_parser.c" break; - case 202: /* top: "pub" type_alias ";" */ -#line 586 "src/parser.y" + case 207: /* top: "pub" type_alias ";" */ +#line 599 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); ast_set_flags((yyvsp[-1].node), AST_FLAG_PUBLIC); } -#line 3904 "src/gen_parser.c" +#line 3968 "src/gen_parser.c" break; - case 203: /* top: "pub" type_template */ -#line 587 "src/parser.y" + case 208: /* top: "pub" type_template */ +#line 600 "src/parser.y" { (yyval.node) = (yyvsp[0].node); ast_set_flags((yyvsp[0].node), AST_FLAG_PUBLIC); } -#line 3910 "src/gen_parser.c" +#line 3974 "src/gen_parser.c" break; - case 204: /* top: var ";" */ -#line 588 "src/parser.y" + case 209: /* top: var ";" */ +#line 601 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); } -#line 3916 "src/gen_parser.c" +#line 3980 "src/gen_parser.c" break; - case 205: /* top: "pub" var ";" */ -#line 589 "src/parser.y" + case 210: /* top: "pub" var ";" */ +#line 602 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); ast_set_flags((yyvsp[-1].node), AST_FLAG_PUBLIC); } -#line 3922 "src/gen_parser.c" +#line 3986 "src/gen_parser.c" break; - case 206: /* top: error */ -#line 590 "src/parser.y" + case 211: /* top: error */ +#line 603 "src/parser.y" { (yyval.node) = gen_empty(); parser->failed = true; @@ -3936,29 +4000,29 @@ yyreduce: yyclearin; yyerrok; } -#line 3940 "src/gen_parser.c" +#line 4004 "src/gen_parser.c" break; - case 207: /* unit: top */ -#line 605 "src/parser.y" + case 212: /* unit: top */ +#line 618 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3946 "src/gen_parser.c" +#line 4010 "src/gen_parser.c" break; - case 208: /* unit: top unit */ -#line 606 "src/parser.y" + case 213: /* unit: top unit */ +#line 619 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); (yyvsp[-1].node)->next = (yyvsp[0].node); } -#line 3952 "src/gen_parser.c" +#line 4016 "src/gen_parser.c" break; - case 209: /* input: unit */ -#line 609 "src/parser.y" + case 214: /* input: unit */ +#line 622 "src/parser.y" { parser->tree = (yyvsp[0].node); } -#line 3958 "src/gen_parser.c" +#line 4022 "src/gen_parser.c" break; -#line 3962 "src/gen_parser.c" +#line 4026 "src/gen_parser.c" default: break; } @@ -4187,5 +4251,5 @@ yyreturnlab: return yyresult; } -#line 612 "src/parser.y" +#line 625 "src/parser.y" diff --git a/src/parser.y b/src/parser.y index 8242c2a..1b477d6 100644 --- a/src/parser.y +++ b/src/parser.y @@ -111,7 +111,7 @@ %token FATARROW "=>" /* precedence */ -%left "," "typeof" "sizeof" +%left "," %right "=" "+=" "-=" "*=" "/=" "%=" "<<=" ">>=" "&=" "^=" "|=" "^^=" %left "^^" %left "||" @@ -124,7 +124,7 @@ %left "<<" ">>" %left "+" "-" %left "*" "/" "%" -%left "as" +%left "as" "sizeof" "typeof" %right "'" "!" "~" %left "." "=>" "(" ")" @@ -132,11 +132,12 @@ %nterm <node> import binary_op unary_op arg arg_list decl_list call expr %nterm <node> while do_while statement statement_list body macro_list macro %nterm <node> expr_list init_expr expr_if if for case case_list switch const -%nterm <node> func_sign variadic_sign impl impl_list type var_decl var +%nterm <node> func_sign variadic_sign type var_decl var %nterm <node> var_init proc lambda template_elem template_list type_list %nterm <node> type_alias type_template enum_val enum_list enum top unit id %nterm <node> embed param_decl union union_list union_elem struct struct_list -%nterm <node> top_if const_if const_for defer goto +%nterm <node> top_if const_if const_for defer goto assign +%nterm <node> struct_construct struct_inits struct_init cond %destructor {} FLOAT INT STRING ID %destructor { destroy_ast_tree($$); } <*> @@ -159,8 +160,11 @@ embed: "embed" "(" STRING ")" { $$ = gen_embed(clone_string($3)); } import: "import" STRING { $$ = gen_import(clone_string($2)); } ; -binary_op: expr "=" expr { $$ = gen_binop(AST_ASSIGN, $1, $3); } - | expr "+" expr { $$ = gen_binop(AST_ADD, $1, $3); } +assign: expr "=" expr { $$ = gen_assign($1, $3); } + | expr "=" struct_construct { $$ = gen_assign($1, $3); } + ; + +binary_op: 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); } @@ -202,7 +206,7 @@ unary_op: "-" expr { $$ = gen_unop(AST_NEG, $2); } | "~" expr { $$ = gen_unop(AST_NOT, $2); } ; -arg: "&" var_decl { $$ = gen_unop(SQUOTE, $2); } +arg: "&" var_decl { $$ = gen_unop(AST_REF, $2); } | var_decl { $$ = $1; } | init_expr { $$ = $1; } ; @@ -240,6 +244,7 @@ expr: id { $$ = $1; } $$->loc = to_src_loc(&yylloc); } | "(" expr ")" { $$ = $2; } + | assign { $$ = $1; } | call { $$ = $1; } | defer { $$ = $1; } | binary_op { $$ = $1; } @@ -264,7 +269,7 @@ do_while: "do" body "while" expr ";" { goto: "goto" id { $$ = gen_goto(gen_label($2)); } statement: expr ";" { $$ = $1; } - | "return" expr ";" { $$ = gen_return($2); } + | "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, @@ -335,23 +340,38 @@ expr_list: expr "," expr_list { $$ = $1; $1->next = $3; } | expr { $$ = $1; } ; +struct_init: init_expr { $$ = $1; } + | "." id "=" init_expr { $$ = gen_var($2, NULL, $4); } + ; + +struct_inits: struct_init "," struct_inits { $$ = $1; $1->next = $3; } + | struct_init { $$ = $1; } + ; + +struct_construct: "{" struct_inits "}" { $$ = gen_init($2); } + ; + init_expr: expr { $$ = $1; } - | var_init { $$ = $1; } - | "&" var_init { $$ = gen_unop(AND, $2); } | expr_if { $$ = $1; } + | struct_construct { $$ = $1; } + | struct_construct "as" type { $$ = gen_cast($1, $3); } + ; + +cond: expr { $$ = $1; } + | "(" expr_if ")" { $$ = $2; } + /* note no struct construct */ ; -expr_if: "if" init_expr body "else" body { $$ = gen_if($2, $3, $5); } - | "if" init_expr body "else" expr_if { $$ = gen_if($2, $3, $5); } - ; +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" init_expr body { $$ = gen_if($2, $3, NULL); } - | "if" init_expr body "else" body { $$ = gen_if($2, $3, $5); } - | "if" init_expr body "else" 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); - } +for: "for" arg ";" expr ";" expr body { $$ = gen_for($2, $4, $6, $7); } ; case: "case" expr ":" statement_list { $$ = gen_case($2, $4); } @@ -415,21 +435,12 @@ variadic_sign: func_sign { $$ = $1; } } ; -impl: id "{" type_list "}" { $$ = gen_type(AST_TYPE_IMPL, $1, $3, NULL); - } - | id { $$ = gen_type(AST_TYPE_IMPL, $1, NULL, NULL); } - ; - -impl_list: impl "," impl_list { $$ = $1; $1->next = $3;} - | impl { $$ = $1; } - ; - type: id { $$ = gen_type(AST_TYPE_ID, $1, NULL, NULL); } | "'" func_sign { $$ = gen_type(AST_TYPE_POINTER, NULL, NULL, NULL); $$->next = $2; } - | id "(" impl_list ")" { + | id "(" type_list ")" { $$ = gen_type(AST_TYPE_STRUCT, $1, $3, NULL); } | "'" type { @@ -504,12 +515,14 @@ struct_list: union_list { $$ = $1; } struct: "struct" id "{" struct_list "}" { $$ = gen_struct($2, NULL, $4); } - | "struct" id "(" type_list ")" "{" struct_list "}" { + | "struct" id "(" arg_list ")" "{" struct_list "}" { $$ = gen_struct($2, $4, $7); } ; -template_elem: impl ";" { $$ = $1; } +/* 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); } | var_decl ";" { $$ = $1; } | union { $$ = $1; } diff --git a/tests/structs.cu b/tests/structs.cu new file mode 100644 index 0000000..24e520e --- /dev/null +++ b/tests/structs.cu @@ -0,0 +1,48 @@ +type any {} + +struct basic_struct { + a i64; + b i64; + c i64; +} + +struct complex_struct (A any, B any, C any) { + a A; + b B; + c C; +} + +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; + + 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 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_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_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}; + + /* 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}; +} |
