Skip to content

Commit 544ee14

Browse files
committed
[embedded] Provide alternate === and !== implementations instead of trying to switch away from existentials in a unified way
1 parent ae2e903 commit 544ee14

File tree

1 file changed

+21
-2
lines changed

1 file changed

+21
-2
lines changed

stdlib/public/core/Equatable.swift

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,19 @@ extension Equatable {
246246
/// - Parameters:
247247
/// - lhs: A reference to compare.
248248
/// - rhs: Another reference to compare.
249+
#if !$Embedded
250+
@inlinable // trivial-implementation
251+
public func === (lhs: AnyObject?, rhs: AnyObject?) -> Bool {
252+
switch (lhs, rhs) {
253+
case let (l?, r?):
254+
return ObjectIdentifier(l) == ObjectIdentifier(r)
255+
case (nil, nil):
256+
return true
257+
default:
258+
return false
259+
}
260+
}
261+
#else
249262
@inlinable // trivial-implementation
250263
public func ===<T: AnyObject, U: AnyObject>(lhs: T?, rhs: U?) -> Bool {
251264
switch (lhs, rhs) {
@@ -257,6 +270,7 @@ public func ===<T: AnyObject, U: AnyObject>(lhs: T?, rhs: U?) -> Bool {
257270
return false
258271
}
259272
}
273+
#endif
260274

261275
/// Returns a Boolean value indicating whether two references point to
262276
/// different object instances.
@@ -268,9 +282,14 @@ public func ===<T: AnyObject, U: AnyObject>(lhs: T?, rhs: U?) -> Bool {
268282
/// - Parameters:
269283
/// - lhs: A reference to compare.
270284
/// - rhs: Another reference to compare.
285+
#if !$Embedded
286+
@inlinable // trivial-implementation
287+
public func !== (lhs: AnyObject?, rhs: AnyObject?) -> Bool {
288+
return !(lhs === rhs)
289+
}
290+
#else
271291
@inlinable // trivial-implementation
272292
public func !==<T: AnyObject, U: AnyObject>(lhs: T, rhs: U) -> Bool {
273293
return !(lhs === rhs)
274294
}
275-
276-
295+
#endif

0 commit comments

Comments
 (0)