Skip to content

Backports for 1.10.10 #57715

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 68 commits into from
Jun 17, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
68 commits
Select commit Hold shift + click to select a range
cfb43c4
docs: remove `dirname.c` from THIRDPARTY file (#56413)
inkydragon Nov 1, 2024
3e597e4
Only strip invariant.load from special pointers (#57386)
vchuravy Feb 18, 2025
5dc4316
Docs: `circshift!(::AbstractVector, ::Integer)` (#57539)
barucden Feb 27, 2025
230c7b6
strings: type assert in the generic `nextind`, `prevind` methods (#57…
nsajko Mar 3, 2025
79f78d4
Intersect: try normal+reverse+existential subtyping during intersecti…
N5N3 Mar 6, 2025
e4d6a37
Make sure we don't promise alignments that are larger than the heap a…
gbaraldi Jan 3, 2025
c8c5d39
fix alignment computation for nested objects (#57722)
vtjnash Mar 11, 2025
9a73b3a
fix missing methods in ml_matches results (#50962)
vtjnash Aug 18, 2023
49c5753
Don't free regex objects in exit-time finalizer calls (#57834)
IanButterworth Mar 25, 2025
3559623
fixup "Don't free regex objects in exit-time finalizer calls (#57834)"
IanButterworth Mar 27, 2025
6d8d5e3
[backports-1.10] Add passes to `-O1` pipeline to reduce allocations i…
gbaraldi Mar 28, 2025
5170fe7
[docs] Clarify that Float16 is supported natively when possible (#57725)
giordano Mar 15, 2025
b6d3b72
fix special function `::Real` fallback stack overflow (#57790)
nsajko Mar 17, 2025
cc1d011
stackwalk: fix heuristic termination (#57801)
vtjnash Mar 17, 2025
f890c91
restrict dispatch of some custrom string macros to `String` (#57781)
nsajko Mar 20, 2025
da7036a
fix `mod` for mixes of `Signed` and `Unsigned` (#57853)
oscardssmith Mar 23, 2025
ca08f9e
`Base`: `macro b_str`: restrict argument to `String` (#57863)
nsajko Mar 25, 2025
0265357
`Base`: `macro cmd`: restrict argument to `String` (#57862)
nsajko Mar 25, 2025
274e2b1
`Random`: `show` method for `MersenneTwister`: invalidation resistanc…
nsajko Mar 28, 2025
dd26a76
`Base`: shell escaping: inference improvement to prevent invalidation…
nsajko Mar 30, 2025
eec4655
Update OpenLibm to 0.8.5 (#56984)
ararslan Jan 8, 2025
7d9b889
bump Pkg to latest v1.10
KristofferC Mar 31, 2025
13f02c7
staticdata: Memoize `type_in_worklist` query (#57917)
topolarity Mar 31, 2025
2d5d191
typeintersect: fix triangular vars handling outside constructor (#58018)
N5N3 Apr 6, 2025
648c9bc
Backport of 088bb90
gbaraldi May 12, 2025
9107c8b
Don't error when initializing LibGit2 with CA roots path (#56924)
visr Mar 25, 2025
e2a2000
`append_c_digits`: typeassert `Int` to improve inference (#57950)
nsajko Apr 1, 2025
7182837
fix `nextpow`, `prevpow` for types without `typemax` (#49669)
nsajko Apr 4, 2025
dd78704
fix zero-dimensional `reverse!` (#58086)
nsajko Apr 13, 2025
368516b
Switch from segfault to `zip` behavior for mismatched indices in `map…
adienes Apr 19, 2025
11fa9cc
subtype: save some union stack space for ∃ free cases. (#58159)
N5N3 Apr 20, 2025
e3935c3
Narrow `@inbounds` annotations in `accumulate.jl` to only indexing ca…
adienes Apr 24, 2025
16c5b19
Subtype: enable more Tuple related fast path. (#58196)
N5N3 Apr 27, 2025
e1d0144
doc: cross-reference `bind` in `Channel` method doc string (#58113)
nsajko Apr 29, 2025
fb1c075
Fix removal of globals with addrspaces in removeAddrspaces (#58322)
gbaraldi May 6, 2025
e3cfb88
Update readlines(::Cmd) test to not rely on the filesystem (#58607)
fredrikekre Jun 2, 2025
11fd0d8
recursive types: fix implementation of references_name (#50963)
vtjnash Aug 21, 2023
c442d55
handle unbound vars in NTuple fields (#55405)
vtjnash Aug 8, 2024
cfedfc0
inference: fix lattice for unusual InterConditional return and Const …
vtjnash Jan 21, 2025
2e38e11
lowering: fix has_fcall computation (#57395)
vtjnash Feb 14, 2025
2551d9d
Remove try-finally scope from `@time_imports` `@trace_compile` `@trac…
IanButterworth Apr 10, 2025
9379d81
[DOC] Update installation docs: /downloads/ => /install/ (#58127)
StefanKarpinski Apr 15, 2025
129de6d
add showing a string to REPL precompile workload (#58157)
KristofferC Apr 22, 2025
6e5bd80
Specialize `one` for the `SizedArray` test helper (#58209)
jishnub Apr 26, 2025
4ac30b7
codegen: remove readonly from abstract type calling convention (#58356)
vtjnash May 9, 2025
2e097bd
fix `hasmethod` with kwargs to exclude positional arg names (#58410)
JeffBezanson May 14, 2025
99ffaca
Don't filter `Core` methods from newly-inferred list (#58510)
topolarity May 27, 2025
13be619
static-show: improve accuracy of some printings (#52799)
vtjnash Jan 9, 2024
9433152
Make more types jl_static_show unambiguously (#58512)
xal-0 May 29, 2025
c3bd899
Make `Ptr` values static-show w/ type-information (#58584)
topolarity May 30, 2025
549282d
relax dispatch for the `IteratorSize` method for `Generator` (#58110)
nsajko May 31, 2025
ee8dd0f
power uses Float64 exponents for integers (#53967)
KlausC Apr 22, 2024
ec1115d
remove unnecessary edge from `exp_impl` to `pow` (#58062)
oscardssmith Apr 14, 2025
d5b2b2a
Fixes for bitcast bugs with LLVM 17 / opaque pointers (#54548)
maleadt May 22, 2024
967a256
Profile: remove scope from profile macros (#57858)
IanButterworth Mar 25, 2025
5e6b56a
Logging: Improve threadsafety (#57591)
IanButterworth Apr 4, 2025
37e27e4
Make build_id.lo more random (#58258)
gbaraldi May 3, 2025
cd38e84
Re-enable tab completion of kwargs for large method tables (#58012)
mbauman Jun 2, 2025
7076856
backport busybox download fix
KristofferC Jun 5, 2025
caea1d3
Revert "codegen: remove readonly from abstract type calling conventio…
KristofferC Jun 5, 2025
6b4695a
Revert "Specialize `one` for the `SizedArray` test helper (#58209)"
KristofferC Jun 5, 2025
41666c9
Revert "Re-enable tab completion of kwargs for large method tables (#…
KristofferC Jun 5, 2025
7f6ffc7
Revert "power uses Float64 exponents for integers (#53967)"
KristofferC Jun 5, 2025
fa48c49
fixup! Don't filter `Core` methods from newly-inferred list (#58510)
KristofferC Jun 5, 2025
6d01bb3
fix test on 32-bit
KristofferC Jun 11, 2025
5f92e8d
Fix llvmpasses
gbaraldi Jun 11, 2025
5838394
Fix typo and double tests
gbaraldi Jun 11, 2025
fab3a82
fix importing SHA in spawntests
KristofferC Jun 13, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 17 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ and installing Julia, below.
## Resources

- **Homepage:** <https://julialang.org>
- **Binaries:** <https://julialang.org/downloads/>
- **Install:** <https://julialang.org/install/>
- **Source code:** <https://github.com/JuliaLang/julia>
- **Documentation:** <https://docs.julialang.org>
- **Packages:** <https://julialang.org/packages/>
Expand All @@ -64,17 +64,22 @@ helpful to start contributing to the Julia codebase.

## Binary Installation

If you would rather not compile the latest Julia from source,
platform-specific tarballs with pre-compiled binaries are also
[available for download](https://julialang.org/downloads/). The
downloads page also provides details on the
[different tiers of support](https://julialang.org/downloads/#supported_platforms)
for OS and platform combinations.

If everything works correctly, you will see a Julia banner and an
interactive prompt into which you can enter expressions for
evaluation. You can read about [getting
started](https://docs.julialang.org/en/v1/manual/getting-started/) in the manual.
The recommended way of installing Julia is to use `juliaup` which will install
the latest stable `julia` for you and help keep it up to date. It can also let
you install and run different Julia versions simultaneously. Instructions for
this can be find [here](https://julialang.org/install/). If you want to manually
download specific Julia binaries, you can find those on the [downloads
page](https://julialang.org/downloads/). The downloads page also provides
details on the [different tiers of
support](https://julialang.org/downloads/#supported_platforms) for OS and
platform combinations.

If everything works correctly, you will get a `julia` program and when you run
it in a terminal or command prompt, you will see a Julia banner and an
interactive prompt into which you can enter expressions for evaluation. You can
read about [getting
started](https://docs.julialang.org/en/v1/manual/getting-started/) in the
manual.

**Note**: Although some system package managers provide Julia, such
installations are neither maintained nor endorsed by the Julia
Expand Down
1 change: 0 additions & 1 deletion THIRDPARTY.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ for exceptions.
- [crc32c.c](https://stackoverflow.com/questions/17645167/implementing-sse-4-2s-crc32c-in-software) (CRC-32c checksum code by Mark Adler) [[ZLib](https://opensource.org/licenses/Zlib)].
- [LDC](https://github.com/ldc-developers/ldc/blob/master/LICENSE) (for ccall/cfunction ABI definitions) [BSD-3]. The portion of code that Julia uses from LDC is [BSD-3] licensed.
- [LLVM](https://releases.llvm.org/3.9.0/LICENSE.TXT) (for parts of src/disasm.cpp) [UIUC]
- [MINGW](https://sourceforge.net/p/mingw/mingw-org-wsl/ci/legacy/tree/mingwrt/mingwex/dirname.c) (for dirname implementation on Windows) [MIT]
- [NetBSD](https://www.netbsd.org/about/redistribution.html) (for setjmp, longjmp, and strptime implementations on Windows) [BSD-3]
- [Python](https://docs.python.org/3/license.html) (for strtod implementation on Windows) [PSF]
- [FEMTOLISP](https://github.com/JeffBezanson/femtolisp) [BSD-3]
Expand Down
8 changes: 4 additions & 4 deletions base/Base.jl
Original file line number Diff line number Diff line change
Expand Up @@ -330,10 +330,6 @@ using .Libc: getpid, gethostname, time, memcpy, memset, memmove, memcmp
const libblas_name = "libblastrampoline" * (Sys.iswindows() ? "-5" : "")
const liblapack_name = libblas_name

# Logging
include("logging.jl")
using .CoreLogging

# Concurrency
include("linked_list.jl")
include("condition.jl")
Expand All @@ -345,6 +341,10 @@ include("task.jl")
include("threads_overloads.jl")
include("weakkeydict.jl")

# Logging
include("logging.jl")
using .CoreLogging

include("env.jl")

# functions defined in Random
Expand Down
45 changes: 38 additions & 7 deletions base/abstractarray.jl
Original file line number Diff line number Diff line change
Expand Up @@ -3335,12 +3335,19 @@ function ith_all(i, as)
end

function map_n!(f::F, dest::AbstractArray, As) where F
idxs1 = LinearIndices(As[1])
@boundscheck LinearIndices(dest) == idxs1 && all(x -> LinearIndices(x) == idxs1, As)
for i = idxs1
@inbounds I = ith_all(i, As)
val = f(I...)
@inbounds dest[i] = val
idxs = LinearIndices(dest)
if all(x -> LinearIndices(x) == idxs, As)
for i in idxs
@inbounds as = ith_all(i, As)
val = f(as...)
@inbounds dest[i] = val
end
else
for (i, Is...) in zip(eachindex(dest), map(eachindex, As)...)
as = ntuple(j->getindex(As[j], Is[j]), length(As))
val = f(as...)
dest[i] = val
end
end
return dest
end
Expand Down Expand Up @@ -3536,7 +3543,31 @@ function _keepat!(a::AbstractVector, m::AbstractVector{Bool})
deleteat!(a, j:lastindex(a))
end

## 1-d circshift ##
"""
circshift!(a::AbstractVector, shift::Integer)

Circularly shift, or rotate, the data in vector `a` by `shift` positions.

# Examples

```jldoctest
julia> circshift!([1, 2, 3, 4, 5], 2)
5-element Vector{Int64}:
4
5
1
2
3

julia> circshift!([1, 2, 3, 4, 5], -2)
5-element Vector{Int64}:
3
4
5
1
2
```
"""
function circshift!(a::AbstractVector, shift::Integer)
n = length(a)
n == 0 && return
Expand Down
55 changes: 32 additions & 23 deletions base/accumulate.jl
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,14 @@
# it does double the number of operations compared to accumulate,
# though for cheap operations like + this does not have much impact (20%)
function _accumulate_pairwise!(op::Op, c::AbstractVector{T}, v::AbstractVector, s, i1, n)::T where {T,Op}
@inbounds if n < 128
s_ = v[i1]
c[i1] = op(s, s_)
if n < 128
@inbounds s_ = v[i1]
ci1 = op(s, s_)
@inbounds c[i1] = ci1
for i = i1+1:i1+n-1
s_ = op(s_, v[i])
c[i] = op(s, s_)
s_ = op(s_, @inbounds(v[i]))
ci = op(s, s_)
@inbounds c[i] = ci
end
else
n2 = n >> 1
Expand All @@ -26,7 +28,8 @@ function accumulate_pairwise!(op::Op, result::AbstractVector, v::AbstractVector)
n = length(li)
n == 0 && return result
i1 = first(li)
@inbounds result[i1] = v1 = reduce_first(op,v[i1])
v1 = reduce_first(op, @inbounds(v[i1]))
@inbounds result[i1] = v1
n == 1 && return result
_accumulate_pairwise!(op, result, v, v1, i1+1, n-1)
return result
Expand Down Expand Up @@ -379,16 +382,16 @@ function _accumulate!(op, B, A, dims::Integer, init::Union{Nothing, Some})
# We can accumulate to a temporary variable, which allows
# register usage and will be slightly faster
ind1 = inds_t[1]
@inbounds for I in CartesianIndices(tail(inds_t))
for I in CartesianIndices(tail(inds_t))
if init === nothing
tmp = reduce_first(op, A[first(ind1), I])
tmp = reduce_first(op, @inbounds(A[first(ind1), I]))
else
tmp = op(something(init), A[first(ind1), I])
tmp = op(something(init), @inbounds(A[first(ind1), I]))
end
B[first(ind1), I] = tmp
@inbounds B[first(ind1), I] = tmp
for i_1 = first(ind1)+1:last(ind1)
tmp = op(tmp, A[i_1, I])
B[i_1, I] = tmp
tmp = op(tmp, @inbounds(A[i_1, I]))
@inbounds B[i_1, I] = tmp
end
end
else
Expand All @@ -402,25 +405,31 @@ end
@noinline function _accumulaten!(op, B, A, R1, ind, R2, init::Nothing)
# Copy the initial element in each 1d vector along dimension `dim`
ii = first(ind)
@inbounds for J in R2, I in R1
B[I, ii, J] = reduce_first(op, A[I, ii, J])
for J in R2, I in R1
tmp = reduce_first(op, @inbounds(A[I, ii, J]))
@inbounds B[I, ii, J] = tmp
end
# Accumulate
@inbounds for J in R2, i in first(ind)+1:last(ind), I in R1
B[I, i, J] = op(B[I, i-1, J], A[I, i, J])
for J in R2, i in first(ind)+1:last(ind), I in R1
@inbounds Bv, Av = B[I, i-1, J], A[I, i, J]
tmp = op(Bv, Av)
@inbounds B[I, i, J] = tmp
end
B
end

@noinline function _accumulaten!(op, B, A, R1, ind, R2, init::Some)
# Copy the initial element in each 1d vector along dimension `dim`
ii = first(ind)
@inbounds for J in R2, I in R1
B[I, ii, J] = op(something(init), A[I, ii, J])
for J in R2, I in R1
tmp = op(something(init), @inbounds(A[I, ii, J]))
@inbounds B[I, ii, J] = tmp
end
# Accumulate
@inbounds for J in R2, i in first(ind)+1:last(ind), I in R1
B[I, i, J] = op(B[I, i-1, J], A[I, i, J])
for J in R2, i in first(ind)+1:last(ind), I in R1
@inbounds Bv, Av = B[I, i-1, J], A[I, i, J]
tmp = op(Bv, Av)
@inbounds B[I, i, J] = tmp
end
B
end
Expand All @@ -434,10 +443,10 @@ function _accumulate1!(op, B, v1, A::AbstractVector, dim::Integer)
cur_val = v1
B[i1] = cur_val
next = iterate(inds, state)
@inbounds while next !== nothing
while next !== nothing
(i, state) = next
cur_val = op(cur_val, A[i])
B[i] = cur_val
cur_val = op(cur_val, @inbounds(A[i]))
@inbounds B[i] = cur_val
next = iterate(inds, state)
end
return B
Expand Down
2 changes: 1 addition & 1 deletion base/arraymath.jl
Original file line number Diff line number Diff line change
Expand Up @@ -72,12 +72,12 @@ _reverse!(A::AbstractArray{<:Any,N}, ::Colon) where {N} = _reverse!(A, ntuple(id
_reverse!(A, dim::Integer) = _reverse!(A, (Int(dim),))
_reverse!(A, dims::NTuple{M,Integer}) where {M} = _reverse!(A, Int.(dims))
function _reverse!(A::AbstractArray{<:Any,N}, dims::NTuple{M,Int}) where {N,M}
dims === () && return A # nothing to reverse
dimrev = ntuple(k -> k in dims, Val{N}()) # boolean tuple indicating reversed dims

if N < M || M != sum(dimrev)
throw(ArgumentError("invalid dimensions $dims in reverse!"))
end
M == 0 && return A # nothing to reverse

# swapping loop only needs to traverse ≈half of the array
halfsz = ntuple(k -> k == dims[1] ? size(A,k) ÷ 2 : size(A,k), Val{N}())
Expand Down
2 changes: 1 addition & 1 deletion base/channels.jl
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ Channel(sz=0) = Channel{Any}(sz)
"""
Channel{T=Any}(func::Function, size=0; taskref=nothing, spawn=false, threadpool=nothing)

Create a new task from `func`, bind it to a new channel of type
Create a new task from `func`, [`bind`](@ref) it to a new channel of type
`T` and size `size`, and schedule the task, all in a single call.
The channel is automatically closed when the task terminates.

Expand Down
2 changes: 1 addition & 1 deletion base/cmd.jl
Original file line number Diff line number Diff line change
Expand Up @@ -497,7 +497,7 @@ julia> run(cm)
Process(`echo 1`, ProcessExited(0))
```
"""
macro cmd(str)
macro cmd(str::String)
cmd_ex = shell_parse(str, special=shell_special, filename=String(__source__.file))[1]
return :(cmd_gen($(esc(cmd_ex))))
end
11 changes: 10 additions & 1 deletion base/compiler/abstractinterpretation.jl
Original file line number Diff line number Diff line change
Expand Up @@ -3065,7 +3065,7 @@ function typeinf_local(interp::AbstractInterpreter, frame::InferenceState)
rt = abstract_eval_value(interp, stmt.val, currstate, frame)
rt = widenreturn(rt, BestguessInfo(interp, bestguess, nargs, slottypes, currstate))
# narrow representation of bestguess slightly to prepare for tmerge with rt
if rt isa InterConditional && bestguess isa Const
if rt isa InterConditional && bestguess isa Const && bestguess.val isa Bool
let slot_id = rt.slot
old_id_type = slottypes[slot_id]
if bestguess.val === true && rt.elsetype !== Bottom
Expand All @@ -3074,6 +3074,15 @@ function typeinf_local(interp::AbstractInterpreter, frame::InferenceState)
bestguess = InterConditional(slot_id, Bottom, old_id_type)
end
end
# or narrow representation of rt slightly to prepare for tmerge with bestguess
elseif bestguess isa InterConditional && rt isa Const && rt.val isa Bool
slot_id = bestguess.slot
old_id_type = widenconditional(slottypes[slot_id])
if rt.val === true && bestguess.elsetype !== Bottom
rt = InterConditional(slot_id, old_id_type, Bottom)
elseif rt.val === false && bestguess.thentype !== Bottom
rt = InterConditional(slot_id, Bottom, old_id_type)
end
end
# copy limitations to return value
if !isempty(frame.pclimitations)
Expand Down
2 changes: 1 addition & 1 deletion base/compiler/typeinfer.jl
Original file line number Diff line number Diff line change
Expand Up @@ -406,7 +406,7 @@ function cache_result!(interp::AbstractInterpreter, result::InferenceResult)
code_cache(interp)[linfo] = ci = CodeInstance(interp, result, inferred_result, valid_worlds)
if track_newly_inferred[]
m = linfo.def
if isa(m, Method) && m.module != Core
if isa(m, Method)
ccall(:jl_push_newly_inferred, Cvoid, (Any,), ci)
end
end
Expand Down
7 changes: 7 additions & 0 deletions base/compiler/typelattice.jl
Original file line number Diff line number Diff line change
Expand Up @@ -427,6 +427,13 @@ end
end
a = Bool
elseif isa(b, ConditionalT)
if isa(a, Const) && isa(a.val, Bool)
if (a.val === true && b.thentype === Any && b.elsetype === Bottom) ||
(a.val === false && b.elsetype === Any && b.thentype === Bottom)
# this Conditional contains distinctly no lattice information, and is simply an alternative representation of the Const Bool used for internal tracking purposes
return true
end
end
return false
end
return ⊑(widenlattice(lattice), a, b)
Expand Down
2 changes: 1 addition & 1 deletion base/generator.jl
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ IteratorSize(::Type{Any}) = SizeUnknown()

IteratorSize(::Type{<:Tuple}) = HasLength()
IteratorSize(::Type{<:AbstractArray{<:Any,N}}) where {N} = HasShape{N}()
IteratorSize(::Type{Generator{I,F}}) where {I,F} = IteratorSize(I)
IteratorSize(::Type{<:Generator{I}}) where {I} = (@isdefined I) ? IteratorSize(I) : SizeUnknown()

haslength(iter) = IteratorSize(iter) isa Union{HasShape, HasLength}

Expand Down
16 changes: 11 additions & 5 deletions base/int.jl
Original file line number Diff line number Diff line change
Expand Up @@ -286,8 +286,14 @@ function mod(x::T, y::T) where T<:Integer
y == -1 && return T(0) # avoid potential overflow in fld
return x - fld(x, y) * y
end
mod(x::BitSigned, y::Unsigned) = rem(y + unsigned(rem(x, y)), y)
mod(x::Unsigned, y::Signed) = rem(y + signed(rem(x, y)), y)
function mod(x::BitSigned, y::Unsigned)
remval = rem(x, y) # correct iff remval>=0
return unsigned(remval + (remval<zero(remval))*y)
end
function mod(x::Unsigned, y::Signed)
remval = signed(rem(x, y)) #remval>0 so correct iff y>0 or remval==0
return remval + (!iszero(remval) && y<zero(y))*y
end
mod(x::T, y::T) where {T<:Unsigned} = rem(x, y)

# Don't promote integers for div/rem/mod since there is no danger of overflow,
Expand Down Expand Up @@ -711,7 +717,7 @@ ERROR: LoadError: ArgumentError: invalid base 10 digit '.' in "123456789123.4"
[...]
```
"""
macro int128_str(s)
macro int128_str(s::String)
return parse(Int128, s)
end

Expand All @@ -731,7 +737,7 @@ ERROR: LoadError: ArgumentError: invalid base 10 digit '-' in "-123456789123"
[...]
```
"""
macro uint128_str(s)
macro uint128_str(s::String)
return parse(UInt128, s)
end

Expand All @@ -755,7 +761,7 @@ ERROR: ArgumentError: invalid number format _ for BigInt or BigFloat
[...]
```
"""
macro big_str(s)
macro big_str(s::String)
message = "invalid number format $s for BigInt or BigFloat"
throw_error = :(throw(ArgumentError($message)))
if '_' in s
Expand Down
Loading