Skip to content

Commit 0944319

Browse files
[NFC] replace type-erased pattern matching with typed if-else blocks (#3840)
This removes an unreachable `default` case, should result in less runtime cost.
1 parent 1de6456 commit 0944319

File tree

1 file changed

+13
-11
lines changed

1 file changed

+13
-11
lines changed

Sources/PackageDescription/Version.swift

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -99,22 +99,24 @@ extension Version: Comparable {
9999
return true // Prerelease lhs < non-prerelease rhs
100100
}
101101

102-
let zippedIdentifiers = zip(lhs.prereleaseIdentifiers, rhs.prereleaseIdentifiers)
103-
for (lhsPrereleaseIdentifier, rhsPrereleaseIdentifier) in zippedIdentifiers {
102+
for (lhsPrereleaseIdentifier, rhsPrereleaseIdentifier) in zip(lhs.prereleaseIdentifiers, rhs.prereleaseIdentifiers) {
104103
if lhsPrereleaseIdentifier == rhsPrereleaseIdentifier {
105104
continue
106105
}
107106

108-
let typedLhsIdentifier: Any = Int(lhsPrereleaseIdentifier) ?? lhsPrereleaseIdentifier
109-
let typedRhsIdentifier: Any = Int(rhsPrereleaseIdentifier) ?? rhsPrereleaseIdentifier
107+
// Check if either of the 2 pre-release identifiers is numeric.
108+
let lhsNumericPrereleaseIdentifier = Int(lhsPrereleaseIdentifier)
109+
let rhsNumericPrereleaseIdentifier = Int(rhsPrereleaseIdentifier)
110110

111-
switch (typedLhsIdentifier, typedRhsIdentifier) {
112-
case let (int1 as Int, int2 as Int): return int1 < int2
113-
case let (string1 as String, string2 as String): return string1 < string2
114-
case (is Int, is String): return true // Int prereleases < String prereleases
115-
case (is String, is Int): return false
116-
default:
117-
return false
111+
if let lhsNumericPrereleaseIdentifier = lhsNumericPrereleaseIdentifier,
112+
let rhsNumericPrereleaseIdentifier = rhsNumericPrereleaseIdentifier {
113+
return lhsNumericPrereleaseIdentifier < rhsNumericPrereleaseIdentifier
114+
} else if lhsNumericPrereleaseIdentifier != nil {
115+
return true // numeric pre-release < non-numeric pre-release
116+
} else if rhsNumericPrereleaseIdentifier != nil {
117+
return false // non-numeric pre-release > numeric pre-release
118+
} else {
119+
return lhsPrereleaseIdentifier < rhsPrereleaseIdentifier
118120
}
119121
}
120122

0 commit comments

Comments
 (0)