@@ -79,10 +79,8 @@ extension ManagedBuffer where Element: ~Copyable {
79
79
@inlinable
80
80
public final class func create(
81
81
minimumCapacity: Int ,
82
- makingHeaderWith factory: (
83
- ManagedBuffer < Header , Element > ) throws -> Header
82
+ makingHeaderWith factory: ( ManagedBuffer < Header , Element > ) throws -> Header
84
83
) rethrows -> ManagedBuffer < Header , Element > {
85
-
86
84
let p = Builtin . allocWithTailElems_1 (
87
85
self ,
88
86
minimumCapacity. _builtinWordValue, Element . self)
@@ -124,42 +122,78 @@ extension ManagedBuffer where Element: ~Copyable {
124
122
internal final var headerAddress : UnsafeMutablePointer < Header > {
125
123
return UnsafeMutablePointer < Header > ( Builtin . addressof ( & header) )
126
124
}
125
+ }
127
126
127
+ extension ManagedBuffer where Element: ~ Copyable {
128
128
/// Call `body` with an `UnsafeMutablePointer` to the stored
129
129
/// `Header`.
130
130
///
131
131
/// - Note: This pointer is valid only for the duration of the
132
132
/// call to `body`.
133
- @_preInverseGenerics
134
- @inlinable
135
- public final func withUnsafeMutablePointerToHeader< R > (
136
- _ body: ( UnsafeMutablePointer < Header > ) throws -> R
137
- ) rethrows -> R {
138
- return try withUnsafeMutablePointers { ( v, _) in return try body ( v) }
133
+ @_alwaysEmitIntoClient
134
+ @inline ( __always )
135
+ public final func withUnsafeMutablePointerToHeader< E : Error , R : ~ Copyable > (
136
+ _ body: ( UnsafeMutablePointer < Header > ) throws ( E ) -> R
137
+ ) throws ( E ) -> R {
138
+ try withUnsafeMutablePointers { ( v, _ ) throws ( E ) in try body( v) }
139
139
}
140
140
141
141
/// Call `body` with an `UnsafeMutablePointer` to the `Element`
142
142
/// storage.
143
143
///
144
144
/// - Note: This pointer is valid only for the duration of the
145
145
/// call to `body`.
146
- @_preInverseGenerics
147
- @inlinable
148
- public final func withUnsafeMutablePointerToElements< R > (
149
- _ body: ( UnsafeMutablePointer < Element > ) throws -> R
150
- ) rethrows -> R {
151
- return try withUnsafeMutablePointers { return try body ( $1 ) }
146
+ @_alwaysEmitIntoClient
147
+ @inline ( __always )
148
+ public final func withUnsafeMutablePointerToElements< E : Error , R : ~ Copyable > (
149
+ _ body: ( UnsafeMutablePointer < Element > ) throws ( E ) -> R
150
+ ) throws ( E ) -> R {
151
+ try withUnsafeMutablePointers { ( _ , v ) throws ( E ) in try body( v ) }
152
152
}
153
153
154
154
/// Call `body` with `UnsafeMutablePointer`s to the stored `Header`
155
155
/// and raw `Element` storage.
156
156
///
157
157
/// - Note: These pointers are valid only for the duration of the
158
158
/// call to `body`.
159
- @_preInverseGenerics
160
- @inlinable
161
- public final func withUnsafeMutablePointers< R> (
162
- _ body: ( UnsafeMutablePointer < Header > , UnsafeMutablePointer < Element > ) throws -> R
159
+ @_alwaysEmitIntoClient
160
+ @inline ( __always)
161
+ public final func withUnsafeMutablePointers< E: Error , R: ~ Copyable> (
162
+ _ body: (
163
+ UnsafeMutablePointer < Header > , UnsafeMutablePointer < Element >
164
+ ) throws ( E) -> R
165
+ ) throws ( E ) -> R {
166
+ defer { _fixLifetime( self) }
167
+ return try body( headerAddress, firstElementAddress )
168
+ }
169
+ }
170
+
171
+ extension ManagedBuffer {
172
+ @_spi ( SwiftStdlibLegacyABI) @available ( swift, obsoleted: 1 )
173
+ @_silgen_name ( " $ss13ManagedBufferC25withUnsafeMutablePointersyqd__qd__SpyxG_Spyq_GtKXEKlF " )
174
+ @usableFromInline
175
+ internal final func __legacy_withUnsafeMutablePointerToHeader< R> (
176
+ _ body: ( UnsafeMutablePointer < Header > ) throws -> R
177
+ ) rethrows -> R {
178
+ return try withUnsafeMutablePointers { ( v, _) in return try body ( v) }
179
+ }
180
+
181
+ @_spi ( SwiftStdlibLegacyABI) @available ( swift, obsoleted: 1 )
182
+ @_silgen_name ( " $ss13ManagedBufferC32withUnsafeMutablePointerToHeaderyqd__qd__SpyxGKXEKlF " )
183
+ @usableFromInline
184
+ internal final func __legacy_withUnsafeMutablePointerToElements< R> (
185
+ _ body: ( UnsafeMutablePointer < Element > ) throws -> R
186
+ ) rethrows -> R {
187
+ return try withUnsafeMutablePointers { return try body ( $1) }
188
+ }
189
+
190
+ @_spi ( SwiftStdlibLegacyABI) @available ( swift, obsoleted: 1 )
191
+ @_silgen_name ( " $ss13ManagedBufferC34withUnsafeMutablePointerToElementsyqd__qd__Spyq_GKXEKlF " )
192
+ @usableFromInline
193
+ internal final func __legacy_withUnsafeMutablePointers< R> (
194
+ _ body: (
195
+ UnsafeMutablePointer < Header > , UnsafeMutablePointer < Element >
196
+ ) throws -> R
163
197
) rethrows -> R {
164
198
defer { _fixLifetime ( self ) }
165
199
return try body ( headerAddress, firstElementAddress)
@@ -202,7 +236,10 @@ extension ManagedBuffer where Element: ~Copyable {
202
236
/// }
203
237
///
204
238
@frozen
205
- public struct ManagedBufferPointer < Header, Element: ~ Copyable> {
239
+ public struct ManagedBufferPointer <
240
+ Header,
241
+ Element: ~ Copyable
242
+ > : Copyable {
206
243
207
244
@_preInverseGenerics
208
245
@usableFromInline
@@ -244,9 +281,6 @@ public struct ManagedBufferPointer<Header, Element: ~Copyable> {
244
281
ManagedBufferPointer ( unsafeBufferObject: $0) . capacity
245
282
} ) )
246
283
}
247
- // FIXME: workaround for <rdar://problem/18619176>. If we don't
248
- // access header somewhere, its addressor gets linked away
249
- _ = header
250
284
}
251
285
252
286
/// Manage the given `buffer`.
@@ -352,7 +386,9 @@ extension ManagedBufferPointer where Element: ~Copyable {
352
386
yield & _headerPointer. pointee
353
387
}
354
388
}
389
+ }
355
390
391
+ extension ManagedBufferPointer where Element: ~ Copyable {
356
392
/// Returns the object instance being used for storage.
357
393
@_preInverseGenerics
358
394
@inlinable
@@ -379,39 +415,36 @@ extension ManagedBufferPointer where Element: ~Copyable {
379
415
///
380
416
/// - Note: This pointer is valid only
381
417
/// for the duration of the call to `body`.
382
- @_preInverseGenerics
383
- @inlinable
384
- public func withUnsafeMutablePointerToHeader< R> (
385
- _ body: ( UnsafeMutablePointer < Header > ) throws -> R
386
- ) rethrows -> R {
387
- return try withUnsafeMutablePointers { ( v, _) in return try body ( v) }
418
+ @_alwaysEmitIntoClient
419
+ public func withUnsafeMutablePointerToHeader< E: Error , R: ~ Copyable> (
420
+ _ body: ( UnsafeMutablePointer < Header > ) throws ( E ) -> R
421
+ ) throws ( E ) -> R {
422
+ try withUnsafeMutablePointers { ( v, _ ) throws( E) in try body( v) }
388
423
}
389
424
390
425
/// Call `body` with an `UnsafeMutablePointer` to the `Element`
391
426
/// storage.
392
427
///
393
428
/// - Note: This pointer is valid only for the duration of the
394
429
/// call to `body`.
395
- @_preInverseGenerics
396
- @inlinable
397
- public func withUnsafeMutablePointerToElements< R> (
398
- _ body: ( UnsafeMutablePointer < Element > ) throws -> R
399
- ) rethrows -> R {
400
- return try withUnsafeMutablePointers { return try body ( $1) }
430
+ @_alwaysEmitIntoClient
431
+ public func withUnsafeMutablePointerToElements< E: Error , R: ~ Copyable> (
432
+ _ body: ( UnsafeMutablePointer < Element > ) throws ( E ) -> R
433
+ ) throws ( E ) -> R {
434
+ try withUnsafeMutablePointers { ( _, v ) throws( E) in try body( v) }
401
435
}
402
436
403
437
/// Call `body` with `UnsafeMutablePointer`s to the stored `Header`
404
438
/// and raw `Element` storage.
405
439
///
406
440
/// - Note: These pointers are valid only for the duration of the
407
441
/// call to `body`.
408
- @_preInverseGenerics
409
- @inlinable
410
- public func withUnsafeMutablePointers< R> (
442
+ @_alwaysEmitIntoClient
443
+ public func withUnsafeMutablePointers< E: Error , R: ~ Copyable> (
411
444
_ body: (
412
445
UnsafeMutablePointer < Header > , UnsafeMutablePointer < Element >
413
- ) throws -> R
414
- ) rethrows -> R {
446
+ ) throws ( E ) -> R
447
+ ) throws ( E ) -> R {
415
448
defer { _fixLifetime( _nativeBuffer) }
416
449
return try body( _headerPointer, _elementPointer )
417
450
}
@@ -427,6 +460,38 @@ extension ManagedBufferPointer where Element: ~Copyable {
427
460
}
428
461
}
429
462
463
+ extension ManagedBufferPointer {
464
+ @_spi ( SwiftStdlibLegacyABI) @available ( swift, obsoleted: 1 )
465
+ @_silgen_name ( " $ss20ManagedBufferPointerV017withUnsafeMutableC8ToHeaderyqd__qd__SpyxGKXEKlF " )
466
+ @usableFromInline
467
+ internal func withUnsafeMutablePointerToHeader< R> (
468
+ _ body: ( UnsafeMutablePointer < Header > ) throws -> R
469
+ ) rethrows -> R {
470
+ try withUnsafeMutablePointers { ( v, _) in try body ( v) }
471
+ }
472
+
473
+ @_spi ( SwiftStdlibLegacyABI) @available ( swift, obsoleted: 1 )
474
+ @_silgen_name ( " $ss20ManagedBufferPointerV017withUnsafeMutableC10ToElementsyqd__qd__Spyq_GKXEKlF " )
475
+ @usableFromInline
476
+ internal func withUnsafeMutablePointerToElements< R> (
477
+ _ body: ( UnsafeMutablePointer < Element > ) throws -> R
478
+ ) rethrows -> R {
479
+ try withUnsafeMutablePointers { ( _, v) in try body ( v) }
480
+ }
481
+
482
+ @_spi ( SwiftStdlibLegacyABI) @available ( swift, obsoleted: 1 )
483
+ @_silgen_name ( " $ss20ManagedBufferPointerV25withUnsafeMutablePointersyqd__qd__SpyxG_Spyq_GtKXEKlF " )
484
+ @usableFromInline
485
+ internal func withUnsafeMutablePointers< R> (
486
+ _ body: (
487
+ UnsafeMutablePointer < Header > , UnsafeMutablePointer < Element >
488
+ ) throws -> R
489
+ ) rethrows -> R {
490
+ defer { _fixLifetime ( _nativeBuffer) }
491
+ return try body ( _headerPointer, _elementPointer)
492
+ }
493
+ }
494
+
430
495
extension ManagedBufferPointer where Element: ~ Copyable {
431
496
@_preInverseGenerics
432
497
@inlinable
0 commit comments