all: Convert mp_uint_t to mp_unary_op_t/mp_binary_op_t where appropriate
The unary-op/binary-op enums are already defined, and there are no arithmetic tricks used with these types, so it makes sense to use the correct enum type for arguments that take these values. It also reduces code size quite a bit for nan-boxing builds.
This commit is contained in:
parent
be8e5744e6
commit
58321dd985
@ -281,7 +281,7 @@ STATIC mp_obj_t btree_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC mp_obj_t btree_binary_op(mp_uint_t op, mp_obj_t lhs_in, mp_obj_t rhs_in) {
|
STATIC mp_obj_t btree_binary_op(mp_binary_op_t op, mp_obj_t lhs_in, mp_obj_t rhs_in) {
|
||||||
mp_obj_btree_t *self = MP_OBJ_TO_PTR(lhs_in);
|
mp_obj_btree_t *self = MP_OBJ_TO_PTR(lhs_in);
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case MP_BINARY_OP_IN: {
|
case MP_BINARY_OP_IN: {
|
||||||
|
@ -189,7 +189,7 @@ STATIC mp_obj_t mod_utimeq_dump(mp_obj_t heap_in) {
|
|||||||
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_utimeq_dump_obj, mod_utimeq_dump);
|
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_utimeq_dump_obj, mod_utimeq_dump);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
STATIC mp_obj_t utimeq_unary_op(mp_uint_t op, mp_obj_t self_in) {
|
STATIC mp_obj_t utimeq_unary_op(mp_unary_op_t op, mp_obj_t self_in) {
|
||||||
mp_obj_utimeq_t *self = MP_OBJ_TO_PTR(self_in);
|
mp_obj_utimeq_t *self = MP_OBJ_TO_PTR(self_in);
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case MP_UNARY_OP_BOOL: return mp_obj_new_bool(self->len != 0);
|
case MP_UNARY_OP_BOOL: return mp_obj_new_bool(self->len != 0);
|
||||||
|
2
py/obj.c
2
py/obj.c
@ -505,7 +505,7 @@ void mp_get_buffer_raise(mp_obj_t obj, mp_buffer_info_t *bufinfo, mp_uint_t flag
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mp_obj_t mp_generic_unary_op(mp_uint_t op, mp_obj_t o_in) {
|
mp_obj_t mp_generic_unary_op(mp_unary_op_t op, mp_obj_t o_in) {
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case MP_UNARY_OP_HASH: return MP_OBJ_NEW_SMALL_INT((mp_uint_t)o_in);
|
case MP_UNARY_OP_HASH: return MP_OBJ_NEW_SMALL_INT((mp_uint_t)o_in);
|
||||||
default: return MP_OBJ_NULL; // op not supported
|
default: return MP_OBJ_NULL; // op not supported
|
||||||
|
11
py/obj.h
11
py/obj.h
@ -30,6 +30,7 @@
|
|||||||
#include "py/misc.h"
|
#include "py/misc.h"
|
||||||
#include "py/qstr.h"
|
#include "py/qstr.h"
|
||||||
#include "py/mpprint.h"
|
#include "py/mpprint.h"
|
||||||
|
#include "py/runtime0.h"
|
||||||
|
|
||||||
// This is the definition of the opaque MicroPython object type.
|
// This is the definition of the opaque MicroPython object type.
|
||||||
// All concrete objects have an encoding within this type and the
|
// All concrete objects have an encoding within this type and the
|
||||||
@ -429,8 +430,8 @@ typedef struct _mp_obj_iter_buf_t {
|
|||||||
typedef void (*mp_print_fun_t)(const mp_print_t *print, mp_obj_t o, mp_print_kind_t kind);
|
typedef void (*mp_print_fun_t)(const mp_print_t *print, mp_obj_t o, mp_print_kind_t kind);
|
||||||
typedef mp_obj_t (*mp_make_new_fun_t)(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args);
|
typedef mp_obj_t (*mp_make_new_fun_t)(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args);
|
||||||
typedef mp_obj_t (*mp_call_fun_t)(mp_obj_t fun, size_t n_args, size_t n_kw, const mp_obj_t *args);
|
typedef mp_obj_t (*mp_call_fun_t)(mp_obj_t fun, size_t n_args, size_t n_kw, const mp_obj_t *args);
|
||||||
typedef mp_obj_t (*mp_unary_op_fun_t)(mp_uint_t op, mp_obj_t);
|
typedef mp_obj_t (*mp_unary_op_fun_t)(mp_unary_op_t op, mp_obj_t);
|
||||||
typedef mp_obj_t (*mp_binary_op_fun_t)(mp_uint_t op, mp_obj_t, mp_obj_t);
|
typedef mp_obj_t (*mp_binary_op_fun_t)(mp_binary_op_t op, mp_obj_t, mp_obj_t);
|
||||||
typedef void (*mp_attr_fun_t)(mp_obj_t self_in, qstr attr, mp_obj_t *dest);
|
typedef void (*mp_attr_fun_t)(mp_obj_t self_in, qstr attr, mp_obj_t *dest);
|
||||||
typedef mp_obj_t (*mp_subscr_fun_t)(mp_obj_t self_in, mp_obj_t index, mp_obj_t value);
|
typedef mp_obj_t (*mp_subscr_fun_t)(mp_obj_t self_in, mp_obj_t index, mp_obj_t value);
|
||||||
typedef mp_obj_t (*mp_getiter_fun_t)(mp_obj_t self_in, mp_obj_iter_buf_t *iter_buf);
|
typedef mp_obj_t (*mp_getiter_fun_t)(mp_obj_t self_in, mp_obj_iter_buf_t *iter_buf);
|
||||||
@ -694,7 +695,7 @@ mp_obj_t mp_obj_id(mp_obj_t o_in);
|
|||||||
mp_obj_t mp_obj_len(mp_obj_t o_in);
|
mp_obj_t mp_obj_len(mp_obj_t o_in);
|
||||||
mp_obj_t mp_obj_len_maybe(mp_obj_t o_in); // may return MP_OBJ_NULL
|
mp_obj_t mp_obj_len_maybe(mp_obj_t o_in); // may return MP_OBJ_NULL
|
||||||
mp_obj_t mp_obj_subscr(mp_obj_t base, mp_obj_t index, mp_obj_t val);
|
mp_obj_t mp_obj_subscr(mp_obj_t base, mp_obj_t index, mp_obj_t val);
|
||||||
mp_obj_t mp_generic_unary_op(mp_uint_t op, mp_obj_t o_in);
|
mp_obj_t mp_generic_unary_op(mp_unary_op_t op, mp_obj_t o_in);
|
||||||
|
|
||||||
// cell
|
// cell
|
||||||
mp_obj_t mp_obj_cell_get(mp_obj_t self_in);
|
mp_obj_t mp_obj_cell_get(mp_obj_t self_in);
|
||||||
@ -734,11 +735,11 @@ mp_int_t mp_float_hash(mp_float_t val);
|
|||||||
#else
|
#else
|
||||||
static inline mp_int_t mp_float_hash(mp_float_t val) { return (mp_int_t)val; }
|
static inline mp_int_t mp_float_hash(mp_float_t val) { return (mp_int_t)val; }
|
||||||
#endif
|
#endif
|
||||||
mp_obj_t mp_obj_float_binary_op(mp_uint_t op, mp_float_t lhs_val, mp_obj_t rhs); // can return MP_OBJ_NULL if op not supported
|
mp_obj_t mp_obj_float_binary_op(mp_binary_op_t op, mp_float_t lhs_val, mp_obj_t rhs); // can return MP_OBJ_NULL if op not supported
|
||||||
|
|
||||||
// complex
|
// complex
|
||||||
void mp_obj_complex_get(mp_obj_t self_in, mp_float_t *real, mp_float_t *imag);
|
void mp_obj_complex_get(mp_obj_t self_in, mp_float_t *real, mp_float_t *imag);
|
||||||
mp_obj_t mp_obj_complex_binary_op(mp_uint_t op, mp_float_t lhs_real, mp_float_t lhs_imag, mp_obj_t rhs_in); // can return MP_OBJ_NULL if op not supported
|
mp_obj_t mp_obj_complex_binary_op(mp_binary_op_t op, mp_float_t lhs_real, mp_float_t lhs_imag, mp_obj_t rhs_in); // can return MP_OBJ_NULL if op not supported
|
||||||
#else
|
#else
|
||||||
#define mp_obj_is_float(o) (false)
|
#define mp_obj_is_float(o) (false)
|
||||||
#endif
|
#endif
|
||||||
|
@ -231,7 +231,7 @@ STATIC mp_obj_t memoryview_make_new(const mp_obj_type_t *type_in, size_t n_args,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
STATIC mp_obj_t array_unary_op(mp_uint_t op, mp_obj_t o_in) {
|
STATIC mp_obj_t array_unary_op(mp_unary_op_t op, mp_obj_t o_in) {
|
||||||
mp_obj_array_t *o = MP_OBJ_TO_PTR(o_in);
|
mp_obj_array_t *o = MP_OBJ_TO_PTR(o_in);
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case MP_UNARY_OP_BOOL: return mp_obj_new_bool(o->len != 0);
|
case MP_UNARY_OP_BOOL: return mp_obj_new_bool(o->len != 0);
|
||||||
@ -240,7 +240,7 @@ STATIC mp_obj_t array_unary_op(mp_uint_t op, mp_obj_t o_in) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC mp_obj_t array_binary_op(mp_uint_t op, mp_obj_t lhs_in, mp_obj_t rhs_in) {
|
STATIC mp_obj_t array_binary_op(mp_binary_op_t op, mp_obj_t lhs_in, mp_obj_t rhs_in) {
|
||||||
mp_obj_array_t *lhs = MP_OBJ_TO_PTR(lhs_in);
|
mp_obj_array_t *lhs = MP_OBJ_TO_PTR(lhs_in);
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case MP_BINARY_OP_ADD: {
|
case MP_BINARY_OP_ADD: {
|
||||||
|
@ -63,7 +63,7 @@ STATIC mp_obj_t bool_make_new(const mp_obj_type_t *type_in, size_t n_args, size_
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC mp_obj_t bool_unary_op(mp_uint_t op, mp_obj_t o_in) {
|
STATIC mp_obj_t bool_unary_op(mp_unary_op_t op, mp_obj_t o_in) {
|
||||||
if (op == MP_UNARY_OP_LEN) {
|
if (op == MP_UNARY_OP_LEN) {
|
||||||
return MP_OBJ_NULL;
|
return MP_OBJ_NULL;
|
||||||
}
|
}
|
||||||
@ -71,7 +71,7 @@ STATIC mp_obj_t bool_unary_op(mp_uint_t op, mp_obj_t o_in) {
|
|||||||
return mp_unary_op(op, MP_OBJ_NEW_SMALL_INT(self->value));
|
return mp_unary_op(op, MP_OBJ_NEW_SMALL_INT(self->value));
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC mp_obj_t bool_binary_op(mp_uint_t op, mp_obj_t lhs_in, mp_obj_t rhs_in) {
|
STATIC mp_obj_t bool_binary_op(mp_binary_op_t op, mp_obj_t lhs_in, mp_obj_t rhs_in) {
|
||||||
mp_obj_bool_t *self = MP_OBJ_TO_PTR(lhs_in);
|
mp_obj_bool_t *self = MP_OBJ_TO_PTR(lhs_in);
|
||||||
return mp_binary_op(op, MP_OBJ_NEW_SMALL_INT(self->value), rhs_in);
|
return mp_binary_op(op, MP_OBJ_NEW_SMALL_INT(self->value), rhs_in);
|
||||||
}
|
}
|
||||||
|
@ -117,7 +117,7 @@ STATIC mp_obj_t complex_make_new(const mp_obj_type_t *type_in, size_t n_args, si
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC mp_obj_t complex_unary_op(mp_uint_t op, mp_obj_t o_in) {
|
STATIC mp_obj_t complex_unary_op(mp_unary_op_t op, mp_obj_t o_in) {
|
||||||
mp_obj_complex_t *o = MP_OBJ_TO_PTR(o_in);
|
mp_obj_complex_t *o = MP_OBJ_TO_PTR(o_in);
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case MP_UNARY_OP_BOOL: return mp_obj_new_bool(o->real != 0 || o->imag != 0);
|
case MP_UNARY_OP_BOOL: return mp_obj_new_bool(o->real != 0 || o->imag != 0);
|
||||||
@ -128,7 +128,7 @@ STATIC mp_obj_t complex_unary_op(mp_uint_t op, mp_obj_t o_in) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC mp_obj_t complex_binary_op(mp_uint_t op, mp_obj_t lhs_in, mp_obj_t rhs_in) {
|
STATIC mp_obj_t complex_binary_op(mp_binary_op_t op, mp_obj_t lhs_in, mp_obj_t rhs_in) {
|
||||||
mp_obj_complex_t *lhs = MP_OBJ_TO_PTR(lhs_in);
|
mp_obj_complex_t *lhs = MP_OBJ_TO_PTR(lhs_in);
|
||||||
return mp_obj_complex_binary_op(op, lhs->real, lhs->imag, rhs_in);
|
return mp_obj_complex_binary_op(op, lhs->real, lhs->imag, rhs_in);
|
||||||
}
|
}
|
||||||
@ -171,7 +171,7 @@ void mp_obj_complex_get(mp_obj_t self_in, mp_float_t *real, mp_float_t *imag) {
|
|||||||
*imag = self->imag;
|
*imag = self->imag;
|
||||||
}
|
}
|
||||||
|
|
||||||
mp_obj_t mp_obj_complex_binary_op(mp_uint_t op, mp_float_t lhs_real, mp_float_t lhs_imag, mp_obj_t rhs_in) {
|
mp_obj_t mp_obj_complex_binary_op(mp_binary_op_t op, mp_float_t lhs_real, mp_float_t lhs_imag, mp_obj_t rhs_in) {
|
||||||
mp_float_t rhs_real, rhs_imag;
|
mp_float_t rhs_real, rhs_imag;
|
||||||
mp_obj_get_complex(rhs_in, &rhs_real, &rhs_imag); // can be any type, this function will convert to float (if possible)
|
mp_obj_get_complex(rhs_in, &rhs_real, &rhs_imag); // can be any type, this function will convert to float (if possible)
|
||||||
switch (op) {
|
switch (op) {
|
||||||
|
@ -100,7 +100,7 @@ STATIC mp_obj_t dict_make_new(const mp_obj_type_t *type, size_t n_args, size_t n
|
|||||||
return dict_out;
|
return dict_out;
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC mp_obj_t dict_unary_op(mp_uint_t op, mp_obj_t self_in) {
|
STATIC mp_obj_t dict_unary_op(mp_unary_op_t op, mp_obj_t self_in) {
|
||||||
mp_obj_dict_t *self = MP_OBJ_TO_PTR(self_in);
|
mp_obj_dict_t *self = MP_OBJ_TO_PTR(self_in);
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case MP_UNARY_OP_BOOL: return mp_obj_new_bool(self->map.used != 0);
|
case MP_UNARY_OP_BOOL: return mp_obj_new_bool(self->map.used != 0);
|
||||||
@ -115,7 +115,7 @@ STATIC mp_obj_t dict_unary_op(mp_uint_t op, mp_obj_t self_in) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC mp_obj_t dict_binary_op(mp_uint_t op, mp_obj_t lhs_in, mp_obj_t rhs_in) {
|
STATIC mp_obj_t dict_binary_op(mp_binary_op_t op, mp_obj_t lhs_in, mp_obj_t rhs_in) {
|
||||||
mp_obj_dict_t *o = MP_OBJ_TO_PTR(lhs_in);
|
mp_obj_dict_t *o = MP_OBJ_TO_PTR(lhs_in);
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case MP_BINARY_OP_IN: {
|
case MP_BINARY_OP_IN: {
|
||||||
@ -482,7 +482,7 @@ STATIC void dict_view_print(const mp_print_t *print, mp_obj_t self_in, mp_print_
|
|||||||
mp_print_str(print, "])");
|
mp_print_str(print, "])");
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC mp_obj_t dict_view_binary_op(mp_uint_t op, mp_obj_t lhs_in, mp_obj_t rhs_in) {
|
STATIC mp_obj_t dict_view_binary_op(mp_binary_op_t op, mp_obj_t lhs_in, mp_obj_t rhs_in) {
|
||||||
// only supported for the 'keys' kind until sets and dicts are refactored
|
// only supported for the 'keys' kind until sets and dicts are refactored
|
||||||
mp_obj_dict_view_t *o = MP_OBJ_TO_PTR(lhs_in);
|
mp_obj_dict_view_t *o = MP_OBJ_TO_PTR(lhs_in);
|
||||||
if (o->kind != MP_DICT_VIEW_KEYS) {
|
if (o->kind != MP_DICT_VIEW_KEYS) {
|
||||||
|
@ -155,7 +155,7 @@ STATIC mp_obj_t float_make_new(const mp_obj_type_t *type_in, size_t n_args, size
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC mp_obj_t float_unary_op(mp_uint_t op, mp_obj_t o_in) {
|
STATIC mp_obj_t float_unary_op(mp_unary_op_t op, mp_obj_t o_in) {
|
||||||
mp_float_t val = mp_obj_float_get(o_in);
|
mp_float_t val = mp_obj_float_get(o_in);
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case MP_UNARY_OP_BOOL: return mp_obj_new_bool(val != 0);
|
case MP_UNARY_OP_BOOL: return mp_obj_new_bool(val != 0);
|
||||||
@ -166,7 +166,7 @@ STATIC mp_obj_t float_unary_op(mp_uint_t op, mp_obj_t o_in) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC mp_obj_t float_binary_op(mp_uint_t op, mp_obj_t lhs_in, mp_obj_t rhs_in) {
|
STATIC mp_obj_t float_binary_op(mp_binary_op_t op, mp_obj_t lhs_in, mp_obj_t rhs_in) {
|
||||||
mp_float_t lhs_val = mp_obj_float_get(lhs_in);
|
mp_float_t lhs_val = mp_obj_float_get(lhs_in);
|
||||||
#if MICROPY_PY_BUILTINS_COMPLEX
|
#if MICROPY_PY_BUILTINS_COMPLEX
|
||||||
if (MP_OBJ_IS_TYPE(rhs_in, &mp_type_complex)) {
|
if (MP_OBJ_IS_TYPE(rhs_in, &mp_type_complex)) {
|
||||||
@ -239,7 +239,7 @@ STATIC void mp_obj_float_divmod(mp_float_t *x, mp_float_t *y) {
|
|||||||
*y = mod;
|
*y = mod;
|
||||||
}
|
}
|
||||||
|
|
||||||
mp_obj_t mp_obj_float_binary_op(mp_uint_t op, mp_float_t lhs_val, mp_obj_t rhs_in) {
|
mp_obj_t mp_obj_float_binary_op(mp_binary_op_t op, mp_float_t lhs_val, mp_obj_t rhs_in) {
|
||||||
mp_float_t rhs_val = mp_obj_get_float(rhs_in); // can be any type, this function will convert to float (if possible)
|
mp_float_t rhs_val = mp_obj_get_float(rhs_in); // can be any type, this function will convert to float (if possible)
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case MP_BINARY_OP_ADD:
|
case MP_BINARY_OP_ADD:
|
||||||
|
@ -325,12 +325,12 @@ mp_obj_t mp_obj_int_abs(mp_obj_t self_in) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// This is called for operations on SMALL_INT that are not handled by mp_unary_op
|
// This is called for operations on SMALL_INT that are not handled by mp_unary_op
|
||||||
mp_obj_t mp_obj_int_unary_op(mp_uint_t op, mp_obj_t o_in) {
|
mp_obj_t mp_obj_int_unary_op(mp_unary_op_t op, mp_obj_t o_in) {
|
||||||
return MP_OBJ_NULL; // op not supported
|
return MP_OBJ_NULL; // op not supported
|
||||||
}
|
}
|
||||||
|
|
||||||
// This is called for operations on SMALL_INT that are not handled by mp_binary_op
|
// This is called for operations on SMALL_INT that are not handled by mp_binary_op
|
||||||
mp_obj_t mp_obj_int_binary_op(mp_uint_t op, mp_obj_t lhs_in, mp_obj_t rhs_in) {
|
mp_obj_t mp_obj_int_binary_op(mp_binary_op_t op, mp_obj_t lhs_in, mp_obj_t rhs_in) {
|
||||||
return mp_obj_int_binary_op_extra_cases(op, lhs_in, rhs_in);
|
return mp_obj_int_binary_op_extra_cases(op, lhs_in, rhs_in);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -382,7 +382,7 @@ mp_int_t mp_obj_int_get_checked(mp_const_obj_t self_in) {
|
|||||||
|
|
||||||
// This dispatcher function is expected to be independent of the implementation of long int
|
// This dispatcher function is expected to be independent of the implementation of long int
|
||||||
// It handles the extra cases for integer-like arithmetic
|
// It handles the extra cases for integer-like arithmetic
|
||||||
mp_obj_t mp_obj_int_binary_op_extra_cases(mp_uint_t op, mp_obj_t lhs_in, mp_obj_t rhs_in) {
|
mp_obj_t mp_obj_int_binary_op_extra_cases(mp_binary_op_t op, mp_obj_t lhs_in, mp_obj_t rhs_in) {
|
||||||
if (rhs_in == mp_const_false) {
|
if (rhs_in == mp_const_false) {
|
||||||
// false acts as 0
|
// false acts as 0
|
||||||
return mp_binary_op(op, lhs_in, MP_OBJ_NEW_SMALL_INT(0));
|
return mp_binary_op(op, lhs_in, MP_OBJ_NEW_SMALL_INT(0));
|
||||||
|
@ -58,9 +58,9 @@ mp_obj_t mp_obj_int_from_bytes_impl(bool big_endian, size_t len, const byte *buf
|
|||||||
void mp_obj_int_to_bytes_impl(mp_obj_t self_in, bool big_endian, size_t len, byte *buf);
|
void mp_obj_int_to_bytes_impl(mp_obj_t self_in, bool big_endian, size_t len, byte *buf);
|
||||||
int mp_obj_int_sign(mp_obj_t self_in);
|
int mp_obj_int_sign(mp_obj_t self_in);
|
||||||
mp_obj_t mp_obj_int_abs(mp_obj_t self_in);
|
mp_obj_t mp_obj_int_abs(mp_obj_t self_in);
|
||||||
mp_obj_t mp_obj_int_unary_op(mp_uint_t op, mp_obj_t o_in);
|
mp_obj_t mp_obj_int_unary_op(mp_unary_op_t op, mp_obj_t o_in);
|
||||||
mp_obj_t mp_obj_int_binary_op(mp_uint_t op, mp_obj_t lhs_in, mp_obj_t rhs_in);
|
mp_obj_t mp_obj_int_binary_op(mp_binary_op_t op, mp_obj_t lhs_in, mp_obj_t rhs_in);
|
||||||
mp_obj_t mp_obj_int_binary_op_extra_cases(mp_uint_t op, mp_obj_t lhs_in, mp_obj_t rhs_in);
|
mp_obj_t mp_obj_int_binary_op_extra_cases(mp_binary_op_t op, mp_obj_t lhs_in, mp_obj_t rhs_in);
|
||||||
mp_obj_t mp_obj_int_pow3(mp_obj_t base, mp_obj_t exponent, mp_obj_t modulus);
|
mp_obj_t mp_obj_int_pow3(mp_obj_t base, mp_obj_t exponent, mp_obj_t modulus);
|
||||||
|
|
||||||
#endif // MICROPY_INCLUDED_PY_OBJINT_H
|
#endif // MICROPY_INCLUDED_PY_OBJINT_H
|
||||||
|
@ -118,7 +118,7 @@ mp_obj_t mp_obj_int_abs(mp_obj_t self_in) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mp_obj_t mp_obj_int_unary_op(mp_uint_t op, mp_obj_t o_in) {
|
mp_obj_t mp_obj_int_unary_op(mp_unary_op_t op, mp_obj_t o_in) {
|
||||||
mp_obj_int_t *o = o_in;
|
mp_obj_int_t *o = o_in;
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case MP_UNARY_OP_BOOL: return mp_obj_new_bool(o->val != 0);
|
case MP_UNARY_OP_BOOL: return mp_obj_new_bool(o->val != 0);
|
||||||
@ -134,7 +134,7 @@ mp_obj_t mp_obj_int_unary_op(mp_uint_t op, mp_obj_t o_in) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mp_obj_t mp_obj_int_binary_op(mp_uint_t op, mp_obj_t lhs_in, mp_obj_t rhs_in) {
|
mp_obj_t mp_obj_int_binary_op(mp_binary_op_t op, mp_obj_t lhs_in, mp_obj_t rhs_in) {
|
||||||
long long lhs_val;
|
long long lhs_val;
|
||||||
long long rhs_val;
|
long long rhs_val;
|
||||||
|
|
||||||
|
@ -162,7 +162,7 @@ mp_obj_t mp_obj_int_abs(mp_obj_t self_in) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mp_obj_t mp_obj_int_unary_op(mp_uint_t op, mp_obj_t o_in) {
|
mp_obj_t mp_obj_int_unary_op(mp_unary_op_t op, mp_obj_t o_in) {
|
||||||
mp_obj_int_t *o = MP_OBJ_TO_PTR(o_in);
|
mp_obj_int_t *o = MP_OBJ_TO_PTR(o_in);
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case MP_UNARY_OP_BOOL: return mp_obj_new_bool(!mpz_is_zero(&o->mpz));
|
case MP_UNARY_OP_BOOL: return mp_obj_new_bool(!mpz_is_zero(&o->mpz));
|
||||||
@ -174,7 +174,7 @@ mp_obj_t mp_obj_int_unary_op(mp_uint_t op, mp_obj_t o_in) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mp_obj_t mp_obj_int_binary_op(mp_uint_t op, mp_obj_t lhs_in, mp_obj_t rhs_in) {
|
mp_obj_t mp_obj_int_binary_op(mp_binary_op_t op, mp_obj_t lhs_in, mp_obj_t rhs_in) {
|
||||||
const mpz_t *zlhs;
|
const mpz_t *zlhs;
|
||||||
const mpz_t *zrhs;
|
const mpz_t *zrhs;
|
||||||
mpz_t z_int;
|
mpz_t z_int;
|
||||||
|
@ -99,7 +99,7 @@ STATIC bool list_cmp_helper(mp_uint_t op, mp_obj_t self_in, mp_obj_t another_in)
|
|||||||
return mp_seq_cmp_objs(op, self->items, self->len, another->items, another->len);
|
return mp_seq_cmp_objs(op, self->items, self->len, another->items, another->len);
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC mp_obj_t list_unary_op(mp_uint_t op, mp_obj_t self_in) {
|
STATIC mp_obj_t list_unary_op(mp_unary_op_t op, mp_obj_t self_in) {
|
||||||
mp_obj_list_t *self = MP_OBJ_TO_PTR(self_in);
|
mp_obj_list_t *self = MP_OBJ_TO_PTR(self_in);
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case MP_UNARY_OP_BOOL: return mp_obj_new_bool(self->len != 0);
|
case MP_UNARY_OP_BOOL: return mp_obj_new_bool(self->len != 0);
|
||||||
@ -114,7 +114,7 @@ STATIC mp_obj_t list_unary_op(mp_uint_t op, mp_obj_t self_in) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC mp_obj_t list_binary_op(mp_uint_t op, mp_obj_t lhs, mp_obj_t rhs) {
|
STATIC mp_obj_t list_binary_op(mp_binary_op_t op, mp_obj_t lhs, mp_obj_t rhs) {
|
||||||
mp_obj_list_t *o = MP_OBJ_TO_PTR(lhs);
|
mp_obj_list_t *o = MP_OBJ_TO_PTR(lhs);
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case MP_BINARY_OP_ADD: {
|
case MP_BINARY_OP_ADD: {
|
||||||
|
@ -130,7 +130,7 @@ STATIC mp_int_t range_len(mp_obj_range_t *self) {
|
|||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC mp_obj_t range_unary_op(mp_uint_t op, mp_obj_t self_in) {
|
STATIC mp_obj_t range_unary_op(mp_unary_op_t op, mp_obj_t self_in) {
|
||||||
mp_obj_range_t *self = MP_OBJ_TO_PTR(self_in);
|
mp_obj_range_t *self = MP_OBJ_TO_PTR(self_in);
|
||||||
mp_int_t len = range_len(self);
|
mp_int_t len = range_len(self);
|
||||||
switch (op) {
|
switch (op) {
|
||||||
|
@ -455,7 +455,7 @@ STATIC mp_obj_t set_union(mp_obj_t self_in, mp_obj_t other_in) {
|
|||||||
}
|
}
|
||||||
STATIC MP_DEFINE_CONST_FUN_OBJ_2(set_union_obj, set_union);
|
STATIC MP_DEFINE_CONST_FUN_OBJ_2(set_union_obj, set_union);
|
||||||
|
|
||||||
STATIC mp_obj_t set_unary_op(mp_uint_t op, mp_obj_t self_in) {
|
STATIC mp_obj_t set_unary_op(mp_unary_op_t op, mp_obj_t self_in) {
|
||||||
mp_obj_set_t *self = MP_OBJ_TO_PTR(self_in);
|
mp_obj_set_t *self = MP_OBJ_TO_PTR(self_in);
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case MP_UNARY_OP_BOOL: return mp_obj_new_bool(self->set.used != 0);
|
case MP_UNARY_OP_BOOL: return mp_obj_new_bool(self->set.used != 0);
|
||||||
@ -480,7 +480,7 @@ STATIC mp_obj_t set_unary_op(mp_uint_t op, mp_obj_t self_in) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC mp_obj_t set_binary_op(mp_uint_t op, mp_obj_t lhs, mp_obj_t rhs) {
|
STATIC mp_obj_t set_binary_op(mp_binary_op_t op, mp_obj_t lhs, mp_obj_t rhs) {
|
||||||
mp_obj_t args[] = {lhs, rhs};
|
mp_obj_t args[] = {lhs, rhs};
|
||||||
#if MICROPY_PY_BUILTINS_FROZENSET
|
#if MICROPY_PY_BUILTINS_FROZENSET
|
||||||
bool update = MP_OBJ_IS_TYPE(lhs, &mp_type_set);
|
bool update = MP_OBJ_IS_TYPE(lhs, &mp_type_set);
|
||||||
|
@ -280,7 +280,7 @@ const byte *find_subbytes(const byte *haystack, size_t hlen, const byte *needle,
|
|||||||
// Note: this function is used to check if an object is a str or bytes, which
|
// Note: this function is used to check if an object is a str or bytes, which
|
||||||
// works because both those types use it as their binary_op method. Revisit
|
// works because both those types use it as their binary_op method. Revisit
|
||||||
// MP_OBJ_IS_STR_OR_BYTES if this fact changes.
|
// MP_OBJ_IS_STR_OR_BYTES if this fact changes.
|
||||||
mp_obj_t mp_obj_str_binary_op(mp_uint_t op, mp_obj_t lhs_in, mp_obj_t rhs_in) {
|
mp_obj_t mp_obj_str_binary_op(mp_binary_op_t op, mp_obj_t lhs_in, mp_obj_t rhs_in) {
|
||||||
// check for modulo
|
// check for modulo
|
||||||
if (op == MP_BINARY_OP_MODULO) {
|
if (op == MP_BINARY_OP_MODULO) {
|
||||||
mp_obj_t *args = &rhs_in;
|
mp_obj_t *args = &rhs_in;
|
||||||
@ -380,10 +380,11 @@ mp_obj_t mp_obj_str_binary_op(mp_uint_t op, mp_obj_t lhs_in, mp_obj_t rhs_in) {
|
|||||||
case MP_BINARY_OP_MORE:
|
case MP_BINARY_OP_MORE:
|
||||||
case MP_BINARY_OP_MORE_EQUAL:
|
case MP_BINARY_OP_MORE_EQUAL:
|
||||||
return mp_obj_new_bool(mp_seq_cmp_bytes(op, lhs_data, lhs_len, rhs_data, rhs_len));
|
return mp_obj_new_bool(mp_seq_cmp_bytes(op, lhs_data, lhs_len, rhs_data, rhs_len));
|
||||||
}
|
|
||||||
|
|
||||||
|
default:
|
||||||
return MP_OBJ_NULL; // op not supported
|
return MP_OBJ_NULL; // op not supported
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#if !MICROPY_PY_BUILTINS_STR_UNICODE
|
#if !MICROPY_PY_BUILTINS_STR_UNICODE
|
||||||
// objstrunicode defines own version
|
// objstrunicode defines own version
|
||||||
|
@ -67,7 +67,7 @@ mp_obj_t mp_obj_str_format(size_t n_args, const mp_obj_t *args, mp_map_t *kwargs
|
|||||||
mp_obj_t mp_obj_str_split(size_t n_args, const mp_obj_t *args);
|
mp_obj_t mp_obj_str_split(size_t n_args, const mp_obj_t *args);
|
||||||
mp_obj_t mp_obj_new_str_of_type(const mp_obj_type_t *type, const byte* data, size_t len);
|
mp_obj_t mp_obj_new_str_of_type(const mp_obj_type_t *type, const byte* data, size_t len);
|
||||||
|
|
||||||
mp_obj_t mp_obj_str_binary_op(mp_uint_t op, mp_obj_t lhs_in, mp_obj_t rhs_in);
|
mp_obj_t mp_obj_str_binary_op(mp_binary_op_t op, mp_obj_t lhs_in, mp_obj_t rhs_in);
|
||||||
mp_int_t mp_obj_str_get_buffer(mp_obj_t self_in, mp_buffer_info_t *bufinfo, mp_uint_t flags);
|
mp_int_t mp_obj_str_get_buffer(mp_obj_t self_in, mp_buffer_info_t *bufinfo, mp_uint_t flags);
|
||||||
|
|
||||||
const byte *str_index_to_ptr(const mp_obj_type_t *type, const byte *self_data, size_t self_len,
|
const byte *str_index_to_ptr(const mp_obj_type_t *type, const byte *self_data, size_t self_len,
|
||||||
|
@ -100,7 +100,7 @@ STATIC void uni_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC mp_obj_t uni_unary_op(mp_uint_t op, mp_obj_t self_in) {
|
STATIC mp_obj_t uni_unary_op(mp_unary_op_t op, mp_obj_t self_in) {
|
||||||
GET_STR_DATA_LEN(self_in, str_data, str_len);
|
GET_STR_DATA_LEN(self_in, str_data, str_len);
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case MP_UNARY_OP_BOOL:
|
case MP_UNARY_OP_BOOL:
|
||||||
|
@ -118,7 +118,7 @@ STATIC bool tuple_cmp_helper(mp_uint_t op, mp_obj_t self_in, mp_obj_t another_in
|
|||||||
return mp_seq_cmp_objs(op, self->items, self->len, another->items, another->len);
|
return mp_seq_cmp_objs(op, self->items, self->len, another->items, another->len);
|
||||||
}
|
}
|
||||||
|
|
||||||
mp_obj_t mp_obj_tuple_unary_op(mp_uint_t op, mp_obj_t self_in) {
|
mp_obj_t mp_obj_tuple_unary_op(mp_unary_op_t op, mp_obj_t self_in) {
|
||||||
mp_obj_tuple_t *self = MP_OBJ_TO_PTR(self_in);
|
mp_obj_tuple_t *self = MP_OBJ_TO_PTR(self_in);
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case MP_UNARY_OP_BOOL: return mp_obj_new_bool(self->len != 0);
|
case MP_UNARY_OP_BOOL: return mp_obj_new_bool(self->len != 0);
|
||||||
@ -135,7 +135,7 @@ mp_obj_t mp_obj_tuple_unary_op(mp_uint_t op, mp_obj_t self_in) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mp_obj_t mp_obj_tuple_binary_op(mp_uint_t op, mp_obj_t lhs, mp_obj_t rhs) {
|
mp_obj_t mp_obj_tuple_binary_op(mp_binary_op_t op, mp_obj_t lhs, mp_obj_t rhs) {
|
||||||
mp_obj_tuple_t *o = MP_OBJ_TO_PTR(lhs);
|
mp_obj_tuple_t *o = MP_OBJ_TO_PTR(lhs);
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case MP_BINARY_OP_ADD:
|
case MP_BINARY_OP_ADD:
|
||||||
|
@ -41,8 +41,8 @@ typedef struct _mp_rom_obj_tuple_t {
|
|||||||
} mp_rom_obj_tuple_t;
|
} mp_rom_obj_tuple_t;
|
||||||
|
|
||||||
void mp_obj_tuple_print(const mp_print_t *print, mp_obj_t o_in, mp_print_kind_t kind);
|
void mp_obj_tuple_print(const mp_print_t *print, mp_obj_t o_in, mp_print_kind_t kind);
|
||||||
mp_obj_t mp_obj_tuple_unary_op(mp_uint_t op, mp_obj_t self_in);
|
mp_obj_t mp_obj_tuple_unary_op(mp_unary_op_t op, mp_obj_t self_in);
|
||||||
mp_obj_t mp_obj_tuple_binary_op(mp_uint_t op, mp_obj_t lhs, mp_obj_t rhs);
|
mp_obj_t mp_obj_tuple_binary_op(mp_binary_op_t op, mp_obj_t lhs, mp_obj_t rhs);
|
||||||
mp_obj_t mp_obj_tuple_subscr(mp_obj_t base, mp_obj_t index, mp_obj_t value);
|
mp_obj_t mp_obj_tuple_subscr(mp_obj_t base, mp_obj_t index, mp_obj_t value);
|
||||||
mp_obj_t mp_obj_tuple_getiter(mp_obj_t o_in, mp_obj_iter_buf_t *iter_buf);
|
mp_obj_t mp_obj_tuple_getiter(mp_obj_t o_in, mp_obj_iter_buf_t *iter_buf);
|
||||||
|
|
||||||
|
@ -345,7 +345,7 @@ const qstr mp_unary_op_method_name[] = {
|
|||||||
[MP_UNARY_OP_NOT] = MP_QSTR_, // don't need to implement this, used to make sure array has full size
|
[MP_UNARY_OP_NOT] = MP_QSTR_, // don't need to implement this, used to make sure array has full size
|
||||||
};
|
};
|
||||||
|
|
||||||
STATIC mp_obj_t instance_unary_op(mp_uint_t op, mp_obj_t self_in) {
|
STATIC mp_obj_t instance_unary_op(mp_unary_op_t op, mp_obj_t self_in) {
|
||||||
mp_obj_instance_t *self = MP_OBJ_TO_PTR(self_in);
|
mp_obj_instance_t *self = MP_OBJ_TO_PTR(self_in);
|
||||||
|
|
||||||
#if MICROPY_PY_SYS_GETSIZEOF
|
#if MICROPY_PY_SYS_GETSIZEOF
|
||||||
@ -452,7 +452,7 @@ const qstr mp_binary_op_method_name[] = {
|
|||||||
[MP_BINARY_OP_EXCEPTION_MATCH] = MP_QSTR_, // not implemented, used to make sure array has full size
|
[MP_BINARY_OP_EXCEPTION_MATCH] = MP_QSTR_, // not implemented, used to make sure array has full size
|
||||||
};
|
};
|
||||||
|
|
||||||
STATIC mp_obj_t instance_binary_op(mp_uint_t op, mp_obj_t lhs_in, mp_obj_t rhs_in) {
|
STATIC mp_obj_t instance_binary_op(mp_binary_op_t op, mp_obj_t lhs_in, mp_obj_t rhs_in) {
|
||||||
// Note: For ducktyping, CPython does not look in the instance members or use
|
// Note: For ducktyping, CPython does not look in the instance members or use
|
||||||
// __getattr__ or __getattribute__. It only looks in the class dictionary.
|
// __getattr__ or __getattribute__. It only looks in the class dictionary.
|
||||||
mp_obj_instance_t *lhs = MP_OBJ_TO_PTR(lhs_in);
|
mp_obj_instance_t *lhs = MP_OBJ_TO_PTR(lhs_in);
|
||||||
|
@ -209,7 +209,7 @@ void mp_delete_global(qstr qst) {
|
|||||||
mp_obj_dict_delete(MP_OBJ_FROM_PTR(mp_globals_get()), MP_OBJ_NEW_QSTR(qst));
|
mp_obj_dict_delete(MP_OBJ_FROM_PTR(mp_globals_get()), MP_OBJ_NEW_QSTR(qst));
|
||||||
}
|
}
|
||||||
|
|
||||||
mp_obj_t mp_unary_op(mp_uint_t op, mp_obj_t arg) {
|
mp_obj_t mp_unary_op(mp_unary_op_t op, mp_obj_t arg) {
|
||||||
DEBUG_OP_printf("unary " UINT_FMT " %p\n", op, arg);
|
DEBUG_OP_printf("unary " UINT_FMT " %p\n", op, arg);
|
||||||
|
|
||||||
if (op == MP_UNARY_OP_NOT) {
|
if (op == MP_UNARY_OP_NOT) {
|
||||||
@ -261,7 +261,7 @@ mp_obj_t mp_unary_op(mp_uint_t op, mp_obj_t arg) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mp_obj_t mp_binary_op(mp_uint_t op, mp_obj_t lhs, mp_obj_t rhs) {
|
mp_obj_t mp_binary_op(mp_binary_op_t op, mp_obj_t lhs, mp_obj_t rhs) {
|
||||||
DEBUG_OP_printf("binary " UINT_FMT " %p %p\n", op, lhs, rhs);
|
DEBUG_OP_printf("binary " UINT_FMT " %p %p\n", op, lhs, rhs);
|
||||||
|
|
||||||
// TODO correctly distinguish inplace operators for mutable objects
|
// TODO correctly distinguish inplace operators for mutable objects
|
||||||
|
@ -96,8 +96,8 @@ void mp_store_global(qstr qst, mp_obj_t obj);
|
|||||||
void mp_delete_name(qstr qst);
|
void mp_delete_name(qstr qst);
|
||||||
void mp_delete_global(qstr qst);
|
void mp_delete_global(qstr qst);
|
||||||
|
|
||||||
mp_obj_t mp_unary_op(mp_uint_t op, mp_obj_t arg);
|
mp_obj_t mp_unary_op(mp_unary_op_t op, mp_obj_t arg);
|
||||||
mp_obj_t mp_binary_op(mp_uint_t op, mp_obj_t lhs, mp_obj_t rhs);
|
mp_obj_t mp_binary_op(mp_binary_op_t op, mp_obj_t lhs, mp_obj_t rhs);
|
||||||
|
|
||||||
mp_obj_t mp_call_function_0(mp_obj_t fun);
|
mp_obj_t mp_call_function_0(mp_obj_t fun);
|
||||||
mp_obj_t mp_call_function_1(mp_obj_t fun, mp_obj_t arg);
|
mp_obj_t mp_call_function_1(mp_obj_t fun, mp_obj_t arg);
|
||||||
|
@ -293,7 +293,7 @@ STATIC mp_obj_t jobject_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value)
|
|||||||
return MP_OBJ_NULL;
|
return MP_OBJ_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC mp_obj_t jobject_unary_op(mp_uint_t op, mp_obj_t self_in) {
|
STATIC mp_obj_t jobject_unary_op(mp_unary_op_t op, mp_obj_t self_in) {
|
||||||
mp_obj_jobject_t *self = self_in;
|
mp_obj_jobject_t *self = self_in;
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case MP_UNARY_OP_BOOL:
|
case MP_UNARY_OP_BOOL:
|
||||||
|
Loading…
Reference in New Issue
Block a user