Author: Armin Rigo <ar...@tunes.org> Branch: Changeset: r67863:bed2204ab3ba Date: 2013-11-06 11:07 +0100 http://bitbucket.org/pypy/pypy/changeset/bed2204ab3ba/
Log: Test and fix diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py b/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py --- a/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py +++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py @@ -5137,6 +5137,25 @@ """ self.optimize_strunicode_loop(ops, expected) + def test_str_copy_bug1(self): + ops = """ + [i0] + p1 = newstr(1) + strsetitem(p1, 0, i0) + p2 = newstr(1) + escape(p2) + copystrcontent(p1, p2, 0, 0, 1) + finish() + """ + expected = """ + [i0] + p2 = newstr(1) + escape(p2) + strsetitem(p2, 0, i0) + finish() + """ + self.optimize_strunicode_loop(ops, expected) + def test_call_pure_vstring_const(self): py.test.skip("implement me") ops = """ diff --git a/rpython/jit/metainterp/optimizeopt/vstring.py b/rpython/jit/metainterp/optimizeopt/vstring.py --- a/rpython/jit/metainterp/optimizeopt/vstring.py +++ b/rpython/jit/metainterp/optimizeopt/vstring.py @@ -154,6 +154,7 @@ return self._chars[index] # may return None! def setitem(self, index, charvalue): + assert self.is_virtual() assert isinstance(charvalue, optimizer.OptValue) assert self._chars[index] is None, ( "setitem() on an already-initialized location") @@ -524,7 +525,7 @@ actual_length = length.force_box(self).getint() for index in range(actual_length): vresult = self.strgetitem(src, optimizer.ConstantValue(ConstInt(index + src_start)), mode) - if isinstance(dst, VStringPlainValue): + if isinstance(dst, VStringPlainValue) and dst.is_virtual(): dst.setitem(index + dst_start, vresult) else: op = ResOperation(mode.STRSETITEM, [ _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit