fix(ast): 修复AST转储中逗号分隔符逻辑错误
在dump_decl_impl函数中,修正了列表元素间逗号分隔符的判断逻辑, 将条件从"不是最后一个元素"改为"是最后一个元素",确保正确的 分隔符输出。 BREAKING CHANGE: 逗号分隔符的逻辑被反转,影响AST转储输出格式。 --- fix(parser): 修复声明列表处理中的内存泄漏问题 调整了typedef声明的处理顺序,在解析完成前添加声明到列表, 避免了重复添加导致的内存泄漏。同时移除了不必要的错误检查。 --- refactor(parser): 重构记录类型和枚举类型的声明初始化逻辑 移除了重复的声明创建代码,统一了结构体、联合体和枚举类型的 声明初始化流程,消除了之前存在的Panic错误路径。 --- test(parser): 增加复杂声明的单元测试覆盖 添加了对结构体指针声明和typedef复合声明的测试用例, 提高了测试覆盖率并验证了解析器的正确性。 --- feat(preprocessor): 添加预定义宏支持 增加了__SCC__、_WIN64和__x86_64__等预定义宏的定义, 为不同平台提供更好的编译支持。
This commit is contained in:
@@ -608,7 +608,6 @@ static void dump_decl_impl(scc_ast_decl_t *decl, scc_tree_dump_ctx_t *ctx) {
|
||||
if (decl->name) {
|
||||
PRINT_QUOTED_VALUE(ctx, decl->name);
|
||||
}
|
||||
|
||||
end_node_dump(ctx);
|
||||
|
||||
// 递归转储子节点
|
||||
@@ -616,7 +615,7 @@ static void dump_decl_impl(scc_ast_decl_t *decl, scc_tree_dump_ctx_t *ctx) {
|
||||
case SCC_AST_DECL_LIST:
|
||||
scc_vec_foreach(decl->list.vars, i) {
|
||||
dump_child_node((scc_ast_node_t *)scc_vec_at(decl->list.vars, i),
|
||||
ctx, i + 1 != scc_vec_size(decl->list.vars));
|
||||
ctx, i + 1 == scc_vec_size(decl->list.vars));
|
||||
}
|
||||
break;
|
||||
case SCC_AST_DECL_VAR:
|
||||
@@ -650,7 +649,7 @@ static void dump_decl_impl(scc_ast_decl_t *decl, scc_tree_dump_ctx_t *ctx) {
|
||||
scc_vec_foreach(decl->record.fields, i) {
|
||||
dump_child_node(
|
||||
(scc_ast_node_t *)scc_vec_at(decl->record.fields, i), ctx,
|
||||
i + 1 != scc_vec_size(decl->record.fields));
|
||||
i + 1 == scc_vec_size(decl->record.fields));
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -658,7 +657,7 @@ static void dump_decl_impl(scc_ast_decl_t *decl, scc_tree_dump_ctx_t *ctx) {
|
||||
scc_vec_foreach(decl->enumeration.enumerators, i) {
|
||||
dump_child_node(
|
||||
(scc_ast_node_t *)scc_vec_at(decl->enumeration.enumerators, i),
|
||||
ctx, i + 1 != scc_vec_size(decl->enumeration.enumerators));
|
||||
ctx, i + 1 == scc_vec_size(decl->enumeration.enumerators));
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -684,7 +683,7 @@ static void dump_unit_impl(scc_ast_translation_unit_t *unit,
|
||||
end_node_dump(ctx);
|
||||
scc_vec_foreach(unit->declarations, i) {
|
||||
dump_child_node((scc_ast_node_t *)scc_vec_at(unit->declarations, i),
|
||||
ctx, i + 1 != scc_vec_size(unit->declarations));
|
||||
ctx, i + 1 == scc_vec_size(unit->declarations));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user