Tweak `read-line'.
authorLudovic Courtès <ludo@gnu.org>
Wed, 26 Jan 2011 21:59:45 +0000 (22:59 +0100)
committerLudovic Courtès <ludo@gnu.org>
Wed, 26 Jan 2011 22:03:17 +0000 (23:03 +0100)
* libguile/rdelim.c (LINE_BUFFER_SIZE): Set to 1 KiB instead of 4 KiB.
  (scm_read_line): Initialize STRING to #f so we actually use the fast
  path.

libguile/rdelim.c

index 0fa0b8f..760aa47 100644 (file)
@@ -122,7 +122,7 @@ SCM_DEFINE (scm_read_line, "%read-line", 0, 1, 0,
 {
 /* Threshold under which the only allocation performed is that of the
    resulting string and pair.  */
-#define LINE_BUFFER_SIZE 1024
+#define LINE_BUFFER_SIZE 256
 
   SCM line, strings, result;
   scm_t_wchar buf[LINE_BUFFER_SIZE], delim;
@@ -135,11 +135,11 @@ SCM_DEFINE (scm_read_line, "%read-line", 0, 1, 0,
 
   index = 0;
   delim = 0;
-  strings = SCM_EOL;
+  strings = SCM_BOOL_F;
 
   do
     {
-      if (index >= sizeof (buf))
+      if (SCM_UNLIKELY (index >= sizeof (buf)))
        {
          /* The line is getting longer than BUF so store its current
             contents in STRINGS.  */
@@ -164,7 +164,8 @@ SCM_DEFINE (scm_read_line, "%read-line", 0, 1, 0,
     }
   while (delim == 0);
 
-  if (scm_is_false (strings))
+  if (SCM_LIKELY (scm_is_false (strings)))
+    /* The fast path.  */
     line = scm_from_utf32_stringn (buf, index);
   else
     {