通过C++ API实现LLVM IR OOP继承

Fed*_*zzi 5 c++ inheritance llvm

所以我试图用与Java非常相似的语法为OOP语言编写一个编译器,我一直在弄清楚如何实现继承。

我已经尝试过编写一个相当基本的C++继承示例并使用clang -S ${FILES} -emit-llvm.

C++ 代码如下:

a.hpp:

class A {

    protected:
        int a;

};
Run Code Online (Sandbox Code Playgroud)

b.hpp:

#include "a.hpp"

class B : public A {

    private:
        int b;

    public:
        explicit B();

};
Run Code Online (Sandbox Code Playgroud)

b.cpp:

#include "b.hpp"

B::B() : A() {}
Run Code Online (Sandbox Code Playgroud)

主.cpp:

#include "b.hpp"

int main() {

    B b;

}
Run Code Online (Sandbox Code Playgroud)

但老实说,我发现输出确实令人困惑......

我发现谷歌搜索是为了处理虚拟方法和覆盖,我必须使用vtables(关于这一点,我知道我已经在文档中找到了这个教程,LLVM但我没有发现它真的很有帮助,有吗?在 LLVM中创建vtable的标准方法)?

我对编译顺序也有一些疑问......

假设我有这个源代码:

package test;
class Test extends SuperTest {}
Run Code Online (Sandbox Code Playgroud)

似乎很清楚,我认为,以合并的逻辑和数据结构Test,并SuperTest同时分析TestSuperTest必须已编译的,但如何安排编译这样,像这样的问题不能出现?

谢谢关注。