Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Cavvy 5.1.0 Bug 修复清单

本文件按模块分类列出 5.1.0 版本中修复的所有问题。


编译器核心

类型系统

问题修复内容相关 Commit
泛型类字段类型未替换class_analysis.rs 中添加字段类型的泛型参数替换198399ad
泛型方法参数/返回类型未替换type_check.rs 中对方法参数和返回类型进行泛型参数替换198399ad
多类型参数解析失败expr_inference.rs 中修复类型参数解析逻辑,支持 Pair<K, V>198399ad
泛型类方法查找失败TypeRegistry::find_method 中支持泛型类名解析为基础类名198399ad
泛型类型匹配失败ClassInfo::types_match_exact 中支持模板与实例化类型匹配198399ad
嵌套泛型与移位符冲突提取泛型类型实参解析为公共函数,支持 >>/>>> 作为嵌套泛型结束符05d469eb
指针类型命名空间兼容新增指针类型命名空间兼容检查b18a00f7
using 别名查找类型TypeRegistry::find_qualified_class 添加 using 别名匹配逻辑619baad9
类型兼容检查不完善重构类型兼容检查逻辑,支持命名空间和泛型类型匹配b18a00f7
加法运算类型限制优化加法运算类型支持,允许非字面量数值与字符串相加b18a00f7

语义分析

问题修复内容相关 Commit
AddressOf 返回错误类型修复为返回 Type::Pointer 而非 Type::Int64f65e3e08
Deref 未正确处理 Pointer修复语义分析器中 Deref 对 Type::Pointer 的处理f65e3e08
控制流条件类型检查缺失补全 if/while/for/do/switch 等控制流的条件类型检查5f90c9f1
静态方法调用解析错误重构静态方法调用解析逻辑,优先匹配当前类静态方法5f90c9f1
方法名拼写错误提示差新增方法名拼写建议功能,优化未找到方法的错误提示5f90c9f1
源文件路径前缀问题修复源文件路径处理,移除 Windows \\?\ 前缀5f90c9f1
错误重映射逻辑缺陷重构错误重映射逻辑,传递并使用 source_map 参数5f90c9f1

代码生成

问题修复内容相关 Commit
解引用赋值不支持添加代码生成器对解引用赋值的支持 (generate_deref_assignment)f65e3e08
store 指令类型不匹配修正代码生成时 store 语句中目标指针类型错误ddfde110
if 语句 merge 块缺少 terminator检测 then 和 else 块是否都返回,如果是则不创建 merge 块5c9a1a4f
静态成员 codegen null fallback修复静态成员代码生成时的空值回退问题7ffd308d
对象地址获取偏移量错误修复对象地址获取时的偏移量错误87c71260
布尔值打印逻辑错误直接存储并输出 true/false 而非 117c1b871
字符串拼接整数转换统一使用 i32 类型处理17c1b871
this 关键字类型识别修复 this 关键字类型识别问题9258c96a
数组字段访问生成优化数组字段访问代码生成逻辑9258c96a
switch 语句生成逻辑优化 switch 语句生成逻辑9258c96a
switch 分支终止判断修正 all_cases_terminate 判定规则,仅将 return 作为终止语句a8f44d8e

错误报告

问题修复内容相关 Commit
错误报告文件名显示错误语义分析错误现在正确显示错误发生的源文件路径1d9eb313
错误报告行号映射问题修复错误报告系统在处理包含文件时的行号映射问题ebd3f9ee
字段赋值错误信息不足改进错误报告,添加字段名和类名信息8c9d5b08

预处理器

问题修复内容相关 Commit
#define 行尾注释处理添加 remove_line_comments 辅助函数,支持 ///* */ 注释移除84734c98
符号链接下无法找到 caylibs使用 canonicalize 解析符号链接,兼容 Linux 下 /proc/self/exeb3574c22
包含文件行号对齐修复预处理器包含文件行号对齐问题c9a2e2f3
宏替换边界检查修复预处理器宏替换边界检查问题8c9d5b08
include 示例文件名错误修正为正确的 File.cayb3574c22

网络模块 (Network.cay)

问题修复内容相关 Commit
socket 句柄类型不匹配修复 TcpSocketTcpServerUdpSocket 类的句柄类型91eca938
跨平台 socket 发送参数类型不兼容修复非 Windows 平台 send/sendto 长度参数类型不匹配7cdaf483
setsockopt 超时参数传递错误修正 TcpServersetsockopt 的超时参数传递7cdaf483
c_int 与 int 类型混用将超时参数数组从 c_int 改为 intf67c30f2
Cay 语言数组声明语法错误将 C 风格静态数组改为 Cay 语言动态数组初始化bb76c254
TcpSocket 构造函数访问修饰符修正为正确的访问修饰符3d71041c
HttpClient.send 返回值判断修复返回值判断逻辑3d71041c
EasyHTTP char 隐式转 int修复导致的符号问题3d71041c

标准库

Math.cay

问题修复内容相关 Commit
Math.abs(int) INT_MIN 溢出添加溢出处理d5dffc5e
Math.abs(long) LONG_MIN 溢出添加溢出处理d5dffc5e
Math.smoothStep 除零添加 a==b 除零防护d5dffc5e
Math.clamp 参数顺序自动交换 min/max 如果顺序错误d5dffc5e
Math.gcd INT_MIN 溢出处理溢出问题d5dffc5e
Math.frac 范围错误使用 floor 确保返回 [0,1)d5dffc5e
Random.nextDouble RAND_MAX使用正确值 2147483647d5dffc5e
Random.nextBool 模运算偏差使用位运算避免偏差d5dffc5e
Random.nextInt 溢出处理溢出情况d5dffc5e
Random.nextGaussian log(0)防护 log(0),缓存第二个值d5dffc5e
Vector2/3.div/normalize 除零除零返回 NaN 而非静默失败d5dffc5e
Math.integrate 硬编码移除硬编码 sin 函数d5dffc5e
Math 最小 int 字面量溢出修复最小 int 字面量溢出问题c9a2e2f3

File.cay

问题修复内容相关 Commit
exists() 修改 atime使用 access() 替代 fopen()d83ef93b
size() TOCTOU 竞态条件使用 FileInfo.stat-based 方法d83ef93b
writeFormat 命名混淆重命名为 writeInterpolatedd83ef93b
writeFormat 复杂度 O(n^2)使用 StringBuilder 优化至 O(n)d83ef93b
readAllLines 双倍内存峰值改为流式读取d83ef93b
finalize() 错误传播静默处理关闭错误d83ef93b

StringPlus

问题修复内容相关 Commit
format 占位符拼接逻辑修复占位符拼接逻辑3d71041c

链接与构建 (ir2exe)

问题修复内容相关 Commit
ELF 动态链接器未设置自动检测并添加可用的系统动态链接器路径b446bd5b
重复添加启动对象文件检查是否已经添加过启动文件避免重复符号235eac9a
Linux 平台编译链接问题添加 GNU ld 风格参数、加载 CRT 启动文件211a454b
Cavvy 运行时库缺失自动检测并构建 Cavvy 运行时库8443c429
crt2.o 错误crt2.o 改为 crt1.o8b511914
lld 链接器风格错误使用 GNU ld 风格参数而非 COFF 风格8b511914

CI / 构建脚本

问题修复内容相关 Commit
Windows 链接缺少 xml2s.lib创建空静态库作为占位符69c6e259
llvm-sys 静态/动态链接配置多次调整,最终移除 force-static 适配多平台041045fa, d742a6b1, 5810947c
CI 环境变量未跨步骤生效补全 LLVM 依赖安装和环境变量设置07e99d75
setup-llvm.py 解压路径错误修改解压逻辑,将文件解压到 bin 子目录af36ce46
setup-llvm.py 下载链接层级添加 bin 子目录层级匹配实际结构023bb274
setup-llvm.py 中文编码全局 UTF-8 编码重定向标准输出/错误流39208413
git 版本检测误报过滤编译生成的无后缀 ELF 可执行文件变更bdf122e0

测试

问题修复内容相关 Commit
test_calling_conventions Linux 失败将 Windows Sleep API 替换为 POSIX usleep580b936a
跨平台可执行文件路径移除硬编码的 .exe 后缀6846141c, ed3edba9
inline-ir 测试触发 llvm-sys 重编译替换 cargo run --release 为直接二进制执行a09a93eb
测试可执行文件路径适配优先使用 CARGO_BIN_EXE_cavly 环境变量a626b3b0
非 Windows socket 类型转换添加显式类型转换44215680