@@ -340,47 +340,19 @@ swift::getDistributedSerializationRequirements(
340
340
if (existentialRequirementTy->isAny ())
341
341
return true ; // we're done here, any means there are no requirements
342
342
343
- ExistentialType *serialReqType = existentialRequirementTy
344
- ->getAs <ExistentialType>();
343
+ auto *serialReqType = existentialRequirementTy->getAs <ExistentialType>();
345
344
if (!serialReqType || serialReqType->hasError ()) {
346
345
return false ;
347
346
}
348
347
349
- auto desugaredTy = serialReqType->getConstraintType ();
350
- auto flattenedRequirements =
351
- flattenDistributedSerializationTypeToRequiredProtocols (
352
- desugaredTy.getPointer ());
353
- for (auto p : flattenedRequirements) {
348
+ auto layout = serialReqType->getExistentialLayout ();
349
+ for (auto p : layout.getProtocols ()) {
354
350
requirementProtos.insert (p);
355
351
}
356
352
357
353
return true ;
358
354
}
359
355
360
- llvm::SmallPtrSet<ProtocolDecl *, 2 >
361
- swift::flattenDistributedSerializationTypeToRequiredProtocols (
362
- TypeBase *serializationRequirement) {
363
- llvm::SmallPtrSet<ProtocolDecl *, 2 > serializationReqs;
364
- if (auto composition =
365
- serializationRequirement->getAs <ProtocolCompositionType>()) {
366
- for (auto member : composition->getMembers ()) {
367
- if (auto comp = member->getAs <ProtocolCompositionType>()) {
368
- for (auto protocol :
369
- flattenDistributedSerializationTypeToRequiredProtocols (comp)) {
370
- serializationReqs.insert (protocol);
371
- }
372
- } else if (auto *protocol = member->getAs <ProtocolType>()) {
373
- serializationReqs.insert (protocol->getDecl ());
374
- }
375
- }
376
- } else {
377
- auto protocol = serializationRequirement->castTo <ProtocolType>()->getDecl ();
378
- serializationReqs.insert (protocol);
379
- }
380
-
381
- return serializationReqs;
382
- }
383
-
384
356
bool swift::checkDistributedSerializationRequirementIsExactlyCodable (
385
357
ASTContext &C,
386
358
const llvm::SmallPtrSetImpl<ProtocolDecl *> &allRequirements) {
@@ -1261,19 +1233,9 @@ swift::extractDistributedSerializationRequirements(
1261
1233
if (auto dependentMemberType =
1262
1234
req.getFirstType ()->castTo <DependentMemberType>()) {
1263
1235
if (dependentMemberType->getAssocType () == daSerializationReqAssocType) {
1264
- auto requirementProto = req.getSecondType ();
1265
- if (auto proto = dyn_cast_or_null<ProtocolDecl>(
1266
- requirementProto->getAnyNominal ())) {
1267
- serializationReqs.insert (proto);
1268
- } else {
1269
- auto serialReqType = requirementProto->castTo <ExistentialType>()
1270
- ->getConstraintType ();
1271
- auto flattenedRequirements =
1272
- flattenDistributedSerializationTypeToRequiredProtocols (
1273
- serialReqType.getPointer ());
1274
- for (auto p : flattenedRequirements) {
1275
- serializationReqs.insert (p);
1276
- }
1236
+ auto layout = req.getSecondType ()->getExistentialLayout ();
1237
+ for (auto p : layout.getProtocols ()) {
1238
+ serializationReqs.insert (p);
1277
1239
}
1278
1240
}
1279
1241
}
0 commit comments