韩天峰
|
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 |
韩天峰
|
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 |
韩天峰
|
588cd85ca4
|
chore(deps): 更新 swoole/phpx 依赖版本
- 将 swoole/phpx 从 ~2.1.5 升级到 ~2.1.6
- 更新项目版本号从 1051 到 1053
|
4 months ago |
韩天峰
|
72dbe6e35e
|
chore(build): 更新 .gitignore 配置
- 移除特定项目目录的单独忽略规则
- 添加 /projects 整体忽略规则
- 添加 PHP CS Fixer 缓存文件忽略
- 添加 PHPUnit 缓存文件忽略
- 添加对象文件 (*.o) 忽略规则
|
4 months ago |
韩天峰
|
b17b4acbac
|
feat(build): 添加 Windows 资源文件支持功能
- 在 .gitignore 中添加 node_modules 目录
- 在 Msvc.php 中添加 compileResourceFile 方法用于编译 .rc 资源文件
- 新增 package.json 配置文件及 svg-to-ico.js 转换脚本
- 在 project.yml 中添加 Windows 资源文件配置示例
- 添加 swoole-logo.svg 图标文件
- 在 Translator.php 中集成资源文件生成功能
- 实现资源文件编译和链接到最终可执行文件的流程
- 更新版本号从 1049 到 1051
|
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 |
韩天峰
|
76ed488b75
|
fix(php): 修复子类作为父类返回时的类型检查逻辑
- 添加了对 objectClass 是否存在的检查,避免空值导致的错误
- 改进了错误消息,明确显示具体的子类和父类名称
- 确保只有在 objectClass 存在且不等于 returnClass 时才进行抽象类验证
|
4 months ago |
韩天峰
|
b6645e90ce
|
test(named-args): 添加PHP 8+命名参数功能测试用例
- 创建了针对构造函数的命名参数调用测试
- 验证了字符串、整数和浮点数类型的参数传递
- 测试了参数顺序无关的传参机制
- 确保命名参数语法的正确解析和执行
|
4 months ago |
韩天峰
|
42dae8ceaa
|
返回类不匹配时,必须是抽象类
|
4 months ago |
韩天峰
|
954c0f399b
|
feat(build): 更新 Windows 打包脚本以支持新示例和配置文件
- 在打包列表中添加 composer.json 文件
- 增加对 tetris-win32 示例项目的复制支持
- 实现文件扩展名排除功能以过滤 .obj 目标文件
- 更新 copyDirectory 函数以支持扩展名过滤参数
- 修改打包清单显示以反映新增的配置文件和示例
- 将版本号从 1035 更新至 1049
|
4 months ago |
韩天峰
|
9443895bfb
|
feat(build): 添加 Windows 打包脚本
- 新增 package-on-windows.php 脚本用于 Windows 平台打包
- 实现自动检测系统架构 (AMD64/ARM64/x86) 并生成对应版本
- 集成 UPX 压缩优化功能,支持可执行文件压缩
- 自动复制 PHP 运行时、phpx 库文件和头文件到打包目录
- 包含项目文档、示例代码和 vendor 依赖包
- 生成带版本号的 ZIP 压缩包,便于分发部署
|
4 months ago |
韩天峰
|
6cc40059e0
|
feat(game): 将俄罗斯方块游戏重构为纯PHP逻辑实现
- 移除原有的C++游戏逻辑,将所有游戏状态管理转为PHP实现
- 添加TetrisBoard类处理游戏核心逻辑(碰撞检测、方块锁定、消除行等)
- 添加TetrisRenderer类负责Win32图形渲染
- 定义完整的俄罗斯方块形状和颜色常量数组
- 实现键盘控制(左右移动、旋转、硬降等功能)
- 添加计分系统和等级计算功能
- 更新C++层仅提供Win32 API封装(窗口创建、绘图原语等)
- 修改游戏主循环处理Windows消息和自动下落逻辑
- 添加游戏结束检测和重新开始功能
|
4 months ago |
韩天峰
|
661ab07cd9
|
refactor(backend): 重构编译器后端实现以支持自定义编译器路径
- 修改 Clang 和 Gcc 类构造函数以接受自定义编译器命令参数
- 引入 CompilerFactory 来统一管理编译器创建和检测逻辑
- 更新 BackendTest 添加对自定义编译器路径的支持测试
- 实现 Windows 平台下 lld-link 检测和回退机制
- 重构 CompilerBase 类中的平台和编译器初始化逻辑
- 移除旧的平台特定检测方法并整合到 PlatformFactory
- 更新编译和链接命令构建以使用新的后端抽象层
- 优化 include paths、library paths 和 libraries 的处理流程
- 改进目标文件扩展名和链接选项的跨平台处理
|
4 months ago |
韩天峰
|
16259f095d
|
fix(game): 修复俄罗斯方块游戏的SDL资源管理和退出机制
- 添加sdlInitialized标志跟踪SDL初始化状态
- 实现cleanup方法确保窗口和渲染器正确释放
- 使用SDL_PushEvent替代SDL_Quit解决退出冲突
- 修复析构函数中的资源清理逻辑
|
4 months ago |
韩天峰
|
9186d04da4
|
refactor(backend): 将调试配置选项从 debug_info 统一更改为 debug
- 将所有编译器后端(GCC、Clang、MSVC)中的 debug_info 参数重命名为 debug
- 更新单元测试中相应的配置选项参数名称
- 修改命令行参数解析从 --debug-info 改为 --debug
- 调整文档中关于调试选项的描述和示例
- 修复链接阶段不应包含调试符号的逻辑错误
- 重构内部调试变量命名从 debugInfo 改为 debug
- 更新 YAML 配置文件中的调试选项键名
|
4 months ago |
韩天峰
|
e80083bf6a
|
docs(tetris): 添加俄罗斯方块游戏示例项目和相关文档
- 新增 BOX_USAGE_GUIDE.md 详细说明 Box 机制使用方法
- 添加 main.php 实现游戏逻辑和 SDL 图形操作
- 创建 project.yml 项目配置文件
- 新增 PROJECT_SUMMARY.md 项目完成总结文档
- 添加 QUICKSTART.md 快速开始指南
- 创建 README.md 项目说明文档
- 添加 README_SDL.md SDL 版本说明文档
|
4 months ago |
韩天峰
|
c4f828b30a
|
fix(build): 统一调试选项配置并支持自定义链接器标志
- 将所有后端编译器的调试选项从 'debug' 统一更改为 'debug_info'
- 在 GCC 和 Clang 后端移除重复的调试标志添加逻辑
- 在 CompilerBase 中添加对用户自定义 ldflags 的支持
- 确保所有平台的调试信息配置保持一致
|
4 months ago |