[pypy-svn] r51862 - in pypy/branch/jit-refactoring/pypy/jit/rainbow: . test

cfbolz at codespeak.net cfbolz at codespeak.net
Mon Feb 25 21:28:43 CET 2008


Author: cfbolz
Date: Mon Feb 25 21:28:43 2008
New Revision: 51862

Modified:
   pypy/branch/jit-refactoring/pypy/jit/rainbow/codewriter.py
   pypy/branch/jit-refactoring/pypy/jit/rainbow/test/test_interpreter.py
Log:
more indirect_call tests passing


Modified: pypy/branch/jit-refactoring/pypy/jit/rainbow/codewriter.py
==============================================================================
--- pypy/branch/jit-refactoring/pypy/jit/rainbow/codewriter.py	(original)
+++ pypy/branch/jit-refactoring/pypy/jit/rainbow/codewriter.py	Mon Feb 25 21:28:43 2008
@@ -675,38 +675,38 @@
 
     def serialize_op_indirect_call(self, op):
         kind, withexc = self.guess_call_kind(op)
+        targets = dict(self.graphs_from(op))
+        fnptrindex = self.serialize_oparg("red", op.args[0])
+        self.emit("goto_if_constant", fnptrindex, tlabel(("direct call", op)))
+        emitted_args = []
+        for v in op.args[1:-1]:
+            emitted_args.append(self.serialize_oparg("red", v))
+        self.emit("red_residual_call")
+        calldescindex = self.calldesc_position(op.args[0].concretetype)
+        self.emit(fnptrindex, calldescindex, withexc)
+        self.emit(len(emitted_args), *emitted_args)
+        self.emit(self.promotiondesc_position(lltype.Signed))
+        self.emit("goto", tlabel(("after indirect call", op)))
+
+        self.emit(label(("direct call", op)))
+        args = targets.values()[0].getargs()
+        emitted_args = self.args_of_call(op.args[1:-1], args)
+        self.emit("indirect_call_const")
+        self.emit(*emitted_args)
+        setdescindex = self.indirectcalldesc_position(targets)
+        self.emit(fnptrindex, setdescindex)
+
         if kind == "red":
-            XXX
-        if kind == "yellow":
-            targets = dict(self.graphs_from(op))
-            fnptrindex = self.serialize_oparg("red", op.args[0])
-            self.emit("goto_if_constant", fnptrindex, tlabel(("direct call", op)))
-            emitted_args = []
-            for v in op.args[1:-1]:
-                emitted_args.append(self.serialize_oparg("red", v))
-            self.emit("red_residual_call")
-            calldescindex = self.calldesc_position(op.args[0].concretetype)
-            self.emit(fnptrindex, calldescindex, withexc)
-            self.emit(len(emitted_args), *emitted_args)
-            self.emit(self.promotiondesc_position(lltype.Signed))
-            self.emit("goto", tlabel(("after indirect call", op)))
-
-            self.emit(label(("direct call", op)))
-            args = targets.values()[0].getargs()
-            emitted_args = self.args_of_call(op.args[1:-1], args)
-            self.emit("indirect_call_const")
-            self.emit(*emitted_args)
-            setdescindex = self.indirectcalldesc_position(targets)
-            self.emit(fnptrindex, setdescindex)
+            self.emit("red_after_direct_call")
+        elif kind == "yellow":
             self.emit("yellow_after_direct_call")
             self.emit("yellow_retrieve_result_as_red")
             self.emit(self.type_position(op.result.concretetype))
-             
+        else:
+            XXX
 
-            self.emit(label(("after indirect call", op)))
-            self.register_redvar(op.result)
-            return
-        XXX
+        self.emit(label(("after indirect call", op)))
+        self.register_redvar(op.result)
 
     def handle_oopspec_call(self, op, withexc):
         from pypy.jit.timeshifter.oop import Index

Modified: pypy/branch/jit-refactoring/pypy/jit/rainbow/test/test_interpreter.py
==============================================================================
--- pypy/branch/jit-refactoring/pypy/jit/rainbow/test/test_interpreter.py	(original)
+++ pypy/branch/jit-refactoring/pypy/jit/rainbow/test/test_interpreter.py	Mon Feb 25 21:28:43 2008
@@ -1066,7 +1066,6 @@
         self.check_insns(indirect_call=0)
 
     def test_simple_red_meth(self):
-        py.test.skip("needs promote")
         class Base(object):
             def m(self, n):
                 raise NotImplementedError
@@ -1089,7 +1088,6 @@
         self.check_insns({'int_mul': 1})
 
     def test_simple_red_meth_vars_around(self):
-        py.test.skip("needs promote")
         class Base(object):
             def m(self, n):
                 raise NotImplementedError



More information about the Pypy-commit mailing list