diff options
Diffstat (limited to 'src/definition.cpp')
-rw-r--r-- | src/definition.cpp | 16 |
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(); } |