(original) (raw)

changeset: 76733:f58159e5d52f parent: 76731:0a9143d7b097 user: Victor Stinner victor.stinner@gmail.com date: Thu May 03 19:27:14 2012 +0200 files: Objects/unicodeobject.c description: Issue #14687: Remove redundant length attribute of unicode_write_t The length can be read directly from the buffer diff -r 0a9143d7b097 -r f58159e5d52f Objects/unicodeobject.c --- a/Objects/unicodeobject.c Thu May 03 13:43:07 2012 +0200 +++ b/Objects/unicodeobject.c Thu May 03 19:27:14 2012 +0200 @@ -13661,7 +13661,6 @@ void *data; enum PyUnicode_Kind kind; Py_UCS4 maxchar; - Py_ssize_t length; Py_ssize_t pos; }; @@ -13678,8 +13677,7 @@ Py_ssize_t length, Py_UCS4 maxchar) { writer->pos = 0; - writer->length = length; - writer->buffer = PyUnicode_New(writer->length, maxchar); + writer->buffer = PyUnicode_New(length, maxchar); if (writer->buffer == NULL) return -1; unicode_writer_update(writer); @@ -13699,16 +13697,14 @@ } newlen = writer->pos + length; - if (newlen > writer->length) { + if (newlen > PyUnicode_GET_LENGTH(writer->buffer)) { /* overallocate 25% to limit the number of resize */ - if (newlen > PY_SSIZE_T_MAX - newlen / 4) - writer->length = newlen; - else - writer->length = newlen + newlen / 4; + if (newlen <= (PY_SSIZE_T_MAX - newlen / 4)) + newlen += newlen / 4; if (maxchar > writer->maxchar) { /* resize + widen */ - newbuffer = PyUnicode_New(writer->length, maxchar); + newbuffer = PyUnicode_New(newlen, maxchar); if (newbuffer == NULL) return -1; PyUnicode_CopyCharacters(newbuffer, 0, @@ -13716,7 +13712,7 @@ Py_DECREF(writer->buffer); } else { - newbuffer = resize_compact(writer->buffer, writer->length); + newbuffer = resize_compact(writer->buffer, newlen); if (newbuffer == NULL) return -1; } @@ -13740,7 +13736,7 @@ maxchar = _PyUnicode_FindMaxChar(str, start, start + length); if (unicode_writer_prepare(writer, length, maxchar) == -1) return -1; - assert((writer->pos + length) <= writer->length); + assert((writer->pos + length) <= PyUnicode_GET_LENGTH(writer->buffer)); copy_characters(writer->buffer, writer->pos, str, start, length); writer->pos += length; @@ -13754,7 +13750,7 @@ { if (unicode_writer_prepare(writer, 1, ch) == -1) return -1; - assert((writer->pos + 1) <= writer->length); + assert((writer->pos + 1) <= PyUnicode_GET_LENGTH(writer->buffer)); PyUnicode_WRITE(writer->kind, writer->data, writer->pos, ch); writer->pos += 1; return 0; /victor.stinner@gmail.com