Skip to content

Commit b0074e6

Browse files
authored
Merge pull request #457 from simeonschaub/fixnightly
fix failures on nightly 2
2 parents a7a65c2 + 205193c commit b0074e6

File tree

6 files changed

+43
-15
lines changed

6 files changed

+43
-15
lines changed

src/builtins.jl

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,19 @@ function maybe_evaluate_builtin(frame, call_expr, expand::Bool)
6363
push!(new_expr.args, (isa(x, Symbol) || isa(x, Expr) || isa(x, QuoteNode)) ? QuoteNode(x) : x)
6464
end
6565
return new_expr
66-
elseif f === Core._apply_latest
66+
elseif @static isdefined(Core, :_call_latest) ? f === Core._call_latest : false
67+
argswrapped = getargs(args, frame)
68+
if !expand
69+
return Some{Any}(Core._call_latest(argswrapped...))
70+
end
71+
new_expr = Expr(:call, argswrapped[1])
72+
popfirst!(argswrapped)
73+
argsflat = append_any(argswrapped...)
74+
for x in argsflat
75+
push!(new_expr.args, (isa(x, Symbol) || isa(x, Expr) || isa(x, QuoteNode)) ? QuoteNode(x) : x)
76+
end
77+
return new_expr
78+
elseif @static isdefined(Core, :_apply_latest) ? f === Core._apply_latest : false
6779
argswrapped = getargs(args, frame)
6880
if !expand
6981
return Some{Any}(Core._apply_latest(argswrapped...))

src/optimize.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@ function parametric_type_to_expr(t::Type)
249249
t isa Core.TypeofBottom && return t
250250
t isa UnionAll && (t = t.body)
251251
t = t::DataType
252-
if t <: Vararg
252+
if Base.isvarargtype(t)
253253
return Expr(:(...), t.parameters[1])
254254
end
255255
if t.hasfreetypevars

src/utils.jl

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -248,12 +248,16 @@ end
248248
is_leaf(frame::Frame) = frame.callee === nothing
249249

250250
function is_vararg_type(x)
251-
if isa(x, Type)
252-
(x <: Vararg && !(x <: Union{})) && return true
253-
if isa(x, UnionAll)
254-
x = Base.unwrap_unionall(x)
251+
@static if isa(Vararg, Type)
252+
if isa(x, Type)
253+
(x <: Vararg && !(x <: Union{})) && return true
254+
if isa(x, UnionAll)
255+
x = Base.unwrap_unionall(x)
256+
end
257+
return isa(x, DataType) && nameof(x) == :Vararg
255258
end
256-
return isa(x, DataType) && nameof(x) == :Vararg
259+
else
260+
return isa(x, typeof(Vararg))
257261
end
258262
return false
259263
end

test/debug.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -390,7 +390,7 @@ end
390390
@test get_return(frame) == f_inv(2)
391391
end
392392

393-
f_inv_latest(x::Real) = 1 + Core._apply_latest(f_inv, x)
393+
f_inv_latest(x::Real) = 1 + (@static isdefined(Core, :_call_latest) ? Core._call_latest(f_inv, x) : Core._apply_latest(f_inv, x))
394394
@testset "invokelatest" begin
395395
fr = JuliaInterpreter.enter_call(f_inv_latest, 2.0)
396396
fr, pc = JuliaInterpreter.debug_command(fr, :nc)

test/interpret.jl

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -103,11 +103,23 @@ end
103103
@test @interpret(10.0^4) == 10.0^4
104104
# issue #6
105105
@test @interpret(Array.body.body.name) === Array.body.body.name
106-
@test @interpret(Vararg.body.body.name) === Vararg.body.body.name
106+
if Vararg isa UnionAll
107+
@test @interpret(Vararg.body.body.name) === Vararg.body.body.name
108+
else
109+
@test @interpret(Vararg{Int}.T) === Vararg{Int}.T
110+
@test @interpret(Vararg{Any,3}.N) === Vararg{Any,3}.N
111+
end
107112
@test !JuliaInterpreter.is_vararg_type(Union{})
108-
frame = Frame(Main, :(Vararg.body.body.name))
109-
@test JuliaInterpreter.finish_and_return!(frame, true) === Vararg.body.body.name
110-
frame = Frame(Base, :(Union{AbstractChar,Tuple{Vararg{<:AbstractChar}},AbstractVector{<:AbstractChar},Set{<:AbstractChar}}))
113+
if Vararg isa UnionAll
114+
frame = Frame(Main, :(Vararg.body.body.name))
115+
@test JuliaInterpreter.finish_and_return!(frame, true) === Vararg.body.body.name
116+
else
117+
frame = Frame(Main, :(Vararg{Int}.T))
118+
@test JuliaInterpreter.finish_and_return!(frame, true) === Vararg{Int}.T
119+
frame = Frame(Main, :(Vararg{Any,3}.N))
120+
@test JuliaInterpreter.finish_and_return!(frame, true) === Vararg{Any,3}.N
121+
end
122+
frame = Frame(Base, :(Union{AbstractChar,Tuple{Vararg{AbstractChar}},AbstractVector{<:AbstractChar},Set{<:AbstractChar}}))
111123
@test JuliaInterpreter.finish_and_return!(frame, true) isa Union
112124

113125
# issue #8
@@ -485,7 +497,7 @@ g_3(x) = error("foo")
485497
line_g = @__LINE__
486498
try
487499
break_on(:error)
488-
frame, bp = @interpret g_1(2.0)
500+
local frame, bp = @interpret g_1(2.0)
489501
stacktrace_lines = split(sprint(Base.display_error, bp.err, leaf(frame)), '\n')
490502
@test occursin(string("ERROR: ", sprint(showerror, ErrorException("foo"))), stacktrace_lines[1])
491503
if isdefined(Base, :print_stackframe)
@@ -513,7 +525,7 @@ try
513525
g_1(2.0)
514526
end))
515527
line2_g = @__LINE__
516-
frame = Frame(exs[1]...)
528+
local frame = Frame(exs[1]...)
517529
frame, bp = JuliaInterpreter.debug_command(frame, :c, true)
518530
stacktrace_lines = split(sprint(Base.display_error, bp.err, leaf(frame)), '\n')
519531
@test occursin(string("ERROR: ", sprint(showerror, ErrorException("foo"))), stacktrace_lines[1])

test/toplevel.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -307,7 +307,7 @@ ex = quote
307307
end
308308
modexs = collect(ExprSplitter(IncTest, ex))
309309
for (i, (mod, ex)) in enumerate(modexs)
310-
frame = Frame(mod, ex)
310+
local frame = Frame(mod, ex)
311311
while true
312312
JuliaInterpreter.through_methoddef_or_done!(frame) === nothing && break
313313
end

0 commit comments

Comments
 (0)