Author: Maciej Fijalkowski <fij...@gmail.com> Branch: Changeset: r49533:54e972f7c8ba Date: 2011-11-18 18:26 +0200 http://bitbucket.org/pypy/pypy/changeset/54e972f7c8ba/
Log: merge diff --git a/pypy/rpython/lltypesystem/rbuilder.py b/pypy/rpython/lltypesystem/rbuilder.py --- a/pypy/rpython/lltypesystem/rbuilder.py +++ b/pypy/rpython/lltypesystem/rbuilder.py @@ -123,9 +123,10 @@ def ll_build(ll_builder): final_size = ll_builder.used assert final_size >= 0 - if final_size == ll_builder.allocated: - return ll_builder.buf - return rgc.ll_shrink_array(ll_builder.buf, final_size) + if final_size < ll_builder.allocated: + ll_builder.allocated = final_size + ll_builder.buf = rgc.ll_shrink_array(ll_builder.buf, final_size) + return ll_builder.buf @classmethod def ll_is_true(cls, ll_builder): diff --git a/pypy/rpython/test/test_rbuilder.py b/pypy/rpython/test/test_rbuilder.py --- a/pypy/rpython/test/test_rbuilder.py +++ b/pypy/rpython/test/test_rbuilder.py @@ -1,3 +1,4 @@ +from __future__ import with_statement import py from pypy.rlib.rstring import StringBuilder, UnicodeBuilder diff --git a/pypy/translator/c/test/test_newgc.py b/pypy/translator/c/test/test_newgc.py --- a/pypy/translator/c/test/test_newgc.py +++ b/pypy/translator/c/test/test_newgc.py @@ -1318,6 +1318,23 @@ res = self.run('string_builder_over_allocation') assert res[1000] == 'y' + def definestr_string_builder_multiple_builds(cls): + import gc + def fn(_): + s = StringBuilder(4) + got = [] + for i in range(50): + s.append(chr(33+i)) + got.append(s.build()) + gc.collect() + return ' '.join(got) + return fn + + def test_string_builder_multiple_builds(self): + res = self.run('string_builder_multiple_builds') + assert res == ' '.join([''.join(map(chr, range(33, 33+length))) + for length in range(1, 51)]) + def define_nursery_hash_base(cls): from pypy.rlib.objectmodel import compute_identity_hash class A: _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit