@@ -405,9 +405,11 @@ function debug_command(@nospecialize(recurse), frame::Frame, cmd::Symbol, rootis
405
405
406
406
istoplevel = rootistoplevel && frame. caller === nothing
407
407
cmd0 = cmd
408
+ is_si = false
408
409
if cmd == :si
409
410
stmt = pc_expr (frame)
410
411
cmd = is_call (stmt) ? :s : :se
412
+ is_si = true
411
413
end
412
414
try
413
415
cmd == :nc && return nicereturn! (recurse, frame, next_call! (recurse, frame, istoplevel), rootistoplevel)
@@ -422,7 +424,7 @@ function debug_command(@nospecialize(recurse), frame::Frame, cmd::Symbol, rootis
422
424
if cmd == :s
423
425
pc = maybe_next_call! (recurse, frame, istoplevel)
424
426
(isa (pc, BreakpointRef) || pc === nothing ) && return maybe_reset_frame! (recurse, frame, pc, rootistoplevel)
425
- maybe_step_through_kwprep! (recurse, frame, istoplevel)
427
+ is_si || maybe_step_through_kwprep! (recurse, frame, istoplevel)
426
428
pc = frame. pc
427
429
stmt0 = stmt = pc_expr (frame, pc)
428
430
isexpr (stmt0, :return ) && return maybe_reset_frame! (recurse, frame, nothing , rootistoplevel)
@@ -439,7 +441,8 @@ function debug_command(@nospecialize(recurse), frame::Frame, cmd::Symbol, rootis
439
441
if isa (ret, BreakpointRef)
440
442
newframe = leaf (frame)
441
443
cmd0 == :si && return newframe, ret
442
- newframe = maybe_step_through_wrapper! (recurse, newframe)
444
+ is_si || (newframe = maybe_step_through_wrapper! (recurse, newframe))
445
+ is_si || maybe_step_through_kwprep! (recurse, newframe, istoplevel)
443
446
return newframe, BreakpointRef (newframe. framecode, 0 )
444
447
end
445
448
# if we got here, the call returned a value
0 commit comments