diff options
Diffstat (limited to 'py')
-rw-r--r-- | py/objtuple.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/py/objtuple.c b/py/objtuple.c index 5f1744ea30..da714e08a3 100644 --- a/py/objtuple.c +++ b/py/objtuple.c @@ -1,3 +1,4 @@ +#include <string.h> #include <stdlib.h> #include <stdint.h> #include <assert.h> @@ -87,7 +88,15 @@ static mp_obj_t tuple_binary_op(int op, mp_obj_t lhs, mp_obj_t rhs) { switch (op) { case RT_BINARY_OP_SUBSCR: { - // tuple load +#if MICROPY_ENABLE_SLICE + if (MP_OBJ_IS_TYPE(rhs, &slice_type)) { + machine_uint_t start, stop; + assert(m_seq_get_fast_slice_indexes(o->len, rhs, &start, &stop)); + mp_obj_tuple_t *res = mp_obj_new_tuple(stop - start, NULL); + m_seq_copy(res->items, o->items + start, res->len, mp_obj_t); + return res; + } +#endif uint index = mp_get_index(o->base.type, o->len, rhs); return o->items[index]; } |