韩天峰
|
feb5041d2e
|
feat(php): 添加静态属性赋值检查和本地槽位优化支持
- 在 AssignOpTrait 中添加对静态属性赋值的支持
- 扩展 CompilerBase 以实现静态属性类型检测和赋值验证
- 添加 assertCanAssignStaticProp 方法进行静态属性赋值检查
- 重构静态属性本地槽位生成逻辑,支持不同数据类型
- 为对象属性提升优化添加安全检查机制
- 新增测试用例验证静态属性原生类型默认值功能
- 更新函数上下文文档注释以反映静态属性槽位映射变化
|
3 months ago |
韩天峰
|
4ff12b58d1
|
fix(php): 修复父类引用和命名参数错误处理问题
- 在parent类型声明前检查classDef是否存在,避免在类外部使用parent关键字时报错
- 改进命名参数缺失默认值时的错误节点定位逻辑
- 为parent类引用添加类上下文检查,防止在类外部使用parent关键字
|
3 months ago |
韩天峰
|
fc2cc22594
|
feat(php): 添加对原生函数调用中命名参数的支持
- 在 checkNativeCallArgs 中验证命名参数
- 实现 getFunctionArgNameIndex 和 getVariadicArgIndex 辅助方法
- 添加 validateNativeNamedCallArgs 方法验证命名参数规则
- 重构函数调用参数处理逻辑支持命名参数重排序
- 实现变长参数和命名参数的混合处理
- 添加构建原生变长参数的方法
- 更新参数类型转换逻辑
- 添加相关测试用例验证功能正确性
|
3 months ago |
韩天峰
|
279fe22d82
|
fix(compiler): 解决对象属性类型检查和赋值操作问题
- 添加对象属性赋值时的类型验证逻辑
- 实现固定类型对象属性的 unset 操作默认值恢复
- 修复 std 命名空间内置类型方法的类型检测
- 更新对象属性类型推断和方法返回类型解析
- 添加对象属性子类赋值到基类类型的错误检查
- 修改测试用例以反映 AOT 编译器的严格类型行为
|
3 months ago |
韩天峰
|
21338f022f
|
refactor(compiler): 优化对象属性提升逻辑并增强危险操作检测
- 移除对this_对象属性unset操作的特殊警告处理
- 重构对象属性提升逻辑,支持更多类型的安全提升判断
- 添加unsafeObjectProps上下文跟踪以标记不可安全提升的属性
- 扩展危险属性操作检测功能,支持动态属性名和引用操作检测
- 优化循环变量分析器,增加对字符串函数的支持
- 添加多项单元测试验证属性提升和危险操作检测的准确性
- 改进代码生成,支持不同类型的属性值宏展开
|
3 months ago |
韩天峰
|
dbaa5a10e0
|
feat(compiler): 添加循环变量优化器以提升整数类型推断
- 在CompilerBase中集成LoopVarOptimizer trait
- 实现range-proven循环变量优化算法,支持while和for循环
- 添加多项式时间复杂度的循环计数器类型窄化功能
- 集成安全检查机制防止不安全的整数运算推导
- 添加针对strlen、count等函数的非负整数类型识别
- 实现循环边界安全检测避免溢出风险
- 新增多种循环模式的测试用例验证优化效果
- 更新现有测试注释以反映新的类型推断行为
|
3 months ago |
韩天峰
|
8950c6d51d
|
fix(compiler): 优化数组编译避免复制操作并更新依赖版本
- 在数组编译过程中添加临时变量清理机制,避免数组复制操作
- 将 phpx 依赖从 2.3.1 版本更新至 2.3.3 版本
- 更新翻译器版本号从 0.2.0 至 0.2.3
- 提升内部版本计数器从 1058 至 1060
- 添加新的数组功能测试用例
|
3 months ago |
韩天峰
|
c9d92e4581
|
fix(php): 更新库文件引用和类型检查消息生成
- 将 libmpdec.lib 和 libmpdec++.lib 替换为带版本号的 libmpdec-4.0.1.dll.lib 和 libmpdec++-4.0.1.dll.lib
- 修改类型检查错误消息中的字符串拼接方式,使用 genCharPtr 方法处理函数名和类型字符串
- 修复返回值类型检查消息的字符串构造逻辑
|
3 months ago |
韩天峰
|
c7c9a8e263
|
refactor(php): 重构 SSA 构建器中的返回和抛出表达式检查
- 将直接 instanceof 检查替换为 isReturnExpr 和 isThrowExpr 方法调用
- 添加 AstNodeType trait 以支持新的表达式类型检查方法
- 统一终端语句的判断逻辑,提高代码可读性和可维护性
|
3 months ago |
韩天峰
|
6a1fb828f8
|
feat(php): 添加对foreach列表解构语法的支持
- 在AssignOpTrait.php中导入ArrayItem类并更新类型检查
- 在CompilerBase.php中添加parseForeachItemAsList方法处理列表解构
- 在CompilerBase.php中修改parseForeachArray方法支持List_节点
- 在Translator.php中扩展foreach循环翻译逻辑以处理列表解构
- 添加foreach-list.phpt和iterator-list.phpt测试用例验证功能
|
3 months ago |
韩天峰
|
79d4c28c91
|
refactor(php): 将平台检测和编译功能从CompilerBase迁移到Translator
- 从CompilerBase.php移除平台检测相关方法(detectPlatform, initializeNewArchitecture, setCppCompiler)
- 从CompilerBase.php移除代码格式化方法(formatCppCode)和save方法
- 从CompilerBase.php移除编译命令选项相关方法(getCompileCommandOptions等)
- 在Translator.php中新增平台检测方法(detectPlatform)
- 在Translator.php中新增代码格式化方法(formatCppCode)和save方法
- 在Translator.php中新增编译命令选项相关方法(getCompileCommandOptions等)
- 移除CompilerBase.php中未使用的SsaBuilder导入
- 在Translator.php中新增必要的平台和编译器工厂类导入
|
3 months ago |
韩天峰
|
b33cdeb086
|
refactor(php): 重构参数类型解析和声明处理方法
- 将 parseParameterType 方法从 CompilerBase 移动到 Preprocessor
- 将 parseDeclare 方法从 CompilerBase 移动到 Translator
- 保持原有功能不变但优化代码结构分布
|
3 months ago |
韩天峰
|
a524211cd3
|
refactor(php): 重构PHP编译器基础功能并完善类继承支持
- 将parseFunction方法从CompilerBase.php迁移到Translator.php中
- 添加SsaBuilder和Skip异常类的引入声明
- 移除Preprocessor.php中的方法重写检测逻辑
- 在Translator.php中恢复类方法重写的检测和处理机制
- 添加新的继承测试示例文件A0.php、C0.php和main.php
- 更新simple.php示例文件内容
- 优化函数解析过程中的SSA分析和变量类型优化逻辑
|
3 months ago |
韩天峰
|
2da2bc094f
|
feat(php): 添加对一等可调用语法的支持
- 在编译器中实现 foo(...) 语法的占位符处理逻辑
- 添加对函数调用占位符的识别和生成支持
- 新增 first-class callable 语法的测试用例
- 实现可调用性检查的正确处理机制
|
3 months ago |
韩天峰
|
5e549a4c15
|
perf(compiler): 优化静态属性访问性能并增强类型检查
- 添加对静态属性 unset 操作的错误处理
- 实现静态属性的 C++ 引用优化提升访问性能
- 为整型和浮点型静态属性添加原生引用支持
- 在函数上下文中添加静态属性引用映射表
- 更新微基准测试包含静态属性操作性能测试
- 添加静态属性 unset 的单元测试用例
- 修复静态属性访问相关的类型声明问题
|
3 months ago |
韩天峰
|
2af89f270e
|
refactor(php): 优化PHP编译器中的整数类型推断和溢出检测
- 启用之前被注释掉的 optimizeVarTypes() 方法调用
- 添加安全整数运算操作的常量定义,包括位运算和取模运算
- 改进表达式溢出检测逻辑,移除幂运算的特殊处理并将其标记为危险操作
- 实现更精确的整数运算危害检查函数 exprHasIntHazard
- 添加递归变量使用检测功能 exprUsesVar 和 isVarNamed 辅助方法
- 扩展危险整数操作检查范围,涵盖控制流语句中的条件表达式
-
|
3 months ago |
韩天峰
|
571efa94c4
|
暂时关闭类型窄化
|
3 months ago |
韩天峰
|
9eec3e7483
|
feat(aot): 添加对全局变量和Stmt_Block语句块的支持
- 在CompilerBase中添加Stmt_Block解析支持
- 新增global-int测试用例验证全局变量整型操作
- 新增globals-null-arithmetic测试用例处理NULL全局变量算术运算
- 修复switch语句缩进格式问题
- 初始化micro_bench中last_time变量
- 注释掉部分性能测试以聚焦核心功能
|
3 months ago |
韩天峰
|
9beb5cbba2
|
fix(parser): 修复赋值操作符和递增递减操作符的上下文状态管理
- 在 parseAssignOp 方法中正确保存和恢复 inAssignExpr 上下文状态
- 在 parsePreInc 方法中正确保存和恢复 inAssignExpr 上下文状态
- 在 parsePostOp 方法中正确保存和恢复 inAssignExpr 上下文状态
- 在 parsePreDec 方法中正确保存和恢复 inAssignExpr 上下文状态
- 修复 FuncCallOptimizer 中对函数参数类型的检查逻辑,排除 VariadicPlaceholder 占位符情况
|
3 months ago |
韩天峰
|
c8e6f2ecc4
|
fix(php): 为方法调用添加异常处理以解决动态调用问题
- 在 findNativeMethod 调用周围添加 try-catch 块
- 捕获 DynamicCall 异常以处理内部类继承的方法
- 添加注释说明无法静态解析类型的情况
- 保持原有逻辑在非异常情况下的正常执行流程
|
3 months ago |
韩天峰
|
b640fef73b
|
feat(compiler): 实现方法调用去虚化优化和BigFloat sqrt支持
- 添加classSubClasses属性用于存储反向类继承关系
- 扩展abs函数支持到BigFloat类型并添加sqrt函数实现
- 允许Big类型与原生类型之间的隐式转换
- 实现方法调用去虚化逻辑,支持final类、final方法、私有方法等情况
- 添加SSA稳定对象类型推断功能
- 修复SSABuilder中空参数值的处理
- 优化SSA类型分析中的非可缩小类型处理
- 添加多个
|
3 months ago |
韩天峰
|
a4a869b7cd
|
feat(php): 添加SSA对象属性引用提升优化器
- 引入SsaPropOptimizer trait实现对象属性引用提升功能
- 扩展CompilerBase类集成新的SSA属性优化器
- 实现对象稳定性分析和安全属性访问检测
- 支持对SSA证明稳定的对象进行int/float属性提升
- 添加对魔术方法、引用捕获等危险操作的安全检查
- 为稳定对象属性生成C++引用别名提升性能
- 添加相关单元测试验证优化效果
|
3 months ago |
韩天峰
|
bf31da8e7b
|
feat(compiler): 实现SSA分析和类型优化功能
- 添加SsaBuilder类用于构建SSA形式和e-SSA分析
- 引入SsaTypeOptimizer trait实现基于SSA的类型窄化优化
- 将FuncCallOptimizer移至Optimizer命名空间
- 在FunctionContext中添加SSA分析器实例
- 实现变量类型的自动窄化为C++原生类型(int/float)
- 添加防止危险操作的类型安全检查
- 支持常量折叠和溢出检测逻辑
- 重构函数参数名称以提高代码可读性
- 添加完整的SSA构建器单元测试覆盖各种场景
|
3 months ago |
韩天峰
|
d377777571
|
feat(php): 优化 strlen 函数的编译时折叠
- 修改 CompilerBase.php 中的条件判断逻辑,确保代码生成正确返回
- 在 FuncCallOptimizer.php 中为 strlen 函数添加常量字符串优化
- 当传入参数为字符串字面量时直接计算长度并生成常量值
- 添加编译时 strlen 常量折叠的测试用例验证功能
|
3 months ago |
韩天峰
|
ff6ca6c03a
|
重构:将代码迁移至独立的 PHP 源文件,减少核心类的代码行数
|
3 months ago |
韩天峰
|
e7680c5e81
|
feat(php): 扩展 refval 函数支持数组元素和对象属性引用
- 添加对 refval($arr[key]) 数组元素引用的支持
- 添加对 refval($obj->prop) 对象属性引用的支持
- 实现 expandRefvalExpr 方法处理复杂引用表达式
- 增强错误检查验证 refval 参数类型
- 添加相应的单元测试用例
|
3 months ago |
韩天峰
|
6b65d23ffe
|
fix(php): 修复闭包中的返回类型检查逻辑
- 在返回类型检查条件中添加闭包上下文判断
- 避免在闭包内部执行不必要的返回类型验证
- 确保闭包环境下的代码生成正确性
- 修复三处相同的返回类型检查逻辑以保持一致性
|
3 months ago |
韩天峰
|
3b5345d68e
|
feat(php): 添加联合类型和可空类型的运行时检查支持
- 在 ArgInfo 中新增 typeCheck、typeStr 和 typeNode 属性用于类型检查
- 在 FunctionDef 中新增 returnTypeCheck、returnTypeStr 和 returnTypeNode 属性
- 实现 buildTypeCheckFromNode 方法解析联合/可空类型节点
- 实现 genSingleTypeCondition 方法生成单个类型检查条件
- 实现 genUnionParamCheck 方法生成参数类型检查代码块
- 实现 genUnionReturnCheck 方法生成返回值类型检查代码块
- 在编译过程中集成参数和返回值的运行时类型检查
- 添加 union-param-check.phpt 和 union-return-check.phpt 测试用例
- 支持基本类型、类类型和特殊类型的联合类型检查
- 实现详细的错误消息生成机制
|
3 months ago |
韩天峰
|
593c6ec2a5
|
feat(compiler): 添加内置 mpdecimal 头文件目录支持
- 添加 mpdecimal C 库头文件路径到编译器包含路径
- 添加 mpdecimal++ C++ 库头文件路径到编译器包含路径
- 支持在 Linux/macOS 平台下自动配置 mpdecimal 依赖库路径
|
3 months ago |
韩天峰
|
1ea7ec0764
|
feat(compiler): 添加性能分析和 objval 函数支持
- 在 Clang、Gcc 和 Msvc 编译后端中添加 PROF_OUTPUT_FILE 宏定义支持
- 实现编译器性能分析模式,通过 --profile 参数启用并自动链接 -lprofiler 库
- 添加 .prof 文件分析功能,支持 php bin/compiler.php app.prof 格式调用 pprof 工具
- 实现 objval() 函数的 AOT 编译支持,用于对象类型转换
- 更新编译器缓存逻辑,启用性能分析时强制重新编译
- 添加 Linux 平台限制检查,非 Linux 系统使用 --profile 参数时显示错误提示
- 创建 objval 函数的单元测试用例
|
3 months ago |
韩天峰
|
33ee85c122
|
refactor(Php): 更新数值类型转换函数命名
- 将 php::newBigInt() 替换为 php::toBigInt()
- 将 php::newDecimal() 替换为 php::toDecimal()
- 将 php::newBigFloat() 替换为 php::toBigFloat()
- 移除不再使用的 mpdec++ 和 mpdec 库依赖
|
3 months ago |
韩天峰
|
f30a29a048
|
fix(php): 修复文件编码检查和方法调用问题
- 添加了UTF-8编码检查以确保文件正确读取
- 更新了composer.json中的swoole/phpx依赖版本
- 修复了Translator中类名获取的方法调用
- 移除了UniversalMethodCall中不需要的返回类型参数
|
3 months ago |
韩天峰
|
31bd1ae256
|
fix(php): 修复严格类型声明和类型检查逻辑
- 移除未使用的 strictTypes 属性
- 在 declare(strict_types=0) 时抛出错误,只支持 strict_types=1
- 简化类型赋值检查逻辑,统一类型相同时可赋值
- 移除宽松类型转换警告相关代码
|
3 months ago |
韩天峰
|
775972cc8c
|
refactor(php): 移除未使用的常量和方法
- 移除了未使用的 MAX_BYTES_IN_STACK 常量
- 移除了未使用的 addCompilationOption 方法
- 移除了未使用的 TYPE_SEARCH_ORDER 常量
- 清理了编译器基类中的冗余代码
|
3 months ago |
韩天峰
|
b04ee5e8b2
|
refactor(Php): 重构编译器中的类名解析和参数构建逻辑
- 将 toObject() 方法中的类名解析逻辑提取为独立的 resolveClassNameArg() 方法
- 简化了 UniversalMethodCall 中的参数构建过程
- 提取通用的 buildReceiverArgs() 方法来处理接收者参数构建
- 移除了重复的参数处理代码,提高了代码复用性
- 改进了错误处理的一致性
|
3 months ago |
韩天峰
|
bbbb3c948e
|
refactor(php): 重构表达式字符串转换逻辑
- 将复杂的条件判断结构替换为统一的方法调用
- 提取类型检测和字符串转换逻辑到独立方法
- 简化代码结构并提高可读性
- 减少重复代码提升维护性
|
3 months ago |
韩天峰
|
a510801d24
|
refactor(php): 重构二进制运算符相等性比较逻辑
- 移除重复的类型检测和转换代码
- 引入 genBigNumericCmp 方法统一处理大数值比较
- 简化 Equal 和 NotEqual 运算符的实现
- 优化 Spaceship 运算符的比较逻辑
- 统一字符串转换方法的调用方式
|
3 months ago |
韩天峰
|
215c077291
|
refactor(php): 优化类名解析逻辑并添加objval函数支持
- 提取类名参数解析逻辑到独立的resolveClassNameArg方法
- 简化toObject方法中的类名解析实现
- 添加对objval函数调用的类名解析支持
- 在polyfills中定义objval函数以支持新的解析逻辑
|
3 months ago |
韩天峰
|
26a538680f
|
refactor(php): 将 stream_cast 函数替换为 toStream 方法
- 移除 stream_cast 全局函数实现
- 将 stream_cast($stream) 调用转换为 $stream->toStream() 方法调用
- 更新编译器中的流类型识别逻辑,移除对 stream_cast 的特殊处理
- 修改标准容器解析器中的 unsafePtr 为 boxExpr 属性
- 更新相关测试文件中的调用方式和断言
- 替换不安全指针转换为标准容器转换方法
|
3 months ago |
韩天峰
|
a4ac86524c
|
refactor(compiler): 优化关键字方法分派逻辑
- 简化了关键字方法和扩展方法的检测流程
- 统一了接收器类型的获取方式
- 提取了重复的空值检查逻辑
- 改进了代码结构和可读性
- 为关键字扩展方法添加了测试用例
|
3 months ago |
韩天峰
|
7a164aa8ee
|
refactor(php): 重构关键词方法查找机制以支持扩展方法
- 将 TO_METHOD_TYPE_MAP 重命名为 KEYWORD_METHOD_MAP
- 实现统一的关键词方法查找函数 findKeywordMethod()
- 添加对 __ 扩展方法的支持,允许作为 $receiver->camelCase() 调用
- 在方法分派前先检查关键词扩展方法
- 为关键词扩展方法实现蛇形命名转换和参数验证逻辑
- 更新现有方法调用以使用新的关键词方法映射常量
|
3 months ago |
韩天峰
|
1bb0324605
|
feat(compiler): 支持字符串到大数类型的转换
- 添加字符串到Decimal类型的转换逻辑
- 添加字符串到BigInt类型的转换支持
- 添加字符串到BigFloat类型的转换支持
- 为字符串字面量提供直接转换优化
- 添加测试用例验证链式调用场景
|
3 months ago |
韩天峰
|
52fcc86660
|
feat(php): 添加对void类型方法调用的检查
- 在CompilerBase.php中检测接收器类型为void时抛出致命错误
- 为变量表达式方法调用添加void类型检查
- 为命名方法调用添加void类型检查
- 在单元测试中添加void方法调用测试用例
- 创建void方法调用测试代码文件
|
3 months ago |
韩天峰
|
32ac23630a
|
fix(type): 修复stream和box伪类型的类型转换处理
- 移除CompilerBase中对stream/box类型的硬编码转换逻辑
- 在Preprocessor中添加stream/box到var类型的运行时转换
- 修改Translator中参数类型的C++代码生成逻辑
- 更新UniversalMethodCall中stream/box类型的参数匹配规则
- 添加测试用例验证数组元素链式调用的类型转换功能
|
3 months ago |
韩天峰
|
3f9c76df5d
|
refactor(compiler): 替换 std::unsafe_cast 为对象方法调用并优化类型转换
- 将测试文件中的 std::unsafe_cast 调用替换为对应的 toStd* 方法
- 移除 std::unsafe_cast 函数实现,改为使用 $source->toStdMap 等方法
- 更新错误消息输出,移除函数名前缀
- 添加 TO_METHOD_TYPE_MAP 常量定义类型转换方法映射
- 修改变量赋值检查逻辑,支持新的 to* 转换方法
- 移除对 objval 函数的支持,统一使用 toObject 方法
- 新增 parseToStdAssign 方法处理标准容器转换分配
- 添加 genToObjectCall 和 genToConvertCall 代码生成方法
- 重构 UniversalMethodCall 类,移除重复的转换方法定义
- 优化类型检测逻辑,支持新的转换方法类型推断
|
3 months ago |
韩天峰
|
275ef95da7
|
移除 resolveExprType 方法,只使用 detectTypeOfExpr
|
3 months ago |
韩天峰
|
8faac7d972
|
fix(compiler): 修复方法调用解析中的参数传递错误
- 修正了 BackendOptionsTest 中的优化级别断言,从 /O2 改为 /O1
- 修复了 CompilerBase 中的方法名参数传递错误,将 $method 改为 $methodName
- 在无法调用方法时添加了致命错误提示
- 删除了 PreprocessorTest 中已弃用的缓存测试方法
|
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 |
韩天峰
|
4c3d7ca4c3
|
feat(compiler): 添加对 bigint、bigfloat 和 decimal 类型的支持
- 在 zendTypeMap 中添加了 bigint、bigfloat 和 decimal 类型映射
- 实现了类型名称的大小写不敏感匹配逻辑
- 添加了对 std 类中 bigInt、bigFloat 和 decimal 方法的类型推断
- 支持 native_types、decimal_types 和 bigint_types 的大小写不敏感解析
- 在 polyfills.php 中定义了新的类型常量
- 添加了相关测试用例验证大数运算功能
- 优化了变量类型检测和赋值时的类型处理逻辑
|
3 months ago |