13
13
/// A value that represents either a success or a failure, including an
14
14
/// associated value in each case.
15
15
@frozen
16
- public enum Result < Success: ~ Copyable, Failure: Error > {
16
+ public enum Result < Success: ~ Copyable & ~ Escapable , Failure: Error > {
17
17
/// A success, storing a `Success` value.
18
18
case success( Success )
19
19
20
20
/// A failure, storing a `Failure` value.
21
21
case failure( Failure )
22
22
}
23
23
24
- extension Result : Copyable where Success: Copyable { }
24
+ extension Result : Copyable where Success: Copyable /*& ~Escapable*/ { }
25
25
26
- extension Result : Sendable where Success: Sendable & ~ Copyable { }
26
+ extension Result : Escapable where Success: Escapable /*& ~Copyable*/ { }
27
+
28
+ extension Result : Sendable where Success: Sendable & ~ Copyable & ~ Escapable { }
27
29
28
30
extension Result : Equatable where Success: Equatable , Failure: Equatable { }
29
31
@@ -62,7 +64,9 @@ extension Result {
62
64
return . failure( failure)
63
65
}
64
66
}
67
+ }
65
68
69
+ extension Result {
66
70
@_spi ( SwiftStdlibLegacyABI) @available ( swift, obsoleted: 1 )
67
71
@_silgen_name ( " $ss6ResultO3mapyAByqd__q_Gqd__xXElF " )
68
72
@usableFromInline
@@ -106,7 +110,7 @@ extension Result where Success: ~Copyable {
106
110
}
107
111
}
108
112
109
- extension Result where Success: ~ Copyable {
113
+ extension Result where Success: ~ Copyable & ~ Escapable {
110
114
/// Returns a new result, mapping any failure value using the given
111
115
/// transformation.
112
116
///
@@ -202,7 +206,9 @@ extension Result {
202
206
return . failure( failure)
203
207
}
204
208
}
209
+ }
205
210
211
+ extension Result {
206
212
@_spi ( SwiftStdlibLegacyABI) @available ( swift, obsoleted: 1 )
207
213
@_silgen_name ( " $ss6ResultO7flatMapyAByqd__q_GADxXElF " )
208
214
@usableFromInline
@@ -246,7 +252,7 @@ extension Result where Success: ~Copyable {
246
252
}
247
253
}
248
254
249
- extension Result where Success: ~ Copyable {
255
+ extension Result where Success: ~ Copyable & ~ Escapable {
250
256
/// Returns a new result, mapping any failure value using the given
251
257
/// transformation and unwrapping the produced result.
252
258
///
@@ -283,7 +289,7 @@ extension Result {
283
289
}
284
290
}
285
291
286
- extension Result where Success: ~ Copyable {
292
+ extension Result where Success: ~ Copyable & ~ Escapable {
287
293
/// Returns the success value as a throwing expression.
288
294
///
289
295
/// Use this method to retrieve the value of this result if it represents a
@@ -311,21 +317,6 @@ extension Result where Success: ~Copyable {
311
317
}
312
318
}
313
319
314
- extension Result where Success: ~ Copyable {
315
- /// Creates a new result by evaluating a throwing closure, capturing the
316
- /// returned value as a success, or any thrown error as a failure.
317
- ///
318
- /// - Parameter body: A potentially throwing closure to evaluate.
319
- @_alwaysEmitIntoClient
320
- public init ( catching body: ( ) throws ( Failure ) -> Success ) {
321
- do {
322
- self = . success( try body ( ) )
323
- } catch {
324
- self = . failure( error)
325
- }
326
- }
327
- }
328
-
329
320
extension Result {
330
321
/// ABI: Historical get() throws
331
322
@_spi ( SwiftStdlibLegacyABI) @available ( swift, obsoleted: 1 )
@@ -342,6 +333,22 @@ extension Result {
342
333
343
334
}
344
335
336
+ extension Result where Success: ~ Copyable {
337
+ /// Creates a new result by evaluating a throwing closure, capturing the
338
+ /// returned value as a success, or any thrown error as a failure.
339
+ ///
340
+ /// - Parameter body: A potentially throwing closure to evaluate.
341
+ @_alwaysEmitIntoClient
342
+ public init ( catching body: ( ) throws ( Failure ) -> Success ) {
343
+ // FIXME: This should allow a non-escapable `Success` -- but what's `self`'s lifetime dependence in that case?
344
+ do {
345
+ self = . success( try body ( ) )
346
+ } catch {
347
+ self = . failure( error)
348
+ }
349
+ }
350
+ }
351
+
345
352
extension Result where Failure == Swift . Error {
346
353
/// ABI: Historical init(catching:)
347
354
@_spi ( SwiftStdlibLegacyABI) @available ( swift, obsoleted: 1 )
0 commit comments