Author: Armin Rigo <[email protected]>
Branch: stm-thread-2
Changeset: r59970:7a6514ddc5de
Date: 2013-01-11 20:32 +0100
http://bitbucket.org/pypy/pypy/changeset/7a6514ddc5de/

Log:    Start to adapt the targetdemo2 test.

diff --git a/pypy/translator/stm/test/targetdemo2.py 
b/pypy/translator/stm/test/targetdemo2.py
--- a/pypy/translator/stm/test/targetdemo2.py
+++ b/pypy/translator/stm/test/targetdemo2.py
@@ -1,10 +1,10 @@
 import time
 from pypy.module.thread import ll_thread
-from pypy.rlib import rstm
+from pypy.rlib import rstm, jit
 from pypy.rlib.objectmodel import invoke_around_extcall, we_are_translated
 from pypy.rlib.objectmodel import compute_identity_hash
 from pypy.rlib.debug import ll_assert
-from pypy.rpython.lltypesystem import lltype, rffi
+from pypy.rpython.lltypesystem import lltype, rffi, rclass
 
 
 class Node:
@@ -65,6 +65,12 @@
     print "check ok!"
 
 
+jitdriver_hash   = jit.JitDriver(greens=[], reds=['self'])
+jitdriver_inev   = jit.JitDriver(greens=[], reds=['self'])
+jitdriver_ptreq  = jit.JitDriver(greens=[], reds=['self'])
+jitdriver_really = jit.JitDriver(greens=[], reds=['self'])
+
+
 class ThreadRunner(object):
     arg = None
 
@@ -77,21 +83,23 @@
         try:
             self.value = 0
             self.lst = []
-            rstm.perform_transaction(ThreadRunner.check_hash,
-                                     ThreadRunner, self)
+            self.do_check_hash()
             self.value = 0
-            rstm.perform_transaction(ThreadRunner.check_inev,
-                                     ThreadRunner, self)
+            self.do_check_inev()
             self.value = 0
             self.arg = Arg()
             self.glob_p = lltype.malloc(STRUCT)
-            rstm.perform_transaction(ThreadRunner.check_ptr_equality,
-                                     ThreadRunner, self)
-            rstm.perform_transaction(ThreadRunner.run_really,
-                                     ThreadRunner, self)
+            self.do_check_ptr_equality()
+            self.do_run_really()
         finally:
             self.finished_lock.release()
 
+    def do_run_really(self):
+        while True:
+            jitdriver_really.jit_merge_point(self=self)
+            if not self.run_really(0):
+                break
+
     def run_really(self, retry_counter):
         if self.value == glob.LENGTH // 2:
             print "atomic!"
@@ -106,7 +114,11 @@
         #
         add_at_end_of_chained_list(glob.anchor, self.value, self.index)
         self.value += 1
-        return int(self.value < glob.LENGTH)
+        return self.value < glob.LENGTH
+
+    def do_check_ptr_equality(self):
+        jitdriver_ptreq.jit_merge_point(self=self)
+        self.check_ptr_equality(0)
 
     def check_ptr_equality(self, retry_counter):
         assert self.glob_p != lltype.nullptr(STRUCT)
@@ -115,7 +127,12 @@
         raw1 = rffi.cast(rffi.CCHARP, retry_counter)
         raw2 = rffi.cast(rffi.CCHARP, -1)
         ll_assert(raw1 != raw2, "ERROR: retry_counter == -1")
-        return 0
+
+    def do_check_inev(self):
+        while True:
+            jitdriver_inev.jit_merge_point(self=self)
+            if not self.check_inev(0):
+                break
 
     def _check_content(self, content):
         ll_assert(glob.othernode2.value == content, "bogus value after inev")
@@ -135,7 +152,13 @@
         for n in glob.othernodes:   # lots of unrelated writes in-between
             n.value = new_value
         glob.othernode2.value = new_value
-        return int(self.value < glob.LENGTH)
+        return self.value < glob.LENGTH
+
+    def do_check_hash(self):
+        while True:
+            jitdriver_hash.jit_merge_point(self=self)
+            if not self.check_hash(0):
+                break
 
     def check_hash(self, retry_counter):
         if self.value == 0:
@@ -152,7 +175,7 @@
                 x.value += 1
             assert compute_identity_hash(x) == expected_hash
         self.value += 20
-        return int(self.value < glob.LENGTH)
+        return self.value < glob.LENGTH
 
 class Arg:
     foobar = 42
@@ -180,9 +203,8 @@
         bootstrapper.lock = None
         bootstrapper.args = None
 
-    def _freeze_(self):
+    def _cleanup_(self):
         self.reinit()
-        return False
 
     @staticmethod
     def bootstrap():
diff --git a/pypy/translator/stm/test/test_jitdriver.py 
b/pypy/translator/stm/test/test_jitdriver.py
--- a/pypy/translator/stm/test/test_jitdriver.py
+++ b/pypy/translator/stm/test/test_jitdriver.py
@@ -35,3 +35,17 @@
 
         res = self.interpret(f1, ['\x03', rffi.cast(rffi.SHORT, 4), 2])
         assert res == 'X'
+
+    def test_loop_void_result(self):
+        class X:
+            counter = 10
+        x = X()
+        myjitdriver = JitDriver(greens=[], reds=[])
+
+        def f1():
+            while x.counter > 0:
+                myjitdriver.jit_merge_point()
+                x.counter -= 1
+
+        res = self.interpret(f1, [])
+        assert res == None
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to