Implement 'empty? message for string builder.
authorChris Hanson <org/chris-hanson/cph>
Sun, 19 Feb 2017 22:08:43 +0000 (14:08 -0800)
committerChris Hanson <org/chris-hanson/cph>
Sun, 19 Feb 2017 22:08:43 +0000 (14:08 -0800)
src/runtime/input.scm
src/runtime/ustring.scm

index ef38d2eff4bcfaf22bcdd8edf3eefbf7aaba3a68..d78359b2edee1083e1c154c4e9044f074cb4b289 100644 (file)
@@ -59,10 +59,9 @@ USA.
        (let loop ()
          (let ((char (read-char port)))
            (cond ((eof-object? char)
-                  (let ((string (builder)))
-                    (if (fix:= 0 (string-length string))
-                        char
-                        string)))
+                  (if (builder 'empty?)
+                      char
+                      (builder)))
                  ((char=? char #\newline)
                   (builder))
                  (else
@@ -77,10 +76,9 @@ USA.
        (let loop ()
          (let ((char (read-char port)))
            (cond ((eof-object? char)
-                  (let ((string (builder)))
-                    (if (fix:= 0 (string-length string))
-                        char
-                        string)))
+                  (if (builder 'empty?)
+                      char
+                      (builder)))
                  ((char-set-member? delimiters char)
                   (input-port/unread-char port char)
                   (builder))
index 2e038ef972cfb2060bed9a81b0349c4b59bca9eb..9b36cef8ecdaf84f10ebbd8eec2a52f0f3db5d73 100644 (file)
@@ -224,6 +224,10 @@ USA.
        (set! index 0)
        unspecific)
 
+      (define (empty?)
+       (and (fix:= 0 index)
+            (null? buffers)))
+
       (define (append-char! char)
        (if (not (fix:< index buffer-size))
            (new-buffer!))
@@ -259,6 +263,7 @@ USA.
        (cond ((default-object? object) (build))
              ((bitless-char? object) (append-char! object))
              ((string? object) (append-string! object))
+             ((eq? 'empty? object) (empty?))
              (else (error "Not a char or string:" object)))))))
 \f
 (define (string-copy! to at from #!optional start end)