diff options
-rw-r--r-- | include/clang/AST/DeclTemplate.h | 15 | ||||
-rw-r--r-- | lib/AST/DeclTemplate.cpp | 17 | ||||
-rw-r--r-- | lib/Sema/SemaTemplate.cpp | 27 |
3 files changed, 23 insertions, 36 deletions
diff --git a/include/clang/AST/DeclTemplate.h b/include/clang/AST/DeclTemplate.h index bc12c93078..1d5736a783 100644 --- a/include/clang/AST/DeclTemplate.h +++ b/include/clang/AST/DeclTemplate.h @@ -578,7 +578,7 @@ class TemplateArgumentListBuilder { llvm::SmallVector<TemplateArgument, 16> Args; public: - // FIXME: Should use index array size. + // FIXME: Should use the index array size. size_t size() const { return Args.size(); } size_t flatSize() const { return Args.size(); } @@ -691,14 +691,13 @@ protected: ClassTemplateSpecializationDecl(ASTContext &Context, Kind DK, DeclContext *DC, SourceLocation L, ClassTemplateDecl *SpecializedTemplate, - TemplateArgument *TemplateArgs, - unsigned NumTemplateArgs); + TemplateArgumentListBuilder &Builder); public: static ClassTemplateSpecializationDecl * Create(ASTContext &Context, DeclContext *DC, SourceLocation L, ClassTemplateDecl *SpecializedTemplate, - TemplateArgument *TemplateArgs, unsigned NumTemplateArgs, + TemplateArgumentListBuilder &Builder, ClassTemplateSpecializationDecl *PrevDecl); /// \brief Retrieve the template that this specialization specializes. @@ -761,11 +760,9 @@ class ClassTemplatePartialSpecializationDecl DeclContext *DC, SourceLocation L, TemplateParameterList *Params, ClassTemplateDecl *SpecializedTemplate, - TemplateArgument *TemplateArgs, - unsigned NumTemplateArgs) + TemplateArgumentListBuilder &Builder) : ClassTemplateSpecializationDecl(Context, ClassTemplatePartialSpecialization, - DC, L, SpecializedTemplate, TemplateArgs, - NumTemplateArgs), + DC, L, SpecializedTemplate, Builder), TemplateParams(Params) { } public: @@ -773,7 +770,7 @@ public: Create(ASTContext &Context, DeclContext *DC, SourceLocation L, TemplateParameterList *Params, ClassTemplateDecl *SpecializedTemplate, - TemplateArgument *TemplateArgs, unsigned NumTemplateArgs, + TemplateArgumentListBuilder &Builder, ClassTemplatePartialSpecializationDecl *PrevDecl); /// Get the list of template parameters diff --git a/lib/AST/DeclTemplate.cpp b/lib/AST/DeclTemplate.cpp index f38ee82510..e491fc4de1 100644 --- a/lib/AST/DeclTemplate.cpp +++ b/lib/AST/DeclTemplate.cpp @@ -271,8 +271,7 @@ ClassTemplateSpecializationDecl:: ClassTemplateSpecializationDecl(ASTContext &Context, Kind DK, DeclContext *DC, SourceLocation L, ClassTemplateDecl *SpecializedTemplate, - TemplateArgument *TemplateArgs, - unsigned NumTemplateArgs) + TemplateArgumentListBuilder &Builder) : CXXRecordDecl(DK, SpecializedTemplate->getTemplatedDecl()->getTagKind(), DC, L, @@ -280,7 +279,8 @@ ClassTemplateSpecializationDecl(ASTContext &Context, Kind DK, // class template specializations? SpecializedTemplate->getIdentifier()), SpecializedTemplate(SpecializedTemplate), - TemplateArgs(Context, TemplateArgs, NumTemplateArgs, /*CopyArgs=*/true), + TemplateArgs(Context, Builder.getFlatArgumentList(), Builder.flatSize(), + /*CopyArgs=*/true), SpecializationKind(TSK_Undeclared) { } @@ -288,16 +288,14 @@ ClassTemplateSpecializationDecl * ClassTemplateSpecializationDecl::Create(ASTContext &Context, DeclContext *DC, SourceLocation L, ClassTemplateDecl *SpecializedTemplate, - TemplateArgument *TemplateArgs, - unsigned NumTemplateArgs, + TemplateArgumentListBuilder &Builder, ClassTemplateSpecializationDecl *PrevDecl) { ClassTemplateSpecializationDecl *Result = new (Context)ClassTemplateSpecializationDecl(Context, ClassTemplateSpecialization, DC, L, SpecializedTemplate, - TemplateArgs, - NumTemplateArgs); + Builder); Context.getTypeDeclType(Result, PrevDecl); return Result; } @@ -310,14 +308,13 @@ ClassTemplatePartialSpecializationDecl:: Create(ASTContext &Context, DeclContext *DC, SourceLocation L, TemplateParameterList *Params, ClassTemplateDecl *SpecializedTemplate, - TemplateArgument *TemplateArgs, unsigned NumTemplateArgs, + TemplateArgumentListBuilder &Builder, ClassTemplatePartialSpecializationDecl *PrevDecl) { ClassTemplatePartialSpecializationDecl *Result = new (Context)ClassTemplatePartialSpecializationDecl(Context, DC, L, Params, SpecializedTemplate, - TemplateArgs, - NumTemplateArgs); + Builder); Result->setSpecializationKind(TSK_ExplicitSpecialization); Context.getTypeDeclType(Result, PrevDecl); return Result; diff --git a/lib/Sema/SemaTemplate.cpp b/lib/Sema/SemaTemplate.cpp index ca1e81867c..42483e419f 100644 --- a/lib/Sema/SemaTemplate.cpp +++ b/lib/Sema/SemaTemplate.cpp @@ -856,8 +856,7 @@ QualType Sema::CheckTemplateIdType(TemplateName Name, ClassTemplate->getDeclContext(), TemplateLoc, ClassTemplate, - ConvertedTemplateArgs.getFlatArgumentList(), - ConvertedTemplateArgs.flatSize(), 0); + ConvertedTemplateArgs, 0); ClassTemplate->getSpecializations().InsertNode(Decl, InsertPos); Decl->setLexicalDeclContext(CurContext); } @@ -2129,12 +2128,11 @@ Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, TagKind TK, ClassTemplatePartialSpecializationDecl *Partial = ClassTemplatePartialSpecializationDecl::Create(Context, ClassTemplate->getDeclContext(), - TemplateNameLoc, - TemplateParams, - ClassTemplate, - ConvertedTemplateArgs.getFlatArgumentList(), - ConvertedTemplateArgs.flatSize(), - PrevPartial); + TemplateNameLoc, + TemplateParams, + ClassTemplate, + ConvertedTemplateArgs, + PrevPartial); if (PrevPartial) { ClassTemplate->getPartialSpecializations().RemoveNode(PrevPartial); @@ -2150,9 +2148,8 @@ Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, TagKind TK, = ClassTemplateSpecializationDecl::Create(Context, ClassTemplate->getDeclContext(), TemplateNameLoc, - ClassTemplate, - ConvertedTemplateArgs.getFlatArgumentList(), - ConvertedTemplateArgs.flatSize(), + ClassTemplate, + ConvertedTemplateArgs, PrevDecl); if (PrevDecl) { @@ -2331,9 +2328,7 @@ Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation TemplateLoc, ClassTemplate->getDeclContext(), TemplateNameLoc, ClassTemplate, - ConvertedTemplateArgs.getFlatArgumentList(), - ConvertedTemplateArgs.flatSize(), - 0); + ConvertedTemplateArgs, 0); Specialization->setLexicalDeclContext(CurContext); CurContext->addDecl(Context, Specialization); return DeclPtrTy::make(Specialization); @@ -2359,9 +2354,7 @@ Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation TemplateLoc, ClassTemplate->getDeclContext(), TemplateNameLoc, ClassTemplate, - ConvertedTemplateArgs.getFlatArgumentList(), - ConvertedTemplateArgs.flatSize(), - 0); + ConvertedTemplateArgs, 0); ClassTemplate->getSpecializations().InsertNode(Specialization, InsertPos); |