summaryrefslogtreecommitdiffstatshomepage
path: root/py/objtype.c
diff options
context:
space:
mode:
authorJohn R. Lenton <jlenton@gmail.com>2014-01-05 22:29:03 +0000
committerJohn R. Lenton <jlenton@gmail.com>2014-01-05 22:29:03 +0000
commitba3f87c94776538fece5e87ff1d7de547930397a (patch)
tree3112b328cff278168a1ef48fc37a65778ea9324a /py/objtype.c
parent6e1e98f8648d327098a03ce8d175c9854dd06cc8 (diff)
parent12e2656472bf53e467c066eda6f3e177a97210ca (diff)
downloadmicropython-ba3f87c94776538fece5e87ff1d7de547930397a.tar.gz
micropython-ba3f87c94776538fece5e87ff1d7de547930397a.zip
Merge remote-tracking branch 'upstream/master' into list_reverse
Diffstat (limited to 'py/objtype.c')
-rw-r--r--py/objtype.c21
1 files changed, 17 insertions, 4 deletions
diff --git a/py/objtype.c b/py/objtype.c
index 83ae48d2d1..aeeaebb95d 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