[pypy-commit] pypy inline-dict-ops: make the test pass, unsure if it"s complete
fijal
noreply at buildbot.pypy.org
Wed Jun 22 19:51:35 CEST 2011
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: inline-dict-ops
Changeset: r45059:6fbbe0d349ae
Date: 2011-06-22 19:56 +0200
http://bitbucket.org/pypy/pypy/changeset/6fbbe0d349ae/
Log: make the test pass, unsure if it"s complete
diff --git a/pypy/jit/codewriter/jtransform.py b/pypy/jit/codewriter/jtransform.py
--- a/pypy/jit/codewriter/jtransform.py
+++ b/pypy/jit/codewriter/jtransform.py
@@ -707,7 +707,15 @@
opname = "unicodegetitem"
return SpaceOperation(opname, [op.args[0], op.args[2]], op.result)
else:
- return SpaceOperation('getinteriorfield', op.args[:], op.result)
+ v_inst, v_index, c_field = op.args
+ # only GcArray of Struct supported
+ assert isinstance(v_inst.concretetype.TO, lltype.GcArray)
+ STRUCT = v_inst.concretetype.TO.OF
+ assert isinstance(STRUCT, lltype.Struct)
+ sizedescr = self.cpu.sizeof(STRUCT)
+ fielddescr = self.cpu.fielddescrof(STRUCT, c_field.value)
+ args = [v_inst, v_index, sizedescr, fielddescr]
+ return SpaceOperation('getinteriorfield', args, op.result)
def rewrite_op_setinteriorfield(self, op):
# only supports strings and unicodes
diff --git a/pypy/jit/codewriter/test/test_jtransform.py b/pypy/jit/codewriter/test/test_jtransform.py
--- a/pypy/jit/codewriter/test/test_jtransform.py
+++ b/pypy/jit/codewriter/test/test_jtransform.py
@@ -23,6 +23,8 @@
return ('calldescr', FUNC, ARGS, RESULT)
def fielddescrof(self, STRUCT, name):
return ('fielddescr', STRUCT, name)
+ def interiorfielddescrof(self, ARRAY, name):
+ return ('interiorfielddescr', ARRAY, name)
def arraydescrof(self, ARRAY):
return FakeDescr(('arraydescr', ARRAY))
def sizeof(self, STRUCT):
@@ -649,13 +651,15 @@
def test_dict_getinteriorfield():
DICT = lltype.GcArray(lltype.Struct('ENTRY', ('v', lltype.Signed),
('k', lltype.Signed)))
- v = varoftype(DICT)
+ v = varoftype(lltype.Ptr(DICT))
i = varoftype(lltype.Signed)
v_result = varoftype(lltype.Signed)
op = SpaceOperation('getinteriorfield', [v, i, Constant('v', lltype.Void)],
v_result)
- op1 = Transformer().rewrite_operation(op)
+ op1 = Transformer(FakeCPU()).rewrite_operation(op)
assert op1.opname == 'getinteriorfield'
+ assert op1.args == [v, i, ('sizedescr', DICT.OF),
+ ('fielddescr', DICT.OF, 'v')]
def test_str_setinteriorfield():
v = varoftype(lltype.Ptr(rstr.STR))
More information about the pypy-commit
mailing list