mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
The _forceBridgeFromObjectiveC and _conditionallyBridgeFromObjectiveC requirements of the _ObjectiveCBridgeable protocol previously returned Self and Self?, respectively, where 'Self' is the value type that is bridged. This use of returns is fairly hostile to the idea of calling the witnesses for these requirements from the C++ part of the runtime, leading to "interesting" tricks with OpaqueExistentialContainer that made it hard to use these witnesses within the dynamic casting infrastructure. Replace the returns with inout Self? parameters, which are far easier to deal with in the C++ part of the runtime. Despite the churn because we're changing the _ObjectiveCBridgeable protocol, this is NFC. Swift SVN r20934
41 lines
1.1 KiB
Swift
41 lines
1.1 KiB
Swift
//===--- NSValue.swift - Bridging things in NSValue -------------*-swift-*-===//
|
|
//
|
|
// This source file is part of the Swift.org open source project
|
|
//
|
|
// Copyright (c) 2014 - 2015 Apple Inc. and the Swift project authors
|
|
// Licensed under Apache License v2.0 with Runtime Library Exception
|
|
//
|
|
// See http://swift.org/LICENSE.txt for license information
|
|
// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
extension NSRange : _ObjectiveCBridgeable {
|
|
public static func _isBridgedToObjectiveC() -> Bool {
|
|
return true
|
|
}
|
|
|
|
public static func _getObjectiveCType() -> Any.Type {
|
|
return NSValue.self
|
|
}
|
|
|
|
public func _bridgeToObjectiveC() -> NSValue {
|
|
return NSValue(range: self)
|
|
}
|
|
|
|
public static func _forceBridgeFromObjectiveC(
|
|
x: NSValue,
|
|
inout result: NSRange?
|
|
) {
|
|
result = x.rangeValue
|
|
}
|
|
|
|
public static func _conditionallyBridgeFromObjectiveC(
|
|
x: NSValue,
|
|
inout result: NSRange?
|
|
) -> Bool {
|
|
self._forceBridgeFromObjectiveC(x, result: &result)
|
|
return true
|
|
}
|
|
}
|