|
|
d78b91894e
|
refactor(ast2ir): 提取模块访问函数并优化类型大小计算
- 添加 scc_ast2ir_mir_module 内联函数统一访问模块
- 替换所有直接访问 ctx->builder.cprog->module 的地方
- 移除重复的 scc_hir_type_size 函数实现
- 添加 scc_hir_module_type_size 函数到模块接口
- 更新所有类型大小计算调用使用新函数
feat(hir): 增强构建器安全性和全局变量处理
- 为 scc_hir_builder_integer 添加空指针检查断言
- 修复 scc_hir_builder_global_alloca 中全局变量类型设置
- 改进 scc_hir_builder_get_elem_ptr 处理空指针索引情况
- 重构字符串常量生成使用 get_elem_ptr 构建器函数
refactor(lir): 简化地址表达式表示并增强内置函数支持
- 移除复杂地址结构体 scc_lir_addr_t
- 简化 scc_lir_instr 结构体中的地址表示
- 移除 STORE_ADDR 操作码
- 添加 memcpy 和 memset 内置函数操作码
- 在符号元数据中使用联合体替代嵌套结构体
feat(hir2lir): 完善 HIR 到 LIR 转换中的内置函数处理
- 添加 ensure_vreg 辅助函数确保虚拟寄存器操作数
- 正确处理全局变量地址符号引用
- 优化 GET_ELEM_PTR 转换使用类型大小计算
- 完整实现所有内置函数(BUILTIN)的 LIR 转换
- 包括 memcpy、memset、va_start、va_arg、va_end、va_copy 等
|
2026-05-22 15:15:18 +08:00 |
|
|
|
41d060d7e7
|
feat(lir): 修改HIR到LIR转换以支持可变参数函数
- 移除SCC_LIR_LEA指令类型,改用SCC_LIR_LOAD_ADDR
- 在scc_lir_func_meta_t中添加is_va_arg字段用于标识可变参数函数
- 修改scc_hir2lir函数参数类型,移除const限定符
- 更新比较操作的指令映射逻辑,将条件信息存储在metadata中
- 调整代码结构,在各个switch case分支中统一使用"} break"格式
fix(x86-isel): 修复x86指令选择中的立即数和重定位处理
- 修改emit_direct_call函数以正确处理全局符号重定位
- 更新立即数字段访问从imm到imm0
- 添加新的重定位操作数类型SCC_X86_OPR_RELOC
- 实现重定位目标类型的完整处理逻辑,包括基本块和符号
refactor(x86-mir): 重构x86操作数结构以支持重定位机制
- 将内存操作数的disp字段改为结构体形式包含displacement信息
- 移除不再使用的常用操作数构造器函数
- 保留并完善slot操作数构造器
- 更新内存操作数的调试输出格式
feat(ir2mcode): 添加重定位表支持以处理符号引用
- 定义新的重定位结构体scc_reloc_t用于记录重定位信息
- 修改scc_ir2mcode_emit_instr函数签名以传递重定位表
- 实现重定位补丁应用功能scc_ir2mcode_patch
- 更新机器码生成流程以收集和处理重定位信息
refactor(ir2sccf): 重构SCEF文件生成以支持重定位处理
- 提取独立的emit_mir_module函数处理MIR模块的机器码生成
- 实现基本块间重定位的地址解析和补丁应用
- 改进符号重定位的处理机制
- 简化机器码段数据的最终处理流程
|
2026-05-21 16:19:49 +08:00 |
|
|
|
c6e3bb2e20
|
feat(mir): 添加x86架构相关头文件并重构MIR指令表示
- 创建scc_x86_mir.h头文件,定义x86后端MIR指令结构和操作数构造器
- 创建scc_x86_isel.h头文件,定义x86_64指令选择器和相关工具函数
- 创建scc_x86_reg_alloc.h头文件,定义x86寄存器分配架构特定接口
- 移除旧的x86_64_isel.h和x86_64_reg_alloc.h文件
- 重构scc_mir.h中的指令表示,使用联合体存储伪指令数据
- 更新ABI lowering回调参数,使用void指针保持类型无关
- 扩展寄存器分配操作接口,添加指令信息查询和伪指令处理功能
- 更新目标文件包含路径以使用新的头文件命名
|
2026-05-20 11:07:05 +08:00 |
|
|
|
3df858fb85
|
feat(mir): 添加栈偏移操作数类型并重构内存访问表示
- 将 MIR 中的 SCC_MIR_OP_MEM 替换为更精确的 SCC_MIR_OP_STACK_SLOT 和
SCC_MIR_OP_STACK_OFFSET 类型
- 在 x86_64 指令选择中更新相应的内存操作数处理逻辑
- 修改寄存器分配器中的栈槽操作数类型检查
- 更新 IR 转机器码过程中的内存操作数转换
refactor(hir): 使用 tree_dump_node 输出函数节点
- 将 hir_dump 中的函数名输出从 append 改为 node 类型
refactor(frame-layout): 重构栈帧布局传递实现结构
- 引入函数指针实现方式替代直接函数实现
- 将栈帧分配功能集成到 MIR 传递流程中
- 移除独立的 frame_layout 实现文件
refactor(prolog-epilog): 添加函数序言/尾声传递框架
- 为 Windows x64 平台初始化序言/尾声生成器
- 在 MIR 传递阶段添加序言/尾声处理步骤
refactor(win64): 更新 Windows x64 目标平台接口
- 重命名寄存器分配填充函数为 scc_win_pc_x64_reg_alloc_fill
- 添加栈帧分配和序言/尾声初始化函数
- 修正参数传递中的栈槽操作数类型
refactor(dump): 改进 MIR 输出格式
- 将基本块显示改为分支节点类型
- 更新操作数类型的显示处理
chore: 添加 x86 编码相关数据结构定义
- 新增 scc_x86_encode.h 头文件包含内存操作数和指令编码接口定义
|
2026-05-13 18:47:44 +08:00 |
|
|
|
aa8a1ff8ce
|
feat(compiler): 启用 ir2mcode 和 sccf2target 库并实现 x86_64 代码生成
- 在 cbuild.toml 中启用 ir2mcode 和 sccf2target 依赖库
- 修改 justfile 中的构建命令,使用 release 模式并更新 tokei 统计排除 mcode 目录
- 重构 LIR 中的地址操作数类型,将 SCC_LIR_INSTR_KIND_ADDR 重命名为 SCC_LIR_INSTR_KIND_MEM
- 实现完整的 MIR 到 x86_64 机器码转换,包括:
- 添加 move、compare、binary operation 等指令发射函数
- 实现条件分支和跳转指令生成
- 支持算术、逻辑、移位等基本操作
- 添加调用和返回指令处理
- 实现栈分配和寄存器分配功能
- 完善 ir2mcode 模块,将 MIR 指令转换为机器码
- 更新 ir2sccf 模块,集成机器码生成功能
- 添加 mcode 库的架构支持和内存管理功能
- 修复 PE 文件生成中的空指针检查问题
|
2026-05-05 15:59:31 +08:00 |
|
|
|
676f3ec82c
|
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文件格式以便于维护。
|
2026-05-03 21:34:40 +08:00 |
|
|
|
5a9f816ccf
|
fix(abi): 修复void类型的ABI计算缺少break语句
在scc_type_abi.c文件中,void类型的case分支缺少break语句,
导致执行流程错误地进入下一个case分支。
feat(ast): 为参数声明添加索引字段
在ast_def.h头文件中为参数声明结构体添加param_idx字段,
用于跟踪参数在函数参数列表中的位置索引。
feat(ast): 更新参数初始化函数以支持索引参数
修改scc_ast.h中的scc_ast_decl_param_init函数签名,
添加参数索引idx参数,并将该值存储到参数声明结构体中。
feat(ast2ir): 添加IR转换上下文的值使用提示选项
在ast2ir.h中为scc_ast2ir_ctx_t结构体添加hint_using_value字段,
控制参数转换时是使用值还是分配内存的方式。
fix(ast2ir): 正确处理void类型到IR的转换
当遇到大小为0的类型(如void)时,直接返回void类型,
而不是尝试匹配其他大小分支。
refactor(ast2ir): 统一基本块引用类型为value_ref
将逻辑表达式、条件语句、循环语句中的基本块引用类型
从bblock_ref_t改为value_ref_t,保持类型一致性。
fix(ast2ir): 修正函数引用空值检查
使用SCC_IR_REF_nullptr常量替代0进行函数引用的空值检查,
提高代码的可读性和正确性。
refactor(ast2ir): 简化参数处理逻辑
移除不必要的函数参数获取和命名设置逻辑,
通过递归调用scc_ast2ir_decl来处理参数声明。
feat(ast2ir): 实现参数声明到IR的转换
为参数声明添加完整的IR转换逻辑,包括类型转换、
参数引用创建和内存分配处理。
refactor(ast2ir): 更新哈希表初始化接口
适配新的哈希表初始化函数签名,添加userdata参数支持,
并初始化hint_using_value字段为false。
refactor(ir): 移除函数参数的预分配逻辑
删除IR构建器中函数参数的预分配和循环添加逻辑,
简化函数开始构建的处理流程。
refactor(ir): 更新类型哈希表键值处理
修改类型哈希表的哈希和比较函数以接受模块参数,
正确处理空引用情况并支持新的键值传递方式。
fix(ir): 修复IR转储中的字符串格式
移除IR函数转储时多余的换行符,确保输出格式正确。
refactor(ir): 更新模块哈希表初始化
适配哈希表初始化接口变更,添加userdata参数,
并为各种向量预留UID 0作为无效引用。
fix(ir): 修复模块清理中的循环起始索引
将模块清理循环的起始索引从0改为1,跳过预留的
无效引用项,避免访问空指针。
refactor(ir): 调整向量和哈希表操作顺序
调整模块中向量push和哈希表set的操作顺序,
确保数据一致性和正确的UID分配。
chore(build): 移除ir2mcode模块相关文件
移除ir2mcode相关的头文件和源文件,这些组件
将在后续重构中重新设计或替换。
|
2026-04-15 14:52:11 +08:00 |
|
|
|
eeb4c4fc3c
|
feat(ast): 重构AST节点类型定义并实现数组下标访问
- 将scc_ast_node_type_t重命名为scc_ast_node_kind_t以提高语义清晰度
- 为scc_ast_node结构体添加名称定义
- 更新所有相关头文件中的类型引用
- 实现数组下标表达式的IR转换逻辑
- 添加对sizeof和alignof表达式的基本支持
fix(ast2ir): 修复表达式求值和类型处理问题
- 修复数组类型退化为指针的逻辑
- 修复变量声明初始化值检查条件
- 添加结构体和枚举类型的IR生成支持
- 移除未使用的代码段
refactor(ir): 完善IR上下文错误处理
- 为未处理的类型标签添加恐慌处理
- 修复联合类型的哈希计算
chore(build): 更新依赖项配置
- 修正lexer模块中的依赖项名称
style(parser): 清理解析器代码
- 移除未使用的类型哈希表
- 更新语义分析回调函数签名
- 添加属性语法的占位符实现
- 完善内存清理逻辑
test: 添加数组下标和枚举测试用例
- 新增15_array_subscript.c测试数组下标访问
- 新增16_enum.c测试枚举类型功能
- 更新期望结果配置文件
|
2026-04-09 11:18:32 +08:00 |
|
|
|
8c7af571c2
|
refactor(ast2ir): 更新IR构建器接口并重构类型映射
- 将IR构建器初始化函数修改为接受cprog参数
- 添加scc_ast2ir_ctx_drop函数用于资源清理
- 更新类型标识符命名规范,从大写改为小写形式
- 替换scc_ir_ctx_get_*函数调用为scc_ir_module_get_*函数
- 移除对ir_builtin.h的依赖,改用ir_builder.h中的构建器函数
- 为整数常量创建添加专门的构建器辅助函数
fix(ir): 重构IR上下文和模块管理结构
- 将原有的scc_ir_cprog_ctx_t拆分为scc_ir_module_t和scc_ir_ctx_t
- 添加scc_ir_module_t结构用于统一管理IR对象存储
- 更新IR类型枚举名称格式,从SCC_IR_TYPE_XXX改为SCC_IR_TYPE_xxx
- 添加整数、无符号整数和浮点数常量联合体定义
- 移除ir_base.h和ir_builtin.h头文件,整合到scc_ir.h中
feat(ir_builder): 添加类型构建器函数和常量创建功能
- 为各种基础类型添加scc_ir_builder_type_*内联函数
- 实现scc_ir_builder_const_int函数用于创建整数常量
- 修改构建器初始化函数签名以接受cprog参数
- 更新构建器内部结构,使用指向cprog的指针而非嵌入式结构
|
2026-03-25 11:59:27 +08:00 |
|
|
|
de6f5d510a
|
feat(ir2mcode): 添加IR到机器码转换模块并更新依赖配置
- 新增ir2mcode库用于将IR转换为机器码
- 添加sccf2target依赖以支持目标平台转换
- 在ast库中添加scc_pos依赖支持位置信息
- 更新cbuild.toml配置文件添加新库依赖
- 实现AMD64架构代码生成功能
- 添加寄存器分配器实现栈和寄存器位置管理
- 支持基本的算术运算和内存访问操作
- 添加PE格式目标文件生成支持
|
2026-03-20 14:12:25 +08:00 |
|