Decl *parse_decl_enum(SrcPos pos) { char *name = null; if (is_token(TOKEN_NAME)) { name = parse_name(); } Typespec *type = null; if (match_token(TOKEN_ASSIGN)) { type = parse_type(); } expect_token(TOKEN_LBRACE); EnumItem *items = null; var buf = Buffer <EnumItem> .Create(16); while (!is_token(TOKEN_RBRACE)) { buf.Add(parse_decl_enum_item()); if (!match_token(TOKEN_COMMA)) { break; } } expect_token(TOKEN_RBRACE); return(new_decl_enum(pos, name, type, buf._begin, buf.count)); }
Decl *new_decl_enum(SrcPos pos, char *name, Typespec *type, EnumItem *items, int num_items) { var d = new_decl(DECL_ENUM, pos, name); d->enum_decl.items = items; d->enum_decl.type = type; d->enum_decl.num_items = num_items; return(d); }