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/Serialization | |
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/Serialization')
-rw-r--r-- | clang/lib/Serialization/ASTReaderStmt.cpp | 36 | ||||
-rw-r--r-- | clang/lib/Serialization/ASTWriterStmt.cpp | 43 |
2 files changed, 47 insertions, 32 deletions
diff --git a/clang/lib/Serialization/ASTReaderStmt.cpp b/clang/lib/Serialization/ASTReaderStmt.cpp index 109ef1fa9b2..84622cf8ef7 100644 --- a/clang/lib/Serialization/ASTReaderStmt.cpp +++ b/clang/lib/Serialization/ASTReaderStmt.cpp @@ -93,6 +93,7 @@ namespace clang { /// \brief Read and initialize a ExplicitTemplateArgumentList structure. void ReadTemplateKWAndArgsInfo(ASTTemplateKWAndArgsInfo &Args, + TemplateArgumentLoc *ArgsLocArray, unsigned NumTemplateArgs); /// \brief Read and initialize a ExplicitTemplateArgumentList structure. void ReadExplicitTemplateArgumentList(ASTTemplateArgumentListInfo &ArgList, @@ -105,9 +106,9 @@ namespace clang { }; } -void ASTStmtReader:: -ReadTemplateKWAndArgsInfo(ASTTemplateKWAndArgsInfo &Args, - unsigned NumTemplateArgs) { +void ASTStmtReader::ReadTemplateKWAndArgsInfo(ASTTemplateKWAndArgsInfo &Args, + TemplateArgumentLoc *ArgsLocArray, + unsigned NumTemplateArgs) { SourceLocation TemplateKWLoc = ReadSourceLocation(Record, Idx); TemplateArgumentListInfo ArgInfo; ArgInfo.setLAngleLoc(ReadSourceLocation(Record, Idx)); @@ -115,7 +116,7 @@ ReadTemplateKWAndArgsInfo(ASTTemplateKWAndArgsInfo &Args, for (unsigned i = 0; i != NumTemplateArgs; ++i) ArgInfo.addArgument( Reader.ReadTemplateArgumentLoc(F, Record, Idx)); - Args.initializeFrom(TemplateKWLoc, ArgInfo); + Args.initializeFrom(TemplateKWLoc, ArgInfo, ArgsLocArray); } void ASTStmtReader::VisitStmt(Stmt *S) { @@ -459,15 +460,17 @@ void ASTStmtReader::VisitDeclRefExpr(DeclRefExpr *E) { NumTemplateArgs = Record[Idx++]; if (E->hasQualifier()) - E->getInternalQualifierLoc() - = Reader.ReadNestedNameSpecifierLoc(F, Record, Idx); + new (E->getTrailingObjects<NestedNameSpecifierLoc>()) + NestedNameSpecifierLoc( + Reader.ReadNestedNameSpecifierLoc(F, Record, Idx)); if (E->hasFoundDecl()) - E->getInternalFoundDecl() = ReadDeclAs<NamedDecl>(Record, Idx); + *E->getTrailingObjects<NamedDecl *>() = ReadDeclAs<NamedDecl>(Record, Idx); if (E->hasTemplateKWAndArgsInfo()) - ReadTemplateKWAndArgsInfo(*E->getTemplateKWAndArgsInfo(), - NumTemplateArgs); + ReadTemplateKWAndArgsInfo( + *E->getTrailingObjects<ASTTemplateKWAndArgsInfo>(), + E->getTrailingObjects<TemplateArgumentLoc>(), NumTemplateArgs); E->setDecl(ReadDeclAs<ValueDecl>(Record, Idx)); E->setLocation(ReadSourceLocation(Record, Idx)); @@ -1453,8 +1456,10 @@ ASTStmtReader::VisitCXXDependentScopeMemberExpr(CXXDependentScopeMemberExpr *E){ VisitExpr(E); if (Record[Idx++]) // HasTemplateKWAndArgsInfo - ReadTemplateKWAndArgsInfo(*E->getTemplateKWAndArgsInfo(), - /*NumTemplateArgs=*/Record[Idx++]); + ReadTemplateKWAndArgsInfo( + *E->getTrailingObjects<ASTTemplateKWAndArgsInfo>(), + E->getTrailingObjects<TemplateArgumentLoc>(), + /*NumTemplateArgs=*/Record[Idx++]); E->Base = Reader.ReadSubExpr(); E->BaseType = Reader.readType(F, Record, Idx); @@ -1470,8 +1475,10 @@ ASTStmtReader::VisitDependentScopeDeclRefExpr(DependentScopeDeclRefExpr *E) { VisitExpr(E); if (Record[Idx++]) // HasTemplateKWAndArgsInfo - ReadTemplateKWAndArgsInfo(*E->getTemplateKWAndArgsInfo(), - /*NumTemplateArgs=*/Record[Idx++]); + ReadTemplateKWAndArgsInfo( + *E->getTrailingObjects<ASTTemplateKWAndArgsInfo>(), + E->getTrailingObjects<TemplateArgumentLoc>(), + /*NumTemplateArgs=*/Record[Idx++]); E->QualifierLoc = Reader.ReadNestedNameSpecifierLoc(F, Record, Idx); ReadDeclarationNameInfo(E->NameInfo, Record, Idx); @@ -1493,7 +1500,8 @@ void ASTStmtReader::VisitOverloadExpr(OverloadExpr *E) { VisitExpr(E); if (Record[Idx++]) // HasTemplateKWAndArgsInfo - ReadTemplateKWAndArgsInfo(*E->getTemplateKWAndArgsInfo(), + ReadTemplateKWAndArgsInfo(*E->getTrailingASTTemplateKWAndArgsInfo(), + E->getTrailingTemplateArgumentLoc(), /*NumTemplateArgs=*/Record[Idx++]); unsigned NumDecls = Record[Idx++]; diff --git a/clang/lib/Serialization/ASTWriterStmt.cpp b/clang/lib/Serialization/ASTWriterStmt.cpp index 8a4e9ab0176..849c6fa4ecf 100644 --- a/clang/lib/Serialization/ASTWriterStmt.cpp +++ b/clang/lib/Serialization/ASTWriterStmt.cpp @@ -40,7 +40,8 @@ namespace clang { ASTStmtWriter(ASTWriter &Writer, ASTWriter::RecordData &Record) : Writer(Writer), Record(Record) { } - void AddTemplateKWAndArgsInfo(const ASTTemplateKWAndArgsInfo &Args); + void AddTemplateKWAndArgsInfo(const ASTTemplateKWAndArgsInfo &ArgInfo, + const TemplateArgumentLoc *Args); void VisitStmt(Stmt *S); #define STMT(Type, Base) \ @@ -49,13 +50,13 @@ namespace clang { }; } -void ASTStmtWriter:: -AddTemplateKWAndArgsInfo(const ASTTemplateKWAndArgsInfo &Args) { - Writer.AddSourceLocation(Args.TemplateKWLoc, Record); - Writer.AddSourceLocation(Args.LAngleLoc, Record); - Writer.AddSourceLocation(Args.RAngleLoc, Record); - for (unsigned i=0; i != Args.NumTemplateArgs; ++i) - Writer.AddTemplateArgumentLoc(Args.getTemplateArgs()[i], Record); +void ASTStmtWriter::AddTemplateKWAndArgsInfo( + const ASTTemplateKWAndArgsInfo &ArgInfo, const TemplateArgumentLoc *Args) { + Writer.AddSourceLocation(ArgInfo.TemplateKWLoc, Record); + Writer.AddSourceLocation(ArgInfo.LAngleLoc, Record); + Writer.AddSourceLocation(ArgInfo.RAngleLoc, Record); + for (unsigned i = 0; i != ArgInfo.NumTemplateArgs; ++i) + Writer.AddTemplateArgumentLoc(Args[i], Record); } void ASTStmtWriter::VisitStmt(Stmt *S) { @@ -386,7 +387,8 @@ void ASTStmtWriter::VisitDeclRefExpr(DeclRefExpr *E) { Writer.AddDeclRef(E->getFoundDecl(), Record); if (E->hasTemplateKWAndArgsInfo()) - AddTemplateKWAndArgsInfo(*E->getTemplateKWAndArgsInfo()); + AddTemplateKWAndArgsInfo(*E->getTrailingObjects<ASTTemplateKWAndArgsInfo>(), + E->getTrailingObjects<TemplateArgumentLoc>()); Writer.AddDeclRef(E->getDecl(), Record); Writer.AddSourceLocation(E->getLocation(), Record); @@ -1440,9 +1442,11 @@ ASTStmtWriter::VisitCXXDependentScopeMemberExpr(CXXDependentScopeMemberExpr *E){ Record.push_back(E->HasTemplateKWAndArgsInfo); if (E->HasTemplateKWAndArgsInfo) { - const ASTTemplateKWAndArgsInfo &Args = *E->getTemplateKWAndArgsInfo(); - Record.push_back(Args.NumTemplateArgs); - AddTemplateKWAndArgsInfo(Args); + const ASTTemplateKWAndArgsInfo &ArgInfo = + *E->getTrailingObjects<ASTTemplateKWAndArgsInfo>(); + Record.push_back(ArgInfo.NumTemplateArgs); + AddTemplateKWAndArgsInfo(ArgInfo, + E->getTrailingObjects<TemplateArgumentLoc>()); } if (!E->isImplicitAccess()) @@ -1467,9 +1471,11 @@ ASTStmtWriter::VisitDependentScopeDeclRefExpr(DependentScopeDeclRefExpr *E) { Record.push_back(E->HasTemplateKWAndArgsInfo); if (E->HasTemplateKWAndArgsInfo) { - const ASTTemplateKWAndArgsInfo &Args = *E->getTemplateKWAndArgsInfo(); - Record.push_back(Args.NumTemplateArgs); - AddTemplateKWAndArgsInfo(Args); + const ASTTemplateKWAndArgsInfo &ArgInfo = + *E->getTrailingObjects<ASTTemplateKWAndArgsInfo>(); + Record.push_back(ArgInfo.NumTemplateArgs); + AddTemplateKWAndArgsInfo(ArgInfo, + E->getTrailingObjects<TemplateArgumentLoc>()); } Writer.AddNestedNameSpecifierLoc(E->getQualifierLoc(), Record); @@ -1498,9 +1504,10 @@ void ASTStmtWriter::VisitOverloadExpr(OverloadExpr *E) { Record.push_back(E->HasTemplateKWAndArgsInfo); if (E->HasTemplateKWAndArgsInfo) { - const ASTTemplateKWAndArgsInfo &Args = *E->getTemplateKWAndArgsInfo(); - Record.push_back(Args.NumTemplateArgs); - AddTemplateKWAndArgsInfo(Args); + const ASTTemplateKWAndArgsInfo &ArgInfo = + *E->getTrailingASTTemplateKWAndArgsInfo(); + Record.push_back(ArgInfo.NumTemplateArgs); + AddTemplateKWAndArgsInfo(ArgInfo, E->getTrailingTemplateArgumentLoc()); } Record.push_back(E->getNumDecls()); |