feat(ast2ir): 添加指针运算支持并修复整数字面量解析

- 实现了指针解引用(*)和取地址(&)操作符的IR转换
- 添加parse_lexme2const_int函数统一处理整数字面量解析
- 支持数组大小表达式的常量解析
- 修复函数缺少返回语句的问题,在函数末尾添加默认ret指令

refactor(ir_builder): 调整函数参数类型处理逻辑

- 修改函数参数以指针形式传递,更新参数类型处理方式
- 优化参数节点创建过程,将参数类型包装为指针类型

fix(ir_dump): 修正IR输出格式问题

- 调整基本块和函数的输出格式,确保正确的换行和缩进
- 统一输出格式,提升可读性

feat(ir2mcode): 添加帧管理器头文件定义

- 定义frame_manager.h接口,包含栈帧分配相关函数声明
- 提供栈槽分配、寄存器保存、偏移计算等功能接口

refactor(reg_alloc): 添加初始栈大小配置

- 在寄存器分配器中增加init_stack_size字段
- 支持初始化栈大小设置,为后续帧管理功能做准备

test: 添加指针操作测试用例

- 新增14_pointer.c测试文件,验证指针取地址和解引用功能
- 在expect.toml中添加对应的期望返回值
This commit is contained in:
zzy
2026-04-04 13:22:19 +08:00
parent ca187c78f1
commit 27d86d5685
11 changed files with 109 additions and 41 deletions

12
tests/simple/14_pointer.c Normal file
View File

@@ -0,0 +1,12 @@
void exchange(int *a, int *b) {
int tmp = *a;
*a = *b;
*b = tmp;
}
int main(void) {
int a = 1, b = 3;
exchange(&a, &b);
return a - b;
}

View File

@@ -1,5 +1,7 @@
[return_val_cases]
# windows: echo $LASTEXITCODE
# windows powershell: echo $LASTEXITCODE
# nushell: echo $env.LAST_EXIT_CODE
# bash: echo $?
"./01_return.c" = 65536
"./02_decl_expr.c" = 1
"./03_decl_init.c" = 11
@@ -13,4 +15,5 @@
"./11_recursive.c" = 120
"./12_logic.c" = 10
"./13_array.c" = 1198
"./14_pointer.c" = 2
[stdout_val_cases]