@@ -173,7 +173,8 @@ function bypass_builtins(frame, call_expr, pc)
173
173
return nothing
174
174
end
175
175
176
- function evaluate_call_compiled! (:: Compiled , frame:: Frame , call_expr:: Expr )
176
+ function evaluate_call_compiled! (:: Compiled , frame:: Frame , call_expr:: Expr ; enter_generated:: Bool = false )
177
+ # @assert !enter_generated
177
178
pc = frame. pc
178
179
ret = bypass_builtins (frame, call_expr, pc)
179
180
isa (ret, Some{Any}) && return ret. value
@@ -185,7 +186,7 @@ function evaluate_call_compiled!(::Compiled, frame::Frame, call_expr::Expr)
185
186
return f (fargs... )
186
187
end
187
188
188
- function evaluate_call_recurse! (@nospecialize (recurse), frame:: Frame , call_expr:: Expr )
189
+ function evaluate_call_recurse! (@nospecialize (recurse), frame:: Frame , call_expr:: Expr ; enter_generated :: Bool = false )
189
190
pc = frame. pc
190
191
ret = bypass_builtins (frame, call_expr, pc)
191
192
isa (ret, Some{Any}) && return ret. value
@@ -198,7 +199,7 @@ function evaluate_call_recurse!(@nospecialize(recurse), frame::Frame, call_expr:
198
199
err = length (fargs) > 1 ? fargs[2 ] : frame. framedata. last_exception[]
199
200
throw (err)
200
201
end
201
- framecode, lenv = get_call_framecode (fargs, frame. framecode, frame. pc)
202
+ framecode, lenv = get_call_framecode (fargs, frame. framecode, frame. pc; enter_generated = enter_generated )
202
203
if lenv === nothing
203
204
if isa (framecode, Compiled)
204
205
popfirst! (fargs) # now it's really just `args`
@@ -231,9 +232,9 @@ The first causes it to be executed using Julia's normal dispatch (compiled code)
231
232
whereas the second recurses in via the interpreter.
232
233
`recurse` has a default value of [`JuliaInterpreter.finish_and_return!`](@ref).
233
234
"""
234
- evaluate_call! (:: Compiled , frame:: Frame , call_expr:: Expr ) = evaluate_call_compiled! (Compiled (), frame, call_expr)
235
- evaluate_call! (@nospecialize (recurse), frame:: Frame , call_expr:: Expr ) = evaluate_call_recurse! (recurse, frame, call_expr)
236
- evaluate_call! (frame:: Frame , call_expr:: Expr ) = evaluate_call! (finish_and_return!, frame, call_expr)
235
+ evaluate_call! (:: Compiled , frame:: Frame , call_expr:: Expr ; kwargs ... ) = evaluate_call_compiled! (Compiled (), frame, call_expr; kwargs ... )
236
+ evaluate_call! (@nospecialize (recurse), frame:: Frame , call_expr:: Expr ; kwargs ... ) = evaluate_call_recurse! (recurse, frame, call_expr; kwargs ... )
237
+ evaluate_call! (frame:: Frame , call_expr:: Expr ; kwargs ... ) = evaluate_call! (finish_and_return!, frame, call_expr; kwargs ... )
237
238
238
239
# The following come up only when evaluating toplevel code
239
240
function evaluate_methoddef (frame, node)
0 commit comments