|
|
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 |
|
|
|
c99f64708e
|
feat(parser): 改进解析器错误处理和表达式解析逻辑
- 在初始化解析中添加缺失的赋值操作符检查
- 改进后缀表达式解析逻辑,处理嵌套情况
- 添加数组下标初始化的赋值操作符验证
- 修复主表达式解析中的返回语句处理
refactor(pproc): 优化预处理器宏展开和位置追踪
- 添加token复制函数来保持原始位置信息
- 重构宏展开函数参数传递方式
- 修复字符串化参数的位置信息处理
- 改进可变参数宏的处理逻辑
test(parser): 增加标签语句和字符串字面量测试用例
- 添加返回语句with复合字面量的测试
- 增加标签继续语句的测试用例
- 添加字符串连接的解析测试
test(pproc): 添加预处理器位置追踪测试
- 增加双重宏定义位置追踪测试
- 添加带参数宏定义位置追踪测试
- 增加字符串化操作位置追踪测试
docs: 更新代码中的宏定义和注释
- 修正未定义标识符的拼写错误
- 添加必要的头文件包含
- 改进错误消息提示文本
|
2026-03-13 13:48:55 +08:00 |
|
|
|
c46578736a
|
feat(ast): 添加复合表达式和初始化器解析支持
重构AST表达式枚举,将COMPOUND_LITERAL重命名为COMPOUND,
更新相关结构体定义以支持复合字面量的左右表达式向量表示。
添加lvalue表达式类型用于左值处理,实现完整的初始化器解析功能,
包括大括号初始化列表、成员访问和数组下标的处理逻辑。
更新表达式解析器为基于优先级的递归下降解析,修复变量声明中
初始化表达式的内存泄漏问题。
完善类型限定符和存储类说明符的重复检查机制,增强语法分析的准确性。
|
2026-03-12 21:14:08 +08:00 |
|
|
|
b00a42a539
|
feat(parser): 实现赋值表达式和常量表达式解析功能
- 添加 scc_parse_assignment_expression 函数用于解析赋值表达式
- 添加 scc_parser_constant_expression 函数用于解析常量表达式
- 修改 cast 表达式解析逻辑,修复类型转换解析问题
- 改进错误处理机制,使用 SCC_ERROR 替代 LOG_ERROR 并提供准确位置信息
- 移除未使用的变量声明,优化代码结构
refactor(ast): 调整类型定义中的 typedef 类型存储结构
- 将 scc_ast_type 中的 underlying 字段改为 decl 字段
- 更新相关初始化函数以适配新的字段名称
- 修复枚举类型初始化时缺失的 decl 字段设置
feat(ast): 添加类型转换、sizeof 和 alignof 表达式的初始化函数
- 实现 scc_ast_expr_cast_init 用于初始化类型转换表达式
- 实现 scc_ast_expr_sizeof_init 用于初始化 sizeof 表达式
- 实现 scc_ast_expr_alignof_init 用于初始化 alignof 表达式
- 完善表达式类型的支持
chore(parser): 增加语义分析回调接口和位置获取工具函数
- 添加 scc_parse_decl_sema、scc_parse_type_sema 等语义分析辅助函数
- 提供 scc_parser_got_current_pos 函数获取当前解析位置
- 增强错误报告的准确性
refactor(dump): 完善 AST 转储功能,支持 break 和 continue 语句
- 为 SCC_AST_STMT_BREAK 和 SCC_AST_STMT_CONTINUE 添加转储支持
- 优化转储函数的分支处理结构
|
2026-03-12 14:57:35 +08:00 |
|
|
|
2e331ee016
|
feat(ast): 添加内置类型定义和AST节点初始化函数
添加了完整的内置类型支持,包括整数、浮点数、字符、布尔等基本类型,
以及它们的有符号/无符号变体。同时添加了大量的AST节点初始化函数,
简化了AST节点的创建过程。
BREAKING CHANGE: 重构了AST表达式和声明结构,移除了冗余字段,
统一了命名规范,并修改了函数调用和成员访问的表示方式。
|
2026-03-10 13:56:32 +08:00 |
|
|
|
a805814d3f
|
feat(pproc): 改进宏处理器中的标识符识别逻辑
修复了宏处理器中对标识符类型的检查方式,使用更准确的子类型判断函数,
确保关键字也能被正确处理为宏名或参数名。同时添加了相关的单元测试用例。
BREAKING CHANGE: 修改了token类型的检查方法
|
2026-03-04 17:35:54 +08:00 |
|
|
|
beb0b19026
|
fix(lexer): 在token拷贝函数中添加空指针检查
添加了对源指针的空值断言检查,防止在scc_lexer_tok_copy函数中
传入空指针导致崩溃
refactor(pproc): 优化数组到环形缓冲区转换函数的参数命名
修改scc_lexer_array_to_ring函数参数名从array改为move_array,
并在转换后初始化原数组结构,确保资源正确管理
fix(pproc): 修复宏处理中的内存泄漏问题
- 在fill_replacements函数中初始化token结构并正确释放
- 在scc_pproc_parse_function_macro中释放args向量
- 修改token消费逻辑以避免重复消费
- 在指令处理中添加token释放操作
fix(pproc): 改进宏展开过程中的资源管理
- 修复concatenate_tokens函数中的潜在内存泄漏
- 添加对输出向量的断言检查
- 正确释放输入环形缓冲区
- 重构参数拆分逻辑以避免内存泄漏
refactor(pproc): 优化条件解析和宏表设置逻辑
- 修正parse_constant_condition函数中的返回值初始化
- 在宏表设置时处理重复宏名称的情况
- 改进预处理器的整体资源清理流程
fix(pproc): 修复预处理器中的多个内存泄漏
- 在测试代码中添加正确的资源释放
- 修正格式化字符串中的类型匹配
- 优化环形缓冲区初始化逻辑以处理零容量情况
|
2026-03-02 18:04:43 +08:00 |
|
|
|
46f5328183
|
fix(pproc): 修复宏参数解析中的空白字符处理问题
- 在宏参数解析过程中使用 scc_lexer_next_non_blank 替代直接的 ring 操作,
确保正确跳过空白字符
- 更新 scc_pproc_expand_by_src 和 rescan 函数中使用
scc_lexer_peek_non_blank 替代原来的 scc_ring_peek,
以正确处理预处理器展开时的空白字符
- 修正测试用例中的预期输出,移除多余的空格
|
2026-03-01 16:02:04 +08:00 |
|
|
|
60cdfd2c33
|
feat(pproc): 修改宏展开器以支持连续函数式宏调用
修改了预处理器宏展开功能,将输出类型从环形缓冲区改为向量,
并实现了对连续函数式宏调用的支持。现在可以正确处理像
g(z) -> f(x * (z)) 这样的宏替换场景,其中标识符可能被重新
定义为新的函数式宏。
BREAKING CHANGE: 函数签名 scc_pproc_expand_by_vec 的输出参数
从 scc_lexer_tok_ring_t* 改为 scc_lexer_tok_vec_t*
|
2026-03-01 14:23:17 +08:00 |
|
|
|
8cbb9e6987
|
feat(pproc): 添加宏定义禁用机制和defined操作符解析功能
添加SCC_TOK_DISABLED标记类型用于表示被禁用的token
实现disable/enable/need_skip函数来管理宏展开过程中的递归控制
重构defined操作符解析逻辑到独立的parse_defined函数中
移除原有的need_rescan标志和相关重扫描逻辑
fix(sstream): 修复位置日志中行列号格式化问题
将snprintf格式字符串中的%u替换为%llu以支持更大的行列数值
test(pproc): 补充宏定义相关的单元测试用例
添加嵌套宏、自引用宏和无参数宏的测试用例
|
2026-03-01 12:16:23 +08:00 |
|
|
|
0fede5f46e
|
feat(pproc): 实现预处理器宏连接操作符功能
- 修改concatenate_tokens函数以支持null参数检查,避免空指针访问
- 添加concact辅助函数来处理##连接操作的逻辑
- 重构expand_function_macro中##操作符的实现,支持GNU扩展特性
- 实现对可变参数宏中##操作的正确处理,包括逗号删除逻辑
- 改进object宏中的##连接操作处理
- 添加多个单元测试用例验证连接操作符的正确性
- 修复字符串连接时的边界条件处理
refactor(tests): 重命名预处理器单元测试文件
- 将test_unit.c重命名为test_pproc_unit.c以更明确标识测试范围
|
2026-02-27 21:00:14 +08:00 |
|
|
|
72ef3964ce
|
refactor(pproc): 重构预处理器条件编译逻辑
- 提取条件判断逻辑到独立函数 scc_pproc_parse_if_need_skip
- 使用辅助函数 in_if, in_elif, in_else, in_endif 简化条件处理
- 添加宏 __SCC_PPROC_LOG_PNT 统一错误和警告处理逻辑
- 增加嵌套条件测试用例验证非活动状态下的正确行为
|
2026-02-27 17:06:04 +08:00 |
|
|
|
13de9d713b
|
fix(pproc): 修复预处理器对空行的处理逻辑
- 移除了错误的ENDLINE类型提前返回逻辑
- 将ENDLINE类型的处理移到正确的位置
- 添加了针对条件编译中空行的测试用例
fix(cli): 更新include路径参数的帮助文本
- 修正英文帮助文本为"Add directory to the include search paths"
- 修正中文帮助文本为"添加系统头文件到搜索路径"
|
2026-02-26 10:52:32 +08:00 |
|
|
|
51869bf081
|
feat(pproc): 改进宏处理器以支持括号嵌套和GNU扩展
- 实现了括号深度跟踪来正确分割带括号的宏参数
- 添加了对 GNU 扩展中 `##` 操作符逗号删除的支持
- 新增辅助函数 `got_left_non_blank` 和 `got_right_non_blank`
来优化查找非空白 token 的逻辑
- 改进了错误消息以显示预期但得到的实际值类型
fix(pproc): 修复条件编译和包含文件路径的错误消息
- 在 `scc_pproc_parse_if_condition` 中改进错误消息格式
- 修复 `switch_file_stack` 函数中的日志字符串格式问题
test(pproc): 添加宏处理相关的单元测试
- 增加了连接操作符、嵌套宏、括号处理等测试用例
- 添加了 C99 标准示例和 GNU 变参宏删除逗号的测试
- 包含了复杂的宏展开场景测试
chore(justfile): 更新构建脚本添加调试目标
- 为 `test-scc` 目标添加了 `debug-scc` 调试版本
- 更新构建命令以支持开发模式
feat(cbuild): 添加 dry-run 模式和改进编译器参数
- 为编译器类添加 dry-run 功能,只打印命令不执行
- 改进 scc 编译器的包含路径处理逻辑
- 为命令行解析器添加 dry-run 参数选项
refactor(log): 重命名 static_assert 为 StaticAssert 避免冲突
- 为了避免与标准库冲突,将自定义 static_assert 重命名为 StaticAssert
style(scc_core): 移除未使用的预定义宏定义
- 删除了不再需要的基础类型前缀宏定义
fix(scc_core): 初始化 ring 测试中的未初始化变量
- 为测试函数中的字符变量添加初始化值避免未定义行为
|
2026-02-21 23:53:44 +08:00 |
|
|
|
8007825800
|
feat(pproc): 实现预处理器条件编译和可变参数宏支持
- 添加了完整的条件编译功能,包括 #if、#elif、#else、#endif 指令
- 实现了数值常量表达式的解析和求值
- 支持嵌套条件编译和与其他指令混合使用
- 实现了可变参数宏定义和 __VA_ARGS__ 替换功能
- 改进了宏展开机制以正确处理可变参数宏
- 重构了预处理器指令处理逻辑,提高了代码可维护性
- 添加了相应的单元测试用例验证新功能
|
2026-02-21 15:59:31 +08:00 |
|
|
|
b705e5d0ad
|
feat(argparse): 添加列表类型参数支持
新增 scc_argparse_list_t 类型用于处理多个字符串值的参数,
并添加相应的配置函数 scc_argparse_spec_setup_list。
fix(lexer): 调整关键字标记处理逻辑
将关键字子类型从 SCC_TOK_SUBTYPE_KEYWORD 改为
SCC_TOK_SUBTYPE_IDENTIFIER,并移除相关的枚举定义。
refactor(lexer): 优化跳过换行功能实现
修改 scc_lexer_skip_until_newline 函数实现,改进循环逻辑和错误处理。
feat(pproc): 完善预处理器条件编译支持
重构条件编译状态管理,添加对 #ifdef、#ifndef、#elifdef、
#else、#endif 等指令的支持,并实现嵌套条件处理。
refactor(pproc): 优化文件包含路径处理
添加最大包含深度限制,改进包含路径添加功能,
修复文件状态结构命名。
docs(log): 更新日志模块标准库依赖
调整 stdarg.h 包含逻辑,更新编译器内置宏定义名称。
feat(core): 扩展核心类型定义
添加基础数据类型别名定义,完善类型系统支持。
feat(main): 实现命令行包含路径参数
添加 -I/--include 参数支持,允许用户指定额外的头文件搜索路径。
|
2026-02-21 10:46:49 +08:00 |
|
|
|
08a60e6e8a
|
feat: 添加预处理器宏定义的字符串化和连接操作支持
- 实现了 # 和 ## 预处理器操作符的功能
- 添加了 token 深拷贝和移动函数以支持宏展开
- 修改预处理器展开逻辑以正确处理宏参数替换
- 增加了宏参数分割时对空白字符的处理
fix: 修复预处理器宏展开中的内存管理和逻辑错误
- 修正了宏展开集合的数据结构初始化方式
- 修复了函数式宏调用时括号匹配的判断逻辑
- 改进了宏参数解析过程中空白字符的处理
- 解决了 token 在宏展开过程中的所有权管理问题
chore: 为 justfile 添加文件统计命令并优化构建配置
- 新增 count-file 命令用于统计代码文件数量
- 调整了输出文件的默认命名规则
- 优化了词法分析器 token 释放时的字段重置逻辑
|
2026-02-19 11:20:01 +08:00 |
|
|
|
c86071416d
|
feat(pproc): 实现宏展开功能并重构宏定义接口
- 新增 pproc_expand.h 头文件,定义宏展开相关的数据结构和函数接口
- 重命名宏相关类型和函数,将 scc_pp_* 前缀统一改为 scc_pproc_*
- 修改宏参数解析逻辑,支持更灵活的参数处理方式
- 实现完整的宏展开功能,包括对象宏和函数宏的展开
- 添加字符串化操作符 (#) 的支持
- 改进预处理器主循环逻辑,优化宏展开流程
- 更新单元测试用例,增加对宏参数解析和字符串化的测试
|
2026-02-18 18:18:57 +08:00 |
|
|
|
2de5ae59f5
|
feat(pproc): 实现C语言预处理器功能并重构项目依赖
- 新增预处理器库(pproc),替代原有的pprocessor模块
- 实现完整的宏定义解析功能,支持对象宏和函数宏
- 添加条件编译指令处理(#if、#ifdef、#ifndef、#else、#elif、#endif)
- 实现宏展开机制,包括嵌套宏和递归宏处理
- 添加宏定义测试用例,覆盖基本功能和复杂场景
- 在cbuild.toml中更新依赖配置,移除parser、ast、ast2ir、ir等未完成模块
- 新增lexer工具函数用于token流处理
- 添加宏定义表管理功能,支持宏的创建、查找、删除操作
- 实现宏参数解析和替换列表处理
|
2026-02-17 22:47:25 +08:00 |
|