From 8b7faa31e1a98fd582db7021152fa25da69635e0 Mon Sep 17 00:00:00 2001
From: Paul Sokolovsky <pfalcon@users.sourceforge.net>
Date: Sun, 12 Apr 2015 00:17:16 +0300
Subject: [PATCH] objstr: split(None): Fix whitespace properly.

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

diff --git a/py/objstr.c b/py/objstr.c
index 854878ca9..e35fc2976 100644
--- a/py/objstr.c
+++ b/py/objstr.c
@@ -454,7 +454,6 @@ STATIC mp_obj_t str_join(mp_obj_t self_in, mp_obj_t arg) {
     return mp_obj_new_str_from_vstr(self_type, &vstr);
 }
 
-#define is_ws(c) ((c) == ' ' || (c) == '\t')
 enum {SPLIT = 0, KEEP = 1, SPLITLINES = 2};
 
 STATIC inline mp_obj_t str_split_internal(mp_uint_t n_args, const mp_obj_t *args, int type) {
@@ -476,15 +475,15 @@ STATIC inline mp_obj_t str_split_internal(mp_uint_t n_args, const mp_obj_t *args
         // sep not given, so separate on whitespace
 
         // Initial whitespace is not counted as split, so we pre-do it
-        while (s < top && is_ws(*s)) s++;
+        while (s < top && unichar_isspace(*s)) s++;
         while (s < top && splits != 0) {
             const byte *start = s;
-            while (s < top && !is_ws(*s)) s++;
+            while (s < top && !unichar_isspace(*s)) s++;
             mp_obj_list_append(res, mp_obj_new_str_of_type(self_type, start, s - start));
             if (s >= top) {
                 break;
             }
-            while (s < top && is_ws(*s)) s++;
+            while (s < top && unichar_isspace(*s)) s++;
             if (splits > 0) {
                 splits--;
             }
diff --git a/tests/basics/string_split.py b/tests/basics/string_split.py
index 9ee9e5960..0670734cb 100644
--- a/tests/basics/string_split.py
+++ b/tests/basics/string_split.py
@@ -6,6 +6,8 @@ print("   a   b    ".split(None, 2))
 print("   a   b  c  ".split(None, 1))
 print("   a   b  c  ".split(None, 0))
 print("   a   b  c  ".split(None, -1))
+print("foo\n\t\x07\v\nbar".split())
+print("foo\nbar\n".split())
 
 # empty separator should fail
 try:
-- 
GitLab