diff options
| author | gingerBill <bill@gingerbill.org> | 2018-08-14 17:07:56 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2018-08-14 17:07:56 +0100 |
| commit | acc010cba5df63b38704245254e721187335a7b2 (patch) | |
| tree | 2b92d291e6c3804f6e5cc177c5ed0443798d1f8d /src/parser.cpp | |
| parent | 89f4e7a8dbed4272f85f10568a542697aa3b38f8 (diff) | |
Add `bit_set` type
Diffstat (limited to 'src/parser.cpp')
| -rw-r--r-- | src/parser.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/parser.cpp b/src/parser.cpp index 30c1797b5..d264a2619 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -89,6 +89,7 @@ Token ast_token(Ast *node) { case Ast_UnionType: return node->UnionType.token; case Ast_EnumType: return node->EnumType.token; case Ast_BitFieldType: return node->BitFieldType.token; + case Ast_BitSetType: return node->BitSetType.token; case Ast_MapType: return node->MapType.token; } @@ -344,6 +345,10 @@ Ast *clone_ast(Ast *node) { case Ast_BitFieldType: n->BitFieldType.fields = clone_ast_array(n->BitFieldType.fields); n->BitFieldType.align = clone_ast(n->BitFieldType.align); + break; + case Ast_BitSetType: + n->BitSetType.base_type = clone_ast(n->BitSetType.base_type); + break; case Ast_MapType: n->MapType.count = clone_ast(n->MapType.count); n->MapType.key = clone_ast(n->MapType.key); @@ -922,6 +927,13 @@ Ast *ast_bit_field_type(AstFile *f, Token token, Array<Ast *> fields, Ast *align return result; } +Ast *ast_bit_set_type(AstFile *f, Token token, Ast *base_type) { + Ast *result = alloc_ast_node(f, Ast_BitSetType); + result->BitSetType.token = token; + result->BitSetType.base_type = base_type; + return result; +} + Ast *ast_map_type(AstFile *f, Token token, Ast *key, Ast *value) { Ast *result = alloc_ast_node(f, Ast_MapType); result->MapType.token = token; @@ -1962,6 +1974,15 @@ Ast *parse_operand(AstFile *f, bool lhs) { return ast_bit_field_type(f, token, fields, align); } break; + case Token_bit_set: { + Token token = expect_token(f, Token_bit_set); + Token open = expect_token(f, Token_OpenBracket); + Ast *base_type = parse_type(f); + Token close = expect_token(f, Token_CloseBracket); + + return ast_bit_set_type(f, token, base_type); + } + default: { #if 0 Ast *type = parse_type_or_ident(f); |