Skip to content

Commit 31f922a

Browse files
committed
Distributed: Remove flattenDistributedSerializationTypeToRequiredProtocols()
1 parent bacabc1 commit 31f922a

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) {
@@ -1260,19 +1232,9 @@ swift::extractDistributedSerializationRequirements(
12601232
if (auto dependentMemberType =
12611233
req.getFirstType()->castTo<DependentMemberType>()) {
12621234
if (dependentMemberType->getAssocType() == daSerializationReqAssocType) {
1263-
auto requirementProto = req.getSecondType();
1264-
if (auto proto = dyn_cast_or_null<ProtocolDecl>(
1265-
requirementProto->getAnyNominal())) {
1266-
serializationReqs.insert(proto);
1267-
} else {
1268-
auto serialReqType = requirementProto->castTo<ExistentialType>()
1269-
->getConstraintType();
1270-
auto flattenedRequirements =
1271-
flattenDistributedSerializationTypeToRequiredProtocols(
1272-
serialReqType.getPointer());
1273-
for (auto p : flattenedRequirements) {
1274-
serializationReqs.insert(p);
1275-
}
1235+
auto layout = req.getSecondType()->getExistentialLayout();
1236+
for (auto p : layout.getProtocols()) {
1237+
serializationReqs.insert(p);
12761238
}
12771239
}
12781240
}

lib/Sema/TypeCheckDistributed.cpp

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -507,8 +507,8 @@ bool CheckDistributedFunctionRequest::evaluate(
507507
} else if (isa<ProtocolDecl>(DC)) {
508508
if (auto seqReqTy =
509509
getConcreteReplacementForMemberSerializationRequirement(func)) {
510-
auto seqReqTyDes = seqReqTy->castTo<ExistentialType>()->getConstraintType()->getDesugaredType();
511-
for (auto req : flattenDistributedSerializationTypeToRequiredProtocols(seqReqTyDes)) {
510+
auto layout = seqReqTy->getExistentialLayout();
511+
for (auto req : layout.getProtocols()) {
512512
serializationRequirements.insert(req);
513513
}
514514
}
@@ -759,11 +759,13 @@ swift::getDistributedSerializationRequirementProtocols(
759759
return {};
760760
}
761761

762-
auto serialReqType =
763-
ty->castTo<ExistentialType>()->getConstraintType()->getDesugaredType();
764-
765762
// TODO(distributed): check what happens with Any
766-
return flattenDistributedSerializationTypeToRequiredProtocols(serialReqType);
763+
auto layout = ty->getExistentialLayout();
764+
llvm::SmallPtrSet<ProtocolDecl *, 2> result;
765+
for (auto p : layout.getProtocols()) {
766+
result.insert(p);
767+
}
768+
return result;
767769
}
768770

769771
ConstructorDecl*

0 commit comments

Comments
 (0)