summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2014-03-29 17:28:20 +0000
committerDamien George <damien.p.george@gmail.com>2014-03-29 17:28:20 +0000
commit0aa5d51cf115f2941ca20901d45a044f54792eb4 (patch)
tree812b04b3b753010a72bf17826ac146a641a5810f
parentc9fd6645b0a1af73f3854ddc2745596070985a18 (diff)
downloadmicropython-0aa5d51cf115f2941ca20901d45a044f54792eb4.tar.gz
micropython-0aa5d51cf115f2941ca20901d45a044f54792eb4.zip
py: Support mpz -op- float, mpz -op- complex, and complex -op- mpz.
-rw-r--r--py/obj.c3
-rw-r--r--py/objint_mpz.c8
2 files changed, 11 insertions, 0 deletions
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;
}