mirror of
https://github.com/licsber/micropython.git
synced 2024-09-20 09:00:23 +08:00
objarray: Implement slice subscription.
This commit is contained in:
parent
9ae0912496
commit
d6e12723ed
@ -139,6 +139,18 @@ STATIC mp_obj_t array_subscr(mp_obj_t self_in, mp_obj_t index_in, mp_obj_t value
|
||||
return MP_OBJ_NOT_SUPPORTED;
|
||||
} else {
|
||||
mp_obj_array_t *o = self_in;
|
||||
if (MP_OBJ_IS_TYPE(index_in, &mp_type_slice)) {
|
||||
machine_uint_t start, stop;
|
||||
if (!m_seq_get_fast_slice_indexes(o->len, index_in, &start, &stop)) {
|
||||
assert(0);
|
||||
}
|
||||
mp_obj_array_t *res = array_new(o->typecode, stop - start);
|
||||
int sz = mp_binary_get_size('@', o->typecode, NULL);
|
||||
assert(sz > 0);
|
||||
byte *p = o->items;
|
||||
memcpy(res->items, p + start * sz, (stop - start) * sz);
|
||||
return res;
|
||||
} else {
|
||||
uint index = mp_get_index(o->base.type, o->len, index_in, false);
|
||||
if (value == MP_OBJ_SENTINEL) {
|
||||
// load
|
||||
@ -150,6 +162,7 @@ STATIC mp_obj_t array_subscr(mp_obj_t self_in, mp_obj_t index_in, mp_obj_t value
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
STATIC machine_int_t array_get_buffer(mp_obj_t o_in, mp_buffer_info_t *bufinfo, int flags) {
|
||||
mp_obj_array_t *o = o_in;
|
||||
|
@ -13,3 +13,7 @@ s = 0
|
||||
for i in a:
|
||||
s += i
|
||||
print(s)
|
||||
|
||||
print(a[1:])
|
||||
print(a[:-1])
|
||||
print(a[2:3])
|
||||
|
Loading…
Reference in New Issue
Block a user