2020//===----------------------------------------------------------------------===//
2121import SwiftShims
2222
23+ #if !$Embedded
24+
2325@frozen
2426@usableFromInline
2527internal struct _BridgeStorage < NativeClass: AnyObject > {
@@ -31,15 +33,9 @@ internal struct _BridgeStorage<NativeClass: AnyObject> {
3133
3234 // rawValue is passed inout to _isUnique. Although its value
3335 // is unchanged, it must appear mutable to the optimizer.
34- #if !$Embedded
3536 @usableFromInline
3637 internal var rawValue : Builtin . BridgeObject
37- #else
38- @usableFromInline
39- internal var rawValue : NativeClass
40- #endif
4138
42- #if !$Embedded
4339 @inlinable
4440 @inline ( __always)
4541 internal init ( native: Native , isFlagged flag: Bool ) {
@@ -52,16 +48,13 @@ internal struct _BridgeStorage<NativeClass: AnyObject> {
5248 native,
5349 flag ? ( 1 as UInt ) << _objectPointerLowSpareBitShift : 0 )
5450 }
55- #endif
5651
57- #if _runtime(_ObjC)
5852 @inlinable
5953 @inline ( __always)
6054 internal init ( objC: ObjC ) {
6155 _internalInvariant ( _usesNativeSwiftReferenceCounting ( NativeClass . self) )
6256 rawValue = _makeObjCBridgeObject ( objC)
6357 }
64- #endif
6558
6659 @inlinable
6760 @inline ( __always)
@@ -74,11 +67,7 @@ internal struct _BridgeStorage<NativeClass: AnyObject> {
7467 @inlinable
7568 @inline ( __always)
7669 internal init ( taggedPayload: UInt ) {
77- #if !$Embedded
7870 rawValue = _bridgeObject ( taggingPayload: taggedPayload)
79- #else
80- rawValue = Builtin . reinterpretCast ( taggedPayload)
81- #endif
8271 }
8372#endif
8473
@@ -97,13 +86,9 @@ internal struct _BridgeStorage<NativeClass: AnyObject> {
9786 @inlinable
9887 internal var isNative : Bool {
9988 @inline ( __always) get {
100- #if !$Embedded
10189 let result = Builtin . classifyBridgeObject ( rawValue)
10290 return !Bool( Builtin . or_Int1 ( result. isObjCObject,
10391 result. isObjCTaggedPointer) )
104- #else
105- return true
106- #endif
10792 }
10893 }
10994
@@ -117,13 +102,9 @@ internal struct _BridgeStorage<NativeClass: AnyObject> {
117102 @inlinable
118103 internal var isUnflaggedNative : Bool {
119104 @inline ( __always) get {
120- #if !$Embedded
121105 return ( _bitPattern ( rawValue) &
122106 ( _bridgeObjectTaggedPointerBits | _objCTaggedPointerBits |
123107 _objectPointerIsObjCBit | _BridgeStorage. flagMask) ) == 0
124- #else
125- return true
126- #endif
127108 }
128109 }
129110
@@ -138,26 +119,16 @@ internal struct _BridgeStorage<NativeClass: AnyObject> {
138119 internal var nativeInstance : Native {
139120 @inline ( __always) get {
140121 _internalInvariant ( isNative)
141- #if !$Embedded
142122 return Builtin . castReferenceFromBridgeObject ( rawValue)
143- #else
144- return rawValue
145- #endif
146123 }
147124 }
148125
149126 @inlinable
150127 internal var unflaggedNativeInstance : Native {
151128 @inline ( __always) get {
152129 _internalInvariant ( isNative)
153- #if !$Embedded
154130 _internalInvariant ( _nonPointerBits ( rawValue) == 0 )
155- #endif
156- #if !$Embedded
157131 return Builtin . reinterpretCast ( rawValue)
158- #else
159- return rawValue
160- #endif
161132 }
162133 }
163134
@@ -182,13 +153,93 @@ internal struct _BridgeStorage<NativeClass: AnyObject> {
182153 Builtin . endCOWMutation ( & rawValue)
183154 }
184155
185- #if _runtime(_ObjC)
186156 @inlinable
187157 internal var objCInstance : ObjC {
188158 @inline ( __always) get {
189159 _internalInvariant ( isObjC)
190160 return Builtin . castReferenceFromBridgeObject ( rawValue)
191161 }
192162 }
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+ }
193191#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+ }
194243}
244+
245+ #endif
0 commit comments