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/obj.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/obj.c')
-rw-r--r-- | py/obj.c | 9 |
1 files changed, 8 insertions, 1 deletions
@@ -371,7 +371,7 @@ mp_float_t mp_obj_get_float(mp_obj_t arg) { } #if MICROPY_PY_BUILTINS_COMPLEX -void mp_obj_get_complex(mp_obj_t arg, mp_float_t *real, mp_float_t *imag) { +bool mp_obj_get_complex_maybe(mp_obj_t arg, mp_float_t *real, mp_float_t *imag) { if (arg == mp_const_false) { *real = 0; *imag = 0; @@ -392,6 +392,13 @@ void mp_obj_get_complex(mp_obj_t arg, mp_float_t *real, mp_float_t *imag) { } else if (mp_obj_is_type(arg, &mp_type_complex)) { mp_obj_complex_get(arg, real, imag); } else { + return false; + } + return true; +} + +void mp_obj_get_complex(mp_obj_t arg, mp_float_t *real, mp_float_t *imag) { + if (!mp_obj_get_complex_maybe(arg, real, imag)) { #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE mp_raise_TypeError(MP_ERROR_TEXT("can't convert to complex")); #else |