From b5fbd0ba876b43d0f1d1d9af8dd556766bda553b Mon Sep 17 00:00:00 2001 From: Damien George Date: Wed, 9 Apr 2014 19:55:33 +0100 Subject: py: Add mp_obj_is_integer; make mp_get_index check for long int. mp_obj_is_integer should be used to check if an object is of integral type. It returns true for bool, small int and long int. --- py/obj.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'py/obj.c') diff --git a/py/obj.c b/py/obj.c index d1db53690..844ec4121 100644 --- a/py/obj.c +++ b/py/obj.c @@ -99,6 +99,11 @@ int mp_obj_is_true(mp_obj_t arg) { } } +// returns true if o_in is bool, small int, or long int +bool mp_obj_is_integer(mp_obj_t o_in) { + return MP_OBJ_IS_INT(o_in) || MP_OBJ_IS_TYPE(o_in, &mp_type_bool); +} + bool mp_obj_is_callable(mp_obj_t o_in) { return mp_obj_get_type(o_in)->call != NULL; } @@ -285,8 +290,8 @@ void mp_obj_get_array_fixed_n(mp_obj_t o, uint len, mp_obj_t **items) { // is_slice determines whether the index is a slice index uint mp_get_index(const mp_obj_type_t *type, machine_uint_t len, mp_obj_t index, bool is_slice) { int i; - if (MP_OBJ_IS_SMALL_INT(index)) { - i = MP_OBJ_SMALL_INT_VALUE(index); + if (MP_OBJ_IS_INT(index)) { + i = mp_obj_int_get_checked(index); } else if (MP_OBJ_IS_TYPE(index, &mp_type_bool)) { i = (index == mp_const_true ? 1 : 0); } else { -- cgit v1.2.3