Add classof() methods so that dwarf writer can decide what DIDescriptor is in its hand.

llvm-svn: 61740
This commit is contained in:
Devang Patel
2009-01-05 19:55:07 +00:00
parent 4b4351d249
commit 07cb07d80e
2 changed files with 22 additions and 2 deletions

View File

@@ -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.

View File

@@ -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
//===----------------------------------------------------------------------===//