[cfe-commits] r127012 - /cfe/trunk/lib/AST/DeclTemplate.cpp
Douglas Gregor
dgregor at apple.com
Fri Mar 4 10:32:38 PST 2011
Author: dgregor
Date: Fri Mar 4 12:32:38 2011
New Revision: 127012
URL: http://llvm.org/viewvc/llvm-project?rev=127012&view=rev
Log:
*Recursively* set the context of a template parameter, so that we also
capture the template parameters of template template parameters.
Modified:
cfe/trunk/lib/AST/DeclTemplate.cpp
Modified: cfe/trunk/lib/AST/DeclTemplate.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/DeclTemplate.cpp?rev=127012&r1=127011&r2=127012&view=diff
==============================================================================
--- cfe/trunk/lib/AST/DeclTemplate.cpp (original)
+++ cfe/trunk/lib/AST/DeclTemplate.cpp Fri Mar 4 12:32:38 2011
@@ -95,6 +95,18 @@
return cast<TemplateTemplateParmDecl>(FirstParm)->getDepth();
}
+static void AdoptTemplateParameterList(TemplateParameterList *Params,
+ DeclContext *Owner) {
+ for (TemplateParameterList::iterator P = Params->begin(),
+ PEnd = Params->end();
+ P != PEnd; ++P) {
+ (*P)->setDeclContext(Owner);
+
+ if (TemplateTemplateParmDecl *TTP = dyn_cast<TemplateTemplateParmDecl>(*P))
+ AdoptTemplateParameterList(TTP->getTemplateParameters(), Owner);
+ }
+}
+
//===----------------------------------------------------------------------===//
// RedeclarableTemplateDecl Implementation
//===----------------------------------------------------------------------===//
@@ -165,12 +177,7 @@
DeclarationName Name,
TemplateParameterList *Params,
NamedDecl *Decl) {
- // Take ownership of the template parameters.
- for (TemplateParameterList::iterator P = Params->begin(),
- PEnd = Params->end();
- P != PEnd; ++P)
- (*P)->setDeclContext(cast<DeclContext>(Decl));
-
+ AdoptTemplateParameterList(Params, cast<DeclContext>(Decl));
return new (C) FunctionTemplateDecl(DC, L, Name, Params, Decl);
}
@@ -207,12 +214,7 @@
TemplateParameterList *Params,
NamedDecl *Decl,
ClassTemplateDecl *PrevDecl) {
- // Take ownership of the template parameters.
- for (TemplateParameterList::iterator P = Params->begin(),
- PEnd = Params->end();
- P != PEnd; ++P)
- (*P)->setDeclContext(cast<DeclContext>(Decl));
-
+ AdoptTemplateParameterList(Params, cast<DeclContext>(Decl));
ClassTemplateDecl *New = new (C) ClassTemplateDecl(DC, L, Name, Params, Decl);
New->setPreviousDeclaration(PrevDecl);
return New;
@@ -633,11 +635,7 @@
NumArgsAsWritten(NumArgInfos), SequenceNumber(SequenceNumber),
InstantiatedFromMember(0, false)
{
- // Take ownership of the template parameters.
- for (TemplateParameterList::iterator P = Params->begin(),
- PEnd = Params->end();
- P != PEnd; ++P)
- (*P)->setDeclContext(this);
+ AdoptTemplateParameterList(Params, this);
}
ClassTemplatePartialSpecializationDecl *
More information about the cfe-commits
mailing list