refactor(ast): 调整AST结构体和枚举类型的声明表示方式
将结构体、联合和枚举类型的字段表示从向量改为声明指针, 允许name和decl字段为null,更新相关初始化函数的断言检查, 使结构更加灵活并支持不完整类型定义。 BREAKING CHANGE: 修改了scc_ast_type结构体中record和enumeration 子类型的字段表示方法,从fields向量改为decl指针。
This commit is contained in:
@@ -8,6 +8,13 @@ static void dummy_sema_callback(void *context, scc_ast_node_type_t node_type,
|
||||
return;
|
||||
}
|
||||
|
||||
static scc_ast_type_t *dummy_got_type_callback(void *context,
|
||||
const char *name) {
|
||||
(void)context;
|
||||
(void)name;
|
||||
return null;
|
||||
}
|
||||
|
||||
#define ASSIGN_PTR_OR_DEFAULT(assigned_val, value, default) \
|
||||
assigned_val = value ? value : default
|
||||
|
||||
@@ -26,12 +33,15 @@ void scc_parser_init(scc_parser_t *parser, scc_lexer_tok_ring_t *tok_ring,
|
||||
callbacks->on_expr, dummy_sema_callback);
|
||||
ASSIGN_PTR_OR_DEFAULT(parser->sema_callbacks.on_type,
|
||||
callbacks->on_type, dummy_sema_callback);
|
||||
ASSIGN_PTR_OR_DEFAULT(parser->sema_callbacks.got_type,
|
||||
callbacks->got_type, dummy_got_type_callback);
|
||||
parser->sema_callbacks.context = callbacks->context;
|
||||
} else {
|
||||
parser->sema_callbacks.on_decl = dummy_sema_callback;
|
||||
parser->sema_callbacks.on_stmt = dummy_sema_callback;
|
||||
parser->sema_callbacks.on_expr = dummy_sema_callback;
|
||||
parser->sema_callbacks.on_type = dummy_sema_callback;
|
||||
parser->sema_callbacks.got_type = dummy_got_type_callback;
|
||||
parser->sema_callbacks.context = null;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user