Author: Armin Rigo <ar...@tunes.org> Branch: Changeset: r91487:2dbc1ac2dab9 Date: 2017-06-02 11:54 +0200 http://bitbucket.org/pypy/pypy/changeset/2dbc1ac2dab9/
Log: __pypy__.StringBuilder: after build(), we can continue to append more strings to the same builder. This is supported since 2ff5087aca28 in RPython. diff --git a/pypy/module/__pypy__/interp_builders.py b/pypy/module/__pypy__/interp_builders.py --- a/pypy/module/__pypy__/interp_builders.py +++ b/pypy/module/__pypy__/interp_builders.py @@ -18,31 +18,25 @@ else: self.builder = builder_cls(size) - def _check_done(self, space): - if self.builder is None: - raise oefmt(space.w_ValueError, - "Can't operate on a built builder") - @unwrap_spec(size=int) def descr__new__(space, w_subtype, size=-1): return W_Builder(space, size) @unwrap_spec(s=unwrap) def descr_append(self, space, s): - self._check_done(space) self.builder.append(s) @unwrap_spec(s=unwrap, start=int, end=int) def descr_append_slice(self, space, s, start, end): - self._check_done(space) if not 0 <= start <= end <= len(s): raise oefmt(space.w_ValueError, "bad start/stop") self.builder.append_slice(s, start, end) def descr_build(self, space): - self._check_done(space) w_s = getattr(space, newmethod)(self.builder.build()) - self.builder = None + # after build(), we can continue to append more strings + # to the same builder. This is supported since + # 2ff5087aca28 in RPython. return w_s def descr_len(self, space): diff --git a/pypy/module/__pypy__/test/test_builders.py b/pypy/module/__pypy__/test/test_builders.py --- a/pypy/module/__pypy__/test/test_builders.py +++ b/pypy/module/__pypy__/test/test_builders.py @@ -9,8 +9,9 @@ b.append(u"1") s = b.build() assert s == u"abc1231" - raises(ValueError, b.build) - raises(ValueError, b.append, u"123") + assert b.build() == s + b.append(u"123") + assert b.build() == s + u"123" def test_preallocate(self): from __pypy__.builders import UnicodeBuilder @@ -26,8 +27,9 @@ b.append_slice(u"abcdefgh", 2, 5) raises(ValueError, b.append_slice, u"1", 2, 1) s = b.build() - assert s == "cde" - raises(ValueError, b.append_slice, u"abc", 1, 2) + assert s == u"cde" + b.append_slice(u"abc", 1, 2) + assert b.build() == u"cdeb" def test_stringbuilder(self): from __pypy__.builders import StringBuilder @@ -37,6 +39,6 @@ assert len(b) == 6 b.append("you and me") s = b.build() - raises(ValueError, len, b) + assert len(b) == 16 assert s == "abc123you and me" - raises(ValueError, b.build) + assert b.build() == s _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit