feat: 枚举关联数据 ADT — enum Option { Some(i64), None }
This commit is contained in:
+12
-4
@@ -104,9 +104,14 @@ struct AstNode {
|
||||
// AST_TYPE_ALIAS
|
||||
struct { const char* name; TypeKind aliased_type; const char* aliased_struct_name; } type_alias;
|
||||
// AST_ENUM_DECL
|
||||
struct { const char* name; const char** variants; size_t variant_count; } enum_decl;
|
||||
struct { const char* name; const char** variants;
|
||||
TypeKind* variant_payload_types; // 每个变体的 payload 类型(TYPE_VOID=无)
|
||||
const char** variant_payload_struct_names; // payload 为 struct 时的类型名
|
||||
size_t variant_count; } enum_decl;
|
||||
// AST_ENUM_VARIANT
|
||||
struct { const char* enum_name; const char* variant_name; int variant_index; } enum_variant;
|
||||
struct { const char* enum_name; const char* variant_name;
|
||||
AstNode* payload; // payload 表达式 (NULL=无 payload)
|
||||
int variant_index; } enum_variant;
|
||||
// AST_INDEX_EXPR
|
||||
struct { struct AstNode* array; struct AstNode* index; } index_expr;
|
||||
// AST_ARRAY_ASSIGN_STMT
|
||||
@@ -150,8 +155,11 @@ AstNode* ast_make_struct_init(void* alloc, const char* type_name, const char** f
|
||||
AstNode* ast_make_field_access(void* alloc, AstNode* object, const char* field, SourceLoc loc);
|
||||
AstNode* ast_make_type_alias(void* alloc, const char* name, TypeKind aliased,
|
||||
const char* aliased_struct, SourceLoc loc);
|
||||
AstNode* ast_make_enum_decl(void* alloc, const char* name, const char** variants, size_t count, SourceLoc loc);
|
||||
AstNode* ast_make_enum_variant(void* alloc, const char* enum_name, const char* variant_name, SourceLoc loc);
|
||||
AstNode* ast_make_enum_decl(void* alloc, const char* name, const char** variants,
|
||||
TypeKind* payload_types, const char** payload_struct_names,
|
||||
size_t count, SourceLoc loc);
|
||||
AstNode* ast_make_enum_variant(void* alloc, const char* enum_name, const char* variant_name,
|
||||
AstNode* payload, SourceLoc loc);
|
||||
AstNode* ast_make_index_expr(void* alloc, AstNode* array, AstNode* index, SourceLoc loc);
|
||||
AstNode* ast_make_array_assign(void* alloc, const char* name, AstNode* index, AstNode* value, SourceLoc loc);
|
||||
AstNode* ast_make_impl_block(void* alloc, const char* struct_name, AstNode** methods, size_t count, SourceLoc loc);
|
||||
|
||||
Reference in New Issue
Block a user