From ef0a8bd19957fb76a1fbc1b15d1cc2745a1589bd Mon Sep 17 00:00:00 2001 From: Alex Shinn Date: Sun, 27 Jan 2019 22:10:35 +0800 Subject: [PATCH] restoring efficient read-line --- lib/chibi/io/io.scm | 24 +++++++++++++++--------- lib/chibi/io/io.stub | 15 ++++++--------- sexp.c | 3 +++ 3 files changed, 24 insertions(+), 18 deletions(-) diff --git a/lib/chibi/io/io.scm b/lib/chibi/io/io.scm index 6f5ef632..ba5f98f4 100644 --- a/lib/chibi/io/io.scm +++ b/lib/chibi/io/io.scm @@ -75,9 +75,11 @@ ;;> a string not including the newline. Reads at most \var{n} ;;> characters, defaulting to 8192. -(cond-expand - ((not string-streams) - (define (%read-line n in) +(define (%read-line n in) + (cond + ((port-fileno in) + (%%read-line n in)) + (else (let ((out (open-output-string))) (let lp ((i 0)) (let ((ch (peek-char in))) @@ -128,9 +130,11 @@ ;;> than \var{n} characters if the end of file is reached, ;;> or the eof-object if no characters are available. -(cond-expand - ((not string-streams) - (define (%read-string n in) +(define (%read-string n in) + (cond + ;;((port-fileno in) + ;; (%%read-string n in)) + (else (let ((out (open-output-string))) (let lp ((i 0)) (cond ((or (= i n) (eof-object? (peek-char in))) @@ -159,9 +163,11 @@ ;;> An error is signalled if the length of \var{str} is smaller ;;> than \var{n}. -(cond-expand - ((not string-streams) - (define (%read-string! str n in) +(define (%read-string! str n in) + (cond + ;;((port-fileno in) + ;; (%%read-string! str n in)) + (else (let lp ((i 0)) (cond ((or (= i n) (eof-object? (peek-char in))) i) (else (string-set! str i (read-char in)) (lp (+ i 1)))))))) diff --git a/lib/chibi/io/io.stub b/lib/chibi/io/io.stub index 1bb4871f..c0c331b6 100644 --- a/lib/chibi/io/io.stub +++ b/lib/chibi/io/io.stub @@ -1,15 +1,12 @@ -(cond-expand - (string-streams - (define-c non-null-string (%read-line "fgets") - ((result (array char arg1)) int (default (current-input-port) input-port))) +(define-c non-null-string (%%read-line "fgets") + ((result (array char arg1)) int (default (current-input-port) input-port))) - (define-c size_t (%read-string "fread") - ((result (array char (result arg2))) (value 1 size_t) size_t (default (current-input-port) input-port))) +;;(define-c size_t (%%read-string "fread") +;; ((result (array char (result arg2))) (value 1 size_t) size_t (default (current-input-port) input-port))) - (define-c size_t (%read-string! "fread") - (string (value 1 size_t) size_t (default (current-input-port) input-port))) - )) +;;(define-c size_t (%%read-string! "fread") +;; (string (value 1 size_t) size_t (default (current-input-port) input-port))) (c-include-verbatim "port.c") diff --git a/sexp.c b/sexp.c index 78f83a12..5c0f9d22 100644 --- a/sexp.c +++ b/sexp.c @@ -482,6 +482,9 @@ static const char* sexp_initial_features[] = { #if SEXP_USE_UTF8_STRINGS "full-unicode", #endif +#if SEXP_USE_STRING_INDEX_TABLE + "string-index", +#endif #if SEXP_USE_GREEN_THREADS "threads", #endif