Skip to content

Commit 9692277

Browse files
committed
Chip away at Swift 6
1 parent d09f520 commit 9692277

File tree

89 files changed

+706
-769
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

89 files changed

+706
-769
lines changed

Package.swift

Lines changed: 114 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -147,9 +147,7 @@ let package = Package(
147147
.define("GLES_SILENCE_DEPRECATION",
148148
.when(platforms: [.iOS, .tvOS])),
149149
],
150-
swiftSettings: {
151-
var settings: [SwiftSetting] = []
152-
150+
swiftSettings: .default(withCustomization: { settings in
153151
settings.append(
154152
.define("GATEENGINE_USE_OPENAL", .when(platforms: [.linux]))
155153
)
@@ -189,33 +187,6 @@ let package = Package(
189187
.define("GATEENGINE_PLATFORM_SUPPORTS_FOUNDATION_FILEMANAGER",
190188
.when(platforms: .any(except: .wasi))),
191189
])
192-
193-
#if true // Experimental and upcomming language features.
194-
// These should be disabled for releases.
195-
// These are to get a headstart on the next Swift versions.
196-
// https://www.swift.org/swift-evolution/#?upcoming=true
197-
settings.append(contentsOf: [
198-
.enableUpcomingFeature("IsolatedDefaultValues"),
199-
.enableUpcomingFeature("InternalImportsByDefault"),
200-
.enableUpcomingFeature("DisableOutwardActorInference"),
201-
.enableUpcomingFeature("ImportObjcForwardDeclarations"),
202-
.enableUpcomingFeature("BareSlashRegexLiterals"),
203-
.enableUpcomingFeature("ExistentialAny"),
204-
.enableUpcomingFeature("ForwardTrailingClosures"),
205-
.enableUpcomingFeature("ConciseMagicFile"),
206-
.enableUpcomingFeature("DynamicActorIsolation"),
207-
.enableUpcomingFeature("FullTypedThrows"),
208-
.enableUpcomingFeature("InferSendableFromCaptures"),
209-
.enableUpcomingFeature("DeprecateApplicationMain"),
210-
211-
.enableExperimentalFeature("AccessLevelOnImport"),
212-
.enableExperimentalFeature("StrictConcurrency"),
213-
])
214-
#if swift(>=6.2)
215-
settings.append(.enableExperimentalFeature("IsolatedDeinit"))
216-
#endif
217-
#endif
218-
219190

220191
#if HTML5
221192
// Options for development of WASI platform
@@ -241,8 +212,7 @@ let package = Package(
241212
//.define("GATEENGINE_FORCE_OPNEGL_APPLE", .when(platforms: [.macOS, /*.iOS, .tvOS*/])),
242213
])
243214
#endif
244-
return settings
245-
}(),
215+
}),
246216
plugins: [
247217
//.plugin(name: "SwiftLintPlugin", package: "SwiftLint"),
248218
]),
@@ -252,27 +222,23 @@ let package = Package(
252222
"GameMath",
253223
.product(name: "Collections", package: "swift-collections")
254224
],
255-
swiftSettings: [
256-
.define("GATEENGINE_DEBUG_SHADERS", .when(configuration: .debug))
257-
]),
225+
swiftSettings: .default(withCustomization: { settings in
226+
settings.append(.define("GATEENGINE_DEBUG_SHADERS", .when(configuration: .debug)))
227+
})),
258228

259-
.target(name: "GameMath", swiftSettings: {
260-
var array: [SwiftSetting] = []
261-
229+
.target(name: "GameMath", swiftSettings: .default(withCustomization: { settings in
262230
#if false
263231
// Possibly faster on old hardware, but less accurate.
264232
// There is no reason to use this on modern hardware.
265-
array.append(.define("GameMathUseFastInverseSquareRoot"))
233+
settings.append(.define("GameMathUseFastInverseSquareRoot"))
266234
#endif
267235

268236
// These settings are faster only with optimization.
269237
#if true
270-
array.append(.define("GameMathUseSIMD", .when(configuration: .release, traits: ["SIMD"])))
271-
array.append(.define("GameMathUseLoopVectorization", .when(configuration: .release)))
238+
settings.append(.define("GameMathUseSIMD", .when(configuration: .release, traits: ["SIMD"])))
239+
settings.append(.define("GameMathUseLoopVectorization", .when(configuration: .release)))
272240
#endif
273-
274-
return array.isEmpty ? nil : array
275-
}()),
241+
})),
276242
])
277243

278244
// MARK: - Macros
@@ -351,9 +317,9 @@ let package = Package(
351317
// Direct3D12
352318
.target(name: "Direct3D12",
353319
path: "Dependencies/Direct3D12",
354-
swiftSettings: [
355-
.define("Direct3D12ExcludeOriginalStyleAPI", .when(configuration: .release)),
356-
]),
320+
swiftSettings: .default(withCustomization: { settings in
321+
settings.append(.define("Direct3D12ExcludeOriginalStyleAPI", .when(configuration: .release)))
322+
})),
357323
// XAudio2
358324
.target(name: "XAudio2",
359325
dependencies: ["XAudio2C"],
@@ -418,9 +384,9 @@ let package = Package(
418384
.testTarget(name: "GateEngineTests",
419385
dependencies: ["GateEngine"],
420386
resources: [.copy("Resources")],
421-
swiftSettings: [
422-
.define("DISABLE_GRAVITY_TESTS", .when(platforms: [.wasi])),
423-
]),
387+
swiftSettings: .default(withCustomization: { settings in
388+
settings.append(.define("DISABLE_GRAVITY_TESTS", .when(platforms: [.wasi])))
389+
})),
424390
.testTarget(name: "GameMathTests",
425391
dependencies: ["GameMath"]),
426392
.testTarget(name: "GravityTests",
@@ -431,19 +397,19 @@ let package = Package(
431397
.copy("Resources/infiniteloop"),
432398
.copy("Resources/unittest"),
433399
],
434-
swiftSettings: [
400+
swiftSettings: .default(withCustomization: { settings in
435401
// https://github.com/STREGAsGate/GateEngine/issues/36
436-
.define("DISABLE_GRAVITY_TESTS", .when(platforms: [.wasi])),
437-
]),
402+
settings.append(.define("DISABLE_GRAVITY_TESTS", .when(platforms: [.wasi])))
403+
})),
438404
])
439405
#if !os(Windows)
440406
targets.append(contentsOf: [
441407
.testTarget(name: "GameMathSIMDTests",
442408
dependencies: ["GameMath"],
443-
swiftSettings: [
444-
.define("GameMathUseSIMD"),
445-
.define("GameMathUseLoopVectorization")
446-
]),
409+
swiftSettings: .default(withCustomization: { settings in
410+
settings.append(.define("GameMathUseSIMD"))
411+
settings.append(.define("GameMathUseLoopVectorization"))
412+
})),
447413
])
448414
#endif
449415

@@ -674,3 +640,94 @@ extension Array where Element == Platform {
674640
}
675641
}
676642

643+
extension Array where Element == SwiftSetting {
644+
static var `default`: Self? {
645+
var settings: Self = []
646+
if let upcommingFeatureFlags = Self.upcommingFeatureFlags {
647+
settings.append(contentsOf: upcommingFeatureFlags)
648+
}
649+
if let exprimentalFeatureFlags = Self.exprimentalFeatureFlags {
650+
settings.append(contentsOf: exprimentalFeatureFlags)
651+
}
652+
return settings.isEmpty ? nil : settings
653+
}
654+
655+
static func `default`(withCustomization block: (_ settings: inout Self)->()) -> Self? {
656+
var settings: Self = .default ?? []
657+
block(&settings)
658+
return settings.isEmpty ? nil : settings
659+
}
660+
661+
static var upcommingFeatureFlags: Self? {
662+
var settings: Self = []
663+
#if compiler(>=6.2)
664+
settings.append(contentsOf: [
665+
.enableUpcomingFeature("InferIsolatedConformances"),
666+
.enableUpcomingFeature("NonisolatedNonsendingByDefault"),
667+
.enableUpcomingFeature("NonescapableTypes"),
668+
])
669+
#endif
670+
#if compiler(>=6.1)
671+
settings.append(contentsOf: [
672+
.enableUpcomingFeature("MemberImportVisibility"),
673+
])
674+
#endif
675+
#if compiler(>=6.0)
676+
settings.append(contentsOf: [
677+
.enableUpcomingFeature("GlobalActorIsolatedTypesUsability"),
678+
.enableUpcomingFeature("DynamicActorIsolation"),
679+
.enableUpcomingFeature("InferSendableFromCaptures"),
680+
.enableUpcomingFeature("RegionBasedIsolation"),
681+
.enableUpcomingFeature("InternalImportsByDefault"),
682+
])
683+
#endif
684+
#if compiler(>=5.10)
685+
settings.append(contentsOf: [
686+
.enableUpcomingFeature("GlobalConcurrency"),
687+
.enableUpcomingFeature("IsolatedDefaultValues"),
688+
.enableUpcomingFeature("DeprecateApplicationMain"),
689+
])
690+
#endif
691+
#if compiler(>=5.9)
692+
settings.append(contentsOf: [
693+
.enableUpcomingFeature("DisableOutwardActorInference"),
694+
.enableUpcomingFeature("ImportObjcForwardDeclarations"),
695+
])
696+
#endif
697+
#if compiler(>=5.8)
698+
settings.append(contentsOf: [
699+
.enableUpcomingFeature("ConciseMagicFile"),
700+
])
701+
#endif
702+
#if compiler(>=5.7)
703+
settings.append(contentsOf: [
704+
.enableUpcomingFeature("BareSlashRegexLiterals"),
705+
.enableUpcomingFeature("ImplicitOpenExistentials"),
706+
])
707+
#endif
708+
#if compiler(>=5.6)
709+
settings.append(contentsOf: [
710+
.enableUpcomingFeature("StrictConcurrency=complete"),
711+
.enableUpcomingFeature("ExistentialAny"),
712+
])
713+
#endif
714+
#if compiler(>=5.3)
715+
settings.append(contentsOf: [
716+
.enableUpcomingFeature("ForwardTrailingClosures"),
717+
])
718+
#endif
719+
720+
return settings.isEmpty ? nil : settings
721+
}
722+
723+
static var exprimentalFeatureFlags: Self? {
724+
var settings: Self = []
725+
#if compiler(>=6.2)
726+
settings.append(contentsOf: [
727+
.enableExperimentalFeature("IsolatedDeinit"),
728+
])
729+
#endif
730+
731+
return settings.isEmpty ? nil : settings
732+
}
733+
}

Sources/GameMath/2D Types/2D Physics/2D Colliders/AxisAlignedBoundingBox2D.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ public struct AxisAlignedBoundingBox2D: Collider2D, Sendable {
203203
}
204204

205205
@_disfavoredOverload
206-
public func interpenetration(comparing collider: Collider2D) -> Interpenetration2D? {
206+
public func interpenetration(comparing collider: any Collider2D) -> Interpenetration2D? {
207207
switch collider {
208208
case let collider as BoundingCircle2D:
209209
return interpenetration(comparing: collider)
@@ -374,14 +374,14 @@ public extension AxisAlignedBoundingBox2D {
374374
}
375375

376376
extension AxisAlignedBoundingBox2D: Codable {
377-
public func encode(to encoder: Encoder) throws {
377+
public func encode(to encoder: any Encoder) throws {
378378
var container = encoder.singleValueContainer()
379379
try container.encode([center.x, center.y,
380380
_offset.x, _offset.y,
381381
_radius.x, _radius.y])
382382
}
383383

384-
public init(from decoder: Decoder) throws {
384+
public init(from decoder: any Decoder) throws {
385385
let container = try decoder.singleValueContainer()
386386
let floats = try container.decode(Array<Float>.self)
387387

Sources/GameMath/2D Types/2D Physics/2D Colliders/BoundingCircle2D.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ public struct BoundingCircle2D: Collider2D, Sendable {
103103
}
104104

105105
@inlinable
106-
public func interpenetration(comparing collider: Collider2D) -> Interpenetration2D? {
106+
public func interpenetration(comparing collider: any Collider2D) -> Interpenetration2D? {
107107
switch collider {
108108
case let collider as BoundingCircle2D:
109109
return self.interpenetration(comparing: collider)

Sources/GameMath/2D Types/2D Physics/2D Colliders/BoundingEllipsoid2D.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ public struct BoundingEllipsoid2D: Collider2D, Sendable {
8080
return interpenetration
8181
}
8282

83-
public func interpenetration(comparing collider: Collider2D) -> Interpenetration2D? {
83+
public func interpenetration(comparing collider: any Collider2D) -> Interpenetration2D? {
8484
switch collider {
8585
case let collider as BoundingEllipsoid2D:
8686
return self.interpenetration(comparing: collider)

Sources/GameMath/2D Types/2D Physics/2D Colliders/Collider2D.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public protocol Collider2D: Codable, Sendable {
1616
mutating func update(sizeAndOffsetUsingTransform transform: Transform2)
1717

1818
func closestSurfacePoint(from point: Position2) -> Position2
19-
func interpenetration(comparing collider: Collider2D) -> Interpenetration2D?
19+
func interpenetration(comparing collider: any Collider2D) -> Interpenetration2D?
2020

2121
func surfacePoint(for ray: Ray2D) -> Position2?
2222
func surfaceNormal(facing point: Position2) -> Direction2

Sources/GameMath/2D Types/Transform2.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -159,15 +159,15 @@ public extension Transform2 {
159159

160160
extension Transform2: Codable {
161161
@inlinable
162-
public func encode(to encoder: Encoder) throws {
162+
public func encode(to encoder: any Encoder) throws {
163163
var container = encoder.singleValueContainer()
164164
try container.encode([position.x, position.y,
165165
rotation.rawValue,
166166
scale.x, scale.y])
167167
}
168168

169169
@inlinable
170-
public init(from decoder: Decoder) throws {
170+
public init(from decoder: any Decoder) throws {
171171
let container = try decoder.singleValueContainer()
172172
let values = try container.decode(Array<Float>.self)
173173

Sources/GameMath/2D Types/Vector2.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -434,13 +434,13 @@ extension Vector2 {
434434

435435
extension Vector2 {
436436
@inlinable
437-
public func encode(to encoder: Encoder) throws {
437+
public func encode(to encoder: any Encoder) throws {
438438
var container = encoder.singleValueContainer()
439439
try container.encode([x, y])
440440
}
441441

442442
@inlinable
443-
public init(from decoder: Decoder) throws {
443+
public init(from decoder: any Decoder) throws {
444444
let container = try decoder.singleValueContainer()
445445
let values = try container.decode(Array<Float>.self)
446446
self.init(values[0], values[1])

Sources/GameMath/3D Types/3D Physics/3D Colliders/AxisAlignedBoundingBox3D.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ public struct AxisAlignedBoundingBox3D: Collider3D, Sendable {
185185
}
186186

187187
@inlinable
188-
public func interpenetration(comparing collider: Collider3D) -> Interpenetration3D? {
188+
public func interpenetration(comparing collider: any Collider3D) -> Interpenetration3D? {
189189
switch collider {
190190
case let collider as BoundingSphere3D:
191191
return interpenetration(comparing: collider)
@@ -483,14 +483,14 @@ public extension AxisAlignedBoundingBox3D {
483483
}
484484

485485
extension AxisAlignedBoundingBox3D: Codable {
486-
public func encode(to encoder: Encoder) throws {
486+
public func encode(to encoder: any Encoder) throws {
487487
var container = encoder.singleValueContainer()
488488
try container.encode([center.x, center.y, center.z,
489489
_offset.x, _offset.y, _offset.z,
490490
_radius.x, _radius.y, radius.z])
491491
}
492492

493-
public init(from decoder: Decoder) throws {
493+
public init(from decoder: any Decoder) throws {
494494
let container = try decoder.singleValueContainer()
495495
let floats = try container.decode(Array<Float>.self)
496496

Sources/GameMath/3D Types/3D Physics/3D Colliders/BoundingEllipsoid3D.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ public struct BoundingEllipsoid3D: Collider3D, Sendable {
8888
}
8989

9090
@inlinable
91-
public func interpenetration(comparing collider: Collider3D) -> Interpenetration3D? {
91+
public func interpenetration(comparing collider: any Collider3D) -> Interpenetration3D? {
9292
switch collider {
9393
case let collider as BoundingEllipsoid3D:
9494
return interpenetration(comparing: collider)

Sources/GameMath/3D Types/3D Physics/3D Colliders/BoundingSphere3D.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ public struct BoundingSphere3D: Collider3D, Sendable {
110110
}
111111

112112
@inlinable
113-
public func interpenetration(comparing collider: Collider3D) -> Interpenetration3D? {
113+
public func interpenetration(comparing collider: any Collider3D) -> Interpenetration3D? {
114114
switch collider {
115115
case let collider as BoundingSphere3D:
116116
return self.interpenetration(comparing: collider)

0 commit comments

Comments
 (0)