feat: 类型别名 type alias (P1 #10)
- lexer: TOK_TYPE 关键字 - ast: AST_TYPE_ALIAS + AST_PROGRAM aliases数组 - parser: parse_type_expr() 抽取, type Name = Type; 解析 - sema: 别名注册+解析, 类型标注/struct字段/函数参数均支持 - 新增测试: 15_type_alias.l, 16_type_alias_struct.l 测试: 112 通过 (41+15+41+15)
This commit is contained in:
+13
-1
@@ -9,12 +9,15 @@
|
||||
n->loc = loc
|
||||
|
||||
AstNode* ast_make_program(void* alloc, AstNode** fns, size_t fn_count,
|
||||
AstNode** structs, size_t struct_count, SourceLoc loc) {
|
||||
AstNode** structs, size_t struct_count,
|
||||
AstNode** aliases, size_t alias_count, SourceLoc loc) {
|
||||
NEW(alloc, AST_PROGRAM);
|
||||
n->as.program.functions = fns;
|
||||
n->as.program.fn_count = fn_count;
|
||||
n->as.program.structs = structs;
|
||||
n->as.program.struct_count = struct_count;
|
||||
n->as.program.type_aliases = aliases;
|
||||
n->as.program.alias_count = alias_count;
|
||||
return n;
|
||||
}
|
||||
|
||||
@@ -165,3 +168,12 @@ AstNode* ast_make_field_access(void* alloc, AstNode* object, const char* field,
|
||||
n->as.field_access.field_index = -1;
|
||||
return n;
|
||||
}
|
||||
|
||||
AstNode* ast_make_type_alias(void* alloc, const char* name, TypeKind aliased,
|
||||
const char* aliased_struct, SourceLoc loc) {
|
||||
NEW(alloc, AST_TYPE_ALIAS);
|
||||
n->as.type_alias.name = name;
|
||||
n->as.type_alias.aliased_type = aliased;
|
||||
n->as.type_alias.aliased_struct_name = aliased_struct;
|
||||
return n;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user