Add isFOO() helpers. Fix getDirectory() and getFilename() for DIScope.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@83180 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Devang Patel 2009-09-30 22:34:41 +00:00
parent 29e066965f
commit ecbeb1a490
2 changed files with 57 additions and 2 deletions

View File

@ -98,6 +98,10 @@ namespace llvm {
bool isScope() const; bool isScope() const;
bool isCompileUnit() const; bool isCompileUnit() const;
bool isLexicalBlock() const; bool isLexicalBlock() const;
bool isSubrange() const;
bool isEnumerator() const;
bool isType() const;
bool isGlobal() const;
}; };
/// DISubrange - This is used to represent ranges, for array bounds. /// DISubrange - This is used to represent ranges, for array bounds.
@ -131,8 +135,8 @@ namespace llvm {
} }
virtual ~DIScope() {} virtual ~DIScope() {}
virtual const char *getFilename() const { return NULL; } const char *getFilename() const;
virtual const char *getDirectory() const { return NULL; } const char *getDirectory() const;
}; };
/// DICompileUnit - A wrapper for a compile unit. /// DICompileUnit - A wrapper for a compile unit.
@ -438,6 +442,7 @@ namespace llvm {
DbgNode = 0; DbgNode = 0;
} }
DIScope getContext() const { return getFieldAs<DIScope>(1); } DIScope getContext() const { return getFieldAs<DIScope>(1); }
const char *getDirectory() const { return getContext().getDirectory(); }
const char *getFilename() const { return getContext().getFilename(); } const char *getFilename() const { return getContext().getFilename(); }
}; };

View File

@ -189,6 +189,11 @@ bool DIDescriptor::isVariable() const {
} }
} }
/// isType - Return true if the specified tag is legal for DIType.
bool DIDescriptor::isType() const {
return isBasicType() || isCompositeType() || isDerivedType();
}
/// isSubprogram - Return true if the specified tag is legal for /// isSubprogram - Return true if the specified tag is legal for
/// DISubprogram. /// DISubprogram.
bool DIDescriptor::isSubprogram() const { bool DIDescriptor::isSubprogram() const {
@ -207,6 +212,11 @@ bool DIDescriptor::isGlobalVariable() const {
return Tag == dwarf::DW_TAG_variable; return Tag == dwarf::DW_TAG_variable;
} }
/// isGlobal - Return true if the specified tag is legal for DIGlobal.
bool DIDescriptor::isGlobal() const {
return isGlobalVariable();
}
/// isScope - Return true if the specified tag is one of the scope /// isScope - Return true if the specified tag is one of the scope
/// related tag. /// related tag.
bool DIDescriptor::isScope() const { bool DIDescriptor::isScope() const {
@ -240,6 +250,22 @@ bool DIDescriptor::isLexicalBlock() const {
return Tag == dwarf::DW_TAG_lexical_block; return Tag == dwarf::DW_TAG_lexical_block;
} }
/// isSubrange - Return true if the specified tag is DW_TAG_subrange_type.
bool DIDescriptor::isSubrange() const {
assert (!isNull() && "Invalid descriptor!");
unsigned Tag = getTag();
return Tag == dwarf::DW_TAG_subrange_type;
}
/// isEnumerator - Return true if the specified tag is DW_TAG_enumerator.
bool DIDescriptor::isEnumerator() const {
assert (!isNull() && "Invalid descriptor!");
unsigned Tag = getTag();
return Tag == dwarf::DW_TAG_enumerator;
}
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// Simple Descriptor Constructors and other Methods // Simple Descriptor Constructors and other Methods
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
@ -392,6 +418,30 @@ bool DISubprogram::describes(const Function *F) {
return false; return false;
} }
const char *DIScope::getFilename() const {
if (isLexicalBlock())
return DILexicalBlock(DbgNode).getFilename();
else if (isSubprogram())
return DISubprogram(DbgNode).getFilename();
else if (isCompileUnit())
return DICompileUnit(DbgNode).getFilename();
else
assert (0 && "Invalid DIScope!");
return NULL;
}
const char *DIScope::getDirectory() const {
if (isLexicalBlock())
return DILexicalBlock(DbgNode).getDirectory();
else if (isSubprogram())
return DISubprogram(DbgNode).getDirectory();
else if (isCompileUnit())
return DICompileUnit(DbgNode).getDirectory();
else
assert (0 && "Invalid DIScope!");
return NULL;
}
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// DIDescriptor: dump routines for all descriptors. // DIDescriptor: dump routines for all descriptors.
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//