韩天峰
|
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 |
韩天峰
|
52319ccd03
|
refactor(php): 重构函数调用和错误抑制处理逻辑
- 将 isExitExpr 方法中的 Node\Stmt 类型检查更改为 Node\Stmt\Expression
- 移除 getFuncPtr 方法中的 macro 参数及相关逻辑
- 移除 parseFuncCall 方法中的 silent 参数及静默调用相关代码
- 统一函数调用都使用 php::call 方式
- 重写 parseErrorSuppress 方法,使用 error_reporting 函数控制错误报告级别
- 简化调试信息相关的代码生成逻辑
- 删除 cpp_aot_helper.h 中的 CALL 和 CALL_SILENT 内联函数定义
- 更新所有 getFuncPtr 调用移除第二个参数
|
5 months ago |
韩天峰
|
52b1effffb
|
feat(php): 添加对 exit 语句的支持
- 在 AstNodeType 中新增 isReturnExpr、isBreakExpr 和 isExitExpr 方法
- 修改 CompilerBase 中 switch case 的验证逻辑
- 支持 exit 语句作为 switch case 的结束语句
- 更新错误消息以包含 exit 语句的验证
- 重构条件判断使用新的辅助方法进行类型检查
|
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 |
韩天峰
|
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 中添加作用域切换代码生成逻辑
- 添加新的测试用例验证静态方法占位符调用功能
|
6 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 |
韩天峰
|
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 |
韩天峰
|
f85889fce1
|
feat(php): 添加函数调用表达式检测和相关功能支持
- 新增 isCallExpr 方法用于检测函数调用表达式
- 添加 ceWrappers 属性并在闭包生成器中管理其状态
- 添加 lastNativeCall 属性跟踪最后的本地调用
- 实现 resetExpr 方法重置表达式状态
- 更新常量解析中的 get_called_ce 调用
- 在箭头函数解析中添加对 void 返回类型的处理逻辑
- 优化调试信息中 php_file 的设置位置
|
6 months ago |
韩天峰
|
ed45578ef1
|
fix(php): 修复函数参数解析中的默认值计数问题
- 为parseParams方法添加完整的PHPDoc注释
- 将$params参数类型声明为array以增强类型安全
- 引入defaultValueCount变量来准确计算默认值参数数量
- 修复required参数计数逻辑,确保正确处理带默认值的参数
- 添加对classDef为空情况的处理,避免未定义行为
- 调整头文件包含顺序以符合代码风格要求
- 添加函数默认参数测试用例验证修复效果
|
6 months ago |
韩天峰
|
d8e164b32c
|
feat(aot): 添加对static关键字的支持
- 实现了static::method()静态方法调用的编译支持
- 添加了new static()动态实例化的处理逻辑
- 增加了static属性访问的正确解析
- 添加了两个新的AOT测试用例验证static功能
- 实现了延迟解析以支持后期绑定行为
|
6 months ago |
韩天峰
|
cebe50121a
|
refactor(php): 优化PHP编译器代码结构和功能实现
- 修复AstNodeType中isAssignOp方法的命名空间引用问题
- 移除class-static-002测试用例中的多余输出断言
- 在CompilerBase中添加objectWrappers和ceWrappers属性用于对象包装器管理
- 新增getCeWrapper方法用于获取类入口包装器
- 修改注释格式从文档块改为行注释以提升性能
- 移除hasNativeClass和hasNativeFunction的返回值类型注解
- 重构parseArrayMixed方法的位置,从私有方法调整为类末尾重新定义
- 简化魔术常量解析中的字符串拼接逻辑
- 优化静态调用处理,支持static关键字的正确解析
- 添加addTmpVar辅助方法用于临时变量创建
- 统一字符串字面量的引号使用规范
|
6 months ago |
韩天峰
|
d0d66a0982
|
feat(compiler): 实现对 static 关键字的支持
- 修改 getNativeStaticMethod 方法为 getNativeMethod,增加继承链方法查找逻辑
- 添加对 static::class 和 self::class 的差异化处理
- 实现静态编译时对 static 调用的正确解析和转换
- 增加对 late static binding 的支持
- 添加相关辅助函数 php_get_called_class 和 php_get_called_ce
- 更新测试用例验证 static 关键字功能正确性
|
6 months ago |
韩天峰
|
4f375bf869
|
refactor(php): 优化标识符转换方法以支持字面量模式
- 在 identifierToStr 方法中添加 literal 参数以控制字符串生成方式
- 修改 MethodCall 处理逻辑以使用字面量模式进行标识符转换
- 实现字面量模式下的字符串处理逻辑,根据参数决定返回字面量还是指针
- 更新方法签名以兼容新的字面量参数选项
|
6 months ago |
韩天峰
|
7871eb2820
|
feat(compiler): 添加类方法重写支持和动态绑定机制
- 新增 parentClass 属性用于存储父类名称
- 实现 classMethodOverride 和 classExtends 数组用于检测方法重写
- 添加方法重写预处理逻辑,支持子类和父类同名方法的动态绑定
- 修复静态方法调用时的对象指针传递问题
- 增强方法查找机制,支持向上递归查找父类方法
- 添加测试用例验证方法重写功能的正确性
- 改进错误提示信息,提供更准确的错误定位
|
6 months ago |
韩天峰
|
1ce204d4b2
|
fix(aot): 修复AOT编译中的命名空间和静态调用问题
- 修正了getNativeName方法中类名和命名空间参数的顺序
- 添加了对包含反斜杠的函数名进行转义处理
- 修复了常量解析时的类名获取逻辑
- 正确实现了魔术常量__FUNCTION__、__CLASS__和__METHOD__的完整命名空间支持
- 修正了self和static关键字的处理,使其在AOT编译时都使用编译期确定的类名
- 修复了方法调用时类名的命名空间解析和占位符生成逻辑
- 添加了对静态属性访问的支持
|
6 months ago |
韩天峰
|
081c9fcc82
|
refactor(php): 移除调试代码并优化类定义获取逻辑
- 移除了 hasNativeClass 方法中的调试打印堆栈跟踪代码
- 将直接访问类定义数组改为使用 getClassDef 方法获取类定义
- 提高了代码的可维护性和性能表现
|
6 months ago |
韩天峰
|
a54985897f
|
fix(php): 修复类名处理逻辑和静态属性列表结构
- 修复 getNativeName 方法中函数名为空时的处理逻辑
- 添加调试追踪用于非Test类的原生类检查
- 使用 getNamespacedClassName 替代直接获取类名进行查找
- 修改静态属性列表为关联数组以支持完整的属性标识符
|
6 months ago |
韩天峰
|
4d0a44fdbd
|
feat(compiler): 实现静态属性支持和构造函数功能
- 添加静态属性列表存储和初始化机制
- 实现 self 关键字解析为带命名空间的类名
- 在扩展模板中添加静态属性设置代码生成
- 支持构造函数的参数传递和属性初始化
- 过滤抽象方法避免不必要的解析处理
- 添加 bool 类型和构造函数相关的测试用例
|
6 months ago |
韩天峰
|
dac3fa81e8
|
fix(generator): 修复闭包生成器中的变量状态恢复问题
- 将闭包生成器中的变量状态恢复代码从条件判断前移到条件判断后
- 确保在不使用当前作用域时正确恢复原始局部变量状态
- 统一对象、对象包装器、参数和闭包状态的恢复逻辑位置
refactor(compiler): 重构编译器基类中的函数和类管理逻辑
- 添加对函数定义存储结构的注释说明
- 移除废弃的 isNativeFunction 方法
- 添加 inClosure 状态重置功能
- 优化命名空间类名获取逻辑,移除冗余反斜杠
- 修复类方法不应保存到函数集合中的问题
- 添加函数添加辅助方法和原生函数检查方法
- 更新函数调用返回类型检测逻辑
feat(translator): 增强翻译器对类和接口的支持
- 添加对PHP属性声明的支持
- 增加对类常量重复定义的错误检查
- 完善接口解析和实现逻辑
- 优化类定义和继承关系处理
- 改进类常量和属性定义的解析方式
style(helper): 更新C++辅助头文件依赖
- 添加对Zend属性的支持
- 统一代码格式化和命名约定
perf(core): 优化对象克隆和类型转换性能
- 使用 convertToObject 方法替代直接标识符解析
- 提升实例化检查和类型转换效率
- 改进属性访问和错误报告机制
|
6 months ago |