aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen/CGVtable.h
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@mac.com>2009-10-11 22:13:54 +0000
committerAnders Carlsson <andersca@mac.com>2009-10-11 22:13:54 +0000
commitdbd920c7758e6dfb678a8f503fb14ba97c26f23a (patch)
treef015cc9fac5b257dbbb40542f5be1eb8030406ba /lib/CodeGen/CGVtable.h
parentfc3bf4d4d2aea8353541a5710bed2ad00c451b68 (diff)
Move the vtable builder to CGVtable.cpp, general cleanup.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@83798 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CGVtable.h')
-rw-r--r--lib/CodeGen/CGVtable.h59
1 files changed, 59 insertions, 0 deletions
diff --git a/lib/CodeGen/CGVtable.h b/lib/CodeGen/CGVtable.h
new file mode 100644
index 0000000000..6adc6e63b0
--- /dev/null
+++ b/lib/CodeGen/CGVtable.h
@@ -0,0 +1,59 @@
+//===--- CGVtable.h - Emit LLVM Code for C++ vtables ----------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This contains code dealing with C++ code generation of virtual tables.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef CLANG_CODEGEN_CGVTABLE_H
+#define CLANG_CODEGEN_CGVTABLE_H
+
+#include "llvm/ADT/DenseMap.h"
+
+namespace clang {
+ class CXXMethodDecl;
+ class CXXRecordDecl;
+
+namespace CodeGen {
+ class CodeGenModule;
+
+class CGVtableInfo {
+ CodeGenModule &CGM;
+
+ /// MethodVtableIndices - Contains the index (relative to the vtable address
+ /// point) where the function pointer for a virtual function is stored.
+ typedef llvm::DenseMap<const CXXMethodDecl *, int64_t> MethodVtableIndicesTy;
+ MethodVtableIndicesTy MethodVtableIndices;
+
+ typedef std::pair<const CXXRecordDecl *,
+ const CXXRecordDecl *> ClassPairTy;
+
+ /// VirtualBaseClassIndicies - Contains the index into the vtable where the
+ /// offsets for virtual bases of a class are stored.
+ typedef llvm::DenseMap<ClassPairTy, int64_t> VirtualBaseClassIndiciesTy;
+ VirtualBaseClassIndiciesTy VirtualBaseClassIndicies;
+public:
+ CGVtableInfo(CodeGenModule &CGM)
+ : CGM(CGM) { }
+
+ /// getMethodVtableIndex - Return the index (relative to the vtable address
+ /// point) where the function pointer for the given virtual function is
+ /// stored.
+ int64_t getMethodVtableIndex(const CXXMethodDecl *MD);
+
+ /// getVirtualBaseOffsetIndex - Return the index (relative to the vtable address
+ /// point) where the offset of the given virtual base of the given class is
+ // stored.
+ int64_t getVirtualBaseOffsetIndex(const CXXRecordDecl *RD,
+ const CXXRecordDecl *VBase);
+};
+
+}
+}
+#endif