Author: Armin Rigo <[email protected]>
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
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit