diff --git a/src/lib/utility/ScopedSwitcher.h b/src/lib/utility/ScopedSwitcher.h index defed386..570e4afa 100644 --- a/src/lib/utility/ScopedSwitcher.h +++ b/src/lib/utility/ScopedSwitcher.h @@ -5,14 +5,14 @@ template class ScopedSwitcher { public: - ScopedSwitcher(T &var) + ScopedSwitcher(T &var) : m_var(&var) - , m_origVal(var) + , m_origVal(var) {} - ScopedSwitcher(T &var, T tempVal) + ScopedSwitcher(T &var, T tempVal) : m_var(&var) - , m_origVal(var) + , m_origVal(var) { var = tempVal; } diff --git a/src/lib_cxx/data/parser/cxx/name_resolver/CxxDeclNameResolver.cpp b/src/lib_cxx/data/parser/cxx/name_resolver/CxxDeclNameResolver.cpp index 244455dc..94ec70c9 100644 --- a/src/lib_cxx/data/parser/cxx/name_resolver/CxxDeclNameResolver.cpp +++ b/src/lib_cxx/data/parser/cxx/name_resolver/CxxDeclNameResolver.cpp @@ -68,6 +68,8 @@ std::unique_ptr CxxDeclNameResolver::getName(const clang::NamedDecl clang::ASTContext::DynTypedNodeList parents = declaration->getASTContext().getParents(*declaration); for (const clang::ast_type_traits::DynTypedNode* parent = parents.begin(); parent != parents.end(); parent++) { + bool foundParent = false; + const clang::Decl* parentDecl = parent->get(); while (parentDecl != nullptr) { @@ -80,6 +82,7 @@ std::unique_ptr CxxDeclNameResolver::getName(const clang::NamedDecl { declName->setParent(getName(parentTemplateDecl)); } + foundParent = true; break; } else if (clang::isa(parentDecl)) @@ -90,6 +93,7 @@ std::unique_ptr CxxDeclNameResolver::getName(const clang::NamedDecl { declName->setParent(getName(parentClassTemplateDecl)); } + foundParent = true; break; } else if (clang::isa(parentDecl)) @@ -100,6 +104,7 @@ std::unique_ptr CxxDeclNameResolver::getName(const clang::NamedDecl { declName->setParent(getName(parentVarTemplateDecl)); } + foundParent = true; break; } @@ -107,6 +112,7 @@ std::unique_ptr CxxDeclNameResolver::getName(const clang::NamedDecl { if (ignoresContext(parentDeclContext)) { + foundParent = true; break; } parentDecl = clang::dyn_cast_or_null(parentDeclContext); @@ -123,6 +129,12 @@ std::unique_ptr CxxDeclNameResolver::getName(const clang::NamedDecl break; } } + + if (foundParent) + { + // break for the first parent ast node that can be resolved to a parent name (also if it is ignored). + break; + } } } else