@@ -257,8 +257,15 @@ STATIC void class_load_attr(mp_obj_t self_in, qstr attr, mp_obj_t *dest) {
257257
258258STATIC bool class_store_attr (mp_obj_t self_in , qstr attr , mp_obj_t value ) {
259259 mp_obj_class_t * self = self_in ;
260- mp_map_lookup (& self -> members , MP_OBJ_NEW_QSTR (attr ), MP_MAP_LOOKUP_ADD_IF_NOT_FOUND )-> value = value ;
261- return true;
260+ if (value == MP_OBJ_NULL ) {
261+ // delete attribute
262+ mp_map_elem_t * el = mp_map_lookup (& self -> members , MP_OBJ_NEW_QSTR (attr ), MP_MAP_LOOKUP_REMOVE_IF_FOUND );
263+ return el != NULL ;
264+ } else {
265+ // store attribute
266+ mp_map_lookup (& self -> members , MP_OBJ_NEW_QSTR (attr ), MP_MAP_LOOKUP_ADD_IF_NOT_FOUND )-> value = value ;
267+ return true;
268+ }
262269}
263270
264271bool class_store_item (mp_obj_t self_in , mp_obj_t index , mp_obj_t value ) {
@@ -356,11 +363,19 @@ STATIC bool type_store_attr(mp_obj_t self_in, qstr attr, mp_obj_t value) {
356363 if (self -> locals_dict != NULL ) {
357364 assert (MP_OBJ_IS_TYPE (self -> locals_dict , & mp_type_dict )); // Micro Python restriction, for now
358365 mp_map_t * locals_map = mp_obj_dict_get_map (self -> locals_dict );
359- mp_map_elem_t * elem = mp_map_lookup (locals_map , MP_OBJ_NEW_QSTR (attr ), MP_MAP_LOOKUP_ADD_IF_NOT_FOUND );
360- // note that locals_map may be in ROM, so add will fail in that case
361- if (elem != NULL ) {
362- elem -> value = value ;
363- return true;
366+ if (value == MP_OBJ_NULL ) {
367+ // delete attribute
368+ mp_map_elem_t * elem = mp_map_lookup (locals_map , MP_OBJ_NEW_QSTR (attr ), MP_MAP_LOOKUP_REMOVE_IF_FOUND );
369+ // note that locals_map may be in ROM, so remove will fail in that case
370+ return elem != NULL ;
371+ } else {
372+ // store attribute
373+ mp_map_elem_t * elem = mp_map_lookup (locals_map , MP_OBJ_NEW_QSTR (attr ), MP_MAP_LOOKUP_ADD_IF_NOT_FOUND );
374+ // note that locals_map may be in ROM, so add will fail in that case
375+ if (elem != NULL ) {
376+ elem -> value = value ;
377+ return true;
378+ }
364379 }
365380 }
366381
0 commit comments