生成器总览

doConvert() 收集完一个文件的语句后,调用各 genXxx 方法把 PHP 构造发射为 C++。所有发射逻辑分两类:声明头文件生成.h)与 实现单元生成.cc)。src/Generator/ 下是一组辅助生成器,负责闭包、匿名类、参数、资源文件等专项结构。

Sources: src/Translator.php · src/Generator/

主发射方法(在 Translator / CompilerBase)

方法产物
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

专项生成器(src/Generator/)

生成器负责
ClosureGenerator匿名函数 / 闭包 → C++ lambda 包装
AnonClassGenerator匿名类
CallArgumentGenerator调用实参的默认值/展开处理
DefaultArgumentGenerator默认参数 helper(genDefaultArgumentHelper*
FiberGenerator协程 / Fiber 生成
PropertyPromotion构造函数属性提升
ResourceFileGeneratorWindows .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

相关阅读