JuliaInterpreter.jl
JuliaInterpreter.jl copied to clipboard
Opaque Closures not supported.
The following code
isa_control_flow(::Type{T}, x) where {T} = isa(x, T) ? x : T(x)
@interpret Diffractor.PrimeDerivativeBack(x->sum(isa_control_flow(Matrix{Float64}, x)))(Float32[1 2;])
fails with
ERROR: BoundsError: attempt to access Core.Argument at index [2]
Stacktrace:
[1] maybe_evaluate_builtin(frame::Frame, call_expr::Expr, expand::Bool)
@ JuliaInterpreter ~/.julia/dev/JuliaInterpreter/src/builtins.jl:177
[2] evaluate_call_recurse!(recurse::Any, frame::Frame, call_expr::Expr; enter_generated::Bool)
@ JuliaInterpreter ~/.julia/dev/JuliaInterpreter/src/interpret.jl:230
[3] evaluate_call_recurse!(recurse::Any, frame::Frame, call_expr::Expr)
@ JuliaInterpreter ~/.julia/dev/JuliaInterpreter/src/interpret.jl:226
[4] eval_rhs(recurse::Any, frame::Frame, node::Expr)
@ JuliaInterpreter ~/.julia/dev/JuliaInterpreter/src/interpret.jl:399
[5] step_expr!(recurse::Any, frame::Frame, node::Any, istoplevel::Bool)
@ JuliaInterpreter ~/.julia/dev/JuliaInterpreter/src/interpret.jl:552
[6] step_expr!(recurse::Any, frame::Frame, istoplevel::Bool)
@ JuliaInterpreter ~/.julia/dev/JuliaInterpreter/src/interpret.jl:602
[7] finish!(recurse::Any, frame::Frame, istoplevel::Bool)
@ JuliaInterpreter ~/.julia/dev/JuliaInterpreter/src/commands.jl:14
[8] finish_and_return!(recurse::Any, frame::Frame, istoplevel::Bool)
@ JuliaInterpreter ~/.julia/dev/JuliaInterpreter/src/commands.jl:30
[9] evaluate_call_recurse!(recurse::Any, frame::Frame, call_expr::Expr; enter_generated::Bool)
@ JuliaInterpreter ~/.julia/dev/JuliaInterpreter/src/interpret.jl:266
[10] evaluate_call_recurse!(recurse::Any, frame::Frame, call_expr::Expr)
@ JuliaInterpreter ~/.julia/dev/JuliaInterpreter/src/interpret.jl:226
[11] eval_rhs(recurse::Any, frame::Frame, node::Expr)
@ JuliaInterpreter ~/.julia/dev/JuliaInterpreter/src/interpret.jl:399
[12] step_expr!(recurse::Any, frame::Frame, node::Any, istoplevel::Bool)
@ JuliaInterpreter ~/.julia/dev/JuliaInterpreter/src/interpret.jl:552
[13] step_expr!(recurse::Any, frame::Frame, istoplevel::Bool)
@ JuliaInterpreter ~/.julia/dev/JuliaInterpreter/src/interpret.jl:602
[14] finish!(recurse::Any, frame::Frame, istoplevel::Bool)
@ JuliaInterpreter ~/.julia/dev/JuliaInterpreter/src/commands.jl:14
[15] finish_and_return!(recurse::Any, frame::Frame, istoplevel::Bool)
@ JuliaInterpreter ~/.julia/dev/JuliaInterpreter/src/commands.jl:30
[16] evaluate_call_recurse!(recurse::Any, frame::Frame, call_expr::Expr; enter_generated::Bool)
@ JuliaInterpreter ~/.julia/dev/JuliaInterpreter/src/interpret.jl:266
[17] evaluate_call_recurse!(recurse::Any, frame::Frame, call_expr::Expr)
@ JuliaInterpreter ~/.julia/dev/JuliaInterpreter/src/interpret.jl:226
[18] eval_rhs(recurse::Any, frame::Frame, node::Expr)
@ JuliaInterpreter ~/.julia/dev/JuliaInterpreter/src/interpret.jl:399
[19] step_expr!(recurse::Any, frame::Frame, node::Any, istoplevel::Bool)
@ JuliaInterpreter ~/.julia/dev/JuliaInterpreter/src/interpret.jl:473
[20] step_expr!(recurse::Any, frame::Frame, istoplevel::Bool)
@ JuliaInterpreter ~/.julia/dev/JuliaInterpreter/src/interpret.jl:602
[21] finish!(recurse::Any, frame::Frame, istoplevel::Bool)
@ JuliaInterpreter ~/.julia/dev/JuliaInterpreter/src/commands.jl:14
[22] finish_and_return!
@ ~/.julia/dev/JuliaInterpreter/src/commands.jl:30 [inlined]
[23] finish_and_return! (repeats 2 times)
@ ~/.julia/dev/JuliaInterpreter/src/commands.jl:34 [inlined]
[24] macro expansion
@ ~/.julia/dev/JuliaInterpreter/src/construct.jl:748 [inlined]
[25] top-level scope
@ REPL[23]:2
while without the @interpret
it runs correctly.
(this behavior can be seen on both 1.7 and master versions of Julia).
I'm not sure if it's the cause for this particular error, but note that there currently isn't any support for opaque closures in JuliaInterpreter. Would be good to add that eventually
ah, that very well might be the problem.
theoretically, you could just convert them into regular closures, right?