Skip to content

Commit 9f7bbaf

Browse files
authored
gh-129813, PEP 782: Optimize byteswriter_resize() (#139101)
There is no need to copy the small_buffer in PyBytesWriter_Create().
1 parent d1904b9 commit 9f7bbaf

File tree

1 file changed

+15
-11
lines changed

1 file changed

+15
-11
lines changed

Objects/bytesobject.c

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3801,7 +3801,7 @@ byteswriter_allocated(PyBytesWriter *writer)
38013801

38023802

38033803
static inline int
3804-
byteswriter_resize(PyBytesWriter *writer, Py_ssize_t size, int overallocate)
3804+
byteswriter_resize(PyBytesWriter *writer, Py_ssize_t size, int resize)
38053805
{
38063806
assert(size >= 0);
38073807

@@ -3810,7 +3810,7 @@ byteswriter_resize(PyBytesWriter *writer, Py_ssize_t size, int overallocate)
38103810
return 0;
38113811
}
38123812

3813-
if (overallocate & writer->overallocate) {
3813+
if (resize & writer->overallocate) {
38143814
if (size <= (PY_SSIZE_T_MAX - size / OVERALLOCATE_FACTOR)) {
38153815
size += size / OVERALLOCATE_FACTOR;
38163816
}
@@ -3834,25 +3834,29 @@ byteswriter_resize(PyBytesWriter *writer, Py_ssize_t size, int overallocate)
38343834
if (writer->obj == NULL) {
38353835
return -1;
38363836
}
3837-
assert((size_t)size > sizeof(writer->small_buffer));
3838-
memcpy(PyByteArray_AS_STRING(writer->obj),
3839-
writer->small_buffer,
3840-
sizeof(writer->small_buffer));
3837+
if (resize) {
3838+
assert((size_t)size > sizeof(writer->small_buffer));
3839+
memcpy(PyByteArray_AS_STRING(writer->obj),
3840+
writer->small_buffer,
3841+
sizeof(writer->small_buffer));
3842+
}
38413843
}
38423844
else {
38433845
writer->obj = PyBytes_FromStringAndSize(NULL, size);
38443846
if (writer->obj == NULL) {
38453847
return -1;
38463848
}
3847-
assert((size_t)size > sizeof(writer->small_buffer));
3848-
memcpy(PyBytes_AS_STRING(writer->obj),
3849-
writer->small_buffer,
3850-
sizeof(writer->small_buffer));
3849+
if (resize) {
3850+
assert((size_t)size > sizeof(writer->small_buffer));
3851+
memcpy(PyBytes_AS_STRING(writer->obj),
3852+
writer->small_buffer,
3853+
sizeof(writer->small_buffer));
3854+
}
38513855
}
38523856

38533857
#ifdef Py_DEBUG
38543858
Py_ssize_t allocated = byteswriter_allocated(writer);
3855-
if (overallocate && allocated > old_allocated) {
3859+
if (resize && allocated > old_allocated) {
38563860
memset(byteswriter_data(writer) + old_allocated, 0xff,
38573861
allocated - old_allocated);
38583862
}

0 commit comments

Comments
 (0)