summaryrefslogtreecommitdiff
path: root/py/objint.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/objint.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/objint.c')
-rw-r--r--py/objint.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/py/objint.c b/py/objint.c
index 1a3ad8694..e54cdb89b 100644
--- a/py/objint.c
+++ b/py/objint.c
@@ -48,10 +48,10 @@ STATIC mp_obj_t mp_obj_int_make_new(const mp_obj_type_t *type_in, size_t n_args,
case 0:
return MP_OBJ_NEW_SMALL_INT(0);
- case 1:
- if (mp_obj_is_int(args[0])) {
- // already an int (small or long), just return it
- return args[0];
+ case 1: {
+ mp_obj_t o = mp_unary_op(MP_UNARY_OP_INT_MAYBE, args[0]);
+ if (o != MP_OBJ_NULL) {
+ return o;
} else if (mp_obj_is_str_or_bytes(args[0])) {
// a string, parse it
size_t l;
@@ -62,8 +62,9 @@ STATIC mp_obj_t mp_obj_int_make_new(const mp_obj_type_t *type_in, size_t n_args,
return mp_obj_new_int_from_float(mp_obj_float_get(args[0]));
#endif
} else {
- return mp_unary_op(MP_UNARY_OP_INT, args[0]);
+ mp_raise_TypeError_int_conversion(args[0]);
}
+ }
case 2:
default: {