diff options
| author | Kimplul <kimi.h.kuparinen@gmail.com> | 2023-03-25 20:34:24 +0200 |
|---|---|---|
| committer | Kimplul <kimi.h.kuparinen@gmail.com> | 2023-03-25 20:34:24 +0200 |
| commit | eaf2d360120a4cab12c27ed51961cd5d224042ff (patch) | |
| tree | 888b4715a1edf7ec74fed1bd26c31213c548650d /src | |
| parent | 3bd9103ce0b18f6900ba544a8b2786145868524f (diff) | |
| download | ek-eaf2d360120a4cab12c27ed51961cd5d224042ff.tar.gz ek-eaf2d360120a4cab12c27ed51961cd5d224042ff.zip | |
initial constant struct stuff
Diffstat (limited to 'src')
| -rw-r--r-- | src/actualize.c | 169 | ||||
| -rw-r--r-- | src/gen_lexer.c | 229 | ||||
| -rw-r--r-- | src/gen_parser.c | 2337 | ||||
| -rw-r--r-- | src/lexer.l | 2 | ||||
| -rw-r--r-- | src/parser.y | 13 | ||||
| -rw-r--r-- | src/scope.c | 15 |
6 files changed, 1490 insertions, 1275 deletions
diff --git a/src/actualize.c b/src/actualize.c index df268ad..6018aad 100644 --- a/src/actualize.c +++ b/src/actualize.c @@ -1028,10 +1028,16 @@ static int actualize_var(struct act_state *state, ret |= actualize(state, scope, type); + if (init && init->node_type == AST_INIT) { + assert(!init->type); + init->type = type; + /* TODO: some kind of check_init() */ + } + if (init && type) { /* make sure the asked type and the actualized types match */ - if (!types_match(init->type, type->type)) { - char *init_type = type_str(init); + if (!types_match(init->type, type)) { + char *init_type = type_str(init->type); char *req_type = type_str(type); semantic_error(scope->fctx, var, "type mismatch (%s vs %s)", req_type, init_type); @@ -1053,7 +1059,7 @@ static int actualize_var(struct act_state *state, /* an unnamed var is a var in a signature that should not produce a * warning on not being used (if I ever get around to adding those kinds * of warnings) */ - if (var->_var.id) + if (var->_var.id && !ast_flags(var, AST_FLAG_MEMBER)) return scope_add_var(scope, var); return 0; @@ -1122,7 +1128,7 @@ static int actualize_type(struct act_state *state, /* actualize whatever type we have on demand, either alias or * template */ if (!ast_flags(exists, AST_FLAG_ACTUAL)) - if (actualize(state, scope, exists)) + if (actualize(state, exists->scope, exists)) EXIT_ACT(-1); if (exists->node_type == AST_ALIAS) { @@ -1146,10 +1152,12 @@ static int actualize_type(struct act_state *state, destroy_ast_node(type->_type.id); assert(type->_type.next == NULL); type->_type.kind = AST_TYPE_STRUCT; - type->_type.struc.struc = exists; - type->_type.struc.impls - = clone_ast_node(exists->_struct.generics); + type->_type.struc.struc = clone_ast_node(exists->_struct.id); + /* should be populated later */ + type->_type.struc.impls = NULL; } + + /* TODO: what about enums? */ break; } @@ -1204,6 +1212,24 @@ static int actualize_type(struct act_state *state, break; } + case AST_TYPE_STRUCT: { + struct ast_node *struc = type->_type.struc.struc; + struct ast_node *exists = file_scope_resolve_type(scope, struc); + if (!exists || exists->node_type != AST_STRUCT) { + semantic_error(scope->fctx, type, "no such struct"); + EXIT_ACT(-1); + } + + if (!ast_flags(exists, AST_FLAG_ACTUAL)) + if (actualize(state, exists->scope, exists)) + return -1; + + struct ast_node *types = type->_type.struc.impls; + if (actualize(state, scope, types)) + EXIT_ACT(-1); + break; + } + } ast_set_flags(type, AST_FLAG_ACTUAL); @@ -1312,11 +1338,67 @@ static int pointer_conversion(struct ast_node *a, struct ast_node *b) return 0; } +static int check_impls(struct scope *scope, struct ast_node *target, + struct ast_node *exists) +{ + struct ast_node *args = target->_type.struc.impls; + struct ast_node *params = exists->_struct.generics; + while (args && params) { + assert(params->node_type == AST_ALIAS); + assert(args->node_type == AST_TYPE); + + struct ast_node *alias_actual = params->_alias.type; + if (!implements(scope, args, alias_actual)) { + char *astr = type_str(args); + char *pstr = type_str(params->type); + semantic_error(scope->fctx, args, "%s does not implement %s", + astr, pstr); + free(astr); + free(pstr); + return -1; + } + + params = params->next; + args = args->next; + } + + if (args || params) { + semantic_error(scope->fctx, target, "wrong number of type arguments"); + return -1; + } + + 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; + struct ast_node *target = cast->_cast.type; + if (actualize(state, scope, target)) + return -1; + + if (target->_type.kind != AST_TYPE_STRUCT) { + semantic_error(scope->fctx, target, "type is not a structure"); + return -1; + } + + struct ast_node *id = target->_type.struc.struc; + struct ast_node *exists = file_scope_resolve_type(scope, id); + assert(exists); + + struct ast_node *init = cast->_cast.expr; + if (actualize(state, exists->scope, init)) + return -1; + + /* TODO: this only handles unnamed initializers for now */ + if (target->_type.struc.impls) { + if (check_impls(scope, target, exists)) + return -1; + } + + /* TODO: check that types match */ + cast->type = target; + return 0; } static int actualize_cast(struct act_state *state, @@ -1400,7 +1482,16 @@ static int actualize_alias(struct act_state *state, struct scope *scope, return -1; } + /* TODO: is this hacky? */ + if (!scope_flags(scope, SCOPE_FILE)) { + if (scope_add_alias(scope, alias)) + return -1; + } + ast_set_flags(alias, AST_FLAG_ACTUAL); + alias->type = gen_type(AST_TYPE_ALIAS, NULL, + alias->_alias.id, alias->_alias.type); + scope_add_scratch(scope, alias->type); return 0; } @@ -1649,16 +1740,24 @@ static int actualize_struct(struct act_state *state, struct scope *scope, struct ast_node *node) { assert(node->node_type == AST_STRUCT); + ast_set_flags(node, AST_FLAG_INIT); struct ast_node *generics = node->_struct.generics; + struct scope *struct_scope = create_scope(); + if (!struct_scope) + return -1; + + scope_add_scope(node->scope, struct_scope); + /* TODO: some IDs should be handles as just placeholders, I think? */ - if (actualize(state, scope, generics)) + if (actualize(state, struct_scope, generics)) return -1; struct ast_node *body = node->_struct.body; - if (actualize(state, scope, body)) + if (actualize(state, struct_scope, body)) return -1; node->type = node; + ast_set_flags(node, AST_FLAG_ACTUAL); return 0; } @@ -1705,6 +1804,52 @@ static int actualize_dot(struct act_state *state, return 0; } +static int actualize_init(struct act_state *state, + struct scope *scope, struct ast_node *node) +{ + assert(node->node_type == AST_INIT); + /* for now just do the types, the named stuff will be checked later */ + /* TODO: how to make sure all members are initialized? */ + int ret = 0; + enum act_flags old_flags = state->flags; + act_set_flags(state, ACT_ONLY_TYPES); + ret = actualize(state, scope, node->_init.body); + state->flags = old_flags; + return ret; +} + +static int actualize_assign(struct act_state *state, struct scope *scope, + struct ast_node *node) +{ + assert(node->node_type == AST_ASSIGN); + struct ast_node *to = node->_assign.to; + if (actualize(state, scope, to)) + return -1; + + struct ast_node *from = node->_assign.from; + if (actualize(state, scope, from)) + return -1; + + if (from->node_type == AST_INIT) { + assert(!from->type); + from->type = to->type; + /* TODO: some kind of check_init() */ + } + + if (!types_match(to->type, from->type)) { + char *tostr = type_str(to->type); + char *fromstr = type_str(from->type); + semantic_error(scope->fctx, node, "type mismatch (%s vs %s)", + tostr, fromstr); + free(tostr); + free(fromstr); + return -1; + } + + node->type = to->type; + return 0; +} + static int actualize(struct act_state *state, struct scope *scope, struct ast_node *node) { int ret = 0; @@ -1741,6 +1886,8 @@ static int actualize(struct act_state *state, struct scope *scope, struct ast_no case AST_AS: ret |= actualize_as(state, scope, node); break; case AST_STRUCT: ret |= actualize_struct(state, scope, node); break; case AST_DOT: ret |= actualize_dot(state, scope, node); break; + case AST_INIT: ret |= actualize_init(state, scope, node); break; + case AST_ASSIGN: ret |= actualize_assign(state, scope, node); break; default: /* more like internal_error, maybe? */ diff --git a/src/gen_lexer.c b/src/gen_lexer.c index 6852640..8297712 100644 --- a/src/gen_lexer.c +++ b/src/gen_lexer.c @@ -348,7 +348,7 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[220] = +static const flex_int16_t yy_accept[223] = { 0, 0, 0, 0, 0, 94, 92, 91, 91, 19, 92, 92, 26, 35, 34, 9, 10, 24, 22, 16, 23, @@ -369,11 +369,12 @@ static const flex_int16_t yy_accept[220] = 90, 89, 79, 62, 90, 90, 90, 90, 90, 90, 90, 33, 31, 0, 0, 0, 0, 0, 90, 75, 90, 90, 90, 90, 73, 90, 83, 90, 72, 90, - 90, 90, 90, 90, 66, 90, 90, 31, 32, 30, + 90, 90, 90, 90, 90, 90, 90, 31, 32, 30, 0, 89, 85, 80, 90, 63, 90, 70, 90, 90, - 90, 90, 90, 90, 90, 64, 77, 90, 84, 82, - 67, 81, 69, 65, 74, 68, 90, 86, 0 + 90, 90, 90, 90, 90, 90, 64, 77, 90, 84, + 82, 67, 81, 69, 65, 74, 90, 68, 90, 66, + 86, 0 } ; static const YY_CHAR yy_ec[256] = @@ -419,65 +420,67 @@ static const YY_CHAR yy_meta[65] = 1, 1, 1, 1 } ; -static const flex_int16_t yy_base[230] = +static const flex_int16_t yy_base[233] = { 0, - 0, 0, 62, 63, 363, 364, 65, 67, 337, 66, - 355, 335, 64, 324, 364, 364, 364, 63, 364, 72, - 342, 61, 84, 90, 364, 364, 52, 69, 73, 364, - 0, 364, 364, 82, 303, 303, 74, 45, 66, 304, - 303, 77, 297, 314, 295, 308, 75, 290, 298, 302, - 364, 60, 364, 364, 0, 364, 101, 334, 126, 364, - 126, 364, 342, 364, 364, 364, 364, 335, 115, 120, - 127, 364, 139, 146, 364, 327, 364, 0, 364, 185, - 161, 0, 131, 317, 364, 364, 364, 364, 316, 0, - 364, 315, 0, 297, 284, 287, 293, 0, 281, 295, + 0, 0, 62, 63, 366, 367, 65, 67, 340, 66, + 358, 338, 64, 327, 367, 367, 367, 63, 367, 72, + 345, 61, 84, 90, 367, 367, 52, 69, 73, 367, + 0, 367, 367, 82, 306, 306, 74, 45, 66, 307, + 306, 77, 300, 317, 298, 311, 75, 293, 301, 305, + 367, 60, 367, 367, 0, 367, 101, 337, 126, 367, + 126, 367, 345, 367, 367, 367, 367, 338, 115, 120, + 127, 367, 139, 146, 367, 330, 367, 0, 367, 185, + 161, 0, 131, 320, 367, 367, 367, 367, 319, 0, + 367, 318, 0, 300, 287, 290, 296, 0, 284, 298, - 277, 277, 278, 275, 0, 277, 285, 272, 276, 286, - 269, 263, 269, 275, 268, 273, 272, 364, 364, 0, - 139, 364, 364, 364, 308, 165, 177, 307, 0, 364, - 0, 150, 169, 198, 364, 169, 157, 364, 364, 364, - 277, 272, 137, 178, 271, 270, 262, 268, 0, 258, - 257, 0, 0, 0, 251, 264, 249, 249, 261, 251, - 253, 364, 364, 213, 216, 291, 177, 223, 252, 0, - 243, 251, 243, 245, 0, 253, 0, 239, 0, 233, - 227, 225, 234, 227, 189, 189, 195, 364, 364, 364, - 227, 231, 0, 0, 180, 0, 184, 0, 173, 155, + 280, 280, 281, 278, 0, 280, 288, 275, 279, 289, + 272, 266, 272, 278, 271, 276, 275, 367, 367, 0, + 139, 367, 367, 367, 311, 165, 177, 310, 0, 367, + 0, 150, 169, 198, 367, 169, 157, 367, 367, 367, + 280, 275, 137, 178, 274, 273, 265, 271, 0, 261, + 260, 0, 0, 0, 254, 267, 252, 252, 264, 254, + 256, 367, 367, 213, 216, 294, 177, 223, 255, 0, + 246, 254, 246, 248, 0, 256, 0, 243, 0, 242, + 241, 241, 246, 240, 189, 226, 232, 367, 367, 367, + 227, 231, 0, 0, 217, 0, 197, 0, 187, 171, - 158, 164, 147, 149, 150, 0, 0, 107, 0, 0, - 0, 0, 0, 0, 0, 0, 110, 0, 364, 252, - 258, 264, 266, 272, 278, 284, 139, 288, 132 + 173, 167, 153, 162, 160, 151, 0, 0, 137, 0, + 0, 0, 0, 0, 0, 0, 120, 0, 110, 0, + 0, 367, 252, 258, 264, 266, 272, 278, 284, 139, + 288, 132 } ; -static const flex_int16_t yy_def[230] = +static const flex_int16_t yy_def[233] = { 0, - 219, 1, 220, 220, 219, 219, 219, 219, 219, 221, - 219, 219, 219, 222, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 223, 219, 219, 219, 223, 223, 223, 223, 223, 223, - 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, - 219, 219, 219, 219, 224, 219, 219, 219, 219, 219, - 221, 219, 221, 219, 219, 219, 219, 219, 225, 219, - 219, 219, 219, 219, 219, 219, 219, 226, 219, 219, - 219, 227, 219, 219, 219, 219, 219, 219, 219, 223, - 219, 219, 223, 223, 223, 223, 223, 223, 223, 223, + 222, 1, 223, 223, 222, 222, 222, 222, 222, 224, + 222, 222, 222, 225, 222, 222, 222, 222, 222, 222, + 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, + 226, 222, 222, 222, 226, 226, 226, 226, 226, 226, + 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, + 222, 222, 222, 222, 227, 222, 222, 222, 222, 222, + 224, 222, 224, 222, 222, 222, 222, 222, 228, 222, + 222, 222, 222, 222, 222, 222, 222, 229, 222, 222, + 222, 230, 222, 222, 222, 222, 222, 222, 222, 226, + 222, 222, 226, 226, 226, 226, 226, 226, 226, 226, - 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, - 223, 223, 223, 223, 223, 223, 223, 219, 219, 224, - 219, 219, 219, 219, 219, 219, 219, 228, 229, 219, - 226, 219, 219, 219, 219, 227, 219, 219, 219, 219, - 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, - 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, - 223, 219, 219, 219, 219, 228, 229, 219, 223, 223, - 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, - 223, 223, 223, 223, 223, 223, 223, 219, 219, 219, - 219, 219, 223, 223, 223, 223, 223, 223, 223, 223, + 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, + 226, 226, 226, 226, 226, 226, 226, 222, 222, 227, + 222, 222, 222, 222, 222, 222, 222, 231, 232, 222, + 229, 222, 222, 222, 222, 230, 222, 222, 222, 222, + 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, + 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, + 226, 222, 222, 222, 222, 231, 232, 222, 226, 226, + 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, + 226, 226, 226, 226, 226, 226, 226, 222, 222, 222, + 222, 222, 226, 226, 226, 226, 226, 226, 226, 226, - 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, - 223, 223, 223, 223, 223, 223, 223, 223, 0, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219 + 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, + 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, + 226, 0, 222, 222, 222, 222, 222, 222, 222, 222, + 222, 222 } ; -static const flex_int16_t yy_nxt[429] = +static const flex_int16_t yy_nxt[432] = { 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 24, @@ -495,40 +498,41 @@ static const flex_int16_t yy_nxt[429] = 112, 119, 83, 102, 96, 106, 107, 59, 59, 113, 62, 114, 126, 126, 126, 80, 167, 71, 71, 71, 71, 82, 80, 136, 71, 71, 71, 71, 137, 137, - 121, 218, 129, 127, 80, 122, 74, 74, 74, 74, - 63, 80, 217, 74, 74, 74, 74, 133, 133, 133, + 121, 221, 129, 127, 80, 122, 74, 74, 74, 74, + 63, 80, 220, 74, 74, 74, 74, 133, 133, 133, 133, 129, 128, 163, 137, 137, 80, 129, 81, 81, 81, 74, 164, 164, 164, 162, 133, 133, 133, 133, - 171, 172, 216, 215, 165, 165, 129, 132, 135, 132, + 171, 172, 219, 218, 165, 165, 129, 132, 135, 132, - 168, 214, 133, 133, 133, 133, 213, 212, 168, 211, + 168, 217, 133, 133, 133, 133, 216, 215, 168, 214, 132, 135, 132, 134, 135, 133, 133, 133, 133, 173, - 168, 188, 210, 174, 189, 209, 134, 135, 168, 208, - 164, 164, 164, 165, 165, 191, 207, 191, 206, 205, + 168, 188, 213, 174, 189, 212, 134, 135, 168, 205, + 164, 164, 164, 165, 165, 191, 211, 191, 210, 206, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 55, 55, 55, 55, 55, 55, 61, 61, - 61, 61, 61, 61, 68, 68, 204, 68, 68, 68, - 90, 90, 120, 203, 120, 202, 120, 120, 125, 201, - 125, 125, 125, 125, 131, 200, 131, 131, 131, 131, - 166, 199, 166, 198, 197, 196, 195, 194, 193, 190, + 61, 61, 61, 61, 68, 68, 209, 68, 68, 68, + 90, 90, 120, 208, 120, 207, 120, 120, 125, 204, + 125, 125, 125, 125, 131, 203, 131, 131, 131, 131, + 166, 202, 166, 201, 200, 199, 198, 197, 196, 195, - 187, 186, 185, 184, 183, 182, 181, 180, 179, 178, - 177, 176, 175, 170, 169, 162, 162, 161, 160, 159, - 158, 157, 156, 155, 154, 152, 153, 152, 151, 150, - 149, 148, 147, 146, 145, 144, 143, 142, 141, 140, - 139, 138, 130, 124, 219, 123, 117, 116, 115, 111, - 110, 109, 108, 104, 103, 94, 93, 76, 69, 65, - 64, 60, 219, 5, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, + 194, 193, 190, 187, 186, 185, 184, 183, 182, 181, + 180, 179, 178, 177, 176, 175, 170, 169, 162, 162, + 161, 160, 159, 158, 157, 156, 155, 154, 152, 153, + 152, 151, 150, 149, 148, 147, 146, 145, 144, 143, + 142, 141, 140, 139, 138, 130, 124, 222, 123, 117, + 116, 115, 111, 110, 109, 108, 104, 103, 94, 93, + 76, 69, 65, 64, 60, 222, 5, 222, 222, 222, + 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, + 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, + 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219 + 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, + 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, + 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, + 222 } ; -static const flex_int16_t yy_chk[429] = +static const flex_int16_t yy_chk[432] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -544,39 +548,40 @@ static const flex_int16_t yy_chk[429] = 10, 23, 23, 23, 23, 24, 34, 24, 24, 24, 24, 37, 57, 39, 39, 39, 23, 57, 34, 42, 47, 52, 23, 39, 37, 42, 42, 59, 59, 47, - 61, 47, 69, 69, 69, 70, 229, 70, 70, 70, - 70, 23, 71, 227, 71, 71, 71, 71, 83, 83, - 121, 217, 70, 69, 73, 121, 73, 73, 73, 73, - 61, 74, 208, 74, 74, 74, 74, 132, 132, 132, + 61, 47, 69, 69, 69, 70, 232, 70, 70, 70, + 70, 23, 71, 230, 71, 71, 71, 71, 83, 83, + 121, 219, 70, 69, 73, 121, 73, 73, 73, 73, + 61, 74, 217, 74, 74, 74, 74, 132, 132, 132, 132, 73, 69, 126, 137, 137, 81, 70, 81, 81, 81, 81, 126, 126, 126, 127, 133, 133, 133, 133, - 143, 143, 205, 204, 127, 127, 73, 80, 133, 80, + 143, 143, 209, 206, 127, 127, 73, 80, 133, 80, - 136, 203, 80, 80, 80, 80, 202, 201, 167, 200, + 136, 205, 80, 80, 80, 80, 204, 203, 167, 202, 134, 133, 134, 80, 80, 134, 134, 134, 134, 144, - 136, 164, 199, 144, 165, 197, 80, 80, 167, 195, - 164, 164, 164, 165, 165, 168, 187, 168, 186, 185, + 136, 164, 201, 144, 165, 200, 80, 80, 167, 185, + 164, 164, 164, 165, 165, 168, 199, 168, 197, 185, 168, 168, 168, 168, 191, 191, 191, 191, 192, 192, - 192, 192, 220, 220, 220, 220, 220, 220, 221, 221, - 221, 221, 221, 221, 222, 222, 184, 222, 222, 222, - 223, 223, 224, 183, 224, 182, 224, 224, 225, 181, - 225, 225, 225, 225, 226, 180, 226, 226, 226, 226, - 228, 178, 228, 176, 174, 173, 172, 171, 169, 166, + 192, 192, 223, 223, 223, 223, 223, 223, 224, 224, + 224, 224, 224, 224, 225, 225, 195, 225, 225, 225, + 226, 226, 227, 187, 227, 186, 227, 227, 228, 184, + 228, 228, 228, 228, 229, 183, 229, 229, 229, 229, + 231, 182, 231, 181, 180, 178, 176, 174, 173, 172, - 161, 160, 159, 158, 157, 156, 155, 151, 150, 148, - 147, 146, 145, 142, 141, 128, 125, 117, 116, 115, - 114, 113, 112, 111, 110, 109, 108, 107, 106, 104, - 103, 102, 101, 100, 99, 97, 96, 95, 94, 92, - 89, 84, 76, 68, 63, 58, 50, 49, 48, 46, - 45, 44, 43, 41, 40, 36, 35, 21, 14, 12, - 11, 9, 5, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, + 171, 169, 166, 161, 160, 159, 158, 157, 156, 155, + 151, 150, 148, 147, 146, 145, 142, 141, 128, 125, + 117, 116, 115, 114, 113, 112, 111, 110, 109, 108, + 107, 106, 104, 103, 102, 101, 100, 99, 97, 96, + 95, 94, 92, 89, 84, 76, 68, 63, 58, 50, + 49, 48, 46, 45, 44, 43, 41, 40, 36, 35, + 21, 14, 12, 11, 9, 5, 222, 222, 222, 222, + 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, + 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, + 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219 + 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, + 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, + 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, + 222 } ; /* The intent behind this definition is that it'll catch @@ -611,9 +616,9 @@ static void update_yylloc(struct parser *parser, YYLTYPE *lloc, const char *text } #define YY_USER_ACTION update_yylloc(parser, yylloc, yytext); -#line 615 "src/gen_lexer.c" +#line 620 "src/gen_lexer.c" -#line 617 "src/gen_lexer.c" +#line 622 "src/gen_lexer.c" #define INITIAL 0 #define SC_COMMENT 1 @@ -874,7 +879,7 @@ YY_DECL { #line 44 "src/lexer.l" -#line 878 "src/gen_lexer.c" +#line 883 "src/gen_lexer.c" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -901,13 +906,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 220 ) + if ( yy_current_state >= 223 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 364 ); + while ( yy_base[yy_current_state] != 367 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -1452,7 +1457,7 @@ YY_RULE_SETUP #line 212 "src/lexer.l" YY_FATAL_ERROR( "flex scanner jammed" ); YY_BREAK -#line 1456 "src/gen_lexer.c" +#line 1461 "src/gen_lexer.c" case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(SC_COMMENT): yyterminate(); @@ -1752,7 +1757,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 220 ) + if ( yy_current_state >= 223 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -1781,11 +1786,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 220 ) + if ( yy_current_state >= 223 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 219); + yy_is_jam = (yy_current_state == 222); (void)yyg; return yy_is_jam ? 0 : yy_current_state; diff --git a/src/gen_parser.c b/src/gen_parser.c index 7b26b5c..a14081c 100644 --- a/src/gen_parser.c +++ b/src/gen_parser.c @@ -239,19 +239,21 @@ enum yysymbol_kind_t 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 */ + YYSYMBOL_generic = 130, /* generic */ + YYSYMBOL_generic_list = 131, /* generic_list */ + YYSYMBOL_struct = 132, /* struct */ + YYSYMBOL_template_elem = 133, /* template_elem */ + YYSYMBOL_template_list = 134, /* template_list */ + YYSYMBOL_type_list = 135, /* type_list */ + YYSYMBOL_type_alias = 136, /* type_alias */ + YYSYMBOL_type_template = 137, /* type_template */ + YYSYMBOL_enum_val = 138, /* enum_val */ + YYSYMBOL_enum_list = 139, /* enum_list */ + YYSYMBOL_enum = 140, /* enum */ + YYSYMBOL_top_if = 141, /* top_if */ + YYSYMBOL_top = 142, /* top */ + YYSYMBOL_unit = 143, /* unit */ + YYSYMBOL_input = 144 /* input */ }; typedef enum yysymbol_kind_t yysymbol_kind_t; @@ -582,16 +584,16 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 57 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 2009 +#define YYLAST 2040 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 81 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 62 +#define YYNNTS 64 /* YYNRULES -- Number of rules. */ -#define YYNRULES 215 +#define YYNRULES 218 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 428 +#define YYNSTATES 433 /* YYMAXUTOK -- Last valid token kind. */ #define YYMAXUTOK 335 @@ -648,28 +650,28 @@ static const yytype_int8 yytranslate[] = /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_int16 yyrline[] = { - 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 + 0, 148, 148, 154, 155, 158, 161, 164, 165, 168, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 192, 195, 196, 197, 198, 199, 200, 203, 204, + 205, 206, 207, 210, 211, 212, 215, 216, 219, 221, + 222, 223, 224, 228, 229, 232, 236, 237, 238, 239, + 240, 241, 242, 243, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 261, 264, 270, 272, + 273, 274, 275, 276, 278, 279, 280, 281, 282, 283, + 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 311, 312, 315, 316, 319, 320, 323, 327, + 334, 340, 341, 344, 345, 351, 352, 355, 358, 359, + 360, 361, 364, 365, 369, 370, 373, 374, 375, 378, + 381, 384, 385, 388, 391, 398, 402, 407, 415, 417, + 421, 424, 426, 428, 430, 434, 435, 442, 443, 447, + 450, 454, 458, 462, 467, 471, 472, 475, 476, 480, + 486, 490, 496, 500, 501, 504, 505, 508, 511, 516, + 519, 520, 521, 524, 527, 534, 535, 536, 537, 540, + 541, 544, 545, 548, 553, 556, 562, 563, 566, 567, + 568, 571, 572, 578, 582, 586, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 609, 610, 611, 612, 627, 628, 631, 632 }; #endif @@ -705,9 +707,10 @@ static const char *const yytname[] = "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 + "union_list", "union", "struct_list", "generic", "generic_list", + "struct", "template_elem", "template_list", "type_list", "type_alias", + "type_template", "enum_val", "enum_list", "enum", "top_if", "top", + "unit", "input", YY_NULLPTR }; static const char * @@ -717,12 +720,12 @@ yysymbol_name (yysymbol_kind_t yysymbol) } #endif -#define YYPACT_NINF (-235) +#define YYPACT_NINF (-227) #define yypact_value_is_default(Yyn) \ ((Yyn) == YYPACT_NINF) -#define YYTABLE_NINF (-216) +#define YYTABLE_NINF (-219) #define yytable_value_is_error(Yyn) \ 0 @@ -731,49 +734,50 @@ yysymbol_name (yysymbol_kind_t yysymbol) STATE-NUM. */ static const yytype_int16 yypact[] = { - 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 + 478, -227, -227, -227, 249, 18, 18, 35, -7, 18, + 18, 18, 182, 49, 72, -227, 67, -227, -227, -227, + 96, -227, -227, 424, -227, 114, 120, 138, -227, -227, + -227, 146, -227, -227, 85, 59, -227, 1167, -227, 66, + 65, 88, 64, 1167, 26, 136, 15, 270, 92, -227, + 97, -227, -227, -227, 1003, -227, -227, -227, -227, -227, + -227, 18, 46, 90, -227, -227, -227, -227, 1167, 18, + 1167, 1167, 1167, 1167, 1167, -227, 100, 103, 1167, 18, + 61, 36, -227, -227, -227, -227, -227, -227, 1256, -227, + 15, -227, 61, 18, 32, -227, -227, 87, 1003, -227, + 1003, -227, -227, 61, 566, 130, 27, -227, 131, 61, + 1320, 61, 769, -227, 1193, 921, 1961, 102, -227, -227, + 61, 133, 109, 25, 51, -227, 173, -227, -227, 112, + -227, 148, 183, -227, 46, 117, 87, -227, 87, 87, + 68, 1545, 87, 1167, 189, 553, 1384, 67, 123, 156, + 132, -227, 18, 947, 1085, 1167, 1167, 1167, 1167, 1167, + 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, + 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, + 1167, 1167, 1167, 1167, 335, 61, 18, -32, 134, 205, + 169, 144, 97, 40, -227, -227, 149, 61, 61, 61, + 18, -227, 163, 61, -227, 61, 175, 152, -227, -227, + 18, 1193, 217, 219, 1167, 1029, 1167, 97, 603, -10, + -227, 528, 220, 223, 1448, -227, -227, 224, 688, 160, + -227, -227, -227, -227, -227, -227, -227, 234, -227, -227, + 1111, 1961, 97, 18, 197, 171, -227, 61, -227, 18, + 185, 46, 186, 46, -227, -227, 246, -227, -227, -227, + 1512, 184, -227, -227, 18, 66, -227, 1167, -227, 577, + 213, 190, -227, -227, 1961, -227, -24, -24, -24, 68, + 68, 1289, 1489, 1545, 1481, 1417, 1353, 859, 859, 859, + 859, 783, 783, 287, 287, 1961, 1961, 1961, 1961, 1961, + 1961, 1961, 1961, 1961, 1961, 191, -227, -227, 18, 1167, + 18, -227, -227, 18, 97, -227, -227, 188, -227, 192, + -227, -227, 61, -227, -227, 97, -227, -227, 1576, 260, + 1640, 207, -227, 262, 1167, 18, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, 210, 222, 277, 921, + -227, -227, -227, 46, 203, 46, -227, -227, -227, -227, + -227, 97, -227, 1029, -227, 228, 212, 1961, -227, 215, + -227, 61, -227, -227, 232, 229, 1167, -227, 1167, -227, + 1640, 281, -227, -14, 1003, -227, 221, -227, 225, -227, + -227, -1, -227, 97, 236, 93, 1167, 229, 237, 1705, + 1769, 240, 1167, -227, -227, -227, -227, -227, 335, -227, + -227, -227, -227, -227, 1833, -227, -227, 1167, -227, 94, + 1897, 97, 239, 845, 1640, -227, -227, 1167, -227, -227, + -227, -227, -227 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -781,73 +785,74 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_uint8 yydefact[] = { - 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, 214, 2, 196, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 200, 3, 4, 198, 199, + 0, 204, 197, 0, 217, 0, 0, 0, 208, 207, + 206, 0, 211, 205, 0, 0, 6, 0, 201, 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, 156, 212, 202, 0, 203, 216, 1, 213, 209, + 210, 0, 0, 0, 183, 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, 172, 0, 0, 0, 164, 0, 169, 163, 0, + 185, 0, 0, 178, 180, 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, 0, 0, 0, 0, 186, + 190, 0, 0, 0, 158, 159, 0, 0, 0, 0, + 0, 141, 0, 0, 151, 0, 182, 0, 101, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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 + 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, 170, 0, + 0, 0, 0, 166, 173, 175, 0, 177, 179, 184, + 0, 0, 64, 70, 0, 0, 58, 0, 54, 56, + 47, 0, 45, 44, 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, + 189, 192, 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, 171, 0, 0, 0, 165, 176, 55, 5, + 106, 0, 43, 0, 53, 193, 0, 187, 188, 0, + 108, 0, 140, 181, 126, 0, 0, 76, 0, 80, + 0, 0, 123, 0, 0, 115, 0, 168, 0, 162, + 46, 0, 191, 0, 0, 0, 0, 132, 0, 0, + 0, 135, 0, 124, 125, 114, 174, 167, 0, 195, + 109, 146, 127, 128, 0, 131, 133, 0, 77, 0, + 112, 0, 0, 0, 0, 136, 137, 0, 134, 194, + 130, 129, 111 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -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 + -227, 0, -2, -227, 3, -227, -227, -227, 79, -68, + -227, -71, -227, -227, 286, -227, -227, -227, -227, -212, + 157, -91, 4, -116, -227, -34, 162, -17, 110, -220, + -70, -227, -227, -69, -227, -227, -89, -227, -13, -227, + 471, 128, -63, 330, -227, -227, -226, -33, -16, -227, + 89, 9, -227, 206, 17, 10, 13, -227, -221, 14, + -47, -227, -22, -227 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - 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 + 0, 81, 13, 82, 14, 83, 84, 85, 270, 271, + 105, 106, 86, 87, 116, 225, 226, 227, 228, 229, + 230, 150, 15, 421, 244, 245, 117, 272, 242, 119, + 232, 233, 397, 398, 234, 336, 337, 235, 49, 50, + 51, 16, 17, 18, 89, 126, 127, 128, 129, 121, + 122, 19, 134, 135, 207, 20, 21, 190, 191, 22, + 38, 23, 24, 25 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -855,412 +860,420 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { - 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, + 12, 56, 26, 193, 12, 34, 35, 27, 28, 39, + 40, 41, 48, 30, 31, 148, 343, 32, 33, 187, + 346, 2, 42, 12, 2, 354, 91, 356, 43, 95, + 133, 2, 2, 42, 98, 48, 200, 118, 2, 43, + 36, 201, 48, 114, 48, 48, 104, 334, 202, 313, + 37, 152, 2, 335, 185, 186, 37, 2, 42, 52, + 112, 120, 124, 131, 43, 2, 42, 2, 42, 137, + 2, 42, 43, 408, 43, 54, 92, 43, 145, 149, + 48, 194, 53, 195, 155, 156, 157, 366, 102, 368, + 104, 47, 48, 189, 149, 103, 2, 123, 246, 251, + 201, 133, 47, 48, 48, 192, 55, 202, 153, 48, + 222, 48, 221, 314, 57, 223, 231, 197, 256, 198, + 48, 236, 237, 252, 48, 238, 239, 47, 316, 388, + 58, 48, 320, 63, 131, 47, 90, 47, 90, 93, + 47, 123, 2, 42, 100, 48, 185, 186, 59, 43, + 211, 334, 266, 269, 2, 42, 60, 61, 255, 62, + 94, 43, 305, 404, 111, 130, 186, 112, 112, 2, + 42, 112, 143, 360, 108, 144, 43, 148, 199, 203, + 247, 249, 250, 253, 12, 48, 307, 254, 2, 42, + 125, 132, 259, 257, 261, 43, 263, 48, 48, 104, + 317, 333, 48, 104, 264, 48, 147, 113, 308, 265, + 324, 430, 47, 309, 197, 269, 198, 310, 108, 311, + 90, 48, 315, 322, 47, 323, 222, 326, 221, 327, + 339, 223, 231, 340, 342, 344, 318, 236, 237, 47, + 145, 238, 239, 348, 345, 349, 350, 48, 44, 120, + 45, 124, 361, 124, 46, 2, 357, 359, 47, 353, + 355, 363, 132, 364, 149, 372, 365, 269, 371, 48, + 376, 378, 379, 65, 66, 67, 2, 68, 387, 69, + 383, 273, 70, 382, 71, 384, 391, 392, 393, 72, + 395, 396, 402, 73, 329, 390, 406, 74, 419, 5, + 407, 6, 7, 155, 156, 157, 158, 159, 189, 411, + 189, 432, 416, 369, 429, 385, 275, 75, 9, 10, + 11, 325, 48, 88, 76, 413, 77, 108, 415, 97, + 426, 108, 246, 110, 29, 381, 1, 386, 352, 373, + 258, 2, 78, 273, 409, 3, 79, 109, 80, 312, + 0, 0, 0, 124, 136, 124, 138, 139, 140, 141, + 142, 0, 0, 269, 146, 185, 186, 405, 147, 0, + 0, 48, 0, 0, 331, 0, 0, 0, 0, 125, + 0, 125, 0, 0, 4, 5, 422, 6, 7, 0, + 0, 0, 0, 0, 0, 362, 0, 0, 224, 347, + 241, 0, 0, 8, 9, 10, 11, 0, 12, 0, 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, 222, 0, 221, -215, 1, 223, 231, 0, 260, + 2, 0, 236, 237, 3, 0, 238, 239, 0, 0, + 274, 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, 303, 304, + 0, 370, 0, 4, 5, 0, 6, 7, -218, 1, + 0, 125, 374, 125, 2, 0, 0, 377, 3, 0, + 0, 273, 8, 9, 10, 11, 0, 241, 0, -215, + 328, 0, 330, 0, 0, 0, 64, 0, 0, 0, + 0, 0, 0, 96, 224, 99, 101, 107, 389, 0, + 0, 0, 0, 0, 0, 0, 146, 4, 5, 0, + 6, 7, 0, 0, 2, 42, 0, 401, 0, 338, + 403, 43, 0, 152, 0, 0, 8, 9, 10, 11, + 410, 151, 412, 141, 0, 0, 0, 0, 0, 2, + 42, 107, 0, 188, 0, 0, 43, 0, 152, 0, + 0, 0, 2, 42, 196, 0, 425, 0, 428, 43, + 204, 431, 206, 2, 42, 0, 0, 0, 0, 0, + 43, 248, 152, 0, 44, 367, 45, 0, 0, 0, + 153, 0, 0, 0, 47, 0, 65, 66, 67, 2, + 68, 0, 69, 332, 0, 70, 0, 71, 0, 44, + 380, 45, 72, 0, 0, 153, 73, 0, 0, 47, + 74, 0, 197, 0, 198, 0, 0, 0, 111, 0, + 0, 0, 47, 197, 0, 198, 0, 0, 0, 153, + 75, 0, 0, 47, 0, 0, 306, 76, 0, 77, + 114, 0, 399, 0, 400, 0, 0, 0, 99, 101, + 107, 0, 0, 319, 107, 78, 321, 115, 0, 79, + 0, 80, 414, 0, 0, 0, 0, 0, 420, 208, + 0, 65, 66, 67, 2, 68, 0, 69, 209, 0, + 70, 0, 71, 424, 0, 0, 0, 72, 0, 224, + 0, 73, 0, 420, 0, 74, 0, 0, 351, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 75, 0, 0, 5, 0, + 6, 7, 76, 210, 77, 211, 0, 212, 213, 214, + -103, 215, 216, 217, 0, 218, 219, 0, 10, 11, + 78, 0, 112, -103, 79, 0, 80, 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, 206, 0, 0, 74, 0, 0, 155, + 156, 157, 158, 159, 0, 161, 162, 163, 0, 0, + 0, 166, 167, 168, 169, 0, 75, 172, 173, 5, + 0, 6, 7, 76, 210, 77, 211, 0, 212, 213, + 214, 0, 215, 216, 217, 0, 218, 219, 0, 10, + 11, 78, 394, 112, 220, 79, 208, 80, 65, 66, + 67, 2, 68, 0, 69, 209, 0, 70, 0, 71, + 0, 185, 186, 0, 72, 0, 0, 0, 73, 0, + 0, 0, 74, 0, 0, 155, 156, 157, 158, 159, + 0, 161, 162, 163, 0, 0, 0, 0, 0, 0, + 0, 0, 75, 172, 173, 5, 0, 6, 7, 76, + 210, 77, 211, 0, 212, 213, 214, 0, 215, 216, + 217, 0, 218, 219, 0, 10, 11, 78, 0, 112, + 0, 79, 0, 80, 65, 66, 67, 2, 68, 0, + 69, 0, 0, 70, 0, 71, 0, 185, 186, 0, + 72, 0, 0, 0, 73, 0, 0, 0, 74, 0, + 65, 66, 67, 2, 68, 0, 69, 0, 0, 70, + 0, 71, 0, 0, 0, 0, 72, 0, 75, 0, + 267, 0, 0, 0, 74, 76, 0, 77, 114, 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, 78, 75, 115, 0, 79, 0, 80, + 243, 76, 0, 77, 114, 0, 65, 66, 67, 2, + 68, 0, 69, 0, 0, 70, 0, 71, 0, 78, + 268, 115, 72, 79, 0, 80, 73, 0, 0, 0, + 74, 0, 65, 66, 67, 2, 68, 0, 69, 0, + 0, 70, 0, 71, 0, 0, 0, 0, 72, 0, + 75, 0, 267, 0, 0, 0, 74, 76, 0, 77, + 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 78, 75, 115, 0, 79, + 0, 80, 0, 76, 0, 77, 114, 0, 65, 66, + 67, 2, 68, 0, 69, 0, 0, 70, 0, 71, + 0, 78, 0, 115, 72, 79, 0, 80, 73, 0, + 0, 0, 74, 0, 65, 66, 67, 2, 68, 0, + 69, 0, 0, 70, 0, 71, 0, 0, 0, 0, + 72, 0, 75, 0, 73, 0, 0, 0, 74, 76, + 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 78, 75, 115, + 0, 79, 0, 80, 0, 76, 0, 77, 114, 0, + 65, 66, 67, 2, 68, 0, 69, 0, 0, 70, + 0, 71, 0, 78, 0, 0, 72, 79, 0, 80, + 73, 0, 0, 0, 74, 0, 65, 66, 67, 2, + 68, 0, 69, 0, 0, 70, 0, 71, 0, 0, + 0, 0, 72, 0, 75, 0, 73, 0, 0, 0, + 74, 76, 0, 77, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, + 75, 0, 0, 79, 0, 80, 0, 76, 0, 77, 0, 0, 0, 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, 154, 240, 0, 0, 0, 79, + 0, 80, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 0, 166, 167, 168, 169, 170, 171, + 172, 173, 174, 175, 176, 177, 178, 179, 0, 180, + 181, 182, 183, 0, 0, 155, 156, 157, 158, 159, + 0, 161, 162, 163, 164, 165, 0, 166, 167, 168, + 169, 170, 171, 172, 173, 0, 0, 0, 154, 0, + 184, 0, 0, 0, 185, 186, 155, 156, 157, 158, + 159, 160, 161, 162, 163, 164, 165, 0, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, + 178, 179, 0, 180, 181, 182, 183, 185, 186, 155, + 156, 157, 158, 159, 0, 161, 162, 163, 164, 0, + 0, 166, 167, 168, 169, 170, 171, 172, 173, 0, + 0, 0, 154, 0, 0, 0, 0, 205, 185, 186, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 0, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 0, 180, 181, 182, + 183, 185, 186, 155, 156, 157, 158, 159, 0, 161, + 162, 163, 0, 0, 0, 166, 167, 168, 169, 170, + 171, 172, 173, 0, 0, 0, 154, 262, 341, 0, + 0, 0, 185, 186, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 0, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, + 0, 180, 181, 182, 183, 185, 186, 155, 156, 157, + 158, 159, 0, 161, 162, 155, 156, 157, 158, 159, + 0, 0, 162, 0, 0, 172, 173, 0, 0, 0, + 154, 0, 0, 172, 173, 0, 185, 186, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 0, + 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 0, 180, 181, 182, 183, 185, + 186, 155, 156, 157, 158, 159, 0, 185, 186, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, + 173, 0, 0, 0, 154, 358, 0, 0, 0, 0, + 185, 186, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 0, 166, 167, 168, 169, 170, 171, + 172, 173, 174, 175, 176, 177, 178, 179, 0, 180, + 181, 182, 183, 185, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 154, 0, + 375, 0, 0, 0, 185, 186, 155, 156, 157, 158, + 159, 160, 161, 162, 163, 164, 165, 0, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, + 178, 179, 0, 180, 181, 182, 183, 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, 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, 154, 112, 417, 0, 0, 185, 186, + 0, 155, 156, 157, 158, 159, 160, 161, 162, 163, + 164, 165, 0, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 0, 180, 181, + 182, 183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 154, 0, 418, + 0, 0, 0, 185, 186, 155, 156, 157, 158, 159, + 160, 161, 162, 163, 164, 165, 0, 166, 167, 168, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, + 179, 0, 180, 181, 182, 183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 154, 0, 0, 423, 0, 0, 185, 186, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 0, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 0, 180, 181, 182, 183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 422, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 154, 0, 0, 0, 0, + 0, 185, 186, 155, 156, 157, 158, 159, 160, 161, + 162, 163, 164, 165, 0, 166, 167, 168, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 178, 179, 0, + 180, 181, 182, 183, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 154, + 0, 0, 0, 0, 0, 185, 186, 155, 156, 157, + 158, 159, 160, 161, 162, 163, 164, 165, 0, 166, + 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 0, 180, 181, 182, 183, 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, 188, 189 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 185, + 186 }; static const yytype_int16 yycheck[] = { - 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, + 0, 23, 4, 94, 4, 5, 6, 4, 4, 9, + 10, 11, 12, 4, 4, 78, 228, 4, 4, 90, + 240, 6, 7, 23, 6, 251, 39, 253, 13, 42, + 63, 6, 6, 7, 8, 35, 9, 54, 6, 13, + 5, 73, 42, 57, 44, 45, 46, 57, 80, 9, + 57, 15, 6, 63, 78, 79, 57, 6, 7, 10, + 74, 61, 62, 63, 13, 6, 7, 6, 7, 69, + 6, 7, 13, 74, 13, 8, 11, 13, 78, 79, + 80, 98, 10, 100, 16, 17, 18, 308, 73, 310, + 90, 76, 92, 93, 94, 80, 6, 51, 115, 74, + 73, 134, 76, 103, 104, 73, 10, 80, 72, 109, + 112, 111, 112, 73, 0, 112, 112, 66, 131, 68, + 120, 112, 112, 123, 124, 112, 112, 76, 199, 355, + 10, 131, 203, 74, 134, 76, 72, 76, 72, 74, + 76, 51, 6, 7, 8, 145, 78, 79, 10, 13, + 57, 57, 152, 153, 6, 7, 10, 72, 10, 74, + 72, 13, 184, 383, 72, 75, 79, 74, 74, 6, + 7, 74, 72, 264, 46, 72, 13, 240, 48, 48, + 78, 48, 73, 10, 184, 185, 186, 75, 6, 7, + 62, 63, 75, 10, 5, 13, 73, 197, 198, 199, + 200, 218, 202, 203, 48, 205, 78, 50, 74, 77, + 210, 423, 76, 8, 66, 215, 68, 48, 90, 75, + 72, 221, 73, 48, 76, 73, 228, 10, 228, 10, + 10, 228, 228, 10, 10, 75, 73, 228, 228, 76, + 240, 228, 228, 243, 10, 48, 75, 247, 66, 249, + 68, 251, 265, 253, 72, 6, 10, 73, 76, 74, + 74, 48, 134, 73, 264, 73, 75, 267, 80, 269, + 10, 64, 10, 3, 4, 5, 6, 7, 75, 9, + 58, 153, 12, 73, 14, 8, 58, 75, 73, 19, + 58, 62, 11, 23, 215, 363, 75, 27, 58, 50, + 75, 52, 53, 16, 17, 18, 19, 20, 308, 73, + 310, 427, 75, 313, 75, 349, 154, 47, 69, 70, + 71, 211, 322, 37, 54, 395, 56, 199, 397, 43, + 419, 203, 349, 47, 4, 335, 1, 353, 249, 322, + 134, 6, 72, 215, 391, 10, 76, 77, 78, 192, + -1, -1, -1, 353, 68, 355, 70, 71, 72, 73, + 74, -1, -1, 363, 78, 78, 79, 384, 240, -1, + -1, 371, -1, -1, 217, -1, -1, -1, -1, 251, + -1, 253, -1, -1, 49, 50, 408, 52, 53, -1, + -1, -1, -1, -1, -1, 267, -1, -1, 112, 242, + 114, -1, -1, 68, 69, 70, 71, -1, 408, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 423, -1, 423, 0, 1, 423, 423, -1, 143, + 6, -1, 423, 423, 10, -1, 423, 423, -1, -1, + 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, 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, 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, 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, -1, 320, - -1, -1, -1, -1, -1, -1, -1, -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, 314, -1, 49, 50, -1, 52, 53, 0, 1, + -1, 353, 325, 355, 6, -1, -1, 330, 10, -1, + -1, 363, 68, 69, 70, 71, -1, 211, -1, 75, + 214, -1, 216, -1, -1, -1, 35, -1, -1, -1, + -1, -1, -1, 42, 228, 44, 45, 46, 361, -1, + -1, -1, -1, -1, -1, -1, 240, 49, 50, -1, + 52, 53, -1, -1, 6, 7, -1, 380, -1, 11, + 383, 13, -1, 15, -1, -1, 68, 69, 70, 71, + 393, 80, 395, 267, -1, -1, -1, -1, -1, 6, + 7, 90, -1, 92, -1, -1, 13, -1, 15, -1, + -1, -1, 6, 7, 103, -1, 419, -1, 421, 13, + 109, 424, 111, 6, 7, -1, -1, -1, -1, -1, + 13, 120, 15, -1, 66, 309, 68, -1, -1, -1, + 72, -1, -1, -1, 76, -1, 3, 4, 5, 6, + 7, -1, 9, 10, -1, 12, -1, 14, -1, 66, + 334, 68, 19, -1, -1, 72, 23, -1, -1, 76, + 27, -1, 66, -1, 68, -1, -1, -1, 72, -1, + -1, -1, 76, 66, -1, 68, -1, -1, -1, 72, + 47, -1, -1, 76, -1, -1, 185, 54, -1, 56, + 57, -1, 376, -1, 378, -1, -1, -1, 197, 198, + 199, -1, -1, 202, 203, 72, 205, 74, -1, 76, + -1, 78, 396, -1, -1, -1, -1, -1, 402, 1, + -1, 3, 4, 5, 6, 7, -1, 9, 10, -1, + 12, -1, 14, 417, -1, -1, -1, 19, -1, 423, + -1, 23, -1, 427, -1, 27, -1, -1, 247, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 72, -1, 74, -1, 76, -1, 78, 47, -1, 3, - 4, 5, 6, 7, 54, 9, 56, 57, 12, -1, - 14, -1, -1, -1, -1, 19, -1, -1, -1, 23, - -1, -1, 72, 27, 74, -1, 76, -1, 78, -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, 78, 79, - -1, -1, -1, -1, -1, -1, 78, 79, -1, -1, + -1, -1, -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, -1, 70, 71, + 72, -1, 74, 75, 76, -1, 78, -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, 322, -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, 371, 74, 75, 76, 1, 78, 3, 4, + 5, 6, 7, -1, 9, 10, -1, 12, -1, 14, + -1, 78, 79, -1, 19, -1, -1, -1, 23, -1, + -1, -1, 27, -1, -1, 16, 17, 18, 19, 20, + -1, 22, 23, 24, -1, -1, -1, -1, -1, -1, + -1, -1, 47, 34, 35, 50, -1, 52, 53, 54, + 55, 56, 57, -1, 59, 60, 61, -1, 63, 64, + 65, -1, 67, 68, -1, 70, 71, 72, -1, 74, + -1, 76, -1, 78, 3, 4, 5, 6, 7, -1, + 9, -1, -1, 12, -1, 14, -1, 78, 79, -1, + 19, -1, -1, -1, 23, -1, -1, -1, 27, -1, + 3, 4, 5, 6, 7, -1, 9, -1, -1, 12, + -1, 14, -1, -1, -1, -1, 19, -1, 47, -1, + 23, -1, -1, -1, 27, 54, -1, 56, 57, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 8, 73, -1, -1, -1, -1, 78, - 79, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, -1, 28, 29, 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, 72, 47, 74, -1, 76, -1, 78, + 79, 54, -1, 56, 57, -1, 3, 4, 5, 6, + 7, -1, 9, -1, -1, 12, -1, 14, -1, 72, + 73, 74, 19, 76, -1, 78, 23, -1, -1, -1, + 27, -1, 3, 4, 5, 6, 7, -1, 9, -1, + -1, 12, -1, 14, -1, -1, -1, -1, 19, -1, + 47, -1, 23, -1, -1, -1, 27, 54, -1, 56, + 57, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 72, 47, 74, -1, 76, + -1, 78, -1, 54, -1, 56, 57, -1, 3, 4, + 5, 6, 7, -1, 9, -1, -1, 12, -1, 14, + -1, 72, -1, 74, 19, 76, -1, 78, 23, -1, + -1, -1, 27, -1, 3, 4, 5, 6, 7, -1, + 9, -1, -1, 12, -1, 14, -1, -1, -1, -1, + 19, -1, 47, -1, 23, -1, -1, -1, 27, 54, + -1, 56, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 72, 47, 74, + -1, 76, -1, 78, -1, 54, -1, 56, 57, -1, + 3, 4, 5, 6, 7, -1, 9, -1, -1, 12, + -1, 14, -1, 72, -1, -1, 19, 76, -1, 78, + 23, -1, -1, -1, 27, -1, 3, 4, 5, 6, + 7, -1, 9, -1, -1, 12, -1, 14, -1, -1, + -1, -1, 19, -1, 47, -1, 23, -1, -1, -1, + 27, 54, -1, 56, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 72, + 47, -1, -1, 76, -1, 78, -1, 54, -1, 56, -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, + -1, -1, -1, -1, 8, 72, -1, -1, -1, 76, + -1, 78, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, -1, 28, 29, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 39, 40, 41, -1, 43, + 44, 45, 46, -1, -1, 16, 17, 18, 19, 20, + -1, 22, 23, 24, 25, 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, -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, + 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, -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, + -1, 43, 44, 45, 46, 78, 79, 16, 17, 18, + 19, 20, -1, 22, 23, 16, 17, 18, 19, 20, + -1, -1, 23, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 8, -1, -1, -1, -1, -1, + 38, 39, 40, 41, -1, 43, 44, 45, 46, 78, + 79, 16, 17, 18, 19, 20, -1, 78, 79, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 34, + 35, -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, 48, -1, -1, -1, -1, -1, + 44, 45, 46, 78, 79, -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, + 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, -1, -1, -1, -1, -1, 78, 79 + -1, -1, -1, 8, 74, 10, -1, -1, 78, 79, + -1, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, -1, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, -1, 43, 44, + 45, 46, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 8, -1, 10, + -1, -1, -1, 78, 79, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 25, 26, -1, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, -1, 43, 44, 45, 46, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 8, -1, -1, 11, -1, -1, 78, 79, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, + -1, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, -1, 43, 44, 45, 46, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 8, -1, -1, -1, -1, + -1, 78, 79, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 26, -1, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, -1, + 43, 44, 45, 46, -1, 48, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 8, + -1, -1, -1, -1, -1, 78, 79, 16, 17, 18, + 19, 20, 21, 22, 23, 24, 25, 26, -1, 28, + 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, -1, 43, 44, 45, 46, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 78, + 79 }; /* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of @@ -1268,48 +1281,49 @@ 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, 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, + 70, 71, 82, 83, 85, 103, 122, 123, 124, 132, + 136, 137, 140, 142, 143, 144, 83, 85, 103, 124, + 132, 136, 137, 140, 82, 82, 5, 57, 141, 82, 82, 82, 7, 13, 66, 68, 72, 76, 82, 119, - 120, 121, 10, 10, 8, 10, 141, 0, 10, 10, + 120, 121, 10, 10, 8, 10, 143, 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, 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, + 82, 130, 131, 51, 82, 122, 126, 127, 128, 129, + 75, 82, 122, 128, 133, 134, 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, + 138, 139, 73, 102, 108, 108, 121, 66, 68, 48, + 9, 73, 80, 48, 121, 77, 121, 135, 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, 132, 136, 137, 140, + 72, 95, 109, 79, 105, 106, 108, 78, 121, 48, + 73, 74, 82, 10, 75, 10, 119, 10, 134, 75, + 95, 5, 73, 73, 48, 77, 82, 23, 73, 82, + 89, 90, 108, 122, 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, 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 + 95, 95, 95, 95, 95, 143, 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, 131, 74, 127, 74, 127, 10, 73, 73, + 102, 119, 122, 48, 73, 75, 139, 95, 139, 82, + 101, 80, 73, 135, 101, 74, 10, 101, 64, 10, + 95, 82, 73, 58, 8, 106, 129, 75, 127, 101, + 90, 58, 75, 73, 121, 58, 62, 113, 114, 95, + 95, 101, 11, 101, 110, 108, 75, 75, 74, 141, + 101, 73, 101, 111, 95, 114, 75, 10, 10, 58, + 95, 104, 143, 11, 95, 101, 117, 48, 101, 75, + 100, 101, 104 }; /* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */ @@ -1332,11 +1346,11 @@ static const yytype_uint8 yyr1[] = 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 + 130, 131, 131, 132, 132, 133, 133, 133, 133, 134, + 134, 135, 135, 136, 137, 137, 138, 138, 139, 139, + 139, 140, 140, 141, 141, 141, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 143, 143, 144, 144 }; /* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. */ @@ -1359,11 +1373,11 @@ static const yytype_int8 yyr2[] = 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 + 2, 3, 1, 5, 8, 2, 3, 2, 1, 2, + 1, 3, 1, 3, 5, 4, 1, 3, 3, 2, + 1, 7, 5, 5, 9, 7, 1, 1, 1, 1, + 1, 2, 2, 2, 1, 2, 2, 2, 2, 3, + 3, 2, 2, 3, 1, 1, 2, 1, 0 }; @@ -1927,387 +1941,399 @@ yydestruct (const char *yymsg, switch (yykind) { case YYSYMBOL_INT: /* INT */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" {} -#line 1933 "src/gen_parser.c" +#line 1947 "src/gen_parser.c" break; case YYSYMBOL_FLOAT: /* FLOAT */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" {} -#line 1939 "src/gen_parser.c" +#line 1953 "src/gen_parser.c" break; case YYSYMBOL_STRING: /* STRING */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" {} -#line 1945 "src/gen_parser.c" +#line 1959 "src/gen_parser.c" break; case YYSYMBOL_ID: /* ID */ -#line 142 "src/parser.y" +#line 143 "src/parser.y" {} -#line 1951 "src/gen_parser.c" +#line 1965 "src/gen_parser.c" break; case YYSYMBOL_id: /* id */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 1957 "src/gen_parser.c" +#line 1971 "src/gen_parser.c" break; case YYSYMBOL_var: /* var */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 1963 "src/gen_parser.c" +#line 1977 "src/gen_parser.c" break; case YYSYMBOL_embed: /* embed */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 1969 "src/gen_parser.c" +#line 1983 "src/gen_parser.c" break; case YYSYMBOL_import: /* import */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 1975 "src/gen_parser.c" +#line 1989 "src/gen_parser.c" break; case YYSYMBOL_assign: /* assign */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 1981 "src/gen_parser.c" +#line 1995 "src/gen_parser.c" break; case YYSYMBOL_binary_op: /* binary_op */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 1987 "src/gen_parser.c" +#line 2001 "src/gen_parser.c" break; case YYSYMBOL_unary_op: /* unary_op */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 1993 "src/gen_parser.c" +#line 2007 "src/gen_parser.c" break; case YYSYMBOL_arg: /* arg */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 1999 "src/gen_parser.c" +#line 2013 "src/gen_parser.c" break; case YYSYMBOL_arg_list: /* arg_list */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2005 "src/gen_parser.c" +#line 2019 "src/gen_parser.c" break; case YYSYMBOL_param_decl: /* param_decl */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2011 "src/gen_parser.c" +#line 2025 "src/gen_parser.c" break; case YYSYMBOL_decl_list: /* decl_list */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2017 "src/gen_parser.c" +#line 2031 "src/gen_parser.c" break; case YYSYMBOL_call: /* call */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2023 "src/gen_parser.c" +#line 2037 "src/gen_parser.c" break; case YYSYMBOL_defer: /* defer */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2029 "src/gen_parser.c" +#line 2043 "src/gen_parser.c" break; case YYSYMBOL_expr: /* expr */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2035 "src/gen_parser.c" +#line 2049 "src/gen_parser.c" break; case YYSYMBOL_while: /* while */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2041 "src/gen_parser.c" +#line 2055 "src/gen_parser.c" break; case YYSYMBOL_do_while: /* do_while */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2047 "src/gen_parser.c" +#line 2061 "src/gen_parser.c" break; case YYSYMBOL_goto: /* goto */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2053 "src/gen_parser.c" +#line 2067 "src/gen_parser.c" break; case YYSYMBOL_statement: /* statement */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2059 "src/gen_parser.c" +#line 2073 "src/gen_parser.c" break; case YYSYMBOL_statement_list: /* statement_list */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2065 "src/gen_parser.c" +#line 2079 "src/gen_parser.c" break; case YYSYMBOL_body: /* body */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2071 "src/gen_parser.c" +#line 2085 "src/gen_parser.c" break; case YYSYMBOL_macro_list: /* macro_list */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2077 "src/gen_parser.c" +#line 2091 "src/gen_parser.c" break; case YYSYMBOL_macro: /* macro */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2083 "src/gen_parser.c" +#line 2097 "src/gen_parser.c" break; case YYSYMBOL_expr_list: /* expr_list */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2089 "src/gen_parser.c" +#line 2103 "src/gen_parser.c" break; case YYSYMBOL_struct_init: /* struct_init */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2095 "src/gen_parser.c" +#line 2109 "src/gen_parser.c" break; case YYSYMBOL_struct_inits: /* struct_inits */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2101 "src/gen_parser.c" +#line 2115 "src/gen_parser.c" break; case YYSYMBOL_struct_construct: /* struct_construct */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2107 "src/gen_parser.c" +#line 2121 "src/gen_parser.c" break; case YYSYMBOL_init_expr: /* init_expr */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2113 "src/gen_parser.c" +#line 2127 "src/gen_parser.c" break; case YYSYMBOL_cond: /* cond */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2119 "src/gen_parser.c" +#line 2133 "src/gen_parser.c" break; case YYSYMBOL_expr_if: /* expr_if */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2125 "src/gen_parser.c" +#line 2139 "src/gen_parser.c" break; case YYSYMBOL_if: /* if */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2131 "src/gen_parser.c" +#line 2145 "src/gen_parser.c" break; case YYSYMBOL_for: /* for */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2137 "src/gen_parser.c" +#line 2151 "src/gen_parser.c" break; case YYSYMBOL_case: /* case */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2143 "src/gen_parser.c" +#line 2157 "src/gen_parser.c" break; case YYSYMBOL_case_list: /* case_list */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2149 "src/gen_parser.c" +#line 2163 "src/gen_parser.c" break; case YYSYMBOL_switch: /* switch */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2155 "src/gen_parser.c" +#line 2169 "src/gen_parser.c" break; case YYSYMBOL_const_for: /* const_for */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2161 "src/gen_parser.c" +#line 2175 "src/gen_parser.c" break; case YYSYMBOL_const_if: /* const_if */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2167 "src/gen_parser.c" +#line 2181 "src/gen_parser.c" break; case YYSYMBOL_const: /* const */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2173 "src/gen_parser.c" +#line 2187 "src/gen_parser.c" break; case YYSYMBOL_func_sign: /* func_sign */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2179 "src/gen_parser.c" +#line 2193 "src/gen_parser.c" break; case YYSYMBOL_variadic_sign: /* variadic_sign */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2185 "src/gen_parser.c" +#line 2199 "src/gen_parser.c" break; case YYSYMBOL_type: /* type */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2191 "src/gen_parser.c" +#line 2205 "src/gen_parser.c" break; case YYSYMBOL_var_decl: /* var_decl */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2197 "src/gen_parser.c" +#line 2211 "src/gen_parser.c" break; case YYSYMBOL_var_init: /* var_init */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2203 "src/gen_parser.c" +#line 2217 "src/gen_parser.c" break; case YYSYMBOL_proc: /* proc */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2209 "src/gen_parser.c" +#line 2223 "src/gen_parser.c" break; case YYSYMBOL_lambda: /* lambda */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2215 "src/gen_parser.c" +#line 2229 "src/gen_parser.c" break; case YYSYMBOL_union_elem: /* union_elem */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2221 "src/gen_parser.c" +#line 2235 "src/gen_parser.c" break; case YYSYMBOL_union_list: /* union_list */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2227 "src/gen_parser.c" +#line 2241 "src/gen_parser.c" break; case YYSYMBOL_union: /* union */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2233 "src/gen_parser.c" +#line 2247 "src/gen_parser.c" break; case YYSYMBOL_struct_list: /* struct_list */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" + { destroy_ast_tree(((*yyvaluep).node)); } +#line 2253 "src/gen_parser.c" + break; + + case YYSYMBOL_generic: /* generic */ +#line 144 "src/parser.y" + { destroy_ast_tree(((*yyvaluep).node)); } +#line 2259 "src/gen_parser.c" + break; + + case YYSYMBOL_generic_list: /* generic_list */ +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2239 "src/gen_parser.c" +#line 2265 "src/gen_parser.c" break; case YYSYMBOL_struct: /* struct */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2245 "src/gen_parser.c" +#line 2271 "src/gen_parser.c" break; case YYSYMBOL_template_elem: /* template_elem */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2251 "src/gen_parser.c" +#line 2277 "src/gen_parser.c" break; case YYSYMBOL_template_list: /* template_list */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2257 "src/gen_parser.c" +#line 2283 "src/gen_parser.c" break; case YYSYMBOL_type_list: /* type_list */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2263 "src/gen_parser.c" +#line 2289 "src/gen_parser.c" break; case YYSYMBOL_type_alias: /* type_alias */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2269 "src/gen_parser.c" +#line 2295 "src/gen_parser.c" break; case YYSYMBOL_type_template: /* type_template */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2275 "src/gen_parser.c" +#line 2301 "src/gen_parser.c" break; case YYSYMBOL_enum_val: /* enum_val */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2281 "src/gen_parser.c" +#line 2307 "src/gen_parser.c" break; case YYSYMBOL_enum_list: /* enum_list */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2287 "src/gen_parser.c" +#line 2313 "src/gen_parser.c" break; case YYSYMBOL_enum: /* enum */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2293 "src/gen_parser.c" +#line 2319 "src/gen_parser.c" break; case YYSYMBOL_top_if: /* top_if */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2299 "src/gen_parser.c" +#line 2325 "src/gen_parser.c" break; case YYSYMBOL_top: /* top */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2305 "src/gen_parser.c" +#line 2331 "src/gen_parser.c" break; case YYSYMBOL_unit: /* unit */ -#line 143 "src/parser.y" +#line 144 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2311 "src/gen_parser.c" +#line 2337 "src/gen_parser.c" break; default: @@ -2611,615 +2637,615 @@ yyreduce: switch (yyn) { case 2: /* id: ID */ -#line 147 "src/parser.y" +#line 148 "src/parser.y" { (yyval.node) = gen_id(strdup((yyvsp[0].str))); (yyval.node)->loc = to_src_loc(&yylloc); } -#line 2620 "src/gen_parser.c" +#line 2646 "src/gen_parser.c" break; case 3: /* var: var_decl */ -#line 153 "src/parser.y" +#line 154 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 2626 "src/gen_parser.c" +#line 2652 "src/gen_parser.c" break; case 4: /* var: var_init */ -#line 154 "src/parser.y" +#line 155 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 2632 "src/gen_parser.c" +#line 2658 "src/gen_parser.c" break; case 5: /* embed: "embed" "(" STRING ")" */ -#line 157 "src/parser.y" +#line 158 "src/parser.y" { (yyval.node) = gen_embed(clone_string((yyvsp[-1].str))); } -#line 2638 "src/gen_parser.c" +#line 2664 "src/gen_parser.c" break; case 6: /* import: "import" STRING */ -#line 160 "src/parser.y" +#line 161 "src/parser.y" { (yyval.node) = gen_import(clone_string((yyvsp[0].str))); } -#line 2644 "src/gen_parser.c" +#line 2670 "src/gen_parser.c" break; case 7: /* assign: expr "=" expr */ -#line 163 "src/parser.y" +#line 164 "src/parser.y" { (yyval.node) = gen_assign((yyvsp[-2].node), (yyvsp[0].node)); } -#line 2650 "src/gen_parser.c" +#line 2676 "src/gen_parser.c" break; case 8: /* assign: expr "=" struct_construct */ -#line 164 "src/parser.y" +#line 165 "src/parser.y" { (yyval.node) = gen_assign((yyvsp[-2].node), (yyvsp[0].node)); } -#line 2656 "src/gen_parser.c" +#line 2682 "src/gen_parser.c" break; case 9: /* binary_op: expr "+" expr */ -#line 167 "src/parser.y" +#line 168 "src/parser.y" { (yyval.node) = gen_binop(AST_ADD, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2662 "src/gen_parser.c" +#line 2688 "src/gen_parser.c" break; case 10: /* binary_op: expr "-" expr */ -#line 168 "src/parser.y" +#line 169 "src/parser.y" { (yyval.node) = gen_binop(AST_SUB, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2668 "src/gen_parser.c" +#line 2694 "src/gen_parser.c" break; case 11: /* binary_op: expr "*" expr */ -#line 169 "src/parser.y" +#line 170 "src/parser.y" { (yyval.node) = gen_binop(AST_MUL, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2674 "src/gen_parser.c" +#line 2700 "src/gen_parser.c" break; case 12: /* binary_op: expr "/" expr */ -#line 170 "src/parser.y" +#line 171 "src/parser.y" { (yyval.node) = gen_binop(AST_DIV, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2680 "src/gen_parser.c" +#line 2706 "src/gen_parser.c" break; case 13: /* binary_op: expr "%" expr */ -#line 171 "src/parser.y" +#line 172 "src/parser.y" { (yyval.node) = gen_binop(AST_REM, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2686 "src/gen_parser.c" +#line 2712 "src/gen_parser.c" break; case 14: /* binary_op: expr "^" expr */ -#line 172 "src/parser.y" +#line 173 "src/parser.y" { (yyval.node) = gen_binop(AST_XOR, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2692 "src/gen_parser.c" +#line 2718 "src/gen_parser.c" break; case 15: /* binary_op: expr "^^" expr */ -#line 173 "src/parser.y" +#line 174 "src/parser.y" { (yyval.node) = gen_binop(AST_POW, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2698 "src/gen_parser.c" +#line 2724 "src/gen_parser.c" break; case 16: /* binary_op: expr "&" expr */ -#line 174 "src/parser.y" +#line 175 "src/parser.y" { (yyval.node) = gen_binop(AST_AND, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2704 "src/gen_parser.c" +#line 2730 "src/gen_parser.c" break; case 17: /* binary_op: expr "&&" expr */ -#line 175 "src/parser.y" +#line 176 "src/parser.y" { (yyval.node) = gen_binop(AST_LAND, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2710 "src/gen_parser.c" +#line 2736 "src/gen_parser.c" break; case 18: /* binary_op: expr "|" expr */ -#line 176 "src/parser.y" +#line 177 "src/parser.y" { (yyval.node) = gen_binop(AST_OR, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2716 "src/gen_parser.c" +#line 2742 "src/gen_parser.c" break; case 19: /* binary_op: expr "||" expr */ -#line 177 "src/parser.y" +#line 178 "src/parser.y" { (yyval.node) = gen_binop(AST_LOR, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2722 "src/gen_parser.c" +#line 2748 "src/gen_parser.c" break; case 20: /* binary_op: expr "<<" expr */ -#line 178 "src/parser.y" +#line 179 "src/parser.y" { (yyval.node) = gen_binop(AST_LSHIFT, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2728 "src/gen_parser.c" +#line 2754 "src/gen_parser.c" break; case 21: /* binary_op: expr ">>" expr */ -#line 179 "src/parser.y" +#line 180 "src/parser.y" { (yyval.node) = gen_binop(AST_RSHIFT, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2734 "src/gen_parser.c" +#line 2760 "src/gen_parser.c" break; case 22: /* binary_op: expr "+=" expr */ -#line 180 "src/parser.y" +#line 181 "src/parser.y" { (yyval.node) = gen_binop(AST_ASSIGN_ADD, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2740 "src/gen_parser.c" +#line 2766 "src/gen_parser.c" break; case 23: /* binary_op: expr "-=" expr */ -#line 181 "src/parser.y" +#line 182 "src/parser.y" { (yyval.node) = gen_binop(AST_ASSIGN_SUB, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2746 "src/gen_parser.c" +#line 2772 "src/gen_parser.c" break; case 24: /* binary_op: expr "*=" expr */ -#line 182 "src/parser.y" +#line 183 "src/parser.y" { (yyval.node) = gen_binop(AST_ASSIGN_MUL, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2752 "src/gen_parser.c" +#line 2778 "src/gen_parser.c" break; case 25: /* binary_op: expr "/=" expr */ -#line 183 "src/parser.y" +#line 184 "src/parser.y" { (yyval.node) = gen_binop(AST_ASSIGN_DIV, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2758 "src/gen_parser.c" +#line 2784 "src/gen_parser.c" break; case 26: /* binary_op: expr "%=" expr */ -#line 184 "src/parser.y" +#line 185 "src/parser.y" { (yyval.node) = gen_binop(AST_ASSIGN_REM, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2764 "src/gen_parser.c" +#line 2790 "src/gen_parser.c" break; case 27: /* binary_op: expr "&=" expr */ -#line 185 "src/parser.y" +#line 186 "src/parser.y" { (yyval.node) = gen_binop(AST_ASSIGN_AND, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2770 "src/gen_parser.c" +#line 2796 "src/gen_parser.c" break; case 28: /* binary_op: expr "|=" expr */ -#line 186 "src/parser.y" +#line 187 "src/parser.y" { (yyval.node) = gen_binop(AST_ASSIGN_OR, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2776 "src/gen_parser.c" +#line 2802 "src/gen_parser.c" break; case 29: /* binary_op: expr "^=" expr */ -#line 187 "src/parser.y" +#line 188 "src/parser.y" { (yyval.node) = gen_binop(AST_ASSIGN_XOR, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2782 "src/gen_parser.c" +#line 2808 "src/gen_parser.c" break; case 30: /* binary_op: expr "<<=" expr */ -#line 188 "src/parser.y" +#line 189 "src/parser.y" { (yyval.node) = gen_binop(AST_ASSIGN_LSHIFT, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2790 "src/gen_parser.c" +#line 2816 "src/gen_parser.c" break; case 31: /* binary_op: expr ">>=" expr */ -#line 191 "src/parser.y" +#line 192 "src/parser.y" { (yyval.node) = gen_binop(AST_ASSIGN_RSHIFT, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2798 "src/gen_parser.c" +#line 2824 "src/gen_parser.c" break; case 32: /* binary_op: expr "<" expr */ -#line 194 "src/parser.y" +#line 195 "src/parser.y" { (yyval.node) = gen_binop(AST_LT, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2804 "src/gen_parser.c" +#line 2830 "src/gen_parser.c" break; case 33: /* binary_op: expr ">" expr */ -#line 195 "src/parser.y" +#line 196 "src/parser.y" { (yyval.node) = gen_binop(AST_GT, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2810 "src/gen_parser.c" +#line 2836 "src/gen_parser.c" break; case 34: /* binary_op: expr "<=" expr */ -#line 196 "src/parser.y" +#line 197 "src/parser.y" { (yyval.node) = gen_binop(AST_LE, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2816 "src/gen_parser.c" +#line 2842 "src/gen_parser.c" break; case 35: /* binary_op: expr ">=" expr */ -#line 197 "src/parser.y" +#line 198 "src/parser.y" { (yyval.node) = gen_binop(AST_GE, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2822 "src/gen_parser.c" +#line 2848 "src/gen_parser.c" break; case 36: /* binary_op: expr "!=" expr */ -#line 198 "src/parser.y" +#line 199 "src/parser.y" { (yyval.node) = gen_binop(AST_NE, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2828 "src/gen_parser.c" +#line 2854 "src/gen_parser.c" break; case 37: /* binary_op: expr "==" expr */ -#line 199 "src/parser.y" +#line 200 "src/parser.y" { (yyval.node) = gen_binop(AST_EQ, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2834 "src/gen_parser.c" +#line 2860 "src/gen_parser.c" break; case 38: /* unary_op: "-" expr */ -#line 202 "src/parser.y" +#line 203 "src/parser.y" { (yyval.node) = gen_unop(AST_NEG, (yyvsp[0].node)); } -#line 2840 "src/gen_parser.c" +#line 2866 "src/gen_parser.c" break; case 39: /* unary_op: "!" expr */ -#line 203 "src/parser.y" +#line 204 "src/parser.y" { (yyval.node) = gen_unop(AST_LNOT, (yyvsp[0].node)); } -#line 2846 "src/gen_parser.c" +#line 2872 "src/gen_parser.c" break; case 40: /* unary_op: "&" expr */ -#line 204 "src/parser.y" +#line 205 "src/parser.y" { (yyval.node) = gen_unop(AST_REF, (yyvsp[0].node)); } -#line 2852 "src/gen_parser.c" +#line 2878 "src/gen_parser.c" break; case 41: /* unary_op: "'" expr */ -#line 205 "src/parser.y" +#line 206 "src/parser.y" { (yyval.node) = gen_unop(AST_DEREF, (yyvsp[0].node)); } -#line 2858 "src/gen_parser.c" +#line 2884 "src/gen_parser.c" break; case 42: /* unary_op: "~" expr */ -#line 206 "src/parser.y" +#line 207 "src/parser.y" { (yyval.node) = gen_unop(AST_NOT, (yyvsp[0].node)); } -#line 2864 "src/gen_parser.c" +#line 2890 "src/gen_parser.c" break; case 43: /* arg: "&" var_decl */ -#line 209 "src/parser.y" +#line 210 "src/parser.y" { (yyval.node) = gen_unop(AST_REF, (yyvsp[0].node)); } -#line 2870 "src/gen_parser.c" +#line 2896 "src/gen_parser.c" break; case 44: /* arg: var_decl */ -#line 210 "src/parser.y" +#line 211 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 2876 "src/gen_parser.c" +#line 2902 "src/gen_parser.c" break; case 45: /* arg: init_expr */ -#line 211 "src/parser.y" +#line 212 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 2882 "src/gen_parser.c" +#line 2908 "src/gen_parser.c" break; case 46: /* arg_list: arg "," arg_list */ -#line 214 "src/parser.y" +#line 215 "src/parser.y" { (yyval.node) = (yyvsp[-2].node); (yyvsp[-2].node)->next = (yyvsp[0].node); } -#line 2888 "src/gen_parser.c" +#line 2914 "src/gen_parser.c" break; case 47: /* arg_list: arg */ -#line 215 "src/parser.y" +#line 216 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 2894 "src/gen_parser.c" +#line 2920 "src/gen_parser.c" break; case 48: /* param_decl: type */ -#line 218 "src/parser.y" +#line 219 "src/parser.y" { (yyval.node) = gen_var(NULL, (yyvsp[0].node), NULL); } -#line 2900 "src/gen_parser.c" +#line 2926 "src/gen_parser.c" break; case 49: /* decl_list: var_decl "," decl_list */ -#line 220 "src/parser.y" +#line 221 "src/parser.y" { (yyval.node) = (yyvsp[-2].node); (yyvsp[-2].node)->next = (yyvsp[0].node); } -#line 2906 "src/gen_parser.c" +#line 2932 "src/gen_parser.c" break; case 50: /* decl_list: param_decl "," decl_list */ -#line 221 "src/parser.y" +#line 222 "src/parser.y" { (yyval.node) = (yyvsp[-2].node); (yyvsp[-2].node)->next = (yyvsp[0].node); } -#line 2912 "src/gen_parser.c" +#line 2938 "src/gen_parser.c" break; case 51: /* decl_list: var_decl */ -#line 222 "src/parser.y" +#line 223 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 2918 "src/gen_parser.c" +#line 2944 "src/gen_parser.c" break; case 52: /* decl_list: param_decl */ -#line 223 "src/parser.y" +#line 224 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 2924 "src/gen_parser.c" +#line 2950 "src/gen_parser.c" break; case 53: /* call: id "(" arg_list ")" */ -#line 227 "src/parser.y" +#line 228 "src/parser.y" { (yyval.node) = gen_call((yyvsp[-3].node), (yyvsp[-1].node)); } -#line 2930 "src/gen_parser.c" +#line 2956 "src/gen_parser.c" break; case 54: /* call: id "(" ")" */ -#line 228 "src/parser.y" +#line 229 "src/parser.y" { (yyval.node) = gen_call((yyvsp[-2].node), NULL); } -#line 2936 "src/gen_parser.c" +#line 2962 "src/gen_parser.c" break; case 55: /* defer: "defer" "(" expr ")" */ -#line 231 "src/parser.y" +#line 232 "src/parser.y" { (yyval.node) = gen_defer((yyvsp[-1].node)); } -#line 2942 "src/gen_parser.c" +#line 2968 "src/gen_parser.c" break; case 56: /* expr: id */ -#line 235 "src/parser.y" +#line 236 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 2948 "src/gen_parser.c" +#line 2974 "src/gen_parser.c" break; case 57: /* expr: expr "." id */ -#line 236 "src/parser.y" +#line 237 "src/parser.y" { (yyval.node) = gen_dot((yyvsp[-2].node), (yyvsp[0].node)); } -#line 2954 "src/gen_parser.c" +#line 2980 "src/gen_parser.c" break; case 58: /* expr: id "##" id */ -#line 237 "src/parser.y" +#line 238 "src/parser.y" { (yyval.node) = gen_paste((yyvsp[-2].node), (yyvsp[0].node)); } -#line 2960 "src/gen_parser.c" +#line 2986 "src/gen_parser.c" break; case 59: /* expr: "..." id */ -#line 238 "src/parser.y" +#line 239 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 2966 "src/gen_parser.c" +#line 2992 "src/gen_parser.c" break; case 60: /* expr: "@" */ -#line 239 "src/parser.y" +#line 240 "src/parser.y" { (yyval.node) = gen_last(); } -#line 2972 "src/gen_parser.c" +#line 2998 "src/gen_parser.c" break; case 61: /* expr: INT */ -#line 240 "src/parser.y" +#line 241 "src/parser.y" { (yyval.node) = gen_int((yyvsp[0].integer)); (yyval.node)->loc = to_src_loc(&yylloc); } -#line 2978 "src/gen_parser.c" +#line 3004 "src/gen_parser.c" break; case 62: /* expr: FLOAT */ -#line 241 "src/parser.y" +#line 242 "src/parser.y" { (yyval.node) = gen_float((yyvsp[0].dbl)); (yyval.node)->loc = to_src_loc(&yylloc); } -#line 2984 "src/gen_parser.c" +#line 3010 "src/gen_parser.c" break; case 63: /* expr: STRING */ -#line 242 "src/parser.y" +#line 243 "src/parser.y" { (yyval.node) = gen_string(clone_string((yyvsp[0].str))); (yyval.node)->loc = to_src_loc(&yylloc); } -#line 2993 "src/gen_parser.c" +#line 3019 "src/gen_parser.c" break; case 64: /* expr: "(" expr ")" */ -#line 246 "src/parser.y" +#line 247 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); } -#line 2999 "src/gen_parser.c" +#line 3025 "src/gen_parser.c" break; case 65: /* expr: assign */ -#line 247 "src/parser.y" +#line 248 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3005 "src/gen_parser.c" +#line 3031 "src/gen_parser.c" break; case 66: /* expr: call */ -#line 248 "src/parser.y" +#line 249 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3011 "src/gen_parser.c" +#line 3037 "src/gen_parser.c" break; case 67: /* expr: defer */ -#line 249 "src/parser.y" +#line 250 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3017 "src/gen_parser.c" +#line 3043 "src/gen_parser.c" break; case 68: /* expr: binary_op */ -#line 250 "src/parser.y" +#line 251 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3023 "src/gen_parser.c" +#line 3049 "src/gen_parser.c" break; case 69: /* expr: unary_op */ -#line 251 "src/parser.y" +#line 252 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3029 "src/gen_parser.c" +#line 3055 "src/gen_parser.c" break; case 70: /* expr: "(" var_init ")" */ -#line 252 "src/parser.y" +#line 253 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); } -#line 3035 "src/gen_parser.c" +#line 3061 "src/gen_parser.c" break; case 71: /* expr: "sizeof" expr */ -#line 253 "src/parser.y" +#line 254 "src/parser.y" { (yyval.node) = gen_sizeof((yyvsp[0].node)); } -#line 3041 "src/gen_parser.c" +#line 3067 "src/gen_parser.c" break; case 72: /* expr: expr "as" type */ -#line 254 "src/parser.y" +#line 255 "src/parser.y" { (yyval.node) = gen_cast((yyvsp[-2].node), (yyvsp[0].node)); } -#line 3047 "src/gen_parser.c" +#line 3073 "src/gen_parser.c" break; case 73: /* expr: "as" type */ -#line 255 "src/parser.y" +#line 256 "src/parser.y" { (yyval.node) = gen_as((yyvsp[0].node)); } -#line 3053 "src/gen_parser.c" +#line 3079 "src/gen_parser.c" break; case 74: /* expr: embed */ -#line 256 "src/parser.y" +#line 257 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3059 "src/gen_parser.c" +#line 3085 "src/gen_parser.c" break; case 75: /* expr: lambda */ -#line 257 "src/parser.y" +#line 258 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3065 "src/gen_parser.c" +#line 3091 "src/gen_parser.c" break; case 76: /* while: "while" expr body */ -#line 260 "src/parser.y" +#line 261 "src/parser.y" { (yyval.node) = gen_while((yyvsp[-1].node), (yyvsp[0].node)); } -#line 3071 "src/gen_parser.c" +#line 3097 "src/gen_parser.c" break; case 77: /* do_while: "do" body "while" expr ";" */ -#line 263 "src/parser.y" +#line 264 "src/parser.y" { (yyval.node) = gen_while((yyvsp[-3].node), (yyvsp[-1].node)); ast_set_flags((yyval.node), AST_FLAG_DELAYED); } -#line 3080 "src/gen_parser.c" +#line 3106 "src/gen_parser.c" break; case 78: /* goto: "goto" id */ -#line 269 "src/parser.y" +#line 270 "src/parser.y" { (yyval.node) = gen_goto(gen_label((yyvsp[0].node))); } -#line 3086 "src/gen_parser.c" +#line 3112 "src/gen_parser.c" break; case 79: /* statement: expr ";" */ -#line 271 "src/parser.y" +#line 272 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); } -#line 3092 "src/gen_parser.c" +#line 3118 "src/gen_parser.c" break; case 80: /* statement: "return" init_expr ";" */ -#line 272 "src/parser.y" +#line 273 "src/parser.y" { (yyval.node) = gen_return((yyvsp[-1].node)); } -#line 3098 "src/gen_parser.c" +#line 3124 "src/gen_parser.c" break; case 81: /* statement: "return" ";" */ -#line 273 "src/parser.y" +#line 274 "src/parser.y" { (yyval.node) = gen_return(NULL); } -#line 3104 "src/gen_parser.c" +#line 3130 "src/gen_parser.c" break; case 82: /* statement: "break" ";" */ -#line 274 "src/parser.y" +#line 275 "src/parser.y" { (yyval.node) = gen_ctrl(AST_CTRL_BREAK, to_src_loc(&yylloc)); } -#line 3110 "src/gen_parser.c" +#line 3136 "src/gen_parser.c" break; case 83: /* statement: "continue" ";" */ -#line 275 "src/parser.y" +#line 276 "src/parser.y" { (yyval.node) = gen_ctrl(AST_CTRL_CONTINUE, to_src_loc(&yylloc)); } -#line 3117 "src/gen_parser.c" +#line 3143 "src/gen_parser.c" break; case 84: /* statement: import ";" */ -#line 277 "src/parser.y" +#line 278 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); } -#line 3123 "src/gen_parser.c" +#line 3149 "src/gen_parser.c" break; case 85: /* statement: var ";" */ -#line 278 "src/parser.y" +#line 279 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); } -#line 3129 "src/gen_parser.c" +#line 3155 "src/gen_parser.c" break; case 86: /* statement: if */ -#line 279 "src/parser.y" +#line 280 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3135 "src/gen_parser.c" +#line 3161 "src/gen_parser.c" break; case 87: /* statement: goto ";" */ -#line 280 "src/parser.y" +#line 281 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); } -#line 3141 "src/gen_parser.c" +#line 3167 "src/gen_parser.c" break; case 88: /* statement: id ":" */ -#line 281 "src/parser.y" +#line 282 "src/parser.y" { (yyval.node) = gen_label((yyvsp[-1].node)); } -#line 3147 "src/gen_parser.c" +#line 3173 "src/gen_parser.c" break; case 89: /* statement: for */ -#line 282 "src/parser.y" +#line 283 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3153 "src/gen_parser.c" +#line 3179 "src/gen_parser.c" break; case 90: /* statement: const */ -#line 283 "src/parser.y" +#line 284 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3159 "src/gen_parser.c" +#line 3185 "src/gen_parser.c" break; case 91: /* statement: while */ -#line 284 "src/parser.y" +#line 285 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3165 "src/gen_parser.c" +#line 3191 "src/gen_parser.c" break; case 92: /* statement: do_while */ -#line 285 "src/parser.y" +#line 286 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3171 "src/gen_parser.c" +#line 3197 "src/gen_parser.c" break; case 93: /* statement: switch */ -#line 286 "src/parser.y" +#line 287 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3177 "src/gen_parser.c" +#line 3203 "src/gen_parser.c" break; case 94: /* statement: macro */ -#line 287 "src/parser.y" +#line 288 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3183 "src/gen_parser.c" +#line 3209 "src/gen_parser.c" break; case 95: /* statement: struct */ -#line 288 "src/parser.y" +#line 289 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3189 "src/gen_parser.c" +#line 3215 "src/gen_parser.c" break; case 96: /* statement: type_alias ";" */ -#line 289 "src/parser.y" +#line 290 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); } -#line 3195 "src/gen_parser.c" +#line 3221 "src/gen_parser.c" break; case 97: /* statement: type_template */ -#line 290 "src/parser.y" +#line 291 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3201 "src/gen_parser.c" +#line 3227 "src/gen_parser.c" break; case 98: /* statement: enum */ -#line 291 "src/parser.y" +#line 292 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3207 "src/gen_parser.c" +#line 3233 "src/gen_parser.c" break; case 99: /* statement: body */ -#line 292 "src/parser.y" +#line 293 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3213 "src/gen_parser.c" +#line 3239 "src/gen_parser.c" break; case 100: /* statement: ";" */ -#line 293 "src/parser.y" +#line 294 "src/parser.y" { (yyval.node) = gen_empty(); } -#line 3219 "src/gen_parser.c" +#line 3245 "src/gen_parser.c" break; case 101: /* statement: error */ -#line 294 "src/parser.y" +#line 295 "src/parser.y" { /* TODO: figure out how to destroy any and all possible ast nodes we * may have generated up until the error */ @@ -3234,56 +3260,56 @@ yyreduce: yyclearin; yyerrok; } -#line 3238 "src/gen_parser.c" +#line 3264 "src/gen_parser.c" break; case 102: /* statement_list: statement statement_list */ -#line 310 "src/parser.y" +#line 311 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); (yyvsp[-1].node)->next = (yyvsp[0].node); } -#line 3244 "src/gen_parser.c" +#line 3270 "src/gen_parser.c" break; case 103: /* statement_list: statement */ -#line 311 "src/parser.y" +#line 312 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3250 "src/gen_parser.c" +#line 3276 "src/gen_parser.c" break; case 104: /* body: "{" statement_list "}" */ -#line 314 "src/parser.y" +#line 315 "src/parser.y" { (yyval.node) = gen_block((yyvsp[-1].node)); } -#line 3256 "src/gen_parser.c" +#line 3282 "src/gen_parser.c" break; case 105: /* body: "{" "}" */ -#line 315 "src/parser.y" +#line 316 "src/parser.y" { (yyval.node) = gen_block(gen_empty()); } -#line 3262 "src/gen_parser.c" +#line 3288 "src/gen_parser.c" break; case 106: /* macro_list: id "," macro_list */ -#line 318 "src/parser.y" +#line 319 "src/parser.y" { (yyval.node) = (yyvsp[-2].node); (yyval.node)->next = (yyvsp[0].node); } -#line 3268 "src/gen_parser.c" +#line 3294 "src/gen_parser.c" break; case 107: /* macro_list: id */ -#line 319 "src/parser.y" +#line 320 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3274 "src/gen_parser.c" +#line 3300 "src/gen_parser.c" break; case 108: /* macro: "define" id "(" macro_list ")" body */ -#line 322 "src/parser.y" +#line 323 "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 3283 "src/gen_parser.c" +#line 3309 "src/gen_parser.c" break; case 109: /* macro: "define" id "(" macro_list "..." id ")" body */ -#line 326 "src/parser.y" +#line 327 "src/parser.y" { /* TODO: the location data of the variadic ID is way off */ ast_append((yyvsp[-4].node), (yyvsp[-2].node)); @@ -3291,702 +3317,723 @@ yyreduce: ast_set_flags((yyval.node), AST_FLAG_VARIADIC); ast_set_flags((yyvsp[0].node), AST_FLAG_UNHYGIENIC); } -#line 3295 "src/gen_parser.c" +#line 3321 "src/gen_parser.c" break; case 110: /* macro: "define" id "(" ")" body */ -#line 333 "src/parser.y" +#line 334 "src/parser.y" { (yyval.node) = gen_macro((yyvsp[-3].node), NULL, (yyvsp[0].node)); ast_set_flags((yyvsp[0].node), AST_FLAG_UNHYGIENIC); } -#line 3304 "src/gen_parser.c" +#line 3330 "src/gen_parser.c" break; case 111: /* expr_list: expr "," expr_list */ -#line 339 "src/parser.y" +#line 340 "src/parser.y" { (yyval.node) = (yyvsp[-2].node); (yyvsp[-2].node)->next = (yyvsp[0].node); } -#line 3310 "src/gen_parser.c" +#line 3336 "src/gen_parser.c" break; case 112: /* expr_list: expr */ -#line 340 "src/parser.y" +#line 341 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3316 "src/gen_parser.c" +#line 3342 "src/gen_parser.c" break; case 113: /* struct_init: init_expr */ -#line 343 "src/parser.y" +#line 344 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3322 "src/gen_parser.c" +#line 3348 "src/gen_parser.c" break; 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" +#line 345 "src/parser.y" + { + (yyval.node) = gen_var((yyvsp[-2].node), NULL, (yyvsp[0].node)); + ast_set_flags((yyval.node), AST_FLAG_MEMBER); + } +#line 3357 "src/gen_parser.c" break; case 115: /* struct_inits: struct_init "," struct_inits */ -#line 347 "src/parser.y" +#line 351 "src/parser.y" { (yyval.node) = (yyvsp[-2].node); (yyvsp[-2].node)->next = (yyvsp[0].node); } -#line 3334 "src/gen_parser.c" +#line 3363 "src/gen_parser.c" break; case 116: /* struct_inits: struct_init */ -#line 348 "src/parser.y" +#line 352 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3340 "src/gen_parser.c" +#line 3369 "src/gen_parser.c" break; case 117: /* struct_construct: "{" struct_inits "}" */ -#line 351 "src/parser.y" +#line 355 "src/parser.y" { (yyval.node) = gen_init((yyvsp[-1].node)); } -#line 3346 "src/gen_parser.c" +#line 3375 "src/gen_parser.c" break; case 118: /* init_expr: expr */ -#line 354 "src/parser.y" +#line 358 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3352 "src/gen_parser.c" +#line 3381 "src/gen_parser.c" break; case 119: /* init_expr: expr_if */ -#line 355 "src/parser.y" +#line 359 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3358 "src/gen_parser.c" +#line 3387 "src/gen_parser.c" break; case 120: /* init_expr: struct_construct */ -#line 356 "src/parser.y" +#line 360 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3364 "src/gen_parser.c" +#line 3393 "src/gen_parser.c" break; case 121: /* init_expr: struct_construct "as" type */ -#line 357 "src/parser.y" +#line 361 "src/parser.y" { (yyval.node) = gen_cast((yyvsp[-2].node), (yyvsp[0].node)); } -#line 3370 "src/gen_parser.c" +#line 3399 "src/gen_parser.c" break; case 122: /* cond: expr */ -#line 360 "src/parser.y" +#line 364 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3376 "src/gen_parser.c" +#line 3405 "src/gen_parser.c" break; case 123: /* cond: "(" expr_if ")" */ -#line 361 "src/parser.y" +#line 365 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); } -#line 3382 "src/gen_parser.c" +#line 3411 "src/gen_parser.c" break; case 124: /* expr_if: "if" cond body "else" body */ -#line 365 "src/parser.y" +#line 369 "src/parser.y" { (yyval.node) = gen_if((yyvsp[-3].node), (yyvsp[-2].node), (yyvsp[0].node)); } -#line 3388 "src/gen_parser.c" +#line 3417 "src/gen_parser.c" break; case 125: /* expr_if: "if" cond body "else" expr_if */ -#line 366 "src/parser.y" +#line 370 "src/parser.y" { (yyval.node) = gen_if((yyvsp[-3].node), (yyvsp[-2].node), (yyvsp[0].node)); } -#line 3394 "src/gen_parser.c" +#line 3423 "src/gen_parser.c" break; case 126: /* if: "if" cond body */ -#line 369 "src/parser.y" +#line 373 "src/parser.y" { (yyval.node) = gen_if((yyvsp[-1].node), (yyvsp[0].node), NULL); } -#line 3400 "src/gen_parser.c" +#line 3429 "src/gen_parser.c" break; case 127: /* if: "if" cond body "else" body */ -#line 370 "src/parser.y" +#line 374 "src/parser.y" { (yyval.node) = gen_if((yyvsp[-3].node), (yyvsp[-2].node), (yyvsp[0].node)); } -#line 3406 "src/gen_parser.c" +#line 3435 "src/gen_parser.c" break; case 128: /* if: "if" cond body "else" if */ -#line 371 "src/parser.y" +#line 375 "src/parser.y" { (yyval.node) = gen_if((yyvsp[-3].node), (yyvsp[-2].node), (yyvsp[0].node)); } -#line 3412 "src/gen_parser.c" +#line 3441 "src/gen_parser.c" break; case 129: /* for: "for" arg ";" expr ";" expr body */ -#line 374 "src/parser.y" +#line 378 "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" +#line 3447 "src/gen_parser.c" break; case 130: /* case: "case" expr ":" statement_list */ -#line 377 "src/parser.y" +#line 381 "src/parser.y" { (yyval.node) = gen_case((yyvsp[-2].node), (yyvsp[0].node)); } -#line 3424 "src/gen_parser.c" +#line 3453 "src/gen_parser.c" break; case 131: /* case_list: case case_list */ -#line 380 "src/parser.y" +#line 384 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); (yyvsp[-1].node)->next = (yyvsp[0].node); } -#line 3430 "src/gen_parser.c" +#line 3459 "src/gen_parser.c" break; case 132: /* case_list: case */ -#line 381 "src/parser.y" +#line 385 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3436 "src/gen_parser.c" +#line 3465 "src/gen_parser.c" break; case 133: /* switch: "switch" expr "{" case_list "}" */ -#line 384 "src/parser.y" +#line 388 "src/parser.y" { (yyval.node) = gen_switch((yyvsp[-3].node), (yyvsp[-1].node)); } -#line 3442 "src/gen_parser.c" +#line 3471 "src/gen_parser.c" break; case 134: /* const_for: "for" id ":" expr_list body */ -#line 387 "src/parser.y" +#line 391 "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 3452 "src/gen_parser.c" +#line 3481 "src/gen_parser.c" break; case 135: /* const_if: "if" expr body */ -#line 394 "src/parser.y" +#line 398 "src/parser.y" { (yyval.node) = gen_if((yyvsp[-1].node), (yyvsp[0].node), NULL); ast_set_flags((yyvsp[0].node), AST_FLAG_UNHYGIENIC); } -#line 3461 "src/gen_parser.c" +#line 3490 "src/gen_parser.c" break; case 136: /* const_if: "if" expr body "else" body */ -#line 398 "src/parser.y" +#line 402 "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 3471 "src/gen_parser.c" +#line 3500 "src/gen_parser.c" break; case 137: /* const_if: "if" expr body "else" const_if */ -#line 403 "src/parser.y" +#line 407 "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 3480 "src/gen_parser.c" +#line 3509 "src/gen_parser.c" break; case 138: /* const: "const" const_if */ -#line 411 "src/parser.y" +#line 415 "src/parser.y" { (yyval.node) = (yyvsp[0].node); ast_set_flags((yyval.node), AST_FLAG_CONST); } -#line 3487 "src/gen_parser.c" +#line 3516 "src/gen_parser.c" break; case 139: /* const: "const" const_for */ -#line 413 "src/parser.y" +#line 417 "src/parser.y" { (yyval.node) = (yyvsp[0].node); ast_set_flags((yyval.node), AST_FLAG_CONST); } -#line 3494 "src/gen_parser.c" +#line 3523 "src/gen_parser.c" break; case 140: /* func_sign: "(" decl_list "=>" type ")" */ -#line 417 "src/parser.y" +#line 421 "src/parser.y" { (yyval.node) = gen_type(AST_TYPE_SIGN, NULL, (yyvsp[-3].node), (yyvsp[-1].node)); } -#line 3502 "src/gen_parser.c" +#line 3531 "src/gen_parser.c" break; case 141: /* func_sign: "(" decl_list ")" */ -#line 420 "src/parser.y" +#line 424 "src/parser.y" { (yyval.node) = gen_type(AST_TYPE_SIGN, NULL, (yyvsp[-1].node), NULL); } -#line 3509 "src/gen_parser.c" +#line 3538 "src/gen_parser.c" break; case 142: /* func_sign: "(" decl_list "=>" ")" */ -#line 422 "src/parser.y" +#line 426 "src/parser.y" { (yyval.node) = gen_type(AST_TYPE_SIGN, NULL, (yyvsp[-2].node), NULL); } -#line 3516 "src/gen_parser.c" +#line 3545 "src/gen_parser.c" break; case 143: /* func_sign: "(" "=>" type ")" */ -#line 424 "src/parser.y" +#line 428 "src/parser.y" { (yyval.node) = gen_type(AST_TYPE_SIGN, NULL, NULL, (yyvsp[-1].node)); } -#line 3523 "src/gen_parser.c" +#line 3552 "src/gen_parser.c" break; case 144: /* func_sign: "(" ")" */ -#line 426 "src/parser.y" +#line 430 "src/parser.y" { (yyval.node) = gen_type(AST_TYPE_SIGN, NULL, NULL, NULL); } -#line 3530 "src/gen_parser.c" +#line 3559 "src/gen_parser.c" break; case 145: /* variadic_sign: func_sign */ -#line 430 "src/parser.y" +#line 434 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3536 "src/gen_parser.c" +#line 3565 "src/gen_parser.c" break; case 146: /* variadic_sign: "(" decl_list "..." id "=>" type ")" */ -#line 431 "src/parser.y" +#line 435 "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 3546 "src/gen_parser.c" +#line 3575 "src/gen_parser.c" break; case 147: /* type: id */ -#line 438 "src/parser.y" +#line 442 "src/parser.y" { (yyval.node) = gen_type(AST_TYPE_ID, (yyvsp[0].node), NULL, NULL); } -#line 3552 "src/gen_parser.c" +#line 3581 "src/gen_parser.c" break; case 148: /* type: "'" func_sign */ -#line 439 "src/parser.y" +#line 443 "src/parser.y" { (yyval.node) = gen_type(AST_TYPE_POINTER, NULL, NULL, NULL); (yyval.node)->next = (yyvsp[0].node); } -#line 3561 "src/gen_parser.c" +#line 3590 "src/gen_parser.c" break; case 149: /* type: id "(" type_list ")" */ -#line 443 "src/parser.y" +#line 447 "src/parser.y" { (yyval.node) = gen_type(AST_TYPE_STRUCT, (yyvsp[-3].node), (yyvsp[-1].node), NULL); } -#line 3569 "src/gen_parser.c" +#line 3598 "src/gen_parser.c" break; case 150: /* type: "'" type */ -#line 446 "src/parser.y" +#line 450 "src/parser.y" { (yyval.node) = gen_type(AST_TYPE_POINTER, NULL, NULL, NULL); (yyval.node)->_type.next = (yyvsp[0].node); } -#line 3578 "src/gen_parser.c" +#line 3607 "src/gen_parser.c" break; case 151: /* type: "[" "]" type */ -#line 450 "src/parser.y" +#line 454 "src/parser.y" { (yyval.node) = gen_type(AST_TYPE_ARR, NULL, NULL, NULL); (yyval.node)->_type.next = (yyvsp[0].node); } -#line 3587 "src/gen_parser.c" +#line 3616 "src/gen_parser.c" break; case 152: /* type: "[" expr "]" type */ -#line 454 "src/parser.y" +#line 458 "src/parser.y" { (yyval.node) = gen_type(AST_TYPE_ARR, NULL, (yyvsp[-2].node), NULL); (yyval.node)->_type.next = (yyvsp[0].node); } -#line 3596 "src/gen_parser.c" +#line 3625 "src/gen_parser.c" break; case 153: /* type: "typeof" expr */ -#line 458 "src/parser.y" +#line 462 "src/parser.y" { (yyval.node) = gen_type(AST_TYPE_TYPEOF, NULL, (yyvsp[0].node), NULL); } -#line 3604 "src/gen_parser.c" +#line 3633 "src/gen_parser.c" break; case 154: /* var_decl: id "mut" type */ -#line 463 "src/parser.y" +#line 467 "src/parser.y" { (yyval.node) = gen_var((yyvsp[-2].node), (yyvsp[0].node), NULL); ast_set_flags((yyval.node), AST_FLAG_MUTABLE); } -#line 3613 "src/gen_parser.c" +#line 3642 "src/gen_parser.c" break; case 155: /* var_decl: id "const" type */ -#line 467 "src/parser.y" +#line 471 "src/parser.y" { (yyval.node) = gen_var((yyvsp[-2].node), (yyvsp[0].node), NULL); } -#line 3619 "src/gen_parser.c" +#line 3648 "src/gen_parser.c" break; case 156: /* var_decl: id type */ -#line 468 "src/parser.y" +#line 472 "src/parser.y" { (yyval.node) = gen_var((yyvsp[-1].node), (yyvsp[0].node), NULL); } -#line 3625 "src/gen_parser.c" +#line 3654 "src/gen_parser.c" break; case 157: /* var_init: var_decl "=" init_expr */ -#line 471 "src/parser.y" +#line 475 "src/parser.y" { (yyval.node) = (yyvsp[-2].node); (yyvsp[-2].node)->_var.init = (yyvsp[0].node); } -#line 3631 "src/gen_parser.c" +#line 3660 "src/gen_parser.c" break; case 158: /* var_init: id "mut" "=" init_expr */ -#line 472 "src/parser.y" +#line 476 "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 3640 "src/gen_parser.c" +#line 3669 "src/gen_parser.c" break; case 159: /* var_init: id "const" "=" init_expr */ -#line 476 "src/parser.y" +#line 480 "src/parser.y" { (yyval.node) = gen_var((yyvsp[-3].node), NULL, (yyvsp[0].node)); ast_set_flags((yyval.node), AST_FLAG_UNTYPED); } -#line 3649 "src/gen_parser.c" +#line 3678 "src/gen_parser.c" break; case 160: /* proc: id variadic_sign body */ -#line 482 "src/parser.y" +#line 486 "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 3658 "src/gen_parser.c" +#line 3687 "src/gen_parser.c" break; case 161: /* proc: "extern" id func_sign */ -#line 486 "src/parser.y" +#line 490 "src/parser.y" { (yyval.node) = gen_proc((yyvsp[-1].node), (yyvsp[0].node), NULL); ast_set_flags((yyval.node), AST_FLAG_EXTERN); } -#line 3667 "src/gen_parser.c" +#line 3696 "src/gen_parser.c" break; case 162: /* lambda: "[" macro_list "]" func_sign body */ -#line 492 "src/parser.y" +#line 496 "src/parser.y" { (yyval.node) = gen_lambda((yyvsp[-3].node), (yyvsp[-1].node), (yyvsp[0].node)); } -#line 3674 "src/gen_parser.c" +#line 3703 "src/gen_parser.c" break; case 163: /* union_elem: union */ -#line 496 "src/parser.y" +#line 500 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3680 "src/gen_parser.c" +#line 3709 "src/gen_parser.c" break; case 164: /* union_elem: var_decl */ -#line 497 "src/parser.y" +#line 501 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3686 "src/gen_parser.c" +#line 3715 "src/gen_parser.c" break; case 165: /* union_list: union_elem ";" union_list */ -#line 500 "src/parser.y" +#line 504 "src/parser.y" { (yyval.node) = (yyvsp[-2].node); (yyvsp[-2].node)->next = (yyvsp[0].node); } -#line 3692 "src/gen_parser.c" +#line 3721 "src/gen_parser.c" break; case 166: /* union_list: union_elem ";" */ -#line 501 "src/parser.y" +#line 505 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); } -#line 3698 "src/gen_parser.c" +#line 3727 "src/gen_parser.c" break; case 167: /* union: "union" id "{" union_list "}" */ -#line 504 "src/parser.y" +#line 508 "src/parser.y" { (yyval.node) = gen_type(AST_TYPE_UNION, (yyvsp[-3].node), (yyvsp[-1].node), NULL); } -#line 3706 "src/gen_parser.c" +#line 3735 "src/gen_parser.c" break; case 168: /* union: "union" "{" union_list "}" */ -#line 507 "src/parser.y" +#line 511 "src/parser.y" { (yyval.node) = gen_type(AST_TYPE_UNION, NULL, (yyvsp[-1].node), NULL); } -#line 3713 "src/gen_parser.c" +#line 3742 "src/gen_parser.c" break; case 169: /* struct_list: union_list */ -#line 512 "src/parser.y" +#line 516 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3719 "src/gen_parser.c" +#line 3748 "src/gen_parser.c" break; - case 170: /* struct: "struct" id "{" struct_list "}" */ -#line 515 "src/parser.y" + case 170: /* generic: id type */ +#line 519 "src/parser.y" + { (yyval.node) = gen_alias((yyvsp[-1].node), (yyvsp[0].node)); } +#line 3754 "src/gen_parser.c" + break; + + case 171: /* generic_list: generic "," generic_list */ +#line 520 "src/parser.y" + { (yyval.node) = (yyvsp[-2].node); (yyval.node)->next = (yyvsp[0].node); } +#line 3760 "src/gen_parser.c" + break; + + case 172: /* generic_list: generic */ +#line 521 "src/parser.y" + { (yyval.node) = (yyvsp[0].node); } +#line 3766 "src/gen_parser.c" + break; + + case 173: /* struct: "struct" id "{" struct_list "}" */ +#line 524 "src/parser.y" { (yyval.node) = gen_struct((yyvsp[-3].node), NULL, (yyvsp[-1].node)); } -#line 3727 "src/gen_parser.c" +#line 3774 "src/gen_parser.c" break; - case 171: /* struct: "struct" id "(" arg_list ")" "{" struct_list "}" */ -#line 518 "src/parser.y" - { + case 174: /* struct: "struct" id "(" generic_list ")" "{" struct_list "}" */ +#line 527 "src/parser.y" + { (yyval.node) = gen_struct((yyvsp[-6].node), (yyvsp[-4].node), (yyvsp[-1].node)); } -#line 3735 "src/gen_parser.c" +#line 3782 "src/gen_parser.c" break; - case 172: /* template_elem: id ";" */ -#line 525 "src/parser.y" + case 175: /* template_elem: id ";" */ +#line 534 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); } -#line 3741 "src/gen_parser.c" +#line 3788 "src/gen_parser.c" break; - case 173: /* template_elem: id func_sign ";" */ -#line 526 "src/parser.y" + case 176: /* template_elem: id func_sign ";" */ +#line 535 "src/parser.y" { (yyval.node) = gen_proc((yyvsp[-2].node), (yyvsp[-1].node), NULL); } -#line 3747 "src/gen_parser.c" +#line 3794 "src/gen_parser.c" break; - case 174: /* template_elem: var_decl ";" */ -#line 527 "src/parser.y" + case 177: /* template_elem: var_decl ";" */ +#line 536 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); } -#line 3753 "src/gen_parser.c" +#line 3800 "src/gen_parser.c" break; - case 175: /* template_elem: union */ -#line 528 "src/parser.y" + case 178: /* template_elem: union */ +#line 537 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3759 "src/gen_parser.c" +#line 3806 "src/gen_parser.c" break; - case 176: /* template_list: template_elem template_list */ -#line 531 "src/parser.y" + case 179: /* template_list: template_elem template_list */ +#line 540 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); (yyvsp[-1].node)->next = (yyvsp[0].node); } -#line 3765 "src/gen_parser.c" +#line 3812 "src/gen_parser.c" break; - case 177: /* template_list: template_elem */ -#line 532 "src/parser.y" + case 180: /* template_list: template_elem */ +#line 541 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3771 "src/gen_parser.c" +#line 3818 "src/gen_parser.c" break; - case 178: /* type_list: type "," type_list */ -#line 535 "src/parser.y" + case 181: /* type_list: type "," type_list */ +#line 544 "src/parser.y" { (yyval.node) = (yyvsp[-2].node); (yyvsp[-2].node)->next = (yyvsp[0].node); } -#line 3777 "src/gen_parser.c" +#line 3824 "src/gen_parser.c" break; - case 179: /* type_list: type */ -#line 536 "src/parser.y" + case 182: /* type_list: type */ +#line 545 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3783 "src/gen_parser.c" +#line 3830 "src/gen_parser.c" break; - case 180: /* type_alias: "type" id type */ -#line 539 "src/parser.y" + case 183: /* type_alias: "type" id type */ +#line 548 "src/parser.y" { (yyval.node) = gen_alias((yyvsp[-1].node), (yyvsp[0].node)); } -#line 3789 "src/gen_parser.c" +#line 3836 "src/gen_parser.c" break; - case 181: /* type_template: "type" id "{" template_list "}" */ -#line 544 "src/parser.y" + case 184: /* type_template: "type" id "{" template_list "}" */ +#line 553 "src/parser.y" { (yyval.node) = gen_template((yyvsp[-3].node), (yyvsp[-1].node)); } -#line 3797 "src/gen_parser.c" +#line 3844 "src/gen_parser.c" break; - case 182: /* type_template: "type" id "{" "}" */ -#line 547 "src/parser.y" + case 185: /* type_template: "type" id "{" "}" */ +#line 556 "src/parser.y" { /* should match anything, but doesn't implement anything */ (yyval.node) = gen_template((yyvsp[-2].node), NULL); } -#line 3806 "src/gen_parser.c" +#line 3853 "src/gen_parser.c" break; - case 183: /* enum_val: id */ -#line 553 "src/parser.y" + case 186: /* enum_val: id */ +#line 562 "src/parser.y" { (yyval.node) = gen_val((yyvsp[0].node), gen_int(0)); } -#line 3812 "src/gen_parser.c" +#line 3859 "src/gen_parser.c" break; - case 184: /* enum_val: id "=" expr */ -#line 554 "src/parser.y" + case 187: /* enum_val: id "=" expr */ +#line 563 "src/parser.y" { (yyval.node) = gen_val((yyvsp[-2].node), (yyvsp[0].node)); } -#line 3818 "src/gen_parser.c" +#line 3865 "src/gen_parser.c" break; - case 185: /* enum_list: enum_val "," enum_list */ -#line 557 "src/parser.y" + case 188: /* enum_list: enum_val "," enum_list */ +#line 566 "src/parser.y" { (yyval.node) = (yyvsp[-2].node); (yyvsp[-2].node)->next = (yyvsp[0].node); } -#line 3824 "src/gen_parser.c" +#line 3871 "src/gen_parser.c" break; - case 186: /* enum_list: enum_val "," */ -#line 558 "src/parser.y" + case 189: /* enum_list: enum_val "," */ +#line 567 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); } -#line 3830 "src/gen_parser.c" +#line 3877 "src/gen_parser.c" break; - case 187: /* enum_list: enum_val */ -#line 559 "src/parser.y" + case 190: /* enum_list: enum_val */ +#line 568 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3836 "src/gen_parser.c" +#line 3883 "src/gen_parser.c" break; - case 188: /* enum: "enum" id ":" type "{" enum_list "}" */ -#line 562 "src/parser.y" + case 191: /* enum: "enum" id ":" type "{" enum_list "}" */ +#line 571 "src/parser.y" { (yyval.node) = gen_enum((yyvsp[-5].node), (yyvsp[-3].node), (yyvsp[-1].node)); } -#line 3842 "src/gen_parser.c" +#line 3889 "src/gen_parser.c" break; - case 189: /* enum: "enum" id "{" enum_list "}" */ -#line 563 "src/parser.y" + case 192: /* enum: "enum" id "{" enum_list "}" */ +#line 572 "src/parser.y" { (yyval.node) = gen_enum((yyvsp[-3].node), NULL, (yyvsp[-1].node)); ast_set_flags((yyval.node), AST_FLAG_UNTYPED); } -#line 3851 "src/gen_parser.c" +#line 3898 "src/gen_parser.c" break; - case 190: /* top_if: "if" expr "{" unit "}" */ -#line 569 "src/parser.y" + case 193: /* top_if: "if" expr "{" unit "}" */ +#line 578 "src/parser.y" { (yyval.node) = gen_if((yyvsp[-3].node), (yyvsp[-1].node), NULL); ast_set_flags((yyval.node), AST_FLAG_UNHYGIENIC); } -#line 3860 "src/gen_parser.c" +#line 3907 "src/gen_parser.c" break; - case 191: /* top_if: "if" expr "{" unit "}" "else" "{" unit "}" */ -#line 573 "src/parser.y" + case 194: /* top_if: "if" expr "{" unit "}" "else" "{" unit "}" */ +#line 582 "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 3869 "src/gen_parser.c" +#line 3916 "src/gen_parser.c" break; - case 192: /* top_if: "if" expr "{" unit "}" "else" top_if */ -#line 577 "src/parser.y" + case 195: /* top_if: "if" expr "{" unit "}" "else" top_if */ +#line 586 "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 3878 "src/gen_parser.c" +#line 3925 "src/gen_parser.c" break; - case 193: /* top: ";" */ -#line 585 "src/parser.y" + case 196: /* top: ";" */ +#line 594 "src/parser.y" { (yyval.node) = gen_empty(); } -#line 3884 "src/gen_parser.c" +#line 3931 "src/gen_parser.c" break; - case 194: /* top: enum */ -#line 586 "src/parser.y" + case 197: /* top: enum */ +#line 595 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3890 "src/gen_parser.c" +#line 3937 "src/gen_parser.c" break; - case 195: /* top: proc */ -#line 587 "src/parser.y" + case 198: /* top: proc */ +#line 596 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3896 "src/gen_parser.c" +#line 3943 "src/gen_parser.c" break; - case 196: /* top: struct */ -#line 588 "src/parser.y" + case 199: /* top: struct */ +#line 597 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3902 "src/gen_parser.c" +#line 3949 "src/gen_parser.c" break; - case 197: /* top: macro */ -#line 589 "src/parser.y" + case 200: /* top: macro */ +#line 598 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3908 "src/gen_parser.c" +#line 3955 "src/gen_parser.c" break; - case 198: /* top: "const" top_if */ -#line 590 "src/parser.y" + case 201: /* top: "const" top_if */ +#line 599 "src/parser.y" { (yyval.node) = (yyvsp[0].node); ast_set_flags((yyval.node), AST_FLAG_CONST); } -#line 3914 "src/gen_parser.c" +#line 3961 "src/gen_parser.c" break; - case 199: /* top: import ";" */ -#line 591 "src/parser.y" + case 202: /* top: import ";" */ +#line 600 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); } -#line 3920 "src/gen_parser.c" +#line 3967 "src/gen_parser.c" break; - case 200: /* top: type_alias ";" */ -#line 592 "src/parser.y" + case 203: /* top: type_alias ";" */ +#line 601 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); } -#line 3926 "src/gen_parser.c" +#line 3973 "src/gen_parser.c" break; - case 201: /* top: type_template */ -#line 593 "src/parser.y" + case 204: /* top: type_template */ +#line 602 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3932 "src/gen_parser.c" +#line 3979 "src/gen_parser.c" break; - case 202: /* top: "pub" enum */ -#line 594 "src/parser.y" + case 205: /* top: "pub" enum */ +#line 603 "src/parser.y" { (yyval.node) = (yyvsp[0].node); ast_set_flags((yyvsp[0].node), AST_FLAG_PUBLIC); } -#line 3938 "src/gen_parser.c" +#line 3985 "src/gen_parser.c" break; - case 203: /* top: "pub" struct */ -#line 595 "src/parser.y" + case 206: /* top: "pub" struct */ +#line 604 "src/parser.y" { (yyval.node) = (yyvsp[0].node); ast_set_flags((yyvsp[0].node), AST_FLAG_PUBLIC); } -#line 3944 "src/gen_parser.c" +#line 3991 "src/gen_parser.c" break; - case 204: /* top: "pub" proc */ -#line 596 "src/parser.y" + case 207: /* top: "pub" proc */ +#line 605 "src/parser.y" { (yyval.node) = (yyvsp[0].node); ast_set_flags((yyvsp[0].node), AST_FLAG_PUBLIC); } -#line 3950 "src/gen_parser.c" +#line 3997 "src/gen_parser.c" break; - case 205: /* top: "pub" macro */ -#line 597 "src/parser.y" + case 208: /* top: "pub" macro */ +#line 606 "src/parser.y" { (yyval.node) = (yyvsp[0].node); ast_set_flags((yyvsp[0].node), AST_FLAG_PUBLIC); } -#line 3956 "src/gen_parser.c" +#line 4003 "src/gen_parser.c" break; - case 206: /* top: "pub" import ";" */ -#line 598 "src/parser.y" + case 209: /* top: "pub" import ";" */ +#line 607 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); ast_set_flags((yyvsp[-1].node), AST_FLAG_PUBLIC); } -#line 3962 "src/gen_parser.c" +#line 4009 "src/gen_parser.c" break; - case 207: /* top: "pub" type_alias ";" */ -#line 599 "src/parser.y" + case 210: /* top: "pub" type_alias ";" */ +#line 608 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); ast_set_flags((yyvsp[-1].node), AST_FLAG_PUBLIC); } -#line 3968 "src/gen_parser.c" +#line 4015 "src/gen_parser.c" break; - case 208: /* top: "pub" type_template */ -#line 600 "src/parser.y" + case 211: /* top: "pub" type_template */ +#line 609 "src/parser.y" { (yyval.node) = (yyvsp[0].node); ast_set_flags((yyvsp[0].node), AST_FLAG_PUBLIC); } -#line 3974 "src/gen_parser.c" +#line 4021 "src/gen_parser.c" break; - case 209: /* top: var ";" */ -#line 601 "src/parser.y" + case 212: /* top: var ";" */ +#line 610 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); } -#line 3980 "src/gen_parser.c" +#line 4027 "src/gen_parser.c" break; - case 210: /* top: "pub" var ";" */ -#line 602 "src/parser.y" + case 213: /* top: "pub" var ";" */ +#line 611 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); ast_set_flags((yyvsp[-1].node), AST_FLAG_PUBLIC); } -#line 3986 "src/gen_parser.c" +#line 4033 "src/gen_parser.c" break; - case 211: /* top: error */ -#line 603 "src/parser.y" + case 214: /* top: error */ +#line 612 "src/parser.y" { (yyval.node) = gen_empty(); parser->failed = true; @@ -4000,29 +4047,29 @@ yyreduce: yyclearin; yyerrok; } -#line 4004 "src/gen_parser.c" +#line 4051 "src/gen_parser.c" break; - case 212: /* unit: top */ -#line 618 "src/parser.y" + case 215: /* unit: top */ +#line 627 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 4010 "src/gen_parser.c" +#line 4057 "src/gen_parser.c" break; - case 213: /* unit: top unit */ -#line 619 "src/parser.y" + case 216: /* unit: top unit */ +#line 628 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); (yyvsp[-1].node)->next = (yyvsp[0].node); } -#line 4016 "src/gen_parser.c" +#line 4063 "src/gen_parser.c" break; - case 214: /* input: unit */ -#line 622 "src/parser.y" + case 217: /* input: unit */ +#line 631 "src/parser.y" { parser->tree = (yyvsp[0].node); } -#line 4022 "src/gen_parser.c" +#line 4069 "src/gen_parser.c" break; -#line 4026 "src/gen_parser.c" +#line 4073 "src/gen_parser.c" default: break; } @@ -4251,5 +4298,5 @@ yyreturnlab: return yyresult; } -#line 625 "src/parser.y" +#line 634 "src/parser.y" diff --git a/src/lexer.l b/src/lexer.l index dd08ba1..e7dad6a 100644 --- a/src/lexer.l +++ b/src/lexer.l @@ -152,7 +152,7 @@ STRING \"(\\.|[^"\\])*\" "defer" {return DEFER;} "union" {return UNION;} "struct" {return STRUCT;} -"type" {return TYPEDEF;} +"typedef" {return TYPEDEF;} "import" {return IMPORT;} "typeof" {return TYPEOF;} "sizeof" {return SIZEOF;} diff --git a/src/parser.y b/src/parser.y index 1b477d6..cddfb2a 100644 --- a/src/parser.y +++ b/src/parser.y @@ -138,6 +138,7 @@ %nterm <node> embed param_decl union union_list union_elem struct struct_list %nterm <node> top_if const_if const_for defer goto assign %nterm <node> struct_construct struct_inits struct_init cond +%nterm <node> generic generic_list %destructor {} FLOAT INT STRING ID %destructor { destroy_ast_tree($$); } <*> @@ -341,7 +342,10 @@ expr_list: expr "," expr_list { $$ = $1; $1->next = $3; } ; struct_init: init_expr { $$ = $1; } - | "." id "=" init_expr { $$ = gen_var($2, NULL, $4); } + | "." id "=" init_expr { + $$ = gen_var($2, NULL, $4); + ast_set_flags($$, AST_FLAG_MEMBER); + } ; struct_inits: struct_init "," struct_inits { $$ = $1; $1->next = $3; } @@ -512,10 +516,15 @@ union: "union" id "{" union_list "}" { struct_list: union_list { $$ = $1; } ; +generic: id type { $$ = gen_alias($1, $2); } +generic_list: generic "," generic_list { $$ = $1; $$->next = $3; } + | generic { $$ = $1; } + ; + struct: "struct" id "{" struct_list "}" { $$ = gen_struct($2, NULL, $4); } - | "struct" id "(" arg_list ")" "{" struct_list "}" { + | "struct" id "(" generic_list ")" "{" struct_list "}" { $$ = gen_struct($2, $4, $7); } ; diff --git a/src/scope.c b/src/scope.c index 2091fc4..7346b40 100644 --- a/src/scope.c +++ b/src/scope.c @@ -419,9 +419,6 @@ static struct ast_node *match_macro(int global, struct scope *scope, return NULL; } -static int implements(struct scope *scope, - struct ast_node *arg_type, struct ast_node *param_type); - static struct ast_node *match_proc(int global, struct scope *scope, struct ast_node *id, struct ast_node *args); @@ -537,7 +534,7 @@ not_implemented: return 0; } -static int implements(struct scope *scope, +int implements(struct scope *scope, struct ast_node *arg_type, struct ast_node *param_type) { /* if both types are null, they are uninitialized and we'll assume they @@ -556,6 +553,16 @@ static int implements(struct scope *scope, /* at this point, we should always have some type for the argument */ assert(arg_type); + if (param_type->_type.kind == AST_TYPE_ALIAS) { + if (implements(scope, arg_type, param_type->_type.alias.actual)) + return 0; + } + + if (arg_type->_type.kind == AST_TYPE_ALIAS) { + if (implements(scope, arg_type->_type.alias.actual, param_type)) + return 0; + } + /* TODO: do aliases and templates have to be converted to types? Are * there any situations where a template will have to be followed by * some other type? */ |
