py/objdict: Add mp_const_empty_dict_obj, use it for mp_const_empty_map.
This commit is contained in:
parent
fa12bfc227
commit
880875bea1
11
py/map.c
11
py/map.c
|
@ -40,17 +40,6 @@
|
|||
#define DEBUG_printf(...) (void)0
|
||||
#endif
|
||||
|
||||
// Fixed empty map. Useful when need to call kw-receiving functions
|
||||
// without any keywords from C, etc.
|
||||
const mp_map_t mp_const_empty_map = {
|
||||
.all_keys_are_qstrs = 0,
|
||||
.is_fixed = 1,
|
||||
.is_ordered = 1,
|
||||
.used = 0,
|
||||
.alloc = 0,
|
||||
.table = NULL,
|
||||
};
|
||||
|
||||
// This table of sizes is used to control the growth of hash tables.
|
||||
// The first set of sizes are chosen so the allocation fits exactly in a
|
||||
// 4-word GC block, and it's not so important for these small values to be
|
||||
|
|
9
py/obj.h
9
py/obj.h
|
@ -422,8 +422,6 @@ typedef enum _mp_map_lookup_kind_t {
|
|||
MP_MAP_LOOKUP_ADD_IF_NOT_FOUND_OR_REMOVE_IF_FOUND = 3, // only valid for mp_set_lookup
|
||||
} mp_map_lookup_kind_t;
|
||||
|
||||
extern const mp_map_t mp_const_empty_map;
|
||||
|
||||
static inline bool mp_map_slot_is_filled(const mp_map_t *map, size_t pos) {
|
||||
assert(pos < map->alloc);
|
||||
return (map)->table[pos].key != MP_OBJ_NULL && (map)->table[pos].key != MP_OBJ_SENTINEL;
|
||||
|
@ -685,17 +683,22 @@ extern const struct _mp_obj_bool_t mp_const_false_obj;
|
|||
extern const struct _mp_obj_bool_t mp_const_true_obj;
|
||||
#endif
|
||||
|
||||
// Constant objects, globally accessible: b'', (), Ellipsis, NotImplemented, GeneratorExit()
|
||||
// Constant objects, globally accessible: b'', (), {}, Ellipsis, NotImplemented, GeneratorExit()
|
||||
// The below macros are for convenience only.
|
||||
#define mp_const_empty_bytes (MP_OBJ_FROM_PTR(&mp_const_empty_bytes_obj))
|
||||
#define mp_const_empty_tuple (MP_OBJ_FROM_PTR(&mp_const_empty_tuple_obj))
|
||||
#define mp_const_notimplemented (MP_OBJ_FROM_PTR(&mp_const_notimplemented_obj))
|
||||
extern const struct _mp_obj_str_t mp_const_empty_bytes_obj;
|
||||
extern const struct _mp_obj_tuple_t mp_const_empty_tuple_obj;
|
||||
extern const struct _mp_obj_dict_t mp_const_empty_dict_obj;
|
||||
extern const struct _mp_obj_singleton_t mp_const_ellipsis_obj;
|
||||
extern const struct _mp_obj_singleton_t mp_const_notimplemented_obj;
|
||||
extern const struct _mp_obj_exception_t mp_const_GeneratorExit_obj;
|
||||
|
||||
// Fixed empty map. Useful when calling keyword-receiving functions
|
||||
// without any keywords from C, etc.
|
||||
#define mp_const_empty_map (mp_const_empty_dict_obj.map)
|
||||
|
||||
// General API for objects
|
||||
|
||||
// These macros are derived from more primitive ones and are used to
|
||||
|
|
12
py/objdict.c
12
py/objdict.c
|
@ -33,6 +33,18 @@
|
|||
#include "py/objtype.h"
|
||||
#include "py/objstr.h"
|
||||
|
||||
const mp_obj_dict_t mp_const_empty_dict_obj = {
|
||||
.base = { .type = &mp_type_dict },
|
||||
.map = {
|
||||
.all_keys_are_qstrs = 0,
|
||||
.is_fixed = 1,
|
||||
.is_ordered = 1,
|
||||
.used = 0,
|
||||
.alloc = 0,
|
||||
.table = NULL,
|
||||
}
|
||||
};
|
||||
|
||||
STATIC mp_obj_t dict_update(size_t n_args, const mp_obj_t *args, mp_map_t *kwargs);
|
||||
|
||||
// This is a helper function to iterate through a dictionary. The state of
|
||||
|
|
Loading…
Reference in New Issue