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

Reply via email to