diff options
author | Damien George <damien.p.george@gmail.com> | 2015-06-13 22:00:10 +0100 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2015-06-13 23:36:30 +0100 |
commit | c5029bcbf37fd1a3fb145d9fa9e4a5094478f17b (patch) | |
tree | 3f5f37bbf827d9b1ca302a5492e6522090998076 /py/modbuiltins.c | |
parent | 6f4952004207a249a437dc822c5252422f63cc69 (diff) | |
download | micropython-c5029bcbf37fd1a3fb145d9fa9e4a5094478f17b.tar.gz micropython-c5029bcbf37fd1a3fb145d9fa9e4a5094478f17b.zip |
py: Add MP_BINARY_OP_DIVMOD to simplify and consolidate divmod builtin.
Diffstat (limited to 'py/modbuiltins.c')
-rw-r--r-- | py/modbuiltins.c | 39 |
1 files changed, 1 insertions, 38 deletions
diff --git a/py/modbuiltins.c b/py/modbuiltins.c index ec40056e82..16b0e320ca 100644 --- a/py/modbuiltins.c +++ b/py/modbuiltins.c @@ -230,44 +230,7 @@ STATIC mp_obj_t mp_builtin_dir(mp_uint_t n_args, const mp_obj_t *args) { MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_builtin_dir_obj, 0, 1, mp_builtin_dir); STATIC mp_obj_t mp_builtin_divmod(mp_obj_t o1_in, mp_obj_t o2_in) { - // TODO handle big int - if (MP_OBJ_IS_SMALL_INT(o1_in) && MP_OBJ_IS_SMALL_INT(o2_in)) { - mp_int_t i1 = MP_OBJ_SMALL_INT_VALUE(o1_in); - mp_int_t i2 = MP_OBJ_SMALL_INT_VALUE(o2_in); - if (i2 == 0) { - #if MICROPY_PY_BUILTINS_FLOAT - zero_division_error: - #endif - nlr_raise(mp_obj_new_exception_msg(&mp_type_ZeroDivisionError, "division by zero")); - } - mp_obj_t args[2]; - args[0] = MP_OBJ_NEW_SMALL_INT(mp_small_int_floor_divide(i1, i2)); - args[1] = MP_OBJ_NEW_SMALL_INT(mp_small_int_modulo(i1, i2)); - return mp_obj_new_tuple(2, args); - #if MICROPY_PY_BUILTINS_FLOAT - } else if (MP_OBJ_IS_TYPE(o1_in, &mp_type_float) || MP_OBJ_IS_TYPE(o2_in, &mp_type_float)) { - mp_float_t f1 = mp_obj_get_float(o1_in); - mp_float_t f2 = mp_obj_get_float(o2_in); - if (f2 == 0.0) { - goto zero_division_error; - } - mp_obj_float_divmod(&f1, &f2); - mp_obj_t tuple[2] = { - mp_obj_new_float(f1), - mp_obj_new_float(f2), - }; - return mp_obj_new_tuple(2, tuple); - #endif - } else { - if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) { - nlr_raise(mp_obj_new_exception_msg(&mp_type_TypeError, - "unsupported operand type(s) for divmod()")); - } else { - nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_TypeError, - "unsupported operand type(s) for divmod(): '%s' and '%s'", - mp_obj_get_type_str(o1_in), mp_obj_get_type_str(o2_in))); - } - } + return mp_binary_op(MP_BINARY_OP_DIVMOD, o1_in, o2_in); } MP_DEFINE_CONST_FUN_OBJ_2(mp_builtin_divmod_obj, mp_builtin_divmod); |