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
|
#define DEBUG_printf(...) (void)0
|
||||||
#endif
|
#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.
|
// 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
|
// 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
|
// 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_ADD_IF_NOT_FOUND_OR_REMOVE_IF_FOUND = 3, // only valid for mp_set_lookup
|
||||||
} mp_map_lookup_kind_t;
|
} 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) {
|
static inline bool mp_map_slot_is_filled(const mp_map_t *map, size_t pos) {
|
||||||
assert(pos < map->alloc);
|
assert(pos < map->alloc);
|
||||||
return (map)->table[pos].key != MP_OBJ_NULL && (map)->table[pos].key != MP_OBJ_SENTINEL;
|
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;
|
extern const struct _mp_obj_bool_t mp_const_true_obj;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Constant objects, globally accessible: b'', (), Ellipsis, NotImplemented, GeneratorExit()
|
// Constant objects, globally accessible: b'', (), {}, Ellipsis, NotImplemented, GeneratorExit()
|
||||||
// The below macros are for convenience only.
|
// 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_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_empty_tuple (MP_OBJ_FROM_PTR(&mp_const_empty_tuple_obj))
|
||||||
#define mp_const_notimplemented (MP_OBJ_FROM_PTR(&mp_const_notimplemented_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_str_t mp_const_empty_bytes_obj;
|
||||||
extern const struct _mp_obj_tuple_t mp_const_empty_tuple_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_ellipsis_obj;
|
||||||
extern const struct _mp_obj_singleton_t mp_const_notimplemented_obj;
|
extern const struct _mp_obj_singleton_t mp_const_notimplemented_obj;
|
||||||
extern const struct _mp_obj_exception_t mp_const_GeneratorExit_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
|
// General API for objects
|
||||||
|
|
||||||
// These macros are derived from more primitive ones and are used to
|
// 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/objtype.h"
|
||||||
#include "py/objstr.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);
|
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
|
// This is a helper function to iterate through a dictionary. The state of
|
||||||
|
Loading…
Reference in New Issue
Block a user