Skip to content

Commit f37c498

Browse files
Added Hashable conformance to Async(Throwing)Stream.Continuation
1 parent 6221b29 commit f37c498

File tree

7 files changed

+86
-0
lines changed

7 files changed

+86
-0
lines changed

stdlib/public/Concurrency/AsyncStream.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -475,6 +475,16 @@ 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 9999, *)
479+
extension AsyncStream.Continuation: Hashable {
480+
public func hash(into hasher: inout Hasher) {
481+
return hasher.combine(ObjectIdentifier(storage))
482+
}
483+
public static func == (lhs: Self, rhs: Self) -> Bool {
484+
return lhs.storage === rhs.storage
485+
}
486+
}
487+
478488
#else
479489
@available(SwiftStdlib 5.1, *)
480490
@available(*, unavailable, message: "Unavailable in task-to-thread concurrency model")

stdlib/public/Concurrency/AsyncThrowingStream.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -521,6 +521,16 @@ 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 9999, *)
525+
extension AsyncThrowingStream.Continuation: Hashable {
526+
public func hash(into hasher: inout Hasher) {
527+
return hasher.combine(ObjectIdentifier(storage))
528+
}
529+
public static func == (lhs: Self, rhs: Self) -> Bool {
530+
return lhs.storage === rhs.storage
531+
}
532+
}
533+
524534
#else
525535
@available(SwiftStdlib 5.1, *)
526536
@available(*, unavailable, message: "Unavailable in task-to-thread concurrency model")

test/Concurrency/Runtime/async_stream.swift

Lines changed: 18 additions & 0 deletions
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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,12 +154,18 @@ _$sScS12ContinuationV15BufferingPolicyO15bufferingOldestyADyx__GSicAFmlFWC
154154
_$sScS12ContinuationV15BufferingPolicyO9unboundedyADyx__GAFmlFWC
155155
_$sScS12ContinuationV15BufferingPolicyOMa
156156
_$sScS12ContinuationV15BufferingPolicyOMn
157+
_$sScS12ContinuationV2eeoiySbAByx_G_ADtFZ
158+
_$sScS12ContinuationV4hash4intoys6HasherVz_tF
157159
_$sScS12ContinuationV5yield4withAB11YieldResultOyx__Gs0E0Oyxs5NeverOG_tF
158160
_$sScS12ContinuationV5yieldAB11YieldResultOyyt__GyytRszlF
159161
_$sScS12ContinuationV5yieldyAB11YieldResultOyx__GxnF
160162
_$sScS12ContinuationV6finishyyF
163+
_$sScS12ContinuationV9hashValueSivg
164+
_$sScS12ContinuationV9hashValueSivpMV
161165
_$sScS12ContinuationVMa
162166
_$sScS12ContinuationVMn
167+
_$sScS12ContinuationVyx_GSHsMc
168+
_$sScS12ContinuationVyx_GSQsMc
163169
_$sScS17makeAsyncIteratorScS0C0Vyx_GyF
164170
_$sScS8IteratorV4nextxSgyYaF
165171
_$sScS8IteratorV4nextxSgyYaFTu
@@ -336,12 +342,18 @@ _$sScs12ContinuationV15BufferingPolicyO15bufferingOldestyADyxq___GSicAFms5ErrorR
336342
_$sScs12ContinuationV15BufferingPolicyO9unboundedyADyxq___GAFms5ErrorR_r0_lFWC
337343
_$sScs12ContinuationV15BufferingPolicyOMa
338344
_$sScs12ContinuationV15BufferingPolicyOMn
345+
_$sScs12ContinuationV2eeoiySbAByxq__G_ADtFZ
346+
_$sScs12ContinuationV4hash4intoys6HasherVz_tF
339347
_$sScs12ContinuationV5yield4withAB11YieldResultOyxs5Error_p__Gs0E0OyxsAG_pG_tsAG_pRs_rlF
340348
_$sScs12ContinuationV5yieldAB11YieldResultOyytq___GyytRszrlF
341349
_$sScs12ContinuationV5yieldyAB11YieldResultOyxq___GxnF
342350
_$sScs12ContinuationV6finish8throwingyq_Sgn_tF
351+
_$sScs12ContinuationV9hashValueSivg
352+
_$sScs12ContinuationV9hashValueSivpMV
343353
_$sScs12ContinuationVMa
344354
_$sScs12ContinuationVMn
355+
_$sScs12ContinuationVyxq__GSHsMc
356+
_$sScs12ContinuationVyxq__GSQsMc
345357
_$sScs17makeAsyncIteratorScs0C0Vyxq__GyF
346358
_$sScs8IteratorV4nextxSgyYaKF
347359
_$sScs8IteratorV4nextxSgyYaKFTu

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,12 +154,18 @@ _$sScS12ContinuationV15BufferingPolicyO15bufferingOldestyADyx__GSicAFmlFWC
154154
_$sScS12ContinuationV15BufferingPolicyO9unboundedyADyx__GAFmlFWC
155155
_$sScS12ContinuationV15BufferingPolicyOMa
156156
_$sScS12ContinuationV15BufferingPolicyOMn
157+
_$sScS12ContinuationV2eeoiySbAByx_G_ADtFZ
158+
_$sScS12ContinuationV4hash4intoys6HasherVz_tF
157159
_$sScS12ContinuationV5yield4withAB11YieldResultOyx__Gs0E0Oyxs5NeverOG_tF
158160
_$sScS12ContinuationV5yieldAB11YieldResultOyyt__GyytRszlF
159161
_$sScS12ContinuationV5yieldyAB11YieldResultOyx__GxnF
160162
_$sScS12ContinuationV6finishyyF
163+
_$sScS12ContinuationV9hashValueSivg
164+
_$sScS12ContinuationV9hashValueSivpMV
161165
_$sScS12ContinuationVMa
162166
_$sScS12ContinuationVMn
167+
_$sScS12ContinuationVyx_GSHsMc
168+
_$sScS12ContinuationVyx_GSQsMc
163169
_$sScS17makeAsyncIteratorScS0C0Vyx_GyF
164170
_$sScS8IteratorV4nextxSgyYaF
165171
_$sScS8IteratorV4nextxSgyYaFTu
@@ -336,12 +342,18 @@ _$sScs12ContinuationV15BufferingPolicyO15bufferingOldestyADyxq___GSicAFms5ErrorR
336342
_$sScs12ContinuationV15BufferingPolicyO9unboundedyADyxq___GAFms5ErrorR_r0_lFWC
337343
_$sScs12ContinuationV15BufferingPolicyOMa
338344
_$sScs12ContinuationV15BufferingPolicyOMn
345+
_$sScs12ContinuationV2eeoiySbAByxq__G_ADtFZ
346+
_$sScs12ContinuationV4hash4intoys6HasherVz_tF
339347
_$sScs12ContinuationV5yield4withAB11YieldResultOyxs5Error_p__Gs0E0OyxsAG_pG_tsAG_pRs_rlF
340348
_$sScs12ContinuationV5yieldAB11YieldResultOyytq___GyytRszrlF
341349
_$sScs12ContinuationV5yieldyAB11YieldResultOyxq___GxnF
342350
_$sScs12ContinuationV6finish8throwingyq_Sgn_tF
351+
_$sScs12ContinuationV9hashValueSivg
352+
_$sScs12ContinuationV9hashValueSivpMV
343353
_$sScs12ContinuationVMa
344354
_$sScs12ContinuationVMn
355+
_$sScs12ContinuationVyxq__GSHsMc
356+
_$sScs12ContinuationVyxq__GSQsMc
345357
_$sScs17makeAsyncIteratorScs0C0Vyxq__GyF
346358
_$sScs8IteratorV4nextxSgyYaKF
347359
_$sScs8IteratorV4nextxSgyYaKFTu

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,12 +154,18 @@ _$sScS12ContinuationV15BufferingPolicyO15bufferingOldestyADyx__GSicAFmlFWC
154154
_$sScS12ContinuationV15BufferingPolicyO9unboundedyADyx__GAFmlFWC
155155
_$sScS12ContinuationV15BufferingPolicyOMa
156156
_$sScS12ContinuationV15BufferingPolicyOMn
157+
_$sScS12ContinuationV2eeoiySbAByx_G_ADtFZ
158+
_$sScS12ContinuationV4hash4intoys6HasherVz_tF
157159
_$sScS12ContinuationV5yield4withAB11YieldResultOyx__Gs0E0Oyxs5NeverOG_tF
158160
_$sScS12ContinuationV5yieldAB11YieldResultOyyt__GyytRszlF
159161
_$sScS12ContinuationV5yieldyAB11YieldResultOyx__GxnF
160162
_$sScS12ContinuationV6finishyyF
163+
_$sScS12ContinuationV9hashValueSivg
164+
_$sScS12ContinuationV9hashValueSivpMV
161165
_$sScS12ContinuationVMa
162166
_$sScS12ContinuationVMn
167+
_$sScS12ContinuationVyx_GSHsMc
168+
_$sScS12ContinuationVyx_GSQsMc
163169
_$sScS17makeAsyncIteratorScS0C0Vyx_GyF
164170
_$sScS8IteratorV4nextxSgyYaF
165171
_$sScS8IteratorV4nextxSgyYaFTu
@@ -336,12 +342,18 @@ _$sScs12ContinuationV15BufferingPolicyO15bufferingOldestyADyxq___GSicAFms5ErrorR
336342
_$sScs12ContinuationV15BufferingPolicyO9unboundedyADyxq___GAFms5ErrorR_r0_lFWC
337343
_$sScs12ContinuationV15BufferingPolicyOMa
338344
_$sScs12ContinuationV15BufferingPolicyOMn
345+
_$sScs12ContinuationV2eeoiySbAByxq__G_ADtFZ
346+
_$sScs12ContinuationV4hash4intoys6HasherVz_tF
339347
_$sScs12ContinuationV5yield4withAB11YieldResultOyxs5Error_p__Gs0E0OyxsAG_pG_tsAG_pRs_rlF
340348
_$sScs12ContinuationV5yieldAB11YieldResultOyytq___GyytRszrlF
341349
_$sScs12ContinuationV5yieldyAB11YieldResultOyxq___GxnF
342350
_$sScs12ContinuationV6finish8throwingyq_Sgn_tF
351+
_$sScs12ContinuationV9hashValueSivg
352+
_$sScs12ContinuationV9hashValueSivpMV
343353
_$sScs12ContinuationVMa
344354
_$sScs12ContinuationVMn
355+
_$sScs12ContinuationVyxq__GSHsMc
356+
_$sScs12ContinuationVyxq__GSQsMc
345357
_$sScs17makeAsyncIteratorScs0C0Vyxq__GyF
346358
_$sScs8IteratorV4nextxSgyYaKF
347359
_$sScs8IteratorV4nextxSgyYaKFTu

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,12 +154,18 @@ _$sScS12ContinuationV15BufferingPolicyO15bufferingOldestyADyx__GSicAFmlFWC
154154
_$sScS12ContinuationV15BufferingPolicyO9unboundedyADyx__GAFmlFWC
155155
_$sScS12ContinuationV15BufferingPolicyOMa
156156
_$sScS12ContinuationV15BufferingPolicyOMn
157+
_$sScS12ContinuationV2eeoiySbAByx_G_ADtFZ
158+
_$sScS12ContinuationV4hash4intoys6HasherVz_tF
157159
_$sScS12ContinuationV5yield4withAB11YieldResultOyx__Gs0E0Oyxs5NeverOG_tF
158160
_$sScS12ContinuationV5yieldAB11YieldResultOyyt__GyytRszlF
159161
_$sScS12ContinuationV5yieldyAB11YieldResultOyx__GxnF
160162
_$sScS12ContinuationV6finishyyF
163+
_$sScS12ContinuationV9hashValueSivg
164+
_$sScS12ContinuationV9hashValueSivpMV
161165
_$sScS12ContinuationVMa
162166
_$sScS12ContinuationVMn
167+
_$sScS12ContinuationVyx_GSHsMc
168+
_$sScS12ContinuationVyx_GSQsMc
163169
_$sScS17makeAsyncIteratorScS0C0Vyx_GyF
164170
_$sScS8IteratorV4nextxSgyYaF
165171
_$sScS8IteratorV4nextxSgyYaFTu
@@ -336,12 +342,18 @@ _$sScs12ContinuationV15BufferingPolicyO15bufferingOldestyADyxq___GSicAFms5ErrorR
336342
_$sScs12ContinuationV15BufferingPolicyO9unboundedyADyxq___GAFms5ErrorR_r0_lFWC
337343
_$sScs12ContinuationV15BufferingPolicyOMa
338344
_$sScs12ContinuationV15BufferingPolicyOMn
345+
_$sScs12ContinuationV2eeoiySbAByxq__G_ADtFZ
346+
_$sScs12ContinuationV4hash4intoys6HasherVz_tF
339347
_$sScs12ContinuationV5yield4withAB11YieldResultOyxs5Error_p__Gs0E0OyxsAG_pG_tsAG_pRs_rlF
340348
_$sScs12ContinuationV5yieldAB11YieldResultOyytq___GyytRszrlF
341349
_$sScs12ContinuationV5yieldyAB11YieldResultOyxq___GxnF
342350
_$sScs12ContinuationV6finish8throwingyq_Sgn_tF
351+
_$sScs12ContinuationV9hashValueSivg
352+
_$sScs12ContinuationV9hashValueSivpMV
343353
_$sScs12ContinuationVMa
344354
_$sScs12ContinuationVMn
355+
_$sScs12ContinuationVyxq__GSHsMc
356+
_$sScs12ContinuationVyxq__GSQsMc
345357
_$sScs17makeAsyncIteratorScs0C0Vyxq__GyF
346358
_$sScs8IteratorV4nextxSgyYaKF
347359
_$sScs8IteratorV4nextxSgyYaKFTu

0 commit comments

Comments
 (0)