Skip to content

Commit 8451e7f

Browse files
committed
add a notion of suppressible known protocols
1 parent df231fd commit 8451e7f

File tree

2 files changed

+84
-0
lines changed

2 files changed

+84
-0
lines changed

include/swift/AST/KnownProtocols.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,10 @@ enum : unsigned { NumKnownProtocolKindBits =
4444
/// Retrieve the name of the given known protocol.
4545
llvm::StringRef getProtocolName(KnownProtocolKind kind);
4646

47+
/// Determine whether this protocol's conformance is implicitly derived
48+
/// yet that derivation is suppressible.
49+
bool isSuppressibleProtocol(KnownProtocolKind kind);
50+
4751
} // end namespace swift
4852

4953
#endif

lib/AST/ASTContext.cpp

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,86 @@ llvm::StringRef swift::getProtocolName(KnownProtocolKind kind) {
103103
#undef PROTOCOL_WITH_NAME
104104
}
105105

106+
bool swift::isSuppressibleProtocol(KnownProtocolKind kind) {
107+
switch (kind) {
108+
case KnownProtocolKind::Copyable:
109+
return true;
110+
111+
case KnownProtocolKind::Actor:
112+
case KnownProtocolKind::AnyActor:
113+
case KnownProtocolKind::Sequence:
114+
case KnownProtocolKind::Identifiable:
115+
case KnownProtocolKind::IteratorProtocol:
116+
case KnownProtocolKind::RawRepresentable:
117+
case KnownProtocolKind::Equatable:
118+
case KnownProtocolKind::Hashable:
119+
case KnownProtocolKind::Comparable:
120+
case KnownProtocolKind::Error:
121+
case KnownProtocolKind::ErrorCodeProtocol:
122+
case KnownProtocolKind::Executor:
123+
case KnownProtocolKind::OptionSet:
124+
case KnownProtocolKind::CaseIterable:
125+
case KnownProtocolKind::SIMD:
126+
case KnownProtocolKind::SIMDScalar:
127+
case KnownProtocolKind::BinaryInteger:
128+
case KnownProtocolKind::FixedWidthInteger:
129+
case KnownProtocolKind::RangeReplaceableCollection:
130+
case KnownProtocolKind::SerialExecutor:
131+
case KnownProtocolKind::GlobalActor:
132+
case KnownProtocolKind::BridgedNSError:
133+
case KnownProtocolKind::BridgedStoredNSError:
134+
case KnownProtocolKind::CFObject:
135+
case KnownProtocolKind::SwiftNewtypeWrapper:
136+
case KnownProtocolKind::CodingKey:
137+
case KnownProtocolKind::Encodable:
138+
case KnownProtocolKind::Decodable:
139+
case KnownProtocolKind::Sendable:
140+
case KnownProtocolKind::UnsafeSendable:
141+
case KnownProtocolKind::ObjectiveCBridgeable:
142+
case KnownProtocolKind::DestructorSafeContainer:
143+
case KnownProtocolKind::StringInterpolationProtocol:
144+
case KnownProtocolKind::AdditiveArithmetic:
145+
case KnownProtocolKind::Differentiable:
146+
case KnownProtocolKind::DistributedActor:
147+
case KnownProtocolKind::DistributedActorSystem:
148+
case KnownProtocolKind::DistributedTargetInvocationEncoder:
149+
case KnownProtocolKind::DistributedTargetInvocationDecoder:
150+
case KnownProtocolKind::DistributedTargetInvocationResultHandler:
151+
case KnownProtocolKind::CxxConvertibleToCollection:
152+
case KnownProtocolKind::CxxDictionary:
153+
case KnownProtocolKind::CxxOptional:
154+
case KnownProtocolKind::CxxPair:
155+
case KnownProtocolKind::CxxSet:
156+
case KnownProtocolKind::CxxRandomAccessCollection:
157+
case KnownProtocolKind::CxxSequence:
158+
case KnownProtocolKind::UnsafeCxxInputIterator:
159+
case KnownProtocolKind::UnsafeCxxRandomAccessIterator:
160+
case KnownProtocolKind::AsyncSequence:
161+
case KnownProtocolKind::AsyncIteratorProtocol:
162+
case KnownProtocolKind::FloatingPoint:
163+
case KnownProtocolKind::ExpressibleByArrayLiteral:
164+
case KnownProtocolKind::ExpressibleByBooleanLiteral:
165+
case KnownProtocolKind::ExpressibleByDictionaryLiteral:
166+
case KnownProtocolKind::ExpressibleByExtendedGraphemeClusterLiteral:
167+
case KnownProtocolKind::ExpressibleByFloatLiteral:
168+
case KnownProtocolKind::ExpressibleByIntegerLiteral:
169+
case KnownProtocolKind::ExpressibleByStringInterpolation:
170+
case KnownProtocolKind::ExpressibleByStringLiteral:
171+
case KnownProtocolKind::ExpressibleByNilLiteral:
172+
case KnownProtocolKind::ExpressibleByUnicodeScalarLiteral:
173+
case KnownProtocolKind::ExpressibleByColorLiteral:
174+
case KnownProtocolKind::ExpressibleByImageLiteral:
175+
case KnownProtocolKind::ExpressibleByFileReferenceLiteral:
176+
case KnownProtocolKind::ExpressibleByBuiltinBooleanLiteral:
177+
case KnownProtocolKind::ExpressibleByBuiltinExtendedGraphemeClusterLiteral:
178+
case KnownProtocolKind::ExpressibleByBuiltinFloatLiteral:
179+
case KnownProtocolKind::ExpressibleByBuiltinIntegerLiteral:
180+
case KnownProtocolKind::ExpressibleByBuiltinStringLiteral:
181+
case KnownProtocolKind::ExpressibleByBuiltinUnicodeScalarLiteral:
182+
return false;
183+
}
184+
}
185+
106186
namespace {
107187
enum class SearchPathKind : uint8_t {
108188
Import = 1 << 0,

0 commit comments

Comments
 (0)