[runtime] Clean up symbol exports in casting and class introspection. (#13005)

This commit is contained in:
Greg Parker
2017-12-01 17:48:48 -08:00
committed by GitHub
parent a5d9ace6bf
commit 415b36dddc
7 changed files with 88 additions and 96 deletions

View File

@@ -1243,7 +1243,9 @@ static inline bool swift_unknownUnownedIsEqual(UnownedReference *ref,
#endif /* SWIFT_OBJC_INTEROP */
/// Return the name of a Swift type represented by a metadata object.
SWIFT_CC(swift) SWIFT_RUNTIME_EXPORT
/// func _getTypeName(_ type: Any.Type, qualified: Bool)
/// -> (UnsafePointer<UInt8>, Int)
SWIFT_CC(swift) SWIFT_RUNTIME_STDLIB_API
TwoWordPair<const char *, uintptr_t>::Return
swift_getTypeName(const Metadata *type, bool qualified);

View File

@@ -170,9 +170,7 @@ public func _bridgeAnythingToObjectiveC<T>(_ x: T) -> AnyObject {
return _bridgeAnythingNonVerbatimToObjectiveC(x)
}
/// COMPILER_INTRINSIC
@_inlineable // FIXME(sil-serialize-all)
@_silgen_name("_swift_bridgeAnythingNonVerbatimToObjectiveC")
@_silgen_name("")
public func _bridgeAnythingNonVerbatimToObjectiveC<T>(_ x: T) -> AnyObject
/// Convert a purportedly-nonnull `id` value from Objective-C into an Any.
@@ -214,8 +212,8 @@ public func _forceBridgeFromObjectiveC<T>(_ x: AnyObject, _: T.Type) -> T {
/// Convert `x` from its Objective-C representation to its Swift
/// representation.
/// COMPILER_INTRINSIC
@_inlineable // FIXME(sil-serialize-all)
@_silgen_name("_forceBridgeFromObjectiveC_bridgeable")
public func _forceBridgeFromObjectiveC_bridgeable<T:_ObjectiveCBridgeable> (
_ x: T._ObjectiveCType,
_: T.Type
@@ -253,8 +251,8 @@ public func _conditionallyBridgeFromObjectiveC<T>(
/// Attempt to convert `x` from its Objective-C representation to its Swift
/// representation.
/// COMPILER_INTRINSIC
@_inlineable // FIXME(sil-serialize-all)
@_silgen_name("_conditionallyBridgeFromObjectiveC_bridgeable")
public func _conditionallyBridgeFromObjectiveC_bridgeable<T:_ObjectiveCBridgeable>(
_ x: T._ObjectiveCType,
_: T.Type
@@ -264,10 +262,8 @@ public func _conditionallyBridgeFromObjectiveC_bridgeable<T:_ObjectiveCBridgeabl
return result
}
@_inlineable // FIXME(sil-serialize-all)
@_versioned // FIXME(sil-serialize-all)
@_silgen_name("_swift_bridgeNonVerbatimFromObjectiveC")
internal func _bridgeNonVerbatimFromObjectiveC<T>(
@_silgen_name("")
public func _bridgeNonVerbatimFromObjectiveC<T>(
_ x: AnyObject,
_ nativeType: T.Type,
_ result: inout T?
@@ -275,10 +271,8 @@ internal func _bridgeNonVerbatimFromObjectiveC<T>(
/// Helper stub to upcast to Any and store the result to an inout Any?
/// on the C++ runtime's behalf.
// COMPILER_INTRINSIC
@_inlineable // FIXME(sil-serialize-all)
@_silgen_name("_swift_bridgeNonVerbatimFromObjectiveCToAny")
public func _bridgeNonVerbatimFromObjectiveCToAny(
@_silgen_name("_bridgeNonVerbatimFromObjectiveCToAny")
internal func _bridgeNonVerbatimFromObjectiveCToAny(
_ x: AnyObject,
_ result: inout Any?
) {
@@ -286,10 +280,8 @@ public func _bridgeNonVerbatimFromObjectiveCToAny(
}
/// Helper stub to upcast to Optional on the C++ runtime's behalf.
// COMPILER_INTRINSIC
@_inlineable // FIXME(sil-serialize-all)
@_silgen_name("_swift_bridgeNonVerbatimBoxedValue")
public func _bridgeNonVerbatimBoxedValue<NativeType>(
@_silgen_name("_bridgeNonVerbatimBoxedValue")
internal func _bridgeNonVerbatimBoxedValue<NativeType>(
_ x: UnsafePointer<NativeType>,
_ result: inout NativeType?
) {
@@ -303,10 +295,8 @@ public func _bridgeNonVerbatimBoxedValue<NativeType>(
/// unchanged otherwise.
///
/// - Returns: `true` to indicate success, `false` to indicate failure.
@_inlineable // FIXME(sil-serialize-all)
@_versioned // FIXME(sil-serialize-all)
@_silgen_name("_swift_bridgeNonVerbatimFromObjectiveCConditional")
internal func _bridgeNonVerbatimFromObjectiveCConditional<T>(
@_silgen_name("")
public func _bridgeNonVerbatimFromObjectiveCConditional<T>(
_ x: AnyObject,
_ nativeType: T.Type,
_ result: inout T?
@@ -325,10 +315,8 @@ public func _isBridgedToObjectiveC<T>(_: T.Type) -> Bool {
return _isBridgedNonVerbatimToObjectiveC(T.self)
}
@_inlineable // FIXME(sil-serialize-all)
@_versioned // FIXME(sil-serialize-all)
@_silgen_name("_swift_isBridgedNonVerbatimToObjectiveC")
internal func _isBridgedNonVerbatimToObjectiveC<T>(_: T.Type) -> Bool
@_silgen_name("")
public func _isBridgedNonVerbatimToObjectiveC<T>(_: T.Type) -> Bool
/// A type that's bridged "verbatim" does not conform to
/// `_ObjectiveCBridgeable`, and can have its bits reinterpreted as an
@@ -348,10 +336,8 @@ public func _getBridgedObjectiveCType<T>(_: T.Type) -> Any.Type? {
return _getBridgedNonVerbatimObjectiveCType(T.self)
}
@_inlineable // FIXME(sil-serialize-all)
@_versioned // FIXME(sil-serialize-all)
@_silgen_name("_swift_getBridgedNonVerbatimObjectiveCType")
internal func _getBridgedNonVerbatimObjectiveCType<T>(_: T.Type) -> Any.Type?
@_silgen_name("")
public func _getBridgedNonVerbatimObjectiveCType<T>(_: T.Type) -> Any.Type?
// -- Pointer argument bridging

View File

@@ -322,7 +322,7 @@ public func _onFastPath() {
// when using RuntimeShims.h
@_inlineable // FIXME(sil-serialize-all)
@_versioned
@_silgen_name("swift_objc_class_usesNativeSwiftReferenceCounting")
@_silgen_name("_objcClassUsesNativeSwiftReferenceCounting")
internal func _usesNativeSwiftReferenceCounting(_ theClass: AnyClass) -> Bool
#else
@_inlineable // FIXME(sil-serialize-all)
@@ -335,14 +335,14 @@ internal func _usesNativeSwiftReferenceCounting(_ theClass: AnyClass) -> Bool {
@_inlineable // FIXME(sil-serialize-all)
@_versioned // FIXME(sil-serialize-all)
@_silgen_name("swift_class_getInstanceExtents")
internal func swift_class_getInstanceExtents(_ theClass: AnyClass)
@_silgen_name("_getSwiftClassInstanceExtents")
internal func getSwiftClassInstanceExtents(_ theClass: AnyClass)
-> (negative: UInt, positive: UInt)
@_inlineable // FIXME(sil-serialize-all)
@_versioned // FIXME(sil-serialize-all)
@_silgen_name("swift_objc_class_unknownGetInstanceExtents")
internal func swift_objc_class_unknownGetInstanceExtents(_ theClass: AnyClass)
@_silgen_name("_getObjCClassInstanceExtents")
internal func getObjCClassInstanceExtents(_ theClass: AnyClass)
-> (negative: UInt, positive: UInt)
@_inlineable // FIXME(sil-serialize-all)
@@ -350,9 +350,9 @@ internal func swift_objc_class_unknownGetInstanceExtents(_ theClass: AnyClass)
@inline(__always)
internal func _class_getInstancePositiveExtentSize(_ theClass: AnyClass) -> Int {
#if _runtime(_ObjC)
return Int(swift_objc_class_unknownGetInstanceExtents(theClass).positive)
return Int(getObjCClassInstanceExtents(theClass).positive)
#else
return Int(swift_class_getInstanceExtents(theClass).positive)
return Int(getSwiftClassInstanceExtents(theClass).positive)
#endif
}
@@ -488,16 +488,12 @@ internal func _makeBridgeObject(
)
}
@_inlineable // FIXME(sil-serialize-all)
@_versioned
@_silgen_name("_swift_class_getSuperclass")
internal func _swift_class_getSuperclass(_ t: AnyClass) -> AnyClass?
/// Returns the superclass of `t`, if any. The result is `nil` if `t` is
/// a root class or class protocol.
@_inlineable // FIXME(sil-serialize-all)
@inline(__always)
public // @testable
public
func _getSuperclass(_ t: AnyClass) -> AnyClass? {
return _swift_class_getSuperclass(t)
}

View File

@@ -92,9 +92,7 @@ func _typeName(_ type: Any.Type, qualified: Bool = true) -> String {
input: UnsafeBufferPointer(start: stringPtr, count: count))
}
@_inlineable // FIXME(sil-serialize-all)
@_versioned // FIXME(sil-serialize-all)
@_silgen_name("swift_getTypeByName")
@_silgen_name("")
internal func _getTypeByName(
_ name: UnsafePointer<UInt8>,
_ nameLength: UInt)
@@ -102,7 +100,6 @@ internal func _getTypeByName(
/// Lookup a class given a name. Until the demangled encoding of type
/// names is stabilized, this is limited to top-level class names (Foo.bar).
@_inlineable // FIXME(sil-serialize-all)
public // SPI(Foundation)
func _typeByName(_ name: String) -> Any.Type? {
let nameUTF8 = Array(name.utf8)

View File

@@ -113,7 +113,6 @@ std::string swift::nameForMetadata(const Metadata *type,
return result;
}
SWIFT_CC(swift)
TwoWordPair<const char *, uintptr_t>::Return
swift::swift_getTypeName(const Metadata *type, bool qualified) {
using Pair = TwoWordPair<const char *, uintptr_t>;
@@ -2972,8 +2971,12 @@ static id bridgeAnythingNonVerbatimToObjectiveC(OpaqueValue *src,
return (id)bridgeAnythingToSwiftValueObject(src, srcType, consume);
}
SWIFT_CC(swift) SWIFT_RUNTIME_STDLIB_INTERFACE
id _swift_bridgeAnythingNonVerbatimToObjectiveC(OpaqueValue *src,
/// public func _bridgeAnythingNonVerbatimToObjectiveC<T>(_ x: T) -> AnyObject
/// Called by inlined stdlib code.
#define _bridgeAnythingNonVerbatimToObjectiveC \
MANGLE_SYM(s38_bridgeAnythingNonVerbatimToObjectiveCyXlxlF)
SWIFT_CC(swift) SWIFT_RUNTIME_STDLIB_API
id _bridgeAnythingNonVerbatimToObjectiveC(OpaqueValue *src,
const Metadata *srcType) {
return bridgeAnythingNonVerbatimToObjectiveC(src, srcType, /*consume*/ true);
}
@@ -3031,8 +3034,12 @@ findBridgeWitness(const Metadata *T) {
return nullptr;
}
SWIFT_CC(swift) SWIFT_RUNTIME_STDLIB_INTERFACE
const Metadata *_swift_getBridgedNonVerbatimObjectiveCType(
// public func _getBridgedNonVerbatimObjectiveCType<T>(_: T.Type) -> Any.Type?
// Called by inlined stdlib code.
#define _getBridgedNonVerbatimObjectiveCType \
MANGLE_SYM(s36_getBridgedNonVerbatimObjectiveCTypeypXpSgxmlF)
SWIFT_CC(swift) SWIFT_RUNTIME_STDLIB_API
const Metadata *_getBridgedNonVerbatimObjectiveCType(
const Metadata *value, const Metadata *T
) {
// Classes and Objective-C existentials bridge verbatim.
@@ -3047,24 +3054,24 @@ const Metadata *_swift_getBridgedNonVerbatimObjectiveCType(
return nullptr;
}
// @_silgen_name("_swift_bridgeNonVerbatimFromObjectiveCToAny")
// @_silgen_name("_bridgeNonVerbatimFromObjectiveCToAny")
// func _bridgeNonVerbatimFromObjectiveCToAny(
// x: AnyObject,
// inout result: Any?
// )
SWIFT_CC(swift) SWIFT_RUNTIME_STDLIB_INTERFACE
SWIFT_CC(swift) SWIFT_RUNTIME_STDLIB_INTERNAL
void
_swift_bridgeNonVerbatimFromObjectiveCToAny(HeapObject *sourceValue,
_bridgeNonVerbatimFromObjectiveCToAny(HeapObject *sourceValue,
OpaqueValue *destValue);
// @_silgen_name("_swift_bridgeNonVerbatimBoxedValue")
// @_silgen_name("_bridgeNonVerbatimBoxedValue")
// func _bridgeNonVerbatimBoxedValue<NativeType>(
// x: UnsafePointer<NativeType>,
// inout result: NativeType?
// )
SWIFT_CC(swift) SWIFT_RUNTIME_STDLIB_INTERFACE
SWIFT_CC(swift) SWIFT_RUNTIME_STDLIB_INTERNAL
void
_swift_bridgeNonVerbatimBoxedValue(const OpaqueValue *sourceValue,
_bridgeNonVerbatimBoxedValue(const OpaqueValue *sourceValue,
OpaqueValue *destValue,
const Metadata *nativeType);
@@ -3079,8 +3086,7 @@ static bool tryBridgeNonVerbatimFromObjectiveCUniversal(
if (auto nativeExistential = dyn_cast<ExistentialTypeMetadata>(nativeType)) {
if (nativeExistential->Protocols.NumProtocols == 0 &&
!nativeExistential->isClassBounded()) {
_swift_bridgeNonVerbatimFromObjectiveCToAny(sourceValue,
destValue);
_bridgeNonVerbatimFromObjectiveCToAny(sourceValue, destValue);
return true;
}
}
@@ -3092,9 +3098,7 @@ static bool tryBridgeNonVerbatimFromObjectiveCUniversal(
std::tie(sourceType, sourceBoxedValue) = getValueFromSwiftValue(srcBox);
if (sourceType == nativeType) {
_swift_bridgeNonVerbatimBoxedValue(sourceBoxedValue,
destValue,
nativeType);
_bridgeNonVerbatimBoxedValue(sourceBoxedValue, destValue, nativeType);
return true;
}
}
@@ -3102,15 +3106,17 @@ static bool tryBridgeNonVerbatimFromObjectiveCUniversal(
return false;
}
// @_silgen_name("_swift_bridgeNonVerbatimFromObjectiveC")
// func _bridgeNonVerbatimFromObjectiveC<NativeType>(
// x: AnyObject,
// nativeType: NativeType.Type
// inout result: T?
// )
SWIFT_CC(swift) SWIFT_RUNTIME_STDLIB_INTERFACE
// Called by inlined stdlib code.
#define _bridgeNonVerbatimFromObjectiveC \
MANGLE_SYM(s32_bridgeNonVerbatimFromObjectiveCyyXl_xmxSgztlF)
SWIFT_CC(swift) SWIFT_RUNTIME_STDLIB_API
void
_swift_bridgeNonVerbatimFromObjectiveC(
_bridgeNonVerbatimFromObjectiveC(
HeapObject *sourceValue,
const Metadata *nativeType,
OpaqueValue *destValue,
@@ -3145,15 +3151,14 @@ _swift_bridgeNonVerbatimFromObjectiveC(
swift::crash("value type is not bridged to Objective-C");
}
// @_silgen_name("_swift_bridgeNonVerbatimFromObjectiveCConditional")
// func _bridgeNonVerbatimFromObjectiveCConditional<NativeType>(
// x: AnyObject,
// nativeType: T.Type,
// inout result: T?
// ) -> Bool
SWIFT_CC(swift) SWIFT_RUNTIME_STDLIB_INTERFACE
/// func _bridgeNonVerbatimFromObjectiveCConditional<NativeType>(
/// x: AnyObject, nativeType: T.Type, inout result: T?) -> Bool
/// Called by inlined stdlib code.
#define _bridgeNonVerbatimFromObjectiveCConditional \
MANGLE_SYM(s43_bridgeNonVerbatimFromObjectiveCConditionalSbyXl_xmxSgztlF)
SWIFT_CC(swift) SWIFT_RUNTIME_STDLIB_API
bool
_swift_bridgeNonVerbatimFromObjectiveCConditional(
_bridgeNonVerbatimFromObjectiveCConditional(
HeapObject *sourceValue,
const Metadata *nativeType,
OpaqueValue *destValue,
@@ -3195,10 +3200,12 @@ _swift_bridgeNonVerbatimFromObjectiveCConditional(
}
// func _isBridgedNonVerbatimToObjectiveC<T>(x: T.Type) -> Bool
SWIFT_CC(swift) SWIFT_RUNTIME_STDLIB_INTERFACE
bool _swift_isBridgedNonVerbatimToObjectiveC(
const Metadata *value, const Metadata *T
) {
// Called by inlined stdlib code.
#define _isBridgedNonVerbatimToObjectiveC \
MANGLE_SYM(s33_isBridgedNonVerbatimToObjectiveCSbxmlF)
SWIFT_CC(swift) SWIFT_RUNTIME_STDLIB_API
bool _isBridgedNonVerbatimToObjectiveC(const Metadata *value,
const Metadata *T) {
assert(!swift_isClassOrObjCExistentialTypeImpl(T));
auto bridgeWitness = findBridgeWitness(T);
@@ -3213,7 +3220,7 @@ bool _swift_isClassOrObjCExistentialType(const Metadata *value,
return swift_isClassOrObjCExistentialTypeImpl(T);
}
SWIFT_CC(swift)
SWIFT_CC(swift) SWIFT_RUNTIME_STDLIB_INTERNAL
const Metadata *swift::_swift_class_getSuperclass(const Metadata *theClass) {
if (const ClassMetadata *classType = theClass->getClassObject())
if (classHasSuperclass(classType))
@@ -3221,12 +3228,14 @@ const Metadata *swift::_swift_class_getSuperclass(const Metadata *theClass) {
return nullptr;
}
SWIFT_CC(c) SWIFT_RUNTIME_EXPORT
// Called by compiler-generated cast code.
SWIFT_CC(c) SWIFT_RUNTIME_STDLIB_API
bool swift_isClassType(const Metadata *type) {
return Metadata::isAnyKindOfClass(type->getKind());
}
SWIFT_CC(c) SWIFT_RUNTIME_EXPORT
// Called by compiler-generated code.
SWIFT_CC(c) SWIFT_RUNTIME_STDLIB_API
bool swift_isOptionalType(const Metadata *type) {
return type->getKind() == MetadataKind::Optional;
}

View File

@@ -258,10 +258,14 @@ _classByName(const llvm::StringRef typeName) {
/// \param typeName The name of a class in the form: <module>.<class>
/// \return Returns the metadata of the type, if found.
SWIFT_CC(swift)
SWIFT_RUNTIME_EXPORT
/// internal func _getTypeByName(_ name: UnsafePointer<UInt8>,
/// _ nameLength: UInt) -> Any.Type?
#define _getTypeByName \
MANGLE_SYM(s14_getTypeByNameypXpSgSPys5UInt8VG_SutF)
SWIFT_CC(swift) SWIFT_RUNTIME_STDLIB_INTERNAL
const Metadata *
swift_getTypeByName(const char *typeName, size_t typeNameLength) {
_getTypeByName(const char *typeName, size_t typeNameLength) {
llvm::StringRef name(typeName, typeNameLength);
return _classByName(name);
}

View File

@@ -453,10 +453,9 @@ bool swift::usesNativeSwiftReferenceCounting(const ClassMetadata *theClass) {
/// reference-counting. The metadata is known to correspond to a class
/// type, but note that does not imply being known to be a ClassMetadata
/// due to the existence of ObjCClassWrapper.
SWIFT_CC(swift)
SWIFT_RUNTIME_EXPORT
SWIFT_CC(swift) SWIFT_RUNTIME_STDLIB_INTERNAL
bool
swift_objc_class_usesNativeSwiftReferenceCounting(const Metadata *theClass) {
_objcClassUsesNativeSwiftReferenceCounting(const Metadata *theClass) {
#if SWIFT_OBJC_INTEROP
// If this is ObjC wrapper metadata, the class is definitely not using
// Swift ref-counting.
@@ -1426,9 +1425,9 @@ bool swift::swift_isUniquelyReferencedOrPinned_nonNull_native(
using ClassExtents = TwoWordPair<size_t, size_t>;
SWIFT_CC(swift) SWIFT_RUNTIME_EXPORT
SWIFT_CC(swift) SWIFT_RUNTIME_STDLIB_INTERNAL
ClassExtents::Return
swift_class_getInstanceExtents(const Metadata *c) {
_getSwiftClassInstanceExtents(const Metadata *c) {
assert(c && c->isClassObject());
auto metaData = c->getClassObject();
return ClassExtents{
@@ -1439,15 +1438,14 @@ swift_class_getInstanceExtents(const Metadata *c) {
#if SWIFT_OBJC_INTEROP
SWIFT_CC(swift)
SWIFT_RUNTIME_EXPORT
SWIFT_CC(swift) SWIFT_RUNTIME_STDLIB_INTERNAL
ClassExtents::Return
swift_objc_class_unknownGetInstanceExtents(const ClassMetadata* c) {
_getObjCClassInstanceExtents(const ClassMetadata* c) {
// Pure ObjC classes never have negative extents.
if (c->isPureObjC())
return ClassExtents{0, class_getInstanceSize(class_const_cast(c))};
return swift_class_getInstanceExtents(c);
return _getSwiftClassInstanceExtents(c);
}
SWIFT_CC(swift)