From 8270e3853dc167d2d7946bb0de7a0f0bb2adde48 Mon Sep 17 00:00:00 2001 From: Damien George Date: Thu, 3 Apr 2014 11:00:54 +0000 Subject: py: More robust int conversion and overflow checking. --- py/obj.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'py/obj.c') diff --git a/py/obj.c b/py/obj.c index 95052d16d..bf3e1d50e 100644 --- a/py/obj.c +++ b/py/obj.c @@ -203,6 +203,24 @@ machine_int_t mp_obj_get_int(mp_obj_t arg) { } } +// returns false if arg is not of integral type +// returns true and sets *value if it is of integral type +// can throw OverflowError if arg is of integral type, but doesn't fit in a machine_int_t +bool mp_obj_get_int_maybe(mp_obj_t arg, machine_int_t *value) { + if (arg == mp_const_false) { + *value = 0; + } else if (arg == mp_const_true) { + *value = 1; + } else if (MP_OBJ_IS_SMALL_INT(arg)) { + *value = MP_OBJ_SMALL_INT_VALUE(arg); + } else if (MP_OBJ_IS_TYPE(arg, &mp_type_int)) { + *value = mp_obj_int_get_checked(arg); + } else { + return false; + } + return true; +} + #if MICROPY_ENABLE_FLOAT mp_float_t mp_obj_get_float(mp_obj_t arg) { if (arg == mp_const_false) { -- cgit v1.2.3