diff options
| author | Ginger Bill <bill@gingerbill.org> | 2016-08-31 00:52:19 +0100 |
|---|---|---|
| committer | Ginger Bill <bill@gingerbill.org> | 2016-08-31 00:52:19 +0100 |
| commit | 5399463d9d9f94a20fb6b80814318e2b154b199a (patch) | |
| tree | c8508a4544f7292f00d4547fb5875aaa00e5307f /src/parser.cpp | |
| parent | cda0234d487ab73a1c87cbdcd74e300718ca7d0a (diff) | |
`down_cast`
Diffstat (limited to 'src/parser.cpp')
| -rw-r--r-- | src/parser.cpp | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/src/parser.cpp b/src/parser.cpp index f8ae53dad..2deac0b2d 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -1452,24 +1452,28 @@ AstNode *parse_binary_expr(AstFile *f, b32 lhs, i32 prec_in) { lhs = false; } - - if (op.kind == Token_DoublePrime) { + switch (op.kind) { + case Token_DoublePrime: { AstNode *proc = parse_identifier(f); AstNode *right = parse_binary_expr(f, false, prec+1); expression->next = right; expression = make_call_expr(f, proc, expression, 2, op, ast_node_token(right)); continue; - } + } break; - if (op.kind == Token_as || op.kind == Token_transmute) { + case Token_as: + case Token_transmute: + case Token_down_cast: right = parse_type(f); - } else { + break; + + default: right = parse_binary_expr(f, false, prec+1); if (!right) { ast_file_err(f, op, "Expected expression on the right hand side of the binary operator"); } + break; } - expression = make_binary_expr(f, op, expression, right); } } |