韩天峰
|
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 |
韩天峰
|
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 |