aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2007-11-14 00:38:50 +0000
committerTed Kremenek <kremenek@apple.com>2007-11-14 00:38:50 +0000
commit2b14d46231fd75ad1e58043e9fab029c54c817cb (patch)
tree92150f4cebeafa6c51c8fca89908877922427126
parented1a01d4d0ee773eb6478ff9701b46d2f0c06952 (diff)
Implemented serialization of FunctionTypeNoProto.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44094 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--AST/TypeSerialization.cpp24
-rw-r--r--include/clang/AST/Type.h5
2 files changed, 25 insertions, 4 deletions
diff --git a/AST/TypeSerialization.cpp b/AST/TypeSerialization.cpp
index 24ff9f34a0..ba32abfb5d 100644
--- a/AST/TypeSerialization.cpp
+++ b/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<QualType,15> 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/include/clang/AST/Type.h b/include/clang/AST/Type.h
index 1209a70a05..fb3e38f123 100644
--- a/include/clang/AST/Type.h
+++ b/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.