From a225400804cc53dd9cf6b28cf0e8e7f103a7522f Mon Sep 17 00:00:00 2001 From: Ted Kremenek Date: Wed, 14 Nov 2007 00:03:56 +0000 Subject: [PATCH] Implemented serialization of TagTypes. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44090 91177308-0d34-0410-b5e6-96231b3b80d8 --- AST/TypeSerialization.cpp | 20 +++++++++++++++++++- include/clang/AST/Type.h | 5 +++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/AST/TypeSerialization.cpp b/AST/TypeSerialization.cpp index bef662e254..cf2ae47f40 100644 --- a/AST/TypeSerialization.cpp +++ b/AST/TypeSerialization.cpp @@ -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(Context.getTagDeclType(NULL).getTypePtr()); + D.ReadPtr(T->Decl); // May be backpatched. + return T; +} diff --git a/include/clang/AST/Type.h b/include/clang/AST/Type.h index 3a1b187e54..430474484b 100644 --- a/include/clang/AST/Type.h +++ b/include/clang/AST/Type.h @@ -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 { -- 2.50.1