1
1
import Builtin
2
2
3
+ /// Unsafely discard any lifetime dependency on the `dependent` argument. Return
4
+ /// a value identical to `dependent` with a lifetime dependency on the caller's
5
+ /// borrow scope of the `source` argument.
6
+ @unsafe
3
7
@_unsafeNonescapableResult
4
- @inlinable @inline ( __always)
8
+ @_alwaysEmitIntoClient
9
+ @_transparent
5
10
@lifetime ( borrow source)
6
- public func _overrideLifetime<
7
- T: ~ Copyable & ~ Escapable,
8
- U: ~ Copyable & ~ Escapable
11
+ internal func _overrideLifetime<
12
+ T: ~ Copyable & ~ Escapable, U: ~ Copyable & ~ Escapable
9
13
> (
10
- of dependent: consuming T ,
11
- to source: borrowing U
14
+ _ dependent: consuming T , borrowing source: borrowing U
12
15
) -> T {
16
+ // TODO: Remove @_unsafeNonescapableResult. Instead, the unsafe dependence
17
+ // should be expressed by a builtin that is hidden within the function body.
13
18
dependent
14
19
}
15
20
21
+ /// Unsafely discard any lifetime dependency on the `dependent` argument. Return
22
+ /// a value identical to `dependent` that inherits all lifetime dependencies from
23
+ /// the `source` argument.
24
+ @unsafe
16
25
@_unsafeNonescapableResult
17
- @inlinable @inline ( __always)
26
+ @_alwaysEmitIntoClient
27
+ @_transparent
18
28
@lifetime ( source)
19
- public func _overrideLifetime<
20
- T: ~ Copyable & ~ Escapable,
21
- U: ~ Copyable & ~ Escapable
29
+ internal func _overrideLifetime<
30
+ T: ~ Copyable & ~ Escapable, U: ~ Copyable & ~ Escapable
22
31
> (
23
- of dependent: consuming T ,
24
- copyingFrom source: consuming U
32
+ _ dependent: consuming T , copying source: borrowing U
25
33
) -> T {
34
+ // TODO: Remove @_unsafeNonescapableResult. Instead, the unsafe dependence
35
+ // should be expressed by a builtin that is hidden within the function body.
26
36
dependent
27
37
}
28
38
39
+ @unsafe
29
40
@_unsafeNonescapableResult
30
- @inlinable @inline ( __always)
41
+ @_alwaysEmitIntoClient
42
+ @_transparent
31
43
@lifetime ( source)
32
- public func _overrideLifetime<
33
- T: ~ Copyable & ~ Escapable,
34
- U: ~ Copyable & ~ Escapable
44
+ internal func _overrideLifetime<
45
+ T: ~ Copyable & ~ Escapable, U: ~ Copyable & ~ Escapable
35
46
> (
36
- of dependent: consuming T ,
37
- mutating source: inout U
47
+ _ dependent: consuming T , mutating source: inout U
38
48
) -> T {
49
+ // TODO: Remove @_unsafeNonescapableResult. Instead, the unsafe dependence
50
+ // should be expressed by a builtin that is hidden within the function body.
39
51
dependent
40
52
}
41
53
@@ -91,7 +103,7 @@ extension MutableSpan where Element: ~Copyable {
91
103
" baseAddress must be properly aligned to access Element "
92
104
)
93
105
let ms = MutableSpan < Element > ( _unchecked: buffer)
94
- self = _overrideLifetime ( of : ms, to : buffer)
106
+ self = _overrideLifetime ( ms, borrowing : buffer)
95
107
}
96
108
97
109
@_alwaysEmitIntoClient
@@ -103,7 +115,7 @@ extension MutableSpan where Element: ~Copyable {
103
115
precondition ( count >= 0 , " Count must not be negative " )
104
116
let buffer = UnsafeMutableBufferPointer ( start: start, count: count)
105
117
let ms = MutableSpan ( _unsafeElements: buffer)
106
- self = _overrideLifetime ( of : ms, to : start)
118
+ self = _overrideLifetime ( ms, borrowing : start)
107
119
}
108
120
}
109
121
@@ -117,7 +129,7 @@ extension MutableSpan {
117
129
) {
118
130
let rb = UnsafeMutableBufferPointer ( rebasing: elements)
119
131
let ms = MutableSpan ( _unsafeElements: rb)
120
- self = _overrideLifetime ( of : ms, to : rb)
132
+ self = _overrideLifetime ( ms, borrowing : rb)
121
133
}
122
134
}
123
135
@@ -142,7 +154,7 @@ extension MutableSpan where Element: BitwiseCopyable {
142
154
count: count
143
155
)
144
156
let ms = MutableSpan ( _unsafeElements: elements)
145
- self = _overrideLifetime ( of : ms, to : buffer)
157
+ self = _overrideLifetime ( ms, borrowing : buffer)
146
158
}
147
159
148
160
@_alwaysEmitIntoClient
@@ -154,7 +166,7 @@ extension MutableSpan where Element: BitwiseCopyable {
154
166
precondition ( byteCount >= 0 , " Count must not be negative " )
155
167
let bytes = UnsafeMutableRawBufferPointer ( start: pointer, count: byteCount)
156
168
let ms = MutableSpan ( _unsafeBytes: bytes)
157
- self = _overrideLifetime ( of : ms, to : pointer)
169
+ self = _overrideLifetime ( ms, borrowing : pointer)
158
170
}
159
171
160
172
@_alwaysEmitIntoClient
@@ -164,7 +176,7 @@ extension MutableSpan where Element: BitwiseCopyable {
164
176
) {
165
177
let bytes = UnsafeMutableRawBufferPointer ( rebasing: buffer)
166
178
let ms = MutableSpan ( _unsafeBytes: bytes)
167
- self = _overrideLifetime ( of : ms, to : buffer)
179
+ self = _overrideLifetime ( ms, borrowing : buffer)
168
180
}
169
181
}
170
182
@@ -176,7 +188,7 @@ extension Span where Element: ~Copyable {
176
188
let pointer = mutableSpan. _pointer? . assumingMemoryBound ( to: Element . self)
177
189
let buffer = UnsafeBufferPointer ( start: pointer, count: mutableSpan. count)
178
190
let span = Span ( _unsafeElements: buffer)
179
- self = _overrideLifetime ( of : span, to : mutableSpan)
191
+ self = _overrideLifetime ( span, borrowing : mutableSpan)
180
192
}
181
193
}
182
194
@@ -210,7 +222,7 @@ extension RawSpan {
210
222
let byteCount = mutableSpan. count &* MemoryLayout< Element> . stride
211
223
let buffer = UnsafeRawBufferPointer ( start: pointer, count: byteCount)
212
224
let rawSpan = RawSpan ( _unsafeBytes: buffer)
213
- self = _overrideLifetime ( of : rawSpan, to : mutableSpan)
225
+ self = _overrideLifetime ( rawSpan, borrowing : mutableSpan)
214
226
}
215
227
}
216
228
@@ -724,7 +736,7 @@ extension OutputSpan where Element: ~Copyable {
724
736
precondition ( capacity >= 0 , " Capacity must be 0 or greater " )
725
737
let buffer = UnsafeMutableBufferPointer ( start: pointer, count: capacity)
726
738
let os = OutputSpan ( _initializing: buffer, initialized: initialized)
727
- self = _overrideLifetime ( of : os, to : pointer)
739
+ self = _overrideLifetime ( os, borrowing : pointer)
728
740
}
729
741
}
730
742
@@ -739,7 +751,7 @@ extension OutputSpan {
739
751
) {
740
752
let rebased = UnsafeMutableBufferPointer ( rebasing: buffer)
741
753
let os = OutputSpan ( _initializing: rebased, initialized: 0 )
742
- self = _overrideLifetime ( of : os, to : buffer)
754
+ self = _overrideLifetime ( os, borrowing : buffer)
743
755
}
744
756
}
745
757
@@ -764,7 +776,7 @@ extension OutputSpan where Element: BitwiseCopyable {
764
776
let os = OutputSpan (
765
777
_unchecked: pointer, capacity: count, initialized: initialized
766
778
)
767
- self = _overrideLifetime ( of : os, to : bytes)
779
+ self = _overrideLifetime ( os, borrowing : bytes)
768
780
}
769
781
770
782
@_alwaysEmitIntoClient
@@ -777,7 +789,7 @@ extension OutputSpan where Element: BitwiseCopyable {
777
789
precondition ( capacity >= 0 , " Capacity must be 0 or greater " )
778
790
let buffer = UnsafeMutableRawBufferPointer ( start: pointer, count: capacity)
779
791
let os = OutputSpan ( _initializing: buffer, initialized: initialized)
780
- self = _overrideLifetime ( of : os, to : pointer)
792
+ self = _overrideLifetime ( os, borrowing : pointer)
781
793
}
782
794
783
795
@_alwaysEmitIntoClient
@@ -788,7 +800,7 @@ extension OutputSpan where Element: BitwiseCopyable {
788
800
) {
789
801
let rebased = UnsafeMutableRawBufferPointer ( rebasing: buffer)
790
802
let os = OutputSpan ( _initializing: rebased, initialized: initialized)
791
- self = _overrideLifetime ( of : os, to : buffer)
803
+ self = _overrideLifetime ( os, borrowing : buffer)
792
804
}
793
805
}
794
806
@@ -1000,7 +1012,7 @@ extension OutputSpan where Element: ~Copyable {
1000
1012
let pointer = _pointer? . assumingMemoryBound ( to: Element . self)
1001
1013
let buffer = UnsafeBufferPointer ( start: pointer, count: _initialized)
1002
1014
let span = Span ( _unsafeElements: buffer)
1003
- return _overrideLifetime ( of : span, to : self )
1015
+ return _overrideLifetime ( span, borrowing : self )
1004
1016
}
1005
1017
}
1006
1018
@@ -1011,7 +1023,7 @@ extension OutputSpan where Element: ~Copyable {
1011
1023
let pointer = _pointer? . assumingMemoryBound ( to: Element . self)
1012
1024
let buffer = UnsafeMutableBufferPointer ( start: pointer, count: _initialized)
1013
1025
let span = MutableSpan ( _unsafeElements: buffer)
1014
- return _overrideLifetime ( of : span, mutating: & self )
1026
+ return _overrideLifetime ( span, mutating: & self )
1015
1027
}
1016
1028
}
1017
1029
}
@@ -1050,7 +1062,7 @@ extension Span {
1050
1062
// get {
1051
1063
// let nilBasedBuffer = UnsafeBufferPointer<Element>(start: nil, count: 0)
1052
1064
// let span = Span(_unsafeElements: nilBasedBuffer)
1053
- // return _overrideLifetime(of: span, to: immortalThing)
1065
+ // return _overrideLifetime(span, to: immortalThing)
1054
1066
// }
1055
1067
// }
1056
1068
//
@@ -1059,7 +1071,7 @@ extension Span {
1059
1071
// public init() {
1060
1072
// let nilBasedBuffer = UnsafeBufferPointer<Element>(start: nil, count: 0)
1061
1073
// let span = Span(_unsafeElements: nilBasedBuffer)
1062
- // self = _overrideLifetime(of: span, to: immortalThing)
1074
+ // self = _overrideLifetime(span, to: immortalThing)
1063
1075
// }
1064
1076
}
1065
1077
0 commit comments