Skip to content

Commit b6d8495

Browse files
committed
Simplify accessor for metadata to the class symbol instead of the accessor
1 parent 59658af commit b6d8495

File tree

1 file changed

+13
-8
lines changed

1 file changed

+13
-8
lines changed

Foundation/NSObjCRuntime.swift

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,12 @@
1010

1111
import CoreFoundation
1212

13+
#if os(OSX) || os(iOS)
14+
import Darwin
15+
#elseif os(Linux)
16+
import Glibc
17+
#endif
18+
1319
#if os(OSX) || os(iOS)
1420
internal let kCFCompareLessThan = CFComparisonResult.CompareLessThan
1521
internal let kCFCompareEqualTo = CFComparisonResult.CompareEqualTo
@@ -257,17 +263,16 @@ public func NSStringFromClass(aClass: AnyClass) -> String {
257263
private let RTLD_DEFAULT = UnsafeMutablePointer<Void>(bitPattern: 0)
258264
#endif
259265

260-
typealias MetadataAccessor = @convention(c) () -> AnyClass?
261-
262266
/**
263267
Calls a metadata accessor given a metadata accessor symbol name.
264268
*/
265269
private func metadataFromAccessorName(mangledName : String) -> AnyClass? {
266-
let symbol : MetadataAccessor?
267-
268-
symbol = unsafeBitCast(dlsym(RTLD_DEFAULT, mangledName), MetadataAccessor.self)
269-
270-
return symbol != nil ? symbol!() : nil
270+
let symbol = dlsym(RTLD_DEFAULT, mangledName)
271+
if symbol != nil {
272+
return unsafeBitCast(symbol, AnyClass.self)
273+
} else {
274+
return nil
275+
}
271276
}
272277

273278
/**
@@ -316,7 +321,7 @@ public func NSClassFromString(aClassName: String) -> AnyClass? {
316321
fatalError("NSClassFromString() invalid mangled name \(mangledName)")
317322
}
318323

319-
let accessorName = "_TMa" + mangledName.bridge().substringFromIndex(3)
324+
let accessorName = "_TMC" + mangledName.bridge().substringFromIndex(3)
320325

321326
return metadataFromAccessorName(accessorName)
322327
}

0 commit comments

Comments
 (0)