diff options
author | Anders Carlsson <andersca@mac.com> | 2009-10-11 22:13:54 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2009-10-11 22:13:54 +0000 |
commit | dbd920c7758e6dfb678a8f503fb14ba97c26f23a (patch) | |
tree | f015cc9fac5b257dbbb40542f5be1eb8030406ba /lib/CodeGen/CGVtable.h | |
parent | fc3bf4d4d2aea8353541a5710bed2ad00c451b68 (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.h | 59 |
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 |