cpython: f58159e5d52f (original) (raw)
--- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -13661,7 +13661,6 @@ struct unicode_writer_t { void *data; enum PyUnicode_Kind kind; Py_UCS4 maxchar;
- Py_ssize_t length; Py_ssize_t pos; }; @@ -13678,8 +13677,7 @@ unicode_writer_init(struct unicode_write Py_ssize_t length, Py_UCS4 maxchar)
- writer->buffer = PyUnicode_New(length, maxchar); if (writer->buffer == NULL) return -1; unicode_writer_update(writer); @@ -13699,16 +13697,14 @@ unicode_writer_prepare(struct unicode_wr } newlen = writer->pos + length;
- if (newlen > PyUnicode_GET_LENGTH(writer->buffer)) { /* overallocate 25% to limit the number of resize */
if (newlen > PY_SSIZE_T_MAX - newlen / 4)[](#l1.28)
writer->length = newlen;[](#l1.29)
else[](#l1.30)
writer->length = newlen + newlen / 4;[](#l1.31)
if (newlen <= (PY_SSIZE_T_MAX - newlen / 4))[](#l1.32)
newlen += newlen / 4;[](#l1.33)
if (maxchar > writer->maxchar) { /* resize + widen */
newbuffer = PyUnicode_New(writer->length, maxchar);[](#l1.37)
newbuffer = PyUnicode_New(newlen, maxchar);[](#l1.38) if (newbuffer == NULL)[](#l1.39) return -1;[](#l1.40) PyUnicode_CopyCharacters(newbuffer, 0,[](#l1.41)
@@ -13716,7 +13712,7 @@ unicode_writer_prepare(struct unicode_wr Py_DECREF(writer->buffer); } else {
newbuffer = resize_compact(writer->buffer, writer->length);[](#l1.46)
newbuffer = resize_compact(writer->buffer, newlen);[](#l1.47) if (newbuffer == NULL)[](#l1.48) return -1;[](#l1.49) }[](#l1.50)
@@ -13740,7 +13736,7 @@ unicode_writer_write_str( maxchar = _PyUnicode_FindMaxChar(str, start, start + length); if (unicode_writer_prepare(writer, length, maxchar) == -1) return -1;