summaryrefslogtreecommitdiffstats
path: root/src/definition.cpp
diff options
context:
space:
mode:
authorDimitri van Heesch <dimitri@stack.nl>2014-07-18 20:00:49 (GMT)
committerDimitri van Heesch <dimitri@stack.nl>2014-07-18 20:00:49 (GMT)
commit6a60477b418e21dbadd3e62dc557a038e319581b (patch)
tree11650223d9fc05d7e4bd6ab69894e360c431049b /src/definition.cpp
parent3a5e6ac7c6018a7a0da7acd830293da0fcb7a21c (diff)
downloadDoxygen-6a60477b418e21dbadd3e62dc557a038e319581b.zip
Doxygen-6a60477b418e21dbadd3e62dc557a038e319581b.tar.gz
Doxygen-6a60477b418e21dbadd3e62dc557a038e319581b.tar.bz2
More robust extraction of scope information from tag files
Diffstat (limited to 'src/definition.cpp')
-rw-r--r--src/definition.cpp16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/definition.cpp b/src/definition.cpp
index c4b9f77..8603536 100644
--- a/src/definition.cpp
+++ b/src/definition.cpp
@@ -1362,13 +1362,21 @@ QCString Definition::qualifiedName() const
return m_impl->qualifiedName;
};
-void Definition::setOuterScope(Definition *d)
+void Definition::setOuterScope(Definition *d)
{
//printf("%s::setOuterScope(%s)\n",name().data(),d?d->name().data():"<none>");
- if (m_impl->outerScope!=d)
- {
+ Definition *p = m_impl->outerScope;
+ bool found=false;
+ // make sure that we are not creating a recursive scope relation.
+ while (p && !found)
+ {
+ found = (p==d);
+ p = p->m_impl->outerScope;
+ }
+ if (!found)
+ {
m_impl->qualifiedName.resize(0); // flush cached scope name
- m_impl->outerScope = d;
+ m_impl->outerScope = d;
}
m_impl->hidden = m_impl->hidden || d->isHidden();
}