diff options
author | Devang Patel <dpatel@apple.com> | 2009-01-05 19:55:07 +0000 |
---|---|---|
committer | Devang Patel <dpatel@apple.com> | 2009-01-05 19:55:07 +0000 |
commit | a22d57d6f8215717298ae0cef34d00ab5104ddea (patch) | |
tree | 22b9b66fdc9a11799666645ffc55d6c8d38feda3 | |
parent | 50b84f44e4bf4099d62a86abd4f553a095305eac (diff) | |
download | external_llvm-a22d57d6f8215717298ae0cef34d00ab5104ddea.zip external_llvm-a22d57d6f8215717298ae0cef34d00ab5104ddea.tar.gz external_llvm-a22d57d6f8215717298ae0cef34d00ab5104ddea.tar.bz2 |
Add classof() methods so that dwarf writer can decide what DIDescriptor is in its hand.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61740 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/Analysis/DebugInfo.h | 19 | ||||
-rw-r--r-- | lib/Analysis/DebugInfo.cpp | 5 |
2 files changed, 22 insertions, 2 deletions
diff --git a/include/llvm/Analysis/DebugInfo.h b/include/llvm/Analysis/DebugInfo.h index bc89102..fae9a44 100644 --- a/include/llvm/Analysis/DebugInfo.h +++ b/include/llvm/Analysis/DebugInfo.h @@ -77,6 +77,7 @@ namespace llvm { unsigned getTag() const { return getUnsignedField(0) & ~VersionMask; } + static inline bool classof(const DIDescriptor *D) { return true; } }; /// DIAnchor - A wrapper for various anchor descriptors. @@ -94,6 +95,11 @@ namespace llvm { int64_t getLo() const { return (int64_t)getUInt64Field(1); } int64_t getHi() const { return (int64_t)getUInt64Field(2); } + static bool isSubrange(unsigned); + static inline bool classof(const DISubrange *) { return true; } + static inline bool classof(const DIDescriptor *D) { + return isSubrange(D->getTag()); + } }; /// DIArray - This descriptor holds an array of descriptors. @@ -102,8 +108,8 @@ namespace llvm { explicit DIArray(GlobalVariable *GV = 0) : DIDescriptor(GV) {} unsigned getNumElements() const; - DISubrange getElement(unsigned Idx) const { - return getFieldAs<DISubrange>(Idx); + DIDescriptor getElement(unsigned Idx) const { + return getDescriptorField(Idx); } }; @@ -180,6 +186,11 @@ namespace llvm { /// isDerivedType - Return true if the specified tag is legal for /// DIDerivedType. static bool isDerivedType(unsigned TAG); + + static inline bool classof(const DIDerivedType *) { return true; } + static inline bool classof(const DIDescriptor *D) { + return isDerivedType(D->getTag()); + } }; @@ -197,6 +208,10 @@ namespace llvm { /// isCompositeType - Return true if the specified tag is legal for /// DICompositeType. static bool isCompositeType(unsigned TAG); + static inline bool classof(const DIDerivedType *) { return true; } + static inline bool classof(const DIDescriptor *D) { + return isCompositeType(D->getTag()); + } }; /// DIGlobal - This is a common class for global variables and subprograms. diff --git a/lib/Analysis/DebugInfo.cpp b/lib/Analysis/DebugInfo.cpp index 8b802d7..b5ff34e 100644 --- a/lib/Analysis/DebugInfo.cpp +++ b/lib/Analysis/DebugInfo.cpp @@ -181,6 +181,11 @@ unsigned DIArray::getNumElements() const { return C->getNumOperands(); } +/// isSubrange - Return true if the specified tag is legal for DISubrange. +bool DISubrange::isSubrange(unsigned Tag) { + return Tag == dwarf::DW_TAG_subrange_type; +} + //===----------------------------------------------------------------------===// // DIFactory: Basic Helpers //===----------------------------------------------------------------------===// |