diff options
| author | Ginger Bill <bill@gingerbill.org> | 2016-09-09 19:48:28 +0100 |
|---|---|---|
| committer | Ginger Bill <bill@gingerbill.org> | 2016-09-09 19:48:28 +0100 |
| commit | 1ca752ce049b934df5d03af2f06265e219f5f402 (patch) | |
| tree | fddb26b40309a433bf7b04834be692c8e7758b03 /src/parser.cpp | |
| parent | 56dd12c54c20b2e4a7f896999ece1cf184f09e88 (diff) | |
Remove duplicates in type info data.
Diffstat (limited to 'src/parser.cpp')
| -rw-r--r-- | src/parser.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/parser.cpp b/src/parser.cpp index 24810259d..17c15c890 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -2261,10 +2261,17 @@ AstNode *parse_match_stmt(AstFile *f) { AstNode *body = NULL; Token open, close; + + if (allow_token(f, Token_type)) { - tag = parse_expr(f, true); - expect_token(f, Token_ArrowRight); + isize prev_level = f->expr_level; + f->expr_level = -1; + AstNode *var = parse_identifier(f); + expect_token(f, Token_Colon); + tag = parse_simple_stmt(f); + + f->expr_level = prev_level; open = expect_token(f, Token_OpenBrace); AstNodeArray list = make_ast_node_array(f); @@ -2277,6 +2284,7 @@ AstNode *parse_match_stmt(AstFile *f) { close = expect_token(f, Token_CloseBrace); body = make_block_stmt(f, list, open, close); + tag = convert_stmt_to_expr(f, tag, make_string("type match expression")); return make_type_match_stmt(f, token, tag, var, body); } else { if (f->cursor[0].kind != Token_OpenBrace) { |