v0.2.0-beta.4
v0.2.0-beta.4
重点关注:内存安全(数组引用计数系统性修复)、编译器兼容性(gcc/clang 全平台通过)、PDO MySQL 驱动。
新增
- PDO MySQL 驱动:在 SQLite 驱动基础上新增 MySQL 驱动,实现 PDO 驱动抽象层。CodeGenerator 自动注入驱动注册代码,
PDO::__construct("mysql:...")开箱即用。CI 已覆盖 Linux/Windows/macOS 三平台 MySQL 集成测试。 - 字符串函数:
strrpos/stripos/strripos三个查找函数。 stream_context_create:占位实现,接收 options 数组参数保持签名兼容。
修复
- 数组元素引用计数系统性修复:
arr_push/arr_set_int/arr_set_str存储数组/对象值时未 retain,导致PDOStatement::fetchAll中result[] = row后 row 被重赋值 free,result 残留悬垂指针(use-after-free)。 - 对象唯一 ID 机制:
t_object新增独立id字段(全局递增计数器),替代refcount & 0xFFFF,var_dump输出符合标准 PHP 行为。 - 数组重赋值双重释放:
$result = func(..., $result, ...)时函数内部 realloc 了旧指针,guard 再次 free 导致堆损坏。新增exprIsCallWithVarArg检测跳过此类释放。 - gcc/clang 编译兼容性:修复多处
static inline前向声明缺失导致的implicit declaration/conflicting types错误(array.h / pcre.c / iconv 等),三平台 gcc/clang/tcc 全部 222 测试通过。 - 闭包
$this捕获:闭包内使用$this时自动捕获 self 指针并增加引用计数。 - 继承类结构体:子类不再重复
_obj字段,修复 upcast 指针偏移错误。 - 注解
newInstance()类型推断:foreach (ROUTE as $v)遍历注解数组时正确推导返回类型,修复Call to undefined method转译错误。 stream_socket_accept错误处理:真正错误抛异常(可 try-catch),超时/EAGAIN 返回 -1,符合 AOT 错误处理原则。- runtime 错误处理:所有公共函数/对象方法改用
tp_throw抛异常,消除静默错误处理。 - Windows
stream_isatty:用GetFileType替代_isatty避免崩溃。 $obj->prop[] = value语法:Parser 支持属性数组 push 赋值。- 命名空间兼容性:类前向声明、静态属性方法调用、拓扑排序等命名空间场景修复。
- macOS
-framework链接:TCC 透传-framework X给系统 ld。 - #2
变更
- PDO 驱动注册自动化:CodeGenerator 自动注入驱动初始化代码到
main(),无需手动注册。
Full Changelog: v0.2.0-beta.3...v0.2.0-beta.4