[pypy-commit] pypy use-file-star-for-file: fix get_line_getc with jit

bdkearns noreply at buildbot.pypy.org
Wed Sep 17 17:56:15 CEST 2014


Author: Brian Kearns <bdkearns at gmail.com>
Branch: use-file-star-for-file
Changeset: r73577:82e7aa02b4a7
Date: 2014-09-17 00:25 -0400
http://bitbucket.org/pypy/pypy/changeset/82e7aa02b4a7/

Log:	fix get_line_getc with jit

diff --git a/rpython/rlib/rfile.py b/rpython/rlib/rfile.py
--- a/rpython/rlib/rfile.py
+++ b/rpython/rlib/rfile.py
@@ -502,9 +502,10 @@
             s.append_charpsize(buf.raw, c)
         return s.build()
 
-    def _get_line_getc(self, raw_buf, remainsize, i):
+    def _get_line_getc(self, raw_buf, remainsize, state):
         ll_file = self._ll_file
-        c = ord('x')
+        i = state[0]
+        c = state[1]
 
         self._unlocked_count += 1
         before = rffi.aroundstate.before
@@ -555,7 +556,8 @@
         if after: after()
         self._unlocked_count -= 1
 
-        return i, c
+        state[0] = i
+        state[1] = c
     _get_line_getc._gctransformer_hint_close_stack_ = True
     _get_line_getc._dont_inline_ = True
 
@@ -572,7 +574,9 @@
         try:
             i = 0
             while True:
-                i, c = self._get_line_getc(raw_buf, remainsize, i)
+                state = [i, ord('x')]
+                self._get_line_getc(raw_buf, remainsize, state)
+                i, c = state
                 if c == ord('\n'):
                     break
                 elif c == EOF:
diff --git a/rpython/translator/goal/targetrfile.py b/rpython/translator/goal/targetrfile.py
--- a/rpython/translator/goal/targetrfile.py
+++ b/rpython/translator/goal/targetrfile.py
@@ -1,8 +1,11 @@
-from rpython.rlib import rfile
+from rpython.rlib import rfile, jit
+
+driver = jit.JitDriver(greens=[], reds='auto')
 
 def entry_point(argv):
     f = rfile.create_file(argv[1], argv[2])
     while True:
+        driver.jit_merge_point()
         line = f.readline()
         if line == '':
             break


More information about the pypy-commit mailing list