当 doConvert() 收集完一个文件的语句后,调用各 genXxx 方法把 PHP 构造发射为 C++。所有发射逻辑分两类:声明头文件生成(.h)与 实现单元生成(.cc)。src/Generator/ 下是一组辅助生成器,负责闭包、匿名类、参数、资源文件等专项结构。
Sources: src/Translator.php · src/Generator/
| 方法 | 产物 |
|---|---|
genFunctionDeclarations() | php_<target>_func_decl.h:所有函数前向声明 |
genDataDeclarations() | php_<target>_data_decl.h:全局变量 / 常量 / 类映射表声明 |
genExtension() | extension-<target>.cc:模块入口(MINIT/RINIT/RSHUTDOWN) |
genClassWrapper() | 单个类/接口的 C++ 实现 |
genFunctionWrapper() | 单个函数的 C++ 实现 |
genClassPropertyInit() | 属性默认值与 create_object 初始化块 |
Sources: src/Translator.php · src/Translator.php · src/Translator.php
| 生成器 | 负责 |
|---|---|
ClosureGenerator | 匿名函数 / 闭包 → C++ lambda 包装 |
AnonClassGenerator | 匿名类 |
CallArgumentGenerator | 调用实参的默认值/展开处理 |
DefaultArgumentGenerator | 默认参数 helper(genDefaultArgumentHelper*) |
FiberGenerator | 协程 / Fiber 生成 |
PropertyPromotion | 构造函数属性提升 |
ResourceFileGenerator | Windows .rc 资源文件 |
LibraryImportStubGenerator | 跨库导入桩 <target>.stub.php |
TypeCheckGenerator | 运行时类型检查代码 |
Symbol | 符号名转义工具 |
Sources: src/Generator/
每个生成的 .cc 都 #include 项目级 func_decl.h / data_decl.h 与各自的 _arginfo.h。这些共享头文件的内容指纹正是 增量编译缓存 判定是否重编译的依据——任一头变化都会让依赖它的 .cc 失效。
Sources: src/Translator.php · src/Translator.php