[pypy-svn] r74464 - in pypy/branch/blackhole-improvement/pypy/jit/codewriter: . test

arigo at codespeak.net arigo at codespeak.net
Mon May 10 14:59:42 CEST 2010


Author: arigo
Date: Mon May 10 14:59:41 2010
New Revision: 74464

Modified:
   pypy/branch/blackhole-improvement/pypy/jit/codewriter/jtransform.py
   pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_jtransform.py
Log:
setinteriorfield.


Modified: pypy/branch/blackhole-improvement/pypy/jit/codewriter/jtransform.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/codewriter/jtransform.py	(original)
+++ pypy/branch/blackhole-improvement/pypy/jit/codewriter/jtransform.py	Mon May 10 14:59:41 2010
@@ -454,6 +454,19 @@
             opname = "unicodegetitem"
         return SpaceOperation(opname, [op.args[0], op.args[2]], op.result)
 
+    def rewrite_op_setinteriorfield(self, op):
+        # only supports strings and unicodes
+        assert len(op.args) == 4
+        assert op.args[1].value == 'chars'
+        optype = op.args[0].concretetype
+        if optype == lltype.Ptr(rstr.STR):
+            opname = "strsetitem"
+        else:
+            assert optype == lltype.Ptr(rstr.UNICODE)
+            opname = "unicodesetitem"
+        return SpaceOperation(opname, [op.args[0], op.args[2], op.args[3]],
+                              op.result)
+
     def _rewrite_equality(self, op, opname):
         arg0, arg1 = op.args
         if isinstance(arg0, Constant) and not arg0.value:

Modified: pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_jtransform.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_jtransform.py	(original)
+++ pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_jtransform.py	Mon May 10 14:59:41 2010
@@ -450,3 +450,29 @@
     assert op1.opname == 'unicodegetitem'
     assert op1.args == [v, v_index]
     assert op1.result == v_result
+
+def test_str_setinteriorfield():
+    v = varoftype(lltype.Ptr(rstr.STR))
+    v_index = varoftype(lltype.Signed)
+    v_newchr = varoftype(lltype.Char)
+    v_void = varoftype(lltype.Void)
+    op = SpaceOperation('setinteriorfield',
+                        [v, Constant('chars', lltype.Void), v_index, v_newchr],
+                        v_void)
+    op1 = Transformer().rewrite_operation(op)
+    assert op1.opname == 'strsetitem'
+    assert op1.args == [v, v_index, v_newchr]
+    assert op1.result == v_void
+
+def test_unicode_setinteriorfield():
+    v = varoftype(lltype.Ptr(rstr.UNICODE))
+    v_index = varoftype(lltype.Signed)
+    v_newchr = varoftype(lltype.UniChar)
+    v_void = varoftype(lltype.Void)
+    op = SpaceOperation('setinteriorfield',
+                        [v, Constant('chars', lltype.Void), v_index, v_newchr],
+                        v_void)
+    op1 = Transformer().rewrite_operation(op)
+    assert op1.opname == 'unicodesetitem'
+    assert op1.args == [v, v_index, v_newchr]
+    assert op1.result == v_void



More information about the Pypy-commit mailing list