Skip to content

Commit 33e999b

Browse files
Merge pull request #6039 from airspeedswift/remove-anyhashable-trampolines
[stdlib] Remove trampolines for concrete types used with Set/Dict of AnyHashable
2 parents 6f9dd9a + 30fc489 commit 33e999b

File tree

1 file changed

+7
-59
lines changed

1 file changed

+7
-59
lines changed

Diff for: stdlib/public/core/HashedCollectionsAnyHashableExtensions.swift.gyb

+7-59
Original file line numberDiff line numberDiff line change
@@ -14,37 +14,12 @@
1414
// Convenience APIs for Set<AnyHashable>
1515
//===----------------------------------------------------------------------===//
1616

17-
// FIXME(ABI)#36 (Overload resolution): remove these trampolines when extensions below can be
18-
// properly expressed in the language.
19-
extension Set {
20-
@inline(__always)
21-
internal mutating func _concreteElement_insert(
22-
_ newMember: Element
23-
) -> (inserted: Bool, memberAfterInsert: Element) {
24-
return insert(newMember)
25-
}
26-
27-
@inline(__always)
28-
internal mutating func _concreteElement_update(
29-
with newMember: Element
30-
) -> Element? {
31-
return update(with: newMember)
32-
}
33-
34-
@inline(__always)
35-
internal mutating func _concreteElement_remove(
36-
_ member: Element
37-
) -> Element? {
38-
return remove(member)
39-
}
40-
}
41-
4217
extension Set where Element == AnyHashable {
4318
public mutating func insert<ConcreteElement : Hashable>(
4419
_ newMember: ConcreteElement
4520
) -> (inserted: Bool, memberAfterInsert: ConcreteElement) {
4621
let (inserted, memberAfterInsert) =
47-
_concreteElement_insert(AnyHashable(newMember))
22+
insert(AnyHashable(newMember))
4823
return (
4924
inserted: inserted,
5025
memberAfterInsert: memberAfterInsert.base as! ConcreteElement)
@@ -54,15 +29,15 @@ extension Set where Element == AnyHashable {
5429
public mutating func update<ConcreteElement : Hashable>(
5530
with newMember: ConcreteElement
5631
) -> ConcreteElement? {
57-
return _concreteElement_update(with: AnyHashable(newMember))
32+
return update(with: AnyHashable(newMember))
5833
.map { $0.base as! ConcreteElement }
5934
}
6035

6136
@discardableResult
6237
public mutating func remove<ConcreteElement : Hashable>(
6338
_ member: ConcreteElement
6439
) -> ConcreteElement? {
65-
return _concreteElement_remove(AnyHashable(member))
40+
return remove(AnyHashable(member))
6641
.map { $0.base as! ConcreteElement }
6742
}
6843
}
@@ -71,57 +46,30 @@ extension Set where Element == AnyHashable {
7146
// Convenience APIs for Dictionary<AnyHashable, *>
7247
//===----------------------------------------------------------------------===//
7348

74-
// FIXME(ABI)#38 (Overload resolution): remove these trampolines when extensions below can be
75-
// properly expressed in the language.
76-
extension Dictionary {
77-
internal subscript(_concreteKey key: Key) -> Value? {
78-
@inline(__always)
79-
get {
80-
return self[key]
81-
}
82-
@inline(__always)
83-
set(newValue) {
84-
self[key] = newValue
85-
}
86-
}
87-
88-
@inline(__always)
89-
internal mutating func _concreteKey_updateValue(
90-
_ value: Value, forKey key: Key
91-
) -> Value? {
92-
return updateValue(value, forKey: key)
93-
}
94-
95-
@inline(__always)
96-
internal mutating func _concreteKey_removeValue(forKey key: Key) -> Value? {
97-
return removeValue(forKey: key)
98-
}
99-
}
100-
10149
extension Dictionary where Key == AnyHashable {
10250
public subscript(_ key: _Hashable) -> Value? {
10351
// FIXME(ABI)#40 (Generic subscripts): replace this API with a
10452
// generic subscript.
10553
get {
106-
return self[_concreteKey: key._toAnyHashable()]
54+
return self[key._toAnyHashable()]
10755
}
10856
set {
109-
self[_concreteKey: key._toAnyHashable()] = newValue
57+
self[key._toAnyHashable()] = newValue
11058
}
11159
}
11260

11361
@discardableResult
11462
public mutating func updateValue<ConcreteKey : Hashable>(
11563
_ value: Value, forKey key: ConcreteKey
11664
) -> Value? {
117-
return _concreteKey_updateValue(value, forKey: AnyHashable(key))
65+
return updateValue(value, forKey: AnyHashable(key))
11866
}
11967

12068
@discardableResult
12169
public mutating func removeValue<ConcreteKey : Hashable>(
12270
forKey key: ConcreteKey
12371
) -> Value? {
124-
return _concreteKey_removeValue(forKey: AnyHashable(key))
72+
return removeValue(forKey: AnyHashable(key))
12573
}
12674
}
12775

0 commit comments

Comments
 (0)