Refactoring.
- Pass around RecordDataImpl instead of the concrete RecordData so that any SmallVector can be used.
- Move ASTDeclWriter::WriteCXXDefinitionData to ASTWriter::AddCXXDefinitionData.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@117236 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Serialization/ASTWriterDecl.cpp b/lib/Serialization/ASTWriterDecl.cpp
index 4463ce9..4e479b3 100644
--- a/lib/Serialization/ASTWriterDecl.cpp
+++ b/lib/Serialization/ASTWriterDecl.cpp
@@ -34,7 +34,6 @@
     typedef ASTWriter::RecordData RecordData;
     RecordData &Record;
 
-    void WriteCXXDefinitionData(struct CXXRecordDecl::DefinitionData &Data);
   public:
     serialization::DeclCode Code;
     unsigned AbbrevToUse;
@@ -721,42 +720,6 @@
   Code = serialization::DECL_UNRESOLVED_USING_TYPENAME;
 }
 
-void ASTDeclWriter::WriteCXXDefinitionData(
-                                   struct CXXRecordDecl::DefinitionData &Data) {
-  Record.push_back(Data.UserDeclaredConstructor);
-  Record.push_back(Data.UserDeclaredCopyConstructor);
-  Record.push_back(Data.UserDeclaredCopyAssignment);
-  Record.push_back(Data.UserDeclaredDestructor);
-  Record.push_back(Data.Aggregate);
-  Record.push_back(Data.PlainOldData);
-  Record.push_back(Data.Empty);
-  Record.push_back(Data.Polymorphic);
-  Record.push_back(Data.Abstract);
-  Record.push_back(Data.HasTrivialConstructor);
-  Record.push_back(Data.HasTrivialCopyConstructor);
-  Record.push_back(Data.HasTrivialCopyAssignment);
-  Record.push_back(Data.HasTrivialDestructor);
-  Record.push_back(Data.ComputedVisibleConversions);
-  Record.push_back(Data.DeclaredDefaultConstructor);
-  Record.push_back(Data.DeclaredCopyConstructor);
-  Record.push_back(Data.DeclaredCopyAssignment);
-  Record.push_back(Data.DeclaredDestructor);
-
-  Record.push_back(Data.NumBases);
-  for (unsigned i = 0; i != Data.NumBases; ++i)
-    Writer.AddCXXBaseSpecifier(Data.Bases[i], Record);
-
-  // FIXME: Make VBases lazily computed when needed to avoid storing them.
-  Record.push_back(Data.NumVBases);
-  for (unsigned i = 0; i != Data.NumVBases; ++i)
-    Writer.AddCXXBaseSpecifier(Data.VBases[i], Record);
-
-  Writer.AddUnresolvedSet(Data.Conversions, Record);
-  Writer.AddUnresolvedSet(Data.VisibleConversions, Record);
-  // Data.Definition is the owning decl, no need to write it. 
-  Writer.AddDeclRef(Data.FirstFriend, Record);
-}
-
 void ASTDeclWriter::VisitCXXRecordDecl(CXXRecordDecl *D) {
   VisitRecordDecl(D);
 
@@ -764,10 +727,8 @@
   if (D->DefinitionData)
     DefinitionDecl = D->DefinitionData->Definition;
   Writer.AddDeclRef(DefinitionDecl, Record);
-  if (D == DefinitionDecl) {
-    assert(D->DefinitionData);
-    WriteCXXDefinitionData(*D->DefinitionData);
-  }
+  if (D == DefinitionDecl)
+    Writer.AddCXXDefinitionData(D, Record);
 
   enum {
     CXXRecNotTemplate = 0, CXXRecTemplate, CXXRecMemberSpecialization