mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 20:11:17 +00:00
Work on unions and anonymous structs/unions.
This commit is contained in:
@@ -989,11 +989,11 @@ bool parse_struct_body(Context *context, Decl *parent, Decl *visible_parent)
|
||||
Decl *member;
|
||||
if (context->next_tok.type != TOKEN_IDENT)
|
||||
{
|
||||
Token name_replacement = context->tok;
|
||||
name_replacement.string = NULL;
|
||||
member = decl_new_with_type(name_replacement, decl_kind, parent->visibility);
|
||||
advance(context);
|
||||
}
|
||||
Token name_replacement = context->tok;
|
||||
name_replacement.string = NULL;
|
||||
member = decl_new_with_type(name_replacement, decl_kind, parent->visibility);
|
||||
advance(context);
|
||||
}
|
||||
else
|
||||
{
|
||||
advance(context);
|
||||
@@ -1010,6 +1010,8 @@ bool parse_struct_body(Context *context, Decl *parent, Decl *visible_parent)
|
||||
advance_and_verify(context, TOKEN_IDENT);
|
||||
}
|
||||
if (!parse_attributes(context, member)) return false;
|
||||
member->parent_struct = parent;
|
||||
member->strukt.id = vec_size(parent->strukt.members);
|
||||
parent->strukt.members = VECADD(parent->strukt.members, member);
|
||||
if (!parse_struct_body(context, member, context->tok.type == TOKEN_IDENT ? member : visible_parent))
|
||||
{
|
||||
@@ -1036,6 +1038,7 @@ bool parse_struct_body(Context *context, Decl *parent, Decl *visible_parent)
|
||||
unsigned index = vec_size(parent->strukt.members);
|
||||
parent->strukt.members = VECADD(parent->strukt.members, member);
|
||||
member->var.id = index;
|
||||
member->var.parent = parent;
|
||||
advance(context);
|
||||
if (context->tok.type != TOKEN_COMMA) break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user