Add a way to get the context of any particular scope.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187212 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Eric Christopher 2013-07-26 17:02:36 +00:00
parent 65985348c5
commit 956e5aa3bd
2 changed files with 28 additions and 0 deletions

View File

@ -187,6 +187,9 @@ namespace llvm {
public:
explicit DIScope(const MDNode *N = 0) : DIDescriptor (N) {}
/// Gets the parent scope for this scope node or returns a
/// default constructed scope.
DIScope getContext() const;
StringRef getFilename() const;
StringRef getDirectory() const;
};

View File

@ -692,6 +692,31 @@ Value *DITemplateValueParameter::getValue() const {
return getField(DbgNode, 4);
}
// If the current node has a parent scope then return that,
// else return an empty scope.
DIScope DIScope::getContext() const {
if (isType())
return DIType(DbgNode).getContext();
if (isSubprogram())
return DISubprogram(DbgNode).getContext();
if (isLexicalBlock())
return DILexicalBlock(DbgNode).getContext();
if (isLexicalBlockFile())
return DILexicalBlockFile(DbgNode).getContext();
if (isNameSpace())
return DINameSpace(DbgNode).getContext();
if (isFile() || isCompileUnit())
return DIScope();
return DIScope();
}
StringRef DIScope::getFilename() const {
if (!DbgNode)
return StringRef();