[pypy-commit] pypy result-in-resops: Change order in getarrayitem_{raw/gc} and new_array, so descr is the last.

fijal noreply at buildbot.pypy.org
Fri Jul 20 10:47:49 CEST 2012


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: result-in-resops
Changeset: r56246:4547d655ecf0
Date: 2012-07-19 23:54 +0200
http://bitbucket.org/pypy/pypy/changeset/4547d655ecf0/

Log:	Change order in getarrayitem_{raw/gc} and new_array, so descr is the
	last. Simplifies some other things

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
@@ -536,7 +536,7 @@
             # XXX only strings or simple arrays for now
             ARRAY = op.args[0].value
             arraydescr = self.cpu.arraydescrof(ARRAY)
-            return SpaceOperation('new_array', [arraydescr, op.args[2]],
+            return SpaceOperation('new_array', [op.args[2], arraydescr],
                                   op.result)
 
     def rewrite_op_free(self, op):
@@ -569,7 +569,7 @@
         arraydescr = self.cpu.arraydescrof(ARRAY)
         kind = getkind(op.result.concretetype)
         return SpaceOperation('getarrayitem_%s_%s' % (ARRAY._gckind, kind[0]),
-                              [op.args[0], arraydescr, op.args[1]],
+                              [op.args[0], op.args[1], arraydescr],
                               op.result)
 
     def rewrite_op_setarrayitem(self, op):
@@ -1459,7 +1459,7 @@
         if pure:
             extra = 'pure_' + extra
         op = SpaceOperation('getarrayitem_gc_%s' % extra,
-                            [args[0], arraydescr, v_index], op.result)
+                            [args[0], v_index, arraydescr], op.result)
         return extraop + [op]
 
     def do_fixed_list_getitem_foldable(self, op, args, arraydescr):
diff --git a/pypy/jit/codewriter/test/test_flatten.py b/pypy/jit/codewriter/test/test_flatten.py
--- a/pypy/jit/codewriter/test/test_flatten.py
+++ b/pypy/jit/codewriter/test/test_flatten.py
@@ -687,9 +687,9 @@
             array[2] = 5
             return array[2] + len(array)
         self.encoding_test(f, [], """
-            new_array <Descr>, $5 -> %r0
+            new_array $5, <Descr> -> %r0
             setarrayitem_gc_i %r0, <Descr>, $2, $5
-            getarrayitem_gc_i %r0, <Descr>, $2 -> %i0
+            getarrayitem_gc_i %r0, $2, <Descr> -> %i0
             arraylen_gc %r0, <Descr> -> %i1
             int_add %i0, %i1 -> %i2
             int_return %i2
@@ -703,7 +703,7 @@
             x = array[2]
             return len(array)
         self.encoding_test(f, [], """
-            new_array <Descr>, $5 -> %r0
+            new_array $5, <Descr> -> %r0
             arraylen_gc %r0, <Descr> -> %i0
             int_return %i0
         """, transform=True)
diff --git a/pypy/jit/codewriter/test/test_list.py b/pypy/jit/codewriter/test/test_list.py
--- a/pypy/jit/codewriter/test/test_list.py
+++ b/pypy/jit/codewriter/test/test_list.py
@@ -112,28 +112,28 @@
     builtin_test('list.getitem/NONNEG',
                  [varoftype(FIXEDLIST), varoftype(lltype.Signed)],
                  lltype.Signed, """
-                     getarrayitem_gc_i %r0, <ArrayDescr>, %i0 -> %i1
+                     getarrayitem_gc_i %r0, %i0, <ArrayDescr> -> %i1
                  """)
     builtin_test('list.getitem/NEG',
                  [varoftype(FIXEDLIST), varoftype(lltype.Signed)],
                  lltype.Signed, """
                      -live-
                      check_neg_index %r0, <ArrayDescr>, %i0 -> %i1
-                     getarrayitem_gc_i %r0, <ArrayDescr>, %i1 -> %i2
+                     getarrayitem_gc_i %r0, %i1, <ArrayDescr> -> %i2
                  """)
 
 def test_fixed_getitem_foldable():
     builtin_test('list.getitem_foldable/NONNEG',
                  [varoftype(FIXEDLIST), varoftype(lltype.Signed)],
                  lltype.Signed, """
-                     getarrayitem_gc_pure_i %r0, <ArrayDescr>, %i0 -> %i1
+                     getarrayitem_gc_pure_i %r0, %i0, <ArrayDescr> -> %i1
                  """)
     builtin_test('list.getitem_foldable/NEG',
                  [varoftype(FIXEDLIST), varoftype(lltype.Signed)],
                  lltype.Signed, """
                      -live-
                      check_neg_index %r0, <ArrayDescr>, %i0 -> %i1
-                     getarrayitem_gc_pure_i %r0, <ArrayDescr>, %i1 -> %i2
+                     getarrayitem_gc_pure_i %r0, %i1, <ArrayDescr> -> %i2
                  """)
 
 def test_fixed_setitem():
diff --git a/pypy/jit/metainterp/blackhole.py b/pypy/jit/metainterp/blackhole.py
--- a/pypy/jit/metainterp/blackhole.py
+++ b/pypy/jit/metainterp/blackhole.py
@@ -1110,29 +1110,29 @@
         return cpu.bh_call_v(jitcode.get_fnaddr_as_int(), jitcode.calldescr,
                              args_i, args_r, args_f)
 
-    @arguments("cpu", "d", "i", returns="r")
-    def bhimpl_new_array(cpu, arraydescr, length):
+    @arguments("cpu", "i", "d", returns="r")
+    def bhimpl_new_array(cpu, length, arraydescr):
         return cpu.bh_new_array(arraydescr, length)
 
-    @arguments("cpu", "r", "d", "i", returns="i")
-    def bhimpl_getarrayitem_gc_i(cpu, array, arraydescr, index):
+    @arguments("cpu", "r", "i", "d", returns="i")
+    def bhimpl_getarrayitem_gc_i(cpu, array, index, arraydescr):
         return cpu.bh_getarrayitem_gc_i(arraydescr, array, index)
-    @arguments("cpu", "r", "d", "i", returns="r")
-    def bhimpl_getarrayitem_gc_r(cpu, array, arraydescr, index):
+    @arguments("cpu", "r", "i", "d", returns="r")
+    def bhimpl_getarrayitem_gc_r(cpu, array, index, arraydescr):
         return cpu.bh_getarrayitem_gc_r(arraydescr, array, index)
-    @arguments("cpu", "r", "d", "i", returns="f")
-    def bhimpl_getarrayitem_gc_f(cpu, array, arraydescr, index):
+    @arguments("cpu", "r", "i", "d", returns="f")
+    def bhimpl_getarrayitem_gc_f(cpu, array, index, arraydescr):
         return cpu.bh_getarrayitem_gc_f(arraydescr, array, index)
 
     bhimpl_getarrayitem_gc_pure_i = bhimpl_getarrayitem_gc_i
     bhimpl_getarrayitem_gc_pure_r = bhimpl_getarrayitem_gc_r
     bhimpl_getarrayitem_gc_pure_f = bhimpl_getarrayitem_gc_f
 
-    @arguments("cpu", "i", "d", "i", returns="i")
-    def bhimpl_getarrayitem_raw_i(cpu, array, arraydescr, index):
+    @arguments("cpu", "i", "i", "d", returns="i")
+    def bhimpl_getarrayitem_raw_i(cpu, array, index, arraydescr):
         return cpu.bh_getarrayitem_raw_i(arraydescr, array, index)
-    @arguments("cpu", "i", "d", "i", returns="f")
-    def bhimpl_getarrayitem_raw_f(cpu, array, arraydescr, index):
+    @arguments("cpu", "i", "i", "d", returns="f")
+    def bhimpl_getarrayitem_raw_f(cpu, array, index, arraydescr):
         return cpu.bh_getarrayitem_raw_f(arraydescr, array, index)
 
     @arguments("cpu", "r", "d", "i", "i")
diff --git a/pypy/jit/metainterp/executor.py b/pypy/jit/metainterp/executor.py
--- a/pypy/jit/metainterp/executor.py
+++ b/pypy/jit/metainterp/executor.py
@@ -8,7 +8,7 @@
 from pypy.jit.metainterp.history import BoxInt, BoxPtr, BoxFloat, check_descr
 from pypy.jit.metainterp.history import INT, REF, FLOAT, VOID, AbstractDescr
 from pypy.jit.metainterp import resoperation
-from pypy.jit.metainterp.resoperation import rop
+from pypy.jit.metainterp.resoperation import rop, ResOperation
 from pypy.jit.metainterp.blackhole import BlackholeInterpreter, NULL
 from pypy.jit.codewriter import longlong
 
@@ -300,7 +300,8 @@
             # find which list to store the operation in, based on num_args
             num_args = resoperation.oparity[value]
             withdescr = resoperation.opwithdescr[value]
-            dictkey = num_args, withdescr
+            optp = resoperation.optp[value]
+            dictkey = num_args, withdescr, optp
             if dictkey not in execute_by_num_args:
                 execute_by_num_args[dictkey] = [None] * (rop._LAST+1)
             execute = execute_by_num_args[dictkey]
@@ -369,9 +370,14 @@
     # Make a wrapper for 'func'.  The func is a simple bhimpl_xxx function
     # from the BlackholeInterpreter class.  The wrapper is a new function
     # that receives and returns boxed values.
-    for argtype in func.argtypes:
+    has_descr = False
+    for i, argtype in enumerate(func.argtypes):
         if argtype not in ('i', 'r', 'f', 'd', 'cpu'):
             return None
+        if argtype == 'd':
+            if i != len(func.argtypes) - 1:
+                raise AssertionError("Descr should be the last one")
+            has_descr = True
     if list(func.argtypes).count('d') > 1:
         return None
     if func.resulttype not in ('i', 'r', 'f', None):
@@ -379,25 +385,27 @@
     argtypes = unrolling_iterable(func.argtypes)
     resulttype = func.resulttype
     #
-    def do(cpu, _, *argboxes):
+    def do(cpu, _, *args):
         newargs = ()
+        orig_args = args
         for argtype in argtypes:
             if argtype == 'cpu':
                 value = cpu
             elif argtype == 'd':
-                value = argboxes[-1]
+                value = args[-1]
                 assert isinstance(value, AbstractDescr)
-                argboxes = argboxes[:-1]
+                args = args[:-1]
             else:
-                argbox = argboxes[0]
-                argboxes = argboxes[1:]
-                if argtype == 'i':   value = argbox.getint()
-                elif argtype == 'r': value = argbox.getref_base()
-                elif argtype == 'f': value = argbox.getfloatstorage()
+                arg = args[0]
+                args = args[1:]
+                if argtype == 'i':   value = arg.getint()
+                elif argtype == 'r': value = arg.getref_base()
+                elif argtype == 'f': value = arg.getfloatstorage()
             newargs = newargs + (value,)
-        assert not argboxes
+        assert not args
         #
         result = func(*newargs)
+        ResOperation(opnum, orig_args, result, )
         #
         if resulttype == 'i': return BoxInt(result)
         if resulttype == 'r': return BoxPtr(result)
@@ -407,19 +415,19 @@
     do.func_name = 'do_' + name
     return do
 
-def get_execute_funclist(num_args, withdescr):
+def get_execute_funclist(num_args, withdescr, tp):
     # workaround, similar to the next one
-    return EXECUTE_BY_NUM_ARGS[num_args, withdescr]
+    return EXECUTE_BY_NUM_ARGS[num_args, withdescr, tp]
 get_execute_funclist._annspecialcase_ = 'specialize:memo'
 
-def get_execute_function(opnum, num_args, withdescr):
+def get_execute_function(opnum, num_args, withdescr, tp):
     # workaround for an annotation limitation: putting this code in
     # a specialize:memo function makes sure the following line is
     # constant-folded away.  Only works if opnum and num_args are
     # constants, of course.
-    func = EXECUTE_BY_NUM_ARGS[num_args, withdescr][opnum]
-    assert func is not None, "EXECUTE_BY_NUM_ARGS[%s, %s][%s]" % (
-        num_args, withdescr, resoperation.opname[opnum])
+    func = EXECUTE_BY_NUM_ARGS[num_args, withdescr, tp][opnum]
+    assert func is not None, "EXECUTE_BY_NUM_ARGS[%s, %s, %s][%s]" % (
+        num_args, withdescr, tp, resoperation.opname[opnum])
     return func
 get_execute_function._annspecialcase_ = 'specialize:memo'
 
@@ -429,18 +437,19 @@
 has_descr._annspecialcase_ = 'specialize:memo'
 
 
-def execute(cpu, metainterp, opnum, descr, *argboxes):
+def execute(cpu, metainterp, opnum, descr, *args):
     # only for opnums with a fixed arity
-    num_args = len(argboxes)
+    num_args = len(args)
     withdescr = has_descr(opnum)
+    tp = resoperation.optp[opnum]
     if withdescr:
         check_descr(descr)
-        argboxes = argboxes + (descr,)
+        args = args + (descr,)
     else:
         assert descr is None
-    func = get_execute_function(opnum, num_args, withdescr)
-    return func(cpu, metainterp, *argboxes)  # note that the 'argboxes' tuple
-                                             # optionally ends with the descr
+    func = get_execute_function(opnum, num_args, withdescr, tp)
+    return func(cpu, metainterp, *args)  # note that the 'args' tuple
+                                         # optionally ends with the descr
 execute._annspecialcase_ = 'specialize:arg(2)'
 
 def execute_varargs(cpu, metainterp, opnum, argboxes, descr):
diff --git a/pypy/jit/metainterp/heapcache.py b/pypy/jit/metainterp/heapcache.py
--- a/pypy/jit/metainterp/heapcache.py
+++ b/pypy/jit/metainterp/heapcache.py
@@ -71,7 +71,9 @@
                 self._escape(valuebox)
         # GETFIELD_GC, MARK_OPAQUE_PTR, PTR_EQ, and PTR_NE don't escape their
         # arguments
-        elif (opnum != rop.GETFIELD_GC and
+        elif (opnum != rop.GETFIELD_GC_i and
+              opnum != rop.GETFIELD_GC_f and
+              opnum != rop.GETFIELD_GC_p and
               opnum != rop.MARK_OPAQUE_PTR and
               opnum != rop.PTR_EQ and
               opnum != rop.PTR_NE):
diff --git a/pypy/jit/metainterp/history.py b/pypy/jit/metainterp/history.py
--- a/pypy/jit/metainterp/history.py
+++ b/pypy/jit/metainterp/history.py
@@ -8,9 +8,8 @@
 
 from pypy.conftest import option
 
-from pypy.jit.metainterp.resoperation import ResOperation, rop
+from pypy.jit.metainterp.resoperation import ResOperation, rop, AbstractValue
 from pypy.jit.codewriter import heaptracker, longlong
-from pypy.rlib.objectmodel import compute_identity_hash
 import weakref
 
 # ____________________________________________________________
@@ -84,59 +83,6 @@
                         compute_unique_id(box))
 
 
-class AbstractValue(object):
-    __slots__ = ()
-
-    def getint(self):
-        raise NotImplementedError
-
-    def getfloatstorage(self):
-        raise NotImplementedError
-
-    def getfloat(self):
-        return longlong.getrealfloat(self.getfloatstorage())
-
-    def getlonglong(self):
-        assert longlong.supports_longlong
-        return self.getfloatstorage()
-
-    def getref_base(self):
-        raise NotImplementedError
-
-    def getref(self, TYPE):
-        raise NotImplementedError
-    getref._annspecialcase_ = 'specialize:arg(1)'
-
-    def _get_hash_(self):
-        return compute_identity_hash(self)
-
-    def clonebox(self):
-        raise NotImplementedError
-
-    def constbox(self):
-        raise NotImplementedError
-
-    def nonconstbox(self):
-        raise NotImplementedError
-
-    def getaddr(self):
-        raise NotImplementedError
-
-    def sort_key(self):
-        raise NotImplementedError
-
-    def nonnull(self):
-        raise NotImplementedError
-
-    def repr_rpython(self):
-        return '%s' % self
-
-    def _get_str(self):
-        raise NotImplementedError
-
-    def same_box(self, other):
-        return self is other
-
 class AbstractDescr(AbstractValue):
     __slots__ = ()
 
diff --git a/pypy/jit/metainterp/pyjitpl.py b/pypy/jit/metainterp/pyjitpl.py
--- a/pypy/jit/metainterp/pyjitpl.py
+++ b/pypy/jit/metainterp/pyjitpl.py
@@ -412,14 +412,14 @@
 ##    def opimpl_subclassof(self, box1, box2):
 ##        self.execute(rop.SUBCLASSOF, box1, box2)
 
-    @arguments("descr", "box")
-    def opimpl_new_array(self, itemsizedescr, lengthbox):
+    @arguments("box", "descr")
+    def opimpl_new_array(self, lengthbox, itemsizedescr):
         resbox = self.execute_with_descr(rop.NEW_ARRAY, itemsizedescr, lengthbox)
         self.metainterp.heapcache.new_array(resbox, lengthbox)
         return resbox
 
     @specialize.arg(1)
-    def _do_getarrayitem_gc_any(self, op, arraybox, arraydescr, indexbox):
+    def _do_getarrayitem_gc_any(self, op, arraybox, indexbox, arraydescr):
         tobox = self.metainterp.heapcache.getarrayitem(
                 arraybox, arraydescr, indexbox)
         if tobox:
@@ -434,25 +434,27 @@
                 arraybox, arraydescr, indexbox, resbox)
         return resbox
 
-    @arguments("box", "descr", "box")
-    def _opimpl_getarrayitem_gc_any(self, arraybox, arraydescr, indexbox):
-        return self._do_getarrayitem_gc_any(rop.GETARRAYITEM_GC, arraybox, arraydescr, indexbox)
+    @arguments("box", "box", "descr")
+    def _opimpl_getarrayitem_gc_any(self, arraybox, indexbox, arraydescr):
+        return self._do_getarrayitem_gc_any(rop.GETARRAYITEM_GC, arraybox,
+                                            indexbox, arraydescr)
 
     opimpl_getarrayitem_gc_i = _opimpl_getarrayitem_gc_any
     opimpl_getarrayitem_gc_r = _opimpl_getarrayitem_gc_any
     opimpl_getarrayitem_gc_f = _opimpl_getarrayitem_gc_any
 
-    @arguments("box", "descr", "box")
-    def _opimpl_getarrayitem_raw_any(self, arraybox, arraydescr, indexbox):
+    @arguments("box", "box", "descr")
+    def _opimpl_getarrayitem_raw_any(self, arraybox, indexbox, arraydescr):
         return self.execute_with_descr(rop.GETARRAYITEM_RAW,
                                        arraydescr, arraybox, indexbox)
 
     opimpl_getarrayitem_raw_i = _opimpl_getarrayitem_raw_any
     opimpl_getarrayitem_raw_f = _opimpl_getarrayitem_raw_any
 
-    @arguments("box", "descr", "box")
-    def _opimpl_getarrayitem_gc_pure_any(self, arraybox, arraydescr, indexbox):
-        return self._do_getarrayitem_gc_any(rop.GETARRAYITEM_GC_PURE, arraybox, arraydescr, indexbox)
+    @arguments("box", "box", "descr")
+    def _opimpl_getarrayitem_gc_pure_any(self, arraybox, indexbox, arraydescr):
+        return self._do_getarrayitem_gc_any(rop.GETARRAYITEM_GC_PURE, arraybox,
+                                            indexbox, arraydescr)
 
     opimpl_getarrayitem_gc_pure_i = _opimpl_getarrayitem_gc_pure_any
     opimpl_getarrayitem_gc_pure_r = _opimpl_getarrayitem_gc_pure_any
@@ -505,7 +507,7 @@
                        sizebox):
         sbox = self.opimpl_new(structdescr)
         self._opimpl_setfield_gc_any(sbox, lengthdescr, sizebox)
-        abox = self.opimpl_new_array(arraydescr, sizebox)
+        abox = self.opimpl_new_array(sizebox, arraydescr)
         self._opimpl_setfield_gc_any(sbox, itemsdescr, abox)
         return sbox
 
@@ -514,7 +516,7 @@
                             arraydescr, sizehintbox):
         sbox = self.opimpl_new(structdescr)
         self._opimpl_setfield_gc_any(sbox, lengthdescr, history.CONST_FALSE)
-        abox = self.opimpl_new_array(arraydescr, sizehintbox)
+        abox = self.opimpl_new_array(sizehintbox, arraydescr)
         self._opimpl_setfield_gc_any(sbox, itemsdescr, abox)
         return sbox
 
@@ -1734,6 +1736,7 @@
 
     @specialize.arg(1)
     def execute_and_record_varargs(self, opnum, argboxes, descr=None):
+        xxxx
         history.check_descr(descr)
         # execute the operation
         profiler = self.staticdata.profiler
diff --git a/pypy/jit/metainterp/resoperation.py b/pypy/jit/metainterp/resoperation.py
--- a/pypy/jit/metainterp/resoperation.py
+++ b/pypy/jit/metainterp/resoperation.py
@@ -1,6 +1,8 @@
 from pypy.rlib.objectmodel import we_are_translated, specialize
 from pypy.rpython.lltypesystem.llmemory import GCREF
 from pypy.rpython.lltypesystem.lltype import typeOf
+from pypy.jit.codewriter import longlong
+from pypy.rlib.objectmodel import compute_identity_hash
 
 @specialize.arg(0)
 def ResOperation(opnum, args, result, descr=None):
@@ -15,8 +17,62 @@
         op.setdescr(descr)
     return op
 
+class AbstractValue(object):
+    __slots__ = ()
 
-class AbstractResOp(object):
+    def getint(self):
+        raise NotImplementedError
+
+    def getfloatstorage(self):
+        raise NotImplementedError
+
+    def getfloat(self):
+        return longlong.getrealfloat(self.getfloatstorage())
+
+    def getlonglong(self):
+        assert longlong.supports_longlong
+        return self.getfloatstorage()
+
+    def getref_base(self):
+        raise NotImplementedError
+
+    def getref(self, TYPE):
+        raise NotImplementedError
+    getref._annspecialcase_ = 'specialize:arg(1)'
+
+    def _get_hash_(self):
+        return compute_identity_hash(self)
+
+    # XXX the interface below has to be revisited
+
+    def clonebox(self):
+        raise NotImplementedError
+
+    def constbox(self):
+        raise NotImplementedError
+
+    def nonconstbox(self):
+        raise NotImplementedError
+
+    def getaddr(self):
+        raise NotImplementedError
+
+    def sort_key(self):
+        raise NotImplementedError
+
+    def nonnull(self):
+        raise NotImplementedError
+
+    def repr_rpython(self):
+        return '%s' % self
+
+    def _get_str(self):
+        raise NotImplementedError
+
+    def same_box(self, other):
+        return self is other
+
+class AbstractResOp(AbstractValue):
     """The central ResOperation class, representing one operation."""
 
     # debug
@@ -176,15 +232,6 @@
             return False     # for tests
         return opboolresult[opnum]
 
-    def getint(self):
-        raise NotImplementedError
-
-    def getfloat(self):
-        raise NotImplementedError
-
-    def getpointer(self):
-        raise NotImplementedError
-
 class ResOpNone(object):
     _mixin_ = True
     
@@ -205,10 +252,11 @@
     _mixin_ = True
     
     def __init__(self, floatval):
-        assert isinstance(floatval, float)
+        #assert isinstance(floatval, float)
+        # XXX not sure between float or float storage
         self.floatval = floatval
 
-    def getfloat(self):
+    def getfloatstorage(self):
         return self.floatval
 
 class ResOpPointer(object):
@@ -218,7 +266,7 @@
         assert typeOf(pval) == GCREF
         self.pval = pval
 
-    def getpointer(self):
+    def getref_base(self):
         return self.pval
 
 # ===================
@@ -585,7 +633,7 @@
 oparity = []     # mapping numbers to the arity of the operation or -1
 opwithdescr = [] # mapping numbers to a flag "takes a descr"
 opboolresult= [] # mapping numbers to a flag "returns a boolean"
-
+optp = []        # mapping numbers to typename of returnval 'i', 'p', 'N' or 'f'
 
 def setup(debug_print=False):
     i = 0
@@ -604,9 +652,8 @@
         if not basename.startswith('_'):
             clss = create_classes_for_op(basename, i, arity, withdescr, tp)
         else:
-            clss = []
-            setattr(rop, basename, i)
-        for cls, name in clss:
+            clss = [(None, basename, None)]
+        for cls, name, tp in clss:
             if debug_print:
                 print '%30s = %d' % (name, i)
             opname[i] = name
@@ -616,6 +663,7 @@
             oparity.append(arity)
             opwithdescr.append(withdescr)
             opboolresult.append(boolresult)
+            optp.append(tp)
             assert (len(opclasses)==len(oparity)==len(opwithdescr)
                     ==len(opboolresult))
 
@@ -662,14 +710,14 @@
             cls_name = '%s_OP_%s' % (name, tp)
             bases = (get_base_class(mixin, tpmixin[tp], baseclass),)
             dic = {'opnum': opnum}
-            res.append((type(cls_name, bases, dic), name + '_' + tp))
+            res.append((type(cls_name, bases, dic), name + '_' + tp, tp))
             opnum += 1
         return res   
     else:
         cls_name = '%s_OP' % name
         bases = (get_base_class(mixin, tpmixin[tp], baseclass),)
         dic = {'opnum': opnum}
-        return [(type(cls_name, bases, dic), name)]
+        return [(type(cls_name, bases, dic), name, tp)]
 
 setup(__name__ == '__main__')   # print out the table when run directly
 del _oplist
diff --git a/pypy/jit/metainterp/test/test_resoperation.py b/pypy/jit/metainterp/test/test_resoperation.py
--- a/pypy/jit/metainterp/test/test_resoperation.py
+++ b/pypy/jit/metainterp/test/test_resoperation.py
@@ -68,7 +68,7 @@
     op = rop.ResOperation(rop.rop.CALL_p, ['a', 'b'],
                           lltype.nullptr(llmemory.GCREF.TO), descr=mydescr)
     assert op.getarglist() == ['a', 'b']
-    assert not op.getpointer()
+    assert not op.getref_base()
     assert op.getdescr() is mydescr    
 
 def test_can_malloc():


More information about the pypy-commit mailing list