韩天峰
|
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 |
韩天峰
|
5c86bf39f1
|
feat(examples): 添加 PHP 反射 API 示例程序
- 实现了打印内置函数参数和返回值类型信息的功能
- 添加了打印用户自定义函数信息的支持
- 实现了打印类方法参数和返回值类型信息的功能
- 添加了打印闭包(Closure)信息的支持
- 提供了完整的反射细节打印功能
- 支持联合类型、交集类型等复杂类型格式化
- 包含了 tentative return type 的
|
3 months ago |
韩天峰
|
12d44084ec
|
feat(aot): 添加对表达式结果的通用方法调用支持
- 实现了函数调用、方法调用、静态调用和属性获取后的通用方法调用
- 新增 stream_cast 伪函数用于流类型转换测试
- 支持数组方法链式调用和可变操作
- 添加表达式上下文中的流转换功能
- 扩展了对内部函数反射返回类型的处理
- 优化了数组操作的返回值一致性
- 完善了通用方法调用的错误处理机制
|
3 months ago |
韩天峰
|
6309346c9a
|
feat(core): 通用方法实现,纯静态,零成本抽象
|
3 months ago |
韩天峰
|
0c77bc53e4
|
feat(core): 添加断言类 Assert 库实现
- 实现了基础断言功能,包括类型验证、值比较等核心方法
- 添加了字符串、数字、数组、对象等多种数据类型的断言支持
- 集成了IP地址、文件路径、类存在性等特殊场景的验证方法
- 提供了批量验证和条件验证的便捷方法
- 实现了错误消息自定义和异常抛出控制机制
|
3 months ago |
韩天峰
|
f331591b65
|
test(assign): 添加变量重新赋值类型检查的测试用例
- 更新了现有测试用例的消息格式以包含具体的变量和类型信息
- 添加了对象类型到各种基本类型的重新赋值测试用例(int、float、bool、str、array)
- 添加了基本类型到对象类型的重新赋值测试用例(int、float、bool、array)
- 添加了字符串数组到各种基本类型的重新赋值测试用例(int、float、bool)
- 添加了标量类型到数组类型的重新赋值测试用例(int、float、bool、str)
- 新增了多个PHP代码文件用于测试不同类型的重新赋值场景
- 重命名了原有的字符串到对象重新赋值测试文件
|
3 months ago |
韩天峰
|
5d150a2b02
|
refactor(php): 优化变量赋值类型检查逻辑
- 移除数组类型重分配检查的特殊处理
- 添加全局翻译器变量用于测试环境
- 引入通用变量赋值表达式检查方法
- 改进错误消息中的变量名显示格式
- 统一变量类型转换错误处理流程
|
3 months ago |
韩天峰
|
619687d563
|
fix(php): 修复PHP编译器中的类型映射和常量处理问题
- 添加double类型到浮点数类型的映射
- 优化变量首次赋值时的类型确定逻辑,支持函数级作用域的变量处理
- 直接返回基本类型常量而不是通过getNativeType方法
- 添加内部常量的类型推断支持
- 简化布尔值和浮点数常量的类型返回逻辑
|
3 months ago |
韩天峰
|
192bba3454
|
test(namespace): 添加命名空间相关功能的测试用例
- 添加匿名类在命名空间中的测试
- 添加跨命名空间类常量引用的测试
- 添加跨命名空间继承的测试
- 添加完全限定名与相对名的测试
- 添加组合use导入的测试
- 添加跨命名空间接口实现的测试
- 添加混合use类和函数导入的测试
- 添加命名空间常量定义的测试
- 添加多层嵌套命名空间的测试
- 添加self/static跨命名空间解析的测试
- 添加跨命名空间trait使用的测试
- 添加use别名的测试
- 添加use const导入常量的测试
|
3 months ago |
韩天峰
|
928f9050d6
|
feat(php): 添加对PHP常量和分组use语句的支持
- 新增useConstants数组用于存储常量导入映射
- 实现常量名称解析和命名空间查找逻辑
- 支持通过别名导入常量的功能
- 添加对分组use语句的解析处理
- 完善匿名类继承接口的全限定名称转换
- 优化函数调用时的参数信息获取方式
- 修复方法调用中本地函数定义的引用方式
|
3 months ago |
韩天峰
|
b11a6630fe
|
添加注释
|
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 |
韩天峰
|
8a423d225e
|
test: 添加抽象类、接口、final类、反引号和eval的AOT测试
|
3 months ago |
韩天峰
|
05a409ac37
|
test: 添加AOT测试及eval()作用域限制文档
|
3 months ago |
韩天峰
|
184090ec84
|
test(aot): 添加AOT编译相关测试用例
- 添加对象克隆功能测试,验证clone关键字的正确性
- 添加复合赋值运算符测试,覆盖数组、对象属性等场景
- 添加exit/die语言结构测试,验证程序退出行为
- 添加嵌套闭包功能测试,验证闭包作用域和链式调用
|
3 months ago |
韩天峰
|
33725b87d3
|
test(aot): 添加魔术常量、字符串插值和变量函数的AOT测试
- 添加magic-constants.phpt测试文件验证__LINE__、__FILE__、__DIR__、__FUNCTION__、__METHOD__、__CLASS__常量
- 添加string-interpolation.phpt测试文件验证复杂表达式的字符串插值功能
- 添加variable-functions.phpt测试文件验证可变函数调用和回调存储功能
- 添加variable-variables.phpt测试文件验证$$var语法并标记为跳过(AOT不支持)
|
3 months ago |
韩天峰
|
33fe40453b
|
feat(php): 添加左移赋值操作符支持
- 实现了 Expr_AssignOp_ShiftLeft 节点解析
- 添加了 parseAssignOpShiftLeft 方法处理左移赋值操作
|
3 months ago |
韩天峰
|
77e0268f0a
|
test(aot): 添加类型声明测试用例
- 创建新的AOT类型声明测试文件 011.phpt
- 添加Foo1和Foo2类定义用于测试
- 实现main函数测试any类型处理逻辑
- 添加随机对象创建和方法调用验证
- 设置期望输出格式匹配规则
|
3 months ago |
韩天峰
|
28b6c6e726
|
feat(debug): 添加调试信息支持以改进异常回溯功能
- 实现函数级别的调试信息生成,包括类方法和全局函数
- 添加命名空间前缀到调试函数名称中
- 集成 php::pushDebugFrame 和 php::popDebugFrame 用于运行时调试栈管理
- 添加调试信息启用和禁用机制
- 为嵌套函数调用添加异常传播测试用例
- 创建调试跟踪示例文件以验证功能实现
|
3 months ago |
韩天峰
|
7ee2a161b9
|
docs: 添加两项专利申请技术交底书
- 添加 C++ 模版实现动态语言强类型数据容器的专利文档
- 添加混合态编程语言编译执行方法的专利文档
- 文档涵盖技术方案、系统组成、方法流程和关键保护点
- 包含详细的术语解释和技术背景说明
|
3 months ago |
韩天峰
|
efd6beac87
|
test(phpunit): 添加PHP编译器相关单元测试
- 创建AST节点类型测试类AstNodeTypeTest,测试各种节点类型的识别方法
- 添加ClassDef扩展功能测试类ClassDefExtendedTest,验证类定义的各种属性和方法
- 实现CompilerBase API测试类CompilerBaseApiTest,测试类型转换、变量名生成等功能
- 创建FunctionContext扩展测试类Context/FunctionContextExtendedTest,测试作用域管理和变量操作
- 添加FunctionDef扩展测试类Entity/FunctionDefExtendedTest,测试函数定义相关功能
|
3 months ago |
韩天峰
|
b2d52d5d80
|
feat(php): 更新翻译器版本到0.2.0
|
3 months ago |
韩天峰
|
8a27a0055b
|
feat(jni): 添加JNI扩展功能支持Java与PHP交互
- 在.gitignore中添加*.class文件忽略规则
- 新增Hello.java示例类用于JNI测试
- 实现完整的JNI C++桥接代码,包括类型转换和异常处理
- 添加PHP stub文件定义JNI相关函数接口
- 创建main.php演示程序展示JNI功能使用方法
- 配置project
|
3 months ago |
韩天峰
|
d387667f1e
|
feat(tests): 添加编译器路径配置选项支持
- 添加 --no-aot 参数以支持非AOT编译模式运行测试
- 添加 --compiler 参数用于指定编译器二进制文件路径
- 设置默认编译器路径为 ./bin/compiler.php
- 支持通过 --compiler 指定自定义编译器如 swoole_compiler
- 修改系统调用以使用配置的编译器路径替代硬编码路径
- 更新全局变量声明以包含新的编译器路径参数
|
3 months ago |
韩天峰
|
67f477d705
|
docs(project): 添加项目指导文档 CLAUDE.md
- 创建了 CLAUDE.md 文件为 Claude Code 提供项目工作指导
- 包含项目概述、先决条件和构建测试命令说明
- 详细描述了编译器架构和四阶段翻译流水线
- 列出了关键组件目录结构和配置文件说明
- 添加了测试基础设施和编写测试的相关指南
|
3 months ago |
韩天峰
|
fb458405b8
|
允许类方法的默认参数使用类常量
|
3 months ago |
韩天峰
|
d73d077a7a
|
add phpunit files
|
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 |
韩天峰
|
958a1aa2cb
|
test(aot): 添加 std 容器 unset 操作测试用例
- 为 std::map 添加 unset 测试用例,验证键值对删除功能
- 为 std::unordered_map 添加 unset 测试用例,验证哈希映射删除操作
- 为 std::array 添加 unset 测试用例,验证数组元素删除后默认值设置
- 为 std::vector 添加 unset 测试用例,验证向量元素删除后索引处理
|
4 months ago |
韩天峰
|
feef37d28f
|
fix(php): 解决数组取消设置时空维度的错误处理
- 在数组维度获取为空时添加致命错误提示
- 添加对 unset($arr[]) 语法的错误检测
- 新增对应的单元测试验证空数组维度取消设置的错误情况
- 创建测试文件验证数组取消设置的边界情况
|
4 months ago |
韩天峰
|
31fcc94c2e
|
refactor(php): 优化编译器优化级别映射逻辑
- 统一使用标准的优化级别映射数组替代嵌套三元运算符
- 修复优化级别1的映射错误,从/O2更正为/O1
- 提高代码可读性和维护性
- 确保所有优化级别配置的一致性
- 移除重复的映射定义代码
|
4 months ago |
韩天峰
|
25a574122a
|
docs(std): 添加 STD 容器文档说明
- 介绍 Swoole AOT 强类型高性能容器特性
- 详细说明 std::array、std::vector、std::map、std::unordered_map 的使用方法
- 提供各类容器的代码示例和性能对比数据
- 解释与 PHP Array 的转换机制和使用建议
- 包含编译原理说明和性能测试结果
- 说明 UnsafePtr 与 native 函数参数的使用规则
|
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 |
韩天峰
|
61dba85b12
|
test(aot): 更新 std-map 测试用例 005
- 添加全局变量存储 unsafe 指针的测试
- 添加 unset 操作后的指针状态验证
- 添加将 map 转换为数组并计数的功能测试
- 更新期望输出以匹配新的测试断言
|
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 |
韩天峰
|
ee240aed25
|
test(php): 添加标准容器静态类匹配测试用例
- 添加 testStdContainerStaticClassMismatch 测试方法验证对象分配错误
- 更新 StdContainerParser 中的 fatal error 消息格式保持一致性
|
4 months ago |
韩天峰
|
872c98fc28
|
fix(std-container): 修复标准容器类值类型的精确检查逻辑
- 将 std::vector 的类值类型精确匹配测试添加到测试套件
- 修复 std::map 错误消息格式以显示正确的参数对象类型验证
- 添加 std::unordered_map 的类值类型精确匹配测试用例
- 添加 std::array 的类值类型精确匹配测试用例
- 简化 StdContainerParser 中的对象转换逻辑,使用统一的 toObject 方法进行类型检查和转换
|
4 months ago |
韩天峰
|
9f2db2f6c0
|
test(aot): 添加标准容器复杂值类型测试
- 为std::vector添加复杂值类型测试用例
- 为std::map添加复杂值类型测试用例
- 为std::unordered_map添加复杂值类型测试用例
- 为std::array添加复杂值类型测试用例
- 测试字符串、数组、对象、变体等复杂类型的存储和访问
- 验证精确类值类型的容器行为
- 包含错误处理和异常情况的测试场景
|
4 months ago |
韩天峰
|
73bf28667d
|
feat(compiler): 添加对标准容器类型的完整支持
- 实现了标准数组维度获取的类型检测和解析功能
- 扩展了类型转换系统以支持字符串、数组和对象类型
- 在polyfills.php中添加了新的类型常量和容器函数定义
- 重构了标准容器解析器以支持复杂的值类型验证
- 实现了标准容器赋值操作中的类型安全检查
- 添加了类值类型的支持和验证机制
- 完善了标准容器的类型信息解析和存储功能
|
4 months ago |
韩天峰
|
fb2301ab5e
|
test(aot): 添加标准库容器类型的测试用例
- 添加 std::map 的基础功能测试,包括整数键和字符串键的使用
- 添加 std::unordered_map 的基础功能测试,验证哈希映射操作
- 添加 std::vector 的基础功能测试,涵盖整数和浮点数向量
- 验证容器的增删改查和类型安全特性
- 测试不同数据类型的存储和检索功能
- 确保容器大小统计和元素访问的正确性
|
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 |