[pypy-svn] r36758 - pypy/dist/pypy/jit/timeshifter/test

ac at codespeak.net ac at codespeak.net
Sun Jan 14 19:24:15 CET 2007


Author: ac
Date: Sun Jan 14 19:24:14 2007
New Revision: 36758

Modified:
   pypy/dist/pypy/jit/timeshifter/test/test_virtualizable.py
Log:
(pedronis, arre) Mysterious failure.

Modified: pypy/dist/pypy/jit/timeshifter/test/test_virtualizable.py
==============================================================================
--- pypy/dist/pypy/jit/timeshifter/test/test_virtualizable.py	(original)
+++ pypy/dist/pypy/jit/timeshifter/test/test_virtualizable.py	Sun Jan 14 19:24:14 2007
@@ -15,8 +15,8 @@
                                                  lltype.Void))
 
 XP = lltype.GcForwardReference()
-PGETTER = lltype.Ptr(lltype.FuncType([lltype.Ptr(XP)], PS))
-PSETTER = lltype.Ptr(lltype.FuncType([lltype.Ptr(XP), PS],
+PGETTER = lambda XP: lltype.Ptr(lltype.FuncType([lltype.Ptr(XP)], PS))
+PSETTER = lambda XP: lltype.Ptr(lltype.FuncType([lltype.Ptr(XP), PS],
                                    lltype.Void))
 
 XY_ACCESS = lltype.Struct('xy_access',
@@ -31,8 +31,8 @@
 XP_ACCESS = lltype.Struct('xp_access',
                           ('get_x', GETTER(XP)),
                           ('set_x', SETTER(XP)),
-                          ('get_p', PGETTER),
-                          ('set_p', PSETTER),
+                          ('get_p', PGETTER(XP)),
+                          ('set_p', PSETTER(XP)),
                           hints = {'immutable': True},
                           )
 
@@ -60,7 +60,27 @@
 E2 = lltype.GcStruct('e', ('xp', lltype.Ptr(XP)),
                          ('w',  lltype.Signed))
 
-     
+PQ = lltype.GcForwardReference()
+PQ_ACCESS = lltype.Struct('pq_access',
+                          ('get_p', PGETTER(PQ)),
+                          ('set_p', PSETTER(PQ)),
+                          ('get_q', PGETTER(PQ)),
+                          ('set_q', PSETTER(PQ)),
+                          hints = {'immutable': True},
+                          )
+
+PQ.become(lltype.GcStruct('pq',
+                          ('vable_base', llmemory.Address),
+                          ('vable_info', VABLEINFOPTR),                     
+                          ('vable_access', lltype.Ptr(PQ_ACCESS)),
+                          ('p', PS),
+                          ('q', PS),
+                          hints = {'virtualizable': True}
+              ))
+
+E3 = lltype.GcStruct('e', ('pq', lltype.Ptr(PQ)),
+                         ('w',  lltype.Signed))
+
 class TestVirtualizable(PortalTest):
 
     def test_simple_explicit(self):
@@ -702,3 +722,74 @@
         res = self.timeshift_from_portal(main, f, [2, 20, 10],
                                          policy=StopAtGPolicy())
         assert res == 1
+
+
+    def test_explicit_force_unaliased_residual_red_call(self):
+        py.test.skip('Fails for unknown reason.')
+        def get_p(pq):
+            pq_access = pq.vable_access
+            if pq_access:
+                p = pq_access.get_p(pq)
+            else:
+                p = pq.p
+            return p
+        def get_q(pq):
+            pq_access = pq.vable_access
+            if pq_access:
+                q = pq_access.get_q(pq)
+            else:
+                q = pq.q
+            return q
+
+        def g(e):
+            pq = e.pq
+            p = get_p(pq)
+            q = get_q(pq)
+            e.w = int(p != q)
+
+        def f(e, a, b):
+            pq = e.pq
+            s = lltype.malloc(S)
+            s.a = a
+            s.b = b            
+            pq_access = pq.vable_access
+            if pq_access:
+                pq_access.set_p(pq, s)
+            else:
+                pq.p = s
+            s = lltype.malloc(S)
+            s.a = a
+            s.b = b            
+            pq_access = pq.vable_access
+            if pq_access:
+                pq_access.set_q(pq, s)
+            else:
+                pq.q = s
+            
+            g(e)            
+            return pq.p.a
+            
+        
+        def main(a, b, x):
+            pq = lltype.malloc(PQ)
+            pq.vable_access = lltype.nullptr(PQ_ACCESS)
+            pq.p = lltype.nullptr(S)
+            pq.q = pq.p
+            e = lltype.malloc(E3)
+            e.pq = pq
+            f(e, a, b)
+            return e.w
+
+
+        class StopAtGPolicy(HintAnnotatorPolicy):
+            def __init__(self):
+                HintAnnotatorPolicy.__init__(self, novirtualcontainer=True)
+
+            def look_inside_graph(self, graph):
+                if graph.name == 'g':
+                    return False
+                return True
+
+        res = self.timeshift_from_portal(main, f, [2, 20, 10],
+                                         policy=StopAtGPolicy())
+        assert res == 1



More information about the Pypy-commit mailing list