diff options
author | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2014-05-22 00:32:00 +0300 |
---|---|---|
committer | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2014-05-22 00:32:00 +0300 |
commit | 806ea1f6ca2b1b50bb4634be6c39ad83d8af7e89 (patch) | |
tree | 6ff486c9fc6e76cf2e6b984d01a1f28b55432149 /py/objobject.c | |
parent | 0c937fa25a1a78274ba974a5c1546c0a01106c30 (diff) | |
download | micropython-806ea1f6ca2b1b50bb4634be6c39ad83d8af7e89.tar.gz micropython-806ea1f6ca2b1b50bb4634be6c39ad83d8af7e89.zip |
py: Initial attempts to actually allow implementing __new__ in Python.
Caveat is that __new__ should recurse to base class __new__, and ultimately,
object.__new__ is what handles instance allocation.
Diffstat (limited to 'py/objobject.c')
-rw-r--r-- | py/objobject.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/py/objobject.c b/py/objobject.c index 9175572b2d..7e2a35a52f 100644 --- a/py/objobject.c +++ b/py/objobject.c @@ -33,6 +33,8 @@ #include "obj.h" #include "runtime0.h" +mp_obj_t instance_make_new(mp_obj_t self_in, uint n_args, uint n_kw, const mp_obj_t *args); + typedef struct _mp_obj_object_t { mp_obj_base_t base; } mp_obj_object_t; @@ -52,12 +54,23 @@ STATIC mp_obj_t object___init__(mp_obj_t self) { return mp_const_none; } STATIC MP_DEFINE_CONST_FUN_OBJ_1(object___init___obj, object___init__); + +STATIC mp_obj_t object___new__(mp_obj_t cls) { + mp_obj_t o = MP_OBJ_SENTINEL; + mp_obj_t res = instance_make_new(cls, 1, 0, &o); + return res; +} +STATIC MP_DEFINE_CONST_FUN_OBJ_1(object___new___fun_obj, object___new__); +STATIC MP_DEFINE_CONST_STATICMETHOD_OBJ(object___new___obj, (const mp_obj_t)&object___new___fun_obj); #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 + #if MICROPY_CPYTHON_COMPAT + { MP_OBJ_NEW_QSTR(MP_QSTR___new__), (mp_obj_t)&object___new___obj }, + #endif }; STATIC MP_DEFINE_CONST_DICT(object_locals_dict, object_locals_dict_table); |