From: Zhongxing Xu Date: Wed, 24 Dec 2008 07:22:26 +0000 (+0000) Subject: Add serialization support for TypeOfType. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=501c7252bd4752bc542630446494eb15b27f1f88;p=clang Add serialization support for TypeOfType. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@61417 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/AST/Type.h b/include/clang/AST/Type.h index e272dc956d..5a6a3c361c 100644 --- a/include/clang/AST/Type.h +++ b/include/clang/AST/Type.h @@ -1183,6 +1183,11 @@ public: static bool classof(const Type *T) { return T->getTypeClass() == TypeOfTyp; } static bool classof(const TypeOfType *) { return true; } + +protected: + virtual void EmitImpl(llvm::Serializer& S) const; + static Type* CreateImpl(ASTContext& Context, llvm::Deserializer& D); + friend class Type; }; class TagType : public Type { diff --git a/lib/AST/TypeSerialization.cpp b/lib/AST/TypeSerialization.cpp index 064b5b8dfe..42569da400 100644 --- a/lib/AST/TypeSerialization.cpp +++ b/lib/AST/TypeSerialization.cpp @@ -113,7 +113,11 @@ void Type::Create(ASTContext& Context, unsigned i, Deserializer& D) { case Type::TypeOfExp: D.RegisterPtr(PtrID, TypeOfExpr::CreateImpl(Context, D)); break; - + + case Type::TypeOfTyp: + D.RegisterPtr(PtrID, TypeOfType::CreateImpl(Context, D)); + break; + case Type::TemplateTypeParm: D.RegisterPtr(PtrID,TemplateTypeParmType::CreateImpl(Context, D)); break; @@ -282,6 +286,7 @@ Type* TypedefType::CreateImpl(ASTContext& Context, Deserializer& D) { //===----------------------------------------------------------------------===// // TypeOfExpr //===----------------------------------------------------------------------===// + void TypeOfExpr::EmitImpl(llvm::Serializer& S) const { S.EmitOwnedPtr(TOExpr); } @@ -297,6 +302,26 @@ Type* TypeOfExpr::CreateImpl(ASTContext& Context, Deserializer& D) { return T; } + +//===----------------------------------------------------------------------===// +// TypeOfType +//===----------------------------------------------------------------------===// + +void TypeOfType::EmitImpl(llvm::Serializer& S) const { + S.Emit(TOType); +} + +Type* TypeOfType::CreateImpl(ASTContext& Context, Deserializer& D) { + QualType TOType = QualType::ReadVal(D); + + std::vector& Types = + const_cast&>(Context.getTypes()); + + TypeOfType* T = new TypeOfType(TOType, Context.getCanonicalType(TOType)); + Types.push_back(T); + + return T; +} //===----------------------------------------------------------------------===// // TemplateTypeParmType