[pypy-svn] r74462 - in pypy/branch/blackhole-improvement/pypy/jit/codewriter: . test
arigo at codespeak.net
arigo at codespeak.net
Mon May 10 14:55:43 CEST 2010
Author: arigo
Date: Mon May 10 14:55:42 2010
New Revision: 74462
Modified:
pypy/branch/blackhole-improvement/pypy/jit/codewriter/jtransform.py
pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_jtransform.py
Log:
getinteriorfield.
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:55:42 2010
@@ -430,6 +430,18 @@
sizedescr = self.cpu.sizeof(STRUCT)
return SpaceOperation('new', [sizedescr], op.result)
+ def rewrite_op_getinteriorfield(self, op):
+ # only supports strings and unicodes
+ assert len(op.args) == 3
+ assert op.args[1].value == 'chars'
+ optype = op.args[0].concretetype
+ if optype == lltype.Ptr(rstr.STR):
+ opname = "strgetitem"
+ else:
+ assert optype == lltype.Ptr(rstr.UNICODE)
+ opname = "unicodegetitem"
+ return SpaceOperation(opname, [op.args[0], op.args[2]], 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:55:42 2010
@@ -404,3 +404,27 @@
op1 = Transformer().rewrite_operation(op)
assert op1.opname == 'int_is_true'
assert op1.args == [v1]
+
+def test_str_getinteriorfield():
+ v = varoftype(lltype.Ptr(rstr.STR))
+ v_index = varoftype(lltype.Signed)
+ v_result = varoftype(lltype.Char)
+ op = SpaceOperation('getinteriorfield',
+ [v, Constant('chars', lltype.Void), v_index],
+ v_result)
+ op1 = Transformer().rewrite_operation(op)
+ assert op1.opname == 'strgetitem'
+ assert op1.args == [v, v_index]
+ assert op1.result == v_result
+
+def test_unicode_getinteriorfield():
+ v = varoftype(lltype.Ptr(rstr.UNICODE))
+ v_index = varoftype(lltype.Signed)
+ v_result = varoftype(lltype.UniChar)
+ op = SpaceOperation('getinteriorfield',
+ [v, Constant('chars', lltype.Void), v_index],
+ v_result)
+ op1 = Transformer().rewrite_operation(op)
+ assert op1.opname == 'unicodegetitem'
+ assert op1.args == [v, v_index]
+ assert op1.result == v_result
More information about the Pypy-commit
mailing list