Misc. serialization changes to ASTContext and Decls.  Serialization
for ASTContext is still rapidly evolving.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@43774 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/AST/ASTContext.cpp b/AST/ASTContext.cpp
index 2a12cdf..982ef05 100644
--- a/AST/ASTContext.cpp
+++ b/AST/ASTContext.cpp
@@ -1425,7 +1425,7 @@
     }
   }
   
-  assert (PointerTypes.size() >= 1);
+  assert (PointerTypes.size() >= 1);  
   S.EmitInt(PointerTypes.size() - 1);
   
   if (PointerTypes.size() > 1) {
@@ -1450,13 +1450,13 @@
   // FIXME: EmitSet(ObjcQualifiedInterfaceTypes,S);
   
   S.Emit(BuiltinVaListType);
-  S.Emit(ObjcIdType);
-  S.EmitPtr(IdStructType);
-  S.Emit(ObjcProtoType);
-  S.EmitPtr(ProtoStructType);
-  S.Emit(ObjcClassType);
-  S.EmitPtr(ClassStructType);
-  S.Emit(ObjcConstantStringType);
+// FIXME:  S.Emit(ObjcIdType);
+// FIXME:  S.EmitPtr(IdStructType);
+// FIXME:  S.Emit(ObjcProtoType);
+ // FIXME:  S.EmitPtr(ProtoStructType);
+ // FIXME: S.Emit(ObjcClassType);
+// FIXME:  S.EmitPtr(ClassStructType);
+// FIXME:  S.Emit(ObjcConstantStringType);
   // FIXME: S.EmitOwnedPtr(CFConstantStringTypeDecl);
 }
 
@@ -1505,13 +1505,13 @@
   // ReadSet(A->ObjcQualifiedInterfaceTypes,D);
   
   D.Read(A->BuiltinVaListType);
-  D.Read(A->ObjcIdType);
-  D.ReadPtr(A->IdStructType);
-  D.Read(A->ObjcProtoType);
-  D.ReadPtr(A->ProtoStructType);
-  D.Read(A->ObjcClassType);
-  D.ReadPtr(A->ClassStructType);
-  D.Read(A->ObjcConstantStringType);
+// FIXME:  D.Read(A->ObjcIdType);
+// FIXME:  D.ReadPtr(A->IdStructType);
+// FIXME:  D.Read(A->ObjcProtoType);
+// FIXME:  D.ReadPtr(A->ProtoStructType);
+// FIXME:  D.Read(A->ObjcClassType);
+// FIXME:  D.ReadPtr(A->ClassStructType);
+// FIXME:  D.Read(A->ObjcConstantStringType);
   // FIXME: A->CFConstantStringTypeDecl = D.ReadOwnedPtr<RecordDecl>();
   
   return A;
diff --git a/AST/DeclSerialization.cpp b/AST/DeclSerialization.cpp
index 9ceb6ad..9600e30 100644
--- a/AST/DeclSerialization.cpp
+++ b/AST/DeclSerialization.cpp
@@ -49,8 +49,28 @@
 }
 
 Decl* Decl::Materialize(llvm::Deserializer& D) {
-  assert (false && "FIXME: not implemented.");
-  return NULL;
+  Kind k = static_cast<Kind>(D.ReadInt());
+  
+  switch (k) {
+    default:
+      assert (false && "Not implemented.");
+      break;
+      
+    case BlockVar:
+      return BlockVarDecl::Materialize(D);
+      
+    case FileVar:
+      return FileVarDecl::Materialize(D);
+      
+    case ParmVar:
+      return ParmVarDecl::Materialize(D);
+      
+    case Function:
+      return FunctionDecl::Materialize(D);
+      
+    case Typedef:
+      return TypedefDecl::Materialize(D);
+  }
 }
 
 void NamedDecl::InternalEmit(llvm::Serializer& S) const {
@@ -70,7 +90,7 @@
 void ScopedDecl::InternalRead(llvm::Deserializer& D) {
   NamedDecl::InternalRead(D);
   D.ReadPtr(Next);
-  NextDeclarator = cast<ScopedDecl>(D.ReadOwnedPtr<Decl>());
+  NextDeclarator = cast_or_null<ScopedDecl>(D.ReadOwnedPtr<Decl>());
 }
 
 void ValueDecl::InternalEmit(llvm::Serializer& S) const {
@@ -93,7 +113,7 @@
 void VarDecl::InternalRead(llvm::Deserializer& D) {
   SClass = D.ReadInt();
   objcDeclQualifier = static_cast<ObjcDeclQualifier>(D.ReadInt());
-  VarDecl::InternalRead(D);
+  ValueDecl::InternalRead(D);
   D.ReadOwnedPtr(Init);
 }
 
@@ -172,14 +192,14 @@
 
 void TypedefDecl::Emit(llvm::Serializer& S) const {
   S.Emit(getLocation());
+  S.Emit(UnderlyingType);
   InternalEmit(S);
-  S.Emit(UnderlyingType);  
 }
 
 TypedefDecl* TypedefDecl::Materialize(llvm::Deserializer& D) {
   SourceLocation L = SourceLocation::ReadVal(D);
   TypedefDecl* decl = new TypedefDecl(L,NULL,QualType(),NULL);
-  decl->InternalRead(D);
   D.Read(decl->UnderlyingType);
+  decl->InternalRead(D);
   return decl;
 }