@@ -3165,14 +3165,15 @@ class swift::DeclDeserializer {
31653165 return proto;
31663166 }
31673167
3168- Expected<Decl *> deserializePrefixOperator (ArrayRef<uint64_t > scratch,
3169- StringRef blobData) {
3168+ template <typename OperatorLayout, typename OperatorDecl>
3169+ Expected<Decl *> deserializeUnaryOperator (ArrayRef<uint64_t > scratch,
3170+ StringRef blobData) {
31703171 IdentifierID nameID;
31713172 DeclContextID contextID;
31723173 ArrayRef<uint64_t > designatedNominalTypeDeclIDs;
31733174
3174- decls_block::PrefixOperatorLayout ::readRecord (scratch, nameID, contextID,
3175- designatedNominalTypeDeclIDs);
3175+ OperatorLayout ::readRecord (scratch, nameID, contextID,
3176+ designatedNominalTypeDeclIDs);
31763177 auto DC = MF.getDeclContext (contextID);
31773178
31783179 SmallVector<NominalTypeDecl *, 1 > designatedNominalTypes;
@@ -3183,39 +3184,24 @@ class swift::DeclDeserializer {
31833184 designatedNominalTypes.push_back (cast<NominalTypeDecl>(nominal.get ()));
31843185 }
31853186
3186- auto result = MF.createDecl <PrefixOperatorDecl >(
3187+ auto result = MF.createDecl <OperatorDecl >(
31873188 DC, SourceLoc (), MF.getIdentifier (nameID), SourceLoc (),
31883189 ctx.AllocateCopy (designatedNominalTypes));
31893190
31903191 declOrOffset = result;
31913192 return result;
31923193 }
31933194
3195+ Expected<Decl *> deserializePrefixOperator (ArrayRef<uint64_t > scratch,
3196+ StringRef blobData) {
3197+ return deserializeUnaryOperator<decls_block::PrefixOperatorLayout,
3198+ PrefixOperatorDecl>(scratch, blobData);
3199+ }
3200+
31943201 Expected<Decl *> deserializePostfixOperator (ArrayRef<uint64_t > scratch,
31953202 StringRef blobData) {
3196- IdentifierID nameID;
3197- DeclContextID contextID;
3198- ArrayRef<uint64_t > designatedNominalTypeDeclIDs;
3199-
3200- decls_block::PostfixOperatorLayout::readRecord (
3201- scratch, nameID, contextID, designatedNominalTypeDeclIDs);
3202-
3203- auto DC = MF.getDeclContext (contextID);
3204-
3205- SmallVector<NominalTypeDecl *, 1 > designatedNominalTypes;
3206- for (auto id : designatedNominalTypeDeclIDs) {
3207- Expected<Decl *> nominal = MF.getDeclChecked (id);
3208- if (!nominal)
3209- return nominal.takeError ();
3210- designatedNominalTypes.push_back (cast<NominalTypeDecl>(nominal.get ()));
3211- }
3212-
3213- auto result = MF.createDecl <PostfixOperatorDecl>(
3214- DC, SourceLoc (), MF.getIdentifier (nameID), SourceLoc (),
3215- ctx.AllocateCopy (designatedNominalTypes));
3216-
3217- declOrOffset = result;
3218- return result;
3203+ return deserializeUnaryOperator<decls_block::PostfixOperatorLayout,
3204+ PostfixOperatorDecl>(scratch, blobData);
32193205 }
32203206
32213207 Expected<Decl *> deserializeInfixOperator (ArrayRef<uint64_t > scratch,
0 commit comments