]> granicus.if.org Git - clang/commitdiff
Misc. serialization changes to ASTContext and Decls. Serialization
authorTed Kremenek <kremenek@apple.com>
Tue, 6 Nov 2007 19:51:47 +0000 (19:51 +0000)
committerTed Kremenek <kremenek@apple.com>
Tue, 6 Nov 2007 19:51:47 +0000 (19:51 +0000)
for ASTContext is still rapidly evolving.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@43774 91177308-0d34-0410-b5e6-96231b3b80d8

AST/ASTContext.cpp
AST/DeclSerialization.cpp

index 2a12cdf7a6545c2758ae74f7ed397b88c11aa498..982ef05a06653a667b0f886870340b9f08cf6af2 100644 (file)
@@ -1425,7 +1425,7 @@ void ASTContext::Emit(llvm::Serializer& S) const {
     }
   }
   
-  assert (PointerTypes.size() >= 1);
+  assert (PointerTypes.size() >= 1);  
   S.EmitInt(PointerTypes.size() - 1);
   
   if (PointerTypes.size() > 1) {
@@ -1450,13 +1450,13 @@ void ASTContext::Emit(llvm::Serializer& S) const {
   // 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 @@ ASTContext* ASTContext::Materialize(llvm::Deserializer& D) {
   // 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;
index 9ceb6adaef5d3ba18584e6c0ef715acb25251d49..9600e30380a7160aff2098d2c73140da5281ce72 100644 (file)
@@ -49,8 +49,28 @@ void Decl::Emit(llvm::Serializer& S) const {
 }
 
 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::InternalEmit(llvm::Serializer& S) const {
 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::InternalEmit(llvm::Serializer& S) const {
 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 @@ FunctionDecl* FunctionDecl::Materialize(llvm::Deserializer& D) {
 
 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;
 }