Skip to content

Commit 74b371d

Browse files
committed
Remove ability to unsafeBitCast from CFLocale to NSLocale
1 parent e1e3bd3 commit 74b371d

File tree

3 files changed

+54
-71
lines changed

3 files changed

+54
-71
lines changed

Sources/Foundation/Locale.swift

-49
This file was deleted.

Sources/Foundation/NSLocale.swift

+54-21
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
@_exported import FoundationInternationalization
1414

1515
open class NSLocale: NSObject, NSCopying, NSSecureCoding {
16+
// Our own data
1617
var _locale: Locale
1718

1819
internal init(locale: Locale) {
@@ -398,21 +399,6 @@ extension NSLocale {
398399
}
399400
#endif
400401

401-
extension NSLocale : _SwiftBridgeable {
402-
typealias SwiftType = Locale
403-
internal var _swiftObject: Locale {
404-
return self._locale
405-
}
406-
}
407-
408-
extension NSLocale : _StructTypeBridgeable {
409-
public typealias _StructType = Locale
410-
411-
public func _bridgeToSwift() -> Locale {
412-
return Locale._unconditionallyBridgeFromObjectiveC(self)
413-
}
414-
}
415-
416402
// MARK: - Deprecated Locale API
417403

418404
extension Locale {
@@ -455,24 +441,71 @@ extension Locale {
455441

456442
// MARK: - CF Conversions
457443

444+
extension CFLocale : _NSBridgeable, _SwiftBridgeable {
445+
typealias NSType = NSLocale
446+
typealias SwiftType = Locale
447+
internal var _nsObject: NSLocale {
448+
return NSLocale(localeIdentifier: CFLocaleGetIdentifier(self)._swiftObject)
449+
}
450+
internal var _swiftObject: Locale {
451+
return _nsObject._swiftObject
452+
}
453+
}
454+
458455
extension Locale {
456+
typealias CFType = CFLocale
459457
internal var _cfObject: CFLocale {
460-
CFLocaleCreate(nil, identifier._cfObject)
458+
return _bridgeToObjectiveC()._cfObject
461459
}
462460
}
463461

464462
extension NSLocale {
465463
internal var _cfObject: CFLocale {
466-
CFLocaleCreate(nil, _locale.identifier._cfObject)
464+
CFLocaleCreate(nil, self.localeIdentifier._cfObject)
467465
}
468466
}
469467

470-
extension CFLocale {
468+
// MARK: - Swift Conversions
469+
470+
extension NSLocale : _SwiftBridgeable {
471+
typealias SwiftType = Locale
471472
internal var _swiftObject: Locale {
472-
Locale(identifier: CFLocaleGetIdentifier(self)._swiftObject)
473+
return Locale(identifier: self.localeIdentifier)
473474
}
475+
}
476+
477+
extension NSLocale : _StructTypeBridgeable {
478+
public typealias _StructType = Locale
474479

475-
internal var _nsObject: NSLocale {
476-
NSLocale(locale: _swiftObject)
480+
public func _bridgeToSwift() -> Locale {
481+
return Locale._unconditionallyBridgeFromObjectiveC(self)
482+
}
483+
}
484+
485+
extension Locale : _ObjectiveCBridgeable {
486+
public static func _isBridgedToObjectiveC() -> Bool {
487+
return true
488+
}
489+
490+
@_semantics("convertToObjectiveC")
491+
public func _bridgeToObjectiveC() -> NSLocale {
492+
return NSLocale(locale: Locale.current)
493+
}
494+
495+
public static func _forceBridgeFromObjectiveC(_ input: NSLocale, result: inout Locale?) {
496+
if !_conditionallyBridgeFromObjectiveC(input, result: &result) {
497+
fatalError("Unable to bridge \(NSLocale.self) to \(self)")
498+
}
499+
}
500+
501+
public static func _conditionallyBridgeFromObjectiveC(_ input: NSLocale, result: inout Locale?) -> Bool {
502+
result = input._locale
503+
return true
504+
}
505+
506+
public static func _unconditionallyBridgeFromObjectiveC(_ source: NSLocale?) -> Locale {
507+
var result: Locale? = nil
508+
_forceBridgeFromObjectiveC(source!, result: &result)
509+
return result!
477510
}
478511
}

Sources/Foundation/NSSwiftRuntime.swift

-1
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,6 @@ internal func __CFInitializeSwift() {
179179
_CFRuntimeBridgeTypeToClass(CFDateGetTypeID(), unsafeBitCast(NSDate.self, to: UnsafeRawPointer.self))
180180
_CFRuntimeBridgeTypeToClass(CFURLGetTypeID(), unsafeBitCast(NSURL.self, to: UnsafeRawPointer.self))
181181
_CFRuntimeBridgeTypeToClass(CFCalendarGetTypeID(), unsafeBitCast(NSCalendar.self, to: UnsafeRawPointer.self))
182-
_CFRuntimeBridgeTypeToClass(CFLocaleGetTypeID(), unsafeBitCast(NSLocale.self, to: UnsafeRawPointer.self))
183182
_CFRuntimeBridgeTypeToClass(CFTimeZoneGetTypeID(), unsafeBitCast(NSTimeZone.self, to: UnsafeRawPointer.self))
184183
_CFRuntimeBridgeTypeToClass(CFCharacterSetGetTypeID(), unsafeBitCast(_NSCFCharacterSet.self, to: UnsafeRawPointer.self))
185184
_CFRuntimeBridgeTypeToClass(_CFKeyedArchiverUIDGetTypeID(), unsafeBitCast(_NSKeyedArchiverUID.self, to: UnsafeRawPointer.self))

0 commit comments

Comments
 (0)