[cfe-commits] r43648 - in /cfe/trunk: AST/DeclSerialization.cpp include/clang/AST/Decl.h

Ted Kremenek kremenek at apple.com
Fri Nov 2 11:05:11 PDT 2007


Author: kremenek
Date: Fri Nov  2 13:05:11 2007
New Revision: 43648

URL: http://llvm.org/viewvc/llvm-project?rev=43648&view=rev
Log:
Added most of the boilerplate code for Decl serialization.  Still a few
key functions to implement.

Modified:
    cfe/trunk/AST/DeclSerialization.cpp
    cfe/trunk/include/clang/AST/Decl.h

Modified: cfe/trunk/AST/DeclSerialization.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/AST/DeclSerialization.cpp?rev=43648&r1=43647&r2=43648&view=diff

==============================================================================
--- cfe/trunk/AST/DeclSerialization.cpp (original)
+++ cfe/trunk/AST/DeclSerialization.cpp Fri Nov  2 13:05:11 2007
@@ -26,3 +26,120 @@
   assert ("FIXME: not implemented.");
   return NULL;
 }
+
+void NamedDecl::InternalEmit(llvm::Serializer& S) const {
+  S.EmitPtr(Identifier);
+}
+
+void NamedDecl::InternalRead(llvm::Deserializer& D) {
+  D.ReadPtr(Identifier);
+}
+
+void ScopedDecl::InternalEmit(llvm::Serializer& S) const {
+  NamedDecl::InternalEmit(S);
+  S.EmitPtr(Next);
+  S.EmitOwnedPtr<Decl>(NextDeclarator);  
+}
+
+void ScopedDecl::InternalRead(llvm::Deserializer& D) {
+  NamedDecl::InternalRead(D);
+  D.ReadPtr(Next);
+  NextDeclarator = cast<ScopedDecl>(D.ReadOwnedPtr<Decl>());
+}
+
+void ValueDecl::InternalEmit(llvm::Serializer& S) const {
+  S.Emit(DeclType);
+  ScopedDecl::InternalEmit(S);
+}
+
+void ValueDecl::InternalRead(llvm::Deserializer& D) {
+  D.Read(DeclType);
+  ScopedDecl::InternalRead(D);
+}
+
+void VarDecl::InternalEmit(llvm::Serializer& S) const {
+  S.EmitInt(SClass);
+  S.EmitInt(objcDeclQualifier);
+  VarDecl::InternalEmit(S);
+  S.EmitOwnedPtr(Init);
+}
+
+void VarDecl::InternalRead(llvm::Deserializer& D) {
+  SClass = D.ReadInt();
+  objcDeclQualifier = static_cast<ObjcDeclQualifier>(D.ReadInt());
+  VarDecl::InternalRead(D);
+  D.ReadOwnedPtr(Init);
+}
+
+
+void BlockVarDecl::Emit(llvm::Serializer& S) const {
+  S.Emit(getLocation());  
+  VarDecl::InternalEmit(S);  
+}
+
+BlockVarDecl* BlockVarDecl::Materialize(llvm::Deserializer& D) {
+  SourceLocation L = SourceLocation::ReadVal(D);
+  BlockVarDecl* decl = new BlockVarDecl(L,NULL,QualType(),None,NULL);
+  decl->VarDecl::InternalRead(D);
+  return decl;
+}
+
+void FileVarDecl::Emit(llvm::Serializer& S) const {
+  S.Emit(getLocation());  
+  VarDecl::InternalEmit(S);  
+}
+
+FileVarDecl* FileVarDecl::Materialize(llvm::Deserializer& D) {
+  SourceLocation L = SourceLocation::ReadVal(D);
+  FileVarDecl* decl = new FileVarDecl(L,NULL,QualType(),None,NULL);
+  decl->VarDecl::InternalRead(D);
+  return decl;
+}
+
+void ParmVarDecl::Emit(llvm::Serializer& S) const {
+  S.Emit(getLocation());  
+  VarDecl::InternalEmit(S);  
+}
+
+ParmVarDecl* ParmVarDecl::Materialize(llvm::Deserializer& D) {
+  SourceLocation L = SourceLocation::ReadVal(D);
+  ParmVarDecl* decl = new ParmVarDecl(L,NULL,QualType(),None,NULL);
+  decl->VarDecl::InternalRead(D);
+  return decl;
+}
+
+void FunctionDecl::Emit(llvm::Serializer& S) const {
+  S.Emit(getLocation());
+  S.EmitInt(SClass);
+  S.EmitBool(IsInline);
+  
+  ValueDecl::InternalEmit(S);
+
+  unsigned NumParams = getNumParams();
+  S.EmitInt(NumParams);
+  
+  for (unsigned i = 0 ; i < NumParams; ++i)
+    S.EmitOwnedPtr(ParamInfo[i]);
+  
+  S.EmitOwnedPtr(Body);
+}
+
+FunctionDecl* FunctionDecl::Materialize(llvm::Deserializer& D) {
+  SourceLocation L = SourceLocation::ReadVal(D);
+  StorageClass SClass = static_cast<StorageClass>(D.ReadInt());
+  bool IsInline = D.ReadBool();
+
+  FunctionDecl* decl = new FunctionDecl(L,NULL,QualType(),SClass,IsInline);
+  
+  decl->ValueDecl::InternalRead(D);
+
+  unsigned NumParams = D.ReadInt();
+  decl->ParamInfo = NumParams ? new ParmVarDecl*[NumParams] : NULL;
+  
+  for (unsigned i = 0 ; i < NumParams; ++i)
+    D.ReadOwnedPtr(decl->ParamInfo[i]);
+
+  D.ReadOwnedPtr(decl->Body);
+  
+  return decl;
+}

Modified: cfe/trunk/include/clang/AST/Decl.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/Decl.h?rev=43648&r1=43647&r2=43648&view=diff

==============================================================================
--- cfe/trunk/include/clang/AST/Decl.h (original)
+++ cfe/trunk/include/clang/AST/Decl.h Fri Nov  2 13:05:11 2007
@@ -185,16 +185,10 @@
     return D->getKind() >= NamedFirst && D->getKind() <= NamedLast;
   }
   static bool classof(const NamedDecl *D) { return true; }
-  
-  /// Emit - Serialize this NamedDecl to Bitcode.
-  void Emit(llvm::Serializer& S) const {
-    static_cast<const Decl*>(this)->Emit(S);
-  }
-  
-  /// Materialize - Deserialize a ScopedDecl from Bitcode.
-  static inline NamedDecl* Materialize(llvm::Deserializer& D) {
-    return cast<NamedDecl>(Decl::Materialize(D));
-  } 
+    
+protected:
+  void InternalEmit(llvm::Serializer& S) const;
+  void InternalRead(llvm::Deserializer& D);  
 };
 
 /// ScopedDecl - Represent lexically scoped names, used for all ValueDecl's
@@ -229,16 +223,10 @@
     return D->getKind() >= ScopedFirst && D->getKind() <= ScopedLast;
   }
   static bool classof(const ScopedDecl *D) { return true; }
-  
-  /// Emit - Serialize this ScopedDecl to Bitcode.
-  void Emit(llvm::Serializer& S) const {
-    static_cast<const Decl*>(this)->Emit(S);
-  }
-
-  /// Materialize - Deserialize a ScopedDecl from Bitcode.
-  static inline ScopedDecl* Materialize(llvm::Deserializer& D) {
-    return cast<ScopedDecl>(Decl::Materialize(D));
-  }  
+    
+protected:
+  void InternalEmit(llvm::Serializer& S) const;
+  void InternalRead(llvm::Deserializer& D);  
 };
 
 /// ValueDecl - Represent the declaration of a variable (in which case it is 
@@ -259,16 +247,10 @@
     return D->getKind() >= ValueFirst && D->getKind() <= ValueLast;
   }
   static bool classof(const ValueDecl *D) { return true; }
-  
-  /// Emit - Serialize this ValueDecl to Bitcode.
-  void Emit(llvm::Serializer& S) const {
-    static_cast<const Decl*>(this)->Emit(S);
-  }
-  
-  /// Materialize - Deserialize a ValueDecl from Bitcode.
-  static inline ValueDecl* Materialize(llvm::Deserializer& D) {
-    return cast<ValueDecl>(Decl::Materialize(D));
-  }
+    
+protected:
+  void InternalEmit(llvm::Serializer& S) const;
+  void InternalRead(llvm::Deserializer& D); 
 };
 
 /// VarDecl - An instance of this class is created to represent a variable
@@ -339,16 +321,9 @@
   
   friend class StmtIteratorBase;
   
-public:
-  /// Emit - Serialize this VarDecl to Bitcode.
-  void Emit(llvm::Serializer& S) const { 
-    static_cast<const Decl*>(this)->Emit(S);
-  }
-  
-  /// Materialize - Deserialize a VarDecl from Bitcode.
-  static inline VarDecl* Materialize(llvm::Deserializer& D) {
-    return cast<VarDecl>(Decl::Materialize(D));
-  }  
+protected:
+  void InternalEmit(llvm::Serializer& S) const;
+  void InternalRead(llvm::Deserializer& D); 
 };
 
 /// BlockVarDecl - Represent a local variable declaration.





More information about the cfe-commits mailing list