[pypy-svn] r52494 - pypy/branch/jit-hotpath/pypy/jit/rainbow

arigo at codespeak.net arigo at codespeak.net
Fri Mar 14 13:49:15 CET 2008


Author: arigo
Date: Fri Mar 14 13:49:14 2008
New Revision: 52494

Modified:
   pypy/branch/jit-hotpath/pypy/jit/rainbow/codewriter.py
Log:
Yay!  We can kill the obscure voidargs hacks now,
because the function pointer is not directly
executed but runs through the llinterp.


Modified: pypy/branch/jit-hotpath/pypy/jit/rainbow/codewriter.py
==============================================================================
--- pypy/branch/jit-hotpath/pypy/jit/rainbow/codewriter.py	(original)
+++ pypy/branch/jit-hotpath/pypy/jit/rainbow/codewriter.py	Fri Mar 14 13:49:14 2008
@@ -52,7 +52,7 @@
 class CallDesc:
     __metaclass__ = cachedtype
 
-    def __init__(self, RGenOp, exceptiondesc, FUNCTYPE, voidargs=()):
+    def __init__(self, RGenOp, exceptiondesc, FUNCTYPE):
         self.exceptiondesc = exceptiondesc
         self.sigtoken = RGenOp.sigToken(FUNCTYPE.TO)
         self.result_kind = RGenOp.kindToken(FUNCTYPE.TO.RESULT)
@@ -64,8 +64,6 @@
         for ARG in FUNCTYPE.TO.ARGS:
             if ARG == lltype.Void:
                 voidargcount += 1
-        if len(voidargs) != voidargcount:
-            voidargs = (None, ) * voidargcount
         argiter = unrolling_iterable(FUNCTYPE.TO.ARGS)
         RETURN = FUNCTYPE.TO.RESULT
         if RETURN is lltype.Void:
@@ -76,20 +74,12 @@
 
         def perform_call(rgenop, gv_fnptr, greenargs):
             fnptr = gv_fnptr.revealconst(FUNCTYPE)
-            assert len(greenargs) + len(voidargs) == numargs 
+            assert len(greenargs) + voidargcount == numargs
             args = ()
             j = 0
-            k = 0
             for ARG in argiter:
                 if ARG == lltype.Void:
-                    # XXX terrible hack
-                    if not we_are_translated():
-                        arg = voidargs[k]
-                        arg._TYPE = lltype.Void
-                    else:
-                        arg = None
-                    args += (arg, )
-                    k += 1
+                    args += (None, )
                 else:
                     genconst = greenargs[j]
                     arg = genconst.revealconst(ARG)
@@ -705,13 +695,13 @@
         self.graph_positions[graph] = index
         return index
 
-    def calldesc_position(self, FUNCTYPE, *voidargs):
-        key = FUNCTYPE, voidargs
+    def calldesc_position(self, FUNCTYPE):
+        key = FUNCTYPE
         if key in self.calldesc_positions:
             return self.calldesc_positions[key]
         result = len(self.calldescs)
         self.calldescs.append(
-            CallDesc(self.RGenOp, self.exceptiondesc, FUNCTYPE, voidargs))
+            CallDesc(self.RGenOp, self.exceptiondesc, FUNCTYPE))
         self.calldesc_positions[key] = result
         return result
 
@@ -992,10 +982,8 @@
             args = op.args[1:-1]
         else:
             args = op.args[1:]
-        voidargs = [const.value for const in args
-                        if const.concretetype == lltype.Void]
         fnptr = op.args[0]
-        pos = self.calldesc_position(fnptr.concretetype, *voidargs)
+        pos = self.calldesc_position(fnptr.concretetype)
         func = self.serialize_oparg("green", fnptr)
         emitted_args = []
         for v in op.args[1:]:



More information about the Pypy-commit mailing list