韩天峰
|
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 |
韩天峰
|
c9d92e4581
|
fix(php): 更新库文件引用和类型检查消息生成
- 将 libmpdec.lib 和 libmpdec++.lib 替换为带版本号的 libmpdec-4.0.1.dll.lib 和 libmpdec++-4.0.1.dll.lib
- 修改类型检查错误消息中的字符串拼接方式,使用 genCharPtr 方法处理函数名和类型字符串
- 修复返回值类型检查消息的字符串构造逻辑
|
3 months ago |
韩天峰
|
c7c9a8e263
|
refactor(php): 重构 SSA 构建器中的返回和抛出表达式检查
- 将直接 instanceof 检查替换为 isReturnExpr 和 isThrowExpr 方法调用
- 添加 AstNodeType trait 以支持新的表达式类型检查方法
- 统一终端语句的判断逻辑,提高代码可读性和可维护性
|
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 |
韩天峰
|
204cdfb668
|
refactor(php): 重构PHP预处理器中的属性处理逻辑
- 提取类属性创建逻辑到独立的 addClassProperty 方法
- 简化构造函数参数提升属性的解析流程
- 统一常规属性声明和构造函数属性提升的处理方式
- 移除重复的属性解析代码,提高代码复用性
- 优化空值类型判断逻辑,减少条件分支嵌套
|
3 months ago |
韩天峰
|
83a81e8df8
|
refactor(php): 简化属性类型解析逻辑
- 移除手动类型映射逻辑,统一使用 parseTypeDecl 方法处理
- 添加 propClass 变量存储属性类信息
- 将解析后的类型直接赋值给属性定义对象
- 确保所有属性类型都通过标准方法进行解析和转换
|
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 |
韩天峰
|
79d4c28c91
|
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 |
韩天峰
|
207bc6b48b
|
test(compiler): 添加类方法重写顺序测试用例
- 创建 class-method-override-order.php 测试文件,包含子类先于父类定义的场景
- 实现 ClassMethodOverrideTest 类,验证编译器对类方法重写的双向递归处理
- 添加 testChildBeforeParentOverride 方法,测试父子类方法重写关系的正确识别
- 验证父类方法被正确标记为被子类覆盖的状态
- 确保子类方法未被错误标记为已覆盖状态
- 通过反射访问编译器内部的 classMethodOverride 属性进行断言验证
|
3 months ago |
韩天峰
|
f803a0fd41
|
refactor(Php): 优化方法重写检测逻辑以支持子类预处理顺序
- 提取 fullMethodName 的小写转换为独立变量
- 添加对子类是否已覆盖方法的检查机制
- 实现递归检查所有子类及其后代子类的同名方法定义
- 更新父类方法重写标记逻辑以支持动态调用处理
- 添加完整的文档注释说明新的方法重写检测功能
|
3 months ago |
韩天峰
|
a30205b058
|
refactor(php): 重构方法重写检查逻辑
- 将 checkParentMethodCanBeOverridden 方法从 Preprocessor 类移动到 Translator 类
- 移除 Preprocessor 类中的方法重写检查实现
- 在 Translator 类中添加完整的父类方法重写检查功能
- 实现私有方法不能被重写的验证逻辑
- 添加对内置类私有方法的重写检查支持
- 保持原有的方法重写标记逻辑在 Translator 中继续工作
|
3 months ago |
韩天峰
|
b33cdeb086
|
refactor(php): 重构参数类型解析和声明处理方法
- 将 parseParameterType 方法从 CompilerBase 移动到 Preprocessor
- 将 parseDeclare 方法从 CompilerBase 移动到 Translator
- 保持原有功能不变但优化代码结构分布
|
3 months ago |
韩天峰
|
a524211cd3
|
refactor(php): 重构PHP编译器基础功能并完善类继承支持
- 将parseFunction方法从CompilerBase.php迁移到Translator.php中
- 添加SsaBuilder和Skip异常类的引入声明
- 移除Preprocessor.php中的方法重写检测逻辑
- 在Translator.php中恢复类方法重写的检测和处理机制
- 添加新的继承测试示例文件A0.php、C0.php和main.php
- 更新simple.php示例文件内容
- 优化函数解析过程中的SSA分析和变量类型优化逻辑
|
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 |
韩天峰
|
1111cc0c27
|
refactor(php): 优化变量赋值表达式解析逻辑
- 提取变量类型获取逻辑到局部变量以提高可读性
- 移除冗余的类型检查转换逻辑
- 简化赋值操作中的类型处理流程
- 保持原有的类型推断功能不变
- 改进代码结构以增强维护性
|
3 months ago |
韩天峰
|
c5f38a3d05
|
fix(parser): 修复变量类型推断问题
- 当右侧表达式为无类型但左侧变量已有已知原生类型时,
使用左侧类型进行转换以确保类型安全
- 在赋值操作中添加类型检查逻辑,避免类型丢失问题
- 更新 fibo 和 fibo_r 函数参数类型声明为 int
- 添加 issetor 性能测试用例以验证类型推断优化效果
|
3 months ago |
韩天峰
|
5e549a4c15
|
perf(compiler): 优化静态属性访问性能并增强类型检查
- 添加对静态属性 unset 操作的错误处理
- 实现静态属性的 C++ 引用优化提升访问性能
- 为整型和浮点型静态属性添加原生引用支持
- 在函数上下文中添加静态属性引用映射表
- 更新微基准测试包含静态属性操作性能测试
- 添加静态属性 unset 的单元测试用例
- 修复静态属性访问相关的类型声明问题
|
3 months ago |
韩天峰
|
2af89f270e
|
refactor(php): 优化PHP编译器中的整数类型推断和溢出检测
- 启用之前被注释掉的 optimizeVarTypes() 方法调用
- 添加安全整数运算操作的常量定义,包括位运算和取模运算
- 改进表达式溢出检测逻辑,移除幂运算的特殊处理并将其标记为危险操作
- 实现更精确的整数运算危害检查函数 exprHasIntHazard
- 添加递归变量使用检测功能 exprUsesVar 和 isVarNamed 辅助方法
- 扩展危险整数操作检查范围,涵盖控制流语句中的条件表达式
-
|
3 months ago |
韩天峰
|
571efa94c4
|
暂时关闭类型窄化
|
3 months ago |
韩天峰
|
981a8613b5
|
fix(generator): 修复只读属性的默认值初始化问题
- 在生成 PHP stub 时为只读属性使用 ZVAL_UNDEF 初始化
- 防止对只读属性进行类型默认值初始化
- 添加空指针检查以避免访问可能不存在的变量名称
|
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 |
韩天峰
|
48a8ddd8b5
|
fix(optimizer): 修复变量名转义问题
- 在处理变量组时添加了变量名转义逻辑
- 防止特殊字符导致的解析错误
|
3 months ago |
韩天峰
|
9beb5cbba2
|
fix(parser): 修复赋值操作符和递增递减操作符的上下文状态管理
- 在 parseAssignOp 方法中正确保存和恢复 inAssignExpr 上下文状态
- 在 parsePreInc 方法中正确保存和恢复 inAssignExpr 上下文状态
- 在 parsePostOp 方法中正确保存和恢复 inAssignExpr 上下文状态
- 在 parsePreDec 方法中正确保存和恢复 inAssignExpr 上下文状态
- 修复 FuncCallOptimizer 中对函数参数类型的检查逻辑,排除 VariadicPlaceholder 占位符情况
|
3 months ago |
韩天峰
|
c8e6f2ecc4
|
fix(php): 为方法调用添加异常处理以解决动态调用问题
- 在 findNativeMethod 调用周围添加 try-catch 块
- 捕获 DynamicCall 异常以处理内部类继承的方法
- 添加注释说明无法静态解析类型的情况
- 保持原有逻辑在非异常情况下的正常执行流程
|
3 months ago |
韩天峰
|
403991357e
|
feat(generator): 优化属性默认值代码生成逻辑
- 替换原有的 ZVAL_UNDEF 初始化方式为类型特定的默认值设置
- 添加 getTypeDefaultValueCode 方法处理各种数据类型的默认值
- 支持整型、浮点型、布尔型、字符串、数组等类型的默认值初始化
- 为测试用例添加对象整型属性优化功能
- 确保可空类型正确初始化为 NULL 值
|
3 months ago |
韩天峰
|
46800d9dc9
|
docs(aot): 添加 AOT 编译器优化优先级和 PHP 源码优化器分析文档
- 新增 AOT 编译器优化优先级重新评估文档,重点分析类型推断、去虚拟化、逃逸分析等核心优化策略
- 详细阐述 GCC/Clang 二次编译架构下的优化分工原则
- 新增 PHP Zend Optimizer/OPcache/JIT 设计分析文档,提取可借鉴的编译器优化技术
- 包含 SSA/e-SSA 构建、类型推断、SCCP、DCE、逃逸分析等关键技术的实现细节
- 提供 PHP 优化器位掩码类型系统的具体设计方案和算法实现
- 分析 PHP 的稀疏条件数据流框架(SCDF)和通用优化 pass 流水线架构
|
3 months ago |
韩天峰
|
195013ae7c
|
perf(php): 优化PHP到C++转换性能
- 添加相同操作符编译时类型优化,对相同原始类型直接使用C++ ==
- 实现is_*函数编译时消除,当SSA缩小类型时直接返回true
- 添加count()函数字面量数组编译时计算
- 实现字符串字面量编译时操作优化,支持strtoupper、strtolower、trim等函数
|
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 |
韩天峰
|
abccfc2c8b
|
清理:清理 AI 产生的临时文档
|
3 months ago |
韩天峰
|
ff6ca6c03a
|
重构:将代码迁移至独立的 PHP 源文件,减少核心类的代码行数
|
3 months ago |
韩天峰
|
e7680c5e81
|
feat(php): 扩展 refval 函数支持数组元素和对象属性引用
- 添加对 refval($arr[key]) 数组元素引用的支持
- 添加对 refval($obj->prop) 对象属性引用的支持
- 实现 expandRefvalExpr 方法处理复杂引用表达式
- 增强错误检查验证 refval 参数类型
- 添加相应的单元测试用例
|
3 months ago |
韩天峰
|
c238892409
|
fix(parser): 修复StdContainer注释生成问题
- 修正了StdContainer注释中的数组声明引用错误
- 统一了容器类型的声明处理逻辑
- 确保了注释生成的一致性格式
|
3 months ago |
韩天峰
|
4176e1f4c2
|
fix(aot): 修复trait常量继承和数组常量传播问题
- 将trait中的私有常量改为受保护,以便子类能够访问
- 添加数组常量在继承链中的清理机制
- 实现数组常量向子类的传播功能
- 新增测试用例验证trait方法和常量继承行为
|
3 months ago |
韩天峰
|
6b65d23ffe
|
fix(php): 修复闭包中的返回类型检查逻辑
- 在返回类型检查条件中添加闭包上下文判断
- 避免在闭包内部执行不必要的返回类型验证
- 确保闭包环境下的代码生成正确性
- 修复三处相同的返回类型检查逻辑以保持一致性
|
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 |
韩天峰
|
593c6ec2a5
|
feat(compiler): 添加内置 mpdecimal 头文件目录支持
- 添加 mpdecimal C 库头文件路径到编译器包含路径
- 添加 mpdecimal++ C++ 库头文件路径到编译器包含路径
- 支持在 Linux/macOS 平台下自动配置 mpdecimal 依赖库路径
|
3 months ago |
韩天峰
|
15a6d4196f
|
docs(guide): 移除 Windows Clang 支持测试指南和重构文档
- 删除 CLANG_TEST_GUIDE.md 测试指南文档
- 移除 REFACTORING_README.md 重构快速指南
- 删除 REFACTORING_SUMMARY.md 重构总结报告
- 移除 svg-to-ico.js SVG 转 ICO 工具脚本
- 清理 mv.php 文件重命名工具脚本
|
3 months ago |
韩天峰
|
bbb43664fc
|
test(aot): 添加trait测试用例和decimal类型toString方法测试
- 新增单个trait简单方法测试用例,验证const数组和方法调用功能
- 添加decimal类型toString方法测试用例,验证浮点数转字符串功能
- 更新版本号从1057到1058
|
3 months ago |
韩天峰
|
5fa7b61cc8
|
chore(deps): 更新 swoole/phpx 依赖版本
- 将 swoole/phpx 从 ~2.3.0 更新到 ~2.3.1 版本
|
3 months ago |
韩天峰
|
28d1432664
|
refactor(type): 移除不必要的类实例断言检查
- 删除了 MapType 类中冗余的 get_class 断言验证
- 简化了类型比较逻辑,提升代码简洁性
- 更新版本号从 1055 到 1057
|
3 months ago |