summaryrefslogtreecommitdiffstatshomepage
path: root/py
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2015-11-19 01:27:28 +0000
committerDamien George <damien.p.george@gmail.com>2015-11-19 01:27:28 +0000
commit593faf14c4700afd6c2ba6a281e7d48633e4d688 (patch)
tree251e915de1161c28b2ad45c94bd7f39481bd8008 /py
parentdb0a5aed390e4e29f81cd9e76891e14b909eee24 (diff)
downloadmicropython-593faf14c4700afd6c2ba6a281e7d48633e4d688.tar.gz
micropython-593faf14c4700afd6c2ba6a281e7d48633e4d688.zip
py/map: Store key/value in earliest possible slot in hash table.
This change makes the code behave how it was supposed to work when first written. The avail_slot variable is set to the first free slot when looking for a key (which would come from deleting an entry). So it's more efficient (for subsequent lookups) to insert a new key into such a slot, rather than the very last slot that was searched.
Diffstat (limited to 'py')
-rw-r--r--py/map.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/py/map.c b/py/map.c
index 5c8391384d..6864513c26 100644
--- a/py/map.c
+++ b/py/map.c
@@ -214,12 +214,12 @@ mp_map_elem_t *mp_map_lookup(mp_map_t *map, mp_obj_t index, mp_map_lookup_kind_t
if (avail_slot == NULL) {
avail_slot = slot;
}
- slot->key = index;
- slot->value = MP_OBJ_NULL;
+ avail_slot->key = index;
+ avail_slot->value = MP_OBJ_NULL;
if (!MP_OBJ_IS_QSTR(index)) {
map->all_keys_are_qstrs = 0;
}
- return slot;
+ return avail_slot;
} else {
return NULL;
}