case Type::Pointer:
D.RegisterPtr(PtrID,PointerType::CreateImpl(Context,D));
- break;
+ break;
+
+ case Type::Tagged:
+ D.RegisterPtr(PtrID,TagType::CreateImpl(Context,D));
+ break;
}
}
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;
+}
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 {