summaryrefslogtreecommitdiff
path: root/py/vm.c
diff options
context:
space:
mode:
Diffstat (limited to 'py/vm.c')
-rw-r--r--py/vm.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/py/vm.c b/py/vm.c
index 6a4634d00..64bddd6b5 100644
--- a/py/vm.c
+++ b/py/vm.c
@@ -1359,10 +1359,11 @@ exception_handler:
#if MICROPY_STACKLESS
unwind_loop:
#endif
- // set file and line number that the exception occurred at
- // TODO: don't set traceback for exceptions re-raised by END_FINALLY.
- // But consider how to handle nested exceptions.
- if (nlr.ret_val != &mp_const_GeneratorExit_obj) {
+ // Set traceback info (file and line number) where the exception occurred, but not for:
+ // - constant GeneratorExit object, because it's const
+ // - exceptions re-raised by END_FINALLY
+ if (nlr.ret_val != &mp_const_GeneratorExit_obj
+ && *code_state->ip != MP_BC_END_FINALLY) {
const byte *ip = code_state->fun_bc->bytecode;
ip = mp_decode_uint_skip(ip); // skip n_state
ip = mp_decode_uint_skip(ip); // skip n_exc_stack