diff options
author | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2014-03-29 02:49:07 +0200 |
---|---|---|
committer | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2014-03-29 04:35:23 +0200 |
commit | 4fff26a35cf88765efc1ca0595fa2b26eff4fc84 (patch) | |
tree | 4d9a70cfa3b3c6b3aa4cd0b60368292861727550 | |
parent | c47fd2da8ec705a3c6f51d1a09b7bf4a180a01ff (diff) | |
download | micropython-4fff26a35cf88765efc1ca0595fa2b26eff4fc84.tar.gz micropython-4fff26a35cf88765efc1ca0595fa2b26eff4fc84.zip |
vm: Factor out exception block setup to a macro.
Will be reused in WITH bytecodes.
-rw-r--r-- | py/vm.c | 15 |
1 files changed, 9 insertions, 6 deletions
@@ -44,6 +44,14 @@ typedef enum { #define TOP() (*sp) #define SET_TOP(val) *sp = (val) +#define SETUP_BLOCK() \ + DECODE_ULABEL; /* except labels are always forward */ \ + ++exc_sp; \ + exc_sp->opcode = op; \ + exc_sp->handler = ip + unum; \ + exc_sp->val_sp = MP_TAGPTR_MAKE(sp, currently_in_except_block); \ + currently_in_except_block = 0; /* in a try block now */ + mp_vm_return_kind_t mp_execute_byte_code(const byte *code, const mp_obj_t *args, uint n_args, const mp_obj_t *args2, uint n_args2, mp_obj_t *ret) { const byte *ip = code; @@ -398,12 +406,7 @@ unwind_jump: // matched against: POP_BLOCK or POP_EXCEPT (anything else?) case MP_BC_SETUP_EXCEPT: case MP_BC_SETUP_FINALLY: - DECODE_ULABEL; // except labels are always forward - ++exc_sp; - exc_sp->opcode = op; - exc_sp->handler = ip + unum; - exc_sp->val_sp = MP_TAGPTR_MAKE(sp, currently_in_except_block); - currently_in_except_block = 0; // in a try block now + SETUP_BLOCK(); break; case MP_BC_END_FINALLY: |