DeclTemplate.cpp (193576) | DeclTemplate.cpp (194179) |
---|---|
1//===--- DeclCXX.cpp - C++ Declaration AST Node Implementation ------------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// --- 36 unchanged lines hidden (view full) --- 45} 46 47unsigned TemplateParameterList::getMinRequiredArguments() const { 48 unsigned NumRequiredArgs = size(); 49 iterator Param = const_cast<TemplateParameterList *>(this)->end(), 50 ParamBegin = const_cast<TemplateParameterList *>(this)->begin(); 51 while (Param != ParamBegin) { 52 --Param; | 1//===--- DeclCXX.cpp - C++ Declaration AST Node Implementation ------------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// --- 36 unchanged lines hidden (view full) --- 45} 46 47unsigned TemplateParameterList::getMinRequiredArguments() const { 48 unsigned NumRequiredArgs = size(); 49 iterator Param = const_cast<TemplateParameterList *>(this)->end(), 50 ParamBegin = const_cast<TemplateParameterList *>(this)->begin(); 51 while (Param != ParamBegin) { 52 --Param; |
53 if (!(isa<TemplateTypeParmDecl>(*Param) && | 53 54 if (!(*Param)->isTemplateParameterPack() && 55 !(isa<TemplateTypeParmDecl>(*Param) && |
54 cast<TemplateTypeParmDecl>(*Param)->hasDefaultArgument()) && 55 !(isa<NonTypeTemplateParmDecl>(*Param) && 56 cast<NonTypeTemplateParmDecl>(*Param)->hasDefaultArgument()) && 57 !(isa<TemplateTemplateParmDecl>(*Param) && 58 cast<TemplateTemplateParmDecl>(*Param)->hasDefaultArgument())) 59 break; 60 61 --NumRequiredArgs; --- 119 unchanged lines hidden (view full) --- 181 182//===----------------------------------------------------------------------===// 183// TemplateTypeParm Allocation/Deallocation Method Implementations 184//===----------------------------------------------------------------------===// 185 186TemplateTypeParmDecl * 187TemplateTypeParmDecl::Create(ASTContext &C, DeclContext *DC, 188 SourceLocation L, unsigned D, unsigned P, | 56 cast<TemplateTypeParmDecl>(*Param)->hasDefaultArgument()) && 57 !(isa<NonTypeTemplateParmDecl>(*Param) && 58 cast<NonTypeTemplateParmDecl>(*Param)->hasDefaultArgument()) && 59 !(isa<TemplateTemplateParmDecl>(*Param) && 60 cast<TemplateTemplateParmDecl>(*Param)->hasDefaultArgument())) 61 break; 62 63 --NumRequiredArgs; --- 119 unchanged lines hidden (view full) --- 183 184//===----------------------------------------------------------------------===// 185// TemplateTypeParm Allocation/Deallocation Method Implementations 186//===----------------------------------------------------------------------===// 187 188TemplateTypeParmDecl * 189TemplateTypeParmDecl::Create(ASTContext &C, DeclContext *DC, 190 SourceLocation L, unsigned D, unsigned P, |
189 IdentifierInfo *Id, bool Typename) { | 191 IdentifierInfo *Id, bool Typename, 192 bool ParameterPack) { |
190 QualType Type = C.getTemplateTypeParmType(D, P, Id); | 193 QualType Type = C.getTemplateTypeParmType(D, P, Id); |
191 return new (C) TemplateTypeParmDecl(DC, L, Id, Typename, Type); | 194 return new (C) TemplateTypeParmDecl(DC, L, Id, Typename, Type, ParameterPack); |
192} 193 194//===----------------------------------------------------------------------===// 195// NonTypeTemplateParmDecl Method Implementations 196//===----------------------------------------------------------------------===// 197 198NonTypeTemplateParmDecl * 199NonTypeTemplateParmDecl::Create(ASTContext &C, DeclContext *DC, --- 41 unchanged lines hidden (view full) --- 241void TemplateArgumentListBuilder::push_back(const TemplateArgument& Arg) { 242 switch (Arg.getKind()) { 243 default: break; 244 case TemplateArgument::Type: 245 assert(Arg.getAsType()->isCanonical() && "Type must be canonical!"); 246 break; 247 } 248 | 195} 196 197//===----------------------------------------------------------------------===// 198// NonTypeTemplateParmDecl Method Implementations 199//===----------------------------------------------------------------------===// 200 201NonTypeTemplateParmDecl * 202NonTypeTemplateParmDecl::Create(ASTContext &C, DeclContext *DC, --- 41 unchanged lines hidden (view full) --- 244void TemplateArgumentListBuilder::push_back(const TemplateArgument& Arg) { 245 switch (Arg.getKind()) { 246 default: break; 247 case TemplateArgument::Type: 248 assert(Arg.getAsType()->isCanonical() && "Type must be canonical!"); 249 break; 250 } 251 |
252 if (!isAddingFromParameterPack()) { 253 // Add begin and end indicies. 254 Indices.push_back(Args.size()); 255 Indices.push_back(Args.size()); 256 } 257 |
|
249 Args.push_back(Arg); 250} 251 | 258 Args.push_back(Arg); 259} 260 |
261void TemplateArgumentListBuilder::BeginParameterPack() { 262 assert(!isAddingFromParameterPack() && "Already adding to parameter pack!"); 263 264 Indices.push_back(Args.size()); 265} 266 267void TemplateArgumentListBuilder::EndParameterPack() { 268 assert(isAddingFromParameterPack() && "Not adding to parameter pack!"); 269 270 Indices.push_back(Args.size()); 271} 272 |
|
252//===----------------------------------------------------------------------===// 253// TemplateArgumentList Implementation 254//===----------------------------------------------------------------------===// 255TemplateArgumentList::TemplateArgumentList(ASTContext &Context, 256 TemplateArgumentListBuilder &Builder, 257 bool CopyArgs, bool FlattenArgs) 258 : NumArguments(Builder.flatSize()) { 259 if (!CopyArgs) { --- 75 unchanged lines hidden --- | 273//===----------------------------------------------------------------------===// 274// TemplateArgumentList Implementation 275//===----------------------------------------------------------------------===// 276TemplateArgumentList::TemplateArgumentList(ASTContext &Context, 277 TemplateArgumentListBuilder &Builder, 278 bool CopyArgs, bool FlattenArgs) 279 : NumArguments(Builder.flatSize()) { 280 if (!CopyArgs) { --- 75 unchanged lines hidden --- |