韩天峰
3e9c02a666
feat(parser): add support for PHP 8.4 property hooks and asymmetric visibility
...
- Implement property hook lowering to getter/setter method calls
- Add support for private(set) and protected(set) asymmetric visibility
- Generate appropriate error handling for read-only hooked properties
- Support compound assignments and increment/decrement operations on hooked properties
- Add proper visibility checks for asymmetric property setters
- Update documentation to reflect new property hook capabilities
- Add comprehensive test coverage for property hook functionality
2 months ago
韩天峰
bd2a3da14c
feat(compiler): add PHP version control and pipe operator support
...
- Introduce --php-version CLI option to specify accepted PHP syntax version
- Add support for PHP 8.5 pipe operator with left-to-right evaluation
- Implement PHP version validation in project configuration parsing
- Update parser factory usage to respect configured PHP version
- Add tests for pipe operator functionality and PHP version controls
- Modify stub generation to use configured PHP version
- Update documentation with new --php-version option details
2 months ago
韩天峰
2bad099e09
feat(generator): add yield and generator support using Fiber backend
...
- Implement FiberGenerator trait with yield/yield from parsing
- Add generator detection and preparation logic in function compilation
- Generate TypePHP\FiberGenerator objects that implement Iterator
- Support yield expressions and statements with key-value pairs
- Enable yield from delegation with array and traversable forwarding
- Register fiber generator class entry during module initialization
- Update runtime initialization to use typephp_runtime_init
- Replace php_aot_ prefixed helpers with typephp_ prefixed versions
- Add comprehensive generator test suite covering various scenarios
- Document generator limitations and compatibility restrictions
- Mark dynamic PHP foreach over native generators as XFAIL case
2 months ago
韩天峰
330d7eb655
feat(parser): add support for promoted constructor properties
...
- Add isPromoted property to PropertyInfo class
- Include isPromoted flag in PropertyInfo constructor and initialization
- Set ZEND_ACC_PROMOTED flag for promoted properties in PHP 8.0+
- Update Preprocessor to track promoted status during property creation
- Add promoted flag to PropertyDef entity
- Remove xfails for promoted property tests since they now pass
- Handle promoted properties in constructor parameter processing
2 months ago
韩天峰
d2b7a36430
fix(compiler): resolve bitwise not operation on class constants in AOT compilation
...
- Updated CompilerBase.php to use convertIntExpr for bitwise not operations on variables
- Modified gen_stub.php to always use var_export for default value conversion
- Enhanced object_property test to follow strict type checking with TypeError handling
- Added native property test for bitwise not class constant assignments
- Updated Translator.php to return raw values instead of CValue wrappers for constants
- Improved documentation consistency across project overview files
- Added strict types declaration to property assignment test cases
2 months ago
韩天峰
8ac4c5872d
refactor(core): rename PhpAot namespace to TypePhp across codebase
...
- Updated namespace declarations from PhpAot\Php to TypePhp in all source files
- Modified import statements to use TypePhp instead of PhpAot\Php throughout the codebase
- Adjusted composer.json autoload configuration to map TypePhp namespace to src directories
- Updated documentation references from PhpAot\Php to TypePhp in comments and markdown files
- Changed class references in test files to use new TypePhp namespace
- Updated bootstrap and utility scripts to reference TypePhp namespace
- Removed abstract base class inheritance in CompilerBase class
- Added new properties and methods for indentation and mode handling in CompilerBase
- Updated exception handling to use new TypePhp\Exception namespace
2 months ago
韩天峰
2a75143036
fix(aot): 处理类常量引用的全限定类名
2 months ago
韩天峰
c94be9c6a9
fix(compiler):注入finally块到return路径并修复属性注册
2 months ago
韩天峰
9c5bf37b6f
fix(generator): 修复代码生成器中的引用传递问题
...
- 在函数、参数、常量和属性的代码生成中添加refval包装器
- 确保use引用变量正确传递给代码生成函数
- 解决闭包中通过回调使用引用捕获的功能问题
- 添加测试用例验证闭包引用捕获的正确性
2 months ago
韩天峰
601b985600
feat(compiler): 添加进度条显示并更新依赖库
...
- 集成 ajaxray/ansikit 库用于终端UI显示
- 升级 swoole/phpx 从 v2.1.4 到 v2.3.9 版本
- 在并行编译过程中添加进度条实时显示编译进度
- 移除函数返回类型的推断逻辑和相关字段
- 设置PHP平台版本要求为 >=8.2 <8.6
- 优化编译失败时的错误输出格式
2 months ago
韩天峰
4acb632c13
feat(compiler): 为类方法自动推断返回类型并优化属性访问检查
...
- 在 CompilerBase 中添加类方法返回类型自动推断逻辑
- 为魔术方法设置特定的返回类型标识符
- 移除 isInferredPhpDocType 条件判断简化类型处理
- 更新对象处理器设置使用自定义处理器覆盖 unset 操作
- 修改 SsaPropOptimizer 中的危险属性操作检测逻辑
- 移除对 unset($o->prop) 的特殊处理因为对象处理器已拒绝属性取消设置
- 移除动态调用对象暴露的安全性检查优化性能
- 删除不再需要的 isSafeObjectExposureCall 等辅助方法
2 months ago
韩天峰
25aeff51a7
refactor(generator): 简化类对象处理器初始化逻辑
...
- 移除手动初始化 zend_object_handlers 的冗余代码
- 直接使用预定义的 php_aot_object_handlers 全局变量
- 减少代码行数并提高可读性
- 保持相同的功能实现
2 months ago
韩天峰
e6c3e22f6e
feat(compiler): 添加未定义变量检查和对象处理器初始化
...
- 在属性访问时检查未定义变量并报告错误
- 初始化类对象处理器以支持对象操作
- 添加对未定义变量属性访问的测试用例
- 添加对未定义变量方法调用的测试用例
- 为动态代码中的类型化属性取消设置添加测试
2 months ago
韩天峰
215f5cdcac
feat(stub): 添加对推断PHP文档类型的处理支持
...
- 在ArgInfo构造函数中添加isInferredPhpDocType参数,默认值为false
- 修改beginArgInfoCompatible方法中的有效类型判断逻辑
- 移除未使用的可变参数代码逻辑
- 更新默认参数类型和返回类型推断处理
- 添加mixed类型函数示例文件
- 修复预处理器中参数类型检查的空值判断问题
- 添加void返回类型的基本测试用例
2 months ago
韩天峰
57517381a1
feat(generator): 优化属性默认值生成逻辑支持数组类型
...
- 添加 simpleType 判断逻辑以识别数组类型
- 实现空数组默认值的特殊处理机制
- 新增 hasNullDefault 和 useEmptyArrayDefault 判断条件
- 修改默认值生成流程以支持数组类型的 ZVAL_EMPTY_ARRAY
- 添加静态类属性表达式测试用例验证功能
- 重构代码结构提高可读性和维护性
2 months ago
韩天峰
99c3dec641
feat(php): 添加魔术方法类型推断支持
...
- 在 ArgInfo 类中添加 undeclared 属性用于标识未声明类型
- 在 FunctionDef 类中添加 returnTypeUndeclared 属性用于标识返回类型未声明
- 实现 getMagicMethodDefaultReturnType 函数为魔术方法提供默认返回类型映射
- 实现 getMagicMethodDefaultParamType 函数为魔术方法提供默认参数类型映射
- 更新魔术方法检测器中的类型检查逻辑,支持未声明类型的自动填充
- 重构 MagicMethodDetector 中的参数验证,为不同魔术方法设置正确的类型约束
- 添加对魔术方法参数和返回类型的自动类型补全功能
2 months ago
韩天峰
e0f6de8480
feat(aot): 添加对any类型声明的支持并优化参数信息生成
...
- 添加了012、013、014测试用例验证类型声明功能
- 将any类型作为内置伪类型处理,映射为mixed类型
- 支持方法签名中的any返回类型注解
- 实现PHPDoc类型与实际类型的合并处理逻辑
- 为非可变参数函数自动添加尾随可变参数支持
- 修复了回调函数传递额外参数时的类型处理问题
2 months ago
韩天峰
0dc846a4fc
feat(php): 添加数组初始化计划支持并修复构造函数提升属性默认值处理
...
- 引入 ArrayInitPlan 实体类用于处理数组初始化计划
- 修复构造函数参数提升属性的默认值归属问题
- 为数组类型的参数默认值添加运行时初始化支持
- 实现数组初始化计划的构建和包装逻辑
- 添加默认参数辅助函数生成功能
- 重构静态属性和实例属性的初始化处理逻辑
- 添加 readonly 类测试用例以验证功能正确性
2 months ago
韩天峰
d1c4e365b1
test(const): 添加类常量默认值测试用例
...
- 添加了类常量默认值从 self::CV 获取的测试用例
- 测试静态方法和实例方法中使用类常量作为参数默认值
- 验证了函数调用时传入不同参数的输出结果
- 修复了类常量默认值非字符串类型时的导出问题
- 确保默认值能正确转换为字符串格式进行显示
2 months ago
韩天峰
b89dd177b3
feat(generator): 添加可变参数联合类型检查支持
...
- 在 arginfo 生成中添加对可变参数的支持
- 实现可变参数联合类型的运行时类型检查逻辑
- 添加循环遍历可变参数并逐个验证类型的功能
- 生成适当的错误消息以指示可变参数中的具体错误位置
- 添加测试用例验证可变参数联合类型和可空类型的运行时检查功能
3 months ago
韩天峰
981a8613b5
fix(generator): 修复只读属性的默认值初始化问题
...
- 在生成 PHP stub 时为只读属性使用 ZVAL_UNDEF 初始化
- 防止对只读属性进行类型默认值初始化
- 添加空指针检查以避免访问可能不存在的变量名称
3 months ago
韩天峰
403991357e
feat(generator): 优化属性默认值代码生成逻辑
...
- 替换原有的 ZVAL_UNDEF 初始化方式为类型特定的默认值设置
- 添加 getTypeDefaultValueCode 方法处理各种数据类型的默认值
- 支持整型、浮点型、布尔型、字符串、数组等类型的默认值初始化
- 为测试用例添加对象整型属性优化功能
- 确保可空类型正确初始化为 NULL 值
3 months ago
韩天峰
28d1432664
refactor(type): 移除不必要的类实例断言检查
...
- 删除了 MapType 类中冗余的 get_class 断言验证
- 简化了类型比较逻辑,提升代码简洁性
- 更新版本号从 1055 到 1057
3 months ago
韩天峰
04a56a7762
fix(stub): 修复异常处理并支持属性默认值中的new操作
...
- 在RuntimeException中添加堆栈跟踪信息输出
- 新增对属性默认值为new表达式的处理逻辑
- 添加测试用例验证nullable类型属性的处理
- 支持构造函数参数中使用new操作符作为默认值
3 months ago
韩天峰
057e25a950
feat(type): 添加对 stream 类型的支持
...
- 在类型解析中添加 stream 伪类型的识别和处理
- 将 stream 类型视为与 resource 相同的混合类型处理
- 更新类型映射表以支持 stream 类型到 ZEND_STR_MIXED 的转换
- 修改条件判断逻辑以包含 stream 类型的处理分支
3 months ago
韩天峰
08f90e2df9
feat(php): 添加对box类型的支持
...
- 在CompilerBase中添加TYPE_BOX常量定义
- 将box类型映射到php::Box类型标识符
- 修改类型解析逻辑以支持box伪类型处理
- 更新gen_stub.php中的类型转换和映射逻辑
- 在StdContainerParser中扩展box类型处理
- 添加box类型到类型搜索顺序数组中
- 实现box类型与其他类型的转换逻辑
3 months ago
韩天峰
593cd523d5
feat(php): 添加对 any 类型的支持
...
- 在 CompilerBase.php 中添加 'any' 类型映射到 TYPE_VAR
- 修改 gen_stub.php 中的类型解析逻辑以支持 any 类型
- 当遇到 any 类型时返回 mixed 类型的 SimpleType 实例
- 统一变量名使用以提高代码一致性
3 months ago
韩天峰
bf4c5a7852
fix(generator): 解决常量值格式化和命名空间解析问题
...
- 添加 formatConstValue 函数统一处理常量值格式化
- 修复类常量引用时的字符串转义问题
- 优化 getClassConstValue 方法的命名空间解析逻辑
- 添加 getNamespaceOfClass 工具方法获取类的命名空间
- 更新默认参数处理中的常量值获取方式
- 添加新的测试用例验证默认数组属性功能
3 months ago
韩天峰
17fcb16aec
fix(php): 修复受保护方法访问检查和字符串转义问题
...
- 在 CompilerBase.php 中添加 classDef 检查以避免空指针错误
- 在 gen_stub.php 中对字符串表达式进行转义处理
- 将 Utils.php 中的 genCharPtr 和 escapeString 方法设为公共方法
- 添加测试用例验证默认数组属性功能
3 months ago
韩天峰
ce7d254709
fix(compiler): 修复trait中类常量访问的命名空间解析问题
...
- 为getNamespacedClassName方法添加可选的当前命名空间参数
- 在gen_stub.php中传递当前类信息到getClassConstValue调用
- 在Translator.php中使用当前类的命名空间信息进行类常量查找
- 在类注册完成后清理ClassInfo::$currentClass避免污染
- 修复self引用时的默认值解析逻辑
3 months ago
韩天峰
fb458405b8
允许类方法的默认参数使用类常量
3 months ago
韩天峰
aa51b09fa9
fix(aot): 修复属性数组参数支持并调整编译器方法可见性
...
- 将 CompilerBase.php 中的 parseAssignOpBitwiseOr 方法从 private 改为 protected
- 将 CompilerBase.php 中的 error 方法从 protected 改为 public
- 在 gen_stub.php 中添加对属性数组参数的错误检查和提示
- 修复 Translator.php 中构建目录文件名使用 targetName 而非 getModuleName()
4 months ago
韩天峰
c79573a9fe
fix(php): 修复编译器基类中的回溯打印和类型返回验证问题
...
- 将 printBacktraceOnError 默认值从 false 修改为 true
- 扩展子类作为父类返回时的类型检查,支持抽象类或接口
- 更新 SimpleType::fromNode 和 fromString 方法以支持 ArrayType 返回类型
- 修改测试用例中 ZipArchive 的路径处理逻辑
- 更新测试输出预期结果以匹配新的行为
4 months ago
韩天峰
eaa1b4cd9a
fix(php): 修复编译器基类中的回溯打印和类型返回验证问题
...
- 将 printBacktraceOnError 默认值从 false 修改为 true
- 扩展子类作为父类返回时的类型检查,支持抽象类或接口
- 更新 SimpleType::fromNode 和 fromString 方法以支持 ArrayType 返回类型
- 修改测试用例中 ZipArchive 的路径处理逻辑
- 更新测试输出预期结果以匹配新的行为
4 months ago
韩天峰
489020d5a3
refactor(parser): 优化类信息管理逻辑
...
- 将 ClassInfo::$currentClass 从对象引用改为字符串存储
- 移除 getCurrentClassName 方法并直接使用 $currentClass 属性
- 在类解析过程中正确设置当前类名字符串值
- 统一常量访问时的类名获取方式
- 简化类名字符串的存储和访问流程
4 months ago
韩天峰
799aa629c0
feat(php): 添加 refval 函数支持引用传递功能
...
- 新增 isRefvalCall 方法检测 refval 函数调用
- 在编译器中添加对 refval 函数的特殊处理逻辑
- 实现 refval 函数调用的参数解析和优化
- 添加 refval 函数的 polyfill 实现
- 在 stub 生成中使用 refval 包装声明字符串
- 添加 refval 函数的测试用例
4 months ago
韩天峰
8c4bfd6683
refactor(generator): 更新版本标志对象变量名并修正节点类型声明
...
- 将 $flags 变量重命名为 $obj 以避免与新创建的对象混淆
- 修正 enterNode 方法参数类型声明为 PhpParser\Node
4 months ago
韩天峰
d8a828558d
refactor(generator): 将模板渲染改为直接代码生成
...
- 将 extension.cc.php 模板文件删除,改为在 PHP 代码中直接生成 C++ 代码
- 修改 equalsApartFromNameAndRefcount 方法可见性为 public
- 在函数查找逻辑中添加 TODO 注释说明必须为 public 方法的原因
- 添加 scope.php 示例文件用于测试作用域相关功能
- 删除 simple.php 中的冗余注释代码
- 移除模板渲染方法 render 的实现
4 months ago
韩天峰
2e0cb9db4c
refactor(php): 优化匿名类名称解析逻辑
...
- 添加注释标记匿名类中相对类名转全限定名称的待办事项
- 修复类型声明中的命名空间引用问题
- 统一代码风格以提高可读性
4 months ago
韩天峰
9744cc9e86
feat(build): 添加编译器构建功能并更新项目配置
...
- 新增 src/compiler-build.php 作为编译器入口文件
- 在 extension.cc.php 中添加 zend 异常处理保护机制
- 更新 project.yml 将项目类型从 ext 改为 bin,版本升级到 0.1.0
- 添加新的依赖文件路径到项目配置中
- 在 Php/Symbol.php 中添加 getClassEntrySafe 方法
- 修改 Php/Translator.php 使用安全的类入口获取方法
- 修复 __toString 方法的返回类型声明
- 添加 examples/error/impl.php 示例文件
4 months ago
韩天峰
d1a06ac8d4
refactor(generator): 重构代码生成器的类信息管理和错误处理
...
- 使用 ClassInfo::getCurrentClassName() 方法替代静态属性访问
- 移除 ClassInfo::$currentClassName 静态属性,统一通过实例方法获取类名
- 在属性处理中引入 Skip 异常机制优化 AllowDynamicProperties 处理逻辑
- 统一字符串引用格式从双引号改为单引号以保持一致性
- 将条件声明的空数组初始化改为引用赋值以优化内存使用
- 移除未使用的 Unsupported 异常导入
- 将 Translator 中的异常抛出改为调用 fatalError 方法进行错误处理
4 months ago
韩天峰
ee8c40698b
refactor(compiler): 重构标准库函数调用解析逻辑
...
- 提取 std 函数调用解析为独立方法 parseStdCall
- 简化 CompilerBase 中的类型转换处理逻辑
- 优化 gen_stub 中版本特性合并的实现方式
- 修改 getAllFuncInfos 方法返回值类型为数组合并
- 为 std::int 类型声明测试用例添加新断言
4 months ago
韩天峰
1e47ac0f53
fix(parser): 解决属性默认值处理中的类型转换和重复定义问题
...
- 添加对布尔类型默认值的正确处理和转换
- 修复常量表达式在字符串类型检查中的逻辑错误
- 增加对重复属性定义的检测和错误报告
- 优化数值类型默认值的处理流程
- 添加测试用例验证各种类型的属性默认值行为
4 months ago
韩天峰
f41d42e5bc
feat(compiler): 增强类型声明和对象赋值检查功能
...
- 添加了 objval() 函数支持 Class::class 常量语法
- 实现了方法调用和静态调用的返回类型推断
- 加强了对象类型赋值检查,要求使用 objval() 进行类型对齐
- 禁止字符串与数组之间的直接转换
- 添加了内部类常量值获取功能
- 更新了测试用例验证类型声明功能
4 months ago
韩天峰
e62c953c71
feat(compiler): 完善类型声明和对象赋值检查功能
...
- 将 getNamespacedClassName 方法设为公共方法以便外部调用
- 添加对 self、parent、static 关键字的类型解析支持
- 优化 Name_FullyQualified 节点的解析逻辑
- 实现 detectClassOfExpr 方法用于检测表达式的类类型
- 增强对象赋值时的类型检查和错误提示
- 完善返回值类型的验证机制
- 重构类型检测相关方法的命名和实现
- 添加对 trait 语句的解析支持
- 优化构建模式设置功能
- 增加类型声明相关的测试用例
4 months ago
韩天峰
6426046857
fix(generator): 解决接口中trait使用解析问题并完善trait别名处理
...
- 在gen_stub.php中添加对Interface_类型的检查,避免接口中使用trait时报错
- 移除Translator.php中generateStubFile的异常捕获逻辑,直接抛出异常
- 重构parseTraitUseForStub方法,支持完整的trait别名和冲突解决语法
- 添加getFullMethodName和parseTraitUseOptions辅助方法处理trait方法映射
- 完善trait属性、常量和方法的合并逻辑,支持insteadof和as关键字
- 更新parseTraitUse方法以正确处理trait别名映射关系
- 修复trait方法名称映射和代码生成中的多个边界情况
4 months ago
韩天峰
88693dcc21
feat(aot): 添加对 PHP Trait 特性的支持
...
- 实现了 Trait 的基本语法解析和处理功能
- 添加了 trait 属性、方法、常量的继承机制
- 实现了 trait 使用时的命名空间解析
- 添加了类与 trait 同名成员的冲突处理逻辑
- 新增 trait 相关的测试用例
- 重构了类定义结构以支持 trait 类型判断
4 months ago
韩天峰
d85353f8eb
feat(compiler): 实现常量值解析和类型安全的值生成
...
- 在 ConstantDef 中添加 valueExpr 属性以支持表达式解析
- 将 gen_stub.php 移动到 src 目录并重构为可重用函数
- 实现 getClassConstValue 和 getConstValue 方法处理类常量和全局常量
- 添加 genCValue 工具方法支持不同类型的 C 值生成
- 修改预处理器存储常量表达式节点信息
- 更新编译器基础类 getRelativePath 方法为公共访问
- 优化 stub 文件生成逻辑使用内部函数替代 shell 执行
- 添加错误处理机制替换原有的直接退出方式
4 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