summaryrefslogtreecommitdiff
path: root/py/obj.c
diff options
context:
space:
mode:
authorDamien George <damien@micropython.org>2023-05-25 10:57:08 +1000
committerDamien George <damien@micropython.org>2023-06-01 13:01:07 +1000
commit48ffd6596e7a4c185a81be233b46d3c99a83a7ac (patch)
tree3a15993f388746d0125b875c621a8508b5c8b731 /py/obj.c
parent3ae78e803b69c4f1fd5dfe7eb732de7075f12e6c (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.c15
1 files changed, 4 insertions, 11 deletions
diff --git a/py/obj.c b/py/obj.c
index 7e26d4c7f..dc6919467 100644
--- a/py/obj.c
+++ b/py/obj.c
@@ -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) {