diff --git a/src/lib_cxx/data/parser/cxx/CxxAstVisitor.cpp b/src/lib_cxx/data/parser/cxx/CxxAstVisitor.cpp index c4850575..d1f94e3f 100644 --- a/src/lib_cxx/data/parser/cxx/CxxAstVisitor.cpp +++ b/src/lib_cxx/data/parser/cxx/CxxAstVisitor.cpp @@ -1160,9 +1160,10 @@ const clang::NamedDecl* CxxAstVisitor::getTopmostContextDecl() const { for (std::vector>::const_reverse_iterator it = m_contextStack.rbegin(); it != m_contextStack.rend(); it ++) { - if (std::shared_ptr context = std::dynamic_pointer_cast(*it)) + const clang::NamedDecl* decl = (*it)->getDecl(); + if (decl) { - return context->getDecl(); + return decl; } } return nullptr; @@ -1179,7 +1180,6 @@ NameHierarchy CxxAstVisitor::getContextName(const size_t skip) const bool CxxAstVisitor::checkIgnoresTypeLoc(const clang::TypeLoc& tl) { - if ((!tl.getAs().isNull()) || (!tl.getAs().isNull()) || (!tl.getAs().isNull()) || diff --git a/src/lib_cxx/data/parser/cxx/CxxContext.cpp b/src/lib_cxx/data/parser/cxx/CxxContext.cpp index 8fc1f4eb..ce0fee29 100644 --- a/src/lib_cxx/data/parser/cxx/CxxContext.cpp +++ b/src/lib_cxx/data/parser/cxx/CxxContext.cpp @@ -38,3 +38,8 @@ NameHierarchy CxxContextType::getName() { return m_nameCache->getValue(m_type); } + +const clang::NamedDecl* CxxContextType::getDecl() +{ + return nullptr; +} diff --git a/src/lib_cxx/data/parser/cxx/CxxContext.h b/src/lib_cxx/data/parser/cxx/CxxContext.h index 1aaa339b..6349f276 100644 --- a/src/lib_cxx/data/parser/cxx/CxxContext.h +++ b/src/lib_cxx/data/parser/cxx/CxxContext.h @@ -14,6 +14,7 @@ class CxxContext public: virtual ~CxxContext(); virtual NameHierarchy getName() = 0; + virtual const clang::NamedDecl* getDecl() = 0; }; class CxxContextDecl: public CxxContext @@ -22,7 +23,7 @@ public: CxxContextDecl(const clang::NamedDecl* decl, std::shared_ptr nameCache); virtual ~CxxContextDecl(); virtual NameHierarchy getName(); - const clang::NamedDecl* getDecl(); + virtual const clang::NamedDecl* getDecl(); private: const clang::NamedDecl* m_decl; @@ -35,6 +36,7 @@ public: CxxContextType(const clang::Type* type, std::shared_ptr nameCache); virtual ~CxxContextType(); virtual NameHierarchy getName(); + virtual const clang::NamedDecl* getDecl(); private: const clang::Type* m_type;