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