diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2012-05-03 19:27:14 +0200 |
---|---|---|
committer | Victor Stinner <victor.stinner@gmail.com> | 2012-05-03 19:27:14 +0200 |
commit | bf4e2663975b87e646fc75b7fc6897879d40f272 (patch) | |
tree | 64bb1ea6e6337d1c2fab92d8fc34581e0a66d489 /Objects | |
parent | 7989157e49b65433e7c2c2fb53c27333262f3b36 (diff) | |
download | cpython-git-bf4e2663975b87e646fc75b7fc6897879d40f272.tar.gz |
Issue #14687: Remove redundant length attribute of unicode_write_t
The length can be read directly from the buffer
Diffstat (limited to 'Objects')
-rw-r--r-- | Objects/unicodeobject.c | 20 |
1 files changed, 8 insertions, 12 deletions
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index 52f42460df..d816a46549 100644 --- 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_writer_t *writer, 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 @@ unicode_writer_prepare(struct unicode_writer_t *writer, } 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 @@ unicode_writer_prepare(struct unicode_writer_t *writer, 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 @@ unicode_writer_write_str( 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 @@ unicode_writer_write_char( { 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; |