summaryrefslogtreecommitdiffstatshomepage
path: root/py/vm.c
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2014-03-26 18:59:15 +0000
committerDamien George <damien.p.george@gmail.com>2014-03-26 18:59:15 +0000
commit688e220d268609ec1a5be7a9b532637fe8c1f765 (patch)
tree48d8ae8be3bce6eafa66a0829a2934b695688580 /py/vm.c
parent9c817b9465038e21dc44d2720b5746e8f2f3ce95 (diff)
parentc403076ef8c534836a441374ef0366027946de50 (diff)
downloadmicropython-688e220d268609ec1a5be7a9b532637fe8c1f765.tar.gz
micropython-688e220d268609ec1a5be7a9b532637fe8c1f765.zip
Merge pull request #379 from pfalcon/reraise
vm: Implement raise statement w/o args (reraising last exception).
Diffstat (limited to 'py/vm.c')
-rw-r--r--py/vm.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/py/vm.c b/py/vm.c
index 8ae619f9be..8a0262a841 100644
--- a/py/vm.c
+++ b/py/vm.c
@@ -605,8 +605,14 @@ unwind_return:
case MP_BC_RAISE_VARARGS:
unum = *ip++;
- assert(unum == 1);
- obj1 = POP();
+ assert(unum <= 1);
+ if (unum == 0) {
+ // This assumes that nlr.ret_val holds last raised
+ // exception and is not overwritten since then.
+ obj1 = nlr.ret_val;
+ } else {
+ obj1 = POP();
+ }
nlr_jump(rt_make_raise_obj(obj1));
case MP_BC_YIELD_VALUE: