feat(ir2mcode): 添加IR到机器码转换功能并修复函数命名

添加了完整的scc_ir2mcode实现,将MIR指令转换为机器码,
同时修复了头文件中的函数命名错误(scc_mir2sccf改为scc_ir2sccf)。

BREAKING CHANGE: 函数名从scc_mir2sccf更改为scc_ir2sccf

fix(vec): 修复向量循环和内存释放问题

修改了scc_vec_foreach宏使用+= 1避免潜在的编译器警告,
并添加了空指针检查以防止重复释放内存导致的崩溃。

refactor(hashtable): 优化哈希表接口设计

将scc_hashtable_get参数改为const类型,提供更好的只读访问安全性。

test: 添加break/continue和goto语句测试用例

新增18_break_continue.c和19_goto.c测试用例,
并对齐expect.toml文件格式以便于维护。
This commit is contained in:
zzy
2026-05-03 21:34:40 +08:00
parent b06c4fe3cc
commit 676f3ec82c
9 changed files with 90 additions and 21 deletions

View File

@@ -2,22 +2,24 @@
# windows powershell: echo $LASTEXITCODE
# nushell: echo $env.LAST_EXIT_CODE
# bash: echo $?
"./return_val_cases/01_return.c" = 65536
"./return_val_cases/02_decl_expr.c" = 1
"./return_val_cases/03_decl_init.c" = 11
"./return_val_cases/04_if.c" = 1
"./return_val_cases/05_else.c" = 2
"./return_val_cases/06_fcall.c" = 3
"./return_val_cases/07_while.c" = 10
"./return_val_cases/08_do_while.c" = 128
"./return_val_cases/09_for.c" = 10
"./return_val_cases/10_main.c" = 3
"./return_val_cases/11_recursive.c" = 120
"./return_val_cases/12_logic.c" = 10
"./return_val_cases/13_array.c" = 1198
"./return_val_cases/14_pointer.c" = 2
"./return_val_cases/01_return.c" = 65536
"./return_val_cases/02_decl_expr.c" = 1
"./return_val_cases/03_decl_init.c" = 11
"./return_val_cases/04_if.c" = 1
"./return_val_cases/05_else.c" = 2
"./return_val_cases/06_fcall.c" = 3
"./return_val_cases/07_while.c" = 10
"./return_val_cases/08_do_while.c" = 128
"./return_val_cases/09_for.c" = 10
"./return_val_cases/10_main.c" = 3
"./return_val_cases/11_recursive.c" = 120
"./return_val_cases/12_logic.c" = 10
"./return_val_cases/13_array.c" = 1198
"./return_val_cases/14_pointer.c" = 2
"./return_val_cases/15_array_subscript.c" = 1198
"./return_val_cases/16_enum.c" = 5
"./return_val_cases/17_more_arg.c" = 45
"./return_val_cases/16_enum.c" = 5
"./return_val_cases/17_more_arg.c" = 45
"./return_val_cases/18_break_continue.c" = 676
"./return_val_cases/19_goto.c" = 676
[stdout_val_cases]
"./stdout_val_cases/01_include.c" = "Hello World!\n"

View File

@@ -0,0 +1,13 @@
int main(void) {
char buff[] = "hello buffer";
int res = 0;
for (int i = 0; buff[i] != 0; i += 1) {
if (i < 2)
continue;
if (i > 8)
break;
res += buff[i];
}
return res;
}

View File

@@ -0,0 +1,14 @@
int main(void) {
char buff[] = "hello buffer";
int res = 0;
for (int i = 0; buff[i] != 0; i += 1) {
if (i < 2)
goto the_continue;
if (i > 8)
goto the_break;
res += buff[i];
the_continue:;
}
the_break:
return res;
}