aboutsummaryrefslogtreecommitdiff
path: root/lib/AST/TypeSerialization.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/AST/TypeSerialization.cpp')
-rw-r--r--lib/AST/TypeSerialization.cpp51
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
//===----------------------------------------------------------------------===//