diff options
| author | Damien George | 2014-01-04 20:21:15 +0000 |
|---|---|---|
| committer | Damien George | 2014-01-04 20:21:15 +0000 |
| commit | 71c5181a8dfa69ba9f5ca322a3aba0660be2e166 (patch) | |
| tree | 77aae5a9008f269276bda9c433235f7e11b57ed4 /py/objtype.c | |
| parent | e9906ac3d771a312b05d76e42aee8e806dd0d128 (diff) | |
Convert Python types to proper Python type hierarchy.
Now much more inline with how CPython does types.
Diffstat (limited to 'py/objtype.c')
| -rw-r--r-- | py/objtype.c | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/py/objtype.c b/py/objtype.c index 83ae48d2d..aeeaebb95 100644 --- a/py/objtype.c +++ b/py/objtype.c @@ -4,17 +4,30 @@ #include "nlr.h" #include "misc.h" #include "mpconfig.h" +#include "mpqstr.h" #include "obj.h" -void type_print(void (*print)(void *env, const char *fmt, ...), void *env, mp_obj_t self_in) { - print(env, "<a type>"); +static void type_print(void (*print)(void *env, const char *fmt, ...), void *env, mp_obj_t self_in) { + mp_obj_type_t *self = self_in; + print(env, "<class '%s'>", self->name); +} + +static mp_obj_t type_call_n(mp_obj_t self_in, int n_args, const mp_obj_t *args) { + mp_obj_type_t *self = self_in; + if (self->make_new != NULL) { + // TODO we need to init the object if it's an instance of a type + return self->make_new(self, n_args, args); + } else { + nlr_jump(mp_obj_new_exception_msg_1_arg(MP_QSTR_TypeError, "cannot create '%s' instances", self->name)); + } } const mp_obj_type_t mp_const_type = { { &mp_const_type }, - "<a type>", + "type", type_print, // print - NULL, // call_n + NULL, // make_new + type_call_n, // call_n NULL, // unary_op NULL, // binary_op NULL, // getiter |
