[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