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:
24
src/main.c
24
src/main.c
@@ -264,9 +264,27 @@ int main(int argc, const char **argv, const char **envp) {
|
||||
}
|
||||
scc_lexer_tok_vec_t pproc_tok_vec;
|
||||
scc_vec_init(pproc_tok_vec);
|
||||
scc_cstring_t pproc_macro_name = scc_cstring_from_cstr("__SCC__");
|
||||
scc_pproc_add_object_macro(&(pproc.macro_table), &pproc_macro_name,
|
||||
&pproc_tok_vec);
|
||||
scc_lexer_tok_t tok = {
|
||||
.lexeme = scc_cstring_from_cstr("1"),
|
||||
.type = SCC_TOK_INT_LITERAL,
|
||||
.loc.name = "<internal>",
|
||||
.loc.line = 0,
|
||||
.loc.col = 0,
|
||||
.loc.offset = 0,
|
||||
};
|
||||
scc_vec_push(pproc_tok_vec, tok);
|
||||
scc_cstring_t pproc_predefined_macros[] = {
|
||||
scc_cstring_from_cstr("__SCC__"),
|
||||
scc_cstring_from_cstr("_WIN64"),
|
||||
scc_cstring_from_cstr("__x86_64__"),
|
||||
};
|
||||
for (usize i = 0; i < SCC_ARRLEN(pproc_predefined_macros); i += 1) {
|
||||
scc_vec_init(pproc_tok_vec);
|
||||
scc_lexer_tok_t coped_tok = scc_lexer_tok_copy(&tok);
|
||||
scc_vec_push(pproc_tok_vec, coped_tok);
|
||||
scc_pproc_add_object_macro(&pproc.macro_table,
|
||||
&pproc_predefined_macros[i], &pproc_tok_vec);
|
||||
}
|
||||
if (config.emit_pp) {
|
||||
scc_lexer_tok_ring_t *tok_ring =
|
||||
scc_pproc_to_ring(&pproc, 8, true, true);
|
||||
|
||||
Reference in New Issue
Block a user