|
|
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 |
|
|
|
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 |
|
|
|
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 |
|
|
|
27d86d5685
|
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中添加对应的期望返回值
|
2026-04-04 13:22:19 +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 |
|
|
|
35a704a1cb
|
refactor(ast): 统一记录类型结构并移除成员访问操作符
- 移除了枚举类型的独立结构定义,统一使用record结构
- 移除了成员访问操作符SCC_AST_OP_MEMBER_ACCESS和SCC_AST_OP_PTR_MEMBER_ACCESS
- 更新了for循环语句中init字段的类型从scc_ast_type_t*到scc_ast_node_t*
- 修改了声明初始化函数以支持统一的记录类型处理
fix(ast2ir): 完善二元表达式处理和for循环代码生成
- 重构了赋值操作符的处理逻辑,通过临时表达式实现复合赋值
- 添加了对for循环语句的完整IR代码生成功能
- 修复了if-else语句中错误的基本块跳转问题
- 改进了标识符未找到时的错误提示信息
chore: 清理代码和修复潜在问题
- 移除了未使用的自动标签生成功能
- 统一了IR基本块标签格式化输出
- 修复了机器码生成中的寄存器存储控制流问题
- 改进了词法分析器中十六进制数字的处理逻辑
|
2026-03-21 10:33:17 +08:00 |
|
|
|
02a6c684f1
|
feat(ast2ir): 添加左值标识支持以改善表达式处理
- 在 scc_ast2ir_expr 函数中添加 is_lvalue 参数来区分左值和右值表达式
- 更新二元表达式处理逻辑,特别是赋值操作符的处理
- 改进标识符表达式的处理,根据是否为左值决定返回存储位置还是加载值
- 修复哈希比较函数的实现
- 移除调试相关的注释代码
refactor(parser): 优化语法分析器错误处理和控制流
- 移除不必要的错误恢复辅助注释
- 修改表达式解析的控制流程,将直接返回改为使用 break 语句
- 添加语义分析回调,在解析完成后进行标识符查找和验证
refactor(sema): 增强语义分析阶段的符号表管理
- 改进标识符查找逻辑,增加对非变量标识符的检查
- 扩展声明处理范围,包括变量和参数声明的符号表注册
- 为函数声明添加作用域管理
fix(parser): 修正单元测试中的类型定义
- 将 long long 类型定义改为 int 类型,解决测试兼容性问题
refactor(sccf): 重构文件格式定义和构建器实现
- 重命名符号类型枚举值 OBJECT 为 EXTERN
- 重命名段类型枚举值 RELOC 为 RELOCS
- 修正结构体字段命名的一致性问题
- 重新设计 SCCF 构建器的数据结构和API
- 添加符号表、字符串表和重定位表的构建支持
refactor(target): 重命名Windows PE相关类型定义
- 将 scc_winpe_* 类型重命名为 scc_pe_* 以保持命名一致性
chore: 添加 sccf2target 模块用于格式转换
- 创建新的库模块用于 SCCF 到目标格式的转换
- 实现 PE 格式转换的基本功能
- 添加示例程序演示格式转换过程
|
2026-03-19 12:11:57 +08:00 |
|
|
|
5f915ba8d3
|
refactor(ast): 移除内置类型头文件并优化类型初始化
移除了独立的ast_builtin.h头文件,将内置类型定义整合到现有结构中,
同时修复了类型初始化函数命名不一致的问题。
BREAKING CHANGE: 原有的ast_builtin.h头文件已被移除,
相关内置类型声明已重构为新的接口形式。
fix(parser): 修复表达式解析中的位置信息处理
确保条件表达式和逗号表达式的解析正确获取并传递位置信息,
避免在语法树构建过程中丢失源码位置。
refactor(ir): 修复IR转储中的类型转换问题
添加必要的类型转换以防止整数溢出,并优化代码格式以提高可读性。
feat(parser): 添加表达式解析测试套件
引入全面的表达式解析测试框架,覆盖从基本表达式到复杂嵌套表达式
的各种场景,确保解析器功能的正确性和稳定性。
|
2026-03-18 12:18:56 +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 |
|
|
|
45c59e0b65
|
feat(ast2ir): 添加AST到IR转换功能并完善类型ABI支持
- 添加了ast2ir库用于将AST转换为IR中间表示
- 实现了Windows x64 ABI类型定义文件
- 完善了IR库中的类型定义,添加了无符号整数类型和操作符枚举
- 更新了IR转储功能以支持新的节点类型
- 在主程序中集成了AST到IR的转换流程
- 修改了PE目标文件生成功能以修正节区标志
- 更新了向量实现的日志和错误处理机制
fix(ir): 修复IR库中的操作符枚举和类型处理问题
- 修复了IR操作符枚举的命名空间问题,统一使用SCC_IR前缀
- 添加了无符号整数类型的哈希和比较支持
- 修正了常量整数节点的打印函数调用
- 更新了各种IR节点的转储输出格式
- 删除了测试文件中的冗余代码
refactor: 重构项目依赖配置和构建设置
- 启用了ast2ir和ir库的依赖配置
- 添加了def文件到.gitignore中
- 重命名了部分测试文件
|
2026-03-15 15:44:50 +08:00 |
|
|
|
4015acd866
|
refactor(hashtable): 简化哈希表初始化接口并优化文件打开模式
- 将哈希表初始化从两步设置改为一步完成,直接传递哈希函数和比较函数
- 重构scc_hashtable_init函数签名,接受函数指针参数
- 更新内部字段名从key_cmp为cmp_func以保持一致性
- 添加类型定义scc_hashtable_hash_func_t和scc_hashtable_equal_func_t
- 修改PAL层文件操作接口,使用枚举模式替代固定只读模式
- 更新IR上下文、预处理器宏表等组件使用新的初始化方式
- 移除AST头文件中未使用的语义分析回调类型定义
- 修复预处理器中的空指针访问问题
|
2026-03-04 16:47:28 +08:00 |
|
|
|
ffee07a03d
|
feat(ir): 添加线性IR转储功能并改进AST转储
- 实现了IR的线性转储功能,包括类型、节点、基本块和函数的线性表示
- 添加了scc_ir_dump_ctx_init函数用于初始化转储上下文
- 为AST函数类型添加了变参标记注释说明
- 改进了AST转储中函数类型的参数和返回值显示逻辑
- 统一了AST解析中节点类型的声明为通用的scc_ast_node_t指针类型
fix(lexer): 改进词法分析器错误信息显示
- 在不支持字符的错误信息中添加十六进制编码显示
- 便于调试时识别特殊不可打印字符
|
2026-02-13 09:56:42 +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 |
|
|
|
c01e6e1db4
|
feat(ir): 添加IR库的基础结构和定义
- 创建IR库的cbuild.toml配置文件,添加对scc_core的依赖
- 新增ir_def.h头文件,定义IR类型、节点、基本块和函数的数据结构
- 添加ir_builtin.h和ir_builtin.c,提供内置的i32类型和零值常量
- 实现ir_dump.h和ir_dump.c,提供IR转储功能的接口
- 创建scc_ir.h和scc_ir.c,实现IR对象的初始化和分配功能
- 添加测试文件test_ir.c用于验证IR库功能
- 定义了完整的IR节点类型枚举和操作类型枚举
|
2026-01-08 13:43:35 +08:00 |
|