diff options
author | Sebastian Redl <sebastian.redl@getdesigned.at> | 2009-01-24 21:16:55 +0000 |
---|---|---|
committer | Sebastian Redl <sebastian.redl@getdesigned.at> | 2009-01-24 21:16:55 +0000 |
commit | f30208ad5b334e93582e846a2a0c92f38a607b8a (patch) | |
tree | 1fba65ee5418c5bcb3eeb1265aae50cffd6474f4 /lib/AST/TypeSerialization.cpp | |
parent | 91daf4da934e10dcbf22697d59e2791420b1507a (diff) |
Add support for declaring pointers to members.
Add serialization support for ReferenceType.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@62934 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/AST/TypeSerialization.cpp')
-rw-r--r-- | lib/AST/TypeSerialization.cpp | 51 |
1 files changed, 43 insertions, 8 deletions
diff --git a/lib/AST/TypeSerialization.cpp b/lib/AST/TypeSerialization.cpp index 4f3eeca28c..12c3d03c12 100644 --- a/lib/AST/TypeSerialization.cpp +++ b/lib/AST/TypeSerialization.cpp @@ -93,21 +93,29 @@ void Type::Create(ASTContext& Context, unsigned i, Deserializer& D) { case Type::IncompleteArray: D.RegisterPtr(PtrID,IncompleteArrayType::CreateImpl(Context,D)); break; - + + case Type::MemberPointer: + D.RegisterPtr(PtrID, MemberPointerType::CreateImpl(Context, D)); + break; + case Type::Pointer: - D.RegisterPtr(PtrID,PointerType::CreateImpl(Context,D)); + D.RegisterPtr(PtrID, PointerType::CreateImpl(Context, D)); break; case Type::BlockPointer: - D.RegisterPtr(PtrID,BlockPointerType::CreateImpl(Context,D)); + D.RegisterPtr(PtrID, BlockPointerType::CreateImpl(Context, D)); break; - + + case Type::Reference: + D.RegisterPtr(PtrID, ReferenceType::CreateImpl(Context, D)); + break; + case Type::Tagged: - D.RegisterPtr(PtrID,TagType::CreateImpl(Context,D)); + D.RegisterPtr(PtrID, TagType::CreateImpl(Context, D)); break; - + case Type::TypeName: - D.RegisterPtr(PtrID,TypedefType::CreateImpl(Context,D)); + D.RegisterPtr(PtrID, TypedefType::CreateImpl(Context, D)); break; case Type::TypeOfExp: @@ -123,7 +131,7 @@ void Type::Create(ASTContext& Context, unsigned i, Deserializer& D) { break; case Type::VariableArray: - D.RegisterPtr(PtrID,VariableArrayType::CreateImpl(Context,D)); + D.RegisterPtr(PtrID, VariableArrayType::CreateImpl(Context, D)); break; } } @@ -243,6 +251,33 @@ Type* PointerType::CreateImpl(ASTContext& Context, Deserializer& D) { } //===----------------------------------------------------------------------===// +// ReferenceType +//===----------------------------------------------------------------------===// + +void ReferenceType::EmitImpl(Serializer& S) const { + S.Emit(getPointeeType()); +} + +Type* ReferenceType::CreateImpl(ASTContext& Context, Deserializer& D) { + return Context.getReferenceType(QualType::ReadVal(D)).getTypePtr(); +} + +//===----------------------------------------------------------------------===// +// MemberPointerType +//===----------------------------------------------------------------------===// + +void MemberPointerType::EmitImpl(Serializer& S) const { + S.Emit(getPointeeType()); + S.Emit(QualType(Class, 0)); +} + +Type* MemberPointerType::CreateImpl(ASTContext& Context, Deserializer& D) { + QualType Pointee = QualType::ReadVal(D); + QualType Class = QualType::ReadVal(D); + return Context.getMemberPointerType(Pointee, Class.getTypePtr()).getTypePtr(); +} + +//===----------------------------------------------------------------------===// // TagType //===----------------------------------------------------------------------===// |