Browse Source

Fixed parser bug when dealing with DependentTemplateSpecializationTypeLoc.

pull/966/head
Joao Matos 9 years ago
parent
commit
dac3753c0c
  1. 9
      src/CppParser/Parser.cpp
  2. 3
      src/CppParser/Parser.h

9
src/CppParser/Parser.cpp

@ -1220,9 +1220,10 @@ NonTypeTemplateParameter* Parser::WalkNonTypeTemplateParameter(const clang::NonT
//-----------------------------------// //-----------------------------------//
template<typename TypeLoc>
std::vector<CppSharp::CppParser::TemplateArgument> std::vector<CppSharp::CppParser::TemplateArgument>
Parser::WalkTemplateArgumentList(const clang::TemplateArgumentList* TAL, Parser::WalkTemplateArgumentList(const clang::TemplateArgumentList* TAL,
clang::TemplateSpecializationTypeLoc* TSTL) TypeLoc* TSTL)
{ {
using namespace clang; using namespace clang;
@ -2433,11 +2434,11 @@ Type* Parser::WalkType(clang::QualType QualType, const clang::TypeLoc* TL,
assert(TL->getTypeLocClass() == TypeLoc::DependentTemplateSpecialization); assert(TL->getTypeLocClass() == TypeLoc::DependentTemplateSpecialization);
} }
TemplateSpecializationTypeLoc TSpecTL; DependentTemplateSpecializationTypeLoc TSpecTL;
TemplateSpecializationTypeLoc *TSTL = 0; DependentTemplateSpecializationTypeLoc *TSTL = 0;
if (LocValid) if (LocValid)
{ {
TSpecTL = TL->getAs<TemplateSpecializationTypeLoc>(); TSpecTL = TL->getAs<DependentTemplateSpecializationTypeLoc>();
TSTL = &TSpecTL; TSTL = &TSpecTL;
} }

3
src/CppParser/Parser.h

@ -101,7 +101,8 @@ private:
WalkVarTemplateSpecialization(const clang::VarTemplateSpecializationDecl* VTS); WalkVarTemplateSpecialization(const clang::VarTemplateSpecializationDecl* VTS);
VarTemplatePartialSpecialization* VarTemplatePartialSpecialization*
WalkVarTemplatePartialSpecialization(const clang::VarTemplatePartialSpecializationDecl* VTS); 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); std::vector<TemplateArgument> WalkTemplateArgumentList(const clang::TemplateArgumentList* TAL, const clang::ASTTemplateArgumentListInfo* TSTL);
void WalkVTable(const clang::CXXRecordDecl* RD, Class* C); void WalkVTable(const clang::CXXRecordDecl* RD, Class* C);
QualifiedType GetQualifiedType(const clang::QualType& qual, const clang::TypeLoc* TL = 0); QualifiedType GetQualifiedType(const clang::QualType& qual, const clang::TypeLoc* TL = 0);

Loading…
Cancel
Save