@@ -22,25 +22,34 @@ public struct PartialAsyncTask {
22
22
23
23
@frozen
24
24
public struct UnsafeContinuation < T> {
25
- private var context : Builtin . RawUnsafeContinuation
25
+ @ usableFromInline internal var context : Builtin . RawUnsafeContinuation
26
26
27
27
public func resume( returning: __owned T) { }
28
+
29
+ @_alwaysEmitIntoClient
30
+ internal init ( _ context: Builtin . RawUnsafeContinuation ) {
31
+ self . context = context
32
+ }
28
33
}
29
34
30
35
@frozen
31
36
public struct UnsafeThrowingContinuation < T> {
32
- private var context : Builtin . RawUnsafeContinuation
37
+ @ usableFromInline internal var context : Builtin . RawUnsafeContinuation
33
38
34
39
public func resume( returning: __owned T) { }
35
40
public func resume( throwing: __owned Error) { }
41
+
42
+ @_alwaysEmitIntoClient
43
+ internal init ( _ context: Builtin . RawUnsafeContinuation ) {
44
+ self . context = context
45
+ }
36
46
}
37
47
38
48
#if _runtime(_ObjC)
39
49
40
50
// Intrinsics used by SILGen to resume or fail continuations
41
51
// for
42
52
@_alwaysEmitIntoClient
43
- @usableFromInline
44
53
internal func _resumeUnsafeContinuation< T> (
45
54
_ continuation: UnsafeContinuation < T > ,
46
55
_ value: __owned T
@@ -49,7 +58,6 @@ internal func _resumeUnsafeContinuation<T>(
49
58
}
50
59
51
60
@_alwaysEmitIntoClient
52
- @usableFromInline
53
61
internal func _resumeUnsafeThrowingContinuation< T> (
54
62
_ continuation: UnsafeThrowingContinuation < T > ,
55
63
_ value: __owned T
@@ -58,7 +66,6 @@ internal func _resumeUnsafeThrowingContinuation<T>(
58
66
}
59
67
60
68
@_alwaysEmitIntoClient
61
- @usableFromInline
62
69
internal func _resumeUnsafeThrowingContinuationWithError< T> (
63
70
_ continuation: UnsafeThrowingContinuation < T > ,
64
71
_ error: __owned Error
@@ -67,3 +74,22 @@ internal func _resumeUnsafeThrowingContinuationWithError<T>(
67
74
}
68
75
69
76
#endif
77
+
78
+ // Wrappers around unsafe continuation builtins
79
+ @_alwaysEmitIntoClient
80
+ public func withUnsafeContinuation< T> (
81
+ _ fn: ( UnsafeContinuation < T > ) -> Void
82
+ ) async -> T {
83
+ return await Builtin . withUnsafeContinuation {
84
+ fn ( UnsafeContinuation < T > ( $0) )
85
+ }
86
+ }
87
+
88
+ @_alwaysEmitIntoClient
89
+ public func withUnsafeThrowingContinuation< T> (
90
+ _ fn: ( UnsafeThrowingContinuation < T > ) -> Void
91
+ ) async throws -> T {
92
+ return try await Builtin . withUnsafeThrowingContinuation {
93
+ fn ( UnsafeThrowingContinuation < T > ( $0) )
94
+ }
95
+ }
0 commit comments