@@ -3165,14 +3165,15 @@ class swift::DeclDeserializer {
3165
3165
return proto;
3166
3166
}
3167
3167
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) {
3170
3171
IdentifierID nameID;
3171
3172
DeclContextID contextID;
3172
3173
ArrayRef<uint64_t > designatedNominalTypeDeclIDs;
3173
3174
3174
- decls_block::PrefixOperatorLayout ::readRecord (scratch, nameID, contextID,
3175
- designatedNominalTypeDeclIDs);
3175
+ OperatorLayout ::readRecord (scratch, nameID, contextID,
3176
+ designatedNominalTypeDeclIDs);
3176
3177
auto DC = MF.getDeclContext (contextID);
3177
3178
3178
3179
SmallVector<NominalTypeDecl *, 1 > designatedNominalTypes;
@@ -3183,39 +3184,24 @@ class swift::DeclDeserializer {
3183
3184
designatedNominalTypes.push_back (cast<NominalTypeDecl>(nominal.get ()));
3184
3185
}
3185
3186
3186
- auto result = MF.createDecl <PrefixOperatorDecl >(
3187
+ auto result = MF.createDecl <OperatorDecl >(
3187
3188
DC, SourceLoc (), MF.getIdentifier (nameID), SourceLoc (),
3188
3189
ctx.AllocateCopy (designatedNominalTypes));
3189
3190
3190
3191
declOrOffset = result;
3191
3192
return result;
3192
3193
}
3193
3194
3195
+ Expected<Decl *> deserializePrefixOperator (ArrayRef<uint64_t > scratch,
3196
+ StringRef blobData) {
3197
+ return deserializeUnaryOperator<decls_block::PrefixOperatorLayout,
3198
+ PrefixOperatorDecl>(scratch, blobData);
3199
+ }
3200
+
3194
3201
Expected<Decl *> deserializePostfixOperator (ArrayRef<uint64_t > scratch,
3195
3202
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);
3219
3205
}
3220
3206
3221
3207
Expected<Decl *> deserializeInfixOperator (ArrayRef<uint64_t > scratch,
0 commit comments