Skip to content

Commit 29a7c52

Browse files
committed
[embedded] #if the entire _BridgeStorage struct instead of sprinkling a bunch of #ifs inside
1 parent 25f971d commit 29a7c52

File tree

1 file changed

+83
-32
lines changed

1 file changed

+83
-32
lines changed

stdlib/public/core/BridgeStorage.swift

Lines changed: 83 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
//===----------------------------------------------------------------------===//
2121
import SwiftShims
2222

23+
#if !$Embedded
24+
2325
@frozen
2426
@usableFromInline
2527
internal 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

Comments
 (0)