diff --git a/CMakeLists.txt b/CMakeLists.txt index ffb0ea1ab..6e1f9ffba 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -94,7 +94,6 @@ list(APPEND CMAKE_MODULE_PATH ${SwiftFoundation_SOURCE_DIR}/cmake/modules) # Availability Macros (only applies to FoundationEssentials and FoundationInternationalization) set(_SwiftFoundation_BaseAvailability "macOS 15, iOS 18, tvOS 18, watchOS 11") -set(_SwiftFoundation_macOS26Availability "macOS 26, iOS 26, tvOS 26, watchOS 26") set(_SwiftFoundation_FutureAvailability "macOS 10000, iOS 10000, tvOS 10000, watchOS 10000") # All versions to define for each availability name @@ -106,13 +105,11 @@ list(APPEND _SwiftFoundation_versions # Each availability name to define list(APPEND _SwiftFoundation_availability_names - "FoundationPreview" - "FoundationSpan") + "FoundationPreview") # The aligned availability for each name (in the same order) list(APPEND _SwiftFoundation_availability_releases - ${_SwiftFoundation_BaseAvailability} - ${_SwiftFoundation_macOS26Availability}) + ${_SwiftFoundation_BaseAvailability}) foreach(version ${_SwiftFoundation_versions}) foreach(name release IN ZIP_LISTS _SwiftFoundation_availability_names _SwiftFoundation_availability_releases) diff --git a/Package.swift b/Package.swift index 560a10cf9..371dc21b8 100644 --- a/Package.swift +++ b/Package.swift @@ -8,7 +8,6 @@ import CompilerPluginSupport let availabilityTags: [_Availability] = [ _Availability("FoundationPreview"), // Default FoundationPreview availability - _Availability("FoundationSpan", availability: .macOS26), // Availability of Span types ] let versionNumbers = ["6.0.2", "6.1", "6.2"] diff --git a/Sources/FoundationEssentials/Data/Data.swift b/Sources/FoundationEssentials/Data/Data.swift index b6b73ed46..1f684186e 100644 --- a/Sources/FoundationEssentials/Data/Data.swift +++ b/Sources/FoundationEssentials/Data/Data.swift @@ -2203,7 +2203,8 @@ public struct Data : Equatable, Hashable, RandomAccessCollection, MutableCollect return try _representation.withUnsafeBytes(body) } - @available(FoundationSpan 6.2, *) + @available(macOS 10.14.4, iOS 12.2, watchOS 5.2, tvOS 12.2, visionOS 1.1, *) + @_alwaysEmitIntoClient public var bytes: RawSpan { @lifetime(borrow self) borrowing get { @@ -2230,7 +2231,8 @@ public struct Data : Equatable, Hashable, RandomAccessCollection, MutableCollect } } - @available(FoundationSpan 6.2, *) + @available(macOS 10.14.4, iOS 12.2, watchOS 5.2, tvOS 12.2, visionOS 1.1, *) + @_alwaysEmitIntoClient public var span: Span { @lifetime(borrow self) borrowing get { @@ -2239,7 +2241,8 @@ public struct Data : Equatable, Hashable, RandomAccessCollection, MutableCollect } } - @available(FoundationSpan 6.2, *) + @available(macOS 10.14.4, iOS 12.2, watchOS 5.2, tvOS 12.2, visionOS 1.1, *) + @_alwaysEmitIntoClient public var mutableBytes: MutableRawSpan { @lifetime(&self) mutating get { @@ -2266,7 +2269,8 @@ public struct Data : Equatable, Hashable, RandomAccessCollection, MutableCollect } } - @available(FoundationSpan 6.2, *) + @available(macOS 10.14.4, iOS 12.2, watchOS 5.2, tvOS 12.2, visionOS 1.1, *) + @_alwaysEmitIntoClient public var mutableSpan: MutableSpan { @lifetime(&self) mutating get { @@ -2970,53 +2974,3 @@ extension Data : Codable { } } } - -// TODO: remove once _overrideLifetime is public in the standard library -/// Unsafely discard any lifetime dependency on the `dependent` argument. Return -/// a value identical to `dependent` with a lifetime dependency on the caller's -/// borrow scope of the `source` argument. -@unsafe -@_unsafeNonescapableResult -@_alwaysEmitIntoClient -@_transparent -@lifetime(borrow source) -internal func _overrideLifetime< - T: ~Copyable & ~Escapable, U: ~Copyable & ~Escapable ->( - _ dependent: consuming T, borrowing source: borrowing U -) -> T { - dependent -} - -/// Unsafely discard any lifetime dependency on the `dependent` argument. Return -/// a value identical to `dependent` that inherits all lifetime dependencies from -/// the `source` argument. -@unsafe -@_unsafeNonescapableResult -@_alwaysEmitIntoClient -@_transparent -@lifetime(copy source) -internal func _overrideLifetime< - T: ~Copyable & ~Escapable, U: ~Copyable & ~Escapable ->( - _ dependent: consuming T, copying source: borrowing U -) -> T { - dependent -} - -/// Unsafely discard any lifetime dependency on the `dependent` argument. -/// Return a value identical to `dependent` with a lifetime dependency -/// on the caller's exclusive borrow scope of the `source` argument. -@unsafe -@_unsafeNonescapableResult -@_alwaysEmitIntoClient -@_transparent -@lifetime(&source) -internal func _overrideLifetime< - T: ~Copyable & ~Escapable, U: ~Copyable & ~Escapable ->( - _ dependent: consuming T, - mutating source: inout U -) -> T { - dependent -} diff --git a/Tests/FoundationEssentialsTests/DataTests.swift b/Tests/FoundationEssentialsTests/DataTests.swift index a2333f567..64648c118 100644 --- a/Tests/FoundationEssentialsTests/DataTests.swift +++ b/Tests/FoundationEssentialsTests/DataTests.swift @@ -1645,8 +1645,8 @@ private final class DataTests { #endif } - @available(FoundationSpan 6.2, *) - @Test func inlineDataSpan() throws { + @Test + func inlineDataSpan() throws { var source = Data() var span = source.span var isEmpty = span.isEmpty @@ -1661,16 +1661,16 @@ private final class DataTests { #expect(firstElement == 1) } - @available(FoundationSpan 6.2, *) - @Test func inlineSliceDataSpan() throws { + @Test + func inlineSliceDataSpan() throws { let source = Data(0 ... .max) let span = source.span #expect(span.count == source.count) #expect(span[span.indices.last!] == .max) } - @available(FoundationSpan 6.2, *) - @Test func inlineDataMutableSpan() throws { + @Test + func inlineDataMutableSpan() throws { #if !canImport(Darwin) || FOUNDATION_FRAMEWORK var source = Data() var span = source.mutableSpan @@ -1693,8 +1693,8 @@ private final class DataTests { #endif } - @available(FoundationSpan 6.2, *) - @Test func inlineSliceDataMutableSpan() throws { + @Test + func inlineSliceDataMutableSpan() throws { #if !canImport(Darwin) || FOUNDATION_FRAMEWORK var source = Data(0..<100) let count = source.count @@ -1707,8 +1707,8 @@ private final class DataTests { #endif } - @available(FoundationSpan 6.2, *) - @Test func inlineDataMutableRawSpan() throws { + @Test + func inlineDataMutableRawSpan() throws { var source = Data() var span = source.mutableBytes var isEmpty = span.isEmpty @@ -1728,8 +1728,8 @@ private final class DataTests { #expect(source[i] == v) } - @available(FoundationSpan 6.2, *) - @Test func inlineSliceDataMutableRawSpan() throws { + @Test + func inlineSliceDataMutableRawSpan() throws { var source = Data(0..<100) let count = source.count var span = source.mutableBytes @@ -2386,7 +2386,6 @@ extension DataTests { @Suite("Large Data Tests", .serialized) struct LargeDataTests { @Test - @available(FoundationSpan 6.2, *) func largeSliceDataSpan() throws { #if _pointerBitWidth(_64) let count = Int(Int32.max) @@ -2404,7 +2403,6 @@ struct LargeDataTests { } @Test - @available(FoundationSpan 6.2, *) func largeSliceDataMutableSpan() throws { #if _pointerBitWidth(_64) var count = Int(Int32.max) @@ -2428,7 +2426,6 @@ struct LargeDataTests { } @Test - @available(FoundationSpan 6.2, *) func largeSliceDataMutableRawSpan() throws { #if _pointerBitWidth(_64) var count = Int(Int32.max)