Syntactic sugar for anonymous enum within a bit set

This commit is contained in:
gingerBill
2018-09-11 12:10:32 +01:00
parent b468cf141b
commit f1e1814ff9
4 changed files with 47 additions and 16 deletions

View File

@@ -2038,22 +2038,32 @@ Ast *parse_operand(AstFile *f, bool lhs) {
case Token_bit_set: {
Token token = expect_token(f, Token_bit_set);
Token open = expect_token(f, Token_OpenBracket);
Ast *elem = nullptr;
Ast *underlying = nullptr;
if (f->curr_token.kind == Token_OpenBrace) {
Token open = expect_token(f, Token_OpenBrace);
bool prev_allow_range = f->allow_range;
f->allow_range = true;
elem = parse_expr(f, false);
f->allow_range = prev_allow_range;
if (allow_token(f, Token_Semicolon)) {
underlying = parse_type(f);
Array<Ast *> values = parse_element_list(f);
Token close = expect_token(f, Token_CloseBrace);
Ast *enum_type = ast_enum_type(f, token, nullptr, values);
return ast_bit_set_type(f, token, enum_type, nullptr);
} else {
expect_token(f, Token_OpenBracket);
Ast *elem = nullptr;
Ast *underlying = nullptr;
bool prev_allow_range = f->allow_range;
f->allow_range = true;
elem = parse_expr(f, false);
f->allow_range = prev_allow_range;
if (allow_token(f, Token_Semicolon)) {
underlying = parse_type(f);
}
expect_token(f, Token_CloseBracket);
return ast_bit_set_type(f, token, elem, underlying);
}
Token close = expect_token(f, Token_CloseBracket);
return ast_bit_set_type(f, token, elem, underlying);
}
default: {