Skip to content

Commit e9a2cd1

Browse files
committed
Detect file change in next_line!
1 parent 3225811 commit e9a2cd1

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

src/commands.jl

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -165,10 +165,10 @@ or a `BreakpointRef` if it encountered a wrapper call. In the latter case, call
165165
to obtain the new execution frame.
166166
"""
167167
function next_line!(@nospecialize(recurse), frame::Frame, istoplevel::Bool=false)
168-
initial = linenumber(frame)
169-
first = true
170168
pc = frame.pc
171-
while linenumber(frame, pc) == initial
169+
initialline, initialfile = linenumber(frame, pc), getfile(frame, pc)
170+
first = true
171+
while linenumber(frame, pc) == initialline && getfile(frame, pc) == initialfile
172172
# If this is a return node, interrupt execution
173173
expr = pc_expr(frame, pc)
174174
(!first && isexpr(expr, :return)) && return pc
@@ -197,14 +197,19 @@ function next_line!(@nospecialize(recurse), frame::Frame, istoplevel::Bool=false
197197
expr = pc_expr(frame)
198198
end
199199
# Signal that we've switched frames
200-
switched && return BreakpointRef(frame.framecode, frame.pc)
200+
if switched
201+
pc = next_line!(recurse, frame, false)
202+
pc === nothing && error("confusing next_line!")
203+
lframe = leaf(frame)
204+
return isa(pc, BreakpointRef) ? pc : BreakpointRef(lframe.framecode, lframe.pc)
205+
end
201206
else
202207
pc = step_expr!(recurse, frame, istoplevel)
203208
(pc === nothing || isa(pc, BreakpointRef)) && return pc
204209
end
205210
shouldbreak(frame, pc) && return BreakpointRef(frame.framecode, pc)
206211
end
207-
maybe_next_call!(recurse, frame, pc)
212+
maybe_next_call!(recurse, frame, istoplevel)
208213
end
209214
next_line!(frame::Frame, istoplevel::Bool=false) = next_line!(finish_and_return!, frame, istoplevel)
210215

0 commit comments

Comments
 (0)