From d68e11b03cc51ca8406ded587e7825689acef460 Mon Sep 17 00:00:00 2001 From: Mustii <26250654+mustiikhalil@users.noreply.github.com> Date: Sat, 14 Feb 2026 11:05:18 +0100 Subject: [PATCH] Migrate to swift 6.0 --- .github/workflows/build.yml | 2 +- Package.swift | 20 ++++++++++++++----- swift/Sources/FlatBuffers/ByteBuffer.swift | 2 +- .../FlatBuffers/FlatBufferBuilder.swift | 2 +- swift/Sources/FlatBuffers/TableVerifier.swift | 2 +- .../Vectors/FlatbufferVector.swift | 2 +- .../Vectors/UnionFlatbufferVector.swift | 4 ++-- .../FlatBuffers/_InternalByteBuffer.swift | 2 +- swift/Sources/FlexBuffers/ByteBuffer.swift | 2 +- .../Sources/FlexBuffers/FlexBufferType.swift | 2 +- .../Sources/FlexBuffers/Utils/BitWidth.swift | 2 +- swift/Sources/FlexBuffers/Utils/Value.swift | 4 ++-- .../Writer/FlexBuffersWriter.swift | 9 ++++++--- 13 files changed, 34 insertions(+), 21 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 30e0cecdf3d..0643fcdd866 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -495,7 +495,7 @@ jobs: name: Test Swift Linux strategy: matrix: - swift: ["5.10", "6.1", "6.2"] + swift: ["6.0", "6.1", "6.2"] runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v6 diff --git a/Package.swift b/Package.swift index 4f60a8c7455..5c2320d613a 100644 --- a/Package.swift +++ b/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version:5.10 +// swift-tools-version:6.0 /* * Copyright 2020 Google Inc. All rights reserved. * @@ -36,14 +36,17 @@ let package = Package( .target( name: "FlatBuffers", dependencies: ["Common"], - path: "swift/Sources/FlatBuffers"), + path: "swift/Sources/FlatBuffers", + swiftSettings: .settings), .target( name: "FlexBuffers", dependencies: ["Common"], - path: "swift/Sources/FlexBuffers"), + path: "swift/Sources/FlexBuffers", + swiftSettings: .settings), .target( name: "Common", - path: "swift/Sources/Common"), + path: "swift/Sources/Common", + swiftSettings: .settings), .testTarget( name: "FlatbuffersTests", dependencies: .dependencies, @@ -52,7 +55,14 @@ let package = Package( name: "FlexbuffersTests", dependencies: ["FlexBuffers"], path: "tests/swift/Tests/Flexbuffers"), - ]) + ], + swiftLanguageModes: [.v6]) + +extension Array where Element == SwiftSetting { + static var settings: [SwiftSetting] { + [.enableUpcomingFeature("ExistentialAny")] + } +} extension Array where Element == Package.Dependency { static var dependencies: [Package.Dependency] { diff --git a/swift/Sources/FlatBuffers/ByteBuffer.swift b/swift/Sources/FlatBuffers/ByteBuffer.swift index ec27fd1d73f..08f78814b1e 100644 --- a/swift/Sources/FlatBuffers/ByteBuffer.swift +++ b/swift/Sources/FlatBuffers/ByteBuffer.swift @@ -30,7 +30,7 @@ public struct ByteBuffer { enum Blob { #if !os(WASI) case data(Data) - case bytes(ContiguousBytes) + case bytes(any ContiguousBytes) #endif case byteBuffer(_InternalByteBuffer) diff --git a/swift/Sources/FlatBuffers/FlatBufferBuilder.swift b/swift/Sources/FlatBuffers/FlatBufferBuilder.swift index 9e778d225c1..91afb6fa7e1 100644 --- a/swift/Sources/FlatBuffers/FlatBufferBuilder.swift +++ b/swift/Sources/FlatBuffers/FlatBufferBuilder.swift @@ -488,7 +488,7 @@ public struct FlatBufferBuilder { /// /// - Parameter bytes: bytes to be written into the buffer /// - Returns: ``Offset`` of the vector - mutating public func createVector(bytes: ContiguousBytes) -> Offset { + mutating public func createVector(bytes: any ContiguousBytes) -> Offset { bytes.withUnsafeBytes { startVector($0.count, elementSize: MemoryLayout.size) _bb.push(bytes: $0) diff --git a/swift/Sources/FlatBuffers/TableVerifier.swift b/swift/Sources/FlatBuffers/TableVerifier.swift index b09db49e6bf..d4c4059dd1e 100644 --- a/swift/Sources/FlatBuffers/TableVerifier.swift +++ b/swift/Sources/FlatBuffers/TableVerifier.swift @@ -115,7 +115,7 @@ public struct TableVerifier { unionKeyName: String, fieldName: String, required: Bool, - completion: @escaping (inout Verifier, T, Int) throws -> Void) throws + completion: (inout Verifier, T, Int) throws -> Void) throws where T: UnionEnum { let keyPos = try dereference(key) diff --git a/swift/Sources/FlatBuffers/Vectors/FlatbufferVector.swift b/swift/Sources/FlatBuffers/Vectors/FlatbufferVector.swift index a9b03582bdc..fae8b4c13ea 100644 --- a/swift/Sources/FlatBuffers/Vectors/FlatbufferVector.swift +++ b/swift/Sources/FlatBuffers/Vectors/FlatbufferVector.swift @@ -68,7 +68,7 @@ public struct FlatbufferVector< } extension FlatbufferVector: Encodable where Element: Encodable { - public func encode(to encoder: Encoder) throws { + public func encode(to encoder: any Encoder) throws { var container = encoder.unkeyedContainer() for element in self { try container.encode(element) diff --git a/swift/Sources/FlatBuffers/Vectors/UnionFlatbufferVector.swift b/swift/Sources/FlatBuffers/Vectors/UnionFlatbufferVector.swift index ab61e6fb170..7b595814f85 100644 --- a/swift/Sources/FlatBuffers/Vectors/UnionFlatbufferVector.swift +++ b/swift/Sources/FlatBuffers/Vectors/UnionFlatbufferVector.swift @@ -49,8 +49,8 @@ public struct UnionFlatbufferVector { public subscript( position: Int, - Type: FlatbuffersVectorInitializable - .Type) -> FlatbuffersVectorInitializable + Type: any FlatbuffersVectorInitializable + .Type) -> any FlatbuffersVectorInitializable { guard position < count else { fatalError( diff --git a/swift/Sources/FlatBuffers/_InternalByteBuffer.swift b/swift/Sources/FlatBuffers/_InternalByteBuffer.swift index 8dced85b41e..e4ed2f08dca 100644 --- a/swift/Sources/FlatBuffers/_InternalByteBuffer.swift +++ b/swift/Sources/FlatBuffers/_InternalByteBuffer.swift @@ -146,7 +146,7 @@ struct _InternalByteBuffer { #if !os(WASI) @inline(__always) @usableFromInline - mutating func push(bytes: ContiguousBytes) { + mutating func push(bytes: any ContiguousBytes) { bytes.withUnsafeBytes { ptr in ensureSpace(size: ptr.count) memcpy( diff --git a/swift/Sources/FlexBuffers/ByteBuffer.swift b/swift/Sources/FlexBuffers/ByteBuffer.swift index af75631acc4..f4dd2adb772 100644 --- a/swift/Sources/FlexBuffers/ByteBuffer.swift +++ b/swift/Sources/FlexBuffers/ByteBuffer.swift @@ -30,7 +30,7 @@ public struct ByteBuffer { enum Blob { #if !os(WASI) case data(Data) - case bytes(ContiguousBytes) + case bytes(any ContiguousBytes) #endif case byteBuffer(_InternalByteBuffer) diff --git a/swift/Sources/FlexBuffers/FlexBufferType.swift b/swift/Sources/FlexBuffers/FlexBufferType.swift index 4f51c5d2871..2d75b2a8831 100644 --- a/swift/Sources/FlexBuffers/FlexBufferType.swift +++ b/swift/Sources/FlexBuffers/FlexBufferType.swift @@ -16,7 +16,7 @@ import Foundation -public enum FlexBufferType: UInt64 { +public enum FlexBufferType: UInt64, Sendable { case null = 0 /// Variable width signed integer: `Int8, Int16, Int32, Int64` case int = 1 diff --git a/swift/Sources/FlexBuffers/Utils/BitWidth.swift b/swift/Sources/FlexBuffers/Utils/BitWidth.swift index d6205002a3d..d4d8431a977 100644 --- a/swift/Sources/FlexBuffers/Utils/BitWidth.swift +++ b/swift/Sources/FlexBuffers/Utils/BitWidth.swift @@ -17,7 +17,7 @@ import Foundation @usableFromInline -enum BitWidth: UInt64, CaseIterable { +enum BitWidth: UInt64, CaseIterable, Sendable { case w8 = 0 case w16 = 1 case w32 = 2 diff --git a/swift/Sources/FlexBuffers/Utils/Value.swift b/swift/Sources/FlexBuffers/Utils/Value.swift index b9059feb31b..36bda4a73f3 100644 --- a/swift/Sources/FlexBuffers/Utils/Value.swift +++ b/swift/Sources/FlexBuffers/Utils/Value.swift @@ -20,10 +20,10 @@ import Foundation import Common #endif -public struct Value: Equatable { +public struct Value: Equatable, Sendable { @usableFromInline - enum Union: Equatable { + enum Union: Equatable, Sendable { case i(Int64) case u(UInt64) case f(Double) diff --git a/swift/Sources/FlexBuffers/Writer/FlexBuffersWriter.swift b/swift/Sources/FlexBuffers/Writer/FlexBuffersWriter.swift index 449ab5891a6..fd610875f47 100644 --- a/swift/Sources/FlexBuffers/Writer/FlexBuffersWriter.swift +++ b/swift/Sources/FlexBuffers/Writer/FlexBuffersWriter.swift @@ -479,12 +479,12 @@ public struct FlexBuffersWriter { @inline(__always) public mutating func add(string: borrowing String, key: borrowing String) { add(key: key) - write(str: string, len: string.count) + write(str: string, len: string.utf8.count) } @inline(__always) public mutating func add(string: borrowing String) { - write(str: string, len: string.count) + write(str: string, len: string.utf8.count) } // MARK: - Writing Blobs @@ -591,7 +591,7 @@ public struct FlexBuffersWriter { @discardableResult @inline(__always) private mutating func add(key: borrowing String) -> UInt { - add(key: key, len: key.count) + add(key: key, len: key.utf8.count) } @discardableResult @@ -977,6 +977,9 @@ fileprivate struct Stack: RandomAccessCollection { mutating func removeAll(keepingCapacity keepCapacity: Bool = false) { count = 0 if !keepCapacity { + let ptr = storage.memory + defer { ptr.deallocate() } + capacity = Self.initialCapacity storage.memory = UnsafeMutableRawPointer.allocate( byteCount: capacity,