File tree Expand file tree Collapse file tree 2 files changed +31
-3
lines changed Expand file tree Collapse file tree 2 files changed +31
-3
lines changed Original file line number Diff line number Diff line change 489
489
490
490
function handle_err (stack, frame, pc, err)
491
491
if break_on_error[]
492
- frame. pc[] = pc
493
- push! (stack, frame)
494
- return BreakpointRef (frame. code, pc, err)
492
+ # See if the current frame or a frame in the stack will catch this exception,
493
+ # otherwise this exception would have been thrown to the user and we should
494
+ # return a breakpoint
495
+ exception_caught = false
496
+ for fr in Iterators. flatten (((frame,), (Iterators. reverse (stack))))
497
+ if ! isempty (fr. exception_frames)
498
+ exception_caught = true
499
+ break
500
+ end
501
+ end
502
+ if ! exception_caught
503
+ frame. pc[] = pc
504
+ push! (stack, frame)
505
+ return BreakpointRef (frame. code, pc, err)
506
+ end
495
507
end
496
508
# Check for world age errors, which generally indicate a failure to go back to toplevel
497
509
if isa (err, MethodError)
Original file line number Diff line number Diff line change 102
102
@test length (stack) >= 2
103
103
@test stack[1 ]. code. scope. name == :outer
104
104
@test stack[2 ]. code. scope. name == :inner
105
+
106
+ # Don't break on caught exceptions
107
+ function f_exc_outer ()
108
+ try
109
+ f_exc_inner ()
110
+ catch err
111
+ return err
112
+ end
113
+ end
114
+ function f_exc_inner ()
115
+ error ()
116
+ end
117
+ stack = JuliaStackFrame[];
118
+ frame = JuliaInterpreter. enter_call (f_exc_outer);
119
+ v = JuliaInterpreter. finish_and_return! (stack, frame)
120
+ @test v isa ErrorException
105
121
finally
106
122
JuliaInterpreter. break_on_error[] = false
107
123
end
You can’t perform that action at this time.
0 commit comments