From dac3753c0c3386100e056e36dde38e50cdc423b1 Mon Sep 17 00:00:00 2001 From: Joao Matos <joao@tritao.eu> Date: Tue, 26 Sep 2017 00:13:39 +0100 Subject: [PATCH] Fixed parser bug when dealing with DependentTemplateSpecializationTypeLoc. --- src/CppParser/Parser.cpp | 9 +++++---- src/CppParser/Parser.h | 3 ++- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/CppParser/Parser.cpp b/src/CppParser/Parser.cpp index 3f2d53cc..69083864 100644 --- a/src/CppParser/Parser.cpp +++ b/src/CppParser/Parser.cpp @@ -1220,9 +1220,10 @@ NonTypeTemplateParameter* Parser::WalkNonTypeTemplateParameter(const clang::NonT //-----------------------------------// +template<typename TypeLoc> std::vector<CppSharp::CppParser::TemplateArgument> Parser::WalkTemplateArgumentList(const clang::TemplateArgumentList* TAL, - clang::TemplateSpecializationTypeLoc* TSTL) + TypeLoc* TSTL) { using namespace clang; @@ -2433,11 +2434,11 @@ Type* Parser::WalkType(clang::QualType QualType, const clang::TypeLoc* TL, assert(TL->getTypeLocClass() == TypeLoc::DependentTemplateSpecialization); } - TemplateSpecializationTypeLoc TSpecTL; - TemplateSpecializationTypeLoc *TSTL = 0; + DependentTemplateSpecializationTypeLoc TSpecTL; + DependentTemplateSpecializationTypeLoc *TSTL = 0; if (LocValid) { - TSpecTL = TL->getAs<TemplateSpecializationTypeLoc>(); + TSpecTL = TL->getAs<DependentTemplateSpecializationTypeLoc>(); TSTL = &TSpecTL; } diff --git a/src/CppParser/Parser.h b/src/CppParser/Parser.h index 703588d3..9f4d167a 100644 --- a/src/CppParser/Parser.h +++ b/src/CppParser/Parser.h @@ -101,7 +101,8 @@ private: WalkVarTemplateSpecialization(const clang::VarTemplateSpecializationDecl* VTS); VarTemplatePartialSpecialization* WalkVarTemplatePartialSpecialization(const clang::VarTemplatePartialSpecializationDecl* VTS); - std::vector<TemplateArgument> WalkTemplateArgumentList(const clang::TemplateArgumentList* TAL, clang::TemplateSpecializationTypeLoc* TSTL); + template<typename TypeLoc> + std::vector<TemplateArgument> WalkTemplateArgumentList(const clang::TemplateArgumentList* TAL, TypeLoc* TSTL); std::vector<TemplateArgument> WalkTemplateArgumentList(const clang::TemplateArgumentList* TAL, const clang::ASTTemplateArgumentListInfo* TSTL); void WalkVTable(const clang::CXXRecordDecl* RD, Class* C); QualifiedType GetQualifiedType(const clang::QualType& qual, const clang::TypeLoc* TL = 0);