韩天峰
|
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 |
韩天峰
|
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 |
韩天峰
|
e230e66164
|
feat(php): 支持引用参数的默认值为数组
- 添加 isEmptyArray 方法检查空数组
- 修改编译器对引用参数默认值的处理逻辑
- 实现引用参数默认值为空数组的支持
- 更新参数解析逻辑以正确处理引用参数
- 添加测试用例验证引用参数数组默认值功能
- 修复命名参数缺失默认值时的错误处理
|
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 |
韩天峰
|
78c7daa646
|
refactor(php): 将函数声明和调用跟踪重构为符号级别
- 将 $functionDeclInFile 和 $functionCallInFile 重命名为 $symbolDeclInFile 和 $symbolCallInFile
- 更新 CompilerBase 类中的变量引用以使用新的符号命名
- 修改 FileSorter 构造函数参数和属性以匹配新的符号命名
- 调整 Preprocessor 中的符号收集逻辑以支持类继承关系
- 在 Translator 中添加字符串字面量外部声明支持
- 扩展符号跟踪功能以涵盖类声明和父类引用
|
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 |
韩天峰
|
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 |
韩天峰
|
9d5500250d
|
test(named_args): 添加命名参数功能测试用例
- 添加基本命名参数功能测试 (001.phpt)
- 添加跳过可选参数的命名参数测试 (002.phpt)
- 添加混合位置和命名参数的测试 (004.phpt, 005.phpt)
- 在ArgInfo类中添加默认值表达式存储字段
- 在编译器中实现命名参数空洞填充默认值逻辑
- 移除二进制文件名数字前缀处理逻辑
|
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 |
韩天峰
|
55caa1fcef
|
feat(compiler): 实现PHP魔术方法支持和动态调用处理
- 添加__call、__invoke、__toString、__debugInfo等魔术方法测试用例
- 添加__callStatic静态魔术方法支持和测试用例
- 在ClassDef中实现方法名称大小写不敏感的查找机制
- 添加DynamicCall异常用于处理动态方法调用场景
- 改进编译器对__call和__callStatic魔术方法的识别和处理
- 优化方法调用流程以支持动态方法分派机制
- 更新方法注册逻辑使用addMethod方法替代直接赋值操作
|
5 months ago |
韩天峰
|
2ef2358735
|
fix(compiler): 移除变量类型重新赋值检查逻辑
- 删除了变量类型不匹配时的致命错误检查
- 允许相同变量名在不同类型的std::转换间灵活赋值
- 更新了本地变量类型验证和添加逻辑
- 修改了表达式解析和类型转换流程
|
5 months ago |
韩天峰
|
1441a7e5be
|
cs-fix
|
5 months ago |
韩天峰
|
f17ffa6b6f
|
refactor(php): 重构编译器对象管理逻辑
- 将对象存储从 $this->objects 迁移到 $this->context->objects
- 重命名 parseFinallyAssign 方法为 parseAssignFinally
- 添加 addObject 辅助方法统一对象注册逻辑
- 优化类型推断中的对象存储操作
- 更新测试用例中的类型转换语法
- 跳过不支持的属性测试用例
|
5 months ago |
韩天峰
|
67fc93c620
|
feat(compiler): 添加对全局变量和引用参数的支持
- 新增 getNativeFunction 方法用于获取原生函数定义
- 修改函数调用返回类型检测逻辑使用 getNativeFunction
- 添加对引用参数的处理支持,包括变量引用和全局变量引用
- 实现 GLOBALS 数组访问的特殊处理逻辑
- 支持将字符串常量转换为全局变量名
- 添加临时变量创建用于引用传递场景
|
5 months ago |
韩天峰
|
8af5580689
|
大重构,新增 FunctionContext 类
|
5 months ago |
韩天峰
|
9eb781464a
|
大重构,新增 FunctionContext 类
|
5 months ago |
韩天峰
|
3df8a36674
|
fix(php): 修复编译器基础类中的对象重置和错误消息
- 在resetFunction方法中添加objects数组的重置
- 更新错误消息以提供更详细的原生方法查找失败信息
- 修正错误消息中包含类名和方法名的格式
|
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 |
韩天峰
|
6d9c3da0c0
|
feat(compiler): 添加并行编译功能支持多任务同时执行
- 将原有逐个编译逻辑替换为统一的 compile 方法
- 新增 job 参数用于控制并行任务数量,默认值为 4
- 实现基于 pcntl_fork 的并行编译机制
- 添加并行模式下的错误处理和输出管理
- 在帮助信息中增加新的并行编译选项说明
- 优化编译过程中的进度提示和状态显示
|
5 months ago |