Browse Source

Add qualified template name to GetCXXRecordDeclFromBaseType.

pull/1751/head
Joao Matos 2 years ago
parent
commit
7e71f5a9fa
  1. 23
      src/CppParser/Parser.cpp

23
src/CppParser/Parser.cpp

@ -874,14 +874,31 @@ static bool IsRecordValid(const clang::RecordDecl* RC) @@ -874,14 +874,31 @@ static bool IsRecordValid(const clang::RecordDecl* RC)
return IsRecordValid(RC, Visited);
}
static clang::CXXRecordDecl* GetCXXRecordDeclFromBaseType(const clang::QualType& Ty) {
static clang::CXXRecordDecl* GetCXXRecordDeclFromTemplateName(const clang::TemplateName& Name)
{
using namespace clang;
switch (Name.getKind()) {
case clang::TemplateName::Template:
return dyn_cast<clang::CXXRecordDecl>(
Name.getAsTemplateDecl()->getTemplatedDecl());
case clang::TemplateName::QualifiedTemplate:
return dyn_cast<clang::CXXRecordDecl>(
Name.getAsQualifiedTemplateName()->getTemplateDecl()->getTemplatedDecl());
default:
assert(0 && "Unknown template name kind");
return nullptr;
}
}
static clang::CXXRecordDecl* GetCXXRecordDeclFromBaseType(const clang::QualType& Ty)
{
using namespace clang;
if (auto RT = Ty->getAs<clang::RecordType>())
return dyn_cast<clang::CXXRecordDecl>(RT->getDecl());
else if (auto TST = Ty->getAs<clang::TemplateSpecializationType>())
return dyn_cast<clang::CXXRecordDecl>(
TST->getTemplateName().getAsTemplateDecl()->getTemplatedDecl());
return GetCXXRecordDeclFromTemplateName(TST->getTemplateName());
else if (auto Injected = Ty->getAs<clang::InjectedClassNameType>())
return Injected->getDecl();

Loading…
Cancel
Save