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

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

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

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

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


person vmax    schedule 21.06.2020    source источник
comment
Привет! Чтобы людям было легче отвечать вам, предлагаю попробовать отредактировать и переформулировать в более конкретный вопрос. Типа ¿Где [конкретная вещь]? или ¿Как это работает [что-то конкретное]?. См. также как спросить.   -  person Cristobal Montecino    schedule 25.06.2020


Ответы (1)


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

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

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


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

person pfg    schedule 17.03.2021