Distributed: Remove flattenDistributedSerializationTypeToRequiredProtocols()

This commit is contained in:
Slava Pestov
2023-10-30 14:59:52 -04:00
parent bacabc1cd6
commit 31f922ae5c
3 changed files with 14 additions and 56 deletions

View File

@@ -340,47 +340,19 @@ swift::getDistributedSerializationRequirements(
if (existentialRequirementTy->isAny())
return true; // we're done here, any means there are no requirements
ExistentialType *serialReqType = existentialRequirementTy
->getAs<ExistentialType>();
auto *serialReqType = existentialRequirementTy->getAs<ExistentialType>();
if (!serialReqType || serialReqType->hasError()) {
return false;
}
auto desugaredTy = serialReqType->getConstraintType();
auto flattenedRequirements =
flattenDistributedSerializationTypeToRequiredProtocols(
desugaredTy.getPointer());
for (auto p : flattenedRequirements) {
auto layout = serialReqType->getExistentialLayout();
for (auto p : layout.getProtocols()) {
requirementProtos.insert(p);
}
return true;
}
llvm::SmallPtrSet<ProtocolDecl *, 2>
swift::flattenDistributedSerializationTypeToRequiredProtocols(
TypeBase *serializationRequirement) {
llvm::SmallPtrSet<ProtocolDecl *, 2> serializationReqs;
if (auto composition =
serializationRequirement->getAs<ProtocolCompositionType>()) {
for (auto member : composition->getMembers()) {
if (auto comp = member->getAs<ProtocolCompositionType>()) {
for (auto protocol :
flattenDistributedSerializationTypeToRequiredProtocols(comp)) {
serializationReqs.insert(protocol);
}
} else if (auto *protocol = member->getAs<ProtocolType>()) {
serializationReqs.insert(protocol->getDecl());
}
}
} else {
auto protocol = serializationRequirement->castTo<ProtocolType>()->getDecl();
serializationReqs.insert(protocol);
}
return serializationReqs;
}
bool swift::checkDistributedSerializationRequirementIsExactlyCodable(
ASTContext &C,
const llvm::SmallPtrSetImpl<ProtocolDecl *> &allRequirements) {
@@ -1260,19 +1232,9 @@ swift::extractDistributedSerializationRequirements(
if (auto dependentMemberType =
req.getFirstType()->castTo<DependentMemberType>()) {
if (dependentMemberType->getAssocType() == daSerializationReqAssocType) {
auto requirementProto = req.getSecondType();
if (auto proto = dyn_cast_or_null<ProtocolDecl>(
requirementProto->getAnyNominal())) {
serializationReqs.insert(proto);
} else {
auto serialReqType = requirementProto->castTo<ExistentialType>()
->getConstraintType();
auto flattenedRequirements =
flattenDistributedSerializationTypeToRequiredProtocols(
serialReqType.getPointer());
for (auto p : flattenedRequirements) {
serializationReqs.insert(p);
}
auto layout = req.getSecondType()->getExistentialLayout();
for (auto p : layout.getProtocols()) {
serializationReqs.insert(p);
}
}
}