Skip to content

Commit 1b2e031

Browse files
Added Hashable conformance to Async(Throwing)Stream.Continuation
1 parent fcec1cd commit 1b2e031

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
@@ -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

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

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

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