[pypy-commit] pypy use-file-star-for-file: only construct stringbuilder if necessary

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


Author: Brian Kearns <bdkearns at gmail.com>
Branch: use-file-star-for-file
Changeset: r73575:855e42d77388
Date: 2014-09-16 21:27 -0400
http://bitbucket.org/pypy/pypy/changeset/855e42d77388/

Log:	only construct stringbuilder if necessary

diff --git a/rpython/rlib/rfile.py b/rpython/rlib/rfile.py
--- a/rpython/rlib/rfile.py
+++ b/rpython/rlib/rfile.py
@@ -409,7 +409,7 @@
         self._check_readable()
         ll_file = self._ll_file
 
-        s = StringBuilder()
+        s = None
         buffersize = size if size >= 0 else self._new_buffersize(0)
         remainsize = buffersize
         raw_buf, gc_buf = rffi.alloc_buffer(remainsize)
@@ -428,7 +428,7 @@
                     if not c_ferror(ll_file):
                         break
                     c_clearerr(ll_file)
-                    if s.getlength() > 0 and rposix.get_errno() == errno.EAGAIN:
+                    if s is not None and rposix.get_errno() == errno.EAGAIN:
                         break
                     raise _from_errno(IOError)
                 if chunksize < remainsize and not interrupted:
@@ -436,12 +436,14 @@
                     break
                 if size >= 0:
                     break
+                if s is None:
+                    s = StringBuilder()
                 s.append_charpsize(raw_buf, chunksize)
                 buffersize = self._new_buffersize(buffersize)
                 remainsize = buffersize - s.getlength()
                 rffi.keep_buffer_alive_until_here(raw_buf, gc_buf)
                 raw_buf, gc_buf = rffi.alloc_buffer(remainsize)
-            if s.getlength() == 0:
+            if s is None:
                 return rffi.str_from_buffer(raw_buf, gc_buf, remainsize, chunksize)
             s.append_charpsize(raw_buf, chunksize)
         finally:
@@ -508,7 +510,7 @@
         newlinetypes = self._newlinetypes
         skipnextlf = self._skipnextlf
 
-        s = StringBuilder()
+        s = None
         buffersize = size if size > 0 else 100
         remainsize = buffersize
         raw_buf, gc_buf = rffi.alloc_buffer(remainsize)
@@ -589,13 +591,15 @@
                     break
                 if size > 0:
                     break
+                if s is None:
+                    s = StringBuilder()
                 s.append_charpsize(raw_buf, i)
                 buffersize += buffersize >> 2
                 remainsize = buffersize - s.getlength()
                 rffi.keep_buffer_alive_until_here(raw_buf, gc_buf)
                 raw_buf, gc_buf = rffi.alloc_buffer(remainsize)
                 i = 0
-            if s.getlength() == 0:
+            if s is None:
                 return rffi.str_from_buffer(raw_buf, gc_buf, remainsize, i)
             s.append_charpsize(raw_buf, i)
         finally:


More information about the pypy-commit mailing list