diff options
author | Damien George <damien.p.george@gmail.com> | 2018-03-30 12:37:04 +1100 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2018-03-30 12:43:38 +1100 |
commit | f50b64cab58025e080f994147b75a8ffc55d2b35 (patch) | |
tree | 59a1b1fa9fc332dad56d9954321cde7e7f8f40c5 /py | |
parent | 32807881954f106b9735de74fe984062a0815b81 (diff) |
py/runtime: Be sure that non-intercepted thrown object is an exception.
The VM expects that, if mp_resume() returns MP_VM_RETURN_EXCEPTION, then
the returned value is an exception instance (eg to add a traceback to it).
It's possible that a value passed to a generator's throw() is not an
exception so must be explicitly checked for if the thrown value is not
intercepted by the generator.
Thanks to @jepler for finding the bug.
Diffstat (limited to 'py')
-rw-r--r-- | py/runtime.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/py/runtime.c b/py/runtime.c index ca68fe982..219ec22de 100644 --- a/py/runtime.c +++ b/py/runtime.c @@ -1282,7 +1282,7 @@ mp_vm_return_kind_t mp_resume(mp_obj_t self_in, mp_obj_t send_value, mp_obj_t th // will be propagated up. This behavior is approved by test_pep380.py // test_delegation_of_close_to_non_generator(), // test_delegating_throw_to_non_generator() - *ret_val = throw_value; + *ret_val = mp_make_raise_obj(throw_value); return MP_VM_RETURN_EXCEPTION; } } |