Skip to content

Commit 8dddb04

Browse files
committed
Distributed: Remove flattenDistributedSerializationTypeToRequiredProtocols()
1 parent ac1abcb commit 8dddb04

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
@@ -346,47 +346,19 @@ swift::getDistributedSerializationRequirements(
346346
if (existentialRequirementTy->isAny())
347347
return true; // we're done here, any means there are no requirements
348348

349-
ExistentialType *serialReqType = existentialRequirementTy
350-
->getAs<ExistentialType>();
349+
auto *serialReqType = existentialRequirementTy->getAs<ExistentialType>();
351350
if (!serialReqType || serialReqType->hasError()) {
352351
return false;
353352
}
354353

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()) {
360356
requirementProtos.insert(p);
361357
}
362358

363359
return true;
364360
}
365361

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-
390362
bool swift::checkDistributedSerializationRequirementIsExactlyCodable(
391363
ASTContext &C,
392364
const llvm::SmallPtrSetImpl<ProtocolDecl *> &allRequirements) {
@@ -1267,19 +1239,9 @@ swift::extractDistributedSerializationRequirements(
12671239
if (auto dependentMemberType =
12681240
req.getFirstType()->castTo<DependentMemberType>()) {
12691241
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);
12831245
}
12841246
}
12851247
}

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
}
@@ -814,11 +814,13 @@ swift::getDistributedSerializationRequirementProtocols(
814814
return {};
815815
}
816816

817-
auto serialReqType =
818-
ty->castTo<ExistentialType>()->getConstraintType()->getDesugaredType();
819-
820817
// TODO(distributed): check what happens with Any
821-
return flattenDistributedSerializationTypeToRequiredProtocols(serialReqType);
818+
auto layout = ty->getExistentialLayout();
819+
llvm::SmallPtrSet<ProtocolDecl *, 2> result;
820+
for (auto p : layout.getProtocols()) {
821+
result.insert(p);
822+
}
823+
return result;
822824
}
823825

824826
ConstructorDecl*

0 commit comments

Comments
 (0)