From 5ebd5f0f19bdc1331d890e2af081056548002427 Mon Sep 17 00:00:00 2001
From: Paul Sokolovsky <pfalcon@users.sourceforge.net>
Date: Sun, 11 May 2014 21:22:59 +0300
Subject: [PATCH] objstr: Slice indexing: support bytes properly.

---
 py/objstr.c                  | 4 ++--
 tests/basics/string-slice.py | 3 +++
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/py/objstr.c b/py/objstr.c
index d062f05f8..79ad891d0 100644
--- a/py/objstr.c
+++ b/py/objstr.c
@@ -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) {
+    mp_obj_type_t *type = mp_obj_get_type(self_in);
     GET_STR_DATA_LEN(self_in, self_data, self_len);
     if (value == MP_OBJ_SENTINEL) {
         // 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)) {
                 assert(0);
             }
-            return mp_obj_new_str(self_data + start, stop - start, false);
+            return str_new(type, self_data + start, stop - start);
         }
 #endif
-        mp_obj_type_t *type = mp_obj_get_type(self_in);
         uint index_val = mp_get_index(type, self_len, index, false);
         if (type == &mp_type_bytes) {
             return MP_OBJ_NEW_SMALL_INT((mp_small_int_t)self_data[index_val]);
diff --git a/tests/basics/string-slice.py b/tests/basics/string-slice.py
index 7538ae570..89853d343 100644
--- a/tests/basics/string-slice.py
+++ b/tests/basics/string-slice.py
@@ -30,3 +30,6 @@ print("123"[-1000000:])
 # No IndexError!
 print(""[1:1])
 print(""[-1:-1])
+
+# bytes
+print(b"123"[0:2])
-- 
GitLab