mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
[stdlib] Replace "sanityCheck" with "internalInvariant" (#20616)
* Replace "sanityCheck" with "internalInvariant"
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user