objstr: Slice indexing: support bytes properly.

This commit is contained in:
Paul Sokolovsky 2014-05-11 21:22:59 +03:00
parent bfb8819c0c
commit 5ebd5f0f19
2 changed files with 5 additions and 2 deletions

View File

@ -332,6 +332,7 @@ STATIC mp_obj_t str_binary_op(int op, mp_obj_t lhs_in, mp_obj_t rhs_in) {
} }
STATIC mp_obj_t str_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value) { STATIC mp_obj_t str_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value) {
mp_obj_type_t *type = mp_obj_get_type(self_in);
GET_STR_DATA_LEN(self_in, self_data, self_len); GET_STR_DATA_LEN(self_in, self_data, self_len);
if (value == MP_OBJ_SENTINEL) { if (value == MP_OBJ_SENTINEL) {
// load // load
@ -341,10 +342,9 @@ STATIC mp_obj_t str_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value) {
if (!mp_seq_get_fast_slice_indexes(self_len, index, &start, &stop)) { if (!mp_seq_get_fast_slice_indexes(self_len, index, &start, &stop)) {
assert(0); assert(0);
} }
return mp_obj_new_str(self_data + start, stop - start, false); return str_new(type, self_data + start, stop - start);
} }
#endif #endif
mp_obj_type_t *type = mp_obj_get_type(self_in);
uint index_val = mp_get_index(type, self_len, index, false); uint index_val = mp_get_index(type, self_len, index, false);
if (type == &mp_type_bytes) { if (type == &mp_type_bytes) {
return MP_OBJ_NEW_SMALL_INT((mp_small_int_t)self_data[index_val]); return MP_OBJ_NEW_SMALL_INT((mp_small_int_t)self_data[index_val]);

View File

@ -30,3 +30,6 @@ print("123"[-1000000:])
# No IndexError! # No IndexError!
print(""[1:1]) print(""[1:1])
print(""[-1:-1]) print(""[-1:-1])
# bytes
print(b"123"[0:2])