韩天峰
|
21b7de3905
|
feat(php): 添加对trait的支持和优化函数调用处理
- 在AstNodeType中添加isNull方法用于检查null值
- 更新CompilerBase中的参数默认值处理逻辑,支持引用参数的null默认值
- 将FuncCallOptimizer中的函数移动到合适位置并修复逻辑
- 重命名Preprocessor中的命名空间准备方法
- 在Translator中添加对trait语句的支持并抛出异常
- 添加对func_get_args和func_get_arg函数的优化实现
|
5 months ago |
韩天峰
|
ddeceec91f
|
feat(compiler): 添加符号声明和调用跟踪功能并优化方法调用检查
- 添加 symbolDeclInFile 和 symbolCallInFile 属性用于存储函数和类方法的声明及调用信息
- 修改 getNativeMethod 方法增加 checkArgs 参数控制参数检查逻辑
- 优化 Match 表达式解析逻辑,支持非变量条件表达式的处理
- 移除未处理匹配情况时不必要的返回空值语句
- 在预处理器中添加对静态调用、静态属性访问、类常量获取和新对象创建的依赖类跟踪
- 修复抽象类实例化错误消息中的字符串插值语法
- 为动态调用场景禁用参数检查以避免误报错误
|
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 |
韩天峰
|
537222b1e7
|
refactor(php): 重构PHP编译器基础类和预处理器
- 在resetNamespace方法中添加useAliases重置
- 将名称空间比较改为大小写不敏感匹配
- 在preprocessor中添加文件、函数、类和名称空间重置调用
- 将getNamespacedClassName替换为getFullClassName方法
- 添加目录检查防止路径错误
|
5 months ago |
韩天峰
|
37b44368eb
|
feat(compiler): 添加对ThinkPHP和Laravel项目的编译支持
- 在.gitignore中添加thinkphp、laravel和tmp项目目录的忽略规则
- 修改错误处理逻辑,使用统一的output方法替代直接echo输出
- 新增getFullClassName方法用于获取完整类名
- 添加Unsupported异常类型并改进语法检查
- 实现自继承类的检测和错误报告功能
- 优化类名解析逻辑,提高编译器兼容性
|
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 |
韩天峰
|
f179705296
|
cs-fix
|
5 months ago |
韩天峰
|
d49d8578c5
|
feat(php): 添加PHP编译器方法调用支持
- 实现了Expr_MethodCall节点的类型检测逻辑
- 添加了方法调用返回类型的反射检测功能
- 更新了方法调用的解析实现,使用call替换exec方法
- 移除了不再需要的objectWrappers相关代码
- 优化了对象转换和类型检查的处理流程
- 在Reflection类中添加了getMethodReturnType方法
- 改进了方法调用参数解析和执行的逻辑处理
|
5 months ago |
韩天峰
|
7dd30e2908
|
refactor(php): 优化PHP编译器代码结构和类型检查逻辑
- 修改clone表达式解析为使用php::clone函数调用
- 更新属性获取表达式的对象转换方式
- 使用checkArgType方法替代直接的类型比较进行魔术方法验证
- 重构预处理器中的方法准备逻辑以跳过抽象方法
- 添加Modifiers导入并改进依赖排序逻辑
- 为genNativeMethod方法参数添加类型声明
|
5 months ago |
韩天峰
|
67275c45f7
|
refactor(php): 修改访问权限检查方法的参数类型
- 将 checkAccessible 方法的第二个参数从 MethodDef|ConstantDef 对象改为 int 类型的 flags
- 更新 ConstantDef 类中 flags 属性和构造函数参数类型为 int
- 提取访问修饰符解析逻辑到独立的 parseModifiers 方法
- 在类常量、属性和方法解析中统一使用 parseModifiers 方法处理 flags
|
5 months ago |
韩天峰
|
7eed77138a
|
feat(php): 添加对 throw 语句的支持并改进 switch case 验证
- 在 AstNodeType 中添加 isThrowExpr 方法用于检测 throw 表达式
- 修改 CompilerBase 中的 switch case 验证逻辑,支持以 throw 结尾的 case
- 更新 parseThrow 方法以正确处理不同类型的异常对象
- 将最低 PHP 版本兼容性要求从 8.0 更新到 8.4
|
5 months ago |
韩天峰
|
fa2a1d286f
|
refactor(php): 优化对象包装器处理逻辑并修复字符串转义问题
- 简化了 CompilerBase.php 中的对象包装器逻辑,减少临时变量创建
- 为 gen_stub.php 中的 minimumPhpVersionIdCompatibility 设置默认值 PHP_80_VERSION_ID
- 在 Generator/Utils.php 的 escapeString 方法中添加 C++ 三字母词序列处理
|
5 months ago |
韩天峰
|
2838053e4f
|
feat(php): 添加命名空间常量并改进魔术方法检测器
- 在关键字列表中添加 'namespace' 常量
- 将魔术方法名称转换为小写进行比较以提高匹配准确性
- 更新 __toString 方法返回类型检查逻辑
- 更新 __serialize 方法返回类型检查逻辑
- 改进魔术方法参数和返回类型的验证机制
- 增强魔术方法检测的大小写不敏感性
|
5 months ago |
韩天峰
|
e230e66164
|
feat(php): 支持引用参数的默认值为数组
- 添加 isEmptyArray 方法检查空数组
- 修改编译器对引用参数默认值的处理逻辑
- 实现引用参数默认值为空数组的支持
- 更新参数解析逻辑以正确处理引用参数
- 添加测试用例验证引用参数数组默认值功能
- 修复命名参数缺失默认值时的错误处理
|
5 months ago |
韩天峰
|
7681f6dc26
|
fix(php): 修复预处理器中的依赖关系处理逻辑
- 在符号依赖检查中添加文件过滤条件,避免将当前文件添加到依赖列表中
- 移除对函数节点类型的冗余检查,简化符号声明文件映射逻辑
- 确保所有符号声明都能正确记录到对应文件中,提高依赖解析准确性
|
5 months ago |
韩天峰
|
f6a3e5b4b3
|
refactor(php): 重构PHP编译器依赖管理和类属性初始化功能
- 移除ClosureGenerator中无用的方法注释
- 在CompilerBase中重命名参数并添加isInternalClass方法
- 从ConstantDef中移除无用的导入
- 完全删除FileSorter类,改用外部库MJS\TopSort进行文件排序
- 在Preprocessor中重构依赖收集逻辑,优化文件排序算法
- 过滤内置函数和类,避免参与依赖管理
- 重构Translator中的类属性初始化代码,优化对象创建流程
- 统一字符串拼接操作符为单引号格式
|
5 months ago |
韩天峰
|
bb52f8ab10
|
refactor(php): 优化PHP编译器基础组件结构
- 在CompilerBase中添加类继承关系存储数组并增加注释说明
- 重命名FileSorter中的变量名提高代码可读性
- 简化Preprocessor中局部变量声明方式
- 限定prepareFunction方法参数类型增强类型安全
- 添加关于父类方法覆盖的注释说明
|
5 months ago |
韩天峰
|
3743a32eb8
|
refactor(php): 统一使用小写键值优化编译器方法重写检查
- 在 CompilerBase 中添加 isOverrideMethod 辅助方法简化重写判断逻辑
- 将 Preprocessor 中的所有符号名称转换为小写以确保一致性
- 修改类继承关系存储使用小写键值避免大小写敏感问题
- 优化方法重写检测循环使用小写键值提升查找性能
- 统一函数和方法名称的大小写处理逻辑
|
5 months ago |
韩天峰
|
183b2ba96c
|
fix(php): 修复未定义类型的默认值处理逻辑
- 未定义类型时,属性和参数默认使用 var (mixed, any) 类型
- 未定义类型时,返回值默认使用 void 类型
- 根据声明类型上下文返回相应的默认类型值
|
5 months ago |
韩天峰
|
9022821bcf
|
refactor(Php): 优化PHP编译器中的数组展开和对象转换逻辑
- 数组展开语法直接传递数组变量,避免创建不必要的临时变量
- 对象转换逻辑中添加对已存在包装器的检查和处理
- 添加php_get_object_wrap辅助函数用于对象包装处理
- 优化代码结构,减少临时变量的使用
|
5 months ago |
韩天峰
|
5650b71dd3
|
fix(php): 修复闭包变量捕获逻辑
- 添加对已使用变量的检查以避免重复捕获
- 将uses数组改为关联数组以支持变量名索引
- 在处理完所有变量后重新索引uses数组
- 确保不会对相同变量名创建多个ClosureUse节点
|
5 months ago |
韩天峰
|
d55f4fed2d
|
fix(closure): 修复箭头函数局部变量声明问题
- 在ClosureGenerator中调整局部变量声明生成逻辑
- 移除CompilerBase中重复的局部变量声明代码
- 确保箭头函数正确处理局部变量声明
- 添加测试用例验证箭头函数功能正常
|
5 months ago |
韩天峰
|
94615f939a
|
refactor(closure): 移除闭包生成器中的当前作用域参数
- 移除了 genClosure 方法中的 $useCurrentScope 参数
- 简化了闭包捕获逻辑,统一使用默认捕获方式
- 移除了条件性的上下文切换逻辑
- 简化了变量引用处理逻辑
- 在箭头函数解析中添加了变量查找和 use 子句生成功能
- 修复了闭包参数引用检查和变量作用域处理
|
5 months ago |
韩天峰
|
1b8a2fb19d
|
refactor(generator): 重构类属性初始化逻辑
- 将类属性初始化代码提取到独立的 genClassPropertyInit 方法中
- 移除模板文件中的复杂 PHP 循环和条件逻辑
- 使用数组属性计数来决定是否需要构造函数
- 修复属性定义解析中构造函数标记的逻辑位置
|
5 months ago |
韩天峰
|
7989c551bb
|
fix(closure): 修复闭包生成器中的变量捕获逻辑
- 修正 ClosureGenerator.php 中的变量捕获操作符,从值传递改为引用传递
- 更新 ConstantDef 类构造函数以支持数组表达式存储
- 修改模板文件中的类定义检查逻辑,使用 empty 函数替代布尔判断
- 重构类常量生成方法,将 genUpdateClassConstants 重命名为 genClassArrayConstants
- 添加 php_get_create_object_fn 辅助函数以正确获取对象创建函数
- 优化类常量定义解析,支持数组类型的常量表达式处理
|
5 months ago |
韩天峰
|
78c7daa646
|
refactor(php): 将函数声明和调用跟踪重构为符号级别
- 将 $functionDeclInFile 和 $functionCallInFile 重命名为 $symbolDeclInFile 和 $symbolCallInFile
- 更新 CompilerBase 类中的变量引用以使用新的符号命名
- 修改 FileSorter 构造函数参数和属性以匹配新的符号命名
- 调整 Preprocessor 中的符号收集逻辑以支持类继承关系
- 在 Translator 中添加字符串字面量外部声明支持
- 扩展符号跟踪功能以涵盖类声明和父类引用
|
5 months ago |
韩天峰
|
28f2b5ac8a
|
test(class-const): 添加类常量测试用例并优化常量生成逻辑
- 添加 class-const-003.phpt 测试文件验证类常量功能
- 修复数组类型类常量的值复制逻辑
- 移除未使用的 Zend 引擎常量表更新代码
- 统一代码风格将冒号语法替换为大括号语法
- 简化类常量更新方法的控制流程
|
5 months ago |
韩天峰
|
ad3bd659b0
|
refactor(template): 重构类常量生成逻辑
- 将类常量生成代码从模板文件移动到 Translator 类中
- 创建 genUpdateClassConstants 方法统一处理数组类型常量生成
- 使用新方法替换原有的 PHP 模板循环结构
- 简化 extension.cc.php 模板中的常量定义代码
- 提高代码可维护性和复用性
|
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 |
韩天峰
|
26682179d4
|
docs(syntax): 更新不支持语法文档添加引用参数默认值和变长引用参数说明
- 新增引用参数带有默认值的不支持语法说明
- 新增变长参数中使用引用的不支持语法说明
- 更新统计信息表格中的语法数量和百分比
- 在快速参考表中添加新的不支持语法条目
- 为相关测试文件添加 skip 标记说明
- 更新更新日志记录新增的两个不支持语法特性
|
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 |
韩天峰
|
b499347669
|
cs-fix
|
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 |
韩天峰
|
86055c3bf1
|
feat(php): 添加PHP类型声明解析功能
- 新增DECL_TYPE_OF_RETURN、DECL_TYPE_OF_PROPERTY、DECL_TYPE_OF_CONST、DECL_TYPE_OF_PARAM常量用于标识类型声明上下文
- 扩展zendTypeMap映射表,支持false、true、never、null、callable、iterable等类型
- 修改parseTypeDecl方法,增加$what参数以区分不同的类型声明场景
- 实现对属性和常量类型声明中void/never类型的验证和错误提示
- 更新函数参数类型解析逻辑,统一使用类型声明解析方法
- 在类常量和属性解析中使用新的类型声明解析方法
|
5 months ago |
韩天峰
|
12696eeed4
|
test(type): 添加类型声明相关测试用例
- 添加可调用类型、数组类型、对象类型和可迭代类型的测试
- 添加标量类型声明包括整数、字符串、浮点数和布尔值的测试
- 添加空类型合并操作符 ?? 和 ??= 的语法测试
- 添加魔术方法包括 __clone、__serialize 和 __unserialize 的测试
- 在编译器基础类中增加对 callable 和 iterable 类型的支持
|
5 months ago |
韩天峰
|
646fb7d56d
|
docs(compiler): 添加 AOT 编译器命令行工具使用指南
- 新增完整的命令行选项详解文档
- 包含优化级别、编译模式、输出文件名等所有参数说明
- 提供典型使用场景和性能优化技巧
- 添加故障排除和最佳实践章节
- 包含编译过程详解和高级主题说明
|
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 |
韩天峰
|
45e3933b3c
|
refactor(php): 优化编译器基础类的类型声明和参数命名
- 为writeLog方法添加void返回类型声明
- 将多个解析方法的参数类型从Node改为NodeAbstract以提高灵活性
- 修正parseAssignPropertyFetch方法中的代码缩进格式
- 在赋值操作处理逻辑中直接返回解析结果而非赋值给变量
- 将所有二元操作符解析方法的参数类型从mixed改为具体的节点类型
- 重命名findNativeFunction方法中的参数名以提高可读性
- 为各种赋值操作符解析方法添加具体的节点类型声明
|
5 months ago |