From fe8fd913071b63d80754b906b92d6fa887529a4a Mon Sep 17 00:00:00 2001 From: Pavel Yaskevich Date: Thu, 25 May 2023 14:35:43 -0700 Subject: [PATCH] [AST] NFC: Fold `PackConformance::isInvalid` into `ProtocolConformanceRef::isInvalid` Instead of making callers responsible for that (like in other cases), let's fold the code check `isInvalid` to make mistakes less likely. --- include/swift/AST/ProtocolConformanceRef.h | 4 +--- lib/AST/Module.cpp | 7 ++----- lib/AST/PackConformance.cpp | 3 --- lib/AST/ProtocolConformanceRef.cpp | 10 ++++++++++ 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/include/swift/AST/ProtocolConformanceRef.h b/include/swift/AST/ProtocolConformanceRef.h index 4f1fa2e244bc4..5a9a02dc5b668 100644 --- a/include/swift/AST/ProtocolConformanceRef.h +++ b/include/swift/AST/ProtocolConformanceRef.h @@ -89,9 +89,7 @@ class ProtocolConformanceRef { static ProtocolConformanceRef forMissingOrInvalid( Type type, ProtocolDecl *proto); - bool isInvalid() const { - return !Union; - } + bool isInvalid() const; explicit operator bool() const { return !isInvalid(); } diff --git a/lib/AST/Module.cpp b/lib/AST/Module.cpp index 48bc77b642355..6623179e0f718 100644 --- a/lib/AST/Module.cpp +++ b/lib/AST/Module.cpp @@ -1827,11 +1827,8 @@ static ProtocolConformanceRef getPackTypeConformance( patternConformances.push_back(patternConformance); } - auto *conformance = PackConformance::get(type, protocol, patternConformances); - if (conformance->isInvalid()) - return ProtocolConformanceRef::forInvalid(); - - return ProtocolConformanceRef(conformance); + return ProtocolConformanceRef( + PackConformance::get(type, protocol, patternConformances)); } ProtocolConformanceRef diff --git a/lib/AST/PackConformance.cpp b/lib/AST/PackConformance.cpp index b1cc1f19f2ddd..1a4270f65a028 100644 --- a/lib/AST/PackConformance.cpp +++ b/lib/AST/PackConformance.cpp @@ -249,9 +249,6 @@ PackConformance::subst(InFlightSubstitution &IFS) const { auto substConformance = PackConformance::get(substConformingType, Protocol, expander.substConformances); - if (substConformance->isInvalid()) - return ProtocolConformanceRef::forInvalid(); - return ProtocolConformanceRef(substConformance); } diff --git a/lib/AST/ProtocolConformanceRef.cpp b/lib/AST/ProtocolConformanceRef.cpp index ccde9d8d81f45..c01b15b48c7c4 100644 --- a/lib/AST/ProtocolConformanceRef.cpp +++ b/lib/AST/ProtocolConformanceRef.cpp @@ -42,6 +42,16 @@ ProtocolConformanceRef::ProtocolConformanceRef(ProtocolDecl *protocol, } } +bool ProtocolConformanceRef::isInvalid() const { + if (!Union) + return true; + + if (auto pack = Union.dyn_cast()) + return pack->isInvalid(); + + return false; +} + ProtocolDecl *ProtocolConformanceRef::getRequirement() const { assert(!isInvalid());