diff options
Diffstat (limited to 'py/obj.h')
-rw-r--r-- | py/obj.h | 33 |
1 files changed, 16 insertions, 17 deletions
@@ -52,8 +52,7 @@ typedef struct _mp_obj_base_t mp_obj_base_t; // These fake objects are used to indicate certain things in arguments or return // values, and should only be used when explicitly allowed. // -// - MP_OBJ_NULL : used to indicate the absence of an object. -// - MP_OBJ_NOT_SUPPORTED : a return value that indicates an unsupported operation. +// - MP_OBJ_NULL : used to indicate the absence of an object, or unsupported operation. // - MP_OBJ_STOP_ITERATION : used instead of throwing a StopIteration, for efficiency. // - MP_OBJ_SENTINEL : used for various internal purposes where one needs // an object which is unique from all other objects, including MP_OBJ_NULL. @@ -63,14 +62,12 @@ typedef struct _mp_obj_base_t mp_obj_base_t; #if NDEBUG #define MP_OBJ_NULL ((mp_obj_t)0) -#define MP_OBJ_NOT_SUPPORTED ((mp_obj_t)0) #define MP_OBJ_STOP_ITERATION ((mp_obj_t)0) #define MP_OBJ_SENTINEL ((mp_obj_t)4) #else #define MP_OBJ_NULL ((mp_obj_t)0) -#define MP_OBJ_NOT_SUPPORTED ((mp_obj_t)4) -#define MP_OBJ_STOP_ITERATION ((mp_obj_t)8) -#define MP_OBJ_SENTINEL ((mp_obj_t)12) +#define MP_OBJ_STOP_ITERATION ((mp_obj_t)4) +#define MP_OBJ_SENTINEL ((mp_obj_t)8) #endif // These macros check for small int, qstr or object, and access small int and qstr values @@ -158,7 +155,7 @@ typedef enum _mp_map_lookup_kind_t { MP_MAP_LOOKUP_REMOVE_IF_FOUND, // 2 } mp_map_lookup_kind_t; -static inline bool MP_MAP_SLOT_IS_FILLED(mp_map_t *map, machine_uint_t pos) { return ((map)->table[pos].key != MP_OBJ_NULL && (map)->table[pos].key != MP_OBJ_SENTINEL); } +static inline bool MP_MAP_SLOT_IS_FILLED(const mp_map_t *map, machine_uint_t pos) { return ((map)->table[pos].key != MP_OBJ_NULL && (map)->table[pos].key != MP_OBJ_SENTINEL); } void mp_map_init(mp_map_t *map, int n); void mp_map_init_fixed_table(mp_map_t *map, int n, const mp_obj_t *table); @@ -177,7 +174,7 @@ typedef struct _mp_set_t { mp_obj_t *table; } mp_set_t; -static inline bool MP_SET_SLOT_IS_FILLED(mp_set_t *set, machine_uint_t pos) { return ((set)->table[pos] != MP_OBJ_NULL && (set)->table[pos] != MP_OBJ_SENTINEL); } +static inline bool MP_SET_SLOT_IS_FILLED(const mp_set_t *set, machine_uint_t pos) { return ((set)->table[pos] != MP_OBJ_NULL && (set)->table[pos] != MP_OBJ_SENTINEL); } void mp_set_init(mp_set_t *set, int n); mp_obj_t mp_set_lookup(mp_set_t *set, mp_obj_t index, mp_map_lookup_kind_t lookup_kind); @@ -246,6 +243,7 @@ typedef struct _mp_stream_p_t { machine_int_t (*read)(mp_obj_t obj, void *buf, machine_uint_t size, int *errcode); machine_int_t (*write)(mp_obj_t obj, const void *buf, machine_uint_t size, int *errcode); // add seek() ? + int is_bytes : 1; } mp_stream_p_t; struct _mp_obj_type_t { @@ -255,15 +253,15 @@ struct _mp_obj_type_t { mp_make_new_fun_t make_new; // to make an instance of the type mp_call_fun_t call; - mp_unary_op_fun_t unary_op; // can return MP_OBJ_NOT_SUPPORTED if op not supported - mp_binary_op_fun_t binary_op; // can return MP_OBJ_NOT_SUPPORTED if op not supported + mp_unary_op_fun_t unary_op; // can return MP_OBJ_NULL if op not supported + mp_binary_op_fun_t binary_op; // can return MP_OBJ_NULL if op not supported mp_load_attr_fun_t load_attr; mp_store_attr_fun_t store_attr; // if value is MP_OBJ_NULL, then delete that attribute mp_subscr_fun_t subscr; // implements load, store, delete subscripting // value=MP_OBJ_NULL means delete, value=MP_OBJ_SENTINEL means load, else store - // can return MP_OBJ_NOT_SUPPORTED + // can return MP_OBJ_NULL if op not supported mp_fun_1_t getiter; mp_fun_1_t iternext; // may return MP_OBJ_STOP_ITERATION as an optimisation instead of raising StopIteration() (with no args) @@ -321,6 +319,7 @@ extern const mp_obj_type_t mp_type_staticmethod; extern const mp_obj_type_t mp_type_classmethod; extern const mp_obj_type_t mp_type_property; extern const mp_obj_type_t mp_type_stringio; +extern const mp_obj_type_t mp_type_bytesio; // Exceptions extern const mp_obj_type_t mp_type_BaseException; @@ -422,8 +421,8 @@ bool mp_obj_is_callable(mp_obj_t o_in); machine_int_t mp_obj_hash(mp_obj_t o_in); bool mp_obj_equal(mp_obj_t o1, mp_obj_t o2); -machine_int_t mp_obj_get_int(mp_obj_t arg); -bool mp_obj_get_int_maybe(mp_obj_t arg, machine_int_t *value); +machine_int_t mp_obj_get_int(mp_const_obj_t arg); +bool mp_obj_get_int_maybe(mp_const_obj_t arg, machine_int_t *value); #if MICROPY_ENABLE_FLOAT mp_float_t mp_obj_get_float(mp_obj_t self_in); void mp_obj_get_complex(mp_obj_t self_in, mp_float_t *real, mp_float_t *imag); @@ -450,7 +449,7 @@ machine_int_t mp_obj_int_get(mp_obj_t self_in); mp_float_t mp_obj_int_as_float(mp_obj_t self_in); #endif // Will raise exception if value doesn't fit into machine_int_t -machine_int_t mp_obj_int_get_checked(mp_obj_t self_in); +machine_int_t mp_obj_int_get_checked(mp_const_obj_t self_in); // exception #define mp_obj_is_native_exception_instance(o) (mp_obj_get_type(o)->make_new == mp_obj_exception_make_new) @@ -481,11 +480,11 @@ typedef struct _mp_obj_float_t { mp_float_t value; } mp_obj_float_t; mp_float_t mp_obj_float_get(mp_obj_t self_in); -mp_obj_t mp_obj_float_binary_op(int op, mp_float_t lhs_val, mp_obj_t rhs); // can return MP_OBJ_NOT_SUPPORTED +mp_obj_t mp_obj_float_binary_op(int op, mp_float_t lhs_val, mp_obj_t rhs); // can return MP_OBJ_NULL if op not supported // complex 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(int op, mp_float_t lhs_real, mp_float_t lhs_imag, mp_obj_t rhs_in); // can return MP_OBJ_NOT_SUPPORTED +mp_obj_t mp_obj_complex_binary_op(int 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 #endif // tuple @@ -538,7 +537,7 @@ typedef struct _mp_obj_fun_native_t { // need this so we can define const object bool mp_obj_fun_prepare_simple_args(mp_obj_t self_in, uint n_args, uint n_kw, const mp_obj_t *args, uint *out_args1_len, const mp_obj_t **out_args1, uint *out_args2_len, const mp_obj_t **out_args2); -const char *mp_obj_fun_get_name(mp_obj_t fun); +const char *mp_obj_fun_get_name(mp_const_obj_t fun); const char *mp_obj_code_get_name(const byte *code_info); mp_obj_t mp_identity(mp_obj_t self); |