From 93bb7dffd2a655dd8522114ed014077fb6b7ada7 Mon Sep 17 00:00:00 2001 From: Damien George Date: Mon, 1 Feb 2016 16:07:21 +0000 Subject: [PATCH] py/vm: Fix popping of exception block in UNWIND_JUMP opcode. Fixes issue #1812. --- py/vm.c | 2 +- tests/basics/try_continue.py | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 tests/basics/try_continue.py diff --git a/py/vm.c b/py/vm.c index 71e804c47f..141315ea8e 100644 --- a/py/vm.c +++ b/py/vm.c @@ -674,7 +674,7 @@ unwind_jump:; exc_sp--; // pop exception handler goto dispatch_loop; // run the exception handler } - exc_sp--; + POP_EXC_BLOCK(); } ip = (const byte*)MP_OBJ_TO_PTR(POP()); // pop destination ip for jump if (unum != 0) { diff --git a/tests/basics/try_continue.py b/tests/basics/try_continue.py new file mode 100644 index 0000000000..4a199b8a38 --- /dev/null +++ b/tests/basics/try_continue.py @@ -0,0 +1,13 @@ +# test continue within exception handler + +def f(): + lst = [1, 2, 3] + for x in lst: + print('a', x) + try: + if x == 2: + raise Exception + except Exception: + continue + print('b', x) +f()