Skip to content

Commit c71564d

Browse files
slavapestovktoso
authored andcommitted
Distributed: Remove flattenDistributedSerializationTypeToRequiredProtocols()
1 parent 7991412 commit c71564d

File tree

3 files changed

+14
-56
lines changed

3 files changed

+14
-56
lines changed

include/swift/AST/DistributedDecl.h

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -91,12 +91,6 @@ llvm::SmallPtrSet<ProtocolDecl *, 2>
9191
getDistributedSerializationRequirementProtocols(
9292
NominalTypeDecl *decl, ProtocolDecl* protocol);
9393

94-
/// Desugar and flatten the `SerializationRequirement` type into a set of
95-
/// specific protocol declarations.
96-
llvm::SmallPtrSet<ProtocolDecl *, 2>
97-
flattenDistributedSerializationTypeToRequiredProtocols(
98-
TypeBase *serializationRequirement);
99-
10094
/// Check if the `allRequirements` represent *exactly* the
10195
/// `Encodable & Decodable` (also known as `Codable`) requirement.
10296
///

lib/AST/DistributedDecl.cpp

Lines changed: 6 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -340,47 +340,19 @@ swift::getDistributedSerializationRequirements(
340340
if (existentialRequirementTy->isAny())
341341
return true; // we're done here, any means there are no requirements
342342

343-
ExistentialType *serialReqType = existentialRequirementTy
344-
->getAs<ExistentialType>();
343+
auto *serialReqType = existentialRequirementTy->getAs<ExistentialType>();
345344
if (!serialReqType || serialReqType->hasError()) {
346345
return false;
347346
}
348347

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()) {
354350
requirementProtos.insert(p);
355351
}
356352

357353
return true;
358354
}
359355

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-
384356
bool swift::checkDistributedSerializationRequirementIsExactlyCodable(
385357
ASTContext &C,
386358
const llvm::SmallPtrSetImpl<ProtocolDecl *> &allRequirements) {
@@ -1261,19 +1233,9 @@ swift::extractDistributedSerializationRequirements(
12611233
if (auto dependentMemberType =
12621234
req.getFirstType()->castTo<DependentMemberType>()) {
12631235
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);
12771239
}
12781240
}
12791241
}

lib/Sema/TypeCheckDistributed.cpp

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -530,8 +530,8 @@ bool CheckDistributedFunctionRequest::evaluate(
530530
} else if (isa<ProtocolDecl>(DC)) {
531531
if (auto seqReqTy =
532532
getConcreteReplacementForMemberSerializationRequirement(func)) {
533-
auto seqReqTyDes = seqReqTy->castTo<ExistentialType>()->getConstraintType()->getDesugaredType();
534-
for (auto req : flattenDistributedSerializationTypeToRequiredProtocols(seqReqTyDes)) {
533+
auto layout = seqReqTy->getExistentialLayout();
534+
for (auto req : layout.getProtocols()) {
535535
serializationRequirements.insert(req);
536536
}
537537
}
@@ -783,11 +783,13 @@ swift::getDistributedSerializationRequirementProtocols(
783783
return {};
784784
}
785785

786-
auto serialReqType =
787-
ty->castTo<ExistentialType>()->getConstraintType()->getDesugaredType();
788-
789786
// TODO(distributed): check what happens with Any
790-
return flattenDistributedSerializationTypeToRequiredProtocols(serialReqType);
787+
auto layout = ty->getExistentialLayout();
788+
llvm::SmallPtrSet<ProtocolDecl *, 2> result;
789+
for (auto p : layout.getProtocols()) {
790+
result.insert(p);
791+
}
792+
return result;
791793
}
792794

793795
ConstructorDecl*

0 commit comments

Comments
 (0)