feat: 枚举关联数据 ADT — enum Option { Some(i64), None }

This commit is contained in:
2026-06-06 14:21:43 +08:00
parent 0ec3c3d65f
commit 0e1f8c5795
9 changed files with 172 additions and 37 deletions
+6 -2
View File
@@ -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;
}