Skip to content

Commit 626a362

Browse files
authored
Add qualified template name to GetCXXRecordDeclFromBaseType. (#1751)
1 parent 357efec commit 626a362

File tree

1 file changed

+20
-3
lines changed

1 file changed

+20
-3
lines changed

src/CppParser/Parser.cpp

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -874,14 +874,31 @@ static bool IsRecordValid(const clang::RecordDecl* RC)
874874
return IsRecordValid(RC, Visited);
875875
}
876876

877-
static clang::CXXRecordDecl* GetCXXRecordDeclFromBaseType(const clang::QualType& Ty) {
877+
static clang::CXXRecordDecl* GetCXXRecordDeclFromTemplateName(const clang::TemplateName& Name)
878+
{
879+
using namespace clang;
880+
881+
switch (Name.getKind()) {
882+
case clang::TemplateName::Template:
883+
return dyn_cast<clang::CXXRecordDecl>(
884+
Name.getAsTemplateDecl()->getTemplatedDecl());
885+
case clang::TemplateName::QualifiedTemplate:
886+
return dyn_cast<clang::CXXRecordDecl>(
887+
Name.getAsQualifiedTemplateName()->getTemplateDecl()->getTemplatedDecl());
888+
default:
889+
assert(0 && "Unknown template name kind");
890+
return nullptr;
891+
}
892+
}
893+
894+
static clang::CXXRecordDecl* GetCXXRecordDeclFromBaseType(const clang::QualType& Ty)
895+
{
878896
using namespace clang;
879897

880898
if (auto RT = Ty->getAs<clang::RecordType>())
881899
return dyn_cast<clang::CXXRecordDecl>(RT->getDecl());
882900
else if (auto TST = Ty->getAs<clang::TemplateSpecializationType>())
883-
return dyn_cast<clang::CXXRecordDecl>(
884-
TST->getTemplateName().getAsTemplateDecl()->getTemplatedDecl());
901+
return GetCXXRecordDeclFromTemplateName(TST->getTemplateName());
885902
else if (auto Injected = Ty->getAs<clang::InjectedClassNameType>())
886903
return Injected->getDecl();
887904

0 commit comments

Comments
 (0)