diff options
author | Anders Carlsson <andersca@mac.com> | 2009-06-15 17:56:45 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2009-06-15 17:56:45 +0000 |
commit | 3b36b66a00b7d5bab71b486a54694f0ae397bddb (patch) | |
tree | 00e51ddb5b14b1d78cfefcedb3caca5f83034307 /lib/AST/DeclTemplate.cpp | |
parent | 37ad3d4e8b736882b9efdda1a528354313490558 (diff) |
More parameter pack work.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@73395 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/AST/DeclTemplate.cpp')
-rw-r--r-- | lib/AST/DeclTemplate.cpp | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/lib/AST/DeclTemplate.cpp b/lib/AST/DeclTemplate.cpp index d57a43040f..ea8dd0d3c0 100644 --- a/lib/AST/DeclTemplate.cpp +++ b/lib/AST/DeclTemplate.cpp @@ -265,25 +265,28 @@ void TemplateArgumentListBuilder::push_back(const TemplateArgument& Arg) { break; } - if (!isAddingFromParameterPack()) { - // Add begin and end indicies. - Indices.push_back(Args.size()); - Indices.push_back(Args.size()); - } - - Args.push_back(Arg); + FlatArgs.push_back(Arg); + + if (!isAddingFromParameterPack()) + StructuredArgs.push_back(Arg); } void TemplateArgumentListBuilder::BeginParameterPack() { assert(!isAddingFromParameterPack() && "Already adding to parameter pack!"); - - Indices.push_back(Args.size()); + + PackBeginIndex = FlatArgs.size(); } void TemplateArgumentListBuilder::EndParameterPack() { assert(isAddingFromParameterPack() && "Not adding to parameter pack!"); + + unsigned NumArgs = FlatArgs.size() - PackBeginIndex; + TemplateArgument *Args = NumArgs ? &FlatArgs[PackBeginIndex] : 0; + + StructuredArgs.push_back(TemplateArgument(SourceLocation(), Args, NumArgs, + /*CopyArgs=*/false)); - Indices.push_back(Args.size()); + PackBeginIndex = std::numeric_limits<unsigned>::max(); } //===----------------------------------------------------------------------===// |