韩天峰
|
989939bb90
|
feat(aot): 支持PHP数组展开语法和复杂数组解析
- 实现了数组展开运算符(...)的解析支持
- 添加了混杂数组赋值的多行插入处理逻辑
- 支持动态键名和不同类型的键值组合
- 优化了数组解析的类型判断和内存管理
- 新增了三个数组相关功能测试用例
- 提取了函数参数默认值解析的公共方法
- 修复了类属性默认值null判断的问题
|
6 months ago |
韩天峰
|
34f157871d
|
test(compiler): 添加空合并赋值操作符测试用例并优化编译逻辑
- 添加 assign_coalesce_002.phpt 测试文件验证空合并赋值功能
- 在 AstNodeType 中新增 isConstFetch 和 isAssignOp 辅助方法
- 优化 CompilerBase 中的空合并赋值编译逻辑,使用三元运算符替代 if 语句
- 修复局部变量检测和类型推断相关问题
|
6 months ago |
韩天峰
|
7292635b3d
|
refactor(php): 重构PHP编译器代码结构
- 将字符串转义相关方法从CompilerBase移至Utils trait中
- 将括号检查和闭合表达式验证逻辑从CompilerBase移至Utils trait
- 修改genCharPtr方法支持字符串转义参数
- 添加genRawStr方法用于生成原始字符串字面量
- 在ClosureGenerator中正确保存和恢复对象状态
- 修复类名定义中的命名空间分隔符问题
- 更新模板文件中属性偏移量生成方式
- 修复内存分配中的类型转换问题
|
6 months ago |
韩天峰
|
b1662f3cc9
|
feat(php): 添加属性访问表达式支持
- 添加 EXPR_PROPERTY_FETCH 常量用于标识属性访问表达式
- 在解析器中实现对 Expr_PropertyFetch 节点的支持
- 使用 parseIdentifier 方法替代 convertToObject 方法处理对象属性访问
- 添加对象链式访问操作符测试用例
- 支持属性连接赋值操作符 (.=) 的解析和执行
|
6 months ago |
韩天峰
|
35117d5c14
|
feat(compiler): 添加构造方法属性提升支持
- 在 ArgInfo 中添加 property 属性标识参数是否为属性提升
- 引入 PropertyPromotion trait 处理属性提升代码生成
- 在编译器中实现构造方法属性提升的解析和代码生成逻辑
- 支持将 promoted 参数转换为类属性定义
- 生成对应的 this_.setProperty 调用代码
- 更新函数信息解析以处理属性提升参数
|
6 months ago |
韩天峰
|
15ea7023f0
|
fix(php): 修复编译器中的命名空间处理和常量解析问题
- 修正 getNativeName 方法中命名数组构建逻辑,确保函数名正确添加到数组中
- 限制函数参数默认值只支持字面量,防止使用表达式获取值导致的问题
- 优化返回值处理逻辑,将 return 语句移至 afterStmtLines 队列确保内存安全
- 修改 parseConstFetch 方法签名,添加 scalar 参数控制常量解析行为
- 为函数参数信息添加类型注释提升代码可读性
|
6 months ago |
韩天峰
|
a0d750eea0
|
fix(compiler): 修复函数调用返回类型检测和命名空间解析问题
- 移除多余空行避免返回类型检测中断
- 添加绝对命名空间函数的特殊处理逻辑
- 修复函数调用解析中对完全限定名的支持
- 更新存根文件生成命令行参数传递机制
- 优化源码目录跟踪和头文件路径生成逻辑
|
6 months ago |
韩天峰
|
08ee0328f4
|
feat(php): 添加接口声明解析支持
- 在PHP解析器中添加Stmt_Interface语句类型的处理分支
- 实现接口声明的基本解析逻辑
- 为后续接口相关功能扩展奠定基础
|
6 months ago |
韩天峰
|
fab6490a85
|
fix(php): 修复编译器命名空间转义问题
- 在静态变量前缀中使用 escapeNamespace 方法转义命名空间
- 使用 escapeClass 方法转义类名以防止特殊字符问题
- 使用 escapeName 方法转义最终名称确保安全
- 防止因特殊字符导致的编译错误和命名冲突
|
6 months ago |
韩天峰
|
0e0f232571
|
feat(stubgen): 支持类常量表达式求值和类上下文跟踪
- 扩展常量表达式求值器以支持 ClassConstFetch 节点
- 实现对 self::CONST 和 CLASS::class 语法的解析和求值
- 添加当前类上下文跟踪机制以处理自引用常量
- 更新字符串和数值类型的表达式打印逻辑
- 增强错误处理以提供更详细的类型信息
|
6 months ago |
韩天峰
|
78f3ca8025
|
code format
|
6 months ago |
韩天峰
|
b091d2dad8
|
Revert "code format"
This reverts commit b6d64407f3.
|
6 months ago |
韩天峰
|
b6d64407f3
|
code format
|
6 months ago |
韩天峰
|
70eccf59fc
|
feat(closure): 添加闭包生成功能并支持占位符调用
- 实现 ClosureGenerator trait 来统一处理闭包生成逻辑
- 添加 ArrowFunction 和 Closure 表达式的解析方法
- 引入 PlaceHolder 异常用于处理可调用占位符场景
- 添加 PlaceHolderGenerator trait 处理占位符闭包生成
- 实现 genCharPtr 和 genArray 工具函数
- 更新 FuncCall 和 StaticCall 处理以支持占位符语法
- 修复变参占位符的错误处理机制
|
6 months ago |
韩天峰
|
43cb0948e1
|
refactor(php): 优化PHP编译器类型检查和表达式处理
- 添加ClassConstFetch类型的检测方法
- 增加对VariadicPlaceholder的错误处理
- 移除静态属性获取的特殊处理逻辑
- 优化表达式解析的通用处理流程
- 修复最后行返回语句检测的边界情况
- 使用常量替换硬编码类型字符串
- 统一魔法方法参数类型验证方式
|
6 months ago |
韩天峰
|
31a3275ecf
|
feat(compiler): 添加对PHP引用参数的支持
- 在ArgInfo类中新增byRef属性用于标识引用参数
- 重命名parseFunctionDeclaration方法为parseFunctionDecl
- 移除引用参数不支持的限制检查
- 在参数解析时添加对byRef的处理逻辑
- 为闭包函数添加引用参数的错误检查
- 在参数类型转换时添加引用参数的特殊处理
- 更新函数调用时参数获取的逻辑以支持引用参数
- 添加引用参数的测试用例
|
6 months ago |
韩天峰
|
0e44edd42c
|
feat(php): 添加静态变量支持功能
- 新增 STATIC_VAR 常量用于标识静态变量前缀
- 添加 staticVars 属性用于跟踪静态变量状态
- 在 resetFunction 中重置静态变量数组
- 实现 getStaticVarName 方法生成静态变量名称
- 修改 parseVariable 处理静态变量解析逻辑
- 添加 addStaticVar 和 hasStaticVar 辅助方法
- 更新 hasVar 检查静态变量存在性
- 实现静态变量初始化代码生成逻辑
- 添加静态变量测试用例验证功能正确性
|
6 months ago |
韩天峰
|
9398f18a02
|
feat(php): 添加类型声明解析功能并优化变量检查逻辑
- 新增 parseTypeDecl 方法处理联合类型和可空类型
- 将函数返回类型解析改为使用新的类型声明解析方法
- 优化属性访问和数组访问时的变量存在性检查
- 在方法调用时添加变量存在性验证
- 修改属性定义中的类型解析为统一的方法调用
|
6 months ago |
韩天峰
|
b6e2741c31
|
feat(compiler): 添加对变量表达式检查和无变量捕获的支持
- 在方法调用解析中添加了变量表达式检查功能
- 实现了未定义变量错误提示机制
- 更新异常捕获解析以支持无变量名的捕获语法
- 添加了临时变量名生成器来处理匿名捕获变量
- 新增 try-catch-2 测试用例验证捕获语法兼容性
|
6 months ago |
韩天峰
|
3641cb3184
|
feat(php): 添加对箭头函数和接口声明的支持
- 实现了箭头函数语法解析和C++代码生成
- 在编译器基础类中添加了对Expr_ArrowFunction节点类型的处理
- 新增parseArrowFunction方法用于处理箭头函数的参数和返回值
- 更新预处理器跳过接口声明的处理逻辑
- 修改测试桩生成脚本以支持声明和分组使用语句的处理
|
6 months ago |
韩天峰
|
28d12102a4
|
fix(php): 修复对象类型推断中的类名解析问题
- 在类型推断过程中使用 getNamespacedClassName 方法处理类名
- 确保对象存储时使用完整的命名空间类名
- 添加了 Swoole 服务器示例代码
- 修复了 PHP 请求信息中的路径翻译设置
- 更新了 Python 示例中的打印方法调用
|
6 months ago |
韩天峰
|
24ea4d9806
|
refactor(php): 优化模块名称处理逻辑
- 将直接访问 targetName 属性改为使用 getModuleName 方法
- 移除数字开头目标名的预处理逻辑
- 新增 getModuleName 方法处理数字开头的模块名
- 统一模块入口函数中的名称引用方式
|
6 months ago |
韩天峰
|
0b5fb6fdd1
|
fix(stub): 修复生成的函数名大小写问题
- 在 getDeclarationName 方法中添加 strtolower 确保名称为小写
- 在 getArgInfoName 方法中添加 strtolower 确保下划线名称为小写
- 统一函数声明和参数信息名称的大小写处理逻辑
|
6 months ago |
韩天峰
|
095f9e8c66
|
feat(php): 添加类定义管理和属性访问优化功能
- 实现 addClass 方法用于添加类定义到编译器
- 优化 hasNativeClass 和 getClassDef 方法使用 escapeClass 处理类名
- 更新 escapeClass 方法支持反斜杠替换为下划线并去除首尾反斜杠
- 重构 getPropertyIdentifier 方法简化属性标识符获取逻辑
- 新增 findNativeProperty 方法实现原生属性查找功能
- 添加对私有、受保护和公共属性的访问权限检查
- 支持继承链中属性的向上查找功能
- 为 get_class_vars 函数添加完整的测试用例覆盖
|
6 months ago |
韩天峰
|
ac3351b5f4
|
feat(compiler): 支持PHP变长参数展开语法
- 修改parseCallArgs方法以支持...操作符参数展开
- 添加对变长参数展开位置限制的验证逻辑
- 实现变长参数展开的临时变量生成机制
- 更新函数调用参数解析以兼容数组参数传递
- 添加parseArrayArg辅助方法处理数组参数解析
- 为变长参数展开功能增加单元测试用例
- 修复多处函数调用参数格式化问题
|
6 months ago |
韩天峰
|
54c43dc691
|
feat(php): 支持 PHP 命名参数功能
- 实现命名参数解析和重排逻辑
- 添加函数定义参数信息获取功能
- 支持命名参数与位置参数混合使用
- 确保参数按正确顺序传递给原生函数
- 添加命名参数测试用例
- 提供命名参数使用示例
|
6 months ago |
韩天峰
|
aa6d81d2a7
|
feat(compiler): 添加可变参数支持功能
- 在 ArgInfo 类中添加 variadic 属性用于标识可变参数
- 实现编译器对可变参数的验证逻辑,确保可变参数位于最后位置
- 修改参数类型处理逻辑,将可变参数转换为数组类型
- 更新函数调用参数解析,支持可变参数的展开和传递
- 在翻译器中实现可变参数的 C++ 代码生成逻辑
- 添加遍历可变参数的循环处理机制
- 新增可变参数功能的测试用例和示例文件
- 完善参数列表生成时对可变参数的特殊处理
|
6 months ago |
韩天峰
|
9c51551567
|
refactor(php): 重构编译器基础类中的类和函数指针获取方法
- 将 getClassEntryPtr 方法重命名为 getClassId 并修改返回值为整数ID
- 将 getFuncPtr 方法重命名为 getFuncId 并修改返回值为整数ID
- 添加新的 getMethodPtr 方法用于获取方法指针
- 重新实现 getClassEntryPtr 和 getFuncPtr 方法,基于新的ID获取方法
- 更新方法调用逻辑以使用新的方法指针机制
- 在C++模板中添加 php_get_method 函数实现
- 更新PHP AOT辅助头文件中的函数声明
- 优化Reflection类中的反射异常处理和参数类型引用
|
7 months ago |
韩天峰
|
257616d571
|
refactor(compiler): 优化方法调用和参数解析逻辑
- 移除编译器中无用的原生函数检查逻辑
- 更新反射参数检查以支持类方法参数引用
- 添加类型化对象的方法调用处理机制
- 实现匿名类实例继承相关功能
- 修复数组元素递增递减操作处理
- 优化ZipArchive等扩展函数的引用参数处理
- 添加私有属性名称解混淆测试用例
- 扩展反射类以支持类方法参数获取
|
7 months ago |
韩天峰
|
a1d74df985
|
feat(compiler): 支持匿名类静态访问方法和属性
- 添加匿名类索引计数器用于生成唯一类名
- 实现对象类型获取功能以支持动态类型解析
- 优化静态调用解析逻辑以处理变量表达式情况
- 添加测试用例验证匿名类静态访问功能
|
7 months ago |
韩天峰
|
35a81376a1
|
test(anonymous): 添加匿名类相关测试用例
- 新增 001.phpt 测试基础匿名类声明功能
- 新增 002.phpt 测试匿名类继承和实现接口功能
- 新增 003.phpt 测试匿名类重复使用场景
- 新增 004.phpt 测试匿名类继承机制
- 修改编译器基类中类名获取逻辑,支持反斜杠开头的命名空间类名
- 修复函数中声明类的错误检查逻辑
- 改进变量检测逻辑以避免未定义变量错误
- 修复类定义代码中的数组初始化逻辑
- 为类名添加反斜杠前缀以确保正确引用
- 添加静态调用注释以改善调试信息
- 调整枚举测试文件中函数位置以符合预期结构
|
7 months ago |
韩天峰
|
8ec0723ed5
|
feat(php): 添加匿名类支持和常量数据处理功能
- 添加 ANON_CLASS 常量用于生成匿名类名称
- 添加 constData 数组用于存储常量数据
- 实现 genAnonClassName 方法生成唯一匿名类名
- 修复 Stmt_Class 处理中的 break 语句缺失问题
- 扩展 parsePostOp 方法支持数组维度获取并检查未定义变量
- 实现 packData 和 addConstData 方法处理字节数据打包
- 在 parseNew 方法中实现对匿名类的完整支持
- 在生成的 C++ 代码中添加常量数据段输出
|
7 months ago |
韩天峰
|
aa6be88c6c
|
feat(php): 添加对PHP枚举类型的支持
- 在ClassDef实体中添加enum属性用于标识枚举类
- 修改编译器基类以支持枚举常量访问的特殊处理
- 移除旧的枚举示例文件并添加新的测试用例
- 更新翻译器以识别和标记枚举类型的类定义
|
7 months ago |
韩天峰
|
9de6ca6a41
|
feat(php): 添加枚举支持并优化代码打印功能
- 引入 PhpParser\PrettyPrinter 用于代码格式化
- 添加 PrettyPrinter 实例变量用于代码美化输出
- 实现 parseEnum 方法处理枚举语法解析
- 添加 genEmbeddedCode 方法生成嵌入式代码
- 在语法解析器中添加 Stmt_Enum 分支处理
- 修复 parseStatic 方法参数类型声明
- 优化原生静态方法调用逻辑增加空值检查
- 添加枚举功能的测试用例文件
|
7 months ago |
韩天峰
|
a72752828f
|
feat(php): 添加对 match 表达式的支持
- 实现了 match 表达式的解析和编译功能
- 添加了多个测试用例验证 match 表达式的基本功能
- 包括基本匹配、默认情况、多条件匹配等功能测试
- 实现了 match 表达式的错误处理机制
- 添加了对重复条件和尾随逗号的支持测试
- 更新了 AST 节点类型检查以支持 Match_ 表达式
- 在常量列表中添加 bool 类型支持
|
7 months ago |
韩天峰
|
46e15ca247
|
feat(compiler): 添加对 Match 表达式和枚举的支持
- 在 CompilerBase 中添加了对 Expr_Match 节点的解析支持
- 修改 parseTernary 方法参数类型为 Node\Expr\Ternary
- 添加了 parseMatch 方法用于处理 Match 表达式
- 在 Preprocessor 中添加对 Stmt_Enum 和 Stmt_EnumCase 的预处理支持
- 扩展 prepareClass 方法以支持枚举类型的处理
- 在 Translator 中添加对 Stmt_Enum 的翻译支持
- 修改 parseClass 方法以正确处理枚举定义
- 添加测试文件 closure_016.phpt 和 closure_017.phpt 验证闭包功能
- 添加枚举示例文件 enum1.php 展示枚举用法
|
7 months ago |
韩天峰
|
bd06dcf0a5
|
fix(compiler): 修复返回语句缺少分号及未定义变量错误提示问题
- 修复了编译器中return语句缺少分号的问题
- 修正了未定义变量错误提示中的变量名显示格式
- 统一使用errorUndefinedVariable方法处理闭包中未定义变量的情况
- 添加了对closure_011和closure_013测试用例的支持
|
7 months ago |
韩天峰
|
67427f342d
|
feat(closure): 添加闭包功能支持并完善相关测试用例
- 添加了嵌套lambda表达式的支持,实现类中的闭包嵌套功能
- 实现了preg_replace_callback中lambda表达式的使用场景
- 支持在lambda内部使用静态变量的功能
- 完善了闭包自调用的实现逻辑
- 添加了四个新的闭包测试用例(closure_007-010)
- 在编译器基类中增加了inClosure状态标识
- 修复了return语句在闭包中的处理逻辑
- 更新了闭包函数体的返回值处理方式
|
7 months ago |
韩天峰
|
be22aa751f
|
refactor(php): 使用常量替换硬编码的 php::null 值
- 添加 VALUE_NULL 常量用于表示 php::null
- 将 offsetSet 方法中的硬编码 null 替换为常量引用
- 将函数返回语句中的硬编码 null 替换为常量引用
- 将数组赋值中的硬编码 null 替换为常量引用
- 将常量解析中的硬编码 null 替换为常量引用
- 修复函数末尾缺失返回语句时使用 NaN 常量作为默认返回值
|
7 months ago |
韩天峰
|
288f1dddef
|
feat(closure): 实现闭包功能支持类内部方法访问$this
- 添加closure_005.phpt和closure_006.phpt测试用例验证闭包功能
- 修改CompilerBase.php中函数定义相关属性为可空类型并添加methodDef
- 实现resetMethod方法重置方法定义状态
- 优化函数参数和局部变量处理逻辑
- 添加genLocalVarDecl和genReturnCode方法生成变量声明和返回代码
- 改进闭包解析逻辑支持返回类型声明
- 更新newClosure调用传递this_参数支持类内闭包访问实例
- 重构MethodDef构造函数移除FunctionDef参数依赖
|
7 months ago |
韩天峰
|
8bc3c66499
|
feat(examples): 添加PHP扩展示例和曼德布罗特集计算功能
- 新增 myext/test.php 文件,包含基本的PHP函数示例
- 添加 bench/test1.cc 文件,实现曼德布罗特集图像生成功能
- 实现复数迭代算法用于绘制曼德布罗特分形图像
- 添加文件输出和内存流处理功能
- 集成PHPX库进行原生C++与PHP交互
- 实现命令行参数解析和图像尺寸控制
- 添加二进制和文本格式输出支持
|
7 months ago |
韩天峰
|
51939af82f
|
test(closures): 添加闭包词法变量测试用例并修复引用转换逻辑
- 添加 closure_003.phpt 测试本地作用域词法变量的闭包功能
- 添加 closure_004.phpt 测试作用域生命周期词法变量的闭包功能
- 修改 convertToRef 方法修复原生类型变量引用转换检查逻辑
- 更新编译器基类中的引用转换实现以正确处理变量类型检查
|
7 months ago |
韩天峰
|
b3dc15a55f
|
feat(closures): 实现闭包功能支持
- 添加了闭包类型常量 php::Args
- 实现了原生类型检查方法 isNativeType
- 添加了引用转换方法 convertToRef 处理变量引用
- 修改闭包函数签名使用 php::Args 类型
- 实现了闭包 use 子句中引用传递的支持
- 添加了两个闭包测试用例验证基本功能和引用传递
|
7 months ago |
韩天峰
|
752767012f
|
feat(compiler): 添加对goto语句的支持
- 引入OP_NOP常量用于处理标签后的空操作
- 修改语句解析循环以跟踪最后一条语句
- 在标签语句后添加空操作防止代码优化问题
- 添加jump02和jump03测试用例验证goto功能
- 创建mv.php脚本用于文件重命名和git添加操作
|
7 months ago |
韩天峰
|
82e13b62f1
|
test(increment): 添加字符串和类型递增递减操作测试
- 添加字符串递增递减功能测试用例
- 添加各种数据类型递增递减操作测试
- 添加goto跳转语句基础功能测试
- 验证不同字符串值的递增递减行为
- 测试数组对象资源等类型的递增递减错误处理
- 包含空值布尔值数字等基本类型的操作验证
|
7 months ago |
韩天峰
|
e0a4e2f977
|
feat(compiler): 添加空合并赋值运算符支持并优化变量检查
- 实现了 ??= 运算符的解析和编译功能
- 添加了变量存在性检查的改进实现
- 增加了左值有效性验证确保赋值操作合法
- 更新了测试用例覆盖空合并赋值的各种场景
- 修复了 stray code 检查的错误定位问题
- 在编译器基类中增加了 isset 和 empty 操作常量定义
|
7 months ago |
韩天峰
|
f2e7b70043
|
feat(compiler): 添加闭包表达式支持
- 在 CompilerBase.php 中添加对 Expr_Closure 节点类型的解析处理
- 实现 parseClosure 方法来编译 PHP 闭包为 C++ 代码
- 添加临时变量生成和缩进级别管理逻辑
- 处理闭包参数和 use 子句中的变量捕获
- 验证闭包中使用的变量是否已定义
- 添加闭包示例文件 closure.php 和对应测试文件
- 修复 fcall.php 中的调试输出注释问题
|
7 months ago |
韩天峰
|
60ba3da404
|
fix(php): 修复编译器中未定义变量检查和引用参数处理逻辑
- 重构引用参数处理逻辑,统一处理未定义变量作为引用的情况
- 添加对属性访问和数组索引操作中未定义变量的检查
- 修复临时变量创建和替换逻辑,确保引用类型参数正确传递
- 修改未定义变量错误报告机制,增强编译时错误检测
- 优化变量引用转换流程,提高代码生成的准确性
|
7 months ago |
韩天峰
|
7e5b6ef045
|
fix(const): 修复命名空间常量定义和引用问题
- 在常量名称前添加命名空间前缀以支持命名空间常量
- 将常量信息存储结构扩展为包含命名空间和名称字段
- 使用转义后的命名空间名称作为常量查找键值
- 更新模板中常量遍历变量名以避免混淆
- 修复常量定义时的字符串转义处理
- 添加命名空间常量测试用例验证功能
- 实现参数信息存根文件名生成方法
|
7 months ago |
韩天峰
|
0c02958589
|
feat(php): 添加复杂命名空间规则支持并优化函数名转义
- 实现复杂命名空间组合规则,支持 use foo\bar; bar\fn() 形式的调用
- 新增 escapeZendFnName 方法用于函数名转义处理
- 使用统一的函数名转义机制替换模板中的硬编码逻辑
- 移除函数定义中的静态关键字以提高灵活性
|
7 months ago |