[pypy-commit] pypy jit-leaner-frontend: work around ll2ctypes problems

fijal pypy.commits at gmail.com
Wed Mar 23 06:12:41 EDT 2016


Author: fijal
Branch: jit-leaner-frontend
Changeset: r83292:8eb9e00f3a89
Date: 2016-03-23 12:11 +0200
http://bitbucket.org/pypy/pypy/changeset/8eb9e00f3a89/

Log:	work around ll2ctypes problems

diff --git a/rpython/jit/metainterp/test/test_loop.py b/rpython/jit/metainterp/test/test_loop.py
--- a/rpython/jit/metainterp/test/test_loop.py
+++ b/rpython/jit/metainterp/test/test_loop.py
@@ -236,43 +236,49 @@
         self.check_trace_count_at_most(19)
 
     def test_interp_many_paths_2(self):
-        myjitdriver = JitDriver(greens = ['i'], reds = ['x', 'node'])
-        NODE = self._get_NODE()
-        bytecode = "xxxxxxxb"
+        import sys
+        oldlimit = sys.getrecursionlimit()
+        try:
+            sys.setrecursionlimit(10000)
+            myjitdriver = JitDriver(greens = ['i'], reds = ['x', 'node'])
+            NODE = self._get_NODE()
+            bytecode = "xxxxxxxb"
 
-        def can_enter_jit(i, x, node):
-            myjitdriver.can_enter_jit(i=i, x=x, node=node)
+            def can_enter_jit(i, x, node):
+                myjitdriver.can_enter_jit(i=i, x=x, node=node)
 
-        def f(node):
-            x = 0
-            i = 0
-            while i < len(bytecode):
-                myjitdriver.jit_merge_point(i=i, x=x, node=node)
-                op = bytecode[i]
-                if op == 'x':
-                    if not node:
-                        break
-                    if node.value < 100:   # a pseudo-random choice
-                        x += 1
-                    node = node.next
-                elif op == 'b':
-                    i = 0
-                    can_enter_jit(i, x, node)
-                    continue
-                i += 1
-            return x
+            def f(node):
+                x = 0
+                i = 0
+                while i < len(bytecode):
+                    myjitdriver.jit_merge_point(i=i, x=x, node=node)
+                    op = bytecode[i]
+                    if op == 'x':
+                        if not node:
+                            break
+                        if node.value < 100:   # a pseudo-random choice
+                            x += 1
+                        node = node.next
+                    elif op == 'b':
+                        i = 0
+                        can_enter_jit(i, x, node)
+                        continue
+                    i += 1
+                return x
 
-        node1 = self.nullptr(NODE)
-        for i in range(300):
-            prevnode = self.malloc(NODE)
-            prevnode.value = pow(47, i, 199)
-            prevnode.next = node1
-            node1 = prevnode
+            node1 = self.nullptr(NODE)
+            for i in range(300):
+                prevnode = self.malloc(NODE)
+                prevnode.value = pow(47, i, 199)
+                prevnode.next = node1
+                node1 = prevnode
 
-        expected = f(node1)
-        res = self.meta_interp(f, [node1])
-        assert res == expected
-        self.check_trace_count_at_most(19)
+            expected = f(node1)
+            res = self.meta_interp(f, [node1])
+            assert res == expected
+            self.check_trace_count_at_most(19)
+        finally:
+            sys.setrecursionlimit(oldlimit)
 
     def test_nested_loops(self):
         myjitdriver = JitDriver(greens = ['i'], reds = ['x', 'y'])
diff --git a/rpython/rtyper/lltypesystem/ll2ctypes.py b/rpython/rtyper/lltypesystem/ll2ctypes.py
--- a/rpython/rtyper/lltypesystem/ll2ctypes.py
+++ b/rpython/rtyper/lltypesystem/ll2ctypes.py
@@ -464,6 +464,7 @@
     if delayed_converters_was_None:
         for converter in delayed_converters:
             converter()
+
     remove_regular_struct_content(container)
 
 def remove_regular_struct_content(container):


More information about the pypy-commit mailing list