diff options
author | Damien George <damien.p.george@gmail.com> | 2014-03-30 00:09:35 +0000 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2014-03-30 00:09:35 +0000 |
commit | f8ff700de8af43413a59cad2a0c197678a05fdd5 (patch) | |
tree | 5f29a55fb7a10f7c6ab39b325145212f842b72ca /py/vm.c | |
parent | d54b8a4789bb8ec8b9be0b8d62486cc7de11540c (diff) | |
parent | 0c904df8e6c4cf9123a837861b97585a61b3d8df (diff) | |
download | micropython-f8ff700de8af43413a59cad2a0c197678a05fdd5.tar.gz micropython-f8ff700de8af43413a59cad2a0c197678a05fdd5.zip |
Merge pull request #390 from pfalcon/reraise-recursive
vm: Save current active exception on opening new try block.
Diffstat (limited to 'py/vm.c')
-rw-r--r-- | py/vm.c | 2 |
1 files changed, 2 insertions, 0 deletions
@@ -51,10 +51,12 @@ typedef enum { exc_sp->opcode = op; \ exc_sp->handler = ip + unum; \ exc_sp->val_sp = MP_TAGPTR_MAKE(sp, currently_in_except_block); \ + exc_sp->prev_exc = nlr.ret_val; \ currently_in_except_block = 0; /* in a try block now */ #define POP_EXC_BLOCK() \ currently_in_except_block = MP_TAGPTR_TAG(exc_sp->val_sp); /* restore previous state */ \ + if (currently_in_except_block) { nlr.ret_val = exc_sp->prev_exc; } \ exc_sp--; /* pop back to previous exception handler */ 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) { |