summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorPaul Sokolovsky <pfalcon@users.sourceforge.net>2014-05-21 22:24:36 +0300
committerPaul Sokolovsky <pfalcon@users.sourceforge.net>2014-05-21 22:27:03 +0300
commita8408a8abe83c98af50821f1eb1df53cf9d202dd (patch)
tree3d5bc6e17840b26685505d8e306fb1d59c6bbc99
parent6a410789b8ff085baf304fdd3bef2bae6e1377fe (diff)
downloadmicropython-a8408a8abe83c98af50821f1eb1df53cf9d202dd.tar.gz
micropython-a8408a8abe83c98af50821f1eb1df53cf9d202dd.zip
objtype: super: Fall back to "object" lookup as last resort.
Also, define object.__init__() (semantically empty, purely CPython compat measure). Addresses #520.
-rw-r--r--py/objobject.c16
-rw-r--r--py/objtype.c1
-rw-r--r--tests/basics/class_super_object.py15
3 files changed, 32 insertions, 0 deletions
diff --git a/py/objobject.c b/py/objobject.c
index 6a1393076d..db4fb689cb 100644
--- a/py/objobject.c
+++ b/py/objobject.c
@@ -47,8 +47,24 @@ STATIC mp_obj_t object_make_new(mp_obj_t type_in, uint n_args, uint n_kw, const
return o;
}
+#if MICROPY_CPYTHON_COMPAT
+STATIC mp_obj_t object___init__(uint n_args, const mp_obj_t *args) {
+ return mp_const_none;
+}
+STATIC MP_DEFINE_CONST_FUN_OBJ_1(object___init___obj, object___init__);
+#endif
+
+STATIC const mp_map_elem_t object_locals_dict_table[] = {
+ #if MICROPY_CPYTHON_COMPAT
+ { MP_OBJ_NEW_QSTR(MP_QSTR___init__), (mp_obj_t)&object___init___obj },
+ #endif
+};
+
+STATIC MP_DEFINE_CONST_DICT(object_locals_dict, object_locals_dict_table);
+
const mp_obj_type_t mp_type_object = {
{ &mp_type_type },
.name = MP_QSTR_object,
.make_new = object_make_new,
+ .locals_dict = (mp_obj_t)&object_locals_dict,
};
diff --git a/py/objtype.c b/py/objtype.c
index ed45922748..5da49a0452 100644
--- a/py/objtype.c
+++ b/py/objtype.c
@@ -739,6 +739,7 @@ STATIC void super_load_attr(mp_obj_t self_in, qstr attr, mp_obj_t *dest) {
return;
}
}
+ mp_obj_class_lookup(self->obj, &mp_type_object, attr, 0, dest);
}
const mp_obj_type_t mp_type_super = {
diff --git a/tests/basics/class_super_object.py b/tests/basics/class_super_object.py
new file mode 100644
index 0000000000..21b97328ea
--- /dev/null
+++ b/tests/basics/class_super_object.py
@@ -0,0 +1,15 @@
+# Calling object.__init__() via super().__init__
+
+class Test(object):
+ def __init__(self):
+ super().__init__()
+ print("Test.__init__")
+
+t = Test()
+
+class Test2:
+ def __init__(self):
+ super().__init__()
+ print("Test2.__init__")
+
+t = Test2()