Skip to content

Commit 6e4ab97

Browse files
authored
Merge pull request #3820 from apple/stdlib-move-reflection-function
stdlib: move a function from runtime to stubs
2 parents 4507da4 + 561ac46 commit 6e4ab97

File tree

4 files changed

+45
-26
lines changed

4 files changed

+45
-26
lines changed

stdlib/public/core/Reflection.swift

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -506,15 +506,15 @@ func _getClassChild<T>(_: Int, _: _MagicMirrorData) -> (T, _Mirror)
506506
@_silgen_name("swift_ClassMirror_quickLookObject")
507507
public func _swift_ClassMirror_quickLookObject(_: _MagicMirrorData) -> AnyObject
508508

509-
@_silgen_name("swift_isKind")
510-
func _swift_isKind(_ object: AnyObject, of: AnyObject) -> Bool
509+
@_silgen_name("_swift_stdlib_NSObject_isKindOfClass")
510+
internal func _swift_NSObject_isImpl(_ object: AnyObject, kindOf: AnyObject) -> Bool
511511

512-
func _isKind(_ object: AnyObject, of: String) -> Bool {
513-
return _swift_isKind(object, of: _bridgeAnythingToObjectiveC(of))
512+
internal func _is(_ object: AnyObject, kindOf `class`: String) -> Bool {
513+
return _swift_NSObject_isImpl(object, kindOf: `class` as AnyObject)
514514
}
515515

516516
func _getClassPlaygroundQuickLook(_ object: AnyObject) -> PlaygroundQuickLook? {
517-
if _isKind(object, of: "NSNumber") {
517+
if _is(object, kindOf: "NSNumber") {
518518
let number: _NSNumber = unsafeBitCast(object, to: _NSNumber.self)
519519
switch UInt8(number.objCType[0]) {
520520
case UInt8(ascii: "d"):
@@ -526,22 +526,22 @@ func _getClassPlaygroundQuickLook(_ object: AnyObject) -> PlaygroundQuickLook? {
526526
default:
527527
return .int(number.longLongValue)
528528
}
529-
} else if _isKind(object, of: "NSAttributedString") {
529+
} else if _is(object, kindOf: "NSAttributedString") {
530530
return .attributedString(object)
531-
} else if _isKind(object, of: "NSImage") ||
532-
_isKind(object, of: "UIImage") ||
533-
_isKind(object, of: "NSImageView") ||
534-
_isKind(object, of: "UIImageView") ||
535-
_isKind(object, of: "CIImage") ||
536-
_isKind(object, of: "NSBitmapImageRep") {
531+
} else if _is(object, kindOf: "NSImage") ||
532+
_is(object, kindOf: "UIImage") ||
533+
_is(object, kindOf: "NSImageView") ||
534+
_is(object, kindOf: "UIImageView") ||
535+
_is(object, kindOf: "CIImage") ||
536+
_is(object, kindOf: "NSBitmapImageRep") {
537537
return .image(object)
538-
} else if _isKind(object, of: "NSColor") ||
539-
_isKind(object, of: "UIColor") {
538+
} else if _is(object, kindOf: "NSColor") ||
539+
_is(object, kindOf: "UIColor") {
540540
return .color(object)
541-
} else if _isKind(object, of: "NSBezierPath") ||
542-
_isKind(object, of: "UIBezierPath") {
541+
} else if _is(object, kindOf: "NSBezierPath") ||
542+
_is(object, kindOf: "UIBezierPath") {
543543
return .bezierPath(object)
544-
} else if _isKind(object, of: "NSString") {
544+
} else if _is(object, kindOf: "NSString") {
545545
return .text(_forceBridgeFromObjectiveC(object, String.self))
546546
}
547547

stdlib/public/runtime/Reflection.mm

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -845,15 +845,6 @@ void swift_ObjCMirror_subscript(String *outString,
845845
return object;
846846
}
847847

848-
SWIFT_CC(swift) SWIFT_RUNTIME_STDLIB_INTERFACE
849-
extern "C" bool swift_isKind(id object, NSString *className) {
850-
bool result = [object isKindOfClass:NSClassFromString(className)];
851-
[object release];
852-
[className release];
853-
854-
return result;
855-
}
856-
857848
#endif
858849

859850
// -- MagicMirror implementation.

stdlib/public/stubs/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ if(SWIFT_HOST_VARIANT MATCHES "${SWIFT_DARWIN_VARIANTS}")
66
Availability.mm
77
DispatchShims.mm
88
FoundationHelpers.mm
9+
Reflection.mm
910
SwiftNativeNSXXXBase.mm.gyb)
1011
set(LLVM_OPTIONAL_SOURCES
1112
UnicodeNormalization.cpp)

stdlib/public/stubs/Reflection.mm

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
//===----------------------------------------------------------------------===//
2+
//
3+
// This source file is part of the Swift.org open source project
4+
//
5+
// Copyright (c) 2014 - 2016 Apple Inc. and the Swift project authors
6+
// Licensed under Apache License v2.0 with Runtime Library Exception
7+
//
8+
// See http://swift.org/LICENSE.txt for license information
9+
// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
10+
//
11+
//===----------------------------------------------------------------------===//
12+
13+
#include "swift/Runtime/Config.h"
14+
#import <Foundation/Foundation.h>
15+
16+
SWIFT_CC(swift)
17+
SWIFT_RUNTIME_STDLIB_INTERFACE
18+
extern "C" bool _swift_stdlib_NSObject_isKindOfClass(
19+
id NS_RELEASES_ARGUMENT _Nonnull object,
20+
NSString *NS_RELEASES_ARGUMENT _Nonnull className) {
21+
bool result = [object isKindOfClass:NSClassFromString(className)];
22+
[object release];
23+
[className release];
24+
25+
return result;
26+
}
27+

0 commit comments

Comments
 (0)