Skip to content

Eager HashedCollections Bridging #5703

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 4 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2,119 changes: 501 additions & 1,618 deletions stdlib/public/core/HashedCollections.swift.gyb

Large diffs are not rendered by default.

7 changes: 6 additions & 1 deletion stdlib/public/core/ShadowProtocols.swift
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,10 @@ public protocol _NSDictionary : _NSDictionaryCore {
// importer.
func getObjects(_ objects: UnsafeMutablePointer<AnyObject>?,
andKeys keys: UnsafeMutablePointer<AnyObject>?)
}

func enumerateKeysAndObjectsUsingBlock(
_ block: @convention(block) (AnyObject, AnyObject, UnsafeMutablePointer<UInt8>) -> ())
}

/// A shadow for the "core operations" of NSSet.
///
Expand Down Expand Up @@ -169,6 +172,8 @@ public protocol _NSSetCore :
/// supplies.
@unsafe_no_objc_tagged_pointer @objc
public protocol _NSSet : _NSSetCore {
func enumerateObjectsUsingBlock(
_ block: @convention(block) (AnyObject, UnsafeMutablePointer<UInt8>) -> ())
}

/// A shadow for the API of NSNumber we will use in the core
Expand Down
15 changes: 0 additions & 15 deletions test/stdlib/Inputs/DictionaryKeyValueTypesObjC.swift
Original file line number Diff line number Diff line change
Expand Up @@ -18,21 +18,6 @@ public func convertNSDictionaryToDictionary<
return result!
}

func isNativeDictionary<KeyTy : Hashable, ValueTy>(
_ d: Dictionary<KeyTy, ValueTy>) -> Bool {
switch d._variantBuffer {
case .native:
return true
case .cocoa:
return false
}
}

func isCocoaDictionary<KeyTy : Hashable, ValueTy>(
_ d: Dictionary<KeyTy, ValueTy>) -> Bool {
return !isNativeDictionary(d)
}

func isNativeNSDictionary(_ d: NSDictionary) -> Bool {
let className: NSString = NSStringFromClass(type(of: d)) as NSString
return ["_SwiftDeferredNSDictionary", "NativeDictionaryStorage"].contains {
Expand Down
11 changes: 0 additions & 11 deletions test/stdlib/RuntimeObjC.swift
Original file line number Diff line number Diff line change
Expand Up @@ -425,17 +425,6 @@ Runtime.test("casting AnyObject to class metatypes") {

var RuntimeFoundationWrappers = TestSuite("RuntimeFoundationWrappers")

RuntimeFoundationWrappers.test("_stdlib_NSObject_isEqual/NoLeak") {
nsObjectCanaryCount = 0
autoreleasepool {
let a = NSObjectCanary()
let b = NSObjectCanary()
expectEqual(2, nsObjectCanaryCount)
_stdlib_NSObject_isEqual(a, b)
}
expectEqual(0, nsObjectCanaryCount)
}

var nsStringCanaryCount = 0
@objc class NSStringCanary : NSString {
override init() {
Expand Down
7 changes: 1 addition & 6 deletions test/stdlib/SetTrapsObjC.swift
Original file line number Diff line number Diff line change
Expand Up @@ -134,13 +134,8 @@ SetTraps.test("Downcast1")
reason: "this trap is not guaranteed to happen in -Ounchecked"))
.code {
let s: Set<NSObject> = [ NSObject(), NSObject() ]
let s2: Set<TestObjCKeyTy> = _setDownCast(s)
expectCrashLater()
let v1 = s2.contains(TestObjCKeyTy(10))
let v2 = s2.contains(TestObjCKeyTy(20))

// This triggers failure.
for m in s2 { }
_ = _setDownCast(s) as Set<TestObjCKeyTy>
}

SetTraps.test("Downcast2")
Expand Down
8 changes: 4 additions & 4 deletions validation-test/Reflection/reflect_Dictionary.swift
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@ reflect(object: obj)
// CHECK-64: (class reflect_Dictionary.TestClass)

// CHECK-64: Type info:
// CHECK-64: (class_instance size=25 alignment=8 stride=32 num_extra_inhabitants=0
// CHECK-64: (class_instance size=24 alignment=8 stride=24 num_extra_inhabitants=0
// CHECK-64: (field name=t offset=16
// CHECK-64: (struct size=9 alignment=8 stride=16 num_extra_inhabitants=0
// CHECK-64: (struct size=8 alignment=8 stride=8 num_extra_inhabitants=2147483647
// (unstable implementation details omitted)

// CHECK-32: Reflecting an object.
Expand All @@ -34,9 +34,9 @@ reflect(object: obj)
// CHECK-32: (class reflect_Dictionary.TestClass)

// CHECK-32: Type info:
// CHECK-32: (class_instance size=17 alignment=4 stride=20 num_extra_inhabitants=0
// CHECK-32: (class_instance size=16 alignment=4 stride=16 num_extra_inhabitants=0
// CHECK-32: (field name=t offset=12
// CHECK-32: (struct size=5 alignment=4 stride=8 num_extra_inhabitants=0
// CHECK-32: (struct size=4 alignment=4 stride=4 num_extra_inhabitants=2147483647
// (unstable implementation details omitted)

doneReflecting()
Expand Down
8 changes: 4 additions & 4 deletions validation-test/Reflection/reflect_Set.swift
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@ reflect(object: obj)
// CHECK-64: (class reflect_Set.TestClass)

// CHECK-64: Type info:
// CHECK-64: (class_instance size=25 alignment=8 stride=32 num_extra_inhabitants=0
// CHECK-64: (class_instance size=24 alignment=8 stride=24 num_extra_inhabitants=0
// CHECK-64: (field name=t offset=16
// CHECK-64: (struct size=9 alignment=8 stride=16 num_extra_inhabitants=0
// CHECK-64: (struct size=8 alignment=8 stride=8 num_extra_inhabitants=2147483647
// (unstable implementation details omitted)

// CHECK-32: Reflecting an object.
Expand All @@ -34,9 +34,9 @@ reflect(object: obj)
// CHECK-32: (class reflect_Set.TestClass)

// CHECK-32: Type info:
// CHECK-32: (class_instance size=17 alignment=4 stride=20 num_extra_inhabitants=0
// CHECK-32: (class_instance size=16 alignment=4 stride=16 num_extra_inhabitants=0
// CHECK-32: (field name=t offset=12
// CHECK-32: (struct size=5 alignment=4 stride=8 num_extra_inhabitants=0
// CHECK-32: (struct size=4 alignment=4 stride=4 num_extra_inhabitants=2147483647
// (unstable implementation details omitted)

doneReflecting()
Expand Down
84 changes: 42 additions & 42 deletions validation-test/Reflection/reflect_multiple_types.swift
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ reflect(object: obj)
// CHECK-64: (class reflect_multiple_types.TestClass)

// CHECK-64: Type info:
// CHECK-64: (class_instance size=209 alignment=8 stride=216 num_extra_inhabitants=0
// CHECK-64: (class_instance size=193 alignment=8 stride=200 num_extra_inhabitants=0
// CHECK-64: (field name=t00 offset=16
// CHECK-64: (struct size=8 alignment=8 stride=8 num_extra_inhabitants=1
// (unstable implementation details omitted)
Expand All @@ -136,67 +136,67 @@ reflect(object: obj)
// CHECK-64: (field name=small offset=0
// CHECK-64: (builtin size=8 alignment=8 stride=8 num_extra_inhabitants=2147483647))))))
// CHECK-64: (field name=t03 offset=48
// CHECK-64: (struct size=9 alignment=8 stride=16 num_extra_inhabitants=0
// CHECK-64: (struct size=8 alignment=8 stride=8 num_extra_inhabitants=2147483647
// (unstable implementation details omitted)
// CHECK-64: (field name=t04 offset=64
// CHECK-64: (field name=t04 offset=56
// CHECK-64: (struct size=8 alignment=8 stride=8 num_extra_inhabitants=0
// CHECK-64: (field name=_value offset=0
// CHECK-64: (builtin size=8 alignment=8 stride=8 num_extra_inhabitants=0))))
// CHECK-64: (field name=t05 offset=72
// CHECK-64: (field name=t05 offset=64
// CHECK-64: (struct size=4 alignment=4 stride=4 num_extra_inhabitants=0
// CHECK-64: (field name=_value offset=0
// CHECK-64: (builtin size=4 alignment=4 stride=4 num_extra_inhabitants=0))))
// CHECK-64: (field name=t06 offset=80
// CHECK-64: (field name=t06 offset=72
// CHECK-64: (struct size=8 alignment=8 stride=8 num_extra_inhabitants=0
// CHECK-64: (field name=_value offset=0
// CHECK-64: (builtin size=8 alignment=8 stride=8 num_extra_inhabitants=0))))
// CHECK-64: (field name=t07 offset=88
// CHECK-64: (field name=t07 offset=80
// CHECK-64: (struct size=2 alignment=2 stride=2 num_extra_inhabitants=0
// CHECK-64: (field name=_value offset=0
// CHECK-64: (builtin size=2 alignment=2 stride=2 num_extra_inhabitants=0))))
// CHECK-64: (field name=t08 offset=92
// CHECK-64: (field name=t08 offset=84
// CHECK-64: (struct size=4 alignment=4 stride=4 num_extra_inhabitants=0
// CHECK-64: (field name=_value offset=0
// CHECK-64: (builtin size=4 alignment=4 stride=4 num_extra_inhabitants=0))))
// CHECK-64: (field name=t09 offset=96
// CHECK-64: (field name=t09 offset=88
// CHECK-64: (struct size=8 alignment=8 stride=8 num_extra_inhabitants=0
// CHECK-64: (field name=_value offset=0
// CHECK-64: (builtin size=8 alignment=8 stride=8 num_extra_inhabitants=0))))
// CHECK-64: (field name=t10 offset=104
// CHECK-64: (field name=t10 offset=96
// CHECK-64: (struct size=1 alignment=1 stride=1 num_extra_inhabitants=0
// CHECK-64: (field name=_value offset=0
// CHECK-64: (builtin size=1 alignment=1 stride=1 num_extra_inhabitants=0))))
// CHECK-64: (field name=t11 offset=112
// CHECK-64: (field name=t11 offset=104
// CHECK-64: (reference kind=strong refcounting=unknown))
// CHECK-64: (field name=t12 offset=120
// CHECK-64: (field name=t12 offset=112
// CHECK-64: (reference kind=strong refcounting=unknown))
// CHECK-64: (field name=t13 offset=128
// CHECK-64: (field name=t13 offset=120
// CHECK-64: (reference kind=strong refcounting=unknown))
// CHECK-64: (field name=t14 offset=136
// CHECK-64: (field name=t14 offset=128
// CHECK-64: (reference kind=strong refcounting=unknown))
// CHECK-64: (field name=t15 offset=144
// CHECK-64: (struct size=9 alignment=8 stride=16 num_extra_inhabitants=0
// CHECK-64: (field name=t15 offset=136
// CHECK-64: (struct size=8 alignment=8 stride=8 num_extra_inhabitants=2147483647
// (unstable implementation details omitted)
// CHECK-64: (field name=t16 offset=160
// CHECK-64: (field name=t16 offset=144
// CHECK-64: (struct size=24 alignment=8 stride=24 num_extra_inhabitants=0
// (unstable implementation details omitted)
// CHECK-64: (field name=t17 offset=184
// CHECK-64: (field name=t17 offset=168
// CHECK-64: (struct size=8 alignment=8 stride=8 num_extra_inhabitants=0
// CHECK-64: (field name=_value offset=0
// CHECK-64: (builtin size=8 alignment=8 stride=8 num_extra_inhabitants=0))))
// CHECK-64: (field name=t18 offset=192
// CHECK-64: (field name=t18 offset=176
// CHECK-64: (struct size=2 alignment=2 stride=2 num_extra_inhabitants=0
// CHECK-64: (field name=_value offset=0
// CHECK-64: (builtin size=2 alignment=2 stride=2 num_extra_inhabitants=0))))
// CHECK-64: (field name=t19 offset=196
// CHECK-64: (field name=t19 offset=180
// CHECK-64: (struct size=4 alignment=4 stride=4 num_extra_inhabitants=0
// CHECK-64: (field name=_value offset=0
// CHECK-64: (builtin size=4 alignment=4 stride=4 num_extra_inhabitants=0))))
// CHECK-64: (field name=t20 offset=200
// CHECK-64: (field name=t20 offset=184
// CHECK-64: (struct size=8 alignment=8 stride=8 num_extra_inhabitants=0
// CHECK-64: (field name=_value offset=0
// CHECK-64: (builtin size=8 alignment=8 stride=8 num_extra_inhabitants=0))))
// CHECK-64: (field name=t21 offset=208
// CHECK-64: (field name=t21 offset=192
// CHECK-64: (struct size=1 alignment=1 stride=1 num_extra_inhabitants=0
// CHECK-64: (field name=_value offset=0
// CHECK-64: (builtin size=1 alignment=1 stride=1 num_extra_inhabitants=0)))))
Expand All @@ -207,7 +207,7 @@ reflect(object: obj)
// CHECK-32: (class reflect_multiple_types.TestClass)

// CHECK-32: Type info:
// CHECK-32: (class_instance size=137 alignment=8 stride=144 num_extra_inhabitants=0
// CHECK-32: (class_instance size=129 alignment=8 stride=136 num_extra_inhabitants=0
// CHECK-32: (field name=t00 offset=12
// CHECK-32: (struct size=4 alignment=4 stride=4 num_extra_inhabitants=1
// (unstable implementation details omitted)
Expand All @@ -228,67 +228,67 @@ reflect(object: obj)
// CHECK-32: (field name=small offset=0
// CHECK-32: (builtin size=8 alignment=8 stride=8 num_extra_inhabitants=2147483647))))))
// CHECK-32: (field name=t03 offset=32
// CHECK-32: (struct size=5 alignment=4 stride=8 num_extra_inhabitants=0
// CHECK-32: (struct size=4 alignment=4 stride=4 num_extra_inhabitants=2147483647
// (unstable implementation details omitted)
// CHECK-32: (field name=t04 offset=40
// CHECK-32: (field name=t04 offset=36
// CHECK-32: (struct size=8 alignment=8 stride=8 num_extra_inhabitants=0
// CHECK-32: (field name=_value offset=0
// CHECK-32: (builtin size=8 alignment=8 stride=8 num_extra_inhabitants=0))))
// CHECK-32: (field name=t05 offset=48
// CHECK-32: (field name=t05 offset=44
// CHECK-32: (struct size=4 alignment=4 stride=4 num_extra_inhabitants=0
// CHECK-32: (field name=_value offset=0
// CHECK-32: (builtin size=4 alignment=4 stride=4 num_extra_inhabitants=0))))
// CHECK-32: (field name=t06 offset=52
// CHECK-32: (field name=t06 offset=48
// CHECK-32: (struct size=4 alignment=4 stride=4 num_extra_inhabitants=0
// CHECK-32: (field name=_value offset=0
// CHECK-32: (builtin size=4 alignment=4 stride=4 num_extra_inhabitants=0))))
// CHECK-32: (field name=t07 offset=56
// CHECK-32: (field name=t07 offset=52
// CHECK-32: (struct size=2 alignment=2 stride=2 num_extra_inhabitants=0
// CHECK-32: (field name=_value offset=0
// CHECK-32: (builtin size=2 alignment=2 stride=2 num_extra_inhabitants=0))))
// CHECK-32: (field name=t08 offset=60
// CHECK-32: (field name=t08 offset=56
// CHECK-32: (struct size=4 alignment=4 stride=4 num_extra_inhabitants=0
// CHECK-32: (field name=_value offset=0
// CHECK-32: (builtin size=4 alignment=4 stride=4 num_extra_inhabitants=0))))
// CHECK-32: (field name=t09 offset=64
// CHECK-32: (field name=t09 offset=60
// CHECK-32: (struct size=8 alignment=8 stride=8 num_extra_inhabitants=0
// CHECK-32: (field name=_value offset=0
// CHECK-32: (builtin size=8 alignment=8 stride=8 num_extra_inhabitants=0))))
// CHECK-32: (field name=t10 offset=72
// CHECK-32: (field name=t10 offset=68
// CHECK-32: (struct size=1 alignment=1 stride=1 num_extra_inhabitants=0
// CHECK-32: (field name=_value offset=0
// CHECK-32: (builtin size=1 alignment=1 stride=1 num_extra_inhabitants=0))))
// CHECK-32: (field name=t11 offset=76
// CHECK-32: (field name=t11 offset=72
// CHECK-32: (reference kind=strong refcounting=unknown))
// CHECK-32: (field name=t12 offset=80
// CHECK-32: (field name=t12 offset=76
// CHECK-32: (reference kind=strong refcounting=unknown))
// CHECK-32: (field name=t13 offset=84
// CHECK-32: (field name=t13 offset=80
// CHECK-32: (reference kind=strong refcounting=unknown))
// CHECK-32: (field name=t14 offset=88
// CHECK-32: (field name=t14 offset=84
// CHECK-32: (reference kind=strong refcounting=unknown))
// CHECK-32: (field name=t15 offset=92
// CHECK-32: (struct size=5 alignment=4 stride=8 num_extra_inhabitants=0
// CHECK-32: (field name=t15 offset=88
// CHECK-32: (struct size=4 alignment=4 stride=4 num_extra_inhabitants=2147483647
// (unstable implementation details omitted)
// CHECK-32: (field name=t16 offset=100
// CHECK-32: (field name=t16 offset=92
// CHECK-32: (struct size=12 alignment=4 stride=12 num_extra_inhabitants=0
// (unstable implementation details omitted)
// CHECK-32: (field name=t17 offset=112
// CHECK-32: (field name=t17 offset=104
// CHECK-32: (struct size=4 alignment=4 stride=4 num_extra_inhabitants=0
// CHECK-32: (field name=_value offset=0
// CHECK-32: (builtin size=4 alignment=4 stride=4 num_extra_inhabitants=0))))
// CHECK-32: (field name=t18 offset=116
// CHECK-32: (field name=t18 offset=108
// CHECK-32: (struct size=2 alignment=2 stride=2 num_extra_inhabitants=0
// CHECK-32: (field name=_value offset=0
// CHECK-32: (builtin size=2 alignment=2 stride=2 num_extra_inhabitants=0))))
// CHECK-32: (field name=t19 offset=120
// CHECK-32: (field name=t19 offset=112
// CHECK-32: (struct size=4 alignment=4 stride=4 num_extra_inhabitants=0
// CHECK-32: (field name=_value offset=0
// CHECK-32: (builtin size=4 alignment=4 stride=4 num_extra_inhabitants=0))))
// CHECK-32: (field name=t20 offset=128
// CHECK-32: (field name=t20 offset=120
// CHECK-32: (struct size=8 alignment=8 stride=8 num_extra_inhabitants=0
// CHECK-32: (field name=_value offset=0
// CHECK-32: (builtin size=8 alignment=8 stride=8 num_extra_inhabitants=0))))
// CHECK-32: (field name=t21 offset=136
// CHECK-32: (field name=t21 offset=128
// CHECK-32: (struct size=1 alignment=1 stride=1 num_extra_inhabitants=0
// CHECK-32: (field name=_value offset=0
// CHECK-32: (builtin size=1 alignment=1 stride=1 num_extra_inhabitants=0)))))
Expand Down
Loading