From 0aa5d51cf115f2941ca20901d45a044f54792eb4 Mon Sep 17 00:00:00 2001 From: Damien George Date: Sat, 29 Mar 2014 17:28:20 +0000 Subject: [PATCH] py: Support mpz -op- float, mpz -op- complex, and complex -op- mpz. --- py/obj.c | 3 +++ py/objint_mpz.c | 8 ++++++++ 2 files changed, 11 insertions(+) diff --git a/py/obj.c b/py/obj.c index 86bc7c211c..3deee909a6 100644 --- a/py/obj.c +++ b/py/obj.c @@ -195,6 +195,9 @@ void mp_obj_get_complex(mp_obj_t arg, mp_float_t *real, mp_float_t *imag) { } else if (MP_OBJ_IS_SMALL_INT(arg)) { *real = MP_OBJ_SMALL_INT_VALUE(arg); *imag = 0; + } else if (MP_OBJ_IS_TYPE(arg, &mp_type_int)) { + *real = mp_obj_int_as_float(arg); + *imag = 0; } else if (MP_OBJ_IS_TYPE(arg, &mp_type_float)) { *real = mp_obj_float_get(arg); *imag = 0; diff --git a/py/objint_mpz.c b/py/objint_mpz.c index bd82815bcf..75bb1c1100 100644 --- a/py/objint_mpz.c +++ b/py/objint_mpz.c @@ -57,6 +57,7 @@ mp_obj_t int_binary_op(int op, mp_obj_t lhs_in, mp_obj_t rhs_in) { } else if (MP_OBJ_IS_TYPE(lhs_in, &mp_type_int)) { zlhs = &((mp_obj_int_t*)lhs_in)->mpz; } else { + // unsupported type return MP_OBJ_NULL; } @@ -66,7 +67,14 @@ mp_obj_t int_binary_op(int op, mp_obj_t lhs_in, mp_obj_t rhs_in) { zrhs = &z_int; } else if (MP_OBJ_IS_TYPE(rhs_in, &mp_type_int)) { zrhs = &((mp_obj_int_t*)rhs_in)->mpz; +#if MICROPY_ENABLE_FLOAT + } else if (MP_OBJ_IS_TYPE(rhs_in, &mp_type_float)) { + return mp_obj_float_binary_op(op, mpz_as_float(zlhs), rhs_in); + } else if (MP_OBJ_IS_TYPE(rhs_in, &mp_type_complex)) { + return mp_obj_complex_binary_op(op, mpz_as_float(zlhs), 0, rhs_in); +#endif } else { + // unsupported type return MP_OBJ_NULL; }