mirror of
https://github.com/odin-lang/Odin.git
synced 2026-02-17 16:38:22 +00:00
Add bit_set type
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user