|
|
c99f64708e
|
feat(parser): 改进解析器错误处理和表达式解析逻辑
- 在初始化解析中添加缺失的赋值操作符检查
- 改进后缀表达式解析逻辑,处理嵌套情况
- 添加数组下标初始化的赋值操作符验证
- 修复主表达式解析中的返回语句处理
refactor(pproc): 优化预处理器宏展开和位置追踪
- 添加token复制函数来保持原始位置信息
- 重构宏展开函数参数传递方式
- 修复字符串化参数的位置信息处理
- 改进可变参数宏的处理逻辑
test(parser): 增加标签语句和字符串字面量测试用例
- 添加返回语句with复合字面量的测试
- 增加标签继续语句的测试用例
- 添加字符串连接的解析测试
test(pproc): 添加预处理器位置追踪测试
- 增加双重宏定义位置追踪测试
- 添加带参数宏定义位置追踪测试
- 增加字符串化操作位置追踪测试
docs: 更新代码中的宏定义和注释
- 修正未定义标识符的拼写错误
- 添加必要的头文件包含
- 改进错误消息提示文本
|
2026-03-13 13:48:55 +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 |
|