Реализация наследования IR OOP LLVM через C ++ API - PullRequest
0 голосов
/ 14 мая 2018

, поэтому я пытаюсь записать компилятор для языка OOP с синтаксисом, очень похожим на Java , и я застрял в выяснении, как можно реализовать наследование.

Я уже попробовал написать довольно простой пример наследования C ++ и скомпилировать его с clang -S ${FILES} -emit-llvm.

Код C ++ выглядит следующим образом:

a.hpp:

class A {

    protected:
        int a;

};

b.hpp:

#include "a.hpp"

class B : public A {

    private:
        int b;

    public:
        explicit B();

};

b.cpp:

#include "b.hpp"

B::B() : A() {}

main.cpp:

#include "b.hpp"

int main() {

    B b;

}

Но я, честно говоря, считаю вывод действительно очень запутанным ...

Я обнаружил, что Googling заключается в том, что для обработки виртуальных методов и переопределений мне придется использовать vtables (и об этом, зная, что я уже нашел этот учебник вLLVM документ, но я не нашел это действительно полезным, есть ли стандартный способ создания vtables в LLVM)?

У меня также есть некоторые сомнения относительно порядка компиляции ...

Допустим, у меня есть этот исходный код:

package test;
class Test extends SuperTest {}

Мне кажется, довольно ясно, что по порядкуЧтобы объединить логические структуры и структуры данных Test и SuperTest при анализе Test, SuperTest должно быть уже скомпилировано, но как мне организовать компиляцию таким образом, чтобы такие проблемы не возникали?

Спасибо за внимание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...