我正在玩 LLVM,但现在我被困在为类生成代码上。
如何使用 LLVM 创建类功能?
- 类运算符是否像函数一样处理?
- 如何处理自动分配(如 C++)?
- 如何通过像 C++ 这样的虚拟继承来支持像 Java 这样的接口?
一种直接的方法是创建结构,然后将方法建模为常规函数,这些函数接收指向表示包含类的结构的指针——本质上是一个this
指针——作为第一个参数。分配可以通过分配结构然后在分配的数据上调用特殊的初始化函数(实际上是构造函数)来建模。
继承可以通过构建一个结构来完成,该结构包含一个特殊的“父”字段(或多个字段,用于多重继承),其类型与基类的结构类型相同。
阅读有关虚拟表的信息;我认为他们是最好的起点。你可以发现编译器基本上是:
编写一些使用 C++ 中的类的代码,然后使用 Clang 将其编译为 LLVM IR 并查看生成的代码。