我已经开始阅读clang
and的源代码了zig-lang
。不幸的是,源代码很复杂,我无法找出这些编译器的前端在主函数中调用的位置。
在clang
中,我找到的更近的地方是这里,但它看起来不像处理编译前端。
在zig-lang
中,主要功能更加混乱,难以理解。我只是可以在这里找到事实上的主要功能(main0)。
虽然,解释这些编译器的阶段并指向他们的代码是值得赞赏的,但对我来说,仅仅调用前端计算的地方就足够了。
主 zig 编译器从Compilation.performAllTheWork执行。该函数循环遍历所有编译项并编译它们。( main() → buildOutputType → updateModule → Compilation.update → Compilation.performAllTheWork)
当从Compilation.updateStage1Module的工作队列中找到 stage1_module 项时,将调用 Stage1(zig 0.8.0 中的默认编译器,用 C++ 编写)。大部分编译发生在codegen_build_object(从zig_stage1_build_object调用)
Stage2(用 Zig 编写的工作中更快的编译器)更紧密地集成到工作队列中,因为它支持增量编译并在工作队列切换的这些分支中调用。
Clang 从某个地方开始,也许在clang.lib.frontend.CompilerInvocation?