diff options
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 //===----------------------------------------------------------------------===// |