Skip to content

Commit 7629d00

Browse files
committed
Sema: Convert a bunch of if/else into a switch
1 parent 76c6510 commit 7629d00

File tree

1 file changed

+81
-55
lines changed

1 file changed

+81
-55
lines changed

lib/Sema/TypeCheckProtocol.cpp

+81-55
Original file line numberDiff line numberDiff line change
@@ -6056,72 +6056,98 @@ void TypeChecker::checkConformancesInContext(IterableDeclContext *idc) {
60566056
}
60576057

60586058
auto proto = conformance->getProtocol();
6059-
if (proto->isSpecificProtocol(
6060-
KnownProtocolKind::StringInterpolationProtocol)) {
6061-
if (auto typeDecl = dc->getSelfNominalTypeDecl()) {
6062-
diagnoseMissingAppendInterpolationMethod(typeDecl);
6059+
6060+
if (auto kp = proto->getKnownProtocolKind()) {
6061+
switch (*kp) {
6062+
case KnownProtocolKind::StringInterpolationProtocol: {
6063+
if (auto typeDecl = dc->getSelfNominalTypeDecl()) {
6064+
diagnoseMissingAppendInterpolationMethod(typeDecl);
6065+
}
6066+
break;
60636067
}
6064-
} else if (proto->isSpecificProtocol(KnownProtocolKind::Sendable)) {
6065-
SendableConformance = conformance;
6068+
case KnownProtocolKind::Sendable: {
6069+
SendableConformance = conformance;
60666070

6067-
if (auto normal = conformance->getRootNormalConformance()) {
6068-
if (isImpliedByConformancePredatingConcurrency(normal))
6069-
sendableConformancePreconcurrency = true;
6071+
if (auto normal = conformance->getRootNormalConformance()) {
6072+
if (isImpliedByConformancePredatingConcurrency(normal))
6073+
sendableConformancePreconcurrency = true;
6074+
}
6075+
break;
60706076
}
6071-
} else if (proto->isSpecificProtocol(KnownProtocolKind::DistributedActor)) {
6072-
if (auto classDecl = dyn_cast<ClassDecl>(nominal)) {
6073-
if (!classDecl->isDistributedActor()) {
6074-
if (classDecl->isActor()) {
6075-
dc->getSelfNominalTypeDecl()
6076-
->diagnose(diag::actor_cannot_inherit_distributed_actor_protocol,
6077-
dc->getSelfNominalTypeDecl()->getName())
6078-
.fixItInsert(classDecl->getStartLoc(), "distributed ");
6079-
} else {
6077+
case KnownProtocolKind::DistributedActor: {
6078+
if (auto classDecl = dyn_cast<ClassDecl>(nominal)) {
6079+
if (!classDecl->isDistributedActor()) {
6080+
if (classDecl->isActor()) {
6081+
dc->getSelfNominalTypeDecl()
6082+
->diagnose(diag::actor_cannot_inherit_distributed_actor_protocol,
6083+
dc->getSelfNominalTypeDecl()->getName())
6084+
.fixItInsert(classDecl->getStartLoc(), "distributed ");
6085+
} else {
6086+
dc->getSelfNominalTypeDecl()
6087+
->diagnose(diag::distributed_actor_protocol_illegal_inheritance,
6088+
dc->getSelfNominalTypeDecl()->getName())
6089+
.fixItReplace(nominal->getStartLoc(), "distributed actor");
6090+
}
6091+
}
6092+
}
6093+
break;
6094+
}
6095+
case KnownProtocolKind::DistributedActorSystem: {
6096+
checkDistributedActorSystem(nominal);
6097+
break;
6098+
}
6099+
case KnownProtocolKind::Actor: {
6100+
if (auto classDecl = dyn_cast<ClassDecl>(nominal)) {
6101+
if (!classDecl->isExplicitActor()) {
60806102
dc->getSelfNominalTypeDecl()
6081-
->diagnose(diag::distributed_actor_protocol_illegal_inheritance,
6082-
dc->getSelfNominalTypeDecl()->getName())
6083-
.fixItReplace(nominal->getStartLoc(), "distributed actor");
6103+
->diagnose(diag::actor_protocol_illegal_inheritance,
6104+
dc->getSelfNominalTypeDecl()->getName(),
6105+
proto->getName())
6106+
.fixItReplace(nominal->getStartLoc(), "actor");
60846107
}
60856108
}
6109+
break;
60866110
}
6087-
} else if (proto->isSpecificProtocol(
6088-
KnownProtocolKind::DistributedActorSystem)) {
6089-
checkDistributedActorSystem(nominal);
6090-
} else if (proto->isSpecificProtocol(KnownProtocolKind::Actor)) {
6091-
if (auto classDecl = dyn_cast<ClassDecl>(nominal)) {
6092-
if (!classDecl->isExplicitActor()) {
6093-
dc->getSelfNominalTypeDecl()
6094-
->diagnose(diag::actor_protocol_illegal_inheritance,
6095-
dc->getSelfNominalTypeDecl()->getName(),
6096-
proto->getName())
6097-
.fixItReplace(nominal->getStartLoc(), "actor");
6111+
case KnownProtocolKind::AnyActor: {
6112+
if (auto classDecl = dyn_cast<ClassDecl>(nominal)) {
6113+
if (!classDecl->isExplicitActor() &&
6114+
!classDecl->isExplicitDistributedActor()) {
6115+
dc->getSelfNominalTypeDecl()
6116+
->diagnose(diag::actor_protocol_illegal_inheritance,
6117+
dc->getSelfNominalTypeDecl()->getName(),
6118+
proto->getName())
6119+
.fixItReplace(nominal->getStartLoc(), "actor");
6120+
}
60986121
}
6122+
break;
6123+
}
6124+
case KnownProtocolKind::UnsafeSendable: {
6125+
hasDeprecatedUnsafeSendable = true;
6126+
break;
6127+
}
6128+
case KnownProtocolKind::Executor: {
6129+
tryDiagnoseExecutorConformance(Context, nominal, proto);
6130+
break;
60996131
}
6100-
} else if (proto->isSpecificProtocol(KnownProtocolKind::AnyActor)) {
6101-
if (auto classDecl = dyn_cast<ClassDecl>(nominal)) {
6102-
if (!classDecl->isExplicitActor() &&
6103-
!classDecl->isExplicitDistributedActor()) {
6104-
dc->getSelfNominalTypeDecl()
6105-
->diagnose(diag::actor_protocol_illegal_inheritance,
6106-
dc->getSelfNominalTypeDecl()->getName(),
6107-
proto->getName())
6108-
.fixItReplace(nominal->getStartLoc(), "actor");
6132+
case KnownProtocolKind::Copyable: {
6133+
checkCopyableConformance(dc, ProtocolConformanceRef(conformance));
6134+
break;
6135+
}
6136+
case KnownProtocolKind::Escapable: {
6137+
checkEscapableConformance(dc, ProtocolConformanceRef(conformance));
6138+
break;
6139+
}
6140+
case KnownProtocolKind::BitwiseCopyable: {
6141+
if (Context.LangOpts.hasFeature(Feature::BitwiseCopyable)) {
6142+
checkBitwiseCopyableConformance(
6143+
conformance, /*isImplicit=*/conformance->getSourceKind() ==
6144+
ConformanceEntryKind::Synthesized);
61096145
}
6146+
break;
6147+
}
6148+
default:
6149+
break;
61106150
}
6111-
} else if (proto->isSpecificProtocol(
6112-
KnownProtocolKind::UnsafeSendable)) {
6113-
hasDeprecatedUnsafeSendable = true;
6114-
} else if (proto->isSpecificProtocol(KnownProtocolKind::Executor)) {
6115-
tryDiagnoseExecutorConformance(Context, nominal, proto);
6116-
} else if (proto->isSpecificProtocol(KnownProtocolKind::Copyable)) {
6117-
checkCopyableConformance(dc, ProtocolConformanceRef(conformance));
6118-
} else if (proto->isSpecificProtocol(KnownProtocolKind::Escapable)) {
6119-
checkEscapableConformance(dc, ProtocolConformanceRef(conformance));
6120-
} else if (Context.LangOpts.hasFeature(Feature::BitwiseCopyable) &&
6121-
proto->isSpecificProtocol(KnownProtocolKind::BitwiseCopyable)) {
6122-
checkBitwiseCopyableConformance(
6123-
conformance, /*isImplicit=*/conformance->getSourceKind() ==
6124-
ConformanceEntryKind::Synthesized);
61256151
}
61266152
}
61276153

0 commit comments

Comments
 (0)