diff options
author | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2014-05-21 22:24:36 +0300 |
---|---|---|
committer | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2014-05-21 22:27:03 +0300 |
commit | a8408a8abe83c98af50821f1eb1df53cf9d202dd (patch) | |
tree | 3d5bc6e17840b26685505d8e306fb1d59c6bbc99 | |
parent | 6a410789b8ff085baf304fdd3bef2bae6e1377fe (diff) | |
download | micropython-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.c | 16 | ||||
-rw-r--r-- | py/objtype.c | 1 | ||||
-rw-r--r-- | tests/basics/class_super_object.py | 15 |
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() |