mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-14 07:31:53 +00:00
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:
parent
29e066965f
commit
ecbeb1a490
@ -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(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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.
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
Loading…
Reference in New Issue
Block a user