TypePHP 编译器
https://swoole.com/aot/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2.5 KiB
2.5 KiB
生成器总览
当 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 |
构造函数属性提升 |
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