summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Christopher <echristo@gmail.com>2013-07-26 17:02:36 +0000
committerEric Christopher <echristo@gmail.com>2013-07-26 17:02:36 +0000
commitfeea95c88468cadbbed4ca0526826a7d279f2f7d (patch)
treeb5a914ad7ec9867c76f238969e60642af62bdeac
parentb37fba7c54bd83ea0198c13433a1eba32401850d (diff)
downloadbcm5719-llvm-feea95c88468cadbbed4ca0526826a7d279f2f7d.tar.gz
bcm5719-llvm-feea95c88468cadbbed4ca0526826a7d279f2f7d.zip
Add a way to get the context of any particular scope.
llvm-svn: 187212
-rw-r--r--llvm/include/llvm/DebugInfo.h3
-rw-r--r--llvm/lib/IR/DebugInfo.cpp25
2 files changed, 28 insertions, 0 deletions
diff --git a/llvm/include/llvm/DebugInfo.h b/llvm/include/llvm/DebugInfo.h
index ae7bf049444..9fb12f8feb0 100644
--- a/llvm/include/llvm/DebugInfo.h
+++ b/llvm/include/llvm/DebugInfo.h
@@ -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;
};
diff --git a/llvm/lib/IR/DebugInfo.cpp b/llvm/lib/IR/DebugInfo.cpp
index 750231658f1..369895ce568 100644
--- a/llvm/lib/IR/DebugInfo.cpp
+++ b/llvm/lib/IR/DebugInfo.cpp
@@ -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();
OpenPOWER on IntegriCloud