[pypy-svn] r65184 - in pypy/branch/pyjitpl5/pypy/jit/metainterp: . test

arigo at codespeak.net arigo at codespeak.net
Sat May 9 16:55:34 CEST 2009


Author: arigo
Date: Sat May  9 16:55:32 2009
New Revision: 65184

Modified:
   pypy/branch/pyjitpl5/pypy/jit/metainterp/pyjitpl.py
   pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_recursive.py
Log:
Test and fix.


Modified: pypy/branch/pyjitpl5/pypy/jit/metainterp/pyjitpl.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/metainterp/pyjitpl.py	(original)
+++ pypy/branch/pyjitpl5/pypy/jit/metainterp/pyjitpl.py	Sat May  9 16:55:32 2009
@@ -1314,7 +1314,7 @@
         if must_compile:
             guard_op = resumedescr.get_guard_op()
             suboperations = guard_op.suboperations
-            if suboperations[-1].opnum != rop.FAIL:
+            if suboperations[-1] is not guard_failure:
                 must_compile = False
                 log("ignoring old version of the guard")
             else:

Modified: pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_recursive.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_recursive.py	(original)
+++ pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_recursive.py	Sat May  9 16:55:32 2009
@@ -2,6 +2,7 @@
 from pypy.rlib.jit import JitDriver
 from pypy.jit.metainterp.test.test_basic import LLJitMixin, OOJitMixin
 from pypy.jit.metainterp.simple_optimize import Optimizer
+from pypy.jit.metainterp.policy import StopAtXPolicy
 
 
 class RecursiveTests:
@@ -74,6 +75,26 @@
         assert res == main(10)
         self.check_enter_count_at_most(10)
 
+    def test_bug_1(self):
+        myjitdriver = JitDriver(greens=[], reds=['n', 'i', 'stack'])
+        def opaque(n, i):
+            if n == 1 and i == 19:
+                for j in range(20):
+                    res = f(0)      # recurse repeatedly, 20 times
+                    assert res == 0
+        def f(n):
+            stack = [n]
+            i = 0
+            while i < 20:
+                myjitdriver.can_enter_jit(n=n, i=i, stack=stack)
+                myjitdriver.jit_merge_point(n=n, i=i, stack=stack)
+                opaque(n, i)
+                i += 1
+            return stack.pop()
+        res = self.meta_interp(f, [1], optimizer=Optimizer, repeat=2,
+                               policy=StopAtXPolicy(opaque))
+        assert res == 1
+
 
 class TestLLtype(RecursiveTests, LLJitMixin):
     pass



More information about the Pypy-commit mailing list