aboutsummaryrefslogtreecommitdiff
path: root/py/vm.c
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2019-01-04 16:40:29 +1100
committerDamien George <damien.p.george@gmail.com>2019-03-05 16:09:41 +1100
commit6f9e3ff719917616f163d3d671d6abe9472ba6ff (patch)
tree25fa97ad0d7b0f102081ebd05e106cc26eba7220 /py/vm.c
parente1fb03f3e2d1e99d0f745e9e17a963a036d34476 (diff)
py/vm: Remove currently_in_except_block variable.
After the previous commit it is no longer needed.
Diffstat (limited to 'py/vm.c')
-rw-r--r--py/vm.c25
1 files changed, 9 insertions, 16 deletions
diff --git a/py/vm.c b/py/vm.c
index 56494dfa1..a53b4a083 100644
--- a/py/vm.c
+++ b/py/vm.c
@@ -100,13 +100,11 @@
DECODE_ULABEL; /* except labels are always forward */ \
++exc_sp; \
exc_sp->handler = ip + ulab; \
- exc_sp->val_sp = MP_TAGPTR_MAKE(sp, ((with_or_finally) << 1) | currently_in_except_block); \
+ exc_sp->val_sp = MP_TAGPTR_MAKE(sp, ((with_or_finally) << 1)); \
exc_sp->prev_exc = NULL; \
- currently_in_except_block = 0; /* in a try block now */ \
} while (0)
#define POP_EXC_BLOCK() \
- currently_in_except_block = MP_TAGPTR_TAG0(exc_sp->val_sp); /* restore previous state */ \
exc_sp--; /* pop back to previous exception handler */ \
CLEAR_SYS_EXC_INFO() /* just clear sys.exc_info(), not compliant, but it shouldn't be used in 1st place */
@@ -161,7 +159,6 @@ run_code_state: ;
}
// variables that are visible to the exception handler (declared volatile)
- volatile bool currently_in_except_block = MP_TAGPTR_TAG0(code_state->exc_sp); // 0 or 1, to detect nested exceptions
mp_exc_stack_t *volatile exc_sp = MP_TAGPTR_PTR(code_state->exc_sp); // stack grows up, exc_sp points to top of stack
#if MICROPY_PY_THREAD_GIL && MICROPY_PY_THREAD_GIL_VM_DIVISOR
@@ -771,7 +768,6 @@ unwind_jump:;
// matched against: SETUP_EXCEPT
ENTRY(MP_BC_POP_EXCEPT):
assert(exc_sp >= exc_stack);
- assert(currently_in_except_block);
POP_EXC_BLOCK();
DISPATCH();
@@ -906,7 +902,7 @@ unwind_jump:;
if (mp_obj_get_type(*sp) == &mp_type_fun_bc) {
code_state->ip = ip;
code_state->sp = sp;
- code_state->exc_sp = MP_TAGPTR_MAKE(exc_sp, currently_in_except_block);
+ code_state->exc_sp = MP_TAGPTR_MAKE(exc_sp, 0);
mp_code_state_t *new_state = mp_obj_fun_bc_prepare_codestate(*sp, unum & 0xff, (unum >> 8) & 0xff, sp + 1);
#if !MICROPY_ENABLE_PYSTACK
if (new_state == NULL) {
@@ -942,7 +938,7 @@ unwind_jump:;
if (mp_obj_get_type(*sp) == &mp_type_fun_bc) {
code_state->ip = ip;
code_state->sp = sp;
- code_state->exc_sp = MP_TAGPTR_MAKE(exc_sp, currently_in_except_block);
+ code_state->exc_sp = MP_TAGPTR_MAKE(exc_sp, 0);
mp_call_args_t out_args;
mp_call_prepare_args_n_kw_var(false, unum, sp, &out_args);
@@ -985,7 +981,7 @@ unwind_jump:;
if (mp_obj_get_type(*sp) == &mp_type_fun_bc) {
code_state->ip = ip;
code_state->sp = sp;
- code_state->exc_sp = MP_TAGPTR_MAKE(exc_sp, currently_in_except_block);
+ code_state->exc_sp = MP_TAGPTR_MAKE(exc_sp, 0);
size_t n_args = unum & 0xff;
size_t n_kw = (unum >> 8) & 0xff;
@@ -1025,7 +1021,7 @@ unwind_jump:;
if (mp_obj_get_type(*sp) == &mp_type_fun_bc) {
code_state->ip = ip;
code_state->sp = sp;
- code_state->exc_sp = MP_TAGPTR_MAKE(exc_sp, currently_in_except_block);
+ code_state->exc_sp = MP_TAGPTR_MAKE(exc_sp, 0);
mp_call_args_t out_args;
mp_call_prepare_args_n_kw_var(true, unum, sp, &out_args);
@@ -1063,7 +1059,7 @@ unwind_jump:;
unwind_return:
// Search for and execute finally handlers that aren't already active
while (exc_sp >= exc_stack) {
- if (!currently_in_except_block && MP_TAGPTR_TAG1(exc_sp->val_sp) && exc_sp->handler > ip) {
+ if (MP_TAGPTR_TAG1(exc_sp->val_sp) && exc_sp->handler > ip) {
// Found a finally handler that isn't active.
// Getting here the stack looks like:
// (..., X, [iter0, iter1, ...,] ret_val)
@@ -1145,7 +1141,7 @@ yield:
nlr_pop();
code_state->ip = ip;
code_state->sp = sp;
- code_state->exc_sp = MP_TAGPTR_MAKE(exc_sp, currently_in_except_block);
+ code_state->exc_sp = MP_TAGPTR_MAKE(exc_sp, 0);
return MP_VM_RETURN_YIELD;
ENTRY(MP_BC_YIELD_FROM): {
@@ -1419,7 +1415,8 @@ unwind_loop:
mp_obj_exception_add_traceback(MP_OBJ_FROM_PTR(nlr.ret_val), source_file, source_line, block_name);
}
- while (currently_in_except_block || (exc_sp >= exc_stack && exc_sp->handler <= code_state->ip)) {
+ while (exc_sp >= exc_stack && exc_sp->handler <= code_state->ip) {
+
// nested exception
assert(exc_sp >= exc_stack);
@@ -1432,9 +1429,6 @@ unwind_loop:
}
if (exc_sp >= exc_stack) {
- // set flag to indicate that we are now handling an exception
- currently_in_except_block = 1;
-
// catch exception and pass to byte code
code_state->ip = exc_sp->handler;
mp_obj_t *sp = MP_TAGPTR_PTR(exc_sp->val_sp);
@@ -1460,7 +1454,6 @@ unwind_loop:
fastn = &code_state->state[n_state - 1];
exc_stack = (mp_exc_stack_t*)(code_state->state + n_state);
// variables that are visible to the exception handler (declared volatile)
- currently_in_except_block = MP_TAGPTR_TAG0(code_state->exc_sp); // 0 or 1, to detect nested exceptions
exc_sp = MP_TAGPTR_PTR(code_state->exc_sp); // stack grows up, exc_sp points to top of stack
goto unwind_loop;