feat: 枚举关联数据 ADT — enum Option { Some(i64), None }
This commit is contained in:
+6
-2
@@ -200,19 +200,23 @@ AstNode* ast_make_type_alias(void* alloc, const char* name, TypeKind aliased,
|
||||
// === 枚举相关工厂函数 ===
|
||||
|
||||
AstNode* ast_make_enum_decl(void* alloc, const char* name, const char** variants,
|
||||
size_t count, SourceLoc loc) {
|
||||
TypeKind* payload_types, const char** payload_struct_names,
|
||||
size_t count, SourceLoc loc) {
|
||||
NEW(alloc, AST_ENUM_DECL);
|
||||
n->as.enum_decl.name = name;
|
||||
n->as.enum_decl.variants = variants;
|
||||
n->as.enum_decl.variant_payload_types = payload_types;
|
||||
n->as.enum_decl.variant_payload_struct_names = payload_struct_names;
|
||||
n->as.enum_decl.variant_count = count;
|
||||
return n;
|
||||
}
|
||||
|
||||
AstNode* ast_make_enum_variant(void* alloc, const char* enum_name,
|
||||
const char* variant_name, SourceLoc loc) {
|
||||
const char* variant_name, AstNode* payload, SourceLoc loc) {
|
||||
NEW(alloc, AST_ENUM_VARIANT);
|
||||
n->as.enum_variant.enum_name = enum_name;
|
||||
n->as.enum_variant.variant_name = variant_name;
|
||||
n->as.enum_variant.payload = payload;
|
||||
n->as.enum_variant.variant_index = -1;
|
||||
return n;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user