Author: Maciej Fijalkowski <fij...@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)) _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit