Author: Ronan Lamy <ronan.l...@gmail.com> Branch: Changeset: r93130:870515a86876 Date: 2017-11-23 06:06 +0000 http://bitbucket.org/pypy/pypy/changeset/870515a86876/
Log: Use a UnicodeBuilder in _io.TextIOWrapper.readline diff --git a/pypy/module/_io/interp_textio.py b/pypy/module/_io/interp_textio.py --- a/pypy/module/_io/interp_textio.py +++ b/pypy/module/_io/interp_textio.py @@ -646,11 +646,10 @@ self._writeflush(space) limit = convert_size(space, w_limit) - chunked = 0 line = None remaining = None - chunks = [] + builder = UnicodeBuilder() while True: # First, get some data if necessary @@ -684,6 +683,7 @@ line_len = len(line) endpos, consumed = self._find_line_ending(line, start, line_len) + chunked = builder.getlength() if endpos >= 0: if limit >= 0 and endpos >= start + limit - chunked: endpos = start + limit - chunked @@ -702,8 +702,8 @@ # No line ending seen yet - put aside current data if endpos > start: s = line[start:endpos] - chunks.append(s) - chunked += len(s) + builder.append(s) + # There may be some remaining bytes we'll have to prepend to the # next chunk of data if endpos < line_len: @@ -719,18 +719,12 @@ self.decoded_chars_used = decoded_chars_used if start > 0 or endpos < len(line): line = line[start:endpos] - if remaining: - chunks.append(remaining) - remaining = None - if chunks: - if line: - chunks.append(line) - line = u''.join(chunks) + builder.append(line) + elif remaining: + builder.append(remaining) - if line: - return space.newunicode(line) - else: - return space.newunicode(u'') + result = builder.build() + return space.newunicode(result) # _____________________________________________________________ # write methods _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit