Расчет внешнего интерфейса дизайна компилятора в функции main для Clang и Zig

Я начал читать исходный код clang а также zig-lang. К сожалению, исходные коды сложны, и я не могу узнать, где интерфейс этих компиляторов вызывается в основной функции.

В clang, более близкое место, которое я нашел, находится здесь, но оно не похоже на обработку внешнего интерфейса компиляции.

В zig-lang, основная функция еще более запутанная и трудная для понимания. Я просто не мог найти де - факто основной функции (main0) здесь.

Хотя объяснение этапов этих компиляторов и указание на их код приветствуется, мне достаточно только той точки, где вызываются вычисления внешних интерфейсов.

1 ответ

Основной компилятор zig выполняется из Compilation.performAllTheWork . Эта функция перебирает все элементы компиляции и компилирует их. (main()buildOutputTypeupdateModuleCompilation.update → Compilation.performAllTheWork)

Stage1 (компилятор по умолчанию в zig 0.8.0, написанный на C++) вызывается, когда в рабочей очереди из Compilation.updateStage1Module обнаруживаются элементы stage1_module . Основная часть компиляции происходит из codegen_build_object ( вызывается из zig_stage1_build_object)

Stage2 (незавершенный более быстрый компилятор, написанный на Zig) более тесно интегрирован в рабочую очередь, поскольку поддерживает инкрементную компиляцию и вызывается в этих ветвях переключателя рабочей очереди.


Clang где-то начинается, может быть, в clang.lib.frontend.CompilerInvocation?

Другие вопросы по тегам