feat(ir): 添加线性IR转储功能并改进AST转储
- 实现了IR的线性转储功能,包括类型、节点、基本块和函数的线性表示 - 添加了scc_ir_dump_ctx_init函数用于初始化转储上下文 - 为AST函数类型添加了变参标记注释说明 - 改进了AST转储中函数类型的参数和返回值显示逻辑 - 统一了AST解析中节点类型的声明为通用的scc_ast_node_t指针类型 fix(lexer): 改进词法分析器错误信息显示 - 在不支持字符的错误信息中添加十六进制编码显示 - 便于调试时识别特殊不可打印字符
This commit is contained in:
@@ -315,6 +315,19 @@ static void dump_type_impl(scc_ast_type_t *type, scc_tree_dump_ctx_t *ctx) {
|
||||
break;
|
||||
case SCC_AST_TYPE_FUNCTION:
|
||||
PRINT_QUOTED_VALUE(ctx, "function");
|
||||
scc_printf("\n");
|
||||
if (type->function.return_type) {
|
||||
dump_type_impl(type->function.return_type, ctx);
|
||||
}
|
||||
if (scc_vec_size(type->function.param_types) != 0) {
|
||||
scc_vec_foreach(type->function.param_types, i) {
|
||||
dump_type_impl(scc_vec_at(type->function.param_types, i), ctx);
|
||||
}
|
||||
} else {
|
||||
start_node_dump(&type->base, ctx);
|
||||
PRINT_QUOTED_VALUE(ctx, "void");
|
||||
// TODO?
|
||||
}
|
||||
break;
|
||||
case SCC_AST_TYPE_STRUCT:
|
||||
if (type->record.name) {
|
||||
|
||||
Reference in New Issue
Block a user