|
|
ffb23afaf4
|
feat(ast2ir): 添加数组初始化支持和AST转IR优化
添加了对未知长度数组的自动长度推导功能,支持字符串字面量和复合
初始化的数组长度计算。新增辅助函数resolve_array_length用于计算
数组实际长度,以及emit_array_initialization用于生成数组初始化
代码。
同时将AST转IR过程中的参数改为const引用,提高代码安全性。
新增IR构建器的借用检查机制,防止在借用期间进行重分配操作。
fix(ast): 为AST结构体添加详细注释说明字段用途
|
2026-04-13 11:36:52 +08:00 |
|
|
|
694778e4a0
|
feat(abi): 新增ABI类型布局描述接口和Windows x64实现
- 新增scc_abi包,包含基础类型布局描述接口
- 实现Windows x64 ABI类型布局计算功能
- 定义基本类型枚举和布局信息结构体
- 提供类型布局计算的核心接口函数
refactor(ast2ir): 使用新的ABI接口替换旧的类型转换实现
- 将旧的scc_type_abi_t替换为新的scc_abi_type_calc_t
- 更新AST到IR的类型转换逻辑,使用新的ABI计算接口
- 修改上下文初始化和类型解析相关代码
- 移除废弃的头文件和相关实现
refactor(ir): 统一IR节点引用类型命名并完善构建器功能
- 将scc_ir_node_ref_vec_t重命名为scc_ir_value_ref_vec_t保持一致性
- 更新聚合类型的字段名称从elements到fields
- 添加全局变量分配构建器函数scc_ir_builder_global_alloca
- 清理构建器中多余的注释和代码
|
2026-04-12 11:30:31 +08:00 |
|
|
|
053c6abf51
|
feat(ir): 重构指针操作API并优化数组访问逻辑
- 将scc_ir_builder_get_ptr重命名为scc_ir_builder_get_elem_ptr以更好地反映其功能
- 移除旧的GET_PTR相关枚举和结构体定义
- 更新IR构建器中指针类型的处理逻辑,支持数组元素指针计算
- 在代码生成阶段正确处理元素指针操作的索引计算
fix(ast2ir): 修正数组下标表达式的指针获取操作
- 将数组访问中的get_ptr调用替换为get_elem_ptr
- 确保数组元素访问使用正确的IR指令
perf(runtime): 优化fprintf函数的大字符串处理性能
- 实现动态缓冲区分配策略,小字符串使用栈缓冲区,大字符串使用堆分配
- 避免固定大小缓冲区可能导致的截断问题
- 添加适当的内存清理机制
|
2026-04-11 10:12:22 +08:00 |
|
|
|
d88475cc06
|
feat(ir2mcode): 添加帧分配器框架和Windows 64位实现
添加了frame_alloc.h头文件定义帧分配器操作接口,实现了Windows 64位
平台的帧分配器实现,包括槽位分配、偏移计算和栈帧布局管理功能。
BREAKING CHANGE: 移除了旧的frame_manager.h接口,采用新的frame_alloc_ops_t
抽象接口。
fix(ast2ir): 修复字符串字面量表达式返回值问题
修复了AST到IR转换过程中字符串字面量表达式的处理,确保正确返回
创建的常量字符串值引用而非直接跳出。
fix(ir): 修复内置memcpy函数参数验证和类型比较逻辑
在IR构建器中为builtin_memcpy函数添加参数空指针检查,在类型比较
函数中添加未知类型的边界条件处理,增强系统稳定性。
refactor(ir2mcode): 重构寄存器分配器接口以支持帧分配器集成
修改寄存器分配器接口以接受帧分配器参数,统一节点到位置的映射表
命名,并提供便捷的栈大小和偏移获取接口。
|
2026-04-08 14:37:56 +08:00 |
|
|
|
4144f7841c
|
refactor(argparse): 将null替换为nullptr以提高C++兼容性
- 在argparse库中将所有null指针常量替换为nullptr
- 更新头文件和源文件中的指针初始化和比较操作
- 修改测试文件中的相关断言检查
- 更新AST定义文件中的注释说明
|
2026-04-05 20:18:09 +08:00 |
|
|
|
ca187c78f1
|
feat(ast): 更新AST dump功能以使用新的树转储接口
- 将头文件中的tree_dump.h替换为scc_tree_dump.h
- 修改函数签名将scc_tree_dump_ctx_t改为scc_tree_dump_t
- 移除过时的宏定义和内联函数实现
- 使用新的scc_tree_dump_* API替代旧的PRINT_*宏
- 简化类型、表达式、语句和声明的转储逻辑
- 统一使用新的树转储接口进行节点和值的输出
feat(ast2ir): 实现逻辑运算符和一元运算符的IR转换
- 添加scc_ast2ir_logical_expr函数处理&&和||运算符
- 实现短路求值逻辑,包含分支控制流
- 添加对一元正号运算符的支持
- 实现取地址和间接寻址运算符
- 添加字符字面量解析支持转义序列
fix(ir): 修复字符串常量构建中的长度计算错误
- 修正数组长度计算从len+1改为len-1
- 调整字符串内容复制逻辑跳过引号边界
- 修正内存分配大小与实际数据长度匹配
refactor(ir): 更新IR转储模块使用统一的树转储接口
- 将IR转储上下文中的tree_dump_ctx_t替换为scc_tree_dump_t
- 更新初始化函数签名以使用新的转储接口类型
|
2026-04-03 20:10:51 +08:00 |
|
|
|
78e7c800ba
|
refactor(ir): 将IR节点重构为值引用并添加字符串字面量支持
- 将scc_ir_node_ref_t重命名为scc_ir_value_ref_t,并更新所有相关API
- 修改IR定义中的节点标签枚举为值标签枚举(scc_ir_node_tag_t -> scc_ir_value_tag_t)
- 更新AST到IR转换器中所有节点引用的类型声明
- 添加对内置类型(VOID, CHAR, INT等)的完整映射实现
- 实现字符串字面量的常量数组创建功能
- 更新项目名称从"Simple Modual C Compiler"为"Simple C Compiler"
- 在Doxyfile中排除external目录的文档生成
- 移除未使用的strpool字段并重命名decl到IR的映射表
BREAKING CHANGE: IR节点引用类型已更改,所有使用scc_ir_node_ref_t的地方需
替换为scc_ir_value_ref_t。
|
2026-03-31 11:42:14 +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 |
|
|
|
741171dbba
|
feat(ir): 实现函数调用和参数处理功能
- 在AST定义中移除函数调用结构体中的冗余name字段
- 实现完整的函数声明和定义处理流程,支持符号表查找
- 添加函数参数引用节点类型,支持参数传递和访问
- 实现函数调用的IR生成,包括参数处理和符号解析
- 添加断言确保节点有效性,提升代码健壮性
fix(ast2ir): 优化类型转换处理逻辑
- 移除多余的注释说明
- 简化参数为空检查逻辑,提高代码简洁性
- 修复函数调用时的符号表查找机制
refactor(ir): 改进IR构建器接口设计
- 修改函数构建相关API,使接口更加清晰
- 添加函数声明集合管理
- 重构内置类型缓存机制
feat(ir2mcode): 完善AMD64代码生成
- 实现函数参数到寄存器的映射
- 添加函数调用约定支持(最多4个参数)
- 实现函数符号和重定位处理
- 添加栈帧管理机制
- 修正栈偏移计算
chore(ir): 清理和优化IR dump输出
- 更新节点类型描述信息
- 改进函数声明和定义的输出格式
- 修正格式化输出中的符号显示问题
style: 代码格式化和命名规范化
- 统一重定位类型枚举命名
- 优化函数参数验证和错误处理
|
2026-03-23 16:02:23 +08:00 |
|
|
|
2e5e98868d
|
feat(ast): 添加汇编器模块并改进AST定义和IR转换
- 在README.md中添加asm汇编器模块说明
- 更新ast_def.h中的枚举注释,添加sema相关信息以明确语义分析作用域
- 重命名函数参数param_types为params,使命名更清晰
- 移除call表达式中的_target字段,简化结构
- 为member、identifier等字段添加///< fill by sema注释说明填充时机
- 为jump语句添加_target字段用于语义分析
- 更新所有AST初始化函数,接受位置信息参数以改进错误定位
- 修复alignof表达式的类型应为ALIGN_OF而非SIZE_OF的问题
- 重构ast2ir.h,引入scc_ast2ir_ctx_t上下文结构体统一管理转换状态
- 添加符号表、节点到IR映射等必要的转换上下文信息
|
2026-03-17 20:29:40 +08:00 |
|
|
|
2a90e165a5
|
feat(ast): 重构AST转储功能并创建AST到IR转换器
- 重构ast_dump.c中的宏定义,简化PRINT_VALUE、PRINT_NODE、
PRINT_QUOTED_VALUE等宏的实现
- 移除冗余的PRINT_COLORED宏定义
- 统一使用SCC_TREE_DUMP_PRINT_PURE和SCC_TREE_DUMP_PRINT_AROUND
宏进行转储输出
- 在dump_stmt_impl函数中优化节点转储逻辑,统一使用end_node_dump
替代手动换行
- 添加对未知节点类型的警告日志输出
- 创建新的ast2ir模块,包含AST到IR的基本转换功能
- 实现ast_type_to_ir_type、ast_expr_to_ir、ast_stmt_to_ir、
ast_decl_to_ir等核心转换函数
- 更新IR库依赖配置,添加scc_utils和tree_dump依赖
- 新增IR基础接口定义文件ir_base.h和IR构建器接口ir_builder.h
|
2026-01-30 23:01:55 +08:00 |
|