Skip to content

Commit

Permalink
pythongh-91146: Reduce allocation size of list from str.split()/rspli…
Browse files Browse the repository at this point in the history
  • Loading branch information
corona10 authored Jul 31, 2022
1 parent 53357b3 commit 50b2261
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 19 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Reduce allocation size of :class:`list` from :meth:`str.split`
and :meth:`str.rsplit`. Patch by Dong-hee Na.
39 changes: 20 additions & 19 deletions Objects/unicodeobject.c
Original file line number Diff line number Diff line change
Expand Up @@ -9696,40 +9696,40 @@ split(PyObject *self,
const void *buf1, *buf2;
Py_ssize_t len1, len2;
PyObject* out;

if (maxcount < 0)
maxcount = PY_SSIZE_T_MAX;
len1 = PyUnicode_GET_LENGTH(self);
kind1 = PyUnicode_KIND(self);
if (maxcount < 0) {
maxcount = len1;
}

if (substring == NULL)
switch (PyUnicode_KIND(self)) {
switch (kind1) {
case PyUnicode_1BYTE_KIND:
if (PyUnicode_IS_ASCII(self))
return asciilib_split_whitespace(
self, PyUnicode_1BYTE_DATA(self),
PyUnicode_GET_LENGTH(self), maxcount
len1, maxcount
);
else
return ucs1lib_split_whitespace(
self, PyUnicode_1BYTE_DATA(self),
PyUnicode_GET_LENGTH(self), maxcount
len1, maxcount
);
case PyUnicode_2BYTE_KIND:
return ucs2lib_split_whitespace(
self, PyUnicode_2BYTE_DATA(self),
PyUnicode_GET_LENGTH(self), maxcount
len1, maxcount
);
case PyUnicode_4BYTE_KIND:
return ucs4lib_split_whitespace(
self, PyUnicode_4BYTE_DATA(self),
PyUnicode_GET_LENGTH(self), maxcount
len1, maxcount
);
default:
Py_UNREACHABLE();
}

kind1 = PyUnicode_KIND(self);
kind2 = PyUnicode_KIND(substring);
len1 = PyUnicode_GET_LENGTH(self);
len2 = PyUnicode_GET_LENGTH(substring);
if (kind1 < kind2 || len1 < len2) {
out = PyList_New(1);
Expand Down Expand Up @@ -9783,39 +9783,40 @@ rsplit(PyObject *self,
Py_ssize_t len1, len2;
PyObject* out;

if (maxcount < 0)
maxcount = PY_SSIZE_T_MAX;
len1 = PyUnicode_GET_LENGTH(self);
kind1 = PyUnicode_KIND(self);
if (maxcount < 0) {
maxcount = len1;
}

if (substring == NULL)
switch (PyUnicode_KIND(self)) {
switch (kind1) {
case PyUnicode_1BYTE_KIND:
if (PyUnicode_IS_ASCII(self))
return asciilib_rsplit_whitespace(
self, PyUnicode_1BYTE_DATA(self),
PyUnicode_GET_LENGTH(self), maxcount
len1, maxcount
);
else
return ucs1lib_rsplit_whitespace(
self, PyUnicode_1BYTE_DATA(self),
PyUnicode_GET_LENGTH(self), maxcount
len1, maxcount
);
case PyUnicode_2BYTE_KIND:
return ucs2lib_rsplit_whitespace(
self, PyUnicode_2BYTE_DATA(self),
PyUnicode_GET_LENGTH(self), maxcount
len1, maxcount
);
case PyUnicode_4BYTE_KIND:
return ucs4lib_rsplit_whitespace(
self, PyUnicode_4BYTE_DATA(self),
PyUnicode_GET_LENGTH(self), maxcount
len1, maxcount
);
default:
Py_UNREACHABLE();
}

kind1 = PyUnicode_KIND(self);
kind2 = PyUnicode_KIND(substring);
len1 = PyUnicode_GET_LENGTH(self);
len2 = PyUnicode_GET_LENGTH(substring);
if (kind1 < kind2 || len1 < len2) {
out = PyList_New(1);
Expand Down

0 comments on commit 50b2261

Please sign in to comment.