From eedb40f18f0b237d56f4fd6e42a621123e46a058 Mon Sep 17 00:00:00 2001 From: triton Date: Sat, 16 Nov 2013 01:36:10 +0000 Subject: [PATCH] Fixed namespace parsing of template declarations. --- src/Parser/Parser.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/Parser/Parser.cpp b/src/Parser/Parser.cpp index 439c194d..ab8325f2 100644 --- a/src/Parser/Parser.cpp +++ b/src/Parser/Parser.cpp @@ -718,6 +718,11 @@ Parser::WalkClassTemplateSpecialization(clang::ClassTemplateSpecializationDecl* auto TS = gcnew CppSharp::AST::ClassTemplateSpecialization(); TS->OriginalPtr = System::IntPtr(CTS); + + auto NS = GetNamespace(CTS); + assert(NS && "Expected a valid namespace"); + TS->Namespace = NS; + TS->TemplatedDecl = CT; TS->SpecializationKind = WalkTemplateSpecializationKind(CTS->getSpecializationKind()); CT->Specializations->Add(TS); @@ -742,6 +747,11 @@ Parser::WalkClassTemplatePartialSpecialization(clang::ClassTemplatePartialSpecia auto TS = gcnew CppSharp::AST::ClassTemplatePartialSpecialization(); TS->OriginalPtr = System::IntPtr(CTS); + + auto NS = GetNamespace(CTS); + assert(NS && "Expected a valid namespace"); + TS->Namespace = NS; + TS->TemplatedDecl = CT; TS->SpecializationKind = WalkTemplateSpecializationKind(CTS->getSpecializationKind()); CT->Specializations->Add(TS); @@ -772,6 +782,7 @@ CppSharp::AST::ClassTemplate^ Parser::WalkClassTemplate(clang::ClassTemplateDecl return CT; CT = gcnew CppSharp::AST::ClassTemplate(); + CT->Namespace = NS; CT->OriginalPtr = System::IntPtr(TD); NS->Templates->Add(CT); @@ -811,6 +822,7 @@ CppSharp::AST::FunctionTemplate^ Parser::WalkFunctionTemplate(clang::FunctionTem auto Function = WalkFunction(TD->getTemplatedDecl(), /*IsDependent=*/true, /*AddToNamespace=*/false); FT = gcnew CppSharp::AST::FunctionTemplate(Function); + FT->Namespace = NS; FT->OriginalPtr = System::IntPtr(TD); NS->Templates->Add(FT);