From 988b8c20332dfce75816689b5208d75a0df5c78d Mon Sep 17 00:00:00 2001 From: Jordan Rose Date: Tue, 23 Sep 2014 02:06:25 +0000 Subject: [PATCH] [Serialization] Preserve a deinitializer's interface type. We haven't actually needed this for anything, but we should probably follow the invariants of the AST. Swift SVN r22199 --- include/swift/Serialization/ModuleFormat.h | 5 +++-- lib/Serialization/Deserialization.cpp | 5 +++-- lib/Serialization/Serialization.cpp | 3 ++- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/include/swift/Serialization/ModuleFormat.h b/include/swift/Serialization/ModuleFormat.h index ab2b3c35444..ce63c867341 100644 --- a/include/swift/Serialization/ModuleFormat.h +++ b/include/swift/Serialization/ModuleFormat.h @@ -40,7 +40,7 @@ const uint16_t VERSION_MAJOR = 0; /// Serialized module format minor version number. /// /// When the format changes IN ANY WAY, this number should be incremented. -const uint16_t VERSION_MINOR = 141; +const uint16_t VERSION_MINOR = 142; using DeclID = Fixnum<31>; using DeclIDField = BCFixed<31>; @@ -844,7 +844,8 @@ namespace decls_block { DeclIDField, // context decl BCFixed<1>, // implicit? BCFixed<1>, // objc? - TypeIDField // type (signature) + TypeIDField, // type (signature) + TypeIDField // interface type // Trailed by a pattern for self. >; diff --git a/lib/Serialization/Deserialization.cpp b/lib/Serialization/Deserialization.cpp index 324db25fcfe..b30988b4a6e 100644 --- a/lib/Serialization/Deserialization.cpp +++ b/lib/Serialization/Deserialization.cpp @@ -2644,10 +2644,10 @@ Decl *ModuleFile::getDecl(DeclID DID, Optional ForcedContext) { case decls_block::DESTRUCTOR_DECL: { DeclID parentID; bool isImplicit, isObjC; - TypeID signatureID; + TypeID signatureID, interfaceID; decls_block::DestructorLayout::readRecord(scratch, parentID, isImplicit, - isObjC, signatureID); + isObjC, signatureID, interfaceID); DeclContext *DC = getDeclContext(parentID); if (declOrOffset.isComplete()) @@ -2663,6 +2663,7 @@ Decl *ModuleFile::getDecl(DeclID DID, Optional ForcedContext) { dtor->setSelfPattern(selfParams); dtor->setType(getType(signatureID)); + dtor->setInterfaceType(getType(interfaceID)); if (isImplicit) dtor->setImplicit(); diff --git a/lib/Serialization/Serialization.cpp b/lib/Serialization/Serialization.cpp index 125a6156bfd..d517f057b87 100644 --- a/lib/Serialization/Serialization.cpp +++ b/lib/Serialization/Serialization.cpp @@ -1981,7 +1981,8 @@ void Serializer::writeDecl(const Decl *D) { addDeclRef(DC), dtor->isImplicit(), dtor->isObjC(), - addTypeRef(dtor->getType())); + addTypeRef(dtor->getType()), + addTypeRef(dtor->getInterfaceType())); assert(dtor->getBodyParamPatterns().size() == 1); for (auto pattern : dtor->getBodyParamPatterns()) writePattern(pattern);