]> granicus.if.org Git - clang/commitdiff
Implemented serialization of TagTypes.
authorTed Kremenek <kremenek@apple.com>
Wed, 14 Nov 2007 00:03:56 +0000 (00:03 +0000)
committerTed Kremenek <kremenek@apple.com>
Wed, 14 Nov 2007 00:03:56 +0000 (00:03 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44090 91177308-0d34-0410-b5e6-96231b3b80d8

AST/TypeSerialization.cpp
include/clang/AST/Type.h

index bef662e254b4f914c5911e8744017d0205a032a6..cf2ae47f403c822a5b1bcd1030d7e5ec7b300133 100644 (file)
@@ -76,7 +76,11 @@ void Type::Create(ASTContext& Context, unsigned i, Deserializer& D) {
       
     case Type::Pointer:
       D.RegisterPtr(PtrID,PointerType::CreateImpl(Context,D));
-      break;      
+      break;
+      
+    case Type::Tagged:
+      D.RegisterPtr(PtrID,TagType::CreateImpl(Context,D));
+      break;
   }
 }
 
@@ -130,3 +134,17 @@ void PointerType::EmitImpl(Serializer& S) const {
 Type* PointerType::CreateImpl(ASTContext& Context, Deserializer& D) {
   return Context.getPointerType(QualType::ReadVal(D)).getTypePtr();
 }
+
+//===----------------------------------------------------------------------===//
+// TagType
+//===----------------------------------------------------------------------===//
+
+void TagType::EmitImpl(Serializer& S) const {
+  S.EmitPtr(Decl);
+}
+
+Type* TagType::CreateImpl(ASTContext& Context, Deserializer& D) {
+  TagType* T = cast<TagType>(Context.getTagDeclType(NULL).getTypePtr());
+  D.ReadPtr(T->Decl); // May be backpatched.  
+  return T;
+}
index 3a1b187e544a23df9f243b9c947efbd5521b0125..430474484b0d5c58835fae5332f0ee0ad23506e4 100644 (file)
@@ -865,6 +865,11 @@ public:
   
   static bool classof(const Type *T) { return T->getTypeClass() == Tagged; }
   static bool classof(const TagType *) { return true; }
+  
+protected:  
+  virtual void EmitImpl(llvm::Serializer& S) const;
+  static Type* CreateImpl(ASTContext& Context, llvm::Deserializer& D);
+  friend class Type;
 };
 
 class ObjcInterfaceType : public Type {