韩天峰
b6cc597725
feat(compiler): implement unified any() function handling and enhanced composite type checking
...
- Move any() function handling from assignment-specific paths to general function call entry point
- Add comprehensive composite type relation analysis with INT/COMPOSITE_TYPE_MATCH/COMPOSITE_TYPE_UNKNOWN states
- Implement static type checking for closure and arrow function return values
- Add support for int to float coercion in composite type contexts
- Enhance type checking for property assignments with composite types
- Update documentation to reflect unified any() function behavior across all expression positions
- Add extensive test coverage for composite type edge cases and error scenarios
- Remove redundant dynamic_value helper functions from test files
- Implement proper null
2 months ago
韩天峰
9f6a13d5f7
feat(compiler): add static type checking for composite types
...
- Implement static type validation for union, intersection, and nullable types
- Add composite type assignment checking for parameters, return values, and property assignments
- Introduce dynamic value wrapper tests to verify type checking behavior
- Enhance error messaging for composite type mismatches
- Update documentation to reflect improved static type analysis capabilities
- Add proper restoration of compiler state after generator conversion errors
- Improve parallel compilation process management and error handling
- Add metadata caching for object files with PHP ABI compatibility checks
2 months ago
韩天峰
20add2008a
fix(compiler): resolve reference args through interfaces
2 months ago
韩天峰
b4a2de7ace
feat(native): add native property assignment operation with class constant
...
- Introduce NativePropertyAssignOpClassConstBox class with flags property
- Implement clearPublic method using bitwise AND assignment operator
- Add native_property_assign_op_class_const function for testing
- Demonstrate bitwise operation with ReflectionClassConstant::IS_PUBLIC
- Support integer type declaration for flags property
- Enable
2 months ago
Yurun
94b61d58f8
fix(compiler): 支持抽象/接口方法的按引用参数签名解析
2 months ago
韩天峰
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
韩天峰
d767104e1c
refactor(php): separate internal constants loading logic
...
- Extract internal constants loading into dedicated loadInternalConstants method
- Filter out user-defined constants from internal constants array
- Maintain backward compatibility with non-grouped constants format
- Add proper handling of constant groups to prevent runtime state inclusion
- Improve static expansion behavior for compile-time vs runtime constants
2 months ago
韩天峰
c3f0151e87
feat(aot): 支持类继承、接口及抽象类的类型兼容与运行时检查
...
允许子类对象赋值给父类/接口/抽象类声明的类型变量和容器,引入 declaredClass 区分声明类型与实际类型,对无法静态证明的继承关系添加运行时类型
2 months ago
韩天峰
7d20c4e994
feat(preprocessor): 添加属性参数中数组和新表达式的校验
2 months ago
韩天峰
72db18c22a
fix(php): validate composite parameter variance
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
韩天峰
903af8c477
test(closure): 添加闭包use值和引用捕获功能测试
...
- 新增closure-use-reference-capture.phpt测试文件验证闭包捕获行为
- 添加ClosureTest类实现use引用捕获编译测试
- 在CompilerBase中添加stringifyParsedExpr方法处理表达式字符串化
- 重构函数调用参数处理逻辑提取为独立方法确保数组和命名参数正确处理
- 修改for循环条件和迭代部分的表达式解析确保正确转换
- 添加use-reference-capture.php测试代码验证闭包引用捕获功能
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
韩天峰
4214e1e278
feat(php): 添加对构造函数析构函数返回类型和魔术方法的严格检查
...
- 实现构造函数和析构函数不能声明返回类型的检查
- 实现克隆方法返回类型必须为void的验证
- 添加魔术方法静态性和可见性检查规则
- 实现魔术方法参数数量和类型的严格校验
- 添加魔术方法参数类型检查如__get方法必须接受字符串参数
- 实现可选参数不能在必需参数之前的检查
- 添加闭包引用参数和变长引用参数的错误检查
- 优化参数计数错误消息中的预期参数数量提示
- 添加AOT编译器语言设计原则文档说明
2 months ago
韩天峰
3d6e0b5689
feat(php): 添加对参数解包后位置参数的验证支持
...
- 在函数调用参数验证中添加了对参数解包的支持
- 实现了 hasUnpackCallArg 方法用于检测参数解包
- 添加了 shouldUseDynamicCallForNativeArgs 方法优化动态调用判断
- 修复了参数解包后不能跟位置参数的错误检查逻辑
- 更新了命名参数和解包参数的验证顺序
- 添加了多个测试用例验证参数解包功能的正确性
- 增加了 AOT 测试确保多异常捕获和抛出异常对象的功能正常
2 months ago
韩天峰
2a9fcfb665
fix(php): 修复throw语句类型检查和对象转换逻辑
...
- 添加了表达式类型检测来确保只抛出对象类型
- 重构了throw语句的C++代码生成逻辑
- 优化了catch块中的类型检查条件构建方式
- 添加了对抛出非对象类型的静态错误检查
- 新增了throw标量值的测试用例
2 months ago
韩天峰
f8c37f91c3
test(type): 添加类型检查和属性赋值相关测试用例
...
- 添加实例属性类型检查消息包含类名的测试用例
- 添加属性联合赋值操作使用运行时类型检查的测试用例
- 添加动态属性赋值TypeError捕获的测试用例
- 添加二元运算符操作数从左到右求值顺序的测试用例
- 添加原生优化调用参数从左到右求值的测试用例
- 添加构造函数属性提升联合参数检查的测试用例
fix(assign): 修复属性赋值时的类型检查问题
- 在属性赋值操作中添加对象属性类型检查包装
- 修复属性赋值表达式中的类型验证逻辑
- 添加静态属性赋值的类型检查支持
fix(ctor): 修复构造函数属性提升的参数验证顺序
- 将构造函数属性提升移到参数类型验证之后执行
- 在数组初始化计划后添加错误检查机制
2 months ago
韩天峰
8231208eaf
fix(php): 修复继承访问控制和扩展清理逻辑
...
- 修改 canAccessProtectedProperty 替代 isInheritedFrom 处理保护属性访问
- 更新扩展模式下的映射表清理逻辑,使用 C++ 样式初始化替代 PHP 数组赋值
- 修复继承检查中私有成员重声明的处理,跳过私有父类属性/常量的兼容性检查
- 优化可见性检查逻辑,支持可见性放宽但阻止私有成员重声明
- 添加对父类可访问子类保护方法和常量的支持测试
- 新增属性和常量可见性放宽及私有成员重声明的测试用例
- 添加扩展清理映射表的运行时测试验证
2 months ago
韩天峰
252b112405
feat(php): 实现继承中方法重写的类型兼容性检查
...
- 添加对final方法重写错误的检测和报告
- 实现返回类型的协变性检查,允许子类返回更具体的类型
- 实现参数类型的逆变性检查,允许子类参数接受更通用的类型
- 添加从无返回类型到有返回类型的合法转换支持
- 增强方法重写签名验证逻辑以支持PHP类型系统规则
- 添加新的测试用例覆盖各种继承错误场景
2 months ago
韩天峰
09be0226cb
feat(trait): 支持trait方法多别名和insteadof语法
...
- 实现trait方法可以有多个别名的功能
- 支持insteadof语法在trait列表中的顺序无关性
- 保持trait别名的原始方法功能
- 添加对继承中静态方法不匹配的检查
- 更新trait别名数据结构以支持别名列表
- 重构trait方法包装器为独立函数
- 修复trait方法别名处理逻辑错误
2 months ago
韩天峰
72b80276ba
fix(php): 修复trait成员冲突检测逻辑
...
- 修复trait常量冲突检查,只在不兼容时抛出错误
- 修复trait属性冲突检查,只在不兼容时抛出错误
- 添加类型节点转字符串的辅助方法
- 实现兼容性检查方法验证trait常量和属性是否一致
- 更新测试用例验证trait成员兼容性和冲突场景
2 months ago
韩天峰
42ee6e3aa6
feat(php): 支持接口常量继承功能
...
- 实现了类通过继承链查找接口常量的功能
- 添加了接口及其父接口常量的递归收集机制
- 在编译器中增加了对实现接口的类处理数组常量的支持
- 更新了常量访问检查逻辑以支持接口常量继承
- 添加了单元测试验证接口数组常量向实现类的传播
- 创建了AOT测试用例覆盖接口数组常量继承场景
- 重构了接口实现检查相关代码结构
2 months ago
韩天峰
c4a8146661
refactor(php): 重构PHP类定义和接口实现检查逻辑
...
- 添加抽象方法签名兼容性检查功能
- 实现接口常量初始化表达式解析支持
- 优化类和接口常量处理流程
- 增强继承关系中抽象方法实现验证
- 改进接口实现方法查找逻辑
- 添加抽象类可延迟实现接口方法的支持
- 修复方法重写签名验证问题
- 重构常量解析为统一方法处理
- 更新类型检查生成器去除排序逻辑
- 扩展测试用例覆盖各种继承场景
2 months ago
韩天峰
3ca0d64a6a
feat(preprocessor): 增强PHP预处理器功能支持接口成员和常量解析
...
- 实现接口方法、常量和继承列表的解析与存储
- 添加对抽象方法签名的完整解析支持
- 增加命名空间常量的解析和类型推断功能
- 实现接口实现验证和方法签名匹配检查
- 支持多重接口继承关系的解析处理
- 添加重复定义(类、接口、常量、方法)的检测机制
- 实现trait别名和修饰符的正确解析
- 增强依赖排序算法支持接口和trait依赖关系
- 完善方法重写签名验证逻辑
- 添加接口方法由trait提供的情况处理
2 months ago
韩天峰
4632a8bba4
feat(compiler): 添加项目配置文件解析和类型检查功能
...
- 实现了 project.yml 配置文件解析支持 include-paths、defines、lto 等选项
- 添加了命令行参数与配置文件选项的合并逻辑
- 增强了类型检查错误消息中的可调用名称显示
- 添加了多个测试用例验证配置文件解析和类型检查行为
- 实现了 PHP 代码中父类方法重写和联合类型的功能测试
2 months ago
韩天峰
286330f45d
test(php): 添加继承错误测试用例并实现继承兼容性检查
...
- 添加了类常量可见性错误的测试用例
- 添加了方法继承不兼容的测试用例
- 实现了属性重写的类型、可见性和只读性检查
- 实现了常量重写的类型和可见性检查
- 实现了方法重写的可见性检查
- 添加了继承错误相关的测试文件和断言逻辑
- 在翻译器中集成了继承兼容性验证功能
2 months ago
韩天峰
23a100caf4
feat(php): 添加PHP方法重写签名验证功能
...
- 实现了子类方法重写时参数数量、返回类型、参数类型的兼容性检查
- 添加了按引用传递参数和可变参数的签名匹配验证
- 新增了继承错误测试用例文件
- 重构了方法重写检查逻辑,提取为独立的验证函数
- 更新了错误提示信息以显示具体的不兼容原因
2 months ago
韩天峰
18b4bf4ed6
test(phpunit): 添加未定义方法调用和属性访问测试用例
...
- 添加 undefined-method-call.php 测试文件
- 添加 undefined-prop-access.php 测试文件
- 创建基本的 PHP 对象方法调用测试场景
- 创建基本的 PHP 对象属性访问测试场景
2 months ago
韩天峰
e6c3e22f6e
feat(compiler): 添加未定义变量检查和对象处理器初始化
...
- 在属性访问时检查未定义变量并报告错误
- 初始化类对象处理器以支持对象操作
- 添加对未定义变量属性访问的测试用例
- 添加对未定义变量方法调用的测试用例
- 为动态代码中的类型化属性取消设置添加测试
2 months ago
韩天峰
785d9c9d6d
test(php): 添加 compact 和 globals 相关功能测试用例
...
- 新增 CompactTest 类测试 compact('this') 在不同上下文中的行为
- 添加 CountGlobalsTest 类测试优化器路径中未定义变量检测逻辑
- 实现 globals 数组访问形式的编译通过验证
- 补充 optimizer-undefined-var.php 测试文件验证错误回退机制
- 添加 globals-array-access.php 测试文件验证数组访问正常编译
- 创建 global.php 示例文件展示全局变量使用方式
2 months ago
韩天峰
1e6fb4972a
feat(php): 支持 compact 函数中的 'this' 变量
...
- 添加了对 compact('this') 的支持,允许在类方法中使用 this 变量
- 实现了 'this' 变量的特殊处理逻辑,避免未定义变量错误
- 添加了类上下文检查,防止在类外部使用 compact('this')
- 创建了新的测试文件来验证 compact('this') 在不同场景下的行为
- 更新了函数调用优化器以正确处理 'this' 变量的特殊情况
2 months ago
韩天峰
cce6967acf
fix(php): 修复静态属性晚绑定支持问题
...
- 修改 CompilerBase.php 中的静态属性处理逻辑,正确区分 self 和 static 关键字
- 为 native-property-full-name.php 添加 writeStatic 测试方法
- 更新 NativePropertyTest.php 中的编译方法返回值类型和测试用例
- 添加静态属性晚绑定功能的完整测试用例 static-prop-late-static-binding.phpt
2 months ago
韩天峰
91675ed366
feat(php): 添加除零检查和改进原生属性访问功能
...
- 添加对字面量除零、模零、赋值除零和赋值模零操作的编译时检查
- 实现对整数、浮点数和字符串类型的零值检测
- 为 AssignOpTrait 和 BinaryOpTrait 添加 guardLiteralDivisionByZero 方法
- 改进原生属性访问的类名解析,使用完整的类名进行查找
- 支持 static 关键字作为类名解析的一部分
- 添加 isSameClassName 和 isSameOrSubclassOf 辅助方法用于类继承关系判断
- 实现受保护属性访问权限控制的 canAccessProtectedProperty 方法
- 添加多个测试文件验证除零检查和原生属性访问功能
- 创建 NativePropertyTest 和 OperatorTest 测试类验证相关功能
2 months ago
韩天峰
19164e92bc
docs(compiler): 添加AOT编译速度优化研究文档并完善测试用例
...
- 添加AOT编译速度优化研究笔记,涵盖瓶颈分析和优化方向
- 新增构造函数抛异常析构函数调用测试用例
- 添加混合数组默认参数函数测试用例
- 补充私有方法重写功能测试代码
- 增加抽象类实例化相关测试文件
2 months ago
韩天峰
dbcadeb873
feat(php): 添加抽象方法支持和调用保护
...
- 在 ClassDef 中添加 abstractMethods 数组存储抽象方法
- 实现 addAbstractMethod 和 hasAbstractMethod 方法
- 添加 getMethodFlags 方法统一获取方法标志
- 在 Preprocessor 中解析并添加抽象方法到类定义
- 实现 guardAbstractMethod 防止调用抽象方法
- 在父类方法调用中添加抽象方法检查
- 更新单元测试验证抽象方法调用错误处理
2 months ago
韩天峰
8aa1745e1d
feat(parser): 添加对Big*数值类型不支持运算符的检查
...
- 在BinaryOpTrait中添加Big*类型运算符支持检查逻辑
- 检测到BigFloat、Decimal或BigInt类型使用不支持的运算符时抛出错误
- 添加测试用例验证模运算符%对BigFloat类型的不支持
- 添加测试用例验证按位与运算符&对Decimal类型的不支持
- 添加测试用例验证左移运算符<<对BigFloat类型的不支持
- 添加测试用例验证按位或运算符|对Decimal类型的不支持
3 months ago
韩天峰
fc2cc22594
feat(php): 添加对原生函数调用中命名参数的支持
...
- 在 checkNativeCallArgs 中验证命名参数
- 实现 getFunctionArgNameIndex 和 getVariadicArgIndex 辅助方法
- 添加 validateNativeNamedCallArgs 方法验证命名参数规则
- 重构函数调用参数处理逻辑支持命名参数重排序
- 实现变长参数和命名参数的混合处理
- 添加构建原生变长参数的方法
- 更新参数类型转换逻辑
- 添加相关测试用例验证功能正确性
3 months ago
韩天峰
279fe22d82
fix(compiler): 解决对象属性类型检查和赋值操作问题
...
- 添加对象属性赋值时的类型验证逻辑
- 实现固定类型对象属性的 unset 操作默认值恢复
- 修复 std 命名空间内置类型方法的类型检测
- 更新对象属性类型推断和方法返回类型解析
- 添加对象属性子类赋值到基类类型的错误检查
- 修改测试用例以反映 AOT 编译器的严格类型行为
3 months ago
韩天峰
207bc6b48b
test(compiler): 添加类方法重写顺序测试用例
...
- 创建 class-method-override-order.php 测试文件,包含子类先于父类定义的场景
- 实现 ClassMethodOverrideTest 类,验证编译器对类方法重写的双向递归处理
- 添加 testChildBeforeParentOverride 方法,测试父子类方法重写关系的正确识别
- 验证父类方法被正确标记为被子类覆盖的状态
- 确保子类方法未被错误标记为已覆盖状态
- 通过反射访问编译器内部的 classMethodOverride 属性进行断言验证
3 months ago
韩天峰
5e549a4c15
perf(compiler): 优化静态属性访问性能并增强类型检查
...
- 添加对静态属性 unset 操作的错误处理
- 实现静态属性的 C++ 引用优化提升访问性能
- 为整型和浮点型静态属性添加原生引用支持
- 在函数上下文中添加静态属性引用映射表
- 更新微基准测试包含静态属性操作性能测试
- 添加静态属性 unset 的单元测试用例
- 修复静态属性访问相关的类型声明问题
3 months ago
韩天峰
64e9d76770
test(assign): 添加严格类型声明为0的测试用例
...
- 新增 testStrictTypesZeroNotAllowed 测试方法
- 验证 declare(strict_types=0) 不被允许的情况
- 添加对应的测试代码文件 declare-strict-types-zero.php
- 确保只有 strict_types=1 被支持的功能测试
3 months ago
韩天峰
26a538680f
refactor(php): 将 stream_cast 函数替换为 toStream 方法
...
- 移除 stream_cast 全局函数实现
- 将 stream_cast($stream) 调用转换为 $stream->toStream() 方法调用
- 更新编译器中的流类型识别逻辑,移除对 stream_cast 的特殊处理
- 修改标准容器解析器中的 unsafePtr 为 boxExpr 属性
- 更新相关测试文件中的调用方式和断言
- 替换不安全指针转换为标准容器转换方法
3 months ago
韩天峰
52fcc86660
feat(php): 添加对void类型方法调用的检查
...
- 在CompilerBase.php中检测接收器类型为void时抛出致命错误
- 为变量表达式方法调用添加void类型检查
- 为命名方法调用添加void类型检查
- 在单元测试中添加void方法调用测试用例
- 创建void方法调用测试代码文件
3 months ago
韩天峰
11acfdf10f
refactor(aot): 移除UnsafePtr类型支持并优化std容器实现
...
- 移除UnsafePtr类型声明及相关参数标记功能
- 修改std容器变量访问方式,统一使用_ref后缀引用
- 更新unsafe_cast函数参数验证逻辑,移除UnsafePtr参数检查
- 重构std容器在C++代码中的声明和初始化方式
- 删除相关测试用例及单元测试中的UnsafePtr验证逻辑
- 统一std容器赋值、遍历、删除操作的引用访问模式
3 months ago
韩天峰
69e4386454
test(compiler): 添加大数类型运算测试和自增自减操作限制
...
- 添加 Decimal 算术运算测试用例
- 添加 BigInt 复合赋值运算测试用例
- 添加 Decimal 复合赋值运算测试用例
- 添加 Decimal 比较和转换测试用例
- 添加 BigInt 二元运算符测试用例
- 添加 Decimal 运算符重载测试用例
- 添加 Decimal 一元负号测试用例
- 在编译器中实现对 BigInt、Decimal 和 BigFloat 类型的自增自减操作限制
- 添加 PHPUnit 测试验证自增自减操作错误提示
- 为 BigInt 和 Decimal 类型禁用 ++ 和 -- 操作符
3 months ago
韩天峰
f33641aead
docs(native_types): 更新原生类型文档并完善类型提升规则说明
...
- 将标题从"AOT编译器原生类型支持说明"改为"AOT编译器类型系统说明"
- 新增高精度数值类型支持(bigInteger、decimal、bigFloat)
- 更新类型映射表,增加底层实现列和新类型条目
- 完善二元运算类型提升规则文档,包括Var主导规则、Float优先规则、大数类型精度提升规则
- 添加类型提升完整矩阵表格便于查阅
- 更新复合赋值运算符类型转换说明
- 将最后更新日期更新至2026年5月26日
3 months ago
韩天峰
12d44084ec
feat(aot): 添加对表达式结果的通用方法调用支持
...
- 实现了函数调用、方法调用、静态调用和属性获取后的通用方法调用
- 新增 stream_cast 伪函数用于流类型转换测试
- 支持数组方法链式调用和可变操作
- 添加表达式上下文中的流转换功能
- 扩展了对内部函数反射返回类型的处理
- 优化了数组操作的返回值一致性
- 完善了通用方法调用的错误处理机制
3 months ago