Deleted Added
full compact
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 ---