Browse Source

Added template specialisations to their lists before parsing their parameters.

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/658/head
Dimitar Dobrev 10 years ago
parent
commit
02ed084fd8
  1. 14
      src/CppParser/Parser.cpp

14
src/CppParser/Parser.cpp

@ -895,6 +895,8 @@ Parser::WalkClassTemplateSpecialization(clang::ClassTemplateSpecializationDecl*
TS->Name = CTS->getName(); TS->Name = CTS->getName();
TS->TemplatedDecl = CT; TS->TemplatedDecl = CT;
TS->SpecializationKind = WalkTemplateSpecializationKind(CTS->getSpecializationKind()); TS->SpecializationKind = WalkTemplateSpecializationKind(CTS->getSpecializationKind());
CT->Specializations.push_back(TS);
auto& TAL = CTS->getTemplateArgs(); auto& TAL = CTS->getTemplateArgs();
auto TSI = CTS->getTypeAsWritten(); auto TSI = CTS->getTypeAsWritten();
if (TSI) if (TSI)
@ -907,7 +909,6 @@ Parser::WalkClassTemplateSpecialization(clang::ClassTemplateSpecializationDecl*
{ {
TS->Arguments = WalkTemplateArgumentList(&TAL, (clang::TemplateSpecializationTypeLoc*) 0); TS->Arguments = WalkTemplateArgumentList(&TAL, (clang::TemplateSpecializationTypeLoc*) 0);
} }
CT->Specializations.push_back(TS);
if (CTS->isCompleteDefinition()) if (CTS->isCompleteDefinition())
WalkRecordCXX(CTS, TS); WalkRecordCXX(CTS, TS);
@ -931,14 +932,14 @@ Parser::WalkClassTemplatePartialSpecialization(clang::ClassTemplatePartialSpecia
TS = new ClassTemplatePartialSpecialization(); TS = new ClassTemplatePartialSpecialization();
HandleDeclaration(CTS, TS); HandleDeclaration(CTS, TS);
TS->Name = CTS->getName();
auto NS = GetNamespace(CTS); auto NS = GetNamespace(CTS);
assert(NS && "Expected a valid namespace"); assert(NS && "Expected a valid namespace");
TS->_Namespace = NS; TS->_Namespace = NS;
TS->Name = CTS->getName();
TS->TemplatedDecl = CT; TS->TemplatedDecl = CT;
TS->SpecializationKind = WalkTemplateSpecializationKind(CTS->getSpecializationKind()); TS->SpecializationKind = WalkTemplateSpecializationKind(CTS->getSpecializationKind());
CT->Specializations.push_back(TS);
auto& TAL = CTS->getTemplateArgs(); auto& TAL = CTS->getTemplateArgs();
if (auto TSI = CTS->getTypeAsWritten()) if (auto TSI = CTS->getTypeAsWritten())
{ {
@ -946,7 +947,6 @@ Parser::WalkClassTemplatePartialSpecialization(clang::ClassTemplatePartialSpecia
auto TSL = TL.getAs<TemplateSpecializationTypeLoc>(); auto TSL = TL.getAs<TemplateSpecializationTypeLoc>();
TS->Arguments = WalkTemplateArgumentList(&TAL, &TSL); TS->Arguments = WalkTemplateArgumentList(&TAL, &TSL);
} }
CT->Specializations.push_back(TS);
if (CTS->isCompleteDefinition()) if (CTS->isCompleteDefinition())
WalkRecordCXX(CTS, TS); WalkRecordCXX(CTS, TS);
@ -1028,8 +1028,6 @@ TemplateTemplateParameter* Parser::WalkTemplateTemplateParameter(clang::Template
TypeTemplateParameter* Parser::WalkTypeTemplateParameter(clang::TemplateTypeParmDecl* TTPD) TypeTemplateParameter* Parser::WalkTypeTemplateParameter(clang::TemplateTypeParmDecl* TTPD)
{ {
using namespace clang;
auto TP = new CppSharp::CppParser::TypeTemplateParameter(); auto TP = new CppSharp::CppParser::TypeTemplateParameter();
TP->Name = GetDeclName(TTPD); TP->Name = GetDeclName(TTPD);
HandleDeclaration(TTPD, TP); HandleDeclaration(TTPD, TP);
@ -1046,8 +1044,6 @@ TypeTemplateParameter* Parser::WalkTypeTemplateParameter(clang::TemplateTypeParm
NonTypeTemplateParameter* Parser::WalkNonTypeTemplateParameter(clang::NonTypeTemplateParmDecl* NTTPD) NonTypeTemplateParameter* Parser::WalkNonTypeTemplateParameter(clang::NonTypeTemplateParmDecl* NTTPD)
{ {
using namespace clang;
auto NTP = new CppSharp::CppParser::NonTypeTemplateParameter(); auto NTP = new CppSharp::CppParser::NonTypeTemplateParameter();
NTP->Name = GetDeclName(NTTPD); NTP->Name = GetDeclName(NTTPD);
HandleDeclaration(NTTPD, NTP); HandleDeclaration(NTTPD, NTP);

Loading…
Cancel
Save