summaryrefslogtreecommitdiffstatshomepage
path: root/py
diff options
context:
space:
mode:
authorJim Mussared <jim.mussared@gmail.com>2020-10-09 17:10:29 +1100
committerDamien George <damien@micropython.org>2020-10-10 00:16:26 +1100
commit880875bea1d825b8fa0d1c4a779ff767377f7655 (patch)
tree1845029fd301195bae073c78b3a8535560b3d286 /py
parentfa12bfc227be47a10314576f02ee9d9cb2c1d67c (diff)
downloadmicropython-880875bea1d825b8fa0d1c4a779ff767377f7655.tar.gz
micropython-880875bea1d825b8fa0d1c4a779ff767377f7655.zip
py/objdict: Add mp_const_empty_dict_obj, use it for mp_const_empty_map.
Diffstat (limited to 'py')
-rw-r--r--py/map.c11
-rw-r--r--py/obj.h9
-rw-r--r--py/objdict.c12
3 files changed, 18 insertions, 14 deletions
diff --git a/py/map.c b/py/map.c
index 676c364da7..54f4b0204b 100644
--- a/py/map.c
+++ b/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
diff --git a/py/obj.h b/py/obj.h
index 31542a7f9b..6a040b7773 100644
--- a/py/obj.h
+++ b/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
diff --git a/py/objdict.c b/py/objdict.c
index 4fa59f4634..4e51f259e7 100644
--- a/py/objdict.c
+++ b/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