diff options
author | Devang Patel <dpatel@apple.com> | 2009-08-31 18:49:10 +0000 |
---|---|---|
committer | Devang Patel <dpatel@apple.com> | 2009-08-31 18:49:10 +0000 |
commit | 56843af6f90e5bdf7d79a271d2406f57e6674122 (patch) | |
tree | 66dbad38919af9011cc13cfbcd034312a27f4d97 /lib/Analysis | |
parent | 4cfaf41d499ce05b11ecb62746c3e86b04440f62 (diff) | |
download | external_llvm-56843af6f90e5bdf7d79a271d2406f57e6674122.zip external_llvm-56843af6f90e5bdf7d79a271d2406f57e6674122.tar.gz external_llvm-56843af6f90e5bdf7d79a271d2406f57e6674122.tar.bz2 |
Simplify isDerivedType() and other predicate interface.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@80602 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis')
-rw-r--r-- | lib/Analysis/DebugInfo.cpp | 81 |
1 files changed, 59 insertions, 22 deletions
diff --git a/lib/Analysis/DebugInfo.cpp b/lib/Analysis/DebugInfo.cpp index 0d4b213..6901889 100644 --- a/lib/Analysis/DebugInfo.cpp +++ b/lib/Analysis/DebugInfo.cpp @@ -124,22 +124,23 @@ GlobalVariable *DIDescriptor::getGlobalVariableField(unsigned Elt) const { } //===----------------------------------------------------------------------===// -// Simple Descriptor Constructors and other Methods +// Predicates //===----------------------------------------------------------------------===// -// Needed by DIVariable::getType(). -DIType::DIType(MDNode *N) : DIDescriptor(N) { - if (!N) return; - unsigned tag = getTag(); - if (tag != dwarf::DW_TAG_base_type && !DIDerivedType::isDerivedType(tag) && - !DICompositeType::isCompositeType(tag)) { - DbgNode = 0; - } +/// isBasicType - Return true if the specified tag is legal for +/// DIBasicType. +bool DIDescriptor::isBasicType() const { + assert (isNull() && "Invalid descriptor!"); + unsigned Tag = getTag(); + + return Tag == dwarf::DW_TAG_base_type; } -/// isDerivedType - Return true if the specified tag is legal for -/// DIDerivedType. -bool DIType::isDerivedType(unsigned Tag) { +/// isDerivedType - Return true if the specified tag is legal for DIDerivedType. +bool DIDescriptor::isDerivedType() const { + assert (isNull() && "Invalid descriptor!"); + unsigned Tag = getTag(); + switch (Tag) { case dwarf::DW_TAG_typedef: case dwarf::DW_TAG_pointer_type: @@ -152,14 +153,17 @@ bool DIType::isDerivedType(unsigned Tag) { return true; default: // CompositeTypes are currently modelled as DerivedTypes. - return isCompositeType(Tag); + return isCompositeType(); } } /// isCompositeType - Return true if the specified tag is legal for /// DICompositeType. -bool DIType::isCompositeType(unsigned TAG) { - switch (TAG) { +bool DIDescriptor::isCompositeType() const { + assert (isNull() && "Invalid descriptor!"); + unsigned Tag = getTag(); + + switch (Tag) { case dwarf::DW_TAG_array_type: case dwarf::DW_TAG_structure_type: case dwarf::DW_TAG_union_type: @@ -174,7 +178,10 @@ bool DIType::isCompositeType(unsigned TAG) { } /// isVariable - Return true if the specified tag is legal for DIVariable. -bool DIVariable::isVariable(unsigned Tag) { +bool DIDescriptor::isVariable() const { + assert (isNull() && "Invalid descriptor!"); + unsigned Tag = getTag(); + switch (Tag) { case dwarf::DW_TAG_auto_variable: case dwarf::DW_TAG_arg_variable: @@ -185,6 +192,36 @@ bool DIVariable::isVariable(unsigned Tag) { } } +/// isSubprogram - Return true if the specified tag is legal for +/// DISubprogram. +bool DIDescriptor::isSubprogram() const { + assert (isNull() && "Invalid descriptor!"); + unsigned Tag = getTag(); + + return Tag == dwarf::DW_TAG_subprogram; +} + +/// isGlobalVariable - Return true if the specified tag is legal for +/// DIGlobalVariable. +bool DIDescriptor::isGlobalVariable() const { + assert (isNull() && "Invalid descriptor!"); + unsigned Tag = getTag(); + + return Tag == dwarf::DW_TAG_variable; +} + + +//===----------------------------------------------------------------------===// +// Simple Descriptor Constructors and other Methods +//===----------------------------------------------------------------------===// + +DIType::DIType(MDNode *N) : DIDescriptor(N) { + if (!N) return; + if (!isBasicType() && !isDerivedType() && !isCompositeType()) { + DbgNode = 0; + } +} + unsigned DIArray::getNumElements() const { assert (DbgNode && "Invalid DIArray"); return DbgNode->getNumElements(); @@ -366,11 +403,11 @@ void DIType::dump() const { if (isForwardDecl()) errs() << " [fwd] "; - if (isBasicType(Tag)) + if (isBasicType()) DIBasicType(DbgNode).dump(); - else if (isDerivedType(Tag)) + else if (isDerivedType()) DIDerivedType(DbgNode).dump(); - else if (isCompositeType(Tag)) + else if (isCompositeType()) DICompositeType(DbgNode).dump(); else { errs() << "Invalid DIType\n"; @@ -417,7 +454,7 @@ void DIGlobal::dump() const { if (isDefinition()) errs() << " [def] "; - if (isGlobalVariable(Tag)) + if (isGlobalVariable()) DIGlobalVariable(DbgNode).dump(); errs() << "\n"; @@ -818,7 +855,7 @@ void DebugInfoFinder::processType(DIType DT) { return; addCompileUnit(DT.getCompileUnit()); - if (DT.isCompositeType(DT.getTag())) { + if (DT.isCompositeType()) { DICompositeType DCT(DT.getNode()); processType(DCT.getTypeDerivedFrom()); DIArray DA = DCT.getTypeArray(); @@ -831,7 +868,7 @@ void DebugInfoFinder::processType(DIType DT) { else processSubprogram(DISubprogram(D.getNode())); } - } else if (DT.isDerivedType(DT.getTag())) { + } else if (DT.isDerivedType()) { DIDerivedType DDT(DT.getNode()); if (!DDT.isNull()) processType(DDT.getTypeDerivedFrom()); |