Author: Maciej Fijalkowski <[email protected]>
Branch: 
Changeset: r58914:11ed6627ff4b
Date: 2012-11-14 20:07 +0100
http://bitbucket.org/pypy/pypy/changeset/11ed6627ff4b/

Log:    merge default

diff --git a/pypy/jit/codewriter/support.py b/pypy/jit/codewriter/support.py
--- a/pypy/jit/codewriter/support.py
+++ b/pypy/jit/codewriter/support.py
@@ -103,7 +103,7 @@
         # a crash here means that you have to reorder the variable named in
         # the JitDriver.  Indeed, greens and reds must both be sorted: first
         # all INTs, followed by all REFs, followed by all FLOATs.
-        lst2 = sort_vars(args_v)
+        lst2 = sort_vars(lst)
         assert lst == lst2
         return lst
     #
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
@@ -924,6 +924,7 @@
             active = True
             greens = ['green1', 'green2', 'voidgreen3']
             reds = ['red1', 'red2', 'voidred3']
+            numreds = 3
     jd = FakeJitDriverSD()
     v1 = varoftype(lltype.Signed)
     v2 = varoftype(lltype.Signed)
diff --git a/pypy/jit/metainterp/warmspot.py b/pypy/jit/metainterp/warmspot.py
--- a/pypy/jit/metainterp/warmspot.py
+++ b/pypy/jit/metainterp/warmspot.py
@@ -311,7 +311,6 @@
                     "reds='auto' is supported only for jit drivers which " 
                     "calls only jit_merge_point. Found a call to %s" % 
methname)
                 #
-                assert jitdriver.confirm_enter_jit is None
                 # compute the set of live variables before the jit_marker
                 alive_v = set(block.inputargs)
                 for op1 in block.operations:
@@ -593,7 +592,9 @@
         if func is None:
             return None
         #
-        assert not jitdriver_sd.jitdriver.autoreds
+        assert not jitdriver_sd.jitdriver.autoreds, (
+            "reds='auto' is not compatible with JitDriver hooks such as "
+            "{get,set}_jitcell_at, get_printable_location, confirm_enter_jit, 
etc.")
         extra_args_s = []
         if s_first_arg is not None:
             extra_args_s.append(s_first_arg)
diff --git a/pypy/rlib/jit.py b/pypy/rlib/jit.py
--- a/pypy/rlib/jit.py
+++ b/pypy/rlib/jit.py
@@ -457,11 +457,14 @@
             self.autoreds = True
             self.reds = []
             self.numreds = None # see warmspot.autodetect_jit_markers_redvars
-            assert confirm_enter_jit is None, 'cannot use automatic reds if 
confirm_enter_jit is given'
-        elif reds is not None:
+            for hook in (get_jitcell_at, set_jitcell_at, 
get_printable_location,
+                         confirm_enter_jit):
+                assert hook is None, "reds='auto' is not compatible with 
JitDriver hooks"
+        else:
+            if reds is not None:
+                self.reds = reds
             self.autoreds = False
-            self.reds = reds
-            self.numreds = len(reds)
+            self.numreds = len(self.reds)
         if not hasattr(self, 'greens') or not hasattr(self, 'reds'):
             raise AttributeError("no 'greens' or 'reds' supplied")
         if virtualizables is not None:
diff --git a/pypy/rlib/test/test_jit.py b/pypy/rlib/test/test_jit.py
--- a/pypy/rlib/test/test_jit.py
+++ b/pypy/rlib/test/test_jit.py
@@ -22,8 +22,21 @@
     assert driver.numreds is None
     py.test.raises(TypeError, "driver.can_enter_jit(foo='something')")
     #
+    py.test.raises(AssertionError, "JitDriver(greens=['foo'], reds='auto', 
get_printable_location='something')")
     py.test.raises(AssertionError, "JitDriver(greens=['foo'], reds='auto', 
confirm_enter_jit='something')")
 
+def test_jitdriver_numreds():
+    driver = JitDriver(greens=['foo'], reds=['a', 'b'])
+    assert driver.reds == ['a', 'b']
+    assert driver.numreds == 2
+    #
+    class MyJitDriver(JitDriver):
+        greens = ['foo']
+        reds = ['a', 'b']
+    driver = MyJitDriver()
+    assert driver.reds == ['a', 'b']
+    assert driver.numreds == 2
+
 def test_jitdriver_clone():
     def foo():
         pass
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to