//===----------------------------------------------------------------------===// // // This source file is part of the Swift.org open source project // // Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors // Licensed under Apache License v2.0 with Runtime Library Exception // // See https://swift.org/LICENSE.txt for license information // See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // //===----------------------------------------------------------------------===// // Declarations to enable ease-of-testing public // @testable struct _StringRepresentation { public var _isASCII: Bool public var _count: Int public var _capacity: Int public enum _Form { case _small case _cocoa(object: AnyObject) case _native(object: AnyObject) case _immortal(address: UInt) } public var _form: _Form public var _objectIdentifier: ObjectIdentifier? { switch _form { case ._cocoa(let object): return ObjectIdentifier(object) case ._native(let object): return ObjectIdentifier(object) default: return nil } } } extension String { public // @testable func _classify() -> _StringRepresentation { var result = _StringRepresentation( _isASCII: _guts._isASCIIOrSmallASCII, _count: _guts.count, _capacity: _guts.capacity, _form: ._small ) if _guts._isSmall { return result } if _guts._isNative { result._form = ._native(object: _guts._owner!) return result } if _guts._isCocoa { result._form = ._cocoa(object: _guts._owner!) return result } if _guts._isUnmanaged { result._form = ._immortal( address: UInt(bitPattern: _guts._unmanagedRawStart)) return result } fatalError() } }