diff ir/irstruct.h @ 136:0e28624814e8 trunk

[svn r140] did a lot of the work towards being able to pass multiple modules on the command line. not complete yet though
author lindquist
date Thu, 17 Jan 2008 03:15:12 +0100
parents
children ce7b81fb957f
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ir/irstruct.h	Thu Jan 17 03:15:12 2008 +0100
@@ -0,0 +1,65 @@
+#ifndef LLVMDC_IR_IRSTRUCT_H
+#define LLVMDC_IR_IRSTRUCT_H
+
+#include "ir/ir.h"
+
+#include <vector>
+#include <map>
+
+struct IrInterface : IrBase
+{
+    BaseClass* base;
+    ClassDeclaration* decl;
+
+    const llvm::StructType* vtblTy;
+    llvm::ConstantStruct* vtblInit;
+    llvm::GlobalVariable* vtbl;
+
+    const llvm::StructType* infoTy;
+    llvm::ConstantStruct* infoInit;
+    llvm::Constant* info;
+
+    IrInterface(BaseClass* b, const llvm::StructType* vt);
+    ~IrInterface();
+};
+
+//////////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+
+// represents a struct or class
+struct IrStruct : IrBase
+{
+    struct Offset
+    {
+        VarDeclaration* var;
+        const llvm::Type* type;
+        llvm::Constant* init;
+
+        Offset(VarDeclaration* v, const llvm::Type* ty)
+        : var(v), type(ty), init(NULL) {}
+    };
+
+    typedef std::multimap<unsigned, Offset> OffsetMap;
+    typedef std::vector<VarDeclaration*> VarDeclVector;
+    typedef std::map<ClassDeclaration*, IrInterface*> InterfaceMap;
+    typedef InterfaceMap::iterator InterfaceIter;
+
+public:
+    IrStruct(Type*);
+    virtual ~IrStruct();
+
+    Type* type;
+    llvm::PATypeHolder recty;
+    OffsetMap offsets;
+    VarDeclVector defaultFields;
+
+    InterfaceMap interfaces;
+    const llvm::ArrayType* interfaceInfosTy;
+    llvm::GlobalVariable* interfaceInfos;
+
+    bool defined;
+    bool constinited;
+};
+
+#endif