韩天峰
|
15bcacacc0
|
fix(php): 修复引用参数传递中的静态属性处理问题
- 在引用参数解析中添加临时变量处理以支持引用类型参数
- 为静态属性获取器添加 toReference() 方法调用支持
- 添加新的测试用例验证静态属性引用操作的正确性
- 优化编译器对 nativeProperty 属性的引用值处理逻辑
|
2 months ago |
韩天峰
|
991e4bc931
|
refactor(backend): 将命令构建方法从修改字符串改为返回标志字符串
- 将 Clang 和 GccLikeBackend 中的 addPICFlag 方法重构为 getPICFlag
- 将 addPlatformLinkFlags 方法重构为 getPlatformLinkFlags
- 将 addPlatformFullLinkFlags 方法重构为 getPlatformFullLinkFlags
- 修改调用方式从传引用改为直接拼接返回的标志字符串
- 统一 Windows 平台的特殊处理逻辑
- 保持原有功能不变但改进代码结构
|
2 months ago |
韩天峰
|
73e4754a49
|
feat(backend): 实现响应文件机制解决命令行长度限制
- 添加 createResponseFile 方法将目标文件列表写入 .rsp 文件
- 在 MSVC、GCC/Clang 编译器后端中使用 @rsp 参数替代长命令行
- 修复单元测试以验证响应文件参数生成
- 支持路径含空格时的双引号包裹处理
- 兼容 Windows 8191 字符命令行长度限制
|
2 months ago |
韩天峰
|
7c2192ff54
|
refactor(backend): 重构编译器后端实现以支持 GCC/Clang 共享基类
- 将 Clang 和 GCC 后端重构为继承自新的 GccLikeBackend 基类
- 移除重复的编译和链接命令构建逻辑
- 添加平台特定的钩子方法用于扩展功能
- 在 FunctionContext 中添加 SSA 构建器属性
- 统一编译器和链接器命令的初始化方式
- 优化 Windows 平台兼容性处理逻辑
|
2 months ago |
韩天峰
|
d49743a0fe
|
fix(php): 修复类型节点解析和返回类型检查问题
- 修正 resolveTypeNode 方法的返回类型为 NodeAbstract
- 在返回类型检查中添加对原生类的判断条件
- 仅对存在的类进行静态检查以避免动态类的编译期验证错误
- 保持对抽象类和接口的原有检查逻辑
|
2 months ago |
韩天峰
|
cd37d26e64
|
feat(generator): 添加匿名类生成器支持命名空间类型解析
- 新增 AnonClassGenerator trait 处理匿名类类型名称解析
- 实现匿名类内部类型引用转为全限定名称的功能
- 添加处理命名空间 use 导入的类型匹配逻辑
- 重构嵌入代码生成方法到独立 trait 中
- 添加匿名类继承和接口实现的全限定名称转换
- 新增测试用例验证匿名类在命名空间中的行为
|
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 |
韩天峰
|
2800b974e3
|
refactor(php): 重构SSA分析和对象属性优化实现
- 移除FunctionContext中的ssaBuilder属性,改为函数内部临时创建
- 修改optimizeLoopVars、optimizeObjectProps、optimizeVarTypes方法接受SsaBuilder参数
- 实现对象别名传播检测以改进属性提升优化
- 添加resetAnalysisTemporaries方法重置分析临时数据
- 更新变量类型检测逻辑以支持SSA定义的局部变量
- 修复构造函数可以被重写的检查逻辑
- 扩展isTypedObject方法以包含稳定对象检测
- 为字符串连接扁平化和对象属性逃逸分析添加测试用例
|
2 months ago |
韩天峰
|
0f6e07252b
|
refactor(php): 优化PHP解析器中的字符串连接操作处理
- 实现了递归展平函数来处理嵌套的连接表达式
- 将原有的二元操作符处理改为多参数列表处理
- 添加了类型检查逻辑以防止空值连接错误
- 更新了OPcache配置命令以确保扩展正确加载
- 重构了连接操作的字符串转换和参数构建过程
|
2 months ago |
韩天峰
|
286330f45d
|
test(php): 添加继承错误测试用例并实现继承兼容性检查
- 添加了类常量可见性错误的测试用例
- 添加了方法继承不兼容的测试用例
- 实现了属性重写的类型、可见性和只读性检查
- 实现了常量重写的类型和可见性检查
- 实现了方法重写的可见性检查
- 添加了继承错误相关的测试文件和断言逻辑
- 在翻译器中集成了继承兼容性验证功能
|
2 months ago |
韩天峰
|
23a100caf4
|
feat(php): 添加PHP方法重写签名验证功能
- 实现了子类方法重写时参数数量、返回类型、参数类型的兼容性检查
- 添加了按引用传递参数和可变参数的签名匹配验证
- 新增了继承错误测试用例文件
- 重构了方法重写检查逻辑,提取为独立的验证函数
- 更新了错误提示信息以显示具体的不兼容原因
|
2 months ago |
韩天峰
|
b3e489d334
|
refactor(aot): 重构标准容器实现将unordered_map重命名为ordered_map
- 将StdUnorderedMap重命名为StdOrderedMap并在所有相关文件中更新引用
- 修改polyfills.php中std::unordered_map为std::ordered_map,std::map为std::unordered_map
- 更新文档中关于标准容器的命名和功能描述
- 修复所有测试文件中关于容器类型的断言和期望值
- 调整编译器内部类型标识符从TYPE_STD_UNORDERED_MAP到TYPE_STD_ORDERED_MAP
- 修改解析器中对标准容器类型的判断和处理逻辑
- 更新单元测试中的类型检查和声明获取方法
|
2 months ago |
韩天峰
|
e4e63e7b8c
|
fix(php): 修复静态属性引用槽在动态引用绑定后的有效性问题
- 实现了对原生类型静态属性的引用管理机制
- 为整型和浮点型静态属性创建稳定的 zval* 槽位
- 添加了静态属性引用信息的条件检查和初始化逻辑
- 更新了静态属性访问的帮助函数选择机制
- 修改了变量声明生成以统一使用 zval* 类型
- 优化了头文件包含的代码生成格式
- 添加了相关的单元测试验证对象属性操作收集
- 新增了静态属性引用槽崩溃场景的测试用例
|
2 months ago |
韩天峰
|
602e8b34ee
|
feat(compiler): 为嵌入类方法添加混合返回类型推断支持
- 实现了对匿名类和嵌入类方法的混合返回类型自动推断
- 添加了魔术方法返回类型敏感性检测逻辑
- 集成了祖先类方法返回类型的递归检查机制
- 扩展了类继承链中的返回类型声明分析功能
- 优化了内部类和接口方法返回类型的反射检测
- 新增了类方法返回类型未声明时的混合类型注入逻辑
fix(optimizer): 修复对象属性提升优化中的引用槽位安全检测
- 修正了对象暴露给动态代码时的属性引用安全检查机制
- 更新了方法调用和函数调用的安全性判断逻辑
- 重构了对象参数传递时的危险操作检测算法
- 添加了
|
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 |
韩天峰
|
72cf8e7166
|
refactor(php): 优化零值字面量判断逻辑
- 移除多余的变量赋值,直接返回表达式结果
- 统一数值比较操作符的一致性
- 为字符串数值转换添加括号以提高可读性
- 新增对常量和类常量表达式的零值检测支持
- 简化函数中的重复返回语句结构
|
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 |
韩天峰
|
dc5c90044b
|
fix(php): 修复$GLOBALS变量处理问题
- 在CompilerBase.php中为$GLOBALS添加特殊处理逻辑,使用php_globals_array()创建独立副本
- 在FuncCallOptimizer.php中优化函数调用时对$GLOBALS的处理
- 移除Translator.php中$GLOBALS的全局变量初始化代码
- 避免直接操作$GLOABLS符号表的引用计数
- 确保$GLOBALS在各读取位置都通过安全方式访问
|
2 months ago |
韩天峰
|
129fcce880
|
fix(php): 修复全局变量处理和代码格式化问题
- 将默认代码格式化功能从禁用改为启用
- 添加 GLOBALS 超全局变量到类型映射数组
- 在函数调用优化器中检查参数变量是否存在避免动态调用错误
- 为全局变量添加线程本地存储支持
- 实现 GLOBALS 超全局变量的特殊初始化逻辑
- 修复全局变量清理过程中的 GLOBALS 处理
|
2 months ago |
韩天峰
|
99c3dec641
|
feat(php): 添加魔术方法类型推断支持
- 在 ArgInfo 类中添加 undeclared 属性用于标识未声明类型
- 在 FunctionDef 类中添加 returnTypeUndeclared 属性用于标识返回类型未声明
- 实现 getMagicMethodDefaultReturnType 函数为魔术方法提供默认返回类型映射
- 实现 getMagicMethodDefaultParamType 函数为魔术方法提供默认参数类型映射
- 更新魔术方法检测器中的类型检查逻辑,支持未声明类型的自动填充
- 重构 MagicMethodDetector 中的参数验证,为不同魔术方法设置正确的类型约束
- 添加对魔术方法参数和返回类型的自动类型补全功能
|
2 months ago |
韩天峰
|
1e6fb4972a
|
feat(php): 支持 compact 函数中的 'this' 变量
- 添加了对 compact('this') 的支持,允许在类方法中使用 this 变量
- 实现了 'this' 变量的特殊处理逻辑,避免未定义变量错误
- 添加了类上下文检查,防止在类外部使用 compact('this')
- 创建了新的测试文件来验证 compact('this') 在不同场景下的行为
- 更新了函数调用优化器以正确处理 'this' 变量的特殊情况
|
2 months ago |
韩天峰
|
989395d7e1
|
fix(php): 修复常量比较的大小写敏感问题
- 修改 isScalarBool 方法使用 strtolower 进行不区分大小写的布尔值比较
- 修改 getBoolValue 方法使用 strcasecmp 替代严格相等比较
- 修改 isNull 方法使用 strcasecmp 进行不区分大小写的 null 比较
- 在 getConstantValue 中使用 strcasecmp 替代严格相等比较
- 在 getTypeFromConstant 中使用 strcasecmp 替行不区分大小写的布尔值检查
- 添加对函数内部声明函数的错误检查
- 添加测试用例验证布尔数组排序功能
|
2 months ago |
韩天峰
|
397bfc9fbb
|
refactor(php): 优化编译器参数引用检测逻辑
- 修改 CompilerBase.php 中 isPassedByReference 方法,增加对变长引用参数的支持
- 添加 Reflection::getVariadicParameter 方法用于获取可变参数的引用信息
- 修复 toReference 空链情况下的调用逻辑,改为使用成员函数形式
- 新增 array-multisort 函数的测试用例验证正常参数功能
|
2 months ago |
韩天峰
|
e0f6de8480
|
feat(aot): 添加对any类型声明的支持并优化参数信息生成
- 添加了012、013、014测试用例验证类型声明功能
- 将any类型作为内置伪类型处理,映射为mixed类型
- 支持方法签名中的any返回类型注解
- 实现PHPDoc类型与实际类型的合并处理逻辑
- 为非可变参数函数自动添加尾随可变参数支持
- 修复了回调函数传递额外参数时的类型处理问题
|
2 months ago |
韩天峰
|
cba9990e80
|
refactor(parser): 重构零值字面量检测逻辑
- 将 isZeroLiteral 方法从 BinaryOpTrait 移动到 CompilerBase 类中
- 为 isZeroLiteral 方法添加详细的文档注释说明其用途
- 添加 targetPlatform 配置选项支持交叉编译目标平台
- 修复对象属性测试用例中的数组索引访问功能
- 在 array_sum 和 array_product 测试中添加错误报告控制
|
2 months ago |
韩天峰
|
8267ae2bf4
|
feat(build): 添加交叉编译目标平台支持
- 在 Clang 和 GCC 编译器后端中添加 --target 参数支持
- 添加 target-platform 配置选项的常量定义
- 在命令行参数解析中添加对 target-platform 的支持
- 将 target-platform 配置传递给编译器命令生成逻辑
- 更新帮助文档显示新的交叉编译选项
- 支持指定交叉编译目标三元组 (如 aarch64-linux-gnu)
|
2 months ago |
韩天峰
|
22c2d17954
|
feat(cli): 添加 no-color 命令行选项并清理帮助文档
- 添加 no-color 参数用于禁用 ANSI 颜色输出
- 移除帮助文档中过多的命令行示例
- 简化 CLI 帮助界面以提高可读性
|
2 months ago |
韩天峰
|
4e7acaf940
|
feat(compiler): 添加目标CPU指令集优化支持
- 在 Clang 和 GCC 后端中添加 -march 参数支持
- 新增 --march <arch> 命令行选项用于指定目标CPU架构
- 在 CompilerBase 中添加 march 属性和 getter 方法
- 更新文档说明 --march 选项的用法和常见值
- 在常量定义中注册 march 参数配置
- 在翻译器中解析和处理 --march 命令行参数
- 将 march 配置传递给编译后端命令构建过程
|
2 months ago |
韩天峰
|
8f3f3e73eb
|
refactor(php): 简化配置项读取逻辑
- 移除对下划线格式配置键的支持,统一使用中横线格式
- 更新 cxx-flags 配置项读取方式
- 更新 cxx-std 配置项读取方式
- 更新 ld-flags 配置项读取方式
- 更新 link-libs 配置项读取方式
- 更新 link-paths 配置项读取方式
- 更新 cpp-compiler 配置项读取方式
|
2 months ago |
韩天峰
|
02a91bba95
|
feat(compiler): 添加外部库集成和编译优化功能
- 支持通过 -I/--include-path 添加自定义头文件搜索路径
- 支持通过 -D/--define 定义预处理器宏用于条件编译
- 实现 LTO 链接时优化功能 (--lto) 提升性能和减小体积
- 添加 clang-format 代码格式化支持 (--format)
- 支持通过 -l/-L 参数链接外部库和指定库搜索路径
- 添加配置文件方式定义链接库和搜索路径
- 更新文档包含新功能使用说明和示例
|
2 months ago |
韩天峰
|
b8247d4cc7
|
test(array): 添加数组合并展开操作的测试用例
- 新增 array-merge-unpack.phpt 测试文件
- 实现 Dg 类用于测试数组合并展开功能
- 添加 f1 方法测试 array_merge(...array_map('array_values', $this->r))
- 添加 f2 方法测试双重 foreach 循环展开
- 实现 chk 方法验证两种方法的结果一致性
- 添加 main 函数执行测试用例
fix(optimizer): 修复函数调用优化器对命名参数和展开参数的处理
- 在 dispatchFuncCall 方法中添加参数检查逻辑
- 检测到命名参数或 unpack 展开参数时返回 false
- 避免静态优化路径处理需要运行时解析的参数
- 确保命名参数和展开语法正确回退到动态调用
|
2 months ago |
韩天峰
|
e55da7297d
|
feat(compiler): 添加输出目录参数支持
- 在 CompilerBase 中添加 outputDir 属性用于存储 -o 参数指定的输出目录
- 实现将目标文件路径与输出目录进行拼接的功能
- 在 Translator 中解析输出参数中的路径分隔符并分离目录和文件名
- 支持通过 -o 参数直接指定完整的输出路径包括目录结构
|
2 months ago |
韩天峰
|
a6a62c8e81
|
refactor(compiler): 优化构建目录处理和代码生成流程
- 将干运行输出改为使用translator的output方法并添加颜色样式
- 在设置构建目录时添加路径解析和验证,确保目录存在且可访问
- 移除重复的头文件和扩展源文件生成代码
- 重构代码生成逻辑,将头文件生成移到正确的执行位置
- 添加对构建路径解析失败的异常处理
|
2 months ago |
韩天峰
|
3801158b41
|
feat(compiler): 添加干运行模式和构建目录选项
- 实现了 --dry 参数支持,允许仅生成 C++ 代码而不进行编译链接
- 添加了 --build-dir 参数用于指定生成 C++ 代码的构建目录
- 在翻译器中增加了 dryRun 属性和对应的判断方法
- 更新了命令行帮助信息,显示新的参数选项
- 在干运行模式下显示生成的源文件数量和构建目录路径
- 添加了相关常量定义和参数解析逻辑
|
2 months ago |
韩天峰
|
cce6967acf
|
fix(php): 修复静态属性晚绑定支持问题
- 修改 CompilerBase.php 中的静态属性处理逻辑,正确区分 self 和 static 关键字
- 为 native-property-full-name.php 添加 writeStatic 测试方法
- 更新 NativePropertyTest.php 中的编译方法返回值类型和测试用例
- 添加静态属性晚绑定功能的完整测试用例 static-prop-late-static-binding.phpt
|
2 months ago |
韩天峰
|
91675ed366
|
feat(php): 添加除零检查和改进原生属性访问功能
- 添加对字面量除零、模零、赋值除零和赋值模零操作的编译时检查
- 实现对整数、浮点数和字符串类型的零值检测
- 为 AssignOpTrait 和 BinaryOpTrait 添加 guardLiteralDivisionByZero 方法
- 改进原生属性访问的类名解析,使用完整的类名进行查找
- 支持 static 关键字作为类名解析的一部分
- 添加 isSameClassName 和 isSameOrSubclassOf 辅助方法用于类继承关系判断
- 实现受保护属性访问权限控制的 canAccessProtectedProperty 方法
- 添加多个测试文件验证除零检查和原生属性访问功能
- 创建 NativePropertyTest 和 OperatorTest 测试类验证相关功能
|
2 months ago |
韩天峰
|
7e52d51b5b
|
fix(php): 解决除零运算错误处理问题
- 添加了对除法和取模运算中零值检测的统一处理
- 当遇到除零或模零运算时抛出致命错误而不是返回NaN
- 移除了旧的零除法返回NaN的逻辑
- 统一了除法和取模运算的零值检查条件
|
2 months ago |
Yurun
|
8e5b9e8076
|
fix(compiler)): 修复除以零MSVC编译不通过
|
2 months ago |
Yurun
|
30ef9352a2
|
fix(const): 修复常量名与变量名冲突问题、常量名大小写敏感问题
|
2 months ago |
Yurun
|
f2e063b41d
|
fix(compiler): 修复命名空间内类名解析及use别名查找
|
2 months ago |
韩天峰
|
5a7805b544
|
feat(php): 添加对动态属性赋值操作符和递增递减操作的支持
- 实现了动态属性的赋值操作符(如 +=、-=、.= 等)的解析和代码生成
- 添加了动态属性递增递减操作(++、--)的特殊处理逻辑
- 新增 genDynamicPropIncDec 方法用于生成动态属性 ++/-- 操作的 C++ 代码
- 为 clone 测试用例中的属性访问错误提供了更准确的错误消息
- 在属性获取逻辑中添加了静态与非静态属性访问的错误检查机制
|
2 months ago |
韩天峰
|
db5de84468
|
fix(php): 修复可选参数中的null值处理问题
- 在函数调用优化器中添加对可空参数的支持
- 修改buildArgList方法以接收和处理nullables数组
- 当参数允许null值时直接传递原始变量而非解析值
- 更新函数反射信息以包含参数可空性信息
- 调整测试用例以反映explode函数中null限制的行为变化
- 移除显式传入null时使用默认值的特殊处理逻辑
|
2 months ago |
韩天峰
|
f0c4b6bc98
|
fix(php): 解决可选参数传入null时使用C++默认值的问题
- 当可选参数显式传入null时跳过该参数,使C++默认值生效
- 添加对substr、strpos、stripos、strrpos、strstr、explode等函数的null参数处理
- 确保null参数行为与PHP原生函数一致
- 新增测试用例验证各种可选参数为null时的正确行为
|
2 months ago |
yurunsoft
|
dfb6f693c3
|
修复 Windows 运行测试 (#1)
Co-authored-by: Yurun <admin@yurunsoft.com>
Reviewed-on: #1
Co-authored-by: yurunsoft <admin@yurunsoft.com>
Co-committed-by: yurunsoft <admin@yurunsoft.com>
|
2 months ago |
韩天峰
|
29236bb66a
|
test(php): 添加对象属性默认数组测试并移除运行时初始化检查
- 新增 multiple default array properties 测试用例
- 移除 ArrayInitPlan 的 requiresRuntimeInit 检查逻辑
- 简化 wrapArrayInitPlan 方法实现
|
2 months ago |
韩天峰
|
0dc846a4fc
|
feat(php): 添加数组初始化计划支持并修复构造函数提升属性默认值处理
- 引入 ArrayInitPlan 实体类用于处理数组初始化计划
- 修复构造函数参数提升属性的默认值归属问题
- 为数组类型的参数默认值添加运行时初始化支持
- 实现数组初始化计划的构建和包装逻辑
- 添加默认参数辅助函数生成功能
- 重构静态属性和实例属性的初始化处理逻辑
- 添加 readonly 类测试用例以验证功能正确性
|
2 months ago |
韩天峰
|
5ed79e9451
|
fix(php): 修复字面量字符串为空时的编译错误
- 在声明字面量字符串数组前检查数组是否为空
- 避免当没有字面量字符串时生成无效的 extern 声明
- 添加空数组条件判断以防止编译器报错
- 为函数默认值相关的字符串字面量添加相同保护
- 确保代码在各种情况下都能正确编译
|
2 months ago |