summaryrefslogtreecommitdiffstatshomepage
path: root/py/builtin.c
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2014-10-22 23:05:50 +0100
committerDamien George <damien.p.george@gmail.com>2014-10-22 23:05:50 +0100
commite72be1b999a3337f74a8e5a8f61705666f834d2b (patch)
tree6275c2b8eb01130f987df7ebe414f6690b971bec /py/builtin.c
parent5fc42a6c9733bd8f165be7fa8d70fb614ae8de53 (diff)
downloadmicropython-e72be1b999a3337f74a8e5a8f61705666f834d2b.tar.gz
micropython-e72be1b999a3337f74a8e5a8f61705666f834d2b.zip
py: Fix smallint modulo with negative arguments.
Addresses issue #927.
Diffstat (limited to 'py/builtin.c')
-rw-r--r--py/builtin.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/py/builtin.c b/py/builtin.c
index 1af92a448f..133473d019 100644
--- a/py/builtin.c
+++ b/py/builtin.c
@@ -33,6 +33,7 @@
#include "qstr.h"
#include "obj.h"
#include "objstr.h"
+#include "smallint.h"
#include "runtime0.h"
#include "runtime.h"
#include "builtin.h"
@@ -253,8 +254,8 @@ STATIC mp_obj_t mp_builtin_divmod(mp_obj_t o1_in, mp_obj_t o2_in) {
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(i1 / i2);
- args[1] = MP_OBJ_NEW_SMALL_INT(i1 % i2);
+ 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)) {