[stdlib] Replace "sanityCheck" with "internalInvariant" (#20616)

* Replace "sanityCheck" with "internalInvariant"
This commit is contained in:
Ben Cohen
2018-11-15 20:50:22 -08:00
committed by GitHub
parent add6f126ad
commit 1673c12d78
74 changed files with 607 additions and 603 deletions

View File

@@ -149,7 +149,7 @@ internal struct _StringObject {
discriminator: Discriminator,
flags: Flags
) {
_sanityCheck(variant.isImmortal == discriminator.isImmortal)
_internalInvariant(variant.isImmortal == discriminator.isImmortal)
self._count = count
self._variant = variant
self._discriminator =
@@ -287,7 +287,7 @@ extension _StringObject {
self.init(zero:())
self._countAndFlags = CountAndFlags(rawUnchecked: bits.0)
self._object = Builtin.valueToBridgeObject(bits.1._value)
_sanityCheck(self.rawBits == bits)
_internalInvariant(self.rawBits == bits)
}
@inlinable @inline(__always)
@@ -452,7 +452,7 @@ extension _StringObject.Discriminator {
withCount count: Int,
isASCII: Bool
) -> _StringObject.Discriminator {
_sanityCheck(count >= 0 && count <= _SmallString.capacity)
_internalInvariant(count >= 0 && count <= _SmallString.capacity)
let c = UInt8(truncatingIfNeeded: count)
return _StringObject.Discriminator((isASCII ? 0xE0 : 0xA0) | c)
}
@@ -497,7 +497,7 @@ extension _StringObject.Nibbles {
// Discriminator for small strings
@inlinable @inline(__always)
internal static func small(withCount count: Int, isASCII: Bool) -> UInt64 {
_sanityCheck(count <= _SmallString.capacity)
_internalInvariant(count <= _SmallString.capacity)
return small(isASCII: isASCII) | UInt64(truncatingIfNeeded: count) &<< 56
}
@@ -544,7 +544,7 @@ extension _StringObject.Discriminator {
@inlinable
internal var smallIsASCII: Bool {
@inline(__always) get {
_sanityCheck(isSmall)
_internalInvariant(isSmall)
return (_value & 0x40) != 0
}
}
@@ -552,7 +552,7 @@ extension _StringObject.Discriminator {
@inlinable
internal var smallCount: Int {
@inline(__always) get {
_sanityCheck(isSmall)
_internalInvariant(isSmall)
return Int(truncatingIfNeeded: _value & 0x0F)
}
}
@@ -582,7 +582,7 @@ extension _StringObject.Discriminator {
@inlinable
internal var largeFastIsNative: Bool {
@inline(__always) get {
_sanityCheck(!isSmall && providesFastUTF8)
_internalInvariant(!isSmall && providesFastUTF8)
return (_value & 0x08) == 0
}
}
@@ -591,7 +591,7 @@ extension _StringObject.Discriminator {
@inlinable
internal var largeIsCocoa: Bool {
@inline(__always) get {
_sanityCheck(!isSmall)
_internalInvariant(!isSmall)
return (_value & 0x40) != 0
}
}
@@ -703,7 +703,7 @@ extension _StringObject {
@inlinable
internal var largeFastIsNative: Bool {
@inline(__always) get {
_sanityCheck(isLarge && providesFastUTF8)
_internalInvariant(isLarge && providesFastUTF8)
#if arch(i386) || arch(arm)
// Note: This assumes that the `largeFastIsNative` predicate doesn't look
// at the immortal bit. We may or may not actually be immortal.
@@ -724,7 +724,7 @@ extension _StringObject {
@inlinable
internal var largeIsCocoa: Bool {
@inline(__always) get {
_sanityCheck(isLarge)
_internalInvariant(isLarge)
#if arch(i386) || arch(arm)
// Note: This assumes that the `largeIsCocoa` predicate doesn't look at
// the immortal bit. We may or may not actually be immortal.
@@ -769,7 +769,7 @@ extension _StringObject {
internal var smallCount: Int {
@inline(__always)
get {
_sanityCheck(isSmall)
_internalInvariant(isSmall)
#if arch(i386) || arch(arm)
// Note: This assumes that `isSmall` implies that we're immortal.
return discriminator(isImmortal: true).smallCount
@@ -783,7 +783,7 @@ extension _StringObject {
internal var smallIsASCII: Bool {
@inline(__always)
get {
_sanityCheck(isSmall)
_internalInvariant(isSmall)
#if arch(i386) || arch(arm)
// Note: This assumes that `isSmall` implies that we're immortal.
return discriminator(isImmortal: true).smallIsASCII
@@ -801,7 +801,7 @@ extension _StringObject {
let variantBits = UInt(truncatingIfNeeded: word1 &>> 32)
let flagBits = UInt16(truncatingIfNeeded: word2)
let discriminatorBits = UInt8(truncatingIfNeeded: word2 &>> 56)
_sanityCheck(discriminatorBits & 0xA0 == 0xA0)
_internalInvariant(discriminatorBits & 0xA0 == 0xA0)
self.init(
count: countBits,
variant: .immortal(variantBits),
@@ -811,7 +811,7 @@ extension _StringObject {
#else
self.init(rawValue: small.rawBits)
#endif
_sanityCheck(isSmall)
_internalInvariant(isSmall)
}
@inlinable @inline(__always)
@@ -827,7 +827,7 @@ extension _StringObject {
self._countAndFlags = CountAndFlags(zero:())
self._object = Builtin.valueToBridgeObject(Nibbles.emptyString._value)
#endif
_sanityCheck(self.smallCount == 0)
_internalInvariant(self.smallCount == 0)
_invariantCheck()
}
}
@@ -890,7 +890,7 @@ extension _StringObject.Flags {
@usableFromInline @inline(never) @_effects(releasenone)
internal func _invariantCheck() {
if isASCII {
_sanityCheck(isNFC)
_internalInvariant(isNFC)
}
}
#endif // INTERNAL_CHECKS_ENABLED
@@ -929,7 +929,7 @@ extension _StringObject.CountAndFlags {
internal var count: Int {
@inline(__always) get { return Int(bitPattern: _storage & countMask) }
@inline(__always) set {
_sanityCheck(newValue <= countMask, "too large")
_internalInvariant(newValue <= countMask, "too large")
_storage = (_storage & flagsMask) | UInt(bitPattern: newValue)
}
}
@@ -949,7 +949,7 @@ extension _StringObject.CountAndFlags {
@usableFromInline @inline(never) @_effects(releasenone)
internal func _invariantCheck() {
if isASCII {
_sanityCheck(isNFC)
_internalInvariant(isNFC)
}
}
#endif // INTERNAL_CHECKS_ENABLED
@@ -962,7 +962,7 @@ extension _StringObject {
@inlinable
internal var largeCount: Int {
@inline(__always) get {
_sanityCheck(isLarge)
_internalInvariant(isLarge)
#if arch(i386) || arch(arm)
return _count
#else
@@ -975,7 +975,7 @@ extension _StringObject {
#else
_countAndFlags.count = newValue
#endif
_sanityCheck(newValue == largeCount)
_internalInvariant(newValue == largeCount)
_invariantCheck()
}
}
@@ -983,7 +983,7 @@ extension _StringObject {
@inlinable
internal var largeAddressBits: UInt {
@inline(__always) get {
_sanityCheck(isLarge)
_internalInvariant(isLarge)
return undiscriminatedObjectRawBits
}
}
@@ -991,7 +991,7 @@ extension _StringObject {
@inlinable
internal var nativeUTF8Start: UnsafePointer<UInt8> {
@inline(__always) get {
_sanityCheck(largeFastIsNative)
_internalInvariant(largeFastIsNative)
return UnsafePointer(
bitPattern: largeAddressBits &+ _StringObject.nativeBias
)._unsafelyUnwrappedUnchecked
@@ -1001,7 +1001,7 @@ extension _StringObject {
@inlinable
internal var nativeUTF8: UnsafeBufferPointer<UInt8> {
@inline(__always) get {
_sanityCheck(largeFastIsNative)
_internalInvariant(largeFastIsNative)
return UnsafeBufferPointer(start: nativeUTF8Start, count: largeCount)
}
}
@@ -1010,7 +1010,7 @@ extension _StringObject {
@usableFromInline @inline(never)
@_effects(releasenone)
internal func getSharedUTF8Start() -> UnsafePointer<UInt8> {
_sanityCheck(largeFastIsShared)
_internalInvariant(largeFastIsShared)
#if _runtime(_ObjC)
if largeIsCocoa {
return _cocoaUTF8Pointer(cocoaObject)._unsafelyUnwrappedUnchecked
@@ -1023,7 +1023,7 @@ extension _StringObject {
@usableFromInline
internal var sharedUTF8: UnsafeBufferPointer<UInt8> {
@_effects(releasenone) @inline(never) get {
_sanityCheck(largeFastIsShared)
_internalInvariant(largeFastIsShared)
let start = self.getSharedUTF8Start()
return UnsafeBufferPointer(start: start, count: largeCount)
}
@@ -1033,11 +1033,11 @@ extension _StringObject {
@inline(__always) get {
#if arch(i386) || arch(arm)
guard case .native(let storage) = _variant else {
_sanityCheckFailure()
_internalInvariantFailure()
}
return _unsafeUncheckedDowncast(storage, to: _StringStorage.self)
#else
_sanityCheck(hasNativeStorage)
_internalInvariant(hasNativeStorage)
return Builtin.reinterpretCast(largeAddressBits)
#endif
}
@@ -1047,12 +1047,12 @@ extension _StringObject {
@inline(__always) get {
#if arch(i386) || arch(arm)
guard case .native(let storage) = _variant else {
_sanityCheckFailure()
_internalInvariantFailure()
}
return _unsafeUncheckedDowncast(storage, to: _SharedStringStorage.self)
#else
_sanityCheck(largeFastIsShared && !largeIsCocoa)
_sanityCheck(hasSharedStorage)
_internalInvariant(largeFastIsShared && !largeIsCocoa)
_internalInvariant(hasSharedStorage)
return Builtin.reinterpretCast(largeAddressBits)
#endif
}
@@ -1062,11 +1062,11 @@ extension _StringObject {
@inline(__always) get {
#if arch(i386) || arch(arm)
guard case .bridged(let object) = _variant else {
_sanityCheckFailure()
_internalInvariantFailure()
}
return object
#else
_sanityCheck(largeIsCocoa && !isImmortal)
_internalInvariant(largeIsCocoa && !isImmortal)
return Builtin.reinterpretCast(largeAddressBits)
#endif
}
@@ -1119,7 +1119,7 @@ extension _StringObject {
@inlinable
internal var fastUTF8: UnsafeBufferPointer<UInt8> {
@inline(__always) get {
_sanityCheck(self.isLarge && self.providesFastUTF8)
_internalInvariant(self.isLarge && self.providesFastUTF8)
if _slowPath(self.largeFastIsShared) {
return sharedUTF8
}
@@ -1141,7 +1141,7 @@ extension _StringObject {
@inlinable
internal var objCBridgeableObject: AnyObject {
@inline(__always) get {
_sanityCheck(hasObjCBridgeableObject)
_internalInvariant(hasObjCBridgeableObject)
return Builtin.reinterpretCast(largeAddressBits)
}
}
@@ -1231,9 +1231,9 @@ extension _StringObject {
let discriminator = Nibbles.largeCocoa(providesFastUTF8: providesFastUTF8)
self.init(
object: cocoa, discriminator: discriminator, countAndFlags: countAndFlags)
_sanityCheck(self.largeAddressBits == Builtin.reinterpretCast(cocoa))
_sanityCheck(self.providesFastUTF8 == providesFastUTF8)
_sanityCheck(self.largeCount == length)
_internalInvariant(self.largeAddressBits == Builtin.reinterpretCast(cocoa))
_internalInvariant(self.providesFastUTF8 == providesFastUTF8)
_internalInvariant(self.largeCount == length)
#endif
}
}
@@ -1246,63 +1246,63 @@ extension _StringObject {
@usableFromInline @inline(never) @_effects(releasenone)
internal func _invariantCheck() {
#if arch(i386) || arch(arm)
_sanityCheck(MemoryLayout<_StringObject>.size == 12)
_sanityCheck(MemoryLayout<_StringObject>.stride == 12)
_sanityCheck(MemoryLayout<_StringObject>.alignment == 4)
_internalInvariant(MemoryLayout<_StringObject>.size == 12)
_internalInvariant(MemoryLayout<_StringObject>.stride == 12)
_internalInvariant(MemoryLayout<_StringObject>.alignment == 4)
_sanityCheck(MemoryLayout<_StringObject?>.size == 12)
_sanityCheck(MemoryLayout<_StringObject?>.stride == 12)
_sanityCheck(MemoryLayout<_StringObject?>.alignment == 4)
_internalInvariant(MemoryLayout<_StringObject?>.size == 12)
_internalInvariant(MemoryLayout<_StringObject?>.stride == 12)
_internalInvariant(MemoryLayout<_StringObject?>.alignment == 4)
#else
_sanityCheck(MemoryLayout<_StringObject>.size == 16)
_internalInvariant(MemoryLayout<_StringObject>.size == 16)
_sanityCheck(MemoryLayout<_StringObject?>.size == 16)
_internalInvariant(MemoryLayout<_StringObject?>.size == 16)
#endif
if isForeign {
_sanityCheck(largeIsCocoa, "No other foreign forms yet")
_internalInvariant(largeIsCocoa, "No other foreign forms yet")
}
if isSmall {
_sanityCheck(isImmortal)
_sanityCheck(smallCount <= 15)
_sanityCheck(smallCount == count)
_sanityCheck(!hasObjCBridgeableObject)
_internalInvariant(isImmortal)
_internalInvariant(smallCount <= 15)
_internalInvariant(smallCount == count)
_internalInvariant(!hasObjCBridgeableObject)
} else {
_sanityCheck(isLarge)
_sanityCheck(largeCount == count)
_internalInvariant(isLarge)
_internalInvariant(largeCount == count)
if providesFastUTF8 && largeFastIsNative {
_sanityCheck(!isSmall)
_sanityCheck(!largeIsCocoa)
_internalInvariant(!isSmall)
_internalInvariant(!largeIsCocoa)
if isImmortal {
_sanityCheck(!hasNativeStorage)
_sanityCheck(!hasObjCBridgeableObject)
_internalInvariant(!hasNativeStorage)
_internalInvariant(!hasObjCBridgeableObject)
} else {
_sanityCheck(hasNativeStorage)
_sanityCheck(hasObjCBridgeableObject)
_sanityCheck(nativeStorage.count == self.count)
_internalInvariant(hasNativeStorage)
_internalInvariant(hasObjCBridgeableObject)
_internalInvariant(nativeStorage.count == self.count)
}
}
if largeIsCocoa {
_sanityCheck(hasObjCBridgeableObject)
_sanityCheck(!isSmall)
_internalInvariant(hasObjCBridgeableObject)
_internalInvariant(!isSmall)
if isForeign {
} else {
_sanityCheck(largeFastIsShared)
_internalInvariant(largeFastIsShared)
}
}
}
#if arch(i386) || arch(arm)
switch _variant {
case .immortal:
_sanityCheck(isImmortal)
_internalInvariant(isImmortal)
case .native:
_sanityCheck(hasNativeStorage || hasSharedStorage)
_internalInvariant(hasNativeStorage || hasSharedStorage)
case .bridged:
_sanityCheck(isLarge)
_sanityCheck(largeIsCocoa)
_internalInvariant(isLarge)
_internalInvariant(largeIsCocoa)
}
#endif
}