summaryrefslogtreecommitdiffstatshomepage
path: root/py/objobject.c
diff options
context:
space:
mode:
authorYonatan Goldschmidt <yon.goldschmidt@gmail.com>2019-12-10 12:05:22 +0200
committerDamien George <damien.p.george@gmail.com>2019-12-21 00:14:22 +1100
commit42e45bd69491e56d4baa681eb34f13ca1c4bd1ba (patch)
treefabf4557411d05d1b8024be42f9553fecd3903fb /py/objobject.c
parent07ccb5588c4abcffa28f25907e699d1727d38bae (diff)
downloadmicropython-42e45bd69491e56d4baa681eb34f13ca1c4bd1ba.tar.gz
micropython-42e45bd69491e56d4baa681eb34f13ca1c4bd1ba.zip
py/objobject: Add object.__delattr__ function.
Similar to object.__setattr__.
Diffstat (limited to 'py/objobject.c')
-rw-r--r--py/objobject.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/py/objobject.c b/py/objobject.c
index ae8436bc88..fcf0390597 100644
--- a/py/objobject.c
+++ b/py/objobject.c
@@ -77,6 +77,23 @@ STATIC mp_obj_t object___setattr__(mp_obj_t self_in, mp_obj_t attr, mp_obj_t val
return mp_const_none;
}
STATIC MP_DEFINE_CONST_FUN_OBJ_3(object___setattr___obj, object___setattr__);
+
+STATIC mp_obj_t object___delattr__(mp_obj_t self_in, mp_obj_t attr) {
+ if (!mp_obj_is_instance_type(mp_obj_get_type(MP_OBJ_TO_PTR(self_in)))) {
+ mp_raise_TypeError("arg must be user-type");
+ }
+
+ if (!mp_obj_is_str(attr)) {
+ mp_raise_TypeError(NULL);
+ }
+
+ mp_obj_instance_t *self = MP_OBJ_TO_PTR(self_in);
+ if (mp_map_lookup(&self->members, attr, MP_MAP_LOOKUP_REMOVE_IF_FOUND) == NULL) {
+ mp_raise_msg(&mp_type_AttributeError, "no such attribute");
+ }
+ return mp_const_none;
+}
+STATIC MP_DEFINE_CONST_FUN_OBJ_2(object___delattr___obj, object___delattr__);
#endif
STATIC const mp_rom_map_elem_t object_locals_dict_table[] = {
@@ -88,6 +105,7 @@ STATIC const mp_rom_map_elem_t object_locals_dict_table[] = {
#endif
#if MICROPY_PY_DELATTR_SETATTR
{ MP_ROM_QSTR(MP_QSTR___setattr__), MP_ROM_PTR(&object___setattr___obj) },
+ { MP_ROM_QSTR(MP_QSTR___delattr__), MP_ROM_PTR(&object___delattr___obj) },
#endif
};