韩天峰
|
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 |
Yurun
|
30ef9352a2
|
fix(const): 修复常量名与变量名冲突问题、常量名大小写敏感问题
|
2 months ago |
Yurun
|
f2e063b41d
|
fix(compiler): 修复命名空间内类名解析及use别名查找
|
2 months ago |
韩天峰
|
5a7805b544
|
feat(php): 添加对动态属性赋值操作符和递增递减操作的支持
- 实现了动态属性的赋值操作符(如 +=、-=、.= 等)的解析和代码生成
- 添加了动态属性递增递减操作(++、--)的特殊处理逻辑
- 新增 genDynamicPropIncDec 方法用于生成动态属性 ++/-- 操作的 C++ 代码
- 为 clone 测试用例中的属性访问错误提供了更准确的错误消息
- 在属性获取逻辑中添加了静态与非静态属性访问的错误检查机制
|
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 |
韩天峰
|
91a710844c
|
refactor(php): 重构静态属性默认值初始化逻辑
- 修改 genLocalVarDecl 方法接受局部变量数组参数
- 恢复 genScopeVarDecl 方法并调用 genLocalVarDecl
- 在 Preprocessor 中添加静态属性默认值初始化处理逻辑
- 扩展 PropertyDef 类添加 defaultInit 和 defaultClean 属性
- 更新 Translator 中静态属性设置逻辑支持初始化和清理代码
- 添加静态数组属性测试用例
|
2 months ago |
韩天峰
|
ef6a9fb8e5
|
refactor(php): 统一PHP函数命名空间从std到fn
- 将所有php::std::前缀的函数调用更改为php::fn::前缀
- 替换AssignOpTrait.php中的pow函数调用路径
- 更新BinaryOpTrait.php中的mod和pow函数调用路径
- 修改CompilerBase.php中的头文件引用,合并为统一的phpx_std.h
- 在CompilerBase.php的throw语句中添加析构函数警告检查
- 更新FuncCallOptimizer.php中的各类数学和标准库函数调用路径
- 移除Translator.php中重复的标准库源文件引用
- 更新UniversalMethodCall.php中的parseStr函数调用路径
|
2 months ago |
韩天峰
|
dbcadeb873
|
feat(php): 添加抽象方法支持和调用保护
- 在 ClassDef 中添加 abstractMethods 数组存储抽象方法
- 实现 addAbstractMethod 和 hasAbstractMethod 方法
- 添加 getMethodFlags 方法统一获取方法标志
- 在 Preprocessor 中解析并添加抽象方法到类定义
- 实现 guardAbstractMethod 防止调用抽象方法
- 在父类方法调用中添加抽象方法检查
- 更新单元测试验证抽象方法调用错误处理
|
2 months ago |
韩天峰
|
ceb5e5963f
|
fix(php): 修复子类作为父类返回时的类型检查问题
- 添加了内部接口类型的检查条件
- 实现了接口继承链的递归验证逻辑
- 支持传递性接口继承关系的检查
- 修复了Iterator等扩展Traversable的接口验证问题
|
2 months ago |
韩天峰
|
cd3f0743d7
|
fix(aot): 解决trait方法参数类型声明的完全限定名转换问题
- 重构upgradeToFullyQualifiedName方法,支持NullableType和UnionType的递归处理
- 修正逻辑以正确区分内置类型(self/static/parent)与自定义类名的处理方式
- 更新trait预处理器中的参数类型转换实现,确保类型节点正确替换
- 添加对Qualified名称的识别和转换支持
- 移除重复的上下文解析逻辑,提高代码效率
- 新增回归测试用例验证arginfo/zpp匹配问题的修复效果
|
2 months ago |
韩天峰
|
cd2f4d7ac5
|
feat(compiler): 添加trait方法参数类名解析功能
- 实现resolveParamClassName方法处理参数类型中的非完全限定类名
- 在parseTrait阶段解析trait方法参数的类名避免gen_stub时上下文丢失
- 支持NullableType和UnionType类型的参数类型解析
- 添加对self、static、parent等特殊类型名称的处理
- 为trait方法参数类名解析功能添加完整的单元测试用例
|
2 months ago |
韩天峰
|
1e3cf4d25e
|
refactor(php): 优化条件表达式解析逻辑
- 提前解析条件表达式并存储到变量中避免重复计算
- 更新三元运算符表达式的构建方式提高代码可读性
- 添加 preg_match 函数相关的 AOT 编译测试用例
- 添加对象链接操作符相关的引用测试用例
- 完善正则匹配功能的自动化测试覆盖
|
2 months ago |
韩天峰
|
9138dea99f
|
feat(php): 实现赋值表达式返回值和函数参数检查功能
- 在数组赋值操作中添加临时变量存储以支持返回值
- 为属性赋值操作实现逗号表达式确保右值先计算后赋值
- 添加内部函数参数数量验证机制防止运行时错误
- 优化三元运算符表达式确保类型一致性
- 扩展函数调用优化器以支持参数类型和数量检查
- 添加测试用例验证数组维度赋值返回功能
- 添加测试用例验证属性赋值返回功能
- 添加测试用例验证三元运算符类型转换功能
|
3 months ago |
韩天峰
|
246689db4c
|
feat(compiler): 优化函数调用编译器实现支持可变参数类型转换
- 添加 array_merge 混合类型参数测试用例
- 在 CompilerBase 中为表达式添加括号包装确保正确解析
- 将 FuncCallOptimizer 中的所有私有方法和常量改为受保护访问级别
- 实现可变参数类型的类型感知转换功能
- 添加 variadicType 配置选项用于指定可变参数类型
- 扩展参数反射信息获取逻辑包含可变参数类型信息
- 更新生成可变参数调用方法支持类型转换
- 添加基础容器数组表达式转换辅助方法
- 修改返回赋值属性测试用例验证功能完整性
|
3 months ago |
韩天峰
|
6849c56cc2
|
fix(php): 修复表达式类型检测中的缺失情况
- 添加了对 Expr_Print 表达式的类型检测支持
- 确保类型推断的一致性
|
3 months ago |
韩天峰
|
8517481c52
|
fix(php): 修正print函数的编译输出
- 将php::echo改为php::print以正确处理print表达式
- 添加完整的print函数测试用例验证功能正确性
|
3 months ago |
韩天峰
|
abed2d8d22
|
test(stdlib): 添加标准库函数边缘情况和错误处理测试
- 添加 abs 函数边缘情况测试,包括 PHP_INT_MIN 和 -0.0
- 添加 array_fill 负数计数参数的 ValueError 测试
- 添加 base_convert 无效进制参数的 ValueError 测试
- 添加 bindec/hexdec/octdec 空输入和无效字符测试
- 添加 chr/ord 函数边界值测试
- 添加 count 函数非数组/对象参数的 TypeError 测试
- 添加 explode 空分隔符和限制参数测试
- 添加 intdiv 除零和溢出错误测试
- 添加 log 函数零、负数和无效底数测试
- 添加 reset/end 非数组参数的 TypeError 测试
- 添加 round 非数值参数的 TypeError 测试
- 添加 str_repeat 负数次数的 ValueError 测试
- 添加 strtotime 时间戳 0 和无效日期测试
- 添加 substr 负偏移和长度边界测试
- 添加 version_compare 操作符参数测试
- 移除未使用的 php_std_url.h 头文件和源文件引用
- 更新函数优化配置以改进数学函数和字符串函数支持
- 添加 is_callable 函数处理程序和 max/min 函数的原始实现
- 为 abs、pow、sqrt 函数添加大数类型回退实现
|
3 months ago |
韩天峰
|
e996dc8b43
|
feat(debug): 添加内存泄漏检测脚本
- 实现了随机数生成函数 gen_random
- 添加了堆排序算法实现 heapsort 和 heapsort_r
- 集成了高精度时间测量功能 gethrtime
- 创建了性能测试框架包括 start_test 和 end_test 函数
- 实现了测试结果显示和统计功能 total
- 添加了主函数 main 来执行完整的性能测试流程
|
3 months ago |
韩天峰
|
17e1035e21
|
test(stdlib): 添加新标准库函数测试用例
- 测试 gettype 函数对不同数据类型的返回值
- 验证 ucfirst 函数首字母大写功能
- 检查 floor 和 ceil 数学函数的正确性
- 测试 max 和 min 函数的数值比较功能
- 验证 uniqid 函数生成唯一标识符的能力
- 测试
|
3 months ago |
韩天峰
|
0647b6425a
|
fix(php): 修复类常量解析和对象转换功能
- 添加对 self::class、parent::class 和 static::class 的支持
- 实现 parent::class 的继承链验证和错误处理
- 禁止使用 static::class 并提示编译时无法解析
- 移除 objval() 函数中的冗余参数验证逻辑
- 为 self::class 和 parent::class 场景添加测试用例
- 更新版本号至 1064
- 添加 yield 示例代码文件
|
3 months ago |
韩天峰
|
04b3d7de20
|
fix(php): 修复函数调用参数传递中的对象属性处理问题
- 修改 CompilerBase.php 中的参数解析逻辑,统一使用 parseCallArgValue 方法
- 添加 materializeCallArgValue 和 shouldMaterializeCallArg 辅助方法
- 对数组维度获取和属性获取表达式进行去间接化处理
- 在参数转换过程中添加对象属性的特殊处理
- 新增 default array property 测试用例验证数组属性初始化功能
- 新增 unset on arrays and variables 测试用例验证对象参数传递行为
|
3 months ago |
韩天峰
|
e208fe11bb
|
feat(php): 实现多层级 break 和 continue 语句支持
- 添加多层级跳转标志变量 _brk_flag 和 _cnt_flag
- 在循环结束处插入跳转标志检查代码
- 将 switch 语句包装在 do-while(0) 中以支持多层级跳转
- 实现 break N 和 continue N 的计数器递减逻辑
- 添加测试用例覆盖多层嵌套循环和 switch 语句场景
- 支持最多 N 层的跳转指令解析和编译
|
3 months ago |
韩天峰
|
9b1477e13b
|
refactor(php): 重构对象属性赋值检查逻辑并优化循环变量检测
- 提取公共的对象属性赋值验证方法 assertCanAssignObjectProperty
- 统一处理对象属性和静态属性的赋值检查逻辑
- 在类型检查中增加对抽象类、接口和未知类的处理
- 优化循环变量依赖检测算法,改进错误处理流程
- 移除静态编译阶段无法确定类型的严格检查,改为运行时处理
- 修复循环变量优化器中的依赖检测中断逻辑
|
3 months ago |
韩天峰
|
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 |