韩天峰
995d23cfc8
fix(php): resolve native property assignment type checking and conversion issues
...
- Implement proper type checking for native scalar property assignments from variables
- Add exact type conversion helpers for int, float, and bool property types
- Enforce compile-time validation of static type mismatches in property assignments
- Introduce PHP-style error messages for property type assignment failures
- Optimize property fetch operations with zval macro support in loops
- Refine compound assignment operations to validate variable types before native writes
- Update attribute handling in node parsing to preserve original values correctly
- Enhance property assignment type resolution with comprehensive scalar type mapping
2 months ago
韩天峰
fc5eeb3c0f
refactor:统一整数字面量生成并添加平台后缀支持
2 months ago
韩天峰
c3f0151e87
feat(aot): 支持类继承、接口及抽象类的类型兼容与运行时检查
...
允许子类对象赋值给父类/接口/抽象类声明的类型变量和容器,引入 declaredClass 区分声明类型与实际类型,对无法静态证明的继承关系添加运行时类型
2 months ago
韩天峰
f0e025dad4
feat(aot): 重构动态调用与instanceof解析并新增Symfony模式测试
2 months ago
韩天峰
7b52412f82
fix: remove ref reset on unset
2 months ago
Yurun
254e1607b5
fix(compiler): 修复unset引用变量后对变量的操作
2 months ago
韩天峰
ba354c62c8
fix: 修复空安全链中普通方法调用误判为空安全的问题
2 months ago
韩天峰
f22499bdf9
feat(foreach): 支持动态类型表达式和IteratorAggregate嵌套
...
修复foreach遍历动态表达式时的类型分发,正确处理IteratorAggregate嵌套及无效返回值检测
2 months ago
韩天峰
dfc94ac09e
refactor(compiler): 使用节点属性替代上下文标识处理属性写操作
2 months ago
韩天峰
bffa660427
refactor: 引入 parseWritableIdentifier 替代手动 inAssignExpr 设置
2 months ago
韩天峰
bc6d15c81a
fix(compiler): preserve finally semantics for catch throws
2 months ago
韩天峰
e95f996c06
fix(aot): skip comment-only else branch
2 months ago
Yurun
d0cb1395e5
fix(compiler): 修复 finally 使用变量
2 months ago
韩天峰
bc799fda0a
fix:修复静态回调解析及拼接赋值等编译问题
2 months ago
韩天峰
2e85940bff
refactor(foreach): 提取键值赋值与循环体解析为独立方法
2 months ago
韩天峰
7937f05282
fix: 修复解构键提取、switch默认分支及finally控制流
...
正确处理数组/foreach解构中的键名与嵌套结构,
修复switch中default位于匹配case前时执行顺序错误的问题,
确保finally块在break/continue/goto离开try/catch时被注入,
并支持动态静态方法与属性调用。
2 months ago
NathanFreeman
c73dedc306
如果else分支只有注释,那就不渲染这个分支
2 months ago
韩天峰
bd1a4db9d4
fix(compiler): 修复函数use导入及declare编码解析
...
修复 `use function` 导入时完整命名空间解析错误,存储完整FQN而非仅命名空间部分。
修复 `declare` 语句中字符串/整数类型值的解析,支持 `encoding="UTF-8"` 等声明。
新增相关功能的AOT测试覆盖。
2 months ago
韩天峰
c94be9c6a9
fix(compiler):注入finally块到return路径并修复属性注册
2 months ago
韩天峰
b6d0488ea6
fix(compiler): 修复多处运算符和表达式编译副作用处理
2 months ago
韩天峰
aab412084f
fix: 修复变参参数缺失命名参数及闭包副作用等问题
2 months ago
韩天峰
c740a24501
fix: 修复异常处理与exit语义,重构动态属性操作
2 months ago
韩天峰
6e5b186c91
refactor(php): 重构PHP解析器的表达式处理和动态属性访问
...
- 将parseExpr替换为parseExprAsValue方法,统一处理void表达式转换为null
- 移除多处trimBrackets调用,简化表达式解析流程
- 添加emitDynamicPropertyFetchRead/Write/Unset等统一动态属性访问方法
- 重构PropertyWriteTarget类,将objectExpr和propertyExpr设为私有并添加getter方法
- 合并动态属性访问的目标路径和传统回退路径
- 修改测试框架中的exec方法为compile方法,更新相关测试用例
- 移除void表达式相关的错误检查,在运行时将其转换为null值
- 优化类型转换表达式的括号处理,移除不必要的trimBrackets调用
- 统一动态属性读取、写入、引用和取消设置的操作方法
2 months ago
Yurun
c59184bed7
fix(compiler): 支持数组和属性数组追加同时链式赋值
2 months ago
Yurun
8684d1652c
fix(compiler): 支持属性和数组元素作为赋值表达式右值
2 months ago
Yurun
b6e937a4cc
fix(compiler): 修复对象::class获取类名
2 months ago
Yurun
580f1fb64f
fix(compiler): 修复引用参数是对象时调用方法错误
2 months ago
韩天峰
df5dd2a5f6
refactor(php): 重构属性写入目标处理逻辑以支持动态对象属性
...
- 引入 PropertyWriteTarget 类来统一管理属性写入目标
- 修改 parseAssignPropertyFetch 方法以接受 PropertyWriteTarget 参数
- 移除已废弃的 parseAssignStaticProperty 方法
- 添加动态对象属性读取和写入的目标级辅助方法
- 更新复合赋值操作以使用统一的属性写入目标处理
- 改进属性引用获取逻辑以复用目标级引用辅助方法
- 在 .gitignore 中添加 swoole_compiler 和 tpc 目录排除规则
- 更新重构计划文档以反映动态属性写入目标的实现进展
2 months ago
韩天峰
b13fdc60fa
refactor(php): 重构PHP编译器代码结构和方法实现
...
- 在AnonClassGenerator中优化匿名类方法访问逻辑,移除闭包传递改为直接对象引用
- 将BinaryOpTrait中的语句行追加逻辑提取为统一的formatCapturedStmtLines方法
- 重构ClosureGenerator中的闭包生成逻辑,分离箭头函数和匿名闭包的处理方式
- 提取CompilerBase中的通用方法如formatCapturedStmtLines、formatTernaryReturn等
- 优化返回类型检查逻辑,将重复的临时变量分配代码封装为通用方法
- 在ResourceFileGenerator中将版本号处理从函数映射改为循环处理
- 重构Translator中的文件过滤和命令参数处理逻辑为显式循环
- 将方法重写兼容性检查中的错误抛出逻辑提取为专用方法
-
2 months ago
韩天峰
903af8c477
test(closure): 添加闭包use值和引用捕获功能测试
...
- 新增closure-use-reference-capture.phpt测试文件验证闭包捕获行为
- 添加ClosureTest类实现use引用捕获编译测试
- 在CompilerBase中添加stringifyParsedExpr方法处理表达式字符串化
- 重构函数调用参数处理逻辑提取为独立方法确保数组和命名参数正确处理
- 修改for循环条件和迭代部分的表达式解析确保正确转换
- 添加use-reference-capture.php测试代码验证闭包引用捕获功能
2 months ago
韩天峰
248156b3b4
refactor(php): 重构PHP解析器中的条件表达式处理逻辑
...
- 修复BinaryOpTrait.php中的缩进问题,统一if语句的缩进格式
- 修改CompilerBase.php中接口常量处理逻辑,为数组类型常量添加原生名称前缀
- 重构多个辅助函数将引用传递改为返回值方式,包括appendStmtLines和相关返回函数
- 简化条件表达式和匹配表达式的代码生成逻辑,提高代码可读性
- 优化布尔表达式短路求值的实现方式
- 统一代码风格,减少不必要的变量赋值操作
2 months ago
韩天峰
0af331db16
refactor(php): 重构类名比较和属性访问检查逻辑
...
- 移除对 PropertyAccessResolver 的依赖,直接实现类名比较功能
- 使用 strcasecmp 函数进行大小写不敏感的类名比较
- 重写 isSameOrSubclassOf 方法,通过 getParentClass 遍历继承链
- 简化 canAccessProtectedProperty 逻辑,优化作用域检查条件
- 更新单元测试中的属性访问器解析方法调用方式
2 months ago
韩天峰
c05c63b8aa
refactor(php): 重构属性写入逻辑以统一动态属性访问
...
- 将动态属性读写操作收敛到 emitDynamicPropertyRead/Write 辅助方法
- 引入 PropertyWriteTarget DTO 来统一属性写入目标的准备和检查
- 通过 preparePropertyWriteTarget 统一处理对象和静态属性写入目标
- 使用 assertCanAssignPropertyWrite 进行属性写入的静态检查
- 通过 wrapPropertyWriteTypeCheck 实现运行时类型检查包装
- 更新复合赋值和自增自减操作符的属性访问逻辑
- 在文档中记录属性写入路径的重构计划和当前进展
2 months ago
韩天峰
7d601a3f8c
refactor(php): 优化对象属性获取逻辑并添加性能测试
...
- 替换直接访问 objectProps 数组为 getObjectPropInfoByVar 方法
- 添加 registerObjectPropVar 和 registerHoistedObjectPropVar 辅助方法
- 移除重复的数组键检查逻辑,简化代码流程
- 新增性能基准测试文件用于测量不同调用方式的性能差异
- 添加实例和静态属性获取目标类以改进解析器结构
2 months ago
韩天峰
8711545637
refactor(php): 重构属性访问解析逻辑以提高代码可读性
...
- 提取实例属性获取逻辑到独立方法 resolveInstancePropertyFetchTarget
- 提取静态属性获取逻辑到独立方法 resolveStaticPropertyFetchTarget
- 添加 InstancePropertyFetchTarget 和 StaticPropertyFetchTarget 数据结构
- 优化原生实例属性获取的条件判断流程
- 简化原生静态属性获取的处理逻辑
- 提取静态属性引用注册逻辑到独立方法 registerStaticPropertyRef
- 改进代码结构以提高可维护性和可测试性
2 months ago
韩天峰
f631b395fc
refactor(php): 重构静态属性获取解析逻辑
...
- 将 findNativeStaticProperty 方法重命名为 resolveNativeStaticPropertyFetch 并返回对象
- 引入 StaticPropertyFetchResolution 类来封装静态属性获取的结果
- 修改条件判断从 if ($native) 到 if ($native !== null) 以明确检查 null 值
- 更新 parseNativeStaticPropertyFetch 方法的返回类型为 ?string
- 优化静态属性引用变量的生成逻辑,使用解析结果中的类名
- 移除不再使用的 $class 参数并简化方法调用
- 添加新的解析器相关类文件以支持属性访问解析功能
2 months ago
韩天峰
6f15c61720
refactor(php): 重构原生属性访问逻辑以提高代码可维护性
...
- 引入 NativePropertyAccess 类来统一管理原生属性访问信息
- 将直接使用 getAttribute 的方式改为专用的 getter/setter 方法
- 修改属性变量检查逻辑从字符串验证改为 null 检查
- 优化属性访问结果的应用方式,使用对象封装替代多个属性设置
- 添加类型安全的原生属性访问获取方法
- 统一属性变量的设置和获取接口
2 months ago
韩天峰
c34d11c136
refactor(php): 重构属性访问和赋值类型检查逻辑
...
- 提取属性定义获取逻辑到 getNativePropertyDef 方法
- 添加原生属性值源设置和检查方法
- 创建 PropertyAssignTypeInfo 类处理属性赋值类型信息
- 统一属性访问类型检查的实现方式
- 简化静态属性访问和动态属性访问的处理流程
- 更新文档中的重构计划说明
2 months ago
韩天峰
59c9477bf5
refactor(php): 重构属性访问解析器以使用只读上下文接口
...
- 将 PropertyAccessResolver 从依赖 CompilerBase 大类改为依赖 PropertyAccessContext 接口
- 在 CompilerBase 中实现 PropertyAccessContext 接口并提供 getClassDef 和 getParentClass 方法
- 移除 PropertyAccessResolver 构造函数中的闭包参数,改用接口方法调用
- 更新 Preprocessor 中的父类获取逻辑以直接使用命名空间类名解析
- 修改 Translator 中的父类解析方式以保持一致性
- 在重构计划文档中添加只读接口设计原则说明
2 months ago
韩天峰
87c54236a0
refactor(php): 重构属性访问解析逻辑以使用专门的解析器方法
...
- 将 findNativeProperty 方法替换为更具体的 resolveNativeInstanceProperty 和 resolveNativeStaticProperty
- 添加 resolveNullsafePropertyChain 方法处理空安全属性链检查
- 引入 PropertyAccessResult 类来统一属性访问结果的返回格式
- 使用 isNativePropertyAccess 方法替代直接的属性检查
- 移除旧的泛型 findNativeProperty 入口点以避免布尔参数扩散
- 更新 AssignOpTrait 中的属性访问检查逻辑
- 修改动态属性递增递减操作中的原生属性检查方式
- 调整编译器基类中的属性解析实现细节
2 months ago
韩天峰
4b1b20c7ca
refactor(php): 重构属性访问解析逻辑并引入编译阶段管理
...
- 引入 PropertyAccessResolver 类统一处理属性访问逻辑
- 添加编译阶段管理 (idle/prepare/convert) 确保模块正确使用时机
- 将 isSameClassName、isSameOrSubclassOf、canAccessProtectedProperty 方法委托给 resolver
- 实现 PropertyAccessResult DTO 承载属性访问解析结果
- 为 Preprocessor 和 Translator 添加编译阶段进入/恢复逻辑
- 创建 CompilerPhaseTest 验证阶段管理功能
- 更新文档说明重构计划和模块拆分方向
- 修改函数返回值测试以适配重构后的测试需求
2 months ago
韩天峰
64cf047f07
fix(parser): 解决空安全操作符在写入上下文中的使用问题
...
- 在赋值操作中添加空安全操作符检查,防止在写入上下文中使用
- 修复前置递增、后置操作、递减和unset操作中的空安全检查
- 添加对空安全属性访问的类型检测和错误处理
- 禁止对void函数调用结果进行赋值或二元运算
- 修复继承中私有属性重声明的错误处理逻辑
- 添加空安全写入操作的相关测试用例
2 months ago
韩天峰
5027650611
feat(php): 添加表达式类型检查确保void表达式不能作为值或条件使用
...
- 在二元操作符解析中添加对左右操作数的类型检查
- 在有序操作数解析中添加对操作数的类型检查
- 修正类型检测逻辑,移除对void类型的特殊处理
- 在幂运算解析中添加对左右操作数的类型检查
- 在比较表达式解析中添加对操作数的类型检查
- 在短路逻辑操作符解析中添加对左右操作数的类型检查
- 添加assertExprCanBeUsedAsCondition方法用于条件表达式验证
- 在数组解析中添加对键值的类型检查
- 在for循环条件中添加对表达式的类型检查
- 在三元操作符解析中添加对条件和分支的类型检查
- 在match表达式解析中添加对条件和分支的类型检查
- 在位运算、布尔运算、打印、克隆等操作中添加类型检查
- 在类型转换操作中添加对操作数的类型检查
- 添加测试用例验证void表达式在各种场景下的使用限制
2 months ago
韩天峰
13258d34a6
fix(parser): 解决构造函数返回值和void表达式使用问题
...
- 在赋值操作中添加void表达式检查,防止将void用作赋值值
- 添加构造函数返回值检测,禁止构造函数返回值
- 添加函数参数中的void表达式检查
- 新增构造函数返回值测试用例
- 新增父类构造函数作为值使用的测试用例
- 更新文档说明构造函数语义一致性要求
2 months ago
韩天峰
399f77d5c5
feat(php): 实现对函数参数引用传递的支持
...
- 添加了 AOT 调用参数信息获取功能
- 实现了按索引和名称获取参数信息的方法
- 增加了对命名参数引用传递的判断支持
- 添加了引用参数值解析功能
- 优化了新对象构造函数参数传递逻辑
- 完善了对动态调用和继承链的参数分析
- 新增静态函数、方法和构造函数引用参数测试用例
2 months ago
韩天峰
3d6e0b5689
feat(php): 添加对参数解包后位置参数的验证支持
...
- 在函数调用参数验证中添加了对参数解包的支持
- 实现了 hasUnpackCallArg 方法用于检测参数解包
- 添加了 shouldUseDynamicCallForNativeArgs 方法优化动态调用判断
- 修复了参数解包后不能跟位置参数的错误检查逻辑
- 更新了命名参数和解包参数的验证顺序
- 添加了多个测试用例验证参数解包功能的正确性
- 增加了 AOT 测试确保多异常捕获和抛出异常对象的功能正常
2 months ago
韩天峰
2a9fcfb665
fix(php): 修复throw语句类型检查和对象转换逻辑
...
- 添加了表达式类型检测来确保只抛出对象类型
- 重构了throw语句的C++代码生成逻辑
- 优化了catch块中的类型检查条件构建方式
- 添加了对抛出非对象类型的静态错误检查
- 新增了throw标量值的测试用例
2 months ago
韩天峰
54bca6942e
feat(parser): 添加对象属性赋值类型检查和二元运算操作数处理
...
- 实现对象属性赋值时的类型验证检查机制
- 添加静态属性赋值的类型安全保护
- 引入有序操作数解析以支持复杂表达式计算
- 增加对函数调用参数的类型安全检查
- 优化二元运算符操作数的类型转换处理
- 添加测试用例验证类型检查功能正确性
- 扩展属性定义实体以支持类型检查配置
- 实现操作数材料化以处理副作用表达式
2 months ago
韩天峰
cff27c7c79
refactor(parser): 重构二元操作符和控制流的解析逻辑
...
- 实现逻辑运算符短路求值功能,支持 && 和 || 操作符的惰性求值
- 添加 parseShortCircuitLogicalOp 方法处理逻辑运算符的特殊解析逻辑
- 新增 parseExprWithCapturedStmts 方法捕获表达式解析过程中的语句
- 实现 appendCapturedStmtLines 和 genConditionWithCapturedStmts 辅助方法
- 重构 for 循环条件和循环体表达式的解析逻辑
- 修改三元运算符解析以支持条件表达式的语句捕获
- 重构 if 语句解析使用递归函数处理 if-elseif-else 链
- 更新 while 和 do-while 循环处理条件表达式中的副作用
- 重构 switch 语句解析逻辑,改进 case 条件的匹配机制
- 添加多个测试用例验证条件表达式副作用的执行时机
2 months ago
韩天峰
4ad8c0a6fa
feat(php): 实现表达式惰性求值和语句上下文处理
...
- 在三元运算符解析中添加分支语句收集和处理逻辑
- 实现match表达式的惰性求值支持
- 添加条件表达式和函数调用参数的惰性求值机制
- 重构代码结构以支持语句前后的代码块插入
- 更新变量赋值和返回语句的生成逻辑
- 添加lambda包装器用于复杂表达式求值
- 优化临时变量管理和作用域控制
2 months ago