Skip to content

Commit 395e47f

Browse files
authored
Avoid try-catch in tryparse for VersionNumber (#37803)
* Avoid try-catch in `tryparse` for `VersionNumber`
1 parent 7af47af commit 395e47f

File tree

1 file changed

+8
-12
lines changed

1 file changed

+8
-12
lines changed

base/version.jl

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -105,10 +105,10 @@ function split_idents(s::AbstractString)
105105
return tuple(pidents...)::VerTuple
106106
end
107107

108-
function VersionNumber(v::AbstractString)
108+
function tryparse(::Type{VersionNumber}, v::AbstractString)
109109
v == "" && return typemax(VersionNumber)
110110
m = match(VERSION_REGEX, v)
111-
m === nothing && throw(ArgumentError("invalid version string: $v"))
111+
m === nothing && return nothing
112112
major, minor, patch, minus, prerl, plus, build = m.captures
113113
major = parse(VInt, major)
114114
minor = minor !== nothing ? parse(VInt, minor) : VInt(0)
@@ -121,18 +121,14 @@ function VersionNumber(v::AbstractString)
121121
return VersionNumber(major, minor, patch, prerl::VerTuple, build::VerTuple)
122122
end
123123

124-
parse(::Type{VersionNumber}, v::AbstractString) = VersionNumber(v)
125-
function tryparse(::Type{VersionNumber}, v::AbstractString)
126-
try
127-
return VersionNumber(v)
128-
catch e
129-
if isa(e, InterruptException)
130-
rethrow(e)
131-
end
132-
return nothing
133-
end
124+
function parse(::Type{VersionNumber}, v::AbstractString)
125+
ver = tryparse(VersionNumber, v)
126+
ver === nothing && throw(ArgumentError("invalid version string: $v"))
127+
return ver
134128
end
135129

130+
VersionNumber(v::AbstractString) = parse(VersionNumber, v)
131+
136132
"""
137133
@v_str
138134

0 commit comments

Comments
 (0)