20
20
//===----------------------------------------------------------------------===//
21
21
import SwiftShims
22
22
23
+ #if !$Embedded
24
+
23
25
@frozen
24
26
@usableFromInline
25
27
internal struct _BridgeStorage < NativeClass: AnyObject > {
@@ -31,15 +33,9 @@ internal struct _BridgeStorage<NativeClass: AnyObject> {
31
33
32
34
// rawValue is passed inout to _isUnique. Although its value
33
35
// is unchanged, it must appear mutable to the optimizer.
34
- #if !$Embedded
35
36
@usableFromInline
36
37
internal var rawValue : Builtin . BridgeObject
37
- #else
38
- @usableFromInline
39
- internal var rawValue : NativeClass
40
- #endif
41
38
42
- #if !$Embedded
43
39
@inlinable
44
40
@inline ( __always)
45
41
internal init ( native: Native , isFlagged flag: Bool ) {
@@ -52,16 +48,13 @@ internal struct _BridgeStorage<NativeClass: AnyObject> {
52
48
native,
53
49
flag ? ( 1 as UInt ) << _objectPointerLowSpareBitShift : 0 )
54
50
}
55
- #endif
56
51
57
- #if _runtime(_ObjC)
58
52
@inlinable
59
53
@inline ( __always)
60
54
internal init ( objC: ObjC ) {
61
55
_internalInvariant ( _usesNativeSwiftReferenceCounting ( NativeClass . self) )
62
56
rawValue = _makeObjCBridgeObject ( objC)
63
57
}
64
- #endif
65
58
66
59
@inlinable
67
60
@inline ( __always)
@@ -74,11 +67,7 @@ internal struct _BridgeStorage<NativeClass: AnyObject> {
74
67
@inlinable
75
68
@inline ( __always)
76
69
internal init ( taggedPayload: UInt ) {
77
- #if !$Embedded
78
70
rawValue = _bridgeObject ( taggingPayload: taggedPayload)
79
- #else
80
- rawValue = Builtin . reinterpretCast ( taggedPayload)
81
- #endif
82
71
}
83
72
#endif
84
73
@@ -97,13 +86,9 @@ internal struct _BridgeStorage<NativeClass: AnyObject> {
97
86
@inlinable
98
87
internal var isNative : Bool {
99
88
@inline ( __always) get {
100
- #if !$Embedded
101
89
let result = Builtin . classifyBridgeObject ( rawValue)
102
90
return !Bool( Builtin . or_Int1 ( result. isObjCObject,
103
91
result. isObjCTaggedPointer) )
104
- #else
105
- return true
106
- #endif
107
92
}
108
93
}
109
94
@@ -117,13 +102,9 @@ internal struct _BridgeStorage<NativeClass: AnyObject> {
117
102
@inlinable
118
103
internal var isUnflaggedNative : Bool {
119
104
@inline ( __always) get {
120
- #if !$Embedded
121
105
return ( _bitPattern ( rawValue) &
122
106
( _bridgeObjectTaggedPointerBits | _objCTaggedPointerBits |
123
107
_objectPointerIsObjCBit | _BridgeStorage. flagMask) ) == 0
124
- #else
125
- return true
126
- #endif
127
108
}
128
109
}
129
110
@@ -138,26 +119,16 @@ internal struct _BridgeStorage<NativeClass: AnyObject> {
138
119
internal var nativeInstance : Native {
139
120
@inline ( __always) get {
140
121
_internalInvariant ( isNative)
141
- #if !$Embedded
142
122
return Builtin . castReferenceFromBridgeObject ( rawValue)
143
- #else
144
- return rawValue
145
- #endif
146
123
}
147
124
}
148
125
149
126
@inlinable
150
127
internal var unflaggedNativeInstance : Native {
151
128
@inline ( __always) get {
152
129
_internalInvariant ( isNative)
153
- #if !$Embedded
154
130
_internalInvariant ( _nonPointerBits ( rawValue) == 0 )
155
- #endif
156
- #if !$Embedded
157
131
return Builtin . reinterpretCast ( rawValue)
158
- #else
159
- return rawValue
160
- #endif
161
132
}
162
133
}
163
134
@@ -182,13 +153,93 @@ internal struct _BridgeStorage<NativeClass: AnyObject> {
182
153
Builtin . endCOWMutation ( & rawValue)
183
154
}
184
155
185
- #if _runtime(_ObjC)
186
156
@inlinable
187
157
internal var objCInstance : ObjC {
188
158
@inline ( __always) get {
189
159
_internalInvariant ( isObjC)
190
160
return Builtin . castReferenceFromBridgeObject ( rawValue)
191
161
}
192
162
}
163
+ }
164
+
165
+ #else
166
+
167
+ @frozen
168
+ @usableFromInline
169
+ internal struct _BridgeStorage < NativeClass: AnyObject > {
170
+ @usableFromInline
171
+ internal typealias Native = NativeClass
172
+
173
+ // rawValue is passed inout to _isUnique. Although its value
174
+ // is unchanged, it must appear mutable to the optimizer.
175
+ @usableFromInline
176
+ internal var rawValue : NativeClass
177
+
178
+ @inlinable
179
+ @inline ( __always)
180
+ internal init ( native: Native ) {
181
+ _internalInvariant ( _usesNativeSwiftReferenceCounting ( NativeClass . self) )
182
+ rawValue = Builtin . reinterpretCast ( native)
183
+ }
184
+
185
+ #if _pointerBitWidth(_64)
186
+ @inlinable
187
+ @inline ( __always)
188
+ internal init ( taggedPayload: UInt ) {
189
+ rawValue = Builtin . reinterpretCast ( taggedPayload)
190
+ }
193
191
#endif
192
+
193
+ @inlinable
194
+ @inline ( __always)
195
+ internal mutating func isUniquelyReferencedNative( ) -> Bool {
196
+ return _isUnique ( & rawValue)
197
+ }
198
+
199
+ @_alwaysEmitIntoClient
200
+ @inline ( __always)
201
+ internal mutating func beginCOWMutationNative( ) -> Bool {
202
+ return Bool ( Builtin . beginCOWMutation ( & rawValue) )
203
+ }
204
+
205
+ @inlinable
206
+ static var flagMask : UInt {
207
+ @inline ( __always) get {
208
+ return ( 1 as UInt ) << _objectPointerLowSpareBitShift
209
+ }
210
+ }
211
+
212
+ @inlinable
213
+ internal var nativeInstance : Native {
214
+ @inline ( __always) get {
215
+ return rawValue
216
+ }
217
+ }
218
+
219
+ @inlinable
220
+ internal var unflaggedNativeInstance : Native {
221
+ @inline ( __always) get {
222
+ return rawValue
223
+ }
224
+ }
225
+
226
+ @inlinable
227
+ @inline ( __always)
228
+ internal mutating func isUniquelyReferencedUnflaggedNative( ) -> Bool {
229
+ return _isUnique_native ( & rawValue)
230
+ }
231
+
232
+ @_alwaysEmitIntoClient
233
+ @inline ( __always)
234
+ internal mutating func beginCOWMutationUnflaggedNative( ) -> Bool {
235
+ return Bool ( Builtin . beginCOWMutation_native ( & rawValue) )
236
+ }
237
+
238
+ @_alwaysEmitIntoClient
239
+ @inline ( __always)
240
+ internal mutating func endCOWMutation( ) {
241
+ Builtin . endCOWMutation ( & rawValue)
242
+ }
194
243
}
244
+
245
+ #endif
0 commit comments