韩天峰
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
韩天峰
af3472bd9a
feat(parser): add native property assignment and compound assignment support
...
- Implement dynamic native property write detection logic
- Add shouldUseDynamicNativePropertyWrite method for type checking
- Support native property assignment with type conversion
- Handle compound assignment operations for native properties
- Add canUseNativePropertyAssignOp validation method
- Create comprehensive documentation for compile-time functions
- Add test cases for native int property assignments
- Include unit tests for native property assignment operations
- Update incompatible PHP features documentation
- Add native property assignment to test suite
2 months ago
韩天峰
c3f0151e87
feat(aot): 支持类继承、接口及抽象类的类型兼容与运行时检查
...
允许子类对象赋值给父类/接口/抽象类声明的类型变量和容器,引入 declaredClass 区分声明类型与实际类型,对无法静态证明的继承关系添加运行时类型
2 months ago
韩天峰
5ee74b2d9d
fix(parser): 修复引用赋值时的类型推断错误
2 months ago
韩天峰
bffa660427
refactor: 引入 parseWritableIdentifier 替代手动 inAssignExpr 设置
2 months ago
韩天峰
6afb8e3689
fix(aot): 修复数组复合赋值表达式返回值
...
修复复合赋值运算符(如 +=)在数组元素上使用时返回值错误的问题。
之前代码使用了存储变量而非读取变量进行运算,并且未正确返回运算结果。
现在通过使用读取变量参与计算并返回临时变量值来修复此问题,
同时添加了 FFI 和数组相关的测试用例。
2 months ago
韩天峰
bc799fda0a
fix:修复静态回调解析及拼接赋值等编译问题
2 months ago
韩天峰
7937f05282
fix: 修复解构键提取、switch默认分支及finally控制流
...
正确处理数组/foreach解构中的键名与嵌套结构,
修复switch中default位于匹配case前时执行顺序错误的问题,
确保finally块在break/continue/goto离开try/catch时被注入,
并支持动态静态方法与属性调用。
2 months ago
韩天峰
b6d0488ea6
fix(compiler): 修复多处运算符和表达式编译副作用处理
2 months ago
韩天峰
8df3e8bfef
refactor(parser): 重构赋值操作符解析逻辑并调整测试文件结构
...
- 调整 AssignOpTrait.php 中变量解析顺序,优化代码执行流程
- 将 inAssignExpr 上下文切换移到属性写入检查之后
- 移除比较操作符测试文件中的太空船操作符测试用例
- 创建独立的太空船操作符测试文件 spaceship.phpt
- 重新组织测试用例结构以提高可维护性
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
韩天峰
df5dd2a5f6
refactor(php): 重构属性写入目标处理逻辑以支持动态对象属性
...
- 引入 PropertyWriteTarget 类来统一管理属性写入目标
- 修改 parseAssignPropertyFetch 方法以接受 PropertyWriteTarget 参数
- 移除已废弃的 parseAssignStaticProperty 方法
- 添加动态对象属性读取和写入的目标级辅助方法
- 更新复合赋值操作以使用统一的属性写入目标处理
- 改进属性引用获取逻辑以复用目标级引用辅助方法
- 在 .gitignore 中添加 swoole_compiler 和 tpc 目录排除规则
- 更新重构计划文档以反映动态属性写入目标的实现进展
2 months ago
韩天峰
c05c63b8aa
refactor(php): 重构属性写入逻辑以统一动态属性访问
...
- 将动态属性读写操作收敛到 emitDynamicPropertyRead/Write 辅助方法
- 引入 PropertyWriteTarget DTO 来统一属性写入目标的准备和检查
- 通过 preparePropertyWriteTarget 统一处理对象和静态属性写入目标
- 使用 assertCanAssignPropertyWrite 进行属性写入的静态检查
- 通过 wrapPropertyWriteTypeCheck 实现运行时类型检查包装
- 更新复合赋值和自增自减操作符的属性访问逻辑
- 在文档中记录属性写入路径的重构计划和当前进展
2 months ago
韩天峰
f631b395fc
refactor(php): 重构静态属性获取解析逻辑
...
- 将 findNativeStaticProperty 方法重命名为 resolveNativeStaticPropertyFetch 并返回对象
- 引入 StaticPropertyFetchResolution 类来封装静态属性获取的结果
- 修改条件判断从 if ($native) 到 if ($native !== null) 以明确检查 null 值
- 更新 parseNativeStaticPropertyFetch 方法的返回类型为 ?string
- 优化静态属性引用变量的生成逻辑,使用解析结果中的类名
- 移除不再使用的 $class 参数并简化方法调用
- 添加新的解析器相关类文件以支持属性访问解析功能
2 months ago
韩天峰
87c54236a0
refactor(php): 重构属性访问解析逻辑以使用专门的解析器方法
...
- 将 findNativeProperty 方法替换为更具体的 resolveNativeInstanceProperty 和 resolveNativeStaticProperty
- 添加 resolveNullsafePropertyChain 方法处理空安全属性链检查
- 引入 PropertyAccessResult 类来统一属性访问结果的返回格式
- 使用 isNativePropertyAccess 方法替代直接的属性检查
- 移除旧的泛型 findNativeProperty 入口点以避免布尔参数扩散
- 更新 AssignOpTrait 中的属性访问检查逻辑
- 修改动态属性递增递减操作中的原生属性检查方式
- 调整编译器基类中的属性解析实现细节
2 months ago
韩天峰
64cf047f07
fix(parser): 解决空安全操作符在写入上下文中的使用问题
...
- 在赋值操作中添加空安全操作符检查,防止在写入上下文中使用
- 修复前置递增、后置操作、递减和unset操作中的空安全检查
- 添加对空安全属性访问的类型检测和错误处理
- 禁止对void函数调用结果进行赋值或二元运算
- 修复继承中私有属性重声明的错误处理逻辑
- 添加空安全写入操作的相关测试用例
2 months ago
韩天峰
13258d34a6
fix(parser): 解决构造函数返回值和void表达式使用问题
...
- 在赋值操作中添加void表达式检查,防止将void用作赋值值
- 添加构造函数返回值检测,禁止构造函数返回值
- 添加函数参数中的void表达式检查
- 新增构造函数返回值测试用例
- 新增父类构造函数作为值使用的测试用例
- 更新文档说明构造函数语义一致性要求
2 months ago
韩天峰
f8c37f91c3
test(type): 添加类型检查和属性赋值相关测试用例
...
- 添加实例属性类型检查消息包含类名的测试用例
- 添加属性联合赋值操作使用运行时类型检查的测试用例
- 添加动态属性赋值TypeError捕获的测试用例
- 添加二元运算符操作数从左到右求值顺序的测试用例
- 添加原生优化调用参数从左到右求值的测试用例
- 添加构造函数属性提升联合参数检查的测试用例
fix(assign): 修复属性赋值时的类型检查问题
- 在属性赋值操作中添加对象属性类型检查包装
- 修复属性赋值表达式中的类型验证逻辑
- 添加静态属性赋值的类型检查支持
fix(ctor): 修复构造函数属性提升的参数验证顺序
- 将构造函数属性提升移到参数类型验证之后执行
- 在数组初始化计划后添加错误检查机制
2 months ago
韩天峰
54bca6942e
feat(parser): 添加对象属性赋值类型检查和二元运算操作数处理
...
- 实现对象属性赋值时的类型验证检查机制
- 添加静态属性赋值的类型安全保护
- 引入有序操作数解析以支持复杂表达式计算
- 增加对函数调用参数的类型安全检查
- 优化二元运算符操作数的类型转换处理
- 添加测试用例验证类型检查功能正确性
- 扩展属性定义实体以支持类型检查配置
- 实现操作数材料化以处理副作用表达式
2 months ago
韩天峰
b3e489d334
refactor(aot): 重构标准容器实现将unordered_map重命名为ordered_map
...
- 将StdUnorderedMap重命名为StdOrderedMap并在所有相关文件中更新引用
- 修改polyfills.php中std::unordered_map为std::ordered_map,std::map为std::unordered_map
- 更新文档中关于标准容器的命名和功能描述
- 修复所有测试文件中关于容器类型的断言和期望值
- 调整编译器内部类型标识符从TYPE_STD_UNORDERED_MAP到TYPE_STD_ORDERED_MAP
- 修改解析器中对标准容器类型的判断和处理逻辑
- 更新单元测试中的类型检查和声明获取方法
2 months ago
韩天峰
91675ed366
feat(php): 添加除零检查和改进原生属性访问功能
...
- 添加对字面量除零、模零、赋值除零和赋值模零操作的编译时检查
- 实现对整数、浮点数和字符串类型的零值检测
- 为 AssignOpTrait 和 BinaryOpTrait 添加 guardLiteralDivisionByZero 方法
- 改进原生属性访问的类名解析,使用完整的类名进行查找
- 支持 static 关键字作为类名解析的一部分
- 添加 isSameClassName 和 isSameOrSubclassOf 辅助方法用于类继承关系判断
- 实现受保护属性访问权限控制的 canAccessProtectedProperty 方法
- 添加多个测试文件验证除零检查和原生属性访问功能
- 创建 NativePropertyTest 和 OperatorTest 测试类验证相关功能
2 months ago
韩天峰
5a7805b544
feat(php): 添加对动态属性赋值操作符和递增递减操作的支持
...
- 实现了动态属性的赋值操作符(如 +=、-=、.= 等)的解析和代码生成
- 添加了动态属性递增递减操作(++、--)的特殊处理逻辑
- 新增 genDynamicPropIncDec 方法用于生成动态属性 ++/-- 操作的 C++ 代码
- 为 clone 测试用例中的属性访问错误提供了更准确的错误消息
- 在属性获取逻辑中添加了静态与非静态属性访问的错误检查机制
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函数调用路径
3 months ago
韩天峰
9138dea99f
feat(php): 实现赋值表达式返回值和函数参数检查功能
...
- 在数组赋值操作中添加临时变量存储以支持返回值
- 为属性赋值操作实现逗号表达式确保右值先计算后赋值
- 添加内部函数参数数量验证机制防止运行时错误
- 优化三元运算符表达式确保类型一致性
- 扩展函数调用优化器以支持参数类型和数量检查
- 添加测试用例验证数组维度赋值返回功能
- 添加测试用例验证属性赋值返回功能
- 添加测试用例验证三元运算符类型转换功能
3 months ago
韩天峰
feb5041d2e
feat(php): 添加静态属性赋值检查和本地槽位优化支持
...
- 在 AssignOpTrait 中添加对静态属性赋值的支持
- 扩展 CompilerBase 以实现静态属性类型检测和赋值验证
- 添加 assertCanAssignStaticProp 方法进行静态属性赋值检查
- 重构静态属性本地槽位生成逻辑,支持不同数据类型
- 为对象属性提升优化添加安全检查机制
- 新增测试用例验证静态属性原生类型默认值功能
- 更新函数上下文文档注释以反映静态属性槽位映射变化
3 months ago
韩天峰
051c4a45fd
feat(parser): 添加对嵌套 list() 解构赋值的支持
...
- 在 AssignOpTrait 中实现嵌套列表解构逻辑
- 添加临时变量生成用于处理嵌套数组
- 集成 parseAssignToList 方法处理嵌套 list 结构
- 保持原有非嵌套情况下的行为不变
- 添加完整的嵌套 list 解构功能测试用例
- 确保多层嵌套的列表解构能够正确执行
3 months ago
韩天峰
279fe22d82
fix(compiler): 解决对象属性类型检查和赋值操作问题
...
- 添加对象属性赋值时的类型验证逻辑
- 实现固定类型对象属性的 unset 操作默认值恢复
- 修复 std 命名空间内置类型方法的类型检测
- 更新对象属性类型推断和方法返回类型解析
- 添加对象属性子类赋值到基类类型的错误检查
- 修改测试用例以反映 AOT 编译器的严格类型行为
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
韩天峰
1111cc0c27
refactor(php): 优化变量赋值表达式解析逻辑
...
- 提取变量类型获取逻辑到局部变量以提高可读性
- 移除冗余的类型检查转换逻辑
- 简化赋值操作中的类型处理流程
- 保持原有的类型推断功能不变
- 改进代码结构以增强维护性
3 months ago
韩天峰
c5f38a3d05
fix(parser): 修复变量类型推断问题
...
- 当右侧表达式为无类型但左侧变量已有已知原生类型时,
使用左侧类型进行转换以确保类型安全
- 在赋值操作中添加类型检查逻辑,避免类型丢失问题
- 更新 fibo 和 fibo_r 函数参数类型声明为 int
- 添加 issetor 性能测试用例以验证类型推断优化效果
3 months ago
韩天峰
9beb5cbba2
fix(parser): 修复赋值操作符和递增递减操作符的上下文状态管理
...
- 在 parseAssignOp 方法中正确保存和恢复 inAssignExpr 上下文状态
- 在 parsePreInc 方法中正确保存和恢复 inAssignExpr 上下文状态
- 在 parsePostOp 方法中正确保存和恢复 inAssignExpr 上下文状态
- 在 parsePreDec 方法中正确保存和恢复 inAssignExpr 上下文状态
- 修复 FuncCallOptimizer 中对函数参数类型的检查逻辑,排除 VariadicPlaceholder 占位符情况
3 months ago
韩天峰
ff6ca6c03a
重构:将代码迁移至独立的 PHP 源文件,减少核心类的代码行数
3 months ago