From 164faf98f3a0cdab18053c23d245c65fe7a28b8a Mon Sep 17 00:00:00 2001 From: Ted Kremenek Date: Wed, 14 Nov 2007 00:38:50 +0000 Subject: [PATCH] Implemented serialization of FunctionTypeNoProto. llvm-svn: 44094 --- clang/AST/TypeSerialization.cpp | 24 ++++++++++++++++++++---- clang/include/clang/AST/Type.h | 5 +++++ 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/clang/AST/TypeSerialization.cpp b/clang/AST/TypeSerialization.cpp index 24ff9f34a07f..ba32abfb5dc7 100644 --- a/clang/AST/TypeSerialization.cpp +++ b/clang/AST/TypeSerialization.cpp @@ -73,6 +73,10 @@ void Type::Create(ASTContext& Context, unsigned i, Deserializer& D) { case Type::ConstantArray: D.RegisterPtr(PtrID,ConstantArrayType::CreateImpl(Context,D)); + case Type::FunctionNoProto: + D.RegisterPtr(PtrID,FunctionTypeNoProto::CreateImpl(Context,D)); + break; + case Type::FunctionProto: D.RegisterPtr(PtrID,FunctionTypeProto::CreateImpl(Context,D)); break; @@ -130,7 +134,7 @@ Type* ConstantArrayType::CreateImpl(ASTContext& Context, Deserializer& D) { } //===----------------------------------------------------------------------===// -// FunctionTypeProto +// FunctionTypeNoProto //===----------------------------------------------------------------------===// void FunctionTypeProto::EmitImpl(Serializer& S) const { @@ -148,12 +152,24 @@ Type* FunctionTypeProto::CreateImpl(ASTContext& Context, Deserializer& D) { unsigned NumArgs = D.ReadInt(); llvm::SmallVector Args; - + for (unsigned j = 0; j < NumArgs; ++j) Args.push_back(QualType::ReadVal(D)); - + return Context.getFunctionType(ResultType,&*Args.begin(), - NumArgs,isVariadic).getTypePtr(); + NumArgs,isVariadic).getTypePtr(); +} + +//===----------------------------------------------------------------------===// +// FunctionTypeProto +//===----------------------------------------------------------------------===// + +void FunctionTypeNoProto::EmitImpl(Serializer& S) const { + S.Emit(getResultType()); +} + +Type* FunctionTypeNoProto::CreateImpl(ASTContext& Context, Deserializer& D) { + return Context.getFunctionTypeNoProto(QualType::ReadVal(D)).getTypePtr(); } //===----------------------------------------------------------------------===// diff --git a/clang/include/clang/AST/Type.h b/clang/include/clang/AST/Type.h index 1209a70a050d..fb3e38f123ab 100644 --- a/clang/include/clang/AST/Type.h +++ b/clang/include/clang/AST/Type.h @@ -751,6 +751,11 @@ public: return T->getTypeClass() == FunctionNoProto; } static bool classof(const FunctionTypeNoProto *) { return true; } + +protected: + virtual void EmitImpl(llvm::Serializer& S) const; + static Type* CreateImpl(ASTContext& Context,llvm::Deserializer& D); + friend class Type; }; /// FunctionTypeProto - Represents a prototype with argument type info, e.g.