Skip to content

Commit cbcaf5e

Browse files
authored
Merge pull request #81064 from ktoso/pick-hashable-continuation
[6.2][Concurrency] Add Hashable conformance to Async(Throwing)Stream.Continuation
2 parents 8823a3f + 3fdcb49 commit cbcaf5e

File tree

7 files changed

+98
-0
lines changed

7 files changed

+98
-0
lines changed

stdlib/public/Concurrency/AsyncStream.swift

+16
Original file line numberDiff line numberDiff line change
@@ -475,6 +475,22 @@ extension AsyncStream: @unchecked Sendable where Element: Sendable { }
475475
@available(SwiftStdlib 5.1, *)
476476
extension AsyncStream.Continuation.YieldResult: Sendable where Element: Sendable { }
477477

478+
@available(SwiftStdlib 6.2, *)
479+
extension AsyncStream.Continuation: Hashable {
480+
@available(SwiftStdlib 6.2, *)
481+
public func hash(into hasher: inout Hasher) {
482+
return hasher.combine(ObjectIdentifier(storage))
483+
}
484+
@available(SwiftStdlib 6.2, *)
485+
public var hashValue: Int {
486+
return _hashValue(for: self)
487+
}
488+
@available(SwiftStdlib 6.2, *)
489+
public static func == (lhs: Self, rhs: Self) -> Bool {
490+
return lhs.storage === rhs.storage
491+
}
492+
}
493+
478494
#else
479495
@available(SwiftStdlib 5.1, *)
480496
@available(*, unavailable, message: "Unavailable in task-to-thread concurrency model")

stdlib/public/Concurrency/AsyncThrowingStream.swift

+16
Original file line numberDiff line numberDiff line change
@@ -521,6 +521,22 @@ extension AsyncThrowingStream: @unchecked Sendable where Element: Sendable { }
521521
@available(SwiftStdlib 5.1, *)
522522
extension AsyncThrowingStream.Continuation.YieldResult: Sendable where Element: Sendable { }
523523

524+
@available(SwiftStdlib 6.2, *)
525+
extension AsyncThrowingStream.Continuation: Hashable {
526+
@available(SwiftStdlib 6.2, *)
527+
public func hash(into hasher: inout Hasher) {
528+
return hasher.combine(ObjectIdentifier(storage))
529+
}
530+
@available(SwiftStdlib 6.2, *)
531+
public var hashValue: Int {
532+
return _hashValue(for: self)
533+
}
534+
@available(SwiftStdlib 6.2, *)
535+
public static func == (lhs: Self, rhs: Self) -> Bool {
536+
return lhs.storage === rhs.storage
537+
}
538+
}
539+
524540
#else
525541
@available(SwiftStdlib 5.1, *)
526542
@available(*, unavailable, message: "Unavailable in task-to-thread concurrency model")

test/Concurrency/Runtime/async_stream.swift

+18
Original file line numberDiff line numberDiff line change
@@ -435,6 +435,24 @@ class NotSendable {}
435435
expectTrue(expectation.fulfilled)
436436
}
437437

438+
tests.test("continuation equality") {
439+
let (_, continuation1) = AsyncStream<Int>.makeStream()
440+
let (_, continuation2) = AsyncStream<Int>.makeStream()
441+
expectTrue(continuation1 == continuation1)
442+
expectTrue(continuation1 != continuation2)
443+
expectTrue(continuation1.hashValue == continuation1.hashValue)
444+
expectTrue(continuation1.hashValue != continuation2.hashValue)
445+
}
446+
447+
tests.test("throwing continuation equality") {
448+
let (_, continuation1) = AsyncThrowingStream<Int, Error>.makeStream()
449+
let (_, continuation2) = AsyncThrowingStream<Int, Error>.makeStream()
450+
expectTrue(continuation1 == continuation1)
451+
expectTrue(continuation1 != continuation2)
452+
expectTrue(continuation1.hashValue == continuation1.hashValue)
453+
expectTrue(continuation1.hashValue != continuation2.hashValue)
454+
}
455+
438456
// MARK: - Multiple consumers
439457

440458
tests.test("finish behavior with multiple consumers") {

test/abi/Inputs/macOS/arm64/concurrency/baseline

+12
Original file line numberDiff line numberDiff line change
@@ -164,12 +164,18 @@ _$sScS12ContinuationV15BufferingPolicyO15bufferingOldestyADyx__GSicAFmlFWC
164164
_$sScS12ContinuationV15BufferingPolicyO9unboundedyADyx__GAFmlFWC
165165
_$sScS12ContinuationV15BufferingPolicyOMa
166166
_$sScS12ContinuationV15BufferingPolicyOMn
167+
_$sScS12ContinuationV2eeoiySbAByx_G_ADtFZ
168+
_$sScS12ContinuationV4hash4intoys6HasherVz_tF
167169
_$sScS12ContinuationV5yield4withAB11YieldResultOyx__Gs0E0Oyxs5NeverOG_tF
168170
_$sScS12ContinuationV5yieldAB11YieldResultOyyt__GyytRszlF
169171
_$sScS12ContinuationV5yieldyAB11YieldResultOyx__GxnF
170172
_$sScS12ContinuationV6finishyyF
173+
_$sScS12ContinuationV9hashValueSivg
174+
_$sScS12ContinuationV9hashValueSivpMV
171175
_$sScS12ContinuationVMa
172176
_$sScS12ContinuationVMn
177+
_$sScS12ContinuationVyx_GSHsMc
178+
_$sScS12ContinuationVyx_GSQsMc
173179
_$sScS17makeAsyncIteratorScS0C0Vyx_GyF
174180
_$sScS8IteratorV4nextxSgyYaF
175181
_$sScS8IteratorV4nextxSgyYaFTu
@@ -359,12 +365,18 @@ _$sScs12ContinuationV15BufferingPolicyO15bufferingOldestyADyxq___GSicAFms5ErrorR
359365
_$sScs12ContinuationV15BufferingPolicyO9unboundedyADyxq___GAFms5ErrorR_r0_lFWC
360366
_$sScs12ContinuationV15BufferingPolicyOMa
361367
_$sScs12ContinuationV15BufferingPolicyOMn
368+
_$sScs12ContinuationV2eeoiySbAByxq__G_ADtFZ
369+
_$sScs12ContinuationV4hash4intoys6HasherVz_tF
362370
_$sScs12ContinuationV5yield4withAB11YieldResultOyxs5Error_p__Gs0E0OyxsAG_pG_tsAG_pRs_rlF
363371
_$sScs12ContinuationV5yieldAB11YieldResultOyytq___GyytRszrlF
364372
_$sScs12ContinuationV5yieldyAB11YieldResultOyxq___GxnF
365373
_$sScs12ContinuationV6finish8throwingyq_Sgn_tF
374+
_$sScs12ContinuationV9hashValueSivg
375+
_$sScs12ContinuationV9hashValueSivpMV
366376
_$sScs12ContinuationVMa
367377
_$sScs12ContinuationVMn
378+
_$sScs12ContinuationVyxq__GSHsMc
379+
_$sScs12ContinuationVyxq__GSQsMc
368380
_$sScs17makeAsyncIteratorScs0C0Vyxq__GyF
369381
_$sScs8IteratorV4nextxSgyYaKF
370382
_$sScs8IteratorV4nextxSgyYaKFTu

test/abi/Inputs/macOS/arm64/concurrency/baseline-asserts

+12
Original file line numberDiff line numberDiff line change
@@ -164,12 +164,18 @@ _$sScS12ContinuationV15BufferingPolicyO15bufferingOldestyADyx__GSicAFmlFWC
164164
_$sScS12ContinuationV15BufferingPolicyO9unboundedyADyx__GAFmlFWC
165165
_$sScS12ContinuationV15BufferingPolicyOMa
166166
_$sScS12ContinuationV15BufferingPolicyOMn
167+
_$sScS12ContinuationV2eeoiySbAByx_G_ADtFZ
168+
_$sScS12ContinuationV4hash4intoys6HasherVz_tF
167169
_$sScS12ContinuationV5yield4withAB11YieldResultOyx__Gs0E0Oyxs5NeverOG_tF
168170
_$sScS12ContinuationV5yieldAB11YieldResultOyyt__GyytRszlF
169171
_$sScS12ContinuationV5yieldyAB11YieldResultOyx__GxnF
170172
_$sScS12ContinuationV6finishyyF
173+
_$sScS12ContinuationV9hashValueSivg
174+
_$sScS12ContinuationV9hashValueSivpMV
171175
_$sScS12ContinuationVMa
172176
_$sScS12ContinuationVMn
177+
_$sScS12ContinuationVyx_GSHsMc
178+
_$sScS12ContinuationVyx_GSQsMc
173179
_$sScS17makeAsyncIteratorScS0C0Vyx_GyF
174180
_$sScS8IteratorV4nextxSgyYaF
175181
_$sScS8IteratorV4nextxSgyYaFTu
@@ -359,12 +365,18 @@ _$sScs12ContinuationV15BufferingPolicyO15bufferingOldestyADyxq___GSicAFms5ErrorR
359365
_$sScs12ContinuationV15BufferingPolicyO9unboundedyADyxq___GAFms5ErrorR_r0_lFWC
360366
_$sScs12ContinuationV15BufferingPolicyOMa
361367
_$sScs12ContinuationV15BufferingPolicyOMn
368+
_$sScs12ContinuationV2eeoiySbAByxq__G_ADtFZ
369+
_$sScs12ContinuationV4hash4intoys6HasherVz_tF
362370
_$sScs12ContinuationV5yield4withAB11YieldResultOyxs5Error_p__Gs0E0OyxsAG_pG_tsAG_pRs_rlF
363371
_$sScs12ContinuationV5yieldAB11YieldResultOyytq___GyytRszrlF
364372
_$sScs12ContinuationV5yieldyAB11YieldResultOyxq___GxnF
365373
_$sScs12ContinuationV6finish8throwingyq_Sgn_tF
374+
_$sScs12ContinuationV9hashValueSivg
375+
_$sScs12ContinuationV9hashValueSivpMV
366376
_$sScs12ContinuationVMa
367377
_$sScs12ContinuationVMn
378+
_$sScs12ContinuationVyxq__GSHsMc
379+
_$sScs12ContinuationVyxq__GSQsMc
368380
_$sScs17makeAsyncIteratorScs0C0Vyxq__GyF
369381
_$sScs8IteratorV4nextxSgyYaKF
370382
_$sScs8IteratorV4nextxSgyYaKFTu

test/abi/Inputs/macOS/x86_64/concurrency/baseline

+12
Original file line numberDiff line numberDiff line change
@@ -164,12 +164,18 @@ _$sScS12ContinuationV15BufferingPolicyO15bufferingOldestyADyx__GSicAFmlFWC
164164
_$sScS12ContinuationV15BufferingPolicyO9unboundedyADyx__GAFmlFWC
165165
_$sScS12ContinuationV15BufferingPolicyOMa
166166
_$sScS12ContinuationV15BufferingPolicyOMn
167+
_$sScS12ContinuationV2eeoiySbAByx_G_ADtFZ
168+
_$sScS12ContinuationV4hash4intoys6HasherVz_tF
167169
_$sScS12ContinuationV5yield4withAB11YieldResultOyx__Gs0E0Oyxs5NeverOG_tF
168170
_$sScS12ContinuationV5yieldAB11YieldResultOyyt__GyytRszlF
169171
_$sScS12ContinuationV5yieldyAB11YieldResultOyx__GxnF
170172
_$sScS12ContinuationV6finishyyF
173+
_$sScS12ContinuationV9hashValueSivg
174+
_$sScS12ContinuationV9hashValueSivpMV
171175
_$sScS12ContinuationVMa
172176
_$sScS12ContinuationVMn
177+
_$sScS12ContinuationVyx_GSHsMc
178+
_$sScS12ContinuationVyx_GSQsMc
173179
_$sScS17makeAsyncIteratorScS0C0Vyx_GyF
174180
_$sScS8IteratorV4nextxSgyYaF
175181
_$sScS8IteratorV4nextxSgyYaFTu
@@ -359,12 +365,18 @@ _$sScs12ContinuationV15BufferingPolicyO15bufferingOldestyADyxq___GSicAFms5ErrorR
359365
_$sScs12ContinuationV15BufferingPolicyO9unboundedyADyxq___GAFms5ErrorR_r0_lFWC
360366
_$sScs12ContinuationV15BufferingPolicyOMa
361367
_$sScs12ContinuationV15BufferingPolicyOMn
368+
_$sScs12ContinuationV2eeoiySbAByxq__G_ADtFZ
369+
_$sScs12ContinuationV4hash4intoys6HasherVz_tF
362370
_$sScs12ContinuationV5yield4withAB11YieldResultOyxs5Error_p__Gs0E0OyxsAG_pG_tsAG_pRs_rlF
363371
_$sScs12ContinuationV5yieldAB11YieldResultOyytq___GyytRszrlF
364372
_$sScs12ContinuationV5yieldyAB11YieldResultOyxq___GxnF
365373
_$sScs12ContinuationV6finish8throwingyq_Sgn_tF
374+
_$sScs12ContinuationV9hashValueSivg
375+
_$sScs12ContinuationV9hashValueSivpMV
366376
_$sScs12ContinuationVMa
367377
_$sScs12ContinuationVMn
378+
_$sScs12ContinuationVyxq__GSHsMc
379+
_$sScs12ContinuationVyxq__GSQsMc
368380
_$sScs17makeAsyncIteratorScs0C0Vyxq__GyF
369381
_$sScs8IteratorV4nextxSgyYaKF
370382
_$sScs8IteratorV4nextxSgyYaKFTu

test/abi/Inputs/macOS/x86_64/concurrency/baseline-asserts

+12
Original file line numberDiff line numberDiff line change
@@ -164,12 +164,18 @@ _$sScS12ContinuationV15BufferingPolicyO15bufferingOldestyADyx__GSicAFmlFWC
164164
_$sScS12ContinuationV15BufferingPolicyO9unboundedyADyx__GAFmlFWC
165165
_$sScS12ContinuationV15BufferingPolicyOMa
166166
_$sScS12ContinuationV15BufferingPolicyOMn
167+
_$sScS12ContinuationV2eeoiySbAByx_G_ADtFZ
168+
_$sScS12ContinuationV4hash4intoys6HasherVz_tF
167169
_$sScS12ContinuationV5yield4withAB11YieldResultOyx__Gs0E0Oyxs5NeverOG_tF
168170
_$sScS12ContinuationV5yieldAB11YieldResultOyyt__GyytRszlF
169171
_$sScS12ContinuationV5yieldyAB11YieldResultOyx__GxnF
170172
_$sScS12ContinuationV6finishyyF
173+
_$sScS12ContinuationV9hashValueSivg
174+
_$sScS12ContinuationV9hashValueSivpMV
171175
_$sScS12ContinuationVMa
172176
_$sScS12ContinuationVMn
177+
_$sScS12ContinuationVyx_GSHsMc
178+
_$sScS12ContinuationVyx_GSQsMc
173179
_$sScS17makeAsyncIteratorScS0C0Vyx_GyF
174180
_$sScS8IteratorV4nextxSgyYaF
175181
_$sScS8IteratorV4nextxSgyYaFTu
@@ -359,12 +365,18 @@ _$sScs12ContinuationV15BufferingPolicyO15bufferingOldestyADyxq___GSicAFms5ErrorR
359365
_$sScs12ContinuationV15BufferingPolicyO9unboundedyADyxq___GAFms5ErrorR_r0_lFWC
360366
_$sScs12ContinuationV15BufferingPolicyOMa
361367
_$sScs12ContinuationV15BufferingPolicyOMn
368+
_$sScs12ContinuationV2eeoiySbAByxq__G_ADtFZ
369+
_$sScs12ContinuationV4hash4intoys6HasherVz_tF
362370
_$sScs12ContinuationV5yield4withAB11YieldResultOyxs5Error_p__Gs0E0OyxsAG_pG_tsAG_pRs_rlF
363371
_$sScs12ContinuationV5yieldAB11YieldResultOyytq___GyytRszrlF
364372
_$sScs12ContinuationV5yieldyAB11YieldResultOyxq___GxnF
365373
_$sScs12ContinuationV6finish8throwingyq_Sgn_tF
374+
_$sScs12ContinuationV9hashValueSivg
375+
_$sScs12ContinuationV9hashValueSivpMV
366376
_$sScs12ContinuationVMa
367377
_$sScs12ContinuationVMn
378+
_$sScs12ContinuationVyxq__GSHsMc
379+
_$sScs12ContinuationVyxq__GSQsMc
368380
_$sScs17makeAsyncIteratorScs0C0Vyxq__GyF
369381
_$sScs8IteratorV4nextxSgyYaKF
370382
_$sScs8IteratorV4nextxSgyYaKFTu

0 commit comments

Comments
 (0)