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

生成器总览

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

相关阅读