diff options
author | Damien George <damien.p.george@gmail.com> | 2014-04-25 23:45:52 +0100 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2014-04-25 23:45:52 +0100 |
commit | c492cf1f442653019b287bf0e8bd0c43f2abd837 (patch) | |
tree | 080ca4ed09ce63c6edd3cfc8bf0c6e8298588eb6 /py/objtype.c | |
parent | daab651c5ca0d7198f6db2fa0abe2399fc08c69e (diff) | |
parent | 755565d2cbc7c7f7abe6f457012b49ddf6b23ca1 (diff) | |
download | micropython-c492cf1f442653019b287bf0e8bd0c43f2abd837.tar.gz micropython-c492cf1f442653019b287bf0e8bd0c43f2abd837.zip |
Merge branch 'master' of github.com:micropython/micropython
Diffstat (limited to 'py/objtype.c')
-rw-r--r-- | py/objtype.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/py/objtype.c b/py/objtype.c index 3d22b8ec45..75d53b8279 100644 --- a/py/objtype.c +++ b/py/objtype.c @@ -338,6 +338,16 @@ STATIC mp_obj_t class_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value) { } } +STATIC mp_obj_t class_call(mp_obj_t self_in, uint n_args, uint n_kw, const mp_obj_t *args) { + mp_obj_class_t *self = self_in; + mp_obj_t member = mp_obj_class_lookup(self->base.type, MP_QSTR___call__); + if (member == MP_OBJ_NULL) { + return member; + } + mp_obj_t meth = mp_obj_new_bound_meth(member, self); + return mp_call_function_n_kw(meth, n_args, n_kw, args); +} + /******************************************************************************/ // type object // - the struct is mp_obj_type_t and is defined in obj.h so const types can be made @@ -474,6 +484,7 @@ mp_obj_t mp_obj_new_type(qstr name, mp_obj_t bases_tuple, mp_obj_t locals_dict) o->load_attr = class_load_attr; o->store_attr = class_store_attr; o->subscr = class_subscr; + o->call = class_call; o->bases_tuple = bases_tuple; o->locals_dict = locals_dict; return o; |