From f03d6e55440b443c6c0727367df2397dd78f75e7 Mon Sep 17 00:00:00 2001 From: Arsen Gasparyan Date: Sat, 25 Jun 2016 23:59:47 +0300 Subject: [PATCH] Rename string reflection init --- .../unit-tests/ObjectiveCBridging.swift | 2 +- .../StdlibUnittest/StdlibCoreExtras.swift | 2 +- .../StdlibUnittest/StringConvertible.swift.gyb | 2 +- stdlib/public/core/Bool.swift | 12 ++++++++++++ stdlib/public/core/Character.swift | 8 ++++++++ .../core/ImplicitlyUnwrappedOptional.swift | 2 +- stdlib/public/core/Mirror.swift | 6 +++--- stdlib/public/core/OutputStream.swift | 4 ++++ stdlib/public/core/StaticString.swift | 2 +- stdlib/public/core/String.swift | 17 +++++++++++++++++ .../public/core/StringInterpolation.swift.gyb | 2 +- stdlib/public/core/StringUTF16.swift | 2 +- stdlib/public/core/StringUTF8.swift | 2 +- stdlib/public/core/UnicodeScalar.swift | 13 ++++++++++++- .../public/core/UnsafeBufferPointer.swift.gyb | 2 +- 15 files changed, 65 insertions(+), 13 deletions(-) diff --git a/benchmark/single-source/unit-tests/ObjectiveCBridging.swift b/benchmark/single-source/unit-tests/ObjectiveCBridging.swift index 68409e06d6ea1..b103717d4fbc8 100644 --- a/benchmark/single-source/unit-tests/ObjectiveCBridging.swift +++ b/benchmark/single-source/unit-tests/ObjectiveCBridging.swift @@ -73,7 +73,7 @@ public func run_ObjectiveCBridgeFromNSStringForced(_ N: Int) { @inline(never) func testObjectiveCBridgeToNSString() { - let nativeString = String("Native") + let nativeString = "Native" var s: NSString? for _ in 0 ..< 10_000 { diff --git a/stdlib/private/StdlibUnittest/StdlibCoreExtras.swift b/stdlib/private/StdlibUnittest/StdlibCoreExtras.swift index 0e26066add4e0..c3b1027544079 100644 --- a/stdlib/private/StdlibUnittest/StdlibCoreExtras.swift +++ b/stdlib/private/StdlibUnittest/StdlibCoreExtras.swift @@ -127,7 +127,7 @@ public func == (lhs: TypeIdentifier, rhs: TypeIdentifier) -> Bool { extension TypeIdentifier : CustomStringConvertible, CustomDebugStringConvertible { public var description: String { - return String(value) + return String(describing: value) } public var debugDescription: String { return "TypeIdentifier(\(description))" diff --git a/stdlib/private/StdlibUnittest/StringConvertible.swift.gyb b/stdlib/private/StdlibUnittest/StringConvertible.swift.gyb index 512162656d50a..2494b1d0fe40f 100644 --- a/stdlib/private/StdlibUnittest/StringConvertible.swift.gyb +++ b/stdlib/private/StdlibUnittest/StringConvertible.swift.gyb @@ -112,7 +112,7 @@ extension CustomPrintableValue : CustomDebugStringConvertible { public func expectPrinted( expectedOneOf patterns: [String], _ object: T, ${TRACE} ) { - let actual = String(object) + let actual = String(describing: object) if !patterns.contains(actual) { expectationFailure( "expected: any of \(String(reflecting: patterns))\n" diff --git a/stdlib/public/core/Bool.swift b/stdlib/public/core/Bool.swift index 176da1f6302c5..a3bcfea2428b0 100644 --- a/stdlib/public/core/Bool.swift +++ b/stdlib/public/core/Bool.swift @@ -146,6 +146,18 @@ extension Bool : Equatable, Hashable { } } +extension Bool : LosslessStringConvertible { + public init?(_ description: String) { + if description == "true" { + self = true + } else if description == "false" { + self = false + } else { + return nil + } + } +} + //===----------------------------------------------------------------------===// // Operators //===----------------------------------------------------------------------===// diff --git a/stdlib/public/core/Character.swift b/stdlib/public/core/Character.swift index 76d745526cb11..aef7ebfe59450 100644 --- a/stdlib/public/core/Character.swift +++ b/stdlib/public/core/Character.swift @@ -353,6 +353,14 @@ public struct Character : internal var _representation: Representation } +extension Character : CustomStringConvertible { + public var description: String { + return String(self) + } +} + +extension Character : LosslessStringConvertible {} + extension Character : CustomDebugStringConvertible { /// A textual representation of the character, suitable for debugging. public var debugDescription: String { diff --git a/stdlib/public/core/ImplicitlyUnwrappedOptional.swift b/stdlib/public/core/ImplicitlyUnwrappedOptional.swift index 568c1a8bf7cd8..f5e5b86a83c51 100644 --- a/stdlib/public/core/ImplicitlyUnwrappedOptional.swift +++ b/stdlib/public/core/ImplicitlyUnwrappedOptional.swift @@ -45,7 +45,7 @@ extension ImplicitlyUnwrappedOptional : CustomStringConvertible { public var description: String { switch self { case .some(let value): - return String(value) + return String(describing: value) case .none: return "nil" } diff --git a/stdlib/public/core/Mirror.swift b/stdlib/public/core/Mirror.swift index fb07a18200e0f..3a4eb7d9393ea 100644 --- a/stdlib/public/core/Mirror.swift +++ b/stdlib/public/core/Mirror.swift @@ -855,7 +855,7 @@ extension String { /// } /// /// let p = Point(x: 21, y: 30) - /// print(String(p)) + /// print(String(describing: p)) /// // Prints "Point(x: 21, y: 30)" /// /// After adding `CustomStringConvertible` conformance by implementing the @@ -867,11 +867,11 @@ extension String { /// } /// } /// - /// print(String(p)) + /// print(String(describing: p)) /// // Prints "(21, 30)" /// /// - SeeAlso: `String.init(reflecting: Subject)` - public init(_ instance: Subject) { + public init(describing instance: Subject) { self.init() _print_unlocked(instance, &self) } diff --git a/stdlib/public/core/OutputStream.swift b/stdlib/public/core/OutputStream.swift index 86820d21ac53e..65cfc64805fd0 100644 --- a/stdlib/public/core/OutputStream.swift +++ b/stdlib/public/core/OutputStream.swift @@ -164,6 +164,10 @@ public protocol CustomStringConvertible { var description: String { get } } +public protocol LosslessStringConvertible : CustomStringConvertible { + init?(_ description: String) +} + /// A type with a customized textual representation suitable for debugging /// purposes. /// diff --git a/stdlib/public/core/StaticString.swift b/stdlib/public/core/StaticString.swift index ee74749b2eb5f..49fac765c626c 100644 --- a/stdlib/public/core/StaticString.swift +++ b/stdlib/public/core/StaticString.swift @@ -259,7 +259,7 @@ public struct StaticString extension StaticString { public var customMirror: Mirror { - return Mirror(reflecting: String(self)) + return Mirror(reflecting: String(describing: self)) } } diff --git a/stdlib/public/core/String.swift b/stdlib/public/core/String.swift index fe3e7d21659d6..0e1bd2d7c3ffb 100644 --- a/stdlib/public/core/String.swift +++ b/stdlib/public/core/String.swift @@ -973,6 +973,23 @@ extension String { return _nativeUnicodeUppercaseString(self) #endif } + + public // @testable + init(_ v: T) { + self = v.description + } +} + +extension String : CustomStringConvertible { + public var description: String { + return self + } +} + +extension String : LosslessStringConvertible { + public init?(_ description: String) { + self = description + } } extension String { diff --git a/stdlib/public/core/StringInterpolation.swift.gyb b/stdlib/public/core/StringInterpolation.swift.gyb index f4e2899a08a82..860319c98af32 100644 --- a/stdlib/public/core/StringInterpolation.swift.gyb +++ b/stdlib/public/core/StringInterpolation.swift.gyb @@ -65,7 +65,7 @@ extension String : StringInterpolationConvertible { /// /// - SeeAlso: `StringInterpolationConvertible` public init(stringInterpolationSegment expr: T) { - self = String(expr) + self = String(describing: expr) } % for Type in StreamableTypes: diff --git a/stdlib/public/core/StringUTF16.swift b/stdlib/public/core/StringUTF16.swift index 45707e28f7621..9ee9a3cd5442b 100644 --- a/stdlib/public/core/StringUTF16.swift +++ b/stdlib/public/core/StringUTF16.swift @@ -314,7 +314,7 @@ extension String { return UTF16View(_core) } set { - self = String(newValue) + self = String(describing: newValue) } } diff --git a/stdlib/public/core/StringUTF8.swift b/stdlib/public/core/StringUTF8.swift index a1193da1f2d28..50cb8a78ef568 100644 --- a/stdlib/public/core/StringUTF8.swift +++ b/stdlib/public/core/StringUTF8.swift @@ -352,7 +352,7 @@ extension String { return UTF8View(self._core) } set { - self = String(newValue) + self = String(describing: newValue) } } diff --git a/stdlib/public/core/UnicodeScalar.swift b/stdlib/public/core/UnicodeScalar.swift index 562249e8de052..9782a45a5d082 100644 --- a/stdlib/public/core/UnicodeScalar.swift +++ b/stdlib/public/core/UnicodeScalar.swift @@ -249,7 +249,7 @@ public struct UnicodeScalar : extension UnicodeScalar : CustomStringConvertible, CustomDebugStringConvertible { /// An escaped textual representation of the Unicode scalar. public var description: String { - return "\"\(escaped(asASCII: false))\"" + return String(value) } /// An escaped textual representation of the Unicode scalar, suitable for /// debugging. @@ -258,6 +258,17 @@ extension UnicodeScalar : CustomStringConvertible, CustomDebugStringConvertible } } +extension UnicodeScalar : LosslessStringConvertible { + public init?(_ description: String) { + if let v = UInt32(description) where (v < 0xD800 || v > 0xDFFF) + && v <= 0x10FFFF { + self = UnicodeScalar(v) + } + + return nil + } +} + extension UnicodeScalar : Hashable { /// The Unicode scalar's hash value. /// diff --git a/stdlib/public/core/UnsafeBufferPointer.swift.gyb b/stdlib/public/core/UnsafeBufferPointer.swift.gyb index eb1b29473c748..16145639ec3e9 100644 --- a/stdlib/public/core/UnsafeBufferPointer.swift.gyb +++ b/stdlib/public/core/UnsafeBufferPointer.swift.gyb @@ -219,7 +219,7 @@ extension Unsafe${Mutable}BufferPointer : CustomDebugStringConvertible { /// A textual representation of `self`, suitable for debugging. public var debugDescription: String { return "Unsafe${Mutable}BufferPointer" - + "(start: \(_position.map(String.init(_:)) ?? "nil"), count: \(count))" + + "(start: \(_position.map(String.init(describing:)) ?? "nil"), count: \(count))" } } %end