韩天峰
|
df78e177f4
|
refactor(optimizer): 优化函数调用参数转换逻辑
- 提取参数转换逻辑到独立的 applyArgConversion 方法中
- 将数组类型参数转换改为 convertArrayExpr 方法
- 在 UniversalMethodCall 中实现 PHP 函数调用优化
- 添加 tryOptimizePhpFn 方法支持直接 C++ 调用
- 实现 mergeConstArgs 方法合并常量参数
- 保留动态 php::call 作为备选方案
|
2 months ago |
韩天峰
|
797c19824d
|
Revert "refactor(Php): 将PHP函数调用改为C++函数调用"
This reverts commit b1cc95818a.
|
2 months ago |
韩天峰
|
8514d489a3
|
test(array): 添加数组方法测试用例
- 新增 array_method 测试文件 4.phpt
- 添加 contains 方法的基本功能测试
- 验证严格模式下的类型检查行为
- 确保数组包含方法的正确性验证
|
2 months ago |
韩天峰
|
b1cc95818a
|
refactor(Php): 将PHP函数调用改为C++函数调用
- 将数学函数的handler从php_fn改为cpp_fn,并更新函数命名空间为php::fn::
- 将字符串函数的handler从php_fn改为cpp_fn,并更新函数命名空间为php::fn::
- 将数组函数的handler从php_fn改为cpp_fn,并更新函数命名空间为php::fn::
- 将序列化相关函数的handler从php_fn改为cpp_fn,并更新函数命名空间为php::fn::
- 更新jsonDecodeToObject配置以移除不必要的常量参数设置
|
2 months ago |
韩天峰
|
ef6a9fb8e5
|
refactor(php): 统一PHP函数命名空间从std到fn
- 将所有php::std::前缀的函数调用更改为php::fn::前缀
- 替换AssignOpTrait.php中的pow函数调用路径
- 更新BinaryOpTrait.php中的mod和pow函数调用路径
- 修改CompilerBase.php中的头文件引用,合并为统一的phpx_std.h
- 在CompilerBase.php的throw语句中添加析构函数警告检查
- 更新FuncCallOptimizer.php中的各类数学和标准库函数调用路径
- 移除Translator.php中重复的标准库源文件引用
- 更新UniversalMethodCall.php中的parseStr函数调用路径
|
2 months ago |
韩天峰
|
527c7d62da
|
refactor(tests): 修复测试文件中的变量命名问题
- 删除了 abstract_class.phpt 测试文件
- 将 iterators_004.phpt 中的变量名从 $obj 改为 $obj2 以避免重复使用
- 将 iterators_006.phpt 中的变量名从 $array 改为 $array2 以避免重复使用
- 更新了相关循环中的变量引用保持一致性
|
2 months ago |
韩天峰
|
7939f28f37
|
test(phpunit): 添加抽象类和私有方法重写的测试用例
- 添加 testNewAbstractClass 方法测试抽象类实例化错误
- 添加 testOverridePrivateMethod 方法测试私有方法重写错误
- 使用 exec 方法验证预期的错误消息输出
- 扩展测试覆盖范围以包含更多边界情况
|
2 months ago |
韩天峰
|
57b95e88fd
|
removal(tests): 删除多个类测试文件并更新常量测试期望值
- 删除抽象类方法调用测试文件 tests/core/classes/abstract.phpt
- 删除抽象类实例化测试文件 tests/core/classes/class_abstract.phpt
- 删除对象克隆测试文件 tests/core/classes/clone_004.phpt
- 更新常量基本测试期望输出,移除未定义属性警告信息
- 重命名构造函数析构函数测试中的变量名 $t 为 $t2
|
2 months ago |
韩天峰
|
dbcadeb873
|
feat(php): 添加抽象方法支持和调用保护
- 在 ClassDef 中添加 abstractMethods 数组存储抽象方法
- 实现 addAbstractMethod 和 hasAbstractMethod 方法
- 添加 getMethodFlags 方法统一获取方法标志
- 在 Preprocessor 中解析并添加抽象方法到类定义
- 实现 guardAbstractMethod 防止调用抽象方法
- 在父类方法调用中添加抽象方法检查
- 更新单元测试验证抽象方法调用错误处理
|
2 months ago |
韩天峰
|
35f0775435
|
fix(tests): 修复 __call 方法测试中的预期输出
- 将测试期望值从 "changed" 改回为 "original"
- 修正了方法调用返回值的断言结果
|
2 months ago |
韩天峰
|
ceb5e5963f
|
fix(php): 修复子类作为父类返回时的类型检查问题
- 添加了内部接口类型的检查条件
- 实现了接口继承链的递归验证逻辑
- 支持传递性接口继承关系的检查
- 修复了Iterator等扩展Traversable的接口验证问题
|
2 months ago |
韩天峰
|
8fa49e078f
|
refactor(php): 优化迭代器处理逻辑以使用类入口指针和字面量字符串
- 使用 getClassEntryPtr 获取 IteratorAggregate 和 Iterator 类入口指针
- 使用 getLiteralString 替换硬编码的方法名字符串
- 将 instanceOf 检查从字符串比较改为类入口指针比较
- 将方法调用从字符串参数改为字面量字符串参数
- 使用 getFuncPtr 替换 get_object_vars 函数调用的硬编码字符串
|
2 months ago |
韩天峰
|
0c7464b4b3
|
refactor(php): 从函数调用优化器中移除 reset 和 end 函数
- 从 FuncCallOptimizer.php 中移除了 'reset' 和 'end' 函数
- 删除了相关的类型错误测试文件 reset_end_type_error.phpt
- 更新了优化器中的函数列表配置
|
2 months ago |
韩天峰
|
cd3f0743d7
|
fix(aot): 解决trait方法参数类型声明的完全限定名转换问题
- 重构upgradeToFullyQualifiedName方法,支持NullableType和UnionType的递归处理
- 修正逻辑以正确区分内置类型(self/static/parent)与自定义类名的处理方式
- 更新trait预处理器中的参数类型转换实现,确保类型节点正确替换
- 添加对Qualified名称的识别和转换支持
- 移除重复的上下文解析逻辑,提高代码效率
- 新增回归测试用例验证arginfo/zpp匹配问题的修复效果
|
2 months ago |
韩天峰
|
2824d8d21d
|
test(str): 添加字符串索引访问测试用例
- 测试 isset 对字符串布尔索引的处理
- 测试对象作为字符串索引的异常情况
- 验证 PHP 字符串索引访问的行为
- 检查不同类型索引的安全性问题
- 确保字符串索引边界检查功能正常
|
2 months ago |
韩天峰
|
cd2f4d7ac5
|
feat(compiler): 添加trait方法参数类名解析功能
- 实现resolveParamClassName方法处理参数类型中的非完全限定类名
- 在parseTrait阶段解析trait方法参数的类名避免gen_stub时上下文丢失
- 支持NullableType和UnionType类型的参数类型解析
- 添加对self、static、parent等特殊类型名称的处理
- 为trait方法参数类名解析功能添加完整的单元测试用例
|
2 months ago |
韩天峰
|
c7e752422a
|
test(aot): 添加字符串项isset操作的测试用例
- 添加了基本的字符串isset测试文件
- 测试不同索引位置的isset操作行为
- 验证字符串类型在AOT编译下的表现
- 包含null合并运算符的测试场景
|
2 months ago |
韩天峰
|
1e3cf4d25e
|
refactor(php): 优化条件表达式解析逻辑
- 提前解析条件表达式并存储到变量中避免重复计算
- 更新三元运算符表达式的构建方式提高代码可读性
- 添加 preg_match 函数相关的 AOT 编译测试用例
- 添加对象链接操作符相关的引用测试用例
- 完善正则匹配功能的自动化测试覆盖
|
2 months ago |
韩天峰
|
9138dea99f
|
feat(php): 实现赋值表达式返回值和函数参数检查功能
- 在数组赋值操作中添加临时变量存储以支持返回值
- 为属性赋值操作实现逗号表达式确保右值先计算后赋值
- 添加内部函数参数数量验证机制防止运行时错误
- 优化三元运算符表达式确保类型一致性
- 扩展函数调用优化器以支持参数类型和数量检查
- 添加测试用例验证数组维度赋值返回功能
- 添加测试用例验证属性赋值返回功能
- 添加测试用例验证三元运算符类型转换功能
|
2 months ago |
韩天峰
|
246689db4c
|
feat(compiler): 优化函数调用编译器实现支持可变参数类型转换
- 添加 array_merge 混合类型参数测试用例
- 在 CompilerBase 中为表达式添加括号包装确保正确解析
- 将 FuncCallOptimizer 中的所有私有方法和常量改为受保护访问级别
- 实现可变参数类型的类型感知转换功能
- 添加 variadicType 配置选项用于指定可变参数类型
- 扩展参数反射信息获取逻辑包含可变参数类型信息
- 更新生成可变参数调用方法支持类型转换
- 添加基础容器数组表达式转换辅助方法
- 修改返回赋值属性测试用例验证功能完整性
|
2 months ago |
韩天峰
|
26bdf5eb59
|
feat(enum): 支持枚举类型解析和处理
- 添加了枚举类型的语法解析功能
- 实现了对带值枚举(backed enums)的支持
- 添加了枚举案例值的存储和访问机制
- 支持枚举类型的运行时对象处理
- 完善了枚举常量数组的生成逻辑
- 新增了多个枚举相关的测试用例
|
2 months ago |
韩天峰
|
6849c56cc2
|
fix(php): 修复表达式类型检测中的缺失情况
- 添加了对 Expr_Print 表达式的类型检测支持
- 确保类型推断的一致性
|
2 months ago |
韩天峰
|
8517481c52
|
fix(php): 修正print函数的编译输出
- 将php::echo改为php::print以正确处理print表达式
- 添加完整的print函数测试用例验证功能正确性
|
2 months ago |
韩天峰
|
58f45fe97a
|
test(stdlib): 添加标准库函数的全面测试用例
- 添加数组搜索相关函数的测试 (in_array, array_search, array_key_exists, array_keys)
- 添加 base64 编码解码边界情况的测试
- 添加类和接口存在性检查函数的测试 (class_exists, interface_exists, trait_exists 等)
- 添加路径处理函数的边界测试 (dirname, basename)
- 添加类型检查函数的测试 (is_array, is_string, is_object 等)
- 添加数学函数的进制转换和类型检查测试
- 添加数学运算函数的测试 (exp, log, sqrt, 三角函数等)
- 添加字符串大小写转换函数的边界测试
- 添加字符串匹配检查函数的测试 (str_contains, str_starts_with, str_ends_with)
- 添加字符串比较函数的测试 (strlen, strcmp, strcasecmp 等)
- 添加字符串搜索函数的测试 (strstr, strpos, strrpos 等)
- 添加可数和可迭代类型检查的测试
- 添加类型转换函数的测试 (strval, intval, floatval, boolval)
- 添加 URL 编码解码函数的边界测试
|
2 months ago |
韩天峰
|
d26c76b9d8
|
feat(optimizer): 扩展函数调用优化器支持更多字符串和编码函数
- 添加 base64 编码解码函数优化支持 (base64_encode, base64_decode)
- 添加 URL 编码解码函数优化支持 (urlencode, urldecode, rawurlencode, rawurldecode)
- 扩展优化器对常用字符串处理函数的覆盖范围
|
2 months ago |
韩天峰
|
abed2d8d22
|
test(stdlib): 添加标准库函数边缘情况和错误处理测试
- 添加 abs 函数边缘情况测试,包括 PHP_INT_MIN 和 -0.0
- 添加 array_fill 负数计数参数的 ValueError 测试
- 添加 base_convert 无效进制参数的 ValueError 测试
- 添加 bindec/hexdec/octdec 空输入和无效字符测试
- 添加 chr/ord 函数边界值测试
- 添加 count 函数非数组/对象参数的 TypeError 测试
- 添加 explode 空分隔符和限制参数测试
- 添加 intdiv 除零和溢出错误测试
- 添加 log 函数零、负数和无效底数测试
- 添加 reset/end 非数组参数的 TypeError 测试
- 添加 round 非数值参数的 TypeError 测试
- 添加 str_repeat 负数次数的 ValueError 测试
- 添加 strtotime 时间戳 0 和无效日期测试
- 添加 substr 负偏移和长度边界测试
- 添加 version_compare 操作符参数测试
- 移除未使用的 php_std_url.h 头文件和源文件引用
- 更新函数优化配置以改进数学函数和字符串函数支持
- 添加 is_callable 函数处理程序和 max/min 函数的原始实现
- 为 abs、pow、sqrt 函数添加大数类型回退实现
|
2 months ago |
韩天峰
|
8450e69e1c
|
refactor(Php): 优化函数调用优化器中的参数类型常量
- 将简写的参数类型常量重命名为更具描述性的名称
- 为数组类型添加新的参数类型支持
- 更新所有相关的常量引用以使用新命名
- 实现标准容器数组表达式的转换功能
- 修复字符串键名处理中的缺少方法调用问题
|
2 months ago |
韩天峰
|
4e94de6620
|
fix(tests): 修复测试文件编译失败时的异常处理
- 添加了对 compile_php_file 函数抛出异常的捕获和处理
- 引入 CompilationFailureException 类来封装编译失败信息
- 实现了编译失败时将输出写入日志、差异和输出文件的功能
- 在编译失败时正确标记 JUnit 测试状态并返回 FAILED
- 重构了 PHP 文件编译逻辑以捕获编译器输出和错误码
- 添加了对现有二进制文件的清理和缓存清除机制
|
2 months ago |
韩天峰
|
e996dc8b43
|
feat(debug): 添加内存泄漏检测脚本
- 实现了随机数生成函数 gen_random
- 添加了堆排序算法实现 heapsort 和 heapsort_r
- 集成了高精度时间测量功能 gethrtime
- 创建了性能测试框架包括 start_test 和 end_test 函数
- 实现了测试结果显示和统计功能 total
- 添加了主函数 main 来执行完整的性能测试流程
|
2 months ago |
韩天峰
|
0b815d8d1e
|
feat(debug): 添加内存泄漏检测脚本
- 实现了随机数生成函数 gen_random
- 添加了堆排序算法实现 heapsort 和 heapsort_r
- 集成了高精度时间测量功能 gethrtime
- 创建了性能测试框架包括 start_test 和 end_test 函数
- 实现了测试结果显示和统计功能 total
- 添加了主函数 main 来执行完整的性能测试流程
|
2 months ago |
韩天峰
|
bbddd40297
|
refactor(examples): 为基准测试函数添加参数类型声明
- 为 Ack 函数添加 int 类型参数声明
- 为 ackermann 函数添加 int 类型参数声明
- 为 ary3 函数添加 int 类型参数声明
- 为 hash1 函数添加 int 类型参数声明
- 为 hash2 函数添加 int 类型参数声明
- 为 gen_random 函数添加 int 类型参数声明
- 为 heapsort_r 函数添加 int 类型参数声明
- 为 heapsort 函数添加 int 类型参数声明
|
3 months ago |
韩天峰
|
56d9147972
|
docs(repository): 添加仓库开发指南文档
- 新增项目概述说明,包括 Swoole-Compiler 的核心工作流程
- 添加环境搭建和构建命令指南
- 提供测试命令和运行方法说明
- 补充代码格式化配置信息
- 添加项目配置和约定规范说明
- 增加测试相关的开发规范指引
|
3 months ago |
韩天峰
|
581be13a8f
|
test(stdlib): 添加新标准库函数测试用例
- 测试 gettype 函数对不同数据类型的返回值
- 验证 ucfirst 函数首字母大写功能
- 检查 floor 和 ceil 数学函数的正确性
- 测试 max 和 min 函数的数值比较功能
- 验证 uniqid 函数生成唯一标识符的能力
- 测试
|
3 months ago |
韩天峰
|
17e1035e21
|
test(stdlib): 添加新标准库函数测试用例
- 测试 gettype 函数对不同数据类型的返回值
- 验证 ucfirst 函数首字母大写功能
- 检查 floor 和 ceil 数学函数的正确性
- 测试 max 和 min 函数的数值比较功能
- 验证 uniqid 函数生成唯一标识符的能力
- 测试
|
3 months ago |
韩天峰
|
71cd8daad1
|
test(stdlib): 添加新标准库函数测试用例
- 测试 gettype 函数对不同数据类型的返回值
- 验证 ucfirst 函数首字母大写功能
- 检查 floor 和 ceil 数学函数的正确性
- 测试 max 和 min 函数的数值比较功能
- 验证 uniqid 函数生成唯一标识符的能力
- 测试 reset 和 end 数组指针操作函数
-
|
3 months ago |
韩天峰
|
babbbe2fc5
|
feat(php): 添加标准容器编译时计数生成功能
- 实现了 genStdContainerCount 方法用于生成 C++ 整数字面量
- 支持简单变量表达式的容器大小计算
- 支持数组维度获取的层级大小计算
- 处理标准数组、向量、映射等多种容器类型
- 返回平台特定的整数字面量后缀
- 对非标准容器返回 false 以进行错误处理
|
3 months ago |
韩天峰
|
549052df05
|
test(core): 添加核心函数测试用例
- 新增数组函数测试包括in_array、array_search、array_key_exists、array_keys、array_values
- 添加日期时间函数测试涵盖time、date、strtotime功能验证
- 实现字符串函数测试包含dirname、basename、strtr方法校验
- 集成文件系统和数学函数测试覆盖is_dir、is_file、round功能
- 增加杂项函数测试验证md5、version_compare、print_r行为
|
3 months ago |
韩天峰
|
4a38508411
|
test(core): 添加字符串比较和类检查函数的测试用例
- 添加 strcmp、strncmp、strcasecmp、strncasecmp 字符串比较函数测试
- 添加 class_exists、interface_exists、trait_exists、enum_exists 类存在性检查函数测试
- 添加 method_exists、property_exists 方法和属性存在性检查函数测试
- 添加 is_a、is_subclass_of 类型检查函数测试
- 添加 defined 常量定义检查函数测试
- 添加 get_parent_class 获取父类函数测试
|
3 months ago |
韩天峰
|
315220eac6
|
docs: 添加 HHVM/HHBBC 和 KPHP 编译器技术调研文档
- 新增 HHVM/HHBBC 编译器架构分析文档,涵盖全程序分析、类型系统与优化管道
- 新增 KPHP 编译器设计与优化技术调研文档,包含流水线并行编译和智能类型收窄
- 记录可借鉴的创新设计,包括 rewrite rules DSL、smart casts、并行编译管道等
- 分析工具链差异,涵盖测试基础设施、基准测试框架和 IDE 集成方案
- 对比语法兼容性差异,明确支持与不支持的语言特性及架构限制
- 提供优先级评估建议,指导 AOT 编译器的技术改进方向
|
3 months ago |
韩天峰
|
a289f7b778
|
chore(deps): 更新 swoole/phpx 依赖版本
- 将 swoole/phpx 从 ~2.3.3 更新到 ~2.3.4
- 保持其他依赖版本不变
- 更新 composer.json 配置文件
|
3 months ago |
韩天峰
|
0824b2f247
|
feat(php): 添加线程本地存储支持并优化扩展模式下的资源清理
- 在类映射、函数映射和属性映射声明中添加THREAD_LOCAL关键字
- 为类条目、函数和属性映射实现线程本地存储
- 在扩展构建模式下添加RSHUTDOWN阶段的资源清理机制
- 清理函数、类和属性表以确保正确的内存管理
- 添加扩展模式检测和相应的清理代码生成
|
3 months ago |
韩天峰
|
1f479b52d0
|
test(aot): 添加接口类型命中测试用例
- 创建了 Quackable 接口定义
- 实现了 Duck 和 Person 两个类来实现接口
- 添加了 makeItQuack 函数进行类型验证
- 编写了 main 函数测试接口调用行为
- 验证了不同实现类的多态性表现
- 确保接口类型检查功能正常工作
|
3 months ago |
韩天峰
|
0647b6425a
|
fix(php): 修复类常量解析和对象转换功能
- 添加对 self::class、parent::class 和 static::class 的支持
- 实现 parent::class 的继承链验证和错误处理
- 禁止使用 static::class 并提示编译时无法解析
- 移除 objval() 函数中的冗余参数验证逻辑
- 为 self::class 和 parent::class 场景添加测试用例
- 更新版本号至 1064
- 添加 yield 示例代码文件
|
3 months ago |
韩天峰
|
d082de3f6e
|
chore(version): 更新版本号
- 将版本号从 1061 更新为 1063
|
3 months ago |
韩天峰
|
c25aab26c3
|
docs(constants): 更新PHP常量定义
- 添加了错误代码4574的中文描述信息
- 完善了预处理器指令相关的错误提示内容
|
3 months ago |
韩天峰
|
04b3d7de20
|
fix(php): 修复函数调用参数传递中的对象属性处理问题
- 修改 CompilerBase.php 中的参数解析逻辑,统一使用 parseCallArgValue 方法
- 添加 materializeCallArgValue 和 shouldMaterializeCallArg 辅助方法
- 对数组维度获取和属性获取表达式进行去间接化处理
- 在参数转换过程中添加对象属性的特殊处理
- 新增 default array property 测试用例验证数组属性初始化功能
- 新增 unset on arrays and variables 测试用例验证对象参数传递行为
|
3 months ago |
韩天峰
|
e208fe11bb
|
feat(php): 实现多层级 break 和 continue 语句支持
- 添加多层级跳转标志变量 _brk_flag 和 _cnt_flag
- 在循环结束处插入跳转标志检查代码
- 将 switch 语句包装在 do-while(0) 中以支持多层级跳转
- 实现 break N 和 continue N 的计数器递减逻辑
- 添加测试用例覆盖多层嵌套循环和 switch 语句场景
- 支持最多 N 层的跳转指令解析和编译
|
3 months ago |
韩天峰
|
d51b8411e2
|
refactor(php): 更新不支持函数列表
- 将 get_defined_vars 添加到 UNSUPPORTED_FUNCTIONS 数组中
- 保持代码常量定义的一致性
|
3 months ago |
韩天峰
|
9b1477e13b
|
refactor(php): 重构对象属性赋值检查逻辑并优化循环变量检测
- 提取公共的对象属性赋值验证方法 assertCanAssignObjectProperty
- 统一处理对象属性和静态属性的赋值检查逻辑
- 在类型检查中增加对抽象类、接口和未知类的处理
- 优化循环变量依赖检测算法,改进错误处理流程
- 移除静态编译阶段无法确定类型的严格检查,改为运行时处理
- 修复循环变量优化器中的依赖检测中断逻辑
|
3 months ago |
韩天峰
|
51772c1e27
|
refactor(php): 优化SSA类型优化器代码结构
- 移除未使用的 Expr 导入并添加 SsaVar 导入
- 简化 detectSsaDefType 方法中的类型声明
- 移除 Foreach 和 Switch 语句中冗余的节点类型检查
- 提高代码可读性和维护性
|
3 months ago |