Debug Info Finder: add processScope to actually handle the Scope.

Instead of just adding the scope to the list, we actually handle the scope.

llvm-svn: 186867
This commit is contained in:
Manman Ren 2013-07-22 20:28:53 +00:00
parent 55b0be72d1
commit 14dd2a656e
2 changed files with 25 additions and 3 deletions

View File

@ -756,6 +756,8 @@ namespace llvm {
/// processLocation - Process DILocation.
void processLocation(DILocation Loc);
void processScope(DIScope Scope);
/// addCompileUnit - Add compile unit into CUs.
bool addCompileUnit(DICompileUnit CU);

View File

@ -857,7 +857,7 @@ void DebugInfoFinder::processModule(const Module &M) {
for (unsigned i = 0, e = GVs.getNumElements(); i != e; ++i) {
DIGlobalVariable DIG(GVs.getElement(i));
if (addGlobalVariable(DIG)) {
addScope(DIG.getContext());
processScope(DIG.getContext());
processType(DIG.getType());
}
}
@ -897,7 +897,7 @@ void DebugInfoFinder::processLocation(DILocation Loc) {
void DebugInfoFinder::processType(DIType DT) {
if (!addType(DT))
return;
addScope(DT.getContext());
processScope(DT.getContext());
if (DT.isCompositeType()) {
DICompositeType DCT(DT);
processType(DCT.getTypeDerivedFrom());
@ -915,6 +915,26 @@ void DebugInfoFinder::processType(DIType DT) {
}
}
void DebugInfoFinder::processScope(DIScope Scope) {
if (Scope.isType()) {
DIType Ty(Scope);
processType(Ty);
return;
}
if (!addScope(Scope))
return;
if (Scope.isLexicalBlock()) {
DILexicalBlock LB(Scope);
processScope(LB.getContext());
} else if (Scope.isLexicalBlockFile()) {
DILexicalBlockFile LBF = DILexicalBlockFile(Scope);
processScope(LBF.getScope());
} else if (Scope.isNameSpace()) {
DINameSpace NS(Scope);
processScope(NS.getContext());
}
}
/// processLexicalBlock
void DebugInfoFinder::processLexicalBlock(DILexicalBlock LB) {
DIScope Context = LB.getContext();
@ -932,7 +952,7 @@ void DebugInfoFinder::processLexicalBlock(DILexicalBlock LB) {
void DebugInfoFinder::processSubprogram(DISubprogram SP) {
if (!addSubprogram(SP))
return;
addScope(SP.getContext());
processScope(SP.getContext());
processType(SP.getType());
}