summaryrefslogtreecommitdiffstatshomepage
path: root/py
diff options
context:
space:
mode:
authorDamien George <damien@micropython.org>2020-06-21 17:25:44 +1000
committerDamien George <damien@micropython.org>2020-06-24 12:05:40 +1000
commit457fdf61c3bca550b4ad3fb2c6822c838984dac0 (patch)
tree82b9b90208d1aabe81840392ac11ea560b8f11d8 /py
parent7dd480ad5505a40bb33ee52d01c5fa78b1273083 (diff)
downloadmicropython-457fdf61c3bca550b4ad3fb2c6822c838984dac0.tar.gz
micropython-457fdf61c3bca550b4ad3fb2c6822c838984dac0.zip
py/objtype: Support passing in an OrderedDict to type() as the locals.
An OrderedDict can now be used for the locals when creating a type explicitly via type(name, bases, locals). Signed-off-by: Damien George <damien@micropython.org>
Diffstat (limited to 'py')
-rw-r--r--py/objtype.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/py/objtype.c b/py/objtype.c
index a539fcab29..40900dc050 100644
--- a/py/objtype.c
+++ b/py/objtype.c
@@ -153,7 +153,7 @@ STATIC void mp_obj_class_lookup(struct class_lookup_data *lookup, const mp_obj_t
if (type->locals_dict != NULL) {
// search locals_dict (the set of methods/attributes)
- assert(type->locals_dict->base.type == &mp_type_dict); // MicroPython restriction, for now
+ assert(mp_obj_is_dict_or_ordereddict(MP_OBJ_FROM_PTR(type->locals_dict))); // MicroPython restriction, for now
mp_map_t *locals_map = &type->locals_dict->map;
mp_map_elem_t *elem = mp_map_lookup(locals_map, MP_OBJ_NEW_QSTR(lookup->attr), MP_MAP_LOOKUP);
if (elem != NULL) {
@@ -1053,7 +1053,7 @@ STATIC void type_attr(mp_obj_t self_in, qstr attr, mp_obj_t *dest) {
// delete/store attribute
if (self->locals_dict != NULL) {
- assert(self->locals_dict->base.type == &mp_type_dict); // MicroPython restriction, for now
+ assert(mp_obj_is_dict_or_ordereddict(MP_OBJ_FROM_PTR(self->locals_dict))); // MicroPython restriction, for now
mp_map_t *locals_map = &self->locals_dict->map;
if (locals_map->is_fixed) {
// can't apply delete/store to a fixed map
@@ -1103,7 +1103,7 @@ mp_obj_t mp_obj_new_type(qstr name, mp_obj_t bases_tuple, mp_obj_t locals_dict)
if (!mp_obj_is_type(bases_tuple, &mp_type_tuple)) {
mp_raise_TypeError(NULL);
}
- if (!mp_obj_is_type(locals_dict, &mp_type_dict)) {
+ if (!mp_obj_is_dict_or_ordereddict(locals_dict)) {
mp_raise_TypeError(NULL);
}