韩天峰
|
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 |
韩天峰
|
1e7401b57d
|
refactor(php): 优化SsaPropOptimizer中的节点类型检查和代码清理
- 移除未使用的NodeAbstract导入
- 修正注释中的拼写错误touched again afterward
- 将节点名称类型检查从通用Node改为具体的Node\Identifier
- 删除冗余的字符串类型检查逻辑
- 简化ArrayDimFetch节点的条件判断逻辑
|
3 months ago |
韩天峰
|
ba8c96712a
|
fix(optimizer): 解决对象属性优化中的动态调用安全检查问题
- 添加了对 eval 和 include 语句的对象属性访问保护
- 实现了内部函数和静态方法调用的安全性检查机制
- 新增了 isSafeObjectExposureCall 方法来判断安全的对象暴露调用
- 修复了对象别名和动态属性操作中的潜在风险
- 添加了相关的单元测试验证安全性检查逻辑
|
3 months ago |
韩天峰
|
4757bd353c
|
perf(perf): 添加对象静态属性性能测试
- 添加了对象类型的静态属性 $o
- 实现了 static_prop_add_object 测试函数
- 在测试函数中创建 stdClass 对象并设置属性
- 使用 isset 检查对象静态属性的性能测试
- 注释掉原有的性能测试调用
- 添加新的对象静态属性测试用例
|
3 months ago |
韩天峰
|
feb5041d2e
|
feat(php): 添加静态属性赋值检查和本地槽位优化支持
- 在 AssignOpTrait 中添加对静态属性赋值的支持
- 扩展 CompilerBase 以实现静态属性类型检测和赋值验证
- 添加 assertCanAssignStaticProp 方法进行静态属性赋值检查
- 重构静态属性本地槽位生成逻辑,支持不同数据类型
- 为对象属性提升优化添加安全检查机制
- 新增测试用例验证静态属性原生类型默认值功能
- 更新函数上下文文档注释以反映静态属性槽位映射变化
|
3 months ago |
韩天峰
|
4ff12b58d1
|
fix(php): 修复父类引用和命名参数错误处理问题
- 在parent类型声明前检查classDef是否存在,避免在类外部使用parent关键字时报错
- 改进命名参数缺失默认值时的错误节点定位逻辑
- 为parent类引用添加类上下文检查,防止在类外部使用parent关键字
|
3 months ago |
韩天峰
|
dec9849c69
|
fix(php): 修复PHP预处理器中的方法重写检查逻辑
- 将参数名称比较从弱类型比较改为严格类型比较
- 修正类、枚举和trait的方法标志位处理逻辑
- 更新抽象方法重写错误消息以更准确反映非抽象类的情况
|
3 months ago |
韩天峰
|
68bd54c6c3
|
fix(php): 修复PHP翻译器中的路径验证和错误消息问题
- 添加对空路径的验证并显示相应错误消息
- 修正路径判断逻辑使用严格比较操作符
- 在类解析中添加对枚举类型的处理
- 修复方法重写错误消息中类名的显示问题
|
3 months ago |
韩天峰
|
8aa1745e1d
|
feat(parser): 添加对Big*数值类型不支持运算符的检查
- 在BinaryOpTrait中添加Big*类型运算符支持检查逻辑
- 检测到BigFloat、Decimal或BigInt类型使用不支持的运算符时抛出错误
- 添加测试用例验证模运算符%对BigFloat类型的不支持
- 添加测试用例验证按位与运算符&对Decimal类型的不支持
- 添加测试用例验证左移运算符<<对BigFloat类型的不支持
- 添加测试用例验证按位或运算符|对Decimal类型的不支持
|
3 months ago |
韩天峰
|
051c4a45fd
|
feat(parser): 添加对嵌套 list() 解构赋值的支持
- 在 AssignOpTrait 中实现嵌套列表解构逻辑
- 添加临时变量生成用于处理嵌套数组
- 集成 parseAssignToList 方法处理嵌套 list 结构
- 保持原有非嵌套情况下的行为不变
- 添加完整的嵌套 list 解构功能测试用例
- 确保多层嵌套的列表解构能够正确执行
|
3 months ago |
韩天峰
|
2bfd171a24
|
fix(php): 修复作用域管理和类型转换问题
- 修正了 leaveScope 方法中的作用域级别递减顺序
- 将致命错误改为普通错误以处理浮点数到大整数的转换
- 使用严格相等比较修复数组变量检测逻辑
|
3 months ago |
韩天峰
|
b89dd177b3
|
feat(generator): 添加可变参数联合类型检查支持
- 在 arginfo 生成中添加对可变参数的支持
- 实现可变参数联合类型的运行时类型检查逻辑
- 添加循环遍历可变参数并逐个验证类型的功能
- 生成适当的错误消息以指示可变参数中的具体错误位置
- 添加测试用例验证可变参数联合类型和可空类型的运行时检查功能
|
3 months ago |
韩天峰
|
8c411085d1
|
fix(php): 处理可变参数占位符避免错误收集
- 添加对 VariadicPlaceholder 节点类型的检查
- 跳过可变参数占位符的变量收集逻辑
- 防止对占位符节点进行无效的引用参数处理
|
3 months ago |
韩天峰
|
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 |
韩天峰
|
cdd0b05bf7
|
test(analysis): 添加SSA分析相关组件的单元测试
- 添加SsaFlags常量值的测试验证
- 添加SsaVar对象创建和默认值的测试
- 添加PiConstraint约束条件的测试用例
- 添加SsaBlock基本块结构的测试验证
- 添加VarState变量状态管理的测试
- 添加SsaBuilder构造器基础功能测试
- 添加控制流图CFG构建的测试用例
- 添加goto语句和标签处理的测试
- 添加类型约束构建buildPiConstraints的测试
- 添加
|
3 months ago |
韩天峰
|
de50cad4a8
|
refactor(optimizer): 将函数访问修饰符从私有更改为受保护
- 将 FuncCallOptimizer 中的 genFuncGetArgs 和 genFuncGetArg 方法从 public 改为 protected
- 将 SsaPropOptimizer 中的辅助方法从 private 改为 protected,包括 collectObjectAssignments、scanStmtForObjectAssign、resolveNewExprClass 等
- 将 SsaTypeOptimizer 中的常量和辅助方法从 private 改为 protected,包括 SAFE_INT_BINARY_OPS、SAFE_INT_ASSIGN_OPS 和各种检测方法
- 此更改允许子类继承和重用这些优化器中的实用方法
|
3 months ago |
韩天峰
|
8950c6d51d
|
fix(compiler): 优化数组编译避免复制操作并更新依赖版本
- 在数组编译过程中添加临时变量清理机制,避免数组复制操作
- 将 phpx 依赖从 2.3.1 版本更新至 2.3.3 版本
- 更新翻译器版本号从 0.2.0 至 0.2.3
- 提升内部版本计数器从 1058 至 1060
- 添加新的数组功能测试用例
|
3 months ago |