diff options
author | Douglas Gregor <dgregor@apple.com> | 2012-02-14 17:54:36 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2012-02-14 17:54:36 +0000 |
commit | 99ae806aff77f7e6487eb9fb4857e2ac244010b5 (patch) | |
tree | 69f5ac5a5c0583f358b47cf2447827f19b0dd62b /clang/lib/Serialization/ASTWriter.cpp | |
parent | b1ba885b4945a701e5a70b3190adb6b8c9a24746 (diff) | |
download | bcm5719-llvm-99ae806aff77f7e6487eb9fb4857e2ac244010b5.tar.gz bcm5719-llvm-99ae806aff77f7e6487eb9fb4857e2ac244010b5.zip |
Implement AST (de-)serialization for lambda expressions.
llvm-svn: 150491
Diffstat (limited to 'clang/lib/Serialization/ASTWriter.cpp')
-rw-r--r-- | clang/lib/Serialization/ASTWriter.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/clang/lib/Serialization/ASTWriter.cpp b/clang/lib/Serialization/ASTWriter.cpp index 7a0fed720f8..48b14e3bd7f 100644 --- a/clang/lib/Serialization/ASTWriter.cpp +++ b/clang/lib/Serialization/ASTWriter.cpp @@ -4274,6 +4274,7 @@ void ASTWriter::AddCXXCtorInitializers( void ASTWriter::AddCXXDefinitionData(const CXXRecordDecl *D, RecordDataImpl &Record) { assert(D->DefinitionData); struct CXXRecordDecl::DefinitionData &Data = *D->DefinitionData; + Record.push_back(Data.IsLambda); Record.push_back(Data.UserDeclaredConstructor); Record.push_back(Data.UserDeclaredCopyConstructor); Record.push_back(Data.UserDeclaredMoveConstructor); @@ -4325,6 +4326,24 @@ void ASTWriter::AddCXXDefinitionData(const CXXRecordDecl *D, RecordDataImpl &Rec AddUnresolvedSet(Data.VisibleConversions, Record); // Data.Definition is the owning decl, no need to write it. AddDeclRef(Data.FirstFriend, Record); + + // Add lambda-specific data. + if (Data.IsLambda) { + CXXRecordDecl::LambdaDefinitionData &Lambda = D->getLambdaData(); + Record.push_back(Lambda.NumCaptures); + Record.push_back(Lambda.NumExplicitCaptures); + for (unsigned I = 0, N = Lambda.NumCaptures; I != N; ++I) { + LambdaExpr::Capture &Capture = Lambda.Captures[I]; + AddSourceLocation(Capture.getLocation(), Record); + Record.push_back(Capture.isImplicit()); + Record.push_back(Capture.getCaptureKind()); // FIXME: stable! + VarDecl *Var = Capture.capturesVariable()? Capture.getCapturedVar() : 0; + AddDeclRef(Var, Record); + AddSourceLocation(Capture.isPackExpansion()? Capture.getEllipsisLoc() + : SourceLocation(), + Record); + } + } } void ASTWriter::ReaderInitialized(ASTReader *Reader) { |