From 593faf14c4700afd6c2ba6a281e7d48633e4d688 Mon Sep 17 00:00:00 2001 From: Damien George Date: Thu, 19 Nov 2015 01:27:28 +0000 Subject: [PATCH] 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. --- py/map.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/py/map.c b/py/map.c index 5c8391384..6864513c2 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; }