Skip to content

Commit 0aa5d51

Browse files
committed
py: Support mpz -op- float, mpz -op- complex, and complex -op- mpz.
1 parent c9fd664 commit 0aa5d51

2 files changed

Lines changed: 11 additions & 0 deletions

File tree

py/obj.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,9 @@ void mp_obj_get_complex(mp_obj_t arg, mp_float_t *real, mp_float_t *imag) {
195195
} else if (MP_OBJ_IS_SMALL_INT(arg)) {
196196
*real = MP_OBJ_SMALL_INT_VALUE(arg);
197197
*imag = 0;
198+
} else if (MP_OBJ_IS_TYPE(arg, &mp_type_int)) {
199+
*real = mp_obj_int_as_float(arg);
200+
*imag = 0;
198201
} else if (MP_OBJ_IS_TYPE(arg, &mp_type_float)) {
199202
*real = mp_obj_float_get(arg);
200203
*imag = 0;

py/objint_mpz.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ mp_obj_t int_binary_op(int op, mp_obj_t lhs_in, mp_obj_t rhs_in) {
5757
} else if (MP_OBJ_IS_TYPE(lhs_in, &mp_type_int)) {
5858
zlhs = &((mp_obj_int_t*)lhs_in)->mpz;
5959
} else {
60+
// unsupported type
6061
return MP_OBJ_NULL;
6162
}
6263

@@ -66,7 +67,14 @@ mp_obj_t int_binary_op(int op, mp_obj_t lhs_in, mp_obj_t rhs_in) {
6667
zrhs = &z_int;
6768
} else if (MP_OBJ_IS_TYPE(rhs_in, &mp_type_int)) {
6869
zrhs = &((mp_obj_int_t*)rhs_in)->mpz;
70+
#if MICROPY_ENABLE_FLOAT
71+
} else if (MP_OBJ_IS_TYPE(rhs_in, &mp_type_float)) {
72+
return mp_obj_float_binary_op(op, mpz_as_float(zlhs), rhs_in);
73+
} else if (MP_OBJ_IS_TYPE(rhs_in, &mp_type_complex)) {
74+
return mp_obj_complex_binary_op(op, mpz_as_float(zlhs), 0, rhs_in);
75+
#endif
6976
} else {
77+
// unsupported type
7078
return MP_OBJ_NULL;
7179
}
7280

0 commit comments

Comments
 (0)