diff options
author | Damien George <damien@micropython.org> | 2020-06-22 10:21:02 +1000 |
---|---|---|
committer | Damien George <damien@micropython.org> | 2020-06-27 01:03:10 +1000 |
commit | 9f911d822ee97edaa94873823db5eb10c31f5f77 (patch) | |
tree | f09d51dcfa8481f2dce415e70b9efca9c528293b /py/objcomplex.c | |
parent | 41fa8b5482089bdd7fa5478fe24f32913b23967c (diff) |
py/objcomplex: Add mp_obj_get_complex_maybe for use in complex bin-op.
This allows complex binary operations to fail gracefully with unsupported
operation rather than raising an exception, so that special methods work
correctly.
Signed-off-by: Damien George <damien@micropython.org>
Diffstat (limited to 'py/objcomplex.c')
-rw-r--r-- | py/objcomplex.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/py/objcomplex.c b/py/objcomplex.c index 91e440230..f4c4aeffc 100644 --- a/py/objcomplex.c +++ b/py/objcomplex.c @@ -178,7 +178,10 @@ void mp_obj_complex_get(mp_obj_t self_in, mp_float_t *real, mp_float_t *imag) { mp_obj_t mp_obj_complex_binary_op(mp_binary_op_t op, mp_float_t lhs_real, mp_float_t lhs_imag, mp_obj_t rhs_in) { mp_float_t rhs_real, rhs_imag; - mp_obj_get_complex(rhs_in, &rhs_real, &rhs_imag); // can be any type, this function will convert to float (if possible) + if (!mp_obj_get_complex_maybe(rhs_in, &rhs_real, &rhs_imag)) { + return MP_OBJ_NULL; // op not supported + } + switch (op) { case MP_BINARY_OP_ADD: case MP_BINARY_OP_INPLACE_ADD: |