Commit e2641f45 authored by Alexandre Vassalotti's avatar Alexandre Vassalotti

Optimize slicing of bytes and bytearray by avoiding useless copying.

This restores the behavior that was present in Python 2.x.
parent 1102062a
......@@ -411,18 +411,18 @@ bytes_subscript(PyByteArrayObject *self, PyObject *index)
}
else {
char *source_buf = PyByteArray_AS_STRING(self);
char *result_buf = (char *)PyMem_Malloc(slicelength);
char *result_buf;
PyObject *result;
if (result_buf == NULL)
return PyErr_NoMemory();
result = PyByteArray_FromStringAndSize(NULL, slicelength);
if (result == NULL)
return NULL;
result_buf = PyByteArray_AS_STRING(result);
for (cur = start, i = 0; i < slicelength;
cur += step, i++) {
result_buf[i] = source_buf[cur];
}
result = PyByteArray_FromStringAndSize(result_buf, slicelength);
PyMem_Free(result_buf);
return result;
}
}
......
......@@ -951,19 +951,17 @@ string_subscript(PyBytesObject* self, PyObject* item)
slicelength);
}
else {
source_buf = PyBytes_AsString((PyObject*)self);
result_buf = (char *)PyMem_Malloc(slicelength);
if (result_buf == NULL)
return PyErr_NoMemory();
source_buf = PyBytes_AS_STRING(self);
result = PyBytes_FromStringAndSize(NULL, slicelength);
if (result == NULL)
return NULL;
result_buf = PyBytes_AS_STRING(result);
for (cur = start, i = 0; i < slicelength;
cur += step, i++) {
result_buf[i] = source_buf[cur];
}
result = PyBytes_FromStringAndSize(result_buf,
slicelength);
PyMem_Free(result_buf);
return result;
}
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment