summaryrefslogtreecommitdiffstatshomepage
path: root/py/objobject.c
diff options
context:
space:
mode:
authorPaul Sokolovsky <pfalcon@users.sourceforge.net>2014-05-22 00:32:00 +0300
committerPaul Sokolovsky <pfalcon@users.sourceforge.net>2014-05-22 00:32:00 +0300
commit806ea1f6ca2b1b50bb4634be6c39ad83d8af7e89 (patch)
tree6ff486c9fc6e76cf2e6b984d01a1f28b55432149 /py/objobject.c
parent0c937fa25a1a78274ba974a5c1546c0a01106c30 (diff)
downloadmicropython-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.c13
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);