[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