]> granicus.if.org Git - clang/commitdiff
Make TemplateArgumentListBuilder take an ASTContext (because we're probably going...
authorAnders Carlsson <andersca@mac.com>
Fri, 5 Jun 2009 05:31:27 +0000 (05:31 +0000)
committerAnders Carlsson <andersca@mac.com>
Fri, 5 Jun 2009 05:31:27 +0000 (05:31 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@72918 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/AST/DeclTemplate.h
lib/AST/DeclTemplate.cpp
lib/Sema/SemaTemplate.cpp
lib/Sema/SemaTemplateDeduction.cpp

index 3028c4d317a17985030fe2b16f706ddc9074f811..d1899006cc82fcd60c86f8b5db37565b6996d1c4 100644 (file)
@@ -577,14 +577,16 @@ public:
 class TemplateArgumentListBuilder {
   llvm::SmallVector<TemplateArgument, 16> Args;
 
+  ASTContext &Context;
 public:
+  TemplateArgumentListBuilder(ASTContext &Context) : Context(Context) { }
+  
   // FIXME: Should use the  index array size.
   size_t size() const { return Args.size(); }
-
   size_t flatSize() const { return Args.size(); }
-    
+
+  void push_back(const TemplateArgument& Arg);
   TemplateArgument *getFlatArgumentList() { return Args.data(); }
-  void push_back(const TemplateArgument& Arg) { Args.push_back(Arg); }
 };
 
 /// \brief A template argument list.
index fbaaf4de7f7272dd2530769718160f4503684eea..11b9275e3440773919048d77906451267066ebe6 100644 (file)
@@ -235,6 +235,19 @@ TemplateArgument::TemplateArgument(Expr *E) : Kind(Expression) {
   StartLoc = E->getSourceRange().getBegin();
 }
 
+//===----------------------------------------------------------------------===//
+// TemplateArgumentListBuilder Implementation
+//===----------------------------------------------------------------------===//
+void TemplateArgumentListBuilder::push_back(const TemplateArgument& Arg) {
+  switch (Arg.getKind()) {
+  case TemplateArgument::Type:
+    assert(Arg.getAsType()->isCanonical() && "Type must be canonical!");
+    break;
+  }
+  
+  Args.push_back(Arg);
+}
+
 //===----------------------------------------------------------------------===//
 // TemplateArgumentList Implementation
 //===----------------------------------------------------------------------===//
index 660f54ca78fd4b0e99579e2587706afd57b23271..f9176ca470c08afaff2b8135ca3b2108c98dfafe 100644 (file)
@@ -811,7 +811,7 @@ QualType Sema::CheckTemplateIdType(TemplateName Name,
 
   // Check that the template argument list is well-formed for this
   // template.
-  TemplateArgumentListBuilder ConvertedTemplateArgs;
+  TemplateArgumentListBuilder ConvertedTemplateArgs(Context);
   if (CheckTemplateArgumentList(Template, TemplateLoc, LAngleLoc, 
                                 TemplateArgs, NumTemplateArgs, RAngleLoc,
                                 ConvertedTemplateArgs))
@@ -2064,7 +2064,7 @@ Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, TagKind TK,
 
   // Check that the template argument list is well-formed for this
   // template.
-  TemplateArgumentListBuilder ConvertedTemplateArgs;
+  TemplateArgumentListBuilder ConvertedTemplateArgs(Context);
   if (CheckTemplateArgumentList(ClassTemplate, TemplateNameLoc, LAngleLoc, 
                                 &TemplateArgs[0], TemplateArgs.size(),
                                 RAngleLoc, ConvertedTemplateArgs))
@@ -2268,7 +2268,7 @@ Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation TemplateLoc,
 
   // Check that the template argument list is well-formed for this
   // template.
-  TemplateArgumentListBuilder ConvertedTemplateArgs;
+  TemplateArgumentListBuilder ConvertedTemplateArgs(Context);
   if (CheckTemplateArgumentList(ClassTemplate, TemplateNameLoc, LAngleLoc, 
                                 TemplateArgs.data(), TemplateArgs.size(),
                                 RAngleLoc, ConvertedTemplateArgs))
index 59793fe4c0282aa7826f36c307a6a2ddb822b94e..812b319804d7427f96a9bc317d7f4e53ff8566eb 100644 (file)
@@ -386,7 +386,7 @@ Sema::DeduceTemplateArguments(ClassTemplatePartialSpecializationDecl *Partial,
   
   // FIXME: This is terrible. DeduceTemplateArguments should use a 
   // TemplateArgumentListBuilder directly.
-  TemplateArgumentListBuilder Builder;
+  TemplateArgumentListBuilder Builder(Context);
   for (unsigned I = 0, N = Deduced.size(); I != N; ++I)
     Builder.push_back(Deduced[I]);