韩天峰
|
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 |
韩天峰
|
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 |
韩天峰
|
c8e22239bb
|
docs: 添加 PHP 与 C++ 混合编程指南并完善原生类型文档
- 新增完整的 PHP 与 C++ 混合编程指南文档
- 详细介绍 AOT 编译器的混合编程机制和使用方法
- 添加 Box 封装器机制的完整说明和示例
- 扩展原生类型文档,新增 objval 编译期函数说明
- 更新类型映射表,增加性能和状态标识
- 补充类型声明方式对比表格
- 添加大量实用示例和最佳实践指导
|
5 months ago |
韩天峰
|
1d14d569bf
|
docs: 添加 AOT 编译器文档集
- 新增 COMPILATION_MODES.md 详细介绍扩展模式和二进制模式
- 新增 NATIVE_TYPES.md 说明原生类型支持情况
- 新增 QUICKSTART.md 提供快速入门指南
- 新增 README.md 创建文档索引
- 更新 UNSUPPORTED_SYNTAX.md 补充类型约束说明
|
5 months ago |
韩天峰
|
552fa1c882
|
docs(guide): 添加函数参数类型声明优化指南
- 介绍自动原生类型机制,支持 int、float、bool 参数声明
- 对比 ZVAL 类型与原生类型的内存占用和性能差异
- 提供斐波那契数列和圆周率计算的实际测试案例
- 展示性能对比数据,AOT 原生类型比 Zend VM 快 100-300 倍
- 分析内存布局优化、寄存器直接运算和编译期优化原理
- 提供递归函数、循环密集型、数学计算和条件判断的最佳实践
- 介绍混合类型策略,外层灵活内层高效的设计模式
- 警告类型不匹配、返回值约束和溢出风险等注意事项
- 包含完整的性能测试基准和决策树指导
- 总结核心要点和推荐实践方案
|
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 |
韩天峰
|
1441a7e5be
|
cs-fix
|
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 |
韩天峰
|
8af5580689
|
大重构,新增 FunctionContext 类
|
5 months ago |
韩天峰
|
9eb781464a
|
大重构,新增 FunctionContext 类
|
5 months ago |
韩天峰
|
3df8a36674
|
fix(php): 修复编译器基础类中的对象重置和错误消息
- 在resetFunction方法中添加objects数组的重置
- 更新错误消息以提供更详细的原生方法查找失败信息
- 修正错误消息中包含类名和方法名的格式
|
5 months ago |
韩天峰
|
9526f9992b
|
feat(closure): 完善闭包 use 语法支持
- 添加对非变量表达式的错误检查,只允许变量名
- 实现闭包 use 引用类型的就地变量创建功能
- 在当前作用域中为引用变量设置正确的类型标识
- 改进普通变量的未定义变量错误检查逻辑
- 确保闭包 use 语法的类型安全性和变量可见性
|
5 months ago |
韩天峰
|
a50e889751
|
feat(php): 添加对 foreach 引用语法的支持
- 实现了foreach按引用遍历功能支持
- 添加了类继承链中的原生类检查
- 增加了foreach引用语法的变量类型验证
- 添加了新的测试用例验证引用功能
- 修复了循环引用中的类型安全问题
|
5 months ago |
韩天峰
|
6a48de1321
|
refactor(php): 优化魔术方法检测器的参数验证逻辑
- 添加 checkArgType 方法用于统一处理参数类型检查
- 将 argInfoList 和 returnType 提取为局部变量以提高可读性
- 使用新辅助方法简化各个魔术方法的参数验证逻辑
- 减少重复代码并提高类型检查的一致性
|
5 months ago |
韩天峰
|
41e46c2479
|
refactor(php): 重构父类解析逻辑以支持完全限定名称
- 添加 getParentClass 方法来处理 NodeAbstract 类型的 extends 参数
- 在 Preprocessor 中使用新的 getParentClass 方法替代直接调用 getNamespacedClassName
- 在 Translator 中使用新的 getParentClass 方法替代直接调用 getNamespacedClassName
- 支持对 FullyQualified 名称类型的正确解析
- 保持对普通名称类型的向后兼容性
|
5 months ago |
韩天峰
|
afa770bcab
|
feat(php): 添加模板关键字支持
- 在常量列表中新增 template 关键字
- 扩展 PHP 语法解析器支持 template 作为保留关键字
- 更新相关文档说明新的关键字支持
|
5 months ago |
韩天峰
|
13499a0b7f
|
feat(php): 添加引用生成器支持并优化表达式解析
- 引入 RefGenerator 用于处理引用相关的代码生成
- 添加 OP_REFVAL 操作常量用于引用值转换
- 实现函数参数引用检测和处理逻辑
- 将 parseVarCheckExpr 重命名为 parseChainedExpr 并增强链式表达式支持
- 修复 isset 和 empty 操作的表达式解析一致性
- 添加对多维数组和对象属性链的引用处理支持
- 更新赋值操作中的空合并运算符表达式解析
- 增加引用功能的测试用例验证
|
5 months ago |
韩天峰
|
33d8693776
|
remove(Php): 删除 Encryptor 文件
|
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 |
韩天峰
|
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 |
韩天峰
|
7b4eeefb19
|
fix(php): 修复目标名称验证逻辑
- 在无效标识符错误消息中显示实际的目标名称
- 在保留关键字错误消息中显示实际的目标名称
- 添加目录名称冲突检查以防止覆盖现有目录
- 统一错误消息格式使用反引号包围目标名称
|
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 |
韩天峰
|
cc1b476a31
|
test(aot): 添加类静态常量测试用例
- 新增 class-static-005.phpt 测试文件
- 测试 final public const 在静态方法中的访问
- 验证 static:: 访问修饰符的行为
- 确保版本常量能被正确输出
|
6 months ago |
韩天峰
|
746dc23680
|
feat(core): 添加进程标题设置和获取功能
- 在编译器中添加了 php_cli_process_title.c 和 ps_title.c 源文件
- 在扩展模板中添加了头文件包含和函数注册
- 实现了 cli_set_process_title 和 cli_get_process_title 函数
- 集成了跨平台的进程标题修改功能
- 添加了命令行参数保存和清理机制
- 提供了完整的错误处理和状态码返回
|
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 |