diff --git a/py/objnamedtuple.c b/py/objnamedtuple.c index 41502fcc4c..3485301113 100644 --- a/py/objnamedtuple.c +++ b/py/objnamedtuple.c @@ -127,8 +127,8 @@ mp_obj_t mp_obj_new_namedtuple_type(qstr name, const char *fields) { o->base.name = name; o->base.print = namedtuple_print; o->base.make_new = namedtuple_make_new; -// o->base.unary_op = ; -// o->base.binary_op = ; + o->base.unary_op = tuple_unary_op; + o->base.binary_op = tuple_binary_op; o->base.load_attr = namedtuple_load_attr; o->base.store_attr = namedtuple_store_attr; o->base.bases_tuple = (mp_obj_t)&namedtuple_base_tuple; diff --git a/py/objtuple.c b/py/objtuple.c index 41ad8a5d58..d39b36d9fa 100644 --- a/py/objtuple.c +++ b/py/objtuple.c @@ -86,7 +86,7 @@ STATIC bool tuple_cmp_helper(int op, mp_obj_t self_in, mp_obj_t another_in) { return mp_seq_cmp_objs(op, self->items, self->len, another->items, another->len); } -STATIC mp_obj_t tuple_unary_op(int op, mp_obj_t self_in) { +mp_obj_t tuple_unary_op(int op, mp_obj_t self_in) { mp_obj_tuple_t *self = self_in; switch (op) { case RT_UNARY_OP_BOOL: return MP_BOOL(self->len != 0); @@ -95,7 +95,7 @@ STATIC mp_obj_t tuple_unary_op(int op, mp_obj_t self_in) { } } -STATIC mp_obj_t tuple_binary_op(int op, mp_obj_t lhs, mp_obj_t rhs) { +mp_obj_t tuple_binary_op(int op, mp_obj_t lhs, mp_obj_t rhs) { mp_obj_tuple_t *o = lhs; switch (op) { case RT_BINARY_OP_SUBSCR: @@ -116,7 +116,7 @@ STATIC mp_obj_t tuple_binary_op(int op, mp_obj_t lhs, mp_obj_t rhs) { } case RT_BINARY_OP_ADD: { - if (!MP_OBJ_IS_TYPE(rhs, &tuple_type)) { + if (!mp_obj_is_subclass_fast(mp_obj_get_type(rhs), (mp_obj_t)&tuple_type)) { return NULL; } mp_obj_tuple_t *p = rhs; diff --git a/py/objtuple.h b/py/objtuple.h index 6ff38c10eb..c310bfb7d5 100644 --- a/py/objtuple.h +++ b/py/objtuple.h @@ -5,3 +5,5 @@ typedef struct _mp_obj_tuple_t { } mp_obj_tuple_t; void tuple_print(void (*print)(void *env, const char *fmt, ...), void *env, mp_obj_t o_in, mp_print_kind_t kind); +mp_obj_t tuple_unary_op(int op, mp_obj_t self_in); +mp_obj_t tuple_binary_op(int op, mp_obj_t lhs, mp_obj_t rhs); diff --git a/tests/basics/namedtuple1.py b/tests/basics/namedtuple1.py index 331c7dec1f..1e194472fb 100644 --- a/tests/basics/namedtuple1.py +++ b/tests/basics/namedtuple1.py @@ -5,8 +5,14 @@ T = namedtuple("Tup", "foo bar") #print(T) t = T(1, 2) print(t) +print(t[0], t[1]) print(t.foo, t.bar) +print(len(t)) +print(bool(t)) +print(t + t) +print(t * 3) + print(isinstance(t, tuple)) try: