Skip to content

Commit 796d004

Browse files
author
Dave Abrahams
committed
[stdlib] Allow Unicode Encoding to fail
This is needed for encodings such as Latin-1
1 parent 60c697a commit 796d004

File tree

6 files changed

+10
-9
lines changed

6 files changed

+10
-9
lines changed

stdlib/public/core/UTF16.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ extension _Unicode.UTF16 : UnicodeEncoding {
3737
return UnicodeScalar(_unchecked: value)
3838
}
3939

40-
public static func encode(_ source: UnicodeScalar) -> EncodedScalar {
40+
public static func encode(_ source: UnicodeScalar) -> EncodedScalar? {
4141
let x = source.value
4242
if _fastPath(x < (1 << 16)) {
4343
return EncodedScalar(_storage: x, _bitCount: 16)

stdlib/public/core/UTF32.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ extension _Unicode.UTF32 : UnicodeEncoding {
3434
}
3535

3636
@inline(__always)
37-
public static func encode(_ source: UnicodeScalar) -> EncodedScalar {
37+
public static func encode(_ source: UnicodeScalar) -> EncodedScalar? {
3838
return EncodedScalar(source.value)
3939
}
4040

stdlib/public/core/UTF8.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ extension _Unicode.UTF8 : UnicodeEncoding {
5858

5959
@inline(__always)
6060
@_inlineable
61-
public static func encode(_ source: UnicodeScalar) -> EncodedScalar {
61+
public static func encode(_ source: UnicodeScalar) -> EncodedScalar? {
6262
var c = source.value
6363
if _fastPath(c < (1&<<7)) {
6464
return EncodedScalar(_storage: c, _bitCount: 8)

stdlib/public/core/Unicode.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ extension _Unicode.UTF8 : UnicodeCodec {
265265
_ input: UnicodeScalar,
266266
into processCodeUnit: (CodeUnit) -> Void
267267
) {
268-
var s = encode(input)._storage
268+
var s = encode(input)!._storage
269269
processCodeUnit(UInt8(extendingOrTruncating: s))
270270
s &>>= 8
271271
if _fastPath(s == 0) { return }
@@ -414,7 +414,7 @@ extension _Unicode.UTF16 : UnicodeCodec {
414414
_ input: UnicodeScalar,
415415
into processCodeUnit: (CodeUnit) -> Void
416416
) {
417-
var s = encode(input)._storage
417+
var s = encode(input)!._storage
418418
processCodeUnit(UInt16(extendingOrTruncating: s))
419419
s &>>= 16
420420
if _fastPath(s == 0) { return }

stdlib/public/core/UnicodeEncoding.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,9 @@ public protocol _UnicodeEncoding {
2424
/// Converts from encoded to encoding-independent representation
2525
static func decode(_ content: EncodedScalar) -> UnicodeScalar
2626

27-
/// Converts from encoding-independent to encoded representation
28-
static func encode(_ content: UnicodeScalar) -> EncodedScalar
27+
/// Converts from encoding-independent to encoded representation, returning
28+
/// `nil` if the scalar can't be represented in this encoding.
29+
static func encode(_ content: UnicodeScalar) -> EncodedScalar?
2930

3031
associatedtype ForwardParser : UnicodeParser
3132
associatedtype ReverseParser : UnicodeParser

test/Prototypes/UnicodeDecoders.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -221,12 +221,12 @@ func checkDecodeUTF<Codec : UnicodeCodec & UnicodeEncoding>(
221221
decoded.append(scalar)
222222
expectEqual(
223223
UnicodeScalar(scalar),
224-
Codec.decode(Codec.encode(UnicodeScalar(scalar)!)))
224+
Codec.decode(Codec.encode(UnicodeScalar(scalar)!)!))
225225
}
226226

227227
func output1(_ scalar: UnicodeScalar) {
228228
decoded.append(scalar.value)
229-
expectEqual(scalar, Codec.decode(Codec.encode(scalar)))
229+
expectEqual(scalar, Codec.decode(Codec.encode(scalar)!))
230230
}
231231

232232
var result = assertionSuccess()

0 commit comments

Comments
 (0)