韩天峰
|
3a3c8eb6b6
|
test(core): 添加对象比较基本功能测试
- 添加标准对象比较处理器测试用例
- 创建多个类实例验证相等性判断逻辑
- 测试相同类不同实例间的比较行为
- 验证不同类对象间的比较结果
- 添加继承关系对象的比较测试
- 验证对象处理器不同的比较场景
|
5 months ago |
韩天峰
|
53958c67c3
|
test(tree): 添加树形结构转换功能的AOT测试用例
- 创建TreeHelper类实现数组到树形结构的转换功能
- 实现基于ID和父ID的层级关系构建算法
- 添加测试数据验证多层级嵌套结构的正确性
- 包含根节点、子节点及深层级节点的断言测试
- 验证树形结构转换的完整性和准确性
- 为AOT编译环境跳过不支持的功能测试
|
5 months ago |
韩天峰
|
2ad8df01da
|
refactor(php): 优化代码结构并添加测试用例
- 修复了AstNodeType.php中的命名空间引用问题
- 将parseTrait方法从Translator.php末尾移至中间位置
- 添加了ref 002测试用例验证数组引用行为
- 统一了代码风格和导入语句格式
|
5 months ago |
韩天峰
|
a204ebf1e7
|
feat(aot): 改进switch语句编译逻辑支持默认分支
- 添加了default分支的特殊处理逻辑
- 实现了defaultOnly标识用于优化条件判断
- 修正了switch case条件列表的构建方式
- 添加了对多个测试用例的支持验证
- 优化了分支条件的代码生成策略
- 确保了break语句后的正确流程控制
|
5 months ago |
韩天峰
|
eb2eacc69a
|
feat(compiler): 添加对PHP内置函数func_get_arg和func_get_args的支持
- 在CompilerBase中添加isScalarInt方法用于判断表达式是否为标量整数
- 为parseScalar方法添加返回类型声明string
- 从常量列表中移除func_get_arg和func_get_args的不支持标记
- 在FuncCallOptimizer中实现func_get_arg、func_get_args和func_num_args的代码生成
- 添加详细的测试用例验证func_get_arg和func_get_args的功能
- 实现可变参数函数中对这些内置函数的正确处理
|
5 months ago |
韩天峰
|
898cbe2553
|
feat(php): 支持 func_num_args 函数优化
- 从 UNSUPPORTED_FUNCTIONS 列表中移除 func_num_args
- 添加 func_num_args 函数的运行时测试用例
- 实现 func_num_args 函数调用优化逻辑
- 支持通过 argInfoList 计算函数参数数量
- 添加对可变参数函数的支持
|
5 months ago |
韩天峰
|
d919ee280c
|
fix(php): 修复抽象类方法调用和实例化错误检查
- 添加了抽象类不能被实例化的检查,在编译时抛出错误
- 修复了方法准备逻辑,确保抽象方法在非抽象类中的正确验证
- 更新了测试期望输出以匹配新的错误格式
- 优化了错误堆栈跟踪的显示格式
|
5 months ago |
韩天峰
|
f3fd30c662
|
feat(php): 添加对联合类型的支持
- 在编译器基类中处理UnionType情况,将其转换为mixed类型
- 添加nullable类型属性的测试用例
- 实现对union类型参数的正确解析和处理逻辑
|
5 months ago |
韩天峰
|
a5f397efa5
|
feat(php): 完善函数返回值类型推断和解析完成状态跟踪
- 添加函数解析完成状态标识符 completed 属性
- 在函数解析完成后设置 completed 标识为 true
- 改进返回值类型变更时的日志输出,显示原类型到新类型的转换
- 优化方法调用返回值检测逻辑,仅在函数已完成解析时使用其返回值类型
- 修复内部函数返回值类型检测,排除 void 类型的干扰
- 更新对象表达式转换逻辑,确保表达式预处理正确执行
- 改进变量赋值错误提示信息,明确显示变量名称
- 添加返回值类型测试用例,验证 void 函数的赋值行为
- 修复命名空间类名获取逻辑,确保类名格式正确
|
5 months ago |
韩天峰
|
c0e224e4db
|
refactor(php): 更新幂运算函数调用实现
- 将 php::call(php::pow) 替换为 php::math::pow 直接调用
- 修改赋值操作符中的幂运算表达式生成逻辑
- 优化临时变量创建方式,使用 addTmpVar 方法替代手动创建
- 在函数调用优化器中添加对 pow 函数的直接映射
- 添加 pow 函数相关的测试用例验证功能正确性
|
5 months ago |
韩天峰
|
e230e66164
|
feat(php): 支持引用参数的默认值为数组
- 添加 isEmptyArray 方法检查空数组
- 修改编译器对引用参数默认值的处理逻辑
- 实现引用参数默认值为空数组的支持
- 更新参数解析逻辑以正确处理引用参数
- 添加测试用例验证引用参数数组默认值功能
- 修复命名参数缺失默认值时的错误处理
|
5 months ago |
韩天峰
|
d55f4fed2d
|
fix(closure): 修复箭头函数局部变量声明问题
- 在ClosureGenerator中调整局部变量声明生成逻辑
- 移除CompilerBase中重复的局部变量声明代码
- 确保箭头函数正确处理局部变量声明
- 添加测试用例验证箭头函数功能正常
|
5 months ago |
韩天峰
|
94615f939a
|
refactor(closure): 移除闭包生成器中的当前作用域参数
- 移除了 genClosure 方法中的 $useCurrentScope 参数
- 简化了闭包捕获逻辑,统一使用默认捕获方式
- 移除了条件性的上下文切换逻辑
- 简化了变量引用处理逻辑
- 在箭头函数解析中添加了变量查找和 use 子句生成功能
- 修复了闭包参数引用检查和变量作用域处理
|
5 months ago |
韩天峰
|
28f2b5ac8a
|
test(class-const): 添加类常量测试用例并优化常量生成逻辑
- 添加 class-const-003.phpt 测试文件验证类常量功能
- 修复数组类型类常量的值复制逻辑
- 移除未使用的 Zend 引擎常量表更新代码
- 统一代码风格将冒号语法替换为大括号语法
- 简化类常量更新方法的控制流程
|
5 months ago |
韩天峰
|
68a9a782e8
|
feat(extension): 添加类构造器和属性默认值支持
- 在扩展模板中添加类构造器创建对象函数声明
- 实现类构造器中的属性初始化逻辑
- 将静态属性列表重命名为默认静态属性列表
- 添加类属性默认值列表用于存储实例属性初始值
- 更新类信息数组结构添加classDef引用
- 移除构造函数检查逻辑并优化方法包装生成
- 在类包装生成中添加属性默认值处理逻辑
- 添加测试用例验证可空类型属性功能
|
5 months ago |
韩天峰
|
e7f2760d93
|
feat(compiler): 支持类常量继承和访问控制检查
- 添加 ConstantDef 实体类用于表示类常量定义
- 实现 getNativeClassConst 方法支持类常量子类继承查找
- 重构 checkAccessible 方法支持常量访问控制检查
- 集成类常量访问到编译器表达式处理流程
- 添加类常量测试用例验证继承功能
|
5 months ago |
韩天峰
|
f2647ccbba
|
feat(php): 支持类常量数组类型的编译处理
- 在 CompilerBase.php 中添加对类常量数组类型的判断和处理逻辑
- 在 extension.cc.php 模板中增加类数组常量的声明、初始化和清理代码生成
- 修改 Translator.php 中的类常量解析逻辑以支持类型推断
- 添加对未明确声明类型的类常量进行自动类型检测
- 为类数组常量生成对应的外部变量声明
- 移除不再需要的字面字符串数组外部声明
|
5 months ago |
韩天峰
|
3eaca2c359
|
feat(php): 添加对引用参数默认值的错误检查
- 在编译器基础类中添加了对引用参数默认值的支持检查
- 当检测到引用参数具有默认值时抛出致命错误
- 添加了深度递归测试文件以验证递归函数功能
- 测试包含阶乘、斐波那契、相互递归和树形递归等场景
- 验证了分治算法如快速排序的递归实现
|
5 months ago |
韩天峰
|
ced53b63be
|
docs(tests): 添加PHP AOT编译器测试文档和新测试用例
- 新增 README_TEST_COVERAGE.md 详细记录测试覆盖情况
- 添加 RUN_TESTS_GUIDE.md 提供完整的测试运行指南
- 创建 SKIP_TESTS.md 说明不支持语法的跳过标记
- 新增 TEST_SUPPLEMENT_REPORT.md 分析测试补充情况
- 添加 readonly-class.phpt 测试PHP 8.2只读类特性
- 新增 backed-enum.phpt 测试PHP 8.1支持枚举
- 添加 first-class-callable.phpt 测试PHP 8.1第一类可调用语法
- 新增 deep-recursion.phpt 测试深度递归模式
- 更新整体测试覆盖率达到96%
|
5 months ago |
韩天峰
|
dd297b5f92
|
fix(closure): 修复闭包生成器中的引用捕获问题
- 将闭包生成器中的引用捕获从 & 改为 =,避免悬空指针问题
- 在 PHP 中使用 = 赋值进行浅拷贝,仅增加一次引用计数
- 添加了关于 zval 封装赋值的注释说明
- 新增了可调用语法的测试用例,包括箭头函数和杂项功能
- 添加了对 PHP 8.1+ 首类可调用语法的支持测试
- 包含了枚举相关功能的测试用例验证
|
5 months ago |
韩天峰
|
3191ff2cce
|
feat(php): 实现对 instanceof 操作符的完整支持
- 修改 CompilerBase.php 中的 parseInstanceof 方法,添加对类名表达式的特殊处理
- 为 instanceof 操作符添加命名空间类名解析功能
- 支持通过 getClassEntryPtr 获取类条目指针
- 添加新的测试文件 union-intersection-types.phpt 验证联合类型和交叉类型
- 测试涵盖 union types、nullable union、mixed type 和 never type 的 instanceof 检查
- 实现对 PHP 8+ 类型系统的全面兼容性支持
|
5 months ago |
韩天峰
|
07200b9e12
|
feat(compiler): 支持PHP变长参数函数特性
- 实现变长参数语法解析和编译支持
- 添加变长参数必须位于最后位置的验证逻辑
- 支持变长参数不能通过引用传递的限制检查
- 实现变长参数默认值作为空数组的处理机制
- 添加对变长参数函数调用时参数数量的检查功能
- 支持除法运算符返回类型推断的特殊情况处理
- 优化函数调用参数解析中的变长参数展开逻辑
- 添加多个变长参数函数测试用例覆盖不同场景
|
5 months ago |
韩天峰
|
096a92a62e
|
feat(php): 添加对内部类继承和可空参数的支持
- 在 ArgInfo 类中添加 nullable 属性用于标识参数是否可空
- 在 ClassDef 类中添加 inheritedFromInternalClass 属性用于标记是否继承自内部类
- 实现对继承自内部类的动态方法调用支持
- 添加 Reflection::isInternalClass 方法用于判断类是否为内部类
- 添加 Reflection::hasMethod 方法用于检查类是否存在指定方法
- 在参数解析时设置 nullable 标志
- 修改编译器基类以支持内部类继承的错误处理
- 更新翻译器以正确处理可空参数的调用逻辑
|
5 months ago |
韩天峰
|
12696eeed4
|
test(type): 添加类型声明相关测试用例
- 添加可调用类型、数组类型、对象类型和可迭代类型的测试
- 添加标量类型声明包括整数、字符串、浮点数和布尔值的测试
- 添加空类型合并操作符 ?? 和 ??= 的语法测试
- 添加魔术方法包括 __clone、__serialize 和 __unserialize 的测试
- 在编译器基础类中增加对 callable 和 iterable 类型的支持
|
5 months ago |
韩天峰
|
9d5500250d
|
test(named_args): 添加命名参数功能测试用例
- 添加基本命名参数功能测试 (001.phpt)
- 添加跳过可选参数的命名参数测试 (002.phpt)
- 添加混合位置和命名参数的测试 (004.phpt, 005.phpt)
- 在ArgInfo类中添加默认值表达式存储字段
- 在编译器中实现命名参数空洞填充默认值逻辑
- 移除二进制文件名数字前缀处理逻辑
|
5 months ago |
韩天峰
|
8bf5c9c806
|
test(aot): 添加迭代器和匹配表达式测试
- 修改generators.phpt使用exit替代echo进行跳过提示
- 新增iterators.phpt测试文件实现Iterator和IteratorAggregate接口
- 添加Range类测试基于生成器的迭代器聚合
- 实现FilterIterator类测试过滤功能
- 新增match-expression.phpt测试PHP8+匹配表达式功能
- 测试基本匹配、多重条件、严格比较和嵌套匹配场景
|
5 months ago |
韩天峰
|
23f2fa48af
|
feat(php): 实现魔术方法 __get、__set、__isset、__unset 的编译支持
- 修改 parseAssignPropertyFetch 方法,添加 literal 参数到 identifierToStr 调用
- 在条件判断中增加对 nativeProperty 属性的检查,区分原生属性和魔术方法调用
- 更新 parseUnset 方法中的属性名解析逻辑,统一使用 identifierToStr 并添加 literal 参数
- 重构 getPropertyIdentifier 方法参数列表,增加 expr 参数并设置 nativeProperty 属性
- 移除类属性不存在时的致命错误抛出,允许魔术方法处理未知属性访问
- 添加完整的魔术方法测试用例,覆盖 __get/__set/__isset/__unset 的基本功能
|
5 months ago |
韩天峰
|
55caa1fcef
|
feat(compiler): 实现PHP魔术方法支持和动态调用处理
- 添加__call、__invoke、__toString、__debugInfo等魔术方法测试用例
- 添加__callStatic静态魔术方法支持和测试用例
- 在ClassDef中实现方法名称大小写不敏感的查找机制
- 添加DynamicCall异常用于处理动态方法调用场景
- 改进编译器对__call和__callStatic魔术方法的识别和处理
- 优化方法调用流程以支持动态方法分派机制
- 更新方法注册逻辑使用addMethod方法替代直接赋值操作
|
5 months ago |
韩天峰
|
a4bc4fcfc0
|
test(aot): 添加晚期静态绑定功能测试用例
- 测试 static:: 和 self:: 在继承中的行为差异
- 验证静态属性在不同子类中的独立性
- 检查静态方法重写和构造函数中的调用
- 覆盖 late static binding 的各种使用场景
|
5 months ago |
韩天峰
|
2ef2358735
|
fix(compiler): 移除变量类型重新赋值检查逻辑
- 删除了变量类型不匹配时的致命错误检查
- 允许相同变量名在不同类型的std::转换间灵活赋值
- 更新了本地变量类型验证和添加逻辑
- 修改了表达式解析和类型转换流程
|
5 months ago |
韩天峰
|
5b0346a4ad
|
test(aot): 添加 AOT 编译器功能测试和文档
- 新增匿名类功能测试文件 tests/aot/anonymous-classes.phpt
- 新增数组展开操作符测试文件 tests/aot/array-spread.phpt
- 新增箭头函数测试文件 tests/aot/arrow-functions.phpt
- 新增属性注解测试文件 tests/aot/attributes.phpt
- 新增构造函数属性提升测试文件 tests/aot/constructor-promotion.phpt
- 新增生成器测试文件 tests/aot/generators.phpt
- 新增 trait 基础功能测试文件 tests/aot/trait-basic.phpt
- 更新测试运行脚本支持 main 函数自动调用
- 新增 AOT 编译器语法支持文档 docs/UNSUPPORTED_SYNTAX.md
- 记录 ZVAL 与原生类型性能对比和使用建议
- 文档化扩展模式和二进制可执行文件模式差异
- 详细说明不支持的语法特性包括生成器、可变变量等
|
5 months ago |
韩天峰
|
f17ffa6b6f
|
refactor(php): 重构编译器对象管理逻辑
- 将对象存储从 $this->objects 迁移到 $this->context->objects
- 重命名 parseFinallyAssign 方法为 parseAssignFinally
- 添加 addObject 辅助方法统一对象注册逻辑
- 优化类型推断中的对象存储操作
- 更新测试用例中的类型转换语法
- 跳过不支持的属性测试用例
|
5 months ago |
韩天峰
|
f73a6cb6ac
|
refactor(aot): 移除不支持的常量定义和字符串连接操作
- 移除包含对象实例化的常量定义 C_O
- 移除字符串连接操作定义的常量 C_S2
- 从测试输出中删除相关的常量验证
- 简化常量定义以符合 AOT 编译器限制
|
5 months ago |
韩天峰
|
67fc93c620
|
feat(compiler): 添加对全局变量和引用参数的支持
- 新增 getNativeFunction 方法用于获取原生函数定义
- 修改函数调用返回类型检测逻辑使用 getNativeFunction
- 添加对引用参数的处理支持,包括变量引用和全局变量引用
- 实现 GLOBALS 数组访问的特殊处理逻辑
- 支持将字符串常量转换为全局变量名
- 添加临时变量创建用于引用传递场景
|
5 months ago |
韩天峰
|
a50e889751
|
feat(php): 添加对 foreach 引用语法的支持
- 实现了foreach按引用遍历功能支持
- 添加了类继承链中的原生类检查
- 增加了foreach引用语法的变量类型验证
- 添加了新的测试用例验证引用功能
- 修复了循环引用中的类型安全问题
|
5 months ago |
韩天峰
|
13499a0b7f
|
feat(php): 添加引用生成器支持并优化表达式解析
- 引入 RefGenerator 用于处理引用相关的代码生成
- 添加 OP_REFVAL 操作常量用于引用值转换
- 实现函数参数引用检测和处理逻辑
- 将 parseVarCheckExpr 重命名为 parseChainedExpr 并增强链式表达式支持
- 修复 isset 和 empty 操作的表达式解析一致性
- 添加对多维数组和对象属性链的引用处理支持
- 更新赋值操作中的空合并运算符表达式解析
- 增加引用功能的测试用例验证
|
5 months ago |
韩天峰
|
1d6681ade3
|
fix(php): 修复原生函数调用异常处理和静态方法调用解析
- 在原生函数调用周围添加 try-catch 块以处理 PlaceHolder 异常
- 添加对名称表达式类型的检查以正确解析静态方法调用
- 为动态类名静态方法调用实现字符串连接逻辑
- 添加静态方法调用功能的测试用例
|
5 months ago |
韩天峰
|
fd48162ab6
|
fix(php): 修复原生方法调用异常处理
- 在parseNativeMethodCall周围添加try-catch块以捕获PlaceHolder异常
- 当捕获到PlaceHolder异常时返回占位符数组
- 更新测试用例预期输出结果
- 添加新的占位符功能测试用例
|
5 months ago |
韩天峰
|
2dac76a62d
|
feat(php): 实现 switch 语句编译功能
- 修改 parseSwitch 方法参数类型为 Node\Stmt\Switch_
- 添加变量表达式检测和变量声明支持
- 实现单个 case 的 if 语句优化转换
- 添加 switch case 条件列表合并逻辑
- 实现 case 语句块的语法验证检查
- 添加空语句块跳过处理
- 完善 switch 语句的控制流检查
- 新增 switch-001 和 switch-002 测试用例
|
5 months ago |
韩天峰
|
208a34b134
|
feat(php): 添加对原生类型和方法调用的支持
- 新增 isMethodCall 和 isStaticCall 方法用于检测方法调用类型
- 实现 genScopeSwitchCode 方法用于生成作用域切换代码
- 移除 lastNativeCall 属性并优化相关逻辑
- 添加 defaultNativeType 属性控制原生类型使用
- 移除 resetExpr 方法简化表达式解析
- 使用 empty 替代 isset 检查 nativeFunctions
- 重构函数体解析逻辑并添加 Skip 异常处理
- 支持 std::int、std::float、std::bool 原生类型转换
- 添加 checkNativeFunction 方法处理函数声明检查
- 使用 getNativeType 方法统一类型获取逻辑
- 重构参数解析逻辑支持可变参数展开
- 更新 C++ 辅助函数支持作用域管理
- 添加原生类型测试用例
|
5 months ago |
韩天峰
|
fed0d7c2a0
|
feat(compiler): 添加属性映射支持用于PHP编译器
- 添加PROP_MAP常量和相关属性映射数据结构
- 实现getPropertyId方法用于获取属性标识符
- 更新getPropertyOffset方法以使用新的属性映射机制
- 修改静态属性查找逻辑以返回完整命名空间类名
- 在模板文件中添加属性映射数组声明和初始化
- 更新外部函数声明以包含属性获取功能
- 移除旧的属性偏移量预定义方式,改用统一的映射表管理
- 添加完整的属性访问测试用例验证功能正确性
|
5 months ago |
韩天峰
|
e869ee49a8
|
test(aot): 添加空类型属性测试用例
- 添加了具有可空字符串类型的属性测试
- 实现了包含状态码短语常量的响应类
- 添加了获取原因方法的测试逻辑
- 验证了空合并操作符的功能
- 测试了不同状态码下的返回值情况
|
5 months ago |
韩天峰
|
af5442f25e
|
fix(php): 修复类作用域处理中的命名空间前缀问题
- 在 CompilerBase.php 中添加 ltrim 函数移除命名空间前导反斜杠
- 为私有属性访问添加新的测试用例 private-prop-001.phpt
- 测试验证静态类属性读写功能的正确性
|
5 months ago |
韩天峰
|
c259d20562
|
feat(php): 添加对函数调用占位符的支持并实现作用域切换功能
- 在 AstNodeType 中添加 isPlaceholderExpr 方法用于检测占位符表达式
- 在 CompilerBase 中添加对函数调用占位符的特殊处理逻辑
- 使用 isPlaceholderExpr 替换直接的类型检查以统一占位符判断
- 在 C++ 层面实现 php_switch_scope 和 php_restore_scope 功能
- 在 PlaceHolderGenerator 中添加作用域切换代码生成逻辑
- 添加新的测试用例验证静态方法占位符调用功能
|
5 months ago |
韩天峰
|
afc4ef87f8
|
feat(php): 添加对 self 类型的支持
- 在 CompilerBase.php 中添加了对 self 类型的处理逻辑
- 将 self 类型的对象添加到对象映射中
- 添加了静态类属性读写测试用例
- 测试验证了 self 类型在静态上下文中的正确行为
|
6 months ago |
韩天峰
|
eed45fdb61
|
fix(closure): 修复箭头函数和闭包生成中的代码顺序问题
- 在闭包生成器中保存和恢复 beforeStmtLines 和 afterStmtLines 状态
- 移除闭包结束大括号前的重复代码插入
- 在编译基类中正确处理表达式前的代码行
- 添加对静态属性写入的测试用例
- 添加对箭头函数功能的测试用例
|
6 months ago |
韩天峰
|
f56bd745e7
|
fix(php): 修复匿名函数返回值类型推断问题
- 在闭包中强制设置返回值类型为 var,避免类型推断错误
- 保持非闭包函数的原有返回值类型推断逻辑不变
- 添加测试用例验证静态调用场景下的返回值类型处理
|
6 months ago |
韩天峰
|
6a9b75d91f
|
test(aot): 添加闭包和自类型测试用例
- 添加 closure-002.phpt 测试闭包中 use 语法的功能
- 添加 func-self-type.phpt 测试 self 类型提示的功能
- 修改 gen_stub.php 中 self 类型处理逻辑
- 为 ClassInfo 类添加当前类名静态属性
- 更新类解析时设置当前类名信息
|
6 months ago |
韩天峰
|
dd46d6fa5f
|
feat(php): 添加对PHP空安全操作符的支持
- 实现了 NullsafePropertyFetch 和 NullsafeMethodCall 的解析支持
- 添加了 parseNullsafePropertyFetch 和 parseNullsafeMethodCall 方法
- 实现了 nullsafe 表达式的完整解析逻辑,包括属性和方法调用链式访问
- 更新了 PropertyDef 类以支持可空类型标记
- 修改了 getNativeMethod 和 findNativeMethod 方法参数类型为 CallLike
- 添加了完整的测试用例覆盖 nullsafe 操作符的各种使用场景
|
6 months ago |
韩天峰
|
f12ceb1713
|
fix(php): 修复 isset 多变量检查问题
- 实现多变量 isset 检查的正确逻辑
- 添加遍历变量列表并逐个解析的功能
- 使用逻辑与操作符连接多个 isset 检查结果
- 添加 isset-002 测试用例验证多变量检查行为
|
6 months ago |