From 962a5d50c94f01ca8dc7d46fe568535d713d59d0 Mon Sep 17 00:00:00 2001 From: Damien George Date: Wed, 21 Jan 2015 00:19:42 +0000 Subject: py: Implement __reversed__ slot. Addresses issue #1073. --- py/objreversed.c | 7 +++++++ py/qstrdefs.h | 1 + 2 files changed, 8 insertions(+) (limited to 'py') diff --git a/py/objreversed.c b/py/objreversed.c index 4ddb218074..0d5332d002 100644 --- a/py/objreversed.c +++ b/py/objreversed.c @@ -39,6 +39,13 @@ typedef struct _mp_obj_reversed_t { STATIC mp_obj_t reversed_make_new(mp_obj_t type_in, mp_uint_t n_args, mp_uint_t n_kw, const mp_obj_t *args) { mp_arg_check_num(n_args, n_kw, 1, 1, false); + // check if __reversed__ exists, and if so delegate to it + mp_obj_t dest[2]; + mp_load_method_maybe(args[0], MP_QSTR___reversed__, dest); + if (dest[0] != MP_OBJ_NULL) { + return mp_call_method_n_kw(0, 0, dest); + } + mp_obj_reversed_t *o = m_new_obj(mp_obj_reversed_t); o->base.type = type_in; o->seq = args[0]; diff --git a/py/qstrdefs.h b/py/qstrdefs.h index 71a523c2d6..23c25072d9 100644 --- a/py/qstrdefs.h +++ b/py/qstrdefs.h @@ -74,6 +74,7 @@ Q(__gt__) Q(__eq__) Q(__le__) Q(__ge__) +Q(__reversed__) Q(micropython) Q(bytecode) -- cgit v1.2.3