forked from OSchip/llvm-project
Debug Info: move DIScope::getContext back from DwarfDebug.
This partially reverts r190330. DIScope::getContext now returns DIScopeRef instead of DIScope. We construct a DIScopeRef from DIScope when we are dealing with subprogram, lexical block or name space. llvm-svn: 190362
This commit is contained in:
parent
fff258976d
commit
de897a369a
|
@ -200,6 +200,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.
|
||||
DIScopeRef getContext() const;
|
||||
StringRef getFilename() const;
|
||||
StringRef getDirectory() const;
|
||||
|
||||
|
@ -213,6 +216,7 @@ namespace llvm {
|
|||
class DIScopeRef {
|
||||
template <typename DescTy>
|
||||
friend DescTy DIDescriptor::getFieldAs(unsigned Elt) const;
|
||||
friend DIScopeRef DIScope::getContext() const;
|
||||
|
||||
/// Val can be either a MDNode or a MDString, in the latter,
|
||||
/// MDString specifies the type identifier.
|
||||
|
|
|
@ -919,7 +919,7 @@ static bool isTypeUnitScoped(DIType Ty, const DwarfDebug *DD) {
|
|||
// Don't generate a hash for anything scoped inside a function.
|
||||
if (Parent.isSubprogram())
|
||||
return false;
|
||||
Parent = DD->getScopeContext(Parent);
|
||||
Parent = DD->resolve(Parent.getContext());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -2649,26 +2649,3 @@ void DwarfDebug::emitDebugStrDWO() {
|
|||
DIScope DwarfDebug::resolve(DIScopeRef SRef) const {
|
||||
return SRef.resolve(TypeIdentifierMap);
|
||||
}
|
||||
|
||||
// If the current node has a parent scope then return that,
|
||||
// else return an empty scope.
|
||||
DIScope DwarfDebug::getScopeContext(DIScope S) const {
|
||||
|
||||
if (S.isType())
|
||||
return resolve(DIType(S).getContext());
|
||||
|
||||
if (S.isSubprogram())
|
||||
return DISubprogram(S).getContext();
|
||||
|
||||
if (S.isLexicalBlock())
|
||||
return DILexicalBlock(S).getContext();
|
||||
|
||||
if (S.isLexicalBlockFile())
|
||||
return DILexicalBlockFile(S).getContext();
|
||||
|
||||
if (S.isNameSpace())
|
||||
return DINameSpace(S).getContext();
|
||||
|
||||
assert((S.isFile() || S.isCompileUnit()) && "Unhandled type of scope.");
|
||||
return DIScope();
|
||||
}
|
||||
|
|
|
@ -690,9 +690,6 @@ public:
|
|||
/// or another context nested inside a subprogram.
|
||||
bool isSubprogramContext(const MDNode *Context);
|
||||
|
||||
/// Gets the parent scope for this scope node or returns a
|
||||
/// default constructed scope.
|
||||
DIScope getScopeContext(DIScope S) const;
|
||||
};
|
||||
} // End of namespace llvm
|
||||
|
||||
|
|
|
@ -785,6 +785,29 @@ Value *DITemplateValueParameter::getValue() const {
|
|||
return getField(DbgNode, 4);
|
||||
}
|
||||
|
||||
// If the current node has a parent scope then return that,
|
||||
// else return an empty scope.
|
||||
DIScopeRef DIScope::getContext() const {
|
||||
|
||||
if (isType())
|
||||
return DIType(DbgNode).getContext();
|
||||
|
||||
if (isSubprogram())
|
||||
return DIScopeRef(DISubprogram(DbgNode).getContext());
|
||||
|
||||
if (isLexicalBlock())
|
||||
return DIScopeRef(DILexicalBlock(DbgNode).getContext());
|
||||
|
||||
if (isLexicalBlockFile())
|
||||
return DIScopeRef(DILexicalBlockFile(DbgNode).getContext());
|
||||
|
||||
if (isNameSpace())
|
||||
return DIScopeRef(DINameSpace(DbgNode).getContext());
|
||||
|
||||
assert((isFile() || isCompileUnit()) && "Unhandled type of scope.");
|
||||
return DIScopeRef(NULL);
|
||||
}
|
||||
|
||||
StringRef DIScope::getFilename() const {
|
||||
if (!DbgNode)
|
||||
return StringRef();
|
||||
|
|
Loading…
Reference in New Issue