韩天峰
|
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 |
韩天峰
|
2bf36baf56
|
俄罗斯方块示例程序
|
4 months ago |
韩天峰
|
8f45f9a803
|
chore(version): 更新版本号从 1003 到 1035
- 将 version.txt 文件中的版本号从 1003 更新为 1035
|
4 months ago |
韩天峰
|
619c482c7d
|
docs(examples): 添加俄罗斯方块游戏示例项目
- 新增完整的俄罗斯方块游戏实现,展示PHP与C++混合编程
- 添加TetrisBox类继承Box机制进行对象封装传递
- 实现Windows GUI界面创建和GDI图形渲染功能
- 提供游戏主循环、键盘输入处理和自动下落逻辑
- 添加项目配置文件、快速开始指南和详细使用手册
- 包含类型映射规则说明和最佳实践总结
|
4 months ago |
韩天峰
|
fa9dde33c6
|
config(php): 修改编译器默认配置选项
- 将 formatCode 默认值从 true 改为 false
- 将 printBacktraceOnError 默认值从 true 改为 false
|
4 months ago |
韩天峰
|
7ee5f8e018
|
删除无效的文档
|
4 months ago |
韩天峰
|
67496f6bf6
|
feat(php): 添加MSVC编译器警告抑制功能
- 在Constants.php中新增未使用的局部变量和未引用标签的警告代码
- 实现MSVC后端对suppressed_warnings选项的支持
- 添加循环遍历警告代码并构建/wd参数的功能
- 集成警告抑制到编译命令中
|
4 months ago |
韩天峰
|
cd3657ec05
|
命名参数调用完成后,快速销毁临时数组,减少内存占用时间
|
4 months ago |
韩天峰
|
ffa4ae8dae
|
refactor(backend): 重构编译器架构为Platform+Backend双层抽象
- 实现Platform层抽象(Windows/Linux/MacOS)
- 实现Backend层抽象(MSVC/GCC/Clang)
- 添加适配器方法连接新旧架构
- 修复ZTS宏缺失和库文件链接顺序问题
- 创建MSVC环境初始化脚本和文档
- 完成8个单元测试,26个断言全部通过
- 建立清晰的职责分离和向后兼容机制
|
4 months ago |
韩天峰
|
217a638314
|
chore(build): 添加 PHP 单元测试缓存文件到忽略列表
- 添加 /.phpunit.cache 到 .gitignore 文件
- 防止 PHP 单元测试缓存文件被提交到版本控制
|
4 months ago |
韩天峰
|
51298c2d00
|
feat(backend): 添加 C 文件编译命令构建功能
- 在 Clang 类中实现 buildCCompileCommand 方法,支持 C 文件的编译命令构建
- 为 CompilerBackend 接口添加 buildCCompileCommand 抽象方法定义
- 在 Windows 平台下自动添加 MSVC 兼容性选项
- 支持调试模式下的优化级别控制和调试符号生成
- 添加警告级别设置确保代码质量检查
- 保持 C 文件编译时不使用 C++ 特定的编译选项
|
4 months ago |
韩天峰
|
6251d4d168
|
refactor(php): 简化编译器基类中的包含路径和库路径解析逻辑
- 移除新旧架构判断逻辑,直接使用简化后的解析方法
- 删除 parseIncludesNew、parseIncludesLegacy 和 parseWindowsIncludes 方法
- 删除 parseLdflagsNew、parseLdflagsLegacy 和 parseWindowsLdflags 方法
- 删除 parseLibsNew 和 parseLibsLegacy 方法
- 删除 addCompilationOptionNew 方法
- 更新 Translator 类中的包含路径解析调用
- 统一使用 platform 对象进行包含路径、库路径和库文件解析
|
4 months ago |
韩天峰
|
95a742f6b7
|
移除旧的编译构建代码
|
4 months ago |
韩天峰
|
2b97cee9e0
|
refactor(php): 重构平台检测逻辑的调用位置
- 将 detectPlatform 方法调用从 CompilerBase 移至 Translator 类中
- 删除 CompilerBase 中已注释的 no-literal-strings 参数处理代码
- 优化代码结构以提高平台检测的执行时机
|
4 months ago |
韩天峰
|
028a83dcb2
|
feat(compiler): 添加编译器选择机制和平台优化
- 实现基于环境变量的编译器选择(PHPX_CC > CXX > 平台默认)
- 支持通过 YAML 配置文件指定 cpp-compiler 选项
- 为 macOS、Linux、Windows 自动选择合适的默认编译器
- 优化 PHP 路径检测逻辑,移除硬编码路径依赖
- 为 extension 和 bin 模式统一添加 PHP 库链接
- 在 macOS 上实现 RPATH 支持以解决动态库加载问题
- 添加对多种构建模式名称的映射支持(extension/ext/binary/bin/cli)
|
4 months ago |
韩天峰
|
054560c0f9
|
feat(php): 添加 C++ 编译器配置支持并优化 PHP 路径查找逻辑
- 新增 setCppCompiler 方法用于设置 C++ 编译器
- 支持从配置文件读取 cpp-compiler 配置项
- 优化 Unix/Linux/macOS 系统 PHP 路径查找逻辑,增加环境变量 PHP_HOME 支持
- 改进共享库扩展名处理,统一处理带点和不带点的情况
- 添加多个常见 PHP 8.4 安装路径的自动检测
|
4 months ago |
韩天峰
|
cbf4280fa0
|
test: fix phpx directory test script
|
4 months ago |