diff options
author | James Y Knight <jyknight@google.com> | 2015-12-29 18:15:14 +0000 |
---|---|---|
committer | James Y Knight <jyknight@google.com> | 2015-12-29 18:15:14 +0000 |
commit | e7d82283cd59e334aea02140dacd7c3d518b48bf (patch) | |
tree | 78d63479e07a6d27a1aceaa9e6e02bbea37637dc /clang/lib/AST/TemplateBase.cpp | |
parent | 59309cc090a01866bc1ed920e8ef2129a2ef2a57 (diff) | |
download | bcm5719-llvm-e7d82283cd59e334aea02140dacd7c3d518b48bf.tar.gz bcm5719-llvm-e7d82283cd59e334aea02140dacd7c3d518b48bf.zip |
[TrailingObjects] Convert AST classes that had a ASTTemplateKWAndArgsInfo.
So, also:
- Moved the TemplateArgumentLoc array out of the
ASTTemplateKWAndArgsInfo class (making it a simple fixed-size object),
to avoid needing to have a variable-length object as part of a
variable-length object. Now the objects that have a
ASTTemplateKWAndArgsInfo also have some TemplateArgumentLoc objects
appended directly.
- Removed some internal-use accessors which became simply a wrapper on
getTrailingObjects.
- Moved MemberNameQualifier out of the MemberExpr class, renamed it
MemberExprNameQualifier, because the template can't
refer to a class nested within the class it's defining.
llvm-svn: 256570
Diffstat (limited to 'clang/lib/AST/TemplateBase.cpp')
-rw-r--r-- | clang/lib/AST/TemplateBase.cpp | 22 |
1 files changed, 9 insertions, 13 deletions
diff --git a/clang/lib/AST/TemplateBase.cpp b/clang/lib/AST/TemplateBase.cpp index c389a094f3b..e9edb0df66d 100644 --- a/clang/lib/AST/TemplateBase.cpp +++ b/clang/lib/AST/TemplateBase.cpp @@ -537,15 +537,15 @@ ASTTemplateArgumentListInfo::ASTTemplateArgumentListInfo( } void ASTTemplateKWAndArgsInfo::initializeFrom( - SourceLocation TemplateKWLoc, const TemplateArgumentListInfo &Info) { + SourceLocation TemplateKWLoc, const TemplateArgumentListInfo &Info, + TemplateArgumentLoc *OutArgArray) { this->TemplateKWLoc = TemplateKWLoc; LAngleLoc = Info.getLAngleLoc(); RAngleLoc = Info.getRAngleLoc(); NumTemplateArgs = Info.size(); - TemplateArgumentLoc *ArgBuffer = getTemplateArgs(); for (unsigned i = 0; i != NumTemplateArgs; ++i) - new (&ArgBuffer[i]) TemplateArgumentLoc(Info[i]); + new (&OutArgArray[i]) TemplateArgumentLoc(Info[i]); } void ASTTemplateKWAndArgsInfo::initializeFrom(SourceLocation TemplateKWLoc) { @@ -558,14 +558,13 @@ void ASTTemplateKWAndArgsInfo::initializeFrom(SourceLocation TemplateKWLoc) { void ASTTemplateKWAndArgsInfo::initializeFrom( SourceLocation TemplateKWLoc, const TemplateArgumentListInfo &Info, - bool &Dependent, bool &InstantiationDependent, - bool &ContainsUnexpandedParameterPack) { + TemplateArgumentLoc *OutArgArray, bool &Dependent, + bool &InstantiationDependent, bool &ContainsUnexpandedParameterPack) { this->TemplateKWLoc = TemplateKWLoc; LAngleLoc = Info.getLAngleLoc(); RAngleLoc = Info.getRAngleLoc(); NumTemplateArgs = Info.size(); - TemplateArgumentLoc *ArgBuffer = getTemplateArgs(); for (unsigned i = 0; i != NumTemplateArgs; ++i) { Dependent = Dependent || Info[i].getArgument().isDependent(); InstantiationDependent = InstantiationDependent || @@ -574,17 +573,14 @@ void ASTTemplateKWAndArgsInfo::initializeFrom( ContainsUnexpandedParameterPack || Info[i].getArgument().containsUnexpandedParameterPack(); - new (&ArgBuffer[i]) TemplateArgumentLoc(Info[i]); + new (&OutArgArray[i]) TemplateArgumentLoc(Info[i]); } } -void ASTTemplateKWAndArgsInfo::copyInto(TemplateArgumentListInfo &Info) const { +void ASTTemplateKWAndArgsInfo::copyInto(const TemplateArgumentLoc *ArgArray, + TemplateArgumentListInfo &Info) const { Info.setLAngleLoc(LAngleLoc); Info.setRAngleLoc(RAngleLoc); for (unsigned I = 0; I != NumTemplateArgs; ++I) - Info.addArgument(getTemplateArgs()[I]); -} - -std::size_t ASTTemplateKWAndArgsInfo::sizeFor(unsigned NumTemplateArgs) { - return totalSizeToAlloc<TemplateArgumentLoc>(NumTemplateArgs); + Info.addArgument(ArgArray[I]); } |