Author: Alex Gaynor <alex.gay...@gmail.com> Branch: dynamic-specialized-tuple Changeset: r53605:ae7106d140d0 Date: 2012-03-14 14:23 -0700 http://bitbucket.org/pypy/pypy/changeset/ae7106d140d0/
Log: even more hacks. I think we should scrap all of this work and rethink. diff --git a/pypy/jit/backend/llgraph/runner.py b/pypy/jit/backend/llgraph/runner.py --- a/pypy/jit/backend/llgraph/runner.py +++ b/pypy/jit/backend/llgraph/runner.py @@ -334,7 +334,7 @@ token = history.getkind(getattr(S, fieldname)) return self.getdescr(ofs, token[0], name=fieldname) - def interiorfielddescrof(self, A, fieldname): + def interiorfielddescrof(self, A, fieldname, force_kind=None): width = symbolic.get_size(A) if isinstance(A, lltype.GcArray): S = A.OF @@ -343,6 +343,8 @@ else: ofs, size = symbolic.get_field_token(A, fieldname) token = history.getkind(getattr(A, fieldname).OF) + if force_kind is not None: + token = force_kind return self.getdescr(ofs, token[0], name=fieldname, width=width) def interiorfielddescrof_dynamic(self, offset, width, fieldsize, 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 @@ -1,3 +1,5 @@ +import copy + import py from pypy.jit.codewriter import support, heaptracker, longlong @@ -5,9 +7,9 @@ from pypy.jit.codewriter.flatten import ListOfKind, IndirectCallTargets from pypy.jit.codewriter.policy import log from pypy.jit.metainterp import quasiimmut +from pypy.jit.metainterp.blackhole import BlackholeInterpreter from pypy.jit.metainterp.history import getkind from pypy.jit.metainterp.typesystem import deref, arrayItem -from pypy.jit.metainterp.blackhole import BlackholeInterpreter from pypy.objspace.flow.model import SpaceOperation, Variable, Constant, c_last_exception from pypy.rlib import objectmodel from pypy.rlib.jit import _we_are_jitted @@ -16,6 +18,7 @@ from pypy.translator.simplify import get_funcobj from pypy.translator.unsimplify import varoftype + class UnsupportedMallocFlags(Exception): pass @@ -234,6 +237,9 @@ raise Exception("Must cast_adr_to_ptr of directly read adr") prev_op.opname = 'getinteriorfield_gc_r' prev_op.result = op.result + descr = copy.copy(prev_op.args[2]) + descr.typeinfo = "r" + prev_op.args = prev_op.args[:2] + [descr] return prev_op def rewrite_op_cast_bool_to_int(self, op): pass @@ -856,9 +862,9 @@ if orig_value is not None: v_value = orig_value + kind = getkind(v_value.concretetype)[0] descr = self.cpu.interiorfielddescrof(v_inst.concretetype.TO, - c_field.value) - kind = getkind(v_value.concretetype)[0] + c_field.value, force_kind=kind) args = [v_inst, v_index, v_value, descr] return SpaceOperation('setinteriorfield_gc_%s' % kind, args, op.result) 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 @@ -38,7 +38,7 @@ return ('calldescr', FUNC, ARGS, RESULT) def fielddescrof(self, STRUCT, name): return ('fielddescr', STRUCT, name) - def interiorfielddescrof(self, ARRAY, name): + def interiorfielddescrof(self, ARRAY, name, force_kind=None): return ('interiorfielddescr', ARRAY, name) def arraydescrof(self, ARRAY): return FakeDescr(('arraydescr', ARRAY)) _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit