Author: Alex Gaynor <[email protected]>
Branch: jit-dynamic-getarrayitem
Changeset: r49428:4f3e2c9dda26
Date: 2011-11-15 00:25 -0500
http://bitbucket.org/pypy/pypy/changeset/4f3e2c9dda26/

Log:    translation-ish fix, except it still breaks

diff --git a/pypy/jit/backend/llgraph/llimpl.py 
b/pypy/jit/backend/llgraph/llimpl.py
--- a/pypy/jit/backend/llgraph/llimpl.py
+++ b/pypy/jit/backend/llgraph/llimpl.py
@@ -326,12 +326,12 @@
     loop = _from_opaque(loop)
     loop.operations.append(Operation(opnum))
 
-def compile_add_descr(loop, ofs, type, arg_types, extrainfo):
+def compile_add_descr(loop, ofs, type, arg_types, extrainfo, width):
     from pypy.jit.backend.llgraph.runner import Descr
     loop = _from_opaque(loop)
     op = loop.operations[-1]
     assert isinstance(type, str) and len(type) == 1
-    op.descr = Descr(ofs, type, arg_types=arg_types, extrainfo=extrainfo)
+    op.descr = Descr(ofs, type, arg_types=arg_types, extrainfo=extrainfo, 
width=width)
 
 def compile_add_descr_arg(loop, ofs, type, arg_types):
     from pypy.jit.backend.llgraph.runner import Descr
@@ -828,11 +828,11 @@
 
     def op_getinteriorfield_raw(self, descr, array, index):
         if descr.typeinfo == REF:
-            return do_getinteriorfield_raw_ptr(array, index, descr.extrainfo, 
descr.ofs)
+            return do_getinteriorfield_raw_ptr(array, index, descr.width, 
descr.ofs)
         elif descr.typeinfo == INT:
-            return do_getinteriorfield_raw_int(array, index, descr.extrainfo, 
descr.ofs)
+            return do_getinteriorfield_raw_int(array, index, descr.width, 
descr.ofs)
         elif descr.typeinfo == FLOAT:
-            return do_getinteriorfield_raw_float(array, index, 
descr.extrainfo, descr.ofs)
+            return do_getinteriorfield_raw_float(array, index, descr.width, 
descr.ofs)
         else:
             raise NotImplementedError
 
@@ -851,11 +851,11 @@
 
     def op_setinteriorfield_raw(self, descr, array, index, newvalue):
         if descr.typeinfo == REF:
-            return do_setinteriorfield_raw_ptr(array, index, newvalue, 
descr.extrainfo, descr.ofs)
+            return do_setinteriorfield_raw_ptr(array, index, newvalue, 
descr.width, descr.ofs)
         elif descr.typeinfo == INT:
-            return do_setinteriorfield_raw_int(array, index, newvalue, 
descr.extrainfo, descr.ofs)
+            return do_setinteriorfield_raw_int(array, index, newvalue, 
descr.width, descr.ofs)
         elif descr.typeinfo == FLOAT:
-            return do_setinteriorfield_raw_float(array, index, newvalue, 
descr.extrainfo, descr.ofs)
+            return do_setinteriorfield_raw_float(array, index, newvalue, 
descr.width, descr.ofs)
         else:
             raise NotImplementedError
 
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
@@ -23,8 +23,10 @@
 class Descr(history.AbstractDescr):
 
     def __init__(self, ofs, typeinfo, extrainfo=None, name=None,
-                 arg_types=None, count_fields_if_immut=-1, ffi_flags=0):
+                 arg_types=None, count_fields_if_immut=-1, ffi_flags=0, 
width=-1):
+
         self.ofs = ofs
+        self.width = width
         self.typeinfo = typeinfo
         self.extrainfo = extrainfo
         self.name = name
@@ -119,14 +121,14 @@
         return False
 
     def getdescr(self, ofs, typeinfo='?', extrainfo=None, name=None,
-                 arg_types=None, count_fields_if_immut=-1, ffi_flags=0):
+                 arg_types=None, count_fields_if_immut=-1, ffi_flags=0, 
width=-1):
         key = (ofs, typeinfo, extrainfo, name, arg_types,
-               count_fields_if_immut, ffi_flags)
+               count_fields_if_immut, ffi_flags, width)
         try:
             return self._descrs[key]
         except KeyError:
             descr = Descr(ofs, typeinfo, extrainfo, name, arg_types,
-                          count_fields_if_immut, ffi_flags)
+                          count_fields_if_immut, ffi_flags, width)
             self._descrs[key] = descr
             return descr
 
@@ -179,7 +181,8 @@
             descr = op.getdescr()
             if isinstance(descr, Descr):
                 llimpl.compile_add_descr(c, descr.ofs, descr.typeinfo,
-                                         descr.arg_types, descr.extrainfo)
+                                         descr.arg_types, descr.extrainfo,
+                                         descr.width)
             if (isinstance(descr, history.LoopToken) and
                 op.getopnum() != rop.JUMP):
                 llimpl.compile_add_loop_token(c, descr)
@@ -324,10 +327,10 @@
 
     def interiorfielddescrof(self, A, fieldname):
         S = A.OF
-        ofs2 = symbolic.get_size(A)
+        width = symbolic.get_size(A)
         ofs, size = symbolic.get_field_token(S, fieldname)
         token = history.getkind(getattr(S, fieldname))
-        return self.getdescr(ofs, token[0], name=fieldname, extrainfo=ofs2)
+        return self.getdescr(ofs, token[0], name=fieldname, width=width)
 
     def interiorfielddescrof_dynamic(self, offset, width, fieldsize,
         is_pointer, is_float, is_signed):
@@ -339,7 +342,7 @@
         else:
             typeinfo = INT
         # we abuse the arg_types field to distinguish dynamic and static descrs
-        return Descr(offset, typeinfo, arg_types='dynamic', name='<dynamic 
interior field>', extrainfo=width)
+        return Descr(offset, typeinfo, arg_types='dynamic', name='<dynamic 
interior field>', width=width)
 
     def calldescrof(self, FUNC, ARGS, RESULT, extrainfo):
         arg_types = []
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to