韩天峰
|
fc2cc22594
|
feat(php): 添加对原生函数调用中命名参数的支持
- 在 checkNativeCallArgs 中验证命名参数
- 实现 getFunctionArgNameIndex 和 getVariadicArgIndex 辅助方法
- 添加 validateNativeNamedCallArgs 方法验证命名参数规则
- 重构函数调用参数处理逻辑支持命名参数重排序
- 实现变长参数和命名参数的混合处理
- 添加构建原生变长参数的方法
- 更新参数类型转换逻辑
- 添加相关测试用例验证功能正确性
|
3 months ago |
韩天峰
|
279fe22d82
|
fix(compiler): 解决对象属性类型检查和赋值操作问题
- 添加对象属性赋值时的类型验证逻辑
- 实现固定类型对象属性的 unset 操作默认值恢复
- 修复 std 命名空间内置类型方法的类型检测
- 更新对象属性类型推断和方法返回类型解析
- 添加对象属性子类赋值到基类类型的错误检查
- 修改测试用例以反映 AOT 编译器的严格类型行为
|
3 months ago |
韩天峰
|
21338f022f
|
refactor(compiler): 优化对象属性提升逻辑并增强危险操作检测
- 移除对this_对象属性unset操作的特殊警告处理
- 重构对象属性提升逻辑,支持更多类型的安全提升判断
- 添加unsafeObjectProps上下文跟踪以标记不可安全提升的属性
- 扩展危险属性操作检测功能,支持动态属性名和引用操作检测
- 优化循环变量分析器,增加对字符串函数的支持
- 添加多项单元测试验证属性提升和危险操作检测的准确性
- 改进代码生成,支持不同类型的属性值宏展开
|
3 months ago |
韩天峰
|
dbaa5a10e0
|
feat(compiler): 添加循环变量优化器以提升整数类型推断
- 在CompilerBase中集成LoopVarOptimizer trait
- 实现range-proven循环变量优化算法,支持while和for循环
- 添加多项式时间复杂度的循环计数器类型窄化功能
- 集成安全检查机制防止不安全的整数运算推导
- 添加针对strlen、count等函数的非负整数类型识别
- 实现循环边界安全检测避免溢出风险
- 新增多种循环模式的测试用例验证优化效果
- 更新现有测试注释以反映新的类型推断行为
|
3 months ago |
韩天峰
|
8950c6d51d
|
fix(compiler): 优化数组编译避免复制操作并更新依赖版本
- 在数组编译过程中添加临时变量清理机制,避免数组复制操作
- 将 phpx 依赖从 2.3.1 版本更新至 2.3.3 版本
- 更新翻译器版本号从 0.2.0 至 0.2.3
- 提升内部版本计数器从 1058 至 1060
- 添加新的数组功能测试用例
|
3 months ago |
韩天峰
|
6a1fb828f8
|
feat(php): 添加对foreach列表解构语法的支持
- 在AssignOpTrait.php中导入ArrayItem类并更新类型检查
- 在CompilerBase.php中添加parseForeachItemAsList方法处理列表解构
- 在CompilerBase.php中修改parseForeachArray方法支持List_节点
- 在Translator.php中扩展foreach循环翻译逻辑以处理列表解构
- 添加foreach-list.phpt和iterator-list.phpt测试用例验证功能
|
3 months ago |
韩天峰
|
dce5190422
|
test(aot): 添加构造函数属性提升类型边缘情况测试
- 添加数组类型构造函数属性提升测试
- 添加可空数组类型构造函数属性提升测试
- 添加对象类型构造函数属性提升测试
- 添加联合类型构造函数属性提升测试
- 添加无类型提示构造函数属性提升测试
- 添加受保护访问修饰符构造函数属性提升测试
- 添加混合数组类型构造函数属性提升测试
- 验证各种类型提示在构造函数属性提升中的行为
|
3 months ago |
韩天峰
|
96b4fefb58
|
refactor(php): 将平台检测和编译功能从CompilerBase迁移到Translator
- 从CompilerBase.php移除平台检测相关方法(detectPlatform, initializeNewArchitecture, setCppCompiler)
- 从CompilerBase.php移除代码格式化方法(formatCppCode)和save方法
- 从CompilerBase.php移除编译命令选项相关方法(getCompileCommandOptions等)
- 在Translator.php中新增平台检测方法(detectPlatform)
- 在Translator.php中新增代码格式化方法(formatCppCode)和save方法
- 在Translator.php中新增编译命令选项相关方法(getCompileCommandOptions等)
- 移除CompilerBase.php中未使用的SsaBuilder导入
- 在Translator.php中新增必要的平台和编译器工厂类导入
|
3 months ago |
韩天峰
|
e5e94b034c
|
test(aot): 添加多种AOT编译测试用例
- 添加浮点数边界情况测试,包括NAN、INF、-INF的处理
- 添加带接口的枚举功能测试,验证枚举实现接口和使用trait的场景
- 添加try/finally无catch块的异常处理测试
- 添加魔术方法__invoke和__toString的表达式调用测试
- 添加parent::method()父类方法调用测试
- 添加严格类型声明strict_types=1的功能测试
|
3 months ago |
韩天峰
|
2da2bc094f
|
feat(php): 添加对一等可调用语法的支持
- 在编译器中实现 foo(...) 语法的占位符处理逻辑
- 添加对函数调用占位符的识别和生成支持
- 新增 first-class callable 语法的测试用例
- 实现可调用性检查的正确处理机制
|
3 months ago |
韩天峰
|
9eec3e7483
|
feat(aot): 添加对全局变量和Stmt_Block语句块的支持
- 在CompilerBase中添加Stmt_Block解析支持
- 新增global-int测试用例验证全局变量整型操作
- 新增globals-null-arithmetic测试用例处理NULL全局变量算术运算
- 修复switch语句缩进格式问题
- 初始化micro_bench中last_time变量
- 注释掉部分性能测试以聚焦核心功能
|
3 months ago |
韩天峰
|
403991357e
|
feat(generator): 优化属性默认值代码生成逻辑
- 替换原有的 ZVAL_UNDEF 初始化方式为类型特定的默认值设置
- 添加 getTypeDefaultValueCode 方法处理各种数据类型的默认值
- 支持整型、浮点型、布尔型、字符串、数组等类型的默认值初始化
- 为测试用例添加对象整型属性优化功能
- 确保可空类型正确初始化为 NULL 值
|
3 months ago |
韩天峰
|
b640fef73b
|
feat(compiler): 实现方法调用去虚化优化和BigFloat sqrt支持
- 添加classSubClasses属性用于存储反向类继承关系
- 扩展abs函数支持到BigFloat类型并添加sqrt函数实现
- 允许Big类型与原生类型之间的隐式转换
- 实现方法调用去虚化逻辑,支持final类、final方法、私有方法等情况
- 添加SSA稳定对象类型推断功能
- 修复SSABuilder中空参数值的处理
- 优化SSA类型分析中的非可缩小类型处理
- 添加多个
|
3 months ago |
韩天峰
|
a4a869b7cd
|
feat(php): 添加SSA对象属性引用提升优化器
- 引入SsaPropOptimizer trait实现对象属性引用提升功能
- 扩展CompilerBase类集成新的SSA属性优化器
- 实现对象稳定性分析和安全属性访问检测
- 支持对SSA证明稳定的对象进行int/float属性提升
- 添加对魔术方法、引用捕获等危险操作的安全检查
- 为稳定对象属性生成C++引用别名提升性能
- 添加相关单元测试验证优化效果
|
3 months ago |
韩天峰
|
bf31da8e7b
|
feat(compiler): 实现SSA分析和类型优化功能
- 添加SsaBuilder类用于构建SSA形式和e-SSA分析
- 引入SsaTypeOptimizer trait实现基于SSA的类型窄化优化
- 将FuncCallOptimizer移至Optimizer命名空间
- 在FunctionContext中添加SSA分析器实例
- 实现变量类型的自动窄化为C++原生类型(int/float)
- 添加防止危险操作的类型安全检查
- 支持常量折叠和溢出检测逻辑
- 重构函数参数名称以提高代码可读性
- 添加完整的SSA构建器单元测试覆盖各种场景
|
3 months ago |
韩天峰
|
d377777571
|
feat(php): 优化 strlen 函数的编译时折叠
- 修改 CompilerBase.php 中的条件判断逻辑,确保代码生成正确返回
- 在 FuncCallOptimizer.php 中为 strlen 函数添加常量字符串优化
- 当传入参数为字符串字面量时直接计算长度并生成常量值
- 添加编译时 strlen 常量折叠的测试用例验证功能
|
3 months ago |
韩天峰
|
e7680c5e81
|
feat(php): 扩展 refval 函数支持数组元素和对象属性引用
- 添加对 refval($arr[key]) 数组元素引用的支持
- 添加对 refval($obj->prop) 对象属性引用的支持
- 实现 expandRefvalExpr 方法处理复杂引用表达式
- 增强错误检查验证 refval 参数类型
- 添加相应的单元测试用例
|
3 months ago |
韩天峰
|
4176e1f4c2
|
fix(aot): 修复trait常量继承和数组常量传播问题
- 将trait中的私有常量改为受保护,以便子类能够访问
- 添加数组常量在继承链中的清理机制
- 实现数组常量向子类的传播功能
- 新增测试用例验证trait方法和常量继承行为
|
3 months ago |
韩天峰
|
3b5345d68e
|
feat(php): 添加联合类型和可空类型的运行时检查支持
- 在 ArgInfo 中新增 typeCheck、typeStr 和 typeNode 属性用于类型检查
- 在 FunctionDef 中新增 returnTypeCheck、returnTypeStr 和 returnTypeNode 属性
- 实现 buildTypeCheckFromNode 方法解析联合/可空类型节点
- 实现 genSingleTypeCondition 方法生成单个类型检查条件
- 实现 genUnionParamCheck 方法生成参数类型检查代码块
- 实现 genUnionReturnCheck 方法生成返回值类型检查代码块
- 在编译过程中集成参数和返回值的运行时类型检查
- 添加 union-param-check.phpt 和 union-return-check.phpt 测试用例
- 支持基本类型、类类型和特殊类型的联合类型检查
- 实现详细的错误消息生成机制
|
3 months ago |
韩天峰
|
bbb43664fc
|
test(aot): 添加trait测试用例和decimal类型toString方法测试
- 新增单个trait简单方法测试用例,验证const数组和方法调用功能
- 添加decimal类型toString方法测试用例,验证浮点数转字符串功能
- 更新版本号从1057到1058
|
3 months ago |
韩天峰
|
1ea7ec0764
|
feat(compiler): 添加性能分析和 objval 函数支持
- 在 Clang、Gcc 和 Msvc 编译后端中添加 PROF_OUTPUT_FILE 宏定义支持
- 实现编译器性能分析模式,通过 --profile 参数启用并自动链接 -lprofiler 库
- 添加 .prof 文件分析功能,支持 php bin/compiler.php app.prof 格式调用 pprof 工具
- 实现 objval() 函数的 AOT 编译支持,用于对象类型转换
- 更新编译器缓存逻辑,启用性能分析时强制重新编译
- 添加 Linux 平台限制检查,非 Linux 系统使用 --profile 参数时显示错误提示
- 创建 objval 函数的单元测试用例
|
3 months ago |
韩天峰
|
04a56a7762
|
fix(stub): 修复异常处理并支持属性默认值中的new操作
- 在RuntimeException中添加堆栈跟踪信息输出
- 新增对属性默认值为new表达式的处理逻辑
- 添加测试用例验证nullable类型属性的处理
- 支持构造函数参数中使用new操作符作为默认值
|
3 months ago |
韩天峰
|
26a538680f
|
refactor(php): 将 stream_cast 函数替换为 toStream 方法
- 移除 stream_cast 全局函数实现
- 将 stream_cast($stream) 调用转换为 $stream->toStream() 方法调用
- 更新编译器中的流类型识别逻辑,移除对 stream_cast 的特殊处理
- 修改标准容器解析器中的 unsafePtr 为 boxExpr 属性
- 更新相关测试文件中的调用方式和断言
- 替换不安全指针转换为标准容器转换方法
|
3 months ago |
韩天峰
|
8deb99c372
|
test(aot): 添加对象属性toArray方法测试用例
- 测试toArray()方法调度功能
- 验证(array)强制转换调用toArray()而不是读取属性表
- 添加User类包含toArray方法的测试
- 添加PlainUser类无toArray方法的对照测试
- 验证有toArray方法时强制转换调用该方法
- 验证无toArray方法时回退到属性表读取
|
3 months ago |
韩天峰
|
a4ac86524c
|
refactor(compiler): 优化关键字方法分派逻辑
- 简化了关键字方法和扩展方法的检测流程
- 统一了接收器类型的获取方式
- 提取了重复的空值检查逻辑
- 改进了代码结构和可读性
- 为关键字扩展方法添加了测试用例
|
3 months ago |
韩天峰
|
1bb0324605
|
feat(compiler): 支持字符串到大数类型的转换
- 添加字符串到Decimal类型的转换逻辑
- 添加字符串到BigInt类型的转换支持
- 添加字符串到BigFloat类型的转换支持
- 为字符串字面量提供直接转换优化
- 添加测试用例验证链式调用场景
|
3 months ago |
韩天峰
|
32ac23630a
|
fix(type): 修复stream和box伪类型的类型转换处理
- 移除CompilerBase中对stream/box类型的硬编码转换逻辑
- 在Preprocessor中添加stream/box到var类型的运行时转换
- 修改Translator中参数类型的C++代码生成逻辑
- 更新UniversalMethodCall中stream/box类型的参数匹配规则
- 添加测试用例验证数组元素链式调用的类型转换功能
|
3 months ago |
韩天峰
|
3f9c76df5d
|
refactor(compiler): 替换 std::unsafe_cast 为对象方法调用并优化类型转换
- 将测试文件中的 std::unsafe_cast 调用替换为对应的 toStd* 方法
- 移除 std::unsafe_cast 函数实现,改为使用 $source->toStdMap 等方法
- 更新错误消息输出,移除函数名前缀
- 添加 TO_METHOD_TYPE_MAP 常量定义类型转换方法映射
- 修改变量赋值检查逻辑,支持新的 to* 转换方法
- 移除对 objval 函数的支持,统一使用 toObject 方法
- 新增 parseToStdAssign 方法处理标准容器转换分配
- 添加 genToObjectCall 和 genToConvertCall 代码生成方法
- 重构 UniversalMethodCall 类,移除重复的转换方法定义
- 优化类型检测逻辑,支持新的转换方法类型推断
|
3 months ago |
韩天峰
|
a4d28fbe6b
|
refactor(tests): 替换 objval 函数调用为 toObject 方法
- 移除了全局 objval 函数实现
- 将所有测试文件中的 objval($obj, Class::class) 替换为 $obj->toObject(Class::class)
- 更新了 std-vector、std-map、std-unordered-map、std-array 和 type_decl 测试
- 添加了新的 var_convert 链式调用测试用例
- 统一了对象类型转换的调用方式
|
3 months ago |
韩天峰
|
4a2b2ef201
|
test(aot): 更新幂运算整数溢出测试的期望输出
- 修正了 pow-int-overflow.phpt 测试用例的期望值精度
- 将期望输出从 1.2089258196146E+24 更新为 1.2089258196146292E+24
- 提高了测试断言的数值精度匹配准确性
|
3 months ago |
韩天峰
|
4c3d7ca4c3
|
feat(compiler): 添加对 bigint、bigfloat 和 decimal 类型的支持
- 在 zendTypeMap 中添加了 bigint、bigfloat 和 decimal 类型映射
- 实现了类型名称的大小写不敏感匹配逻辑
- 添加了对 std 类中 bigInt、bigFloat 和 decimal 方法的类型推断
- 支持 native_types、decimal_types 和 bigint_types 的大小写不敏感解析
- 在 polyfills.php 中定义了新的类型常量
- 添加了相关测试用例验证大数运算功能
- 优化了变量类型检测和赋值时的类型处理逻辑
|
3 months ago |
韩天峰
|
c604fc09ab
|
feat(compiler): 添加对 Big* 类型的字符串转换和数学函数优化支持
- 在 echo 表达式中实现 BigInt、BigFloat 和 Decimal 类型的自动 toString 转换
- 为 abs、pow、sqrt、floor、ceil、round 数学函数添加 Big* 类型返回值推断
- 优化二进制连接操作中的类型转换逻辑,支持 Big* 类型到字符串的转换
- 为 (string) 强制转换、strval() 函数和 floor/ceil/round 函数添加 Big* 类型支持
- 新增测试用例验证 Big* 类型的数学函数优化功能
- 添加 Decimal 类型的精确计算和舍入处理示例
|
3 months ago |
韩天峰
|
5129bab900
|
test(aot): 添加动态调用命名参数功能测试
- 实现了动态实例化与命名参数的测试用例
- 验证动态方法调用与参数展开的功能
- 测试控制器类的构造函数命名参数传递
- 验证动态方法调用返回结果的正确性
- 添加了多场景动态调用的预期输出验证
|
3 months ago |
韩天峰
|
011cb1ed8c
|
test(aot): 添加大整数、大浮点数、十进制数和流类型的容器测试
- 添加 std-bigfloat 类型的 vector 容器功能测试
- 添加 std-bigint 类型的 vector、map、array 和 foreach 功能测试
- 添加 std-decimal 类型的 vector 容器功能测试
- 添加 std-stream 类型的 vector 容器功能测试
- 实现容器元素类型转换逻辑支持大数值类型
- 修复容器声明中的元素类型转换问题
- 添加新的原生类型映射支持 bigint、bigfloat、decimal 和 stream 类型
|
3 months ago |
韩天峰
|
11acfdf10f
|
refactor(aot): 移除UnsafePtr类型支持并优化std容器实现
- 移除UnsafePtr类型声明及相关参数标记功能
- 修改std容器变量访问方式,统一使用_ref后缀引用
- 更新unsafe_cast函数参数验证逻辑,移除UnsafePtr参数检查
- 重构std容器在C++代码中的声明和初始化方式
- 删除相关测试用例及单元测试中的UnsafePtr验证逻辑
- 统一std容器赋值、遍历、删除操作的引用访问模式
|
3 months ago |
韩天峰
|
000b6a221d
|
fix(tests): 修正测试文件中的路径引用
- 修正 empty-test.phpt 中的静态属性测试文件路径
- 修正 isset-test.phpt 中的静态属性测试文件路径
- 修正 magic-constants.phpt 中 __DIR__ 魔术常量的期望输出
- 修正 ref-call-arg.phpt 中 zip 文件的路径引用
- 修正 static_class_property_read_write.phpt 中的测试文件路径
- 修正 universal_method_expr.phpt 中 Assert.php 的引入路径
|
3 months ago |
韩天峰
|
0043fc78f8
|
feat(php): 添加原生类和接口检查功能
- 新增 isNativeClass 方法用于检查是否为原生类
- 新增 isInterface 方法用于检查是否为接口
- 重构 addObject 方法中的对象验证逻辑
- 修改 TypedObject 使用条件判断逻辑
- 添加内部类测试用例
|
3 months ago |
韩天峰
|
71627fd920
|
fix(compiler): 修复抽象类和接口的类型处理逻辑
- 移除对抽象类和接口参数类型的限制检查
- 简化对象类型推断逻辑,统一处理所有类类型
- 更新 addObject 方法,阻止为抽象类、接口、内部类创建实例
- 修正参数类型处理中的重复对象添加问题
|
3 months ago |
韩天峰
|
bf4c5a7852
|
fix(generator): 解决常量值格式化和命名空间解析问题
- 添加 formatConstValue 函数统一处理常量值格式化
- 修复类常量引用时的字符串转义问题
- 优化 getClassConstValue 方法的命名空间解析逻辑
- 添加 getNamespaceOfClass 工具方法获取类的命名空间
- 更新默认参数处理中的常量值获取方式
- 添加新的测试用例验证默认数组属性功能
|
3 months ago |
韩天峰
|
17fcb16aec
|
fix(php): 修复受保护方法访问检查和字符串转义问题
- 在 CompilerBase.php 中添加 classDef 检查以避免空指针错误
- 在 gen_stub.php 中对字符串表达式进行转义处理
- 将 Utils.php 中的 genCharPtr 和 escapeString 方法设为公共方法
- 添加测试用例验证默认数组属性功能
|
3 months ago |
韩天峰
|
ce7d254709
|
fix(compiler): 修复trait中类常量访问的命名空间解析问题
- 为getNamespacedClassName方法添加可选的当前命名空间参数
- 在gen_stub.php中传递当前类信息到getClassConstValue调用
- 在Translator.php中使用当前类的命名空间信息进行类常量查找
- 在类注册完成后清理ClassInfo::$currentClass避免污染
- 修复self引用时的默认值解析逻辑
|
3 months ago |
韩天峰
|
ec5f393a27
|
fix(php): 将数组类常量更新写入到 ZendVM 中
|
3 months ago |
韩天峰
|
95b1c89053
|
BitInt 支持位运算操作符
|
3 months ago |
韩天峰
|
a4d5d86905
|
test(native_types): 添加 Decimal 和 BigInt 类型的测试用例
- 添加 Decimal 类型的 ceil、floor、round、sqrt、toFloat 方法测试
- 添加 BigInt 类型的 divmod、gcd、powmod、sqrt 方法测试
- 添加 Decimal 和 BigInt 的 pow 和 divmod 运算测试
- 添加 BigInt 的 toInt 和 toFloat 类型转换测试
- 验证各种数学运算的边界情况和负数处理
- 确保所有测试用例都通过严格类型声明验证
|
3 months ago |
韩天峰
|
706f4cc9ab
|
对 phpt 测试文件进行分类 [2]
|
3 months ago |
韩天峰
|
b1284be533
|
对 phpt 测试文件进行分类
|
3 months ago |
韩天峰
|
144b60a3e3
|
feat(compiler): 支持 bigint_types 和 decimal_types 声明指令
- 添加了 bigint_types 和 decimal_types 的 use 指令支持
- 实现了整数字面量自动转换为 BigInt 类型的功能
- 实现了浮点数字面量自动转换为 Decimal 类型的功能
- 添加了新的数学运算方法如 divmod、powmod、sqrt 等
- 更新了类型转换逻辑以支持大数运算
- 添加了相应的测试用例验证功能正确性
- 修改了编译器内部类型检测和转换机制
|
3 months ago |
韩天峰
|
6b5e8ad2e0
|
feat(universal_method): 支持通过反射调用PHP内部函数作为扩展方法
- 移除原有的字符串append方法实现
- 新增universal_method_internal.phpt测试文件验证内部函数扩展方法功能
- 修改findExtensionMethod方法支持先查找用户定义函数再回退到PHP内部函数
- 添加buildInternalExtensionMethod方法构建内部函数扩展方法定义
- 实现validateExtensionFirstParam和validateInternalExtensionFirstParam方法验证参数类型
- 更新测试用例移除已删除的append方法相关测试
|
3 months ago |
韩天峰
|
1476e5a4eb
|
fix(universal-method): 修复扩展方法链式调用的返回类型推断
- 在内置方法查找后添加扩展方法的返回类型检查
- 重构 findExtensionMethod 调用逻辑以支持链式调用场景
- 使用函数定义的返回类型而非默认的 TYPE_VAR
- 移除冗余的命名空间函数查找逻辑
|
3 months ago |
韩天峰
|
69e4386454
|
test(compiler): 添加大数类型运算测试和自增自减操作限制
- 添加 Decimal 算术运算测试用例
- 添加 BigInt 复合赋值运算测试用例
- 添加 Decimal 复合赋值运算测试用例
- 添加 Decimal 比较和转换测试用例
- 添加 BigInt 二元运算符测试用例
- 添加 Decimal 运算符重载测试用例
- 添加 Decimal 一元负号测试用例
- 在编译器中实现对 BigInt、Decimal 和 BigFloat 类型的自增自减操作限制
- 添加 PHPUnit 测试验证自增自减操作错误提示
- 为 BigInt 和 Decimal 类型禁用 ++ 和 -- 操作符
|
3 months ago |