C++ LLVM类功能

Tim*_*Tim 6 c++ class llvm

我正在玩LLVM,但现在我不得不为类生成代码.

如何使用LLVM创建类功能?

  • 类操作符是否像函数一样处理?
  • 如何处理自动分配(如C++)?
  • 如何通过像C++这样的虚拟继承来支持像Java这样的接口?

Oak*_*Oak 10

长版

一般班级行为

一种简单的方法是创建结构,然后将方法模型化为常规函数,接收指向表示包含类的结构的this指针 - 实质上是指针 - 作为第一个参数.可以通过分配结构然后在分配的数据上调用特殊的初始化函数(实际上是构造函数)来建模分配.

继承可以通过构建一个结构来完成,该结构包含一个特殊的"父"字段(或多个继承的字段),其类型与基类的结构类型相同.

多态性

阅读虚拟表格; 我认为他们是最好的起点.您可以基本上找到编译器:

  1. 在内存中创建静态表,从函数"name"映射到其实现,
  2. 添加指向指向此类表的类结构的指针,
  3. 每当调用虚方法时,将其编译为间接调用,该调用从适当的虚拟表条目中取消引用该地址.

精简版

编写一些在C++中使用类的代码,然后使用Clang将其编译为LLVM IR并查看生成的代码.