[Python-checkins] r71091 - in python/branches/py3k/Objects: bytearrayobject.c bytesobject.c
alexandre.vassalotti
python-checkins at python.org
Fri Apr 3 08:38:02 CEST 2009
Author: alexandre.vassalotti
Date: Fri Apr 3 08:38:02 2009
New Revision: 71091
Log:
Optimize slicing of bytes and bytearray by avoiding useless copying.
This restores the behavior that was present in Python 2.x.
Modified:
python/branches/py3k/Objects/bytearrayobject.c
python/branches/py3k/Objects/bytesobject.c
Modified: python/branches/py3k/Objects/bytearrayobject.c
==============================================================================
--- python/branches/py3k/Objects/bytearrayobject.c (original)
+++ python/branches/py3k/Objects/bytearrayobject.c Fri Apr 3 08:38:02 2009
@@ -411,18 +411,18 @@
}
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;
}
}
Modified: python/branches/py3k/Objects/bytesobject.c
==============================================================================
--- python/branches/py3k/Objects/bytesobject.c (original)
+++ python/branches/py3k/Objects/bytesobject.c Fri Apr 3 08:38:02 2009
@@ -951,19 +951,17 @@
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;
}
}
More information about the Python-checkins
mailing list