@@ -150,7 +150,7 @@ mp_map_elem_t* mp_map_lookup(mp_map_t *map, mp_obj_t index, mp_map_lookup_kind_t
150150 // and it won't necessarily benefit subsequent calls because these calls
151151 // most likely won't pass the newly-interned string.
152152 compare_only_ptrs = false;
153- } else if (!( lookup_kind & MP_MAP_LOOKUP_ADD_IF_NOT_FOUND ) ) {
153+ } else if (lookup_kind != MP_MAP_LOOKUP_ADD_IF_NOT_FOUND ) {
154154 // If we are not adding, then we can return straight away a failed
155155 // lookup because we know that the index will never be found.
156156 return NULL ;
@@ -193,7 +193,7 @@ mp_map_elem_t* mp_map_lookup(mp_map_t *map, mp_obj_t index, mp_map_lookup_kind_t
193193 // map is a hash table (not an ordered array), so do a hash lookup
194194
195195 if (map -> alloc == 0 ) {
196- if (lookup_kind & MP_MAP_LOOKUP_ADD_IF_NOT_FOUND ) {
196+ if (lookup_kind == MP_MAP_LOOKUP_ADD_IF_NOT_FOUND ) {
197197 mp_map_rehash (map );
198198 } else {
199199 return NULL ;
@@ -208,7 +208,7 @@ mp_map_elem_t* mp_map_lookup(mp_map_t *map, mp_obj_t index, mp_map_lookup_kind_t
208208 mp_map_elem_t * slot = & map -> table [pos ];
209209 if (slot -> key == MP_OBJ_NULL ) {
210210 // found NULL slot, so index is not in table
211- if (lookup_kind & MP_MAP_LOOKUP_ADD_IF_NOT_FOUND ) {
211+ if (lookup_kind == MP_MAP_LOOKUP_ADD_IF_NOT_FOUND ) {
212212 map -> used += 1 ;
213213 if (avail_slot == NULL ) {
214214 avail_slot = slot ;
@@ -230,7 +230,7 @@ mp_map_elem_t* mp_map_lookup(mp_map_t *map, mp_obj_t index, mp_map_lookup_kind_t
230230 } else if (slot -> key == index || (!compare_only_ptrs && mp_obj_equal (slot -> key , index ))) {
231231 // found index
232232 // Note: CPython does not replace the index; try x={True:'true'};x[1]='one';x
233- if (lookup_kind & MP_MAP_LOOKUP_REMOVE_IF_FOUND ) {
233+ if (lookup_kind == MP_MAP_LOOKUP_REMOVE_IF_FOUND ) {
234234 // delete element in this slot
235235 map -> used -- ;
236236 if (map -> table [(pos + 1 ) % map -> alloc ].key == MP_OBJ_NULL ) {
@@ -249,7 +249,7 @@ mp_map_elem_t* mp_map_lookup(mp_map_t *map, mp_obj_t index, mp_map_lookup_kind_t
249249
250250 if (pos == start_pos ) {
251251 // search got back to starting position, so index is not in table
252- if (lookup_kind & MP_MAP_LOOKUP_ADD_IF_NOT_FOUND ) {
252+ if (lookup_kind == MP_MAP_LOOKUP_ADD_IF_NOT_FOUND ) {
253253 if (avail_slot != NULL ) {
254254 // there was an available slot, so use that
255255 map -> used ++ ;
@@ -298,6 +298,9 @@ STATIC void mp_set_rehash(mp_set_t *set) {
298298}
299299
300300mp_obj_t mp_set_lookup (mp_set_t * set , mp_obj_t index , mp_map_lookup_kind_t lookup_kind ) {
301+ // Note: lookup_kind can be MP_MAP_LOOKUP_ADD_IF_NOT_FOUND_OR_REMOVE_IF_FOUND which
302+ // is handled by using bitwise operations.
303+
301304 if (set -> alloc == 0 ) {
302305 if (lookup_kind & MP_MAP_LOOKUP_ADD_IF_NOT_FOUND ) {
303306 mp_set_rehash (set );
0 commit comments