Skip to content

Commit 7f8b6a1

Browse files
committed
More explicit specialization in generic entry points
1 parent beb11be commit 7f8b6a1

File tree

2 files changed

+32
-2
lines changed

2 files changed

+32
-2
lines changed

stdlib/public/core/StringRangeReplaceableCollection.swift

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,18 @@ extension String: RangeReplaceableCollection {
5151
///
5252
/// - Parameter other: A string instance or another sequence of
5353
/// characters.
54-
@inlinable // FIXME(sil-serialize-all)
54+
@_specialize(where S == String)
55+
@_specialize(where S == Substring)
5556
public init<S : Sequence & LosslessStringConvertible>(_ other: S)
5657
where S.Element == Character {
58+
if let str = other as? String {
59+
self.init(str)
60+
return
61+
}
62+
if let subStr = other as? Substring {
63+
self.init(subStr)
64+
return
65+
}
5766
self = other.description
5867
}
5968

@@ -72,9 +81,19 @@ extension String: RangeReplaceableCollection {
7281
///
7382
/// - Parameter characters: A string instance or another sequence of
7483
/// characters.
75-
@inlinable // specialize
84+
@_specialize(where S == String)
85+
@_specialize(where S == Substring)
86+
@_specialize(where S == Array<Character>)
7687
public init<S : Sequence>(_ characters: S)
7788
where S.Iterator.Element == Character {
89+
if let str = characters as? String {
90+
self.init(str)
91+
return
92+
}
93+
if let subStr = characters as? Substring {
94+
self.init(subStr)
95+
return
96+
}
7897
self = ""
7998
self.append(contentsOf: characters)
8099
}

stdlib/public/core/Substring.swift

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -717,8 +717,19 @@ extension Substring.UnicodeScalarView : RangeReplaceableCollection {
717717
}
718718

719719
extension Substring : RangeReplaceableCollection {
720+
@_specialize(where S == String)
721+
@_specialize(where S == Substring)
722+
@_specialize(where S == Array<Character>)
720723
public init<S : Sequence>(_ elements: S)
721724
where S.Element == Character {
725+
if let str = elements as? String {
726+
self.init(str)
727+
return
728+
}
729+
if let subStr = elements as? Substring {
730+
self.init(subStr)
731+
return
732+
}
722733
self = String(elements)[...]
723734
}
724735

0 commit comments

Comments
 (0)