Commit c50772d1 authored by Damien George's avatar Damien George
Browse files

py: Add mp_obj_get_int_truncated and use it where appropriate.

mp_obj_get_int_truncated will raise a TypeError if the argument is not
an integral type.  Use mp_obj_int_get_truncated only when you know the
argument is a small or big int.
parent c2a4e4ef
...@@ -285,7 +285,7 @@ STATIC mp_obj_t socket_setsockopt(mp_uint_t n_args, const mp_obj_t *args) { ...@@ -285,7 +285,7 @@ STATIC mp_obj_t socket_setsockopt(mp_uint_t n_args, const mp_obj_t *args) {
mp_uint_t optlen; mp_uint_t optlen;
mp_int_t val; mp_int_t val;
if (mp_obj_is_integer(args[3])) { if (mp_obj_is_integer(args[3])) {
val = mp_obj_int_get_truncated(args[3]); val = mp_obj_get_int_truncated(args[3]);
optval = &val; optval = &val;
optlen = sizeof(val); optlen = sizeof(val);
} else { } else {
......
...@@ -59,7 +59,7 @@ STATIC void match_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind ...@@ -59,7 +59,7 @@ STATIC void match_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind
STATIC mp_obj_t match_group(mp_obj_t self_in, mp_obj_t no_in) { STATIC mp_obj_t match_group(mp_obj_t self_in, mp_obj_t no_in) {
mp_obj_match_t *self = self_in; mp_obj_match_t *self = self_in;
mp_int_t no = mp_obj_int_get_truncated(no_in); mp_int_t no = mp_obj_get_int(no_in);
if (no < 0 || no >= self->num_matches) { if (no < 0 || no >= self->num_matches) {
nlr_raise(mp_obj_new_exception_arg1(&mp_type_IndexError, no_in)); nlr_raise(mp_obj_new_exception_arg1(&mp_type_IndexError, no_in));
} }
...@@ -135,7 +135,7 @@ STATIC mp_obj_t re_split(uint n_args, const mp_obj_t *args) { ...@@ -135,7 +135,7 @@ STATIC mp_obj_t re_split(uint n_args, const mp_obj_t *args) {
int maxsplit = 0; int maxsplit = 0;
if (n_args > 2) { if (n_args > 2) {
maxsplit = mp_obj_int_get_truncated(args[2]); maxsplit = mp_obj_get_int(args[2]);
} }
mp_obj_t retval = mp_obj_new_list(0, NULL); mp_obj_t retval = mp_obj_new_list(0, NULL);
......
...@@ -231,6 +231,14 @@ mp_int_t mp_obj_get_int(mp_const_obj_t arg) { ...@@ -231,6 +231,14 @@ mp_int_t mp_obj_get_int(mp_const_obj_t arg) {
} }
} }
mp_int_t mp_obj_get_int_truncated(mp_const_obj_t arg) {
if (MP_OBJ_IS_INT(arg)) {
return mp_obj_int_get_truncated(arg);
} else {
return mp_obj_get_int(arg);
}
}
// returns false if arg is not of integral type // returns false if arg is not of integral type
// returns true and sets *value if it is 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 mp_int_t // can throw OverflowError if arg is of integral type, but doesn't fit in a mp_int_t
......
...@@ -511,6 +511,7 @@ bool mp_obj_is_callable(mp_obj_t o_in); ...@@ -511,6 +511,7 @@ bool mp_obj_is_callable(mp_obj_t o_in);
bool mp_obj_equal(mp_obj_t o1, mp_obj_t o2); bool mp_obj_equal(mp_obj_t o1, mp_obj_t o2);
mp_int_t mp_obj_get_int(mp_const_obj_t arg); mp_int_t mp_obj_get_int(mp_const_obj_t arg);
mp_int_t mp_obj_get_int_truncated(mp_const_obj_t arg);
bool mp_obj_get_int_maybe(mp_const_obj_t arg, mp_int_t *value); bool mp_obj_get_int_maybe(mp_const_obj_t arg, mp_int_t *value);
#if MICROPY_PY_BUILTINS_FLOAT #if MICROPY_PY_BUILTINS_FLOAT
mp_float_t mp_obj_get_float(mp_obj_t self_in); mp_float_t mp_obj_get_float(mp_obj_t self_in);
......
...@@ -359,7 +359,7 @@ STATIC mp_obj_t instance_unary_op(mp_uint_t op, mp_obj_t self_in) { ...@@ -359,7 +359,7 @@ STATIC mp_obj_t instance_unary_op(mp_uint_t op, mp_obj_t self_in) {
mp_obj_t val = mp_call_function_1(member[0], self_in); mp_obj_t val = mp_call_function_1(member[0], self_in);
// __hash__ must return a small int // __hash__ must return a small int
if (op == MP_UNARY_OP_HASH) { if (op == MP_UNARY_OP_HASH) {
val = MP_OBJ_NEW_SMALL_INT(mp_obj_int_get_truncated(val)); val = MP_OBJ_NEW_SMALL_INT(mp_obj_get_int_truncated(val));
} }
return val; return val;
} else { } else {
......
...@@ -225,7 +225,7 @@ STATIC mp_obj_t stream_readinto(mp_uint_t n_args, const mp_obj_t *args) { ...@@ -225,7 +225,7 @@ STATIC mp_obj_t stream_readinto(mp_uint_t n_args, const mp_obj_t *args) {
// https://docs.python.org/3/library/socket.html#socket.socket.recv_into // https://docs.python.org/3/library/socket.html#socket.socket.recv_into
mp_uint_t len = bufinfo.len; mp_uint_t len = bufinfo.len;
if (n_args > 2) { if (n_args > 2) {
len = mp_obj_int_get_truncated(args[2]); len = mp_obj_get_int(args[2]);
if (len > bufinfo.len) { if (len > bufinfo.len) {
len = bufinfo.len; len = bufinfo.len;
} }
......
...@@ -287,7 +287,7 @@ STATIC mp_obj_t socket_setsockopt(mp_uint_t n_args, const mp_obj_t *args) { ...@@ -287,7 +287,7 @@ STATIC mp_obj_t socket_setsockopt(mp_uint_t n_args, const mp_obj_t *args) {
mp_uint_t optlen; mp_uint_t optlen;
mp_int_t val; mp_int_t val;
if (mp_obj_is_integer(args[3])) { if (mp_obj_is_integer(args[3])) {
val = mp_obj_int_get_truncated(args[3]); val = mp_obj_get_int_truncated(args[3]);
optval = &val; optval = &val;
optlen = sizeof(val); optlen = sizeof(val);
} else { } else {
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment