aboutsummaryrefslogtreecommitdiff
path: root/lib/AST/TypeSerialization.cpp
diff options
context:
space:
mode:
authorSebastian Redl <sebastian.redl@getdesigned.at>2009-01-24 21:16:55 +0000
committerSebastian Redl <sebastian.redl@getdesigned.at>2009-01-24 21:16:55 +0000
commitf30208ad5b334e93582e846a2a0c92f38a607b8a (patch)
tree1fba65ee5418c5bcb3eeb1265aae50cffd6474f4 /lib/AST/TypeSerialization.cpp
parent91daf4da934e10dcbf22697d59e2791420b1507a (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.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
//===----------------------------------------------------------------------===//