Skip to content

Commit 6e6aae8

Browse files
committed
Mark all _unconditionallyBridgeFromObjectiveC functions as @_effects(readonly)
This enables removal of those bridging calls for dead parameters. Read-only lets the optimizer remove such a call if the result is not used. Note that "readonly" means: no observable write operations. It's okay to allocate and initialize new objects. rdar://problem/44944094
1 parent 73aabff commit 6e6aae8

32 files changed

+68
-2
lines changed

stdlib/public/SDK/Dispatch/Data.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -356,6 +356,7 @@ extension DispatchData {
356356
return true
357357
}
358358

359+
@_effects(readonly)
359360
public static func _unconditionallyBridgeFromObjectiveC(_ source: __DispatchData?) -> DispatchData {
360361
var result: DispatchData?
361362
_forceBridgeFromObjectiveC(source!, result: &result)

stdlib/public/SDK/Foundation/AffineTransform.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,7 @@ extension AffineTransform : _ObjectiveCBridgeable {
317317
return true // Can't fail
318318
}
319319

320+
@_effects(readonly)
320321
public static func _unconditionallyBridgeFromObjectiveC(_ x: NSAffineTransform?) -> AffineTransform {
321322
guard let src = x else { return AffineTransform.identity }
322323
return AffineTransform(reference: src)

stdlib/public/SDK/Foundation/Calendar.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1113,6 +1113,7 @@ extension Calendar : _ObjectiveCBridgeable {
11131113
return true
11141114
}
11151115

1116+
@_effects(readonly)
11161117
public static func _unconditionallyBridgeFromObjectiveC(_ source: NSCalendar?) -> Calendar {
11171118
var result: Calendar?
11181119
_forceBridgeFromObjectiveC(source!, result: &result)

stdlib/public/SDK/Foundation/CharacterSet.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -782,6 +782,7 @@ extension CharacterSet : _ObjectiveCBridgeable {
782782
return true
783783
}
784784

785+
@_effects(readonly)
785786
public static func _unconditionallyBridgeFromObjectiveC(_ source: NSCharacterSet?) -> CharacterSet {
786787
guard let src = source else { return CharacterSet() }
787788
return CharacterSet(_bridged: src)

stdlib/public/SDK/Foundation/Data.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1902,7 +1902,8 @@ extension Data : _ObjectiveCBridgeable {
19021902
result = Data(referencing: input)
19031903
return true
19041904
}
1905-
1905+
1906+
@_effects(readonly)
19061907
public static func _unconditionallyBridgeFromObjectiveC(_ source: NSData?) -> Data {
19071908
guard let src = source else { return Data() }
19081909
return Data(referencing: src)

stdlib/public/SDK/Foundation/Date.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,7 @@ extension Date : _ObjectiveCBridgeable {
257257
return true
258258
}
259259

260+
@_effects(readonly)
260261
public static func _unconditionallyBridgeFromObjectiveC(_ source: NSDate?) -> Date {
261262
var result: Date?
262263
_forceBridgeFromObjectiveC(source!, result: &result)

stdlib/public/SDK/Foundation/DateComponents.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,7 @@ extension DateComponents : _ObjectiveCBridgeable {
338338
return true
339339
}
340340

341+
@_effects(readonly)
341342
public static func _unconditionallyBridgeFromObjectiveC(_ source: NSDateComponents?) -> DateComponents {
342343
guard let src = source else { return DateComponents() }
343344
return DateComponents(reference: src)

stdlib/public/SDK/Foundation/DateInterval.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,7 @@ extension DateInterval : _ObjectiveCBridgeable {
216216
return true
217217
}
218218

219+
@_effects(readonly)
219220
public static func _unconditionallyBridgeFromObjectiveC(_ source: NSDateInterval?) -> DateInterval {
220221
var result: DateInterval?
221222
_forceBridgeFromObjectiveC(source!, result: &result)

stdlib/public/SDK/Foundation/Decimal.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -487,6 +487,7 @@ extension Decimal : _ObjectiveCBridgeable {
487487
return true
488488
}
489489

490+
@_effects(readonly)
490491
public static func _unconditionallyBridgeFromObjectiveC(_ source: NSDecimalNumber?) -> Decimal {
491492
guard let src = source else { return Decimal(_exponent: 0, _length: 0, _isNegative: 0, _isCompact: 0, _reserved: 0, _mantissa: (0, 0, 0, 0, 0, 0, 0, 0)) }
492493
return src.decimalValue

stdlib/public/SDK/Foundation/Foundation.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ extension AnyHashable : _ObjectiveCBridgeable {
7373
return result != nil
7474
}
7575

76+
@_effects(readonly)
7677
public static func _unconditionallyBridgeFromObjectiveC(
7778
_ source: NSObject?
7879
) -> AnyHashable {

stdlib/public/SDK/Foundation/IndexPath.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -780,6 +780,7 @@ extension IndexPath : _ObjectiveCBridgeable {
780780
return true
781781
}
782782

783+
@_effects(readonly)
783784
public static func _unconditionallyBridgeFromObjectiveC(_ source: NSIndexPath?) -> IndexPath {
784785
guard let src = source else { return IndexPath() }
785786
return IndexPath(nsIndexPath: src)

stdlib/public/SDK/Foundation/IndexSet.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -775,6 +775,7 @@ extension IndexSet : _ObjectiveCBridgeable {
775775
return true
776776
}
777777

778+
@_effects(readonly)
778779
public static func _unconditionallyBridgeFromObjectiveC(_ source: NSIndexSet?) -> IndexSet {
779780
guard let src = source else { return IndexSet() }
780781
return IndexSet(reference: src)

stdlib/public/SDK/Foundation/Locale.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -466,6 +466,7 @@ extension Locale : _ObjectiveCBridgeable {
466466
return true
467467
}
468468

469+
@_effects(readonly)
469470
public static func _unconditionallyBridgeFromObjectiveC(_ source: NSLocale?) -> Locale {
470471
var result: Locale?
471472
_forceBridgeFromObjectiveC(source!, result: &result)

stdlib/public/SDK/Foundation/Measurement.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,7 @@ extension Measurement : MeasurementBridgeType {
238238
}
239239
}
240240

241+
@_effects(readonly)
241242
public static func _unconditionallyBridgeFromObjectiveC(_ source: NSMeasurement?) -> Measurement {
242243
let u = source!.unit as! UnitType
243244
return Measurement(value: source!.doubleValue, unit: u)

stdlib/public/SDK/Foundation/NSArray.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ extension Array : _ObjectiveCBridgeable {
8484
return result != nil
8585
}
8686

87+
@_effects(readonly)
8788
public static func _unconditionallyBridgeFromObjectiveC(
8889
_ source: NSArray?
8990
) -> Array {

stdlib/public/SDK/Foundation/NSDictionary.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ extension Dictionary : _ObjectiveCBridgeable {
125125
return result != nil
126126
}
127127

128+
@_effects(readonly)
128129
public static func _unconditionallyBridgeFromObjectiveC(
129130
_ d: NSDictionary?
130131
) -> Dictionary {

stdlib/public/SDK/Foundation/NSError.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -547,6 +547,7 @@ extension _SwiftNewtypeWrapper where Self.RawValue == Error {
547547
}
548548

549549
@inlinable // FIXME(sil-serialize-all)
550+
@_effects(readonly)
550551
public static func _unconditionallyBridgeFromObjectiveC(
551552
_ source: NSError?
552553
) -> Self {

stdlib/public/SDK/Foundation/NSNumber.swift

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ extension Int8 : _ObjectiveCBridgeable {
4646
return true
4747
}
4848

49+
@_effects(readonly)
4950
public static func _unconditionallyBridgeFromObjectiveC(_ source: NSNumber?) -> Int8 {
5051
var result: Int8?
5152
guard let src = source else { return Int8(0) }
@@ -87,6 +88,7 @@ extension UInt8 : _ObjectiveCBridgeable {
8788
return true
8889
}
8990

91+
@_effects(readonly)
9092
public static func _unconditionallyBridgeFromObjectiveC(_ source: NSNumber?) -> UInt8 {
9193
var result: UInt8?
9294
guard let src = source else { return UInt8(0) }
@@ -128,6 +130,7 @@ extension Int16 : _ObjectiveCBridgeable {
128130
return true
129131
}
130132

133+
@_effects(readonly)
131134
public static func _unconditionallyBridgeFromObjectiveC(_ source: NSNumber?) -> Int16 {
132135
var result: Int16?
133136
guard let src = source else { return Int16(0) }
@@ -169,6 +172,7 @@ extension UInt16 : _ObjectiveCBridgeable {
169172
return true
170173
}
171174

175+
@_effects(readonly)
172176
public static func _unconditionallyBridgeFromObjectiveC(_ source: NSNumber?) -> UInt16 {
173177
var result: UInt16?
174178
guard let src = source else { return UInt16(0) }
@@ -210,6 +214,7 @@ extension Int32 : _ObjectiveCBridgeable {
210214
return true
211215
}
212216

217+
@_effects(readonly)
213218
public static func _unconditionallyBridgeFromObjectiveC(_ source: NSNumber?) -> Int32 {
214219
var result: Int32?
215220
guard let src = source else { return Int32(0) }
@@ -251,6 +256,7 @@ extension UInt32 : _ObjectiveCBridgeable {
251256
return true
252257
}
253258

259+
@_effects(readonly)
254260
public static func _unconditionallyBridgeFromObjectiveC(_ source: NSNumber?) -> UInt32 {
255261
var result: UInt32?
256262
guard let src = source else { return UInt32(0) }
@@ -292,6 +298,7 @@ extension Int64 : _ObjectiveCBridgeable {
292298
return true
293299
}
294300

301+
@_effects(readonly)
295302
public static func _unconditionallyBridgeFromObjectiveC(_ source: NSNumber?) -> Int64 {
296303
var result: Int64?
297304
guard let src = source else { return Int64(0) }
@@ -332,7 +339,8 @@ extension UInt64 : _ObjectiveCBridgeable {
332339
result = value
333340
return true
334341
}
335-
342+
343+
@_effects(readonly)
336344
public static func _unconditionallyBridgeFromObjectiveC(_ source: NSNumber?) -> UInt64 {
337345
var result: UInt64?
338346
guard let src = source else { return UInt64(0) }
@@ -374,6 +382,7 @@ extension Int : _ObjectiveCBridgeable {
374382
return true
375383
}
376384

385+
@_effects(readonly)
377386
public static func _unconditionallyBridgeFromObjectiveC(_ source: NSNumber?) -> Int {
378387
var result: Int?
379388
guard let src = source else { return Int(0) }
@@ -415,6 +424,7 @@ extension UInt : _ObjectiveCBridgeable {
415424
return true
416425
}
417426

427+
@_effects(readonly)
418428
public static func _unconditionallyBridgeFromObjectiveC(_ source: NSNumber?) -> UInt {
419429
var result: UInt?
420430
guard let src = source else { return UInt(0) }
@@ -467,6 +477,7 @@ extension Float : _ObjectiveCBridgeable {
467477
return result != nil
468478
}
469479

480+
@_effects(readonly)
470481
public static func _unconditionallyBridgeFromObjectiveC(_ source: NSNumber?) -> Float {
471482
var result: Float?
472483
guard let src = source else { return Float(0) }
@@ -521,6 +532,7 @@ extension Double : _ObjectiveCBridgeable {
521532
return result != nil
522533
}
523534

535+
@_effects(readonly)
524536
public static func _unconditionallyBridgeFromObjectiveC(_ source: NSNumber?) -> Double {
525537
var result: Double?
526538
guard let src = source else { return Double(0) }
@@ -572,6 +584,7 @@ extension Bool : _ObjectiveCBridgeable {
572584
return false
573585
}
574586

587+
@_effects(readonly)
575588
public static func _unconditionallyBridgeFromObjectiveC(_ source: NSNumber?) -> Bool {
576589
var result: Bool?
577590
guard let src = source else { return false }
@@ -614,6 +627,7 @@ extension CGFloat : _ObjectiveCBridgeable {
614627
return true
615628
}
616629

630+
@_effects(readonly)
617631
public static func _unconditionallyBridgeFromObjectiveC(_ source: NSNumber?) -> CGFloat {
618632
var result: CGFloat?
619633
guard let src = source else { return CGFloat(0) }

stdlib/public/SDK/Foundation/NSSet.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ extension Set : _ObjectiveCBridgeable {
111111
return result != nil
112112
}
113113

114+
@_effects(readonly)
114115
public static func _unconditionallyBridgeFromObjectiveC(_ s: NSSet?) -> Set {
115116
// `nil` has historically been used as a stand-in for an empty
116117
// set; map it to an empty set.

stdlib/public/SDK/Foundation/Notification.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ extension Notification : _ObjectiveCBridgeable {
120120
return true
121121
}
122122

123+
@_effects(readonly)
123124
public static func _unconditionallyBridgeFromObjectiveC(_ source: NSNotification?) -> Notification {
124125
guard let src = source else { return Notification(name: Notification.Name("")) }
125126
return Notification(name: src.name, object: src.object, userInfo: src.userInfo)

stdlib/public/SDK/Foundation/PersonNameComponents.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ extension PersonNameComponents : _ObjectiveCBridgeable {
129129
return true
130130
}
131131

132+
@_effects(readonly)
132133
public static func _unconditionallyBridgeFromObjectiveC(_ source: NSPersonNameComponents?) -> PersonNameComponents {
133134
var result: PersonNameComponents?
134135
_forceBridgeFromObjectiveC(source!, result: &result)

stdlib/public/SDK/Foundation/String.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ extension String : _ObjectiveCBridgeable {
5050
return result != nil
5151
}
5252

53+
@_effects(readonly)
5354
public static func _unconditionallyBridgeFromObjectiveC(
5455
_ source: NSString?
5556
) -> String {
@@ -82,6 +83,7 @@ extension Substring : _ObjectiveCBridgeable {
8283
return result != nil
8384
}
8485

86+
@_effects(readonly)
8587
public static func _unconditionallyBridgeFromObjectiveC(
8688
_ source: NSString?
8789
) -> Substring {

stdlib/public/SDK/Foundation/TimeZone.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,7 @@ extension TimeZone : _ObjectiveCBridgeable {
262262
return true
263263
}
264264

265+
@_effects(readonly)
265266
public static func _unconditionallyBridgeFromObjectiveC(_ source: NSTimeZone?) -> TimeZone {
266267
var result: TimeZone?
267268
_forceBridgeFromObjectiveC(source!, result: &result)

stdlib/public/SDK/Foundation/URL.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1205,6 +1205,7 @@ extension URL : _ObjectiveCBridgeable {
12051205
return true
12061206
}
12071207

1208+
@_effects(readonly)
12081209
public static func _unconditionallyBridgeFromObjectiveC(_ source: NSURL?) -> URL {
12091210
var result: URL?
12101211
_forceBridgeFromObjectiveC(source!, result: &result)

stdlib/public/SDK/Foundation/URLComponents.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -372,6 +372,7 @@ extension URLComponents : _ObjectiveCBridgeable {
372372
return true
373373
}
374374

375+
@_effects(readonly)
375376
public static func _unconditionallyBridgeFromObjectiveC(_ source: NSURLComponents?) -> URLComponents {
376377
guard let src = source else { return URLComponents() }
377378
return URLComponents(reference: src)
@@ -465,6 +466,7 @@ extension URLQueryItem : _ObjectiveCBridgeable {
465466
return true
466467
}
467468

469+
@_effects(readonly)
468470
public static func _unconditionallyBridgeFromObjectiveC(_ source: NSURLQueryItem?) -> URLQueryItem {
469471
var result: URLQueryItem?
470472
_forceBridgeFromObjectiveC(source!, result: &result)

stdlib/public/SDK/Foundation/URLRequest.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,7 @@ extension URLRequest : _ObjectiveCBridgeable {
286286
return true
287287
}
288288

289+
@_effects(readonly)
289290
public static func _unconditionallyBridgeFromObjectiveC(_ source: NSURLRequest?) -> URLRequest {
290291
var result: URLRequest?
291292
_forceBridgeFromObjectiveC(source!, result: &result)

stdlib/public/SDK/Foundation/UUID.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ extension UUID : _ObjectiveCBridgeable {
148148
return true
149149
}
150150

151+
@_effects(readonly)
151152
public static func _unconditionallyBridgeFromObjectiveC(_ source: NSUUID?) -> UUID {
152153
var result: UUID?
153154
_forceBridgeFromObjectiveC(source!, result: &result)

stdlib/public/SDK/Intents/INShortcut.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ extension INShortcut : _ObjectiveCBridgeable {
113113
return true
114114
}
115115

116+
@_effects(readonly)
116117
public static func _unconditionallyBridgeFromObjectiveC(_ source: INShortcutReference?) -> INShortcut {
117118
guard let src = source else { fatalError("Missing source") }
118119
return INShortcut(from: src)

stdlib/public/core/BridgeObjectiveC.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ public protocol _ObjectiveCBridgeable {
7878
/// implementation of `Swift.Array`'s conformance to
7979
/// `_ObjectiveCBridgeable` will produce an empty array rather than
8080
/// dynamically failing.
81+
@_effects(readonly)
8182
static func _unconditionallyBridgeFromObjectiveC(_ source: _ObjectiveCType?)
8283
-> Self
8384
}
@@ -133,6 +134,7 @@ public struct _BridgeableMetatype: _ObjectiveCBridgeable {
133134
}
134135

135136
@inlinable // FIXME(sil-serialize-all)
137+
@_effects(readonly)
136138
public static func _unconditionallyBridgeFromObjectiveC(_ source: AnyObject?)
137139
-> _BridgeableMetatype {
138140
var result: _BridgeableMetatype?

stdlib/public/core/NewtypeWrapper.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ extension _SwiftNewtypeWrapper where Self.RawValue : _ObjectiveCBridgeable {
133133
}
134134

135135
@inlinable // FIXME(sil-serialize-all)
136+
@_effects(readonly)
136137
public static func _unconditionallyBridgeFromObjectiveC(
137138
_ source: Self.RawValue._ObjectiveCType?
138139
) -> Self {
@@ -165,6 +166,7 @@ extension _SwiftNewtypeWrapper where Self.RawValue: AnyObject {
165166
}
166167

167168
@inlinable // FIXME(sil-serialize-all)
169+
@_effects(readonly)
168170
public static func _unconditionallyBridgeFromObjectiveC(
169171
_ source: Self.RawValue?
170172
) -> Self {

stdlib/public/core/Optional.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -727,6 +727,7 @@ extension Optional : _ObjectiveCBridgeable {
727727
}
728728

729729
@inlinable // FIXME(sil-serialize-all)
730+
@_effects(readonly)
730731
public static func _unconditionallyBridgeFromObjectiveC(_ source: AnyObject?)
731732
-> Optional<Wrapped> {
732733
if let nonnullSource = source {

0 commit comments

Comments
 (0)