feat(ir): 添加线性IR转储功能并改进AST转储

- 实现了IR的线性转储功能,包括类型、节点、基本块和函数的线性表示
- 添加了scc_ir_dump_ctx_init函数用于初始化转储上下文
- 为AST函数类型添加了变参标记注释说明
- 改进了AST转储中函数类型的参数和返回值显示逻辑
- 统一了AST解析中节点类型的声明为通用的scc_ast_node_t指针类型

fix(lexer): 改进词法分析器错误信息显示

- 在不支持字符的错误信息中添加十六进制编码显示
- 便于调试时识别特殊不可打印字符
This commit is contained in:
zzy
2026-02-13 09:56:42 +08:00
parent 191cdcef53
commit ffee07a03d
6 changed files with 353 additions and 32 deletions

View File

@@ -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) {