韩天峰
|
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 |
韩天峰
|
c604fc09ab
|
feat(compiler): 添加对 Big* 类型的字符串转换和数学函数优化支持
- 在 echo 表达式中实现 BigInt、BigFloat 和 Decimal 类型的自动 toString 转换
- 为 abs、pow、sqrt、floor、ceil、round 数学函数添加 Big* 类型返回值推断
- 优化二进制连接操作中的类型转换逻辑,支持 Big* 类型到字符串的转换
- 为 (string) 强制转换、strval() 函数和 floor/ceil/round 函数添加 Big* 类型支持
- 新增测试用例验证 Big* 类型的数学函数优化功能
- 添加 Decimal 类型的精确计算和舍入处理示例
|
3 months ago |
韩天峰
|
11acfdf10f
|
refactor(aot): 移除UnsafePtr类型支持并优化std容器实现
- 移除UnsafePtr类型声明及相关参数标记功能
- 修改std容器变量访问方式,统一使用_ref后缀引用
- 更新unsafe_cast函数参数验证逻辑,移除UnsafePtr参数检查
- 重构std容器在C++代码中的声明和初始化方式
- 删除相关测试用例及单元测试中的UnsafePtr验证逻辑
- 统一std容器赋值、遍历、删除操作的引用访问模式
|
3 months ago |
韩天峰
|
0043fc78f8
|
feat(php): 添加原生类和接口检查功能
- 新增 isNativeClass 方法用于检查是否为原生类
- 新增 isInterface 方法用于检查是否为接口
- 重构 addObject 方法中的对象验证逻辑
- 修改 TypedObject 使用条件判断逻辑
- 添加内部类测试用例
|
3 months ago |
韩天峰
|
71627fd920
|
fix(compiler): 修复抽象类和接口的类型处理逻辑
- 移除对抽象类和接口参数类型的限制检查
- 简化对象类型推断逻辑,统一处理所有类类型
- 更新 addObject 方法,阻止为抽象类、接口、内部类创建实例
- 修正参数类型处理中的重复对象添加问题
|
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 |
韩天峰
|
95b1c89053
|
BitInt 支持位运算操作符
|
3 months ago |
韩天峰
|
826e62e7b4
|
feat(php): 添加 Windows 平台的大数运算库支持
- 为 Windows 平台添加 gmp.lib、gmpxx.lib、mpfr.lib 库依赖
- 为 Windows 平台添加 libmpdec.lib、libmpdec++.lib 库依赖
- 统一跨平台的大数运算库配置逻辑
- 移除平台判断条件,简化库文件加载代码
|
3 months ago |
韩天峰
|
144b60a3e3
|
feat(compiler): 支持 bigint_types 和 decimal_types 声明指令
- 添加了 bigint_types 和 decimal_types 的 use 指令支持
- 实现了整数字面量自动转换为 BigInt 类型的功能
- 实现了浮点数字面量自动转换为 Decimal 类型的功能
- 添加了新的数学运算方法如 divmod、powmod、sqrt 等
- 更新了类型转换逻辑以支持大数运算
- 添加了相应的测试用例验证功能正确性
- 修改了编译器内部类型检测和转换机制
|
3 months ago |
韩天峰
|
69e4386454
|
test(compiler): 添加大数类型运算测试和自增自减操作限制
- 添加 Decimal 算术运算测试用例
- 添加 BigInt 复合赋值运算测试用例
- 添加 Decimal 复合赋值运算测试用例
- 添加 Decimal 比较和转换测试用例
- 添加 BigInt 二元运算符测试用例
- 添加 Decimal 运算符重载测试用例
- 添加 Decimal 一元负号测试用例
- 在编译器中实现对 BigInt、Decimal 和 BigFloat 类型的自增自减操作限制
- 添加 PHPUnit 测试验证自增自减操作错误提示
- 为 BigInt 和 Decimal 类型禁用 ++ 和 -- 操作符
|
3 months ago |
韩天峰
|
a459a8bd95
|
feat(php): 添加对 BigInt Decimal BigFloat 复合赋值运算的支持
- 实现了 Big* 类型的复合赋值操作扩展为静态方法调用
- 添加了 parseBigAssignOp 和 parseBigAssignOpExpr 方法处理大数值类型运算
- 针对 BigInt/BigDecimal/BigFloat 不可变特性生成 Type::add($v, $x) 形式代码
- 添加了对 +、-、*、/、% 等运算符的支持映射
- 设置了相应的 uses 标志位跟踪大数值类型使用情况
- 修复了 ZendVM add_function 无法处理大数值类型的兼容性问题
|
3 months ago |
韩天峰
|
f33641aead
|
docs(native_types): 更新原生类型文档并完善类型提升规则说明
- 将标题从"AOT编译器原生类型支持说明"改为"AOT编译器类型系统说明"
- 新增高精度数值类型支持(bigInteger、decimal、bigFloat)
- 更新类型映射表,增加底层实现列和新类型条目
- 完善二元运算类型提升规则文档,包括Var主导规则、Float优先规则、大数类型精度提升规则
- 添加类型提升完整矩阵表格便于查阅
- 更新复合赋值运算符类型转换说明
- 将最后更新日期更新至2026年5月26日
|
3 months ago |
韩天峰
|
ee30acc94e
|
feat(compiler): 添加大整数、小数和大浮点数类型支持
- 在编译器基础类中添加 BigInt、Decimal 和 BigFloat 类型常量
- 实现大数字字面量自动识别逻辑,包括超过 64 位整数范围的整数字面量
- 实现高精度小数字面量识别,对 16 位以上有效数字的浮点数字面量进行特殊处理
- 添加算术运算符重载支持,实现 BigInt、Decimal、BigFloat 的 +、-、*、/、% 等操作
- 添加比较运算符支持,实现 <、>、<=、>=、==、!=、<=> 运算符的正确处理
- 实现不同数值类型间的转换逻辑,确保精度安全
- 添加幂运算符 (**) 对 BigInt 类型的支持
- 添加一元负号运算符对大数字类型的支持
- 实现类型检测逻辑,准确识别各种大数字类型
- 添加对 std::bigInt、std::decimal、std::bigFloat 构造函数的支持
- 添加必要的第三方库依赖,包括 GMP、libmpdec 和 MPFR 库
- 新增多组测试用例验证大数字类型的功能正确性
|
3 months ago |
韩天峰
|
1b6884a983
|
fix(aot): 修复流资源类型处理和常量文件移除问题
- 更新测试用例中的错误消息断言以匹配正确的流资源错误描述
- 在编译器基础类中添加 stream 类型定义并将其映射为 var 类型进行处理
- 修复函数参数和返回值中 stream 类型的处理逻辑
- 移除不再需要的 constants.php 配置文件及其全部内容
|
3 months ago |
韩天峰
|
c04778cc51
|
refactor(php): 优化编译器基础类和通用方法调用实现
- 在CompilerBase.php中添加占位符表达式检查逻辑,统一返回TYPE_OBJECT类型
- 更新UniversalMethodCall.php中的方法处理器配置,将多个方法从php_fn改为direct_method
- 为genUniversalDirectMethod方法添加intCastArgs参数支持
- 实现genUniversalCppFn方法用于C++函数调用
- 为genUniversalPhpFn方法添加constArgs参数和接收器位置控制
- 重构字符串方法配置,移除toString方法和isTyped数组方法
- 更新测试文件,移除toString方法相关测试用例
- 改进代码生成逻辑,支持参数类型转换和常量参数插入
|
3 months ago |
韩天峰
|
6309346c9a
|
feat(core): 通用方法实现,纯静态,零成本抽象
|
3 months ago |
韩天峰
|
5d150a2b02
|
refactor(php): 优化变量赋值类型检查逻辑
- 移除数组类型重分配检查的特殊处理
- 添加全局翻译器变量用于测试环境
- 引入通用变量赋值表达式检查方法
- 改进错误消息中的变量名显示格式
- 统一变量类型转换错误处理流程
|
3 months ago |
韩天峰
|
619687d563
|
fix(php): 修复PHP编译器中的类型映射和常量处理问题
- 添加double类型到浮点数类型的映射
- 优化变量首次赋值时的类型确定逻辑,支持函数级作用域的变量处理
- 直接返回基本类型常量而不是通过getNativeType方法
- 添加内部常量的类型推断支持
- 简化布尔值和浮点数常量的类型返回逻辑
|
3 months ago |
韩天峰
|
928f9050d6
|
feat(php): 添加对PHP常量和分组use语句的支持
- 新增useConstants数组用于存储常量导入映射
- 实现常量名称解析和命名空间查找逻辑
- 支持通过别名导入常量的功能
- 添加对分组use语句的解析处理
- 完善匿名类继承接口的全限定名称转换
- 优化函数调用时的参数信息获取方式
- 修复方法调用中本地函数定义的引用方式
|
3 months ago |
韩天峰
|
81272cf7fb
|
refactor(php): 将内置函数调用改为符号表调用方式
- 添加 funcSymbols 数组存储函数符号
- 修改 shell_exec 调用为通过符号表调用
- 修改 define 函数调用为通过符号表调用
- 在 prepare 方法中初始化 shell_exec 和 define 的函数指针
|
3 months ago |
韩天峰
|
6c74f1c8b5
|
refactor(php): 重构编译器常量和构建模式配置
- 移除多余的类型常量间的空行,统一代码风格
- 添加构建模式相关常量 BUILD_MODE_BIN、BUILD_MODE_EXT、ENTRY_FUNCTION 等
- 将硬编码的字符串替换为对应的常量引用
- 移除不再使用的 phpx_func.h 头文件引用
- 重命名 cxxflags 为 cxxFlags 以符合命名规范
- 将构建模式判断逻辑封装为 isBuildModeBin 和 isBuildModeExt 方法
- 更新配置文件中的默认值为常量引用
- 移除不再需要的 trait 解析方法
|
3 months ago |
韩天峰
|
e8e0a2e95c
|
refactor: 提取 parseBlockStmts 方法统一处理缩进
|
3 months ago |
韩天峰
|
af758ef130
|
refactor: 按目标名称区分函数与全局变量声明头文件
|
3 months ago |
韩天峰
|
33fe40453b
|
feat(php): 添加左移赋值操作符支持
- 实现了 Expr_AssignOp_ShiftLeft 节点解析
- 添加了 parseAssignOpShiftLeft 方法处理左移赋值操作
|
3 months ago |
韩天峰
|
28b6c6e726
|
feat(debug): 添加调试信息支持以改进异常回溯功能
- 实现函数级别的调试信息生成,包括类方法和全局函数
- 添加命名空间前缀到调试函数名称中
- 集成 php::pushDebugFrame 和 php::popDebugFrame 用于运行时调试栈管理
- 添加调试信息启用和禁用机制
- 为嵌套函数调用添加异常传播测试用例
- 创建调试跟踪示例文件以验证功能实现
|
3 months ago |
韩天峰
|
fb458405b8
|
允许类方法的默认参数使用类常量
|
3 months ago |
韩天峰
|
0c2a25ea52
|
feat(compiler): 添加对多种原生源文件格式的编译支持
- 实现了对 C、汇编、Objective-C、Objective-C++ 等源文件的识别和分类
- 为 Clang、GCC、MSVC 编译器后端添加了 buildNativeCompileCommand 方法
- 在编译命令中添加 -x 参数指定源文件语言类型
- 重构了文件扫描逻辑,统一处理多种原生源文件格式
- 为不同语言类型的源文件生成相应的编译选项配置
- 更新了翻译器逻辑,根据文件扩展名自动检测并选择合适的编译方法
|
3 months ago |
韩天峰
|
519ad7b292
|
fix(aot): 修复变量类型检查逻辑并更新测试用例
- 移除多余的变量类型验证检查逻辑
- 更新测试用例中的类型注解以匹配实际实现
- 修正 EsmtpTransport 类型在配置方法中的使用
|
4 months ago |
韩天峰
|
ea462010d1
|
feat(compiler): 添加标准容器foreach循环支持和删除元素保护
- 实现std::map和std::unordered_map的foreach循环功能
- 实现std::array和std::vector的foreach循环功能
- 添加在foreach循环中删除容器元素的保护机制
- 添加标准容器类型的变量检查和类型验证
- 更新标准容器声明语法以支持键值类型参数
- 添加标准容器键值类型推断功能
|
4 months ago |
韩天峰
|
feef37d28f
|
fix(php): 解决数组取消设置时空维度的错误处理
- 在数组维度获取为空时添加致命错误提示
- 添加对 unset($arr[]) 语法的错误检测
- 新增对应的单元测试验证空数组维度取消设置的错误情况
- 创建测试文件验证数组取消设置的边界情况
|
4 months ago |
韩天峰
|
fa2cb45df5
|
test(aot): 添加标准容器复制赋值功能测试
- 新增 std map 相同类型复制测试用例
- 新增 std unordered_map 相同类型复制测试用例
- 新增 std array 嵌套相同类型复制测试用例
- 新增 std vector 相同类型复制测试用例
- 实现标准容器复制赋值语法解析功能
- 添加嵌套数组访问层级检查机制
- 完善类型匹配验证逻辑
|
4 months ago |
韩天峰
|
4411216354
|
refactor(aot): 简化 unsafe_ptr 使用并改进错误处理
- 移除手动创建 unsafe_ptr 的调用,直接传递容器变量
- 添加对 UnsafePtr 参数重新赋值的错误检查
- 验证 UnsafePtr 参数必须是标准容器变量
- 更新 unsafe_cast 错误消息以反映参数要求
- 移除不再需要的 unsafe_ptr 解析方法
- 添加新的测试用例验证各种错误场景
|
4 months ago |
韩天峰
|
5d1e8d893c
|
refactor(aot): 优化 unsafe_cast 类型转换实现
- 将 std::unsafe_cast 的类型检查逻辑重构为统一的模板函数
- 修改异常类型从 RuntimeException 为 TypeError
- 更新编译器代码生成以使用新的类型转换函数
- 添加对 std::map 和 std::unordered_map 的类型转换支持
- 创建新的测试用例验证各种容器类型的 unsafe_cast 行为
- 修正现有测试用例中的异常类型断言
|
4 months ago |
韩天峰
|
7f4dee40c0
|
fix(aot): 解决std容器unsafe_cast类型检查问题
- 添加了stdTypeMap用于存储标准类型映射关系
- 实现了registerStdType方法用于注册标准类型ID
- 为std数组、向量和映射容器添加了类型ID分配逻辑
- 在unsafe_cast操作中增加了类型ID验证机制
- 添加了类型不匹配时的异常抛出功能
- 修复了self::class和parent::class的命名空间解析问题
- 更新了unsafe_ptr创建时的类型ID传递逻辑
- 添加了多个测试用例验证类型不匹配场景
|
4 months ago |
韩天峰
|
79bc9d4e69
|
feat(aot): 添加对UnsafePtr类型和相关函数的支持
- 在ArgInfo类中添加unsafePtr属性
- 添加UnsafePtr类型到编译器类型映射
- 实现std::unsafe_ptr()和std::unsafe_cast()函数的解析和处理逻辑
- 添加对UnsafePtr类型的变量跟踪和验证机制
- 支持通过unsafe_cast进行标准容器的不安全转换
- 添加相应的单元测试验证功能正确性
|
4 months ago |
韩天峰
|
73bf28667d
|
feat(compiler): 添加对标准容器类型的完整支持
- 实现了标准数组维度获取的类型检测和解析功能
- 扩展了类型转换系统以支持字符串、数组和对象类型
- 在polyfills.php中添加了新的类型常量和容器函数定义
- 重构了标准容器解析器以支持复杂的值类型验证
- 实现了标准容器赋值操作中的类型安全检查
- 添加了类值类型的支持和验证机制
- 完善了标准容器的类型信息解析和存储功能
|
4 months ago |
韩天峰
|
22966d0553
|
feat(php): 扩展标准容器支持功能
- 将StdArrayParser重命名为StdContainerParser以支持更多容器类型
- 添加对std::vector、std::map和std::unordered_map的支持
- 新增TYPE_STD_VECTOR、TYPE_STD_MAP和TYPE_STD_UNORDERED_MAP常量定义
- 实现std容器表达式解析和类型检测功能
- 扩展函数上下文中的容器存储结构
- 添加polyfill类以支持复杂类型定义
- 实现容器维度获取、赋值操作和类型转换功能
- 支持容器的偏移设置和键值类型转换功能
|
4 months ago |
韩天峰
|
58a4702ed2
|
perf(php): 优化大数组内存分配策略
- 引入 MAX_BYTES_IN_STACK 常量控制栈上数组大小限制
- 实现超过 65536 字节的数组自动转到堆上分配
- 在 StdArrayParser 中计算数组总字节数并存储到 bytes 属性
- 根据数组大小选择栈上初始化或堆上 unique_ptr 分配方式
- 避免大数组在栈上分配导致的内存溢出问题
|
4 months ago |
韩天峰
|
30ad4dbb0e
|
feat(compiler): 实现函数作用域管理和类型声明优化
- 添加函数作用域层级管理功能,支持嵌套作用域跟踪
- 实现抽象类和接口类型的实例化检查,防止非法创建实例
- 优化参数类型声明处理,增加对象参数的作用域管理
- 添加标准数组创建的位置限制检查,确保在顶层作用域创建
- 扩展继承关系检查逻辑,支持内部接口的类型验证
- 增加完整的单元测试覆盖类型命中和声明功能
|
4 months ago |
韩天峰
|
1e22f19e63
|
refactor(php): stdArray 修改为在堆上分配内存,避免栈内存过大
|
4 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 |
韩天峰
|
cc785eb7f7
|
refactor(php): 移除不再使用的 isWindows 属性
- 删除了 CompilerBase 类中的 isWindows 保护属性
- 移除了 initialize 和 getPlatform 方法中对 isWindows 的赋值操作
- 直接在条件判断中使用 platform 实例检查替代 isWindows 属性功能
|
4 months ago |
韩天峰
|
460ec638df
|
refactor(php): 优化foreach循环中的迭代器变量使用并更新编译器常量
- 使用临时变量替代直接使用iteratorVar以避免命名冲突
- 为Windows平台移除clang-format格式化检查逻辑
- 添加多个新的编译器错误代码和警告信息定义
- 更新迭代器访问方式以提高代码安全性和可读性
|
4 months ago |
韩天峰
|
eaa1b4cd9a
|
fix(php): 修复编译器基类中的回溯打印和类型返回验证问题
- 将 printBacktraceOnError 默认值从 false 修改为 true
- 扩展子类作为父类返回时的类型检查,支持抽象类或接口
- 更新 SimpleType::fromNode 和 fromString 方法以支持 ArrayType 返回类型
- 修改测试用例中 ZipArchive 的路径处理逻辑
- 更新测试输出预期结果以匹配新的行为
|
4 months ago |