|
|
c99f64708e
|
feat(parser): 改进解析器错误处理和表达式解析逻辑
- 在初始化解析中添加缺失的赋值操作符检查
- 改进后缀表达式解析逻辑,处理嵌套情况
- 添加数组下标初始化的赋值操作符验证
- 修复主表达式解析中的返回语句处理
refactor(pproc): 优化预处理器宏展开和位置追踪
- 添加token复制函数来保持原始位置信息
- 重构宏展开函数参数传递方式
- 修复字符串化参数的位置信息处理
- 改进可变参数宏的处理逻辑
test(parser): 增加标签语句和字符串字面量测试用例
- 添加返回语句with复合字面量的测试
- 增加标签继续语句的测试用例
- 添加字符串连接的解析测试
test(pproc): 添加预处理器位置追踪测试
- 增加双重宏定义位置追踪测试
- 添加带参数宏定义位置追踪测试
- 增加字符串化操作位置追踪测试
docs: 更新代码中的宏定义和注释
- 修正未定义标识符的拼写错误
- 添加必要的头文件包含
- 改进错误消息提示文本
|
2026-03-13 13:48:55 +08:00 |
|
|
|
e6511c508c
|
refactor(ast): 调整AST结构体和枚举类型的声明表示方式
将结构体、联合和枚举类型的字段表示从向量改为声明指针,
允许name和decl字段为null,更新相关初始化函数的断言检查,
使结构更加灵活并支持不完整类型定义。
BREAKING CHANGE: 修改了scc_ast_type结构体中record和enumeration
子类型的字段表示方法,从fields向量改为decl指针。
|
2026-03-11 21:53:19 +08:00 |
|
|
|
1fceeca011
|
feat(parser): 启用parser和ast模块并重构解析器结构
- 在cbuild.toml中启用parser和ast依赖项
- 将AST内置类型枚举重命名为SCC_AST_BUILTIN_TYPE_*前缀格式
- 修复ast_def.h中的类型字段命名,将builtin改为type
- 添加逗号操作符支持到表达式操作符枚举中
- 更新字面量表达式的lexeme字段为const char*指针和owned标志
- 重构解析器头文件结构,分离为parser.h、parser_utils.h、scc_sema.h等
- 实现新的解析器工具函数,包括预览、消费、回溯等功能
- 更新声明解析逻辑,使用新的解析器接口进行token处理
- 添加符号表语义分析功能框架
- 修复词法分析器中token移动时的空指针检查
- 统一使用scc_tree_dump_printf替代直接的scc_printf调用
|
2026-03-09 15:25:12 +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 |
|
|
|
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 |
|
|
|
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 |
|
|
|
9d85dc130d
|
feat(lexer): 添加词法分析器对##操作符的支持
- 重命名lexer_token.h为scc_lexer_token.h以保持命名一致性
- 在词法分析器中实现##操作符的识别和处理
- 修改头文件包含路径和类型定义的位置
- 修复token结构体定义的顺序问题
fix(lexer): 初始化lexer中的cur变量避免未初始化问题
- 在scc_lexer_get_token函数中初始化scc_sstream_char_t cur变量
refactor(core): 增强ring缓冲区功能并添加cstring比较函数
- 在scc_core_ring.h中添加空值检查防止fill函数为空时崩溃
- 添加scc_ring_by_buffer宏用于通过缓冲区创建ring实例
- 在scc_core_str.h中添加scc_cstring_cmp函数用于字符串比较
|
2026-02-18 18:17:52 +08:00 |
|