|
|
0acea43e4e
|
feat(argparse): 支持列表类型参数解析
当参数指定为列表类型时,验证和处理逻辑现在会检查
vec_store 是否为空或大小为0,而不是检查 str_store。
fix(hir): 初始化聚合类型值的数据结构
在 HIR 值初始化过程中,为聚合类型添加适当的初始化逻辑,
确保其字段向量被正确初始化。
refactor(hir_builder): 优化指针类型创建和GEP操作实现
- 简化全局分配器中的指针类型创建代码
- 扩展 GEP 操作以支持结构体和联合体字段访问
- 添加字段偏移计算支持
feat(hir_dump): 增强HIR类型和值的线性转储功能
- 实现类型定义的线性转储输出
- 改进结构体和联合体的转储格式
- 优化聚合值的转储表示
perf(hir_layout): 优化类型布局计算性能
改进结构体、联合体和聚合类型的对齐和大小计算算法,
提高字段偏移计算的准确性。
fix(hir_module): 完善模块资源清理机制
在模块析构时正确释放结构体和联合体类型的字段向量内存。
docs(lir): 更新文档注释中的空值表示
将初始化数据参数的空值描述从 NULL 统一为 nullptr。
refactor(hir2lir): 改进HIR到LIR的类型转换逻辑
- 重构类型到LIR大小扩展的转换函数
- 修复STORE指令的类型推导逻辑
- 增强GEP指令的规模因子和偏移量计算
- 添加对结构体/联合体字段访问的支持
refactor(x86_isel): 优化x86-64地址加载指令生成
改进LOAD_ADDR指令生成,更好地支持结构体字段访问的零比例因子。
docs(ir2mcode): 统一空值表示文档注释
更新初始化数据参数的空值描述为nullptr。
refactor(lexer): 简化词法分析器非空白标记预览逻辑
优化非空白标记预览函数,减少不必要的标记消费和销毁操作。
|
2026-06-03 17:34:16 +08:00 |
|
|
|
be33eb3942
|
refactor(ast2ir): 移除全局值向量的直接推送
移除了在全局变量声明处理中对全局值向量的直接推送操作,
以优化内存管理和值引用的一致性。
fix(hir): 修复表达式索引类型检查中的空指针访问
修正了表达式处理中索引类型的获取方式,从使用类型指针改为使用类型引用,
并更新了空值检查条件以避免潜在的空指针解引用问题。
perf(hir): 优化类型大小计算性能
将类型大小计算逻辑从模块内部实现替换为使用HIR布局系统提供的统一接口,
提高计算效率和代码复用性。
refactor(hir): 统一字符串常量构建流程
重构了字符串常量的创建过程,简化了类型定义步骤并确保包含正确的空终止符。
fix(dump): 改进全局分配值转储的健壮性
添加了对空初始化值的检查,当全局分配没有初始值时显示零初始化器,
避免访问空指针导致的程序崩溃。
refactor(x86): 增强操作数编码的安全性
在x86指令编码中添加了对操作数字节对齐的断言检查,确保所有操作数都符合
字节边界对齐要求。
chore(build): 更新头文件包含路径和初始化参数
调整了头文件包含路径格式,并更新了HIR程序和模块的初始化函数签名,
传入ABI参数以支持更准确的目标平台特性。
|
2026-06-02 14:47:05 +08:00 |
|
|
|
d2eafa9dc6
|
refactor(ast2ir): 移除废弃的ABI依赖并优化类型转换处理
移除了对scc_abi包的依赖,将相关头文件从libs/abi移动到libs/ast2ir目录下。
重构了基本类型解析功能,将parse_base_type函数提取为独立的
scc_ast2ir_parse_base_type实现,并支持有符号/无符号类型区分。
feat(ast2ir): 实现整数常量表达式求值器
新增了完整的整数常量表达式求值功能,支持C11标准中的常量表达式规则,
包括字面量、标识符、sizeof/_Alignof、一元/二元运算、条件表达式和
类型转换等操作。该功能用于数组大小和枚举值的编译期计算验证。
refactor(ast2ir): 完善类型提升和算术转换机制
改进了整数提升和寻常算术转换的实现,修复了移位操作的符号处理问题,
添加了无符号比较操作的支持,增强了类型安全检查,统一了错误处理流程。
fix(ast2ir): 修复赋值表达式返回值和数组大小计算问题
修正了赋值表达式的返回值处理,确保返回右侧值而不是存储指令引用。
使用新的常量表达式求值器替代原有的硬编码数组大小计算,提高了
数组声明的正确性。
|
2026-05-31 17:30:22 +08:00 |
|
|
|
cec96333e7
|
feat(ast2ir): 实现C11类型提升系统并重构HIR基本块管理
- 新增 scc_ast2ir_promote.c 实现整数提升(6.3.1.1)和寻常算术转换(6.3.1.8)
- 重构 HIR Builder: bblock → create_bblock + append_bblock,引入BBList链表管理
- AST2IR 全面集成类型提升:二元运算、赋值、函数调用参数、自增/自减操作符
- 变参函数支持:跳过 ... 假参数,实现默认参数提升(float→double等)
- 简化 HIR Dump 实现
- MIR: Win64 ABI改进、x86指令选择优化
- 新增 printf 测试用例
|
2026-05-24 15:46:22 +08:00 |
|
|
|
2c13ac54df
|
feat(ast2ir): 添加浮点类型支持和复合初始化功能
- 在ABI类型计算中添加FLOAT和DOUBLE类型的映射
- 修复AST操作符注释中的歧义描述
- 为ast2ir上下文添加类型缓存以解决递归结构体定义问题
- 实现复合初始化表达式的支持,包括数组和结构体初始化
- 添加前置和后置自增/自减操作符的IR转换
- 实现三元条件表达式的IR生成
- 添加类型转换(cast)和sizeof操作符的支持
- 重构数组长度推断逻辑并添加类型大小计算函数
- 实现结构体和联合体的递归类型解析
- 添加函数指针调用相关的IR节点类型定义
fix(ast): 修正间接操作符的注释说明
refactor(ast2ir): 优化代码结构并添加必要的断言验证
|
2026-05-19 17:35:24 +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 |
|
|
|
096177e7e8
|
feat(ast2ir): 添加多种表达式和语句类型的TODO实现
添加了对CAST、COMPOUND、LVALUE、BUILTIN等表达式类型的支持,
以及SWITCH、CASE、DEFAULT等语句类型的框架实现。
fix(hir_dump): 修复整数值格式化显示问题
修改了整数值的获取方式,从原来的const_int.int32改为integer.data.digit,
并添加了hack注释说明。
fix(lir_module): 修复数据符号添加中的比较操作符错误
将赋值操作符'='改为相等比较操作符'==',修正了条件判断逻辑。
refactor(mir_x86): 改进寄存器分配和指令选择逻辑
添加了函数元数据字段用于虚拟寄存器计数,改进了移动指令的处理逻辑,
将条件分支相关代码替换为setcc指令序列。
fix(parser): 修正类型指针返回类型一致性
统一了类型获取函数的返回类型,从const指针改为非const指针,
确保类型系统的一致性。
fix(parser): 修复结构体类型解析中的类型分配问题
修改了匿名结构体类型的处理逻辑,确保类型声明能够正确挂载到AST中。
fix(config): 修正emit-target参数类型配置
将emit-target选项的参数类型从字符串改为布尔型,修正了配置解析。
test: 增加全局超时控制和测试优化
添加了全局超时机制防止测试无限等待,改进了测试运行器的统计信息输出。
|
2026-05-06 18:06:33 +08:00 |
|
|
|
f6bc40ae4a
|
refactor(ast): 将AST类型系统重构为规范类型系统
- 将scc_ast_type_t替换为scc_ast_qual_type_t,引入规范类型概念
- 添加scc_ast_canonical_type_t联合体用于表示规范类型
- 修改头文件结构,移除大量内联初始化函数,改为使用AST上下文分配器
- 添加SCC_AST_ALLOC宏用于统一节点分配管理
- 更新builtin类型枚举定义,添加类型计数常量
feat(ast): 引入AST上下文管理器
- 创建scc_ast_ctx_t结构体用于管理AST节点生命周期
- 实现类型池化机制,支持内置类型的统一管理
- 添加canonical类型获取和分配接口
refactor(abi): 适配新的AST类型系统
- 更新头文件包含,从<scc_ir.h>改为<scc_hir.h>
- 适配函数参数类型,使用qual_type替代原始type
- 使用scc_ast_canon_type()函数获取规范类型进行处理
Co-authored-by: Copilot <copilot@github.com>
|
2026-04-27 20:40:03 +08:00 |
|
|
|
e850b5c981
|
feat(ir): 启用LIR模块并重构HIR组件结构
- 在cbuild.toml中启用lir依赖项,取消注释相关配置
- 重构libs/README.md文档,添加详细的库说明和层级结构
- 重命名头文件以统一命名规范:ast_def.h → scc_ast_def.h,
ast_dump.h → scc_ast_dump.h, hir相关文件添加scc前缀
- 更新include路径以匹配新的文件命名
- 在cfg模块中添加symbol ID类型和linkage枚举,完善符号表功能
- 实现cfg模块中的符号添加、查找和获取功能
- 修改HIR中meta字段替换原有的attribute字段,更新相关访问宏
- 修复HIR构建器中的函数元数据访问错误
- 为LIR模块创建完整的头文件结构,包括指令定义、转换器等组件
|
2026-04-21 20:35:37 +08:00 |
|