diff options
author | Damien George <damien@micropython.org> | 2023-05-25 10:57:08 +1000 |
---|---|---|
committer | Damien George <damien@micropython.org> | 2023-06-01 13:01:07 +1000 |
commit | 48ffd6596e7a4c185a81be233b46d3c99a83a7ac (patch) | |
tree | 3a15993f388746d0125b875c621a8508b5c8b731 /py/obj.c | |
parent | 3ae78e803b69c4f1fd5dfe7eb732de7075f12e6c (diff) |
py: Change MP_UNARY_OP_INT to MP_UNARY_OP_INT_MAYBE.
To be consistent with MP_UNARY_OP_INT_FLOAT and MP_UNARY_OP_INT_COMPLEX,
and allow int() to first check if a type supports __int__ before trying
other things (as per CPython).
Signed-off-by: Damien George <damien@micropython.org>
Diffstat (limited to 'py/obj.c')
-rw-r--r-- | py/obj.c | 15 |
1 files changed, 4 insertions, 11 deletions
@@ -298,18 +298,11 @@ mp_int_t mp_obj_get_int(mp_const_obj_t arg) { // This function essentially performs implicit type conversion to int // Note that Python does NOT provide implicit type conversion from // float to int in the core expression language, try some_list[1.0]. - if (arg == mp_const_false) { - return 0; - } else if (arg == mp_const_true) { - return 1; - } else if (mp_obj_is_small_int(arg)) { - return MP_OBJ_SMALL_INT_VALUE(arg); - } else if (mp_obj_is_exact_type(arg, &mp_type_int)) { - return mp_obj_int_get_checked(arg); - } else { - mp_obj_t res = mp_unary_op(MP_UNARY_OP_INT, (mp_obj_t)arg); - return mp_obj_int_get_checked(res); + mp_int_t val; + if (!mp_obj_get_int_maybe(arg, &val)) { + mp_raise_TypeError_int_conversion(arg); } + return val; } mp_int_t mp_obj_get_int_truncated(mp_const_obj_t arg) { |