diff --git a/lib/chibi/repl.scm b/lib/chibi/repl.scm index 30321fe4..44d24013 100644 --- a/lib/chibi/repl.scm +++ b/lib/chibi/repl.scm @@ -162,7 +162,12 @@ (guard (exn (else (print-exception exn (current-error-port)))) - (let* ((expr (call-with-input-string line read/ss)) + (let* ((expr (call-with-input-string line + (lambda (in2) + (set-port-fold-case! in2 (port-fold-case? in)) + (let ((expr (read/ss in2))) + (set-port-fold-case! in (port-fold-case? in2)) + expr)))) (thread (make-thread (lambda () diff --git a/lib/srfi/38.scm b/lib/srfi/38.scm index 42d236a1..1f4e991e 100644 --- a/lib/srfi/38.scm +++ b/lib/srfi/38.scm @@ -180,7 +180,18 @@ (read-one)) ((#\|) (skip-comment in 0)) - ((#\!) (skip-line in) (read-one in)) + ((#\!) + (let ((name (read-name #f in))) + (cond + ((string-ci=? name "!fold-case") + (set-port-fold-case! in #t)) + ((string-ci=? name "!no-fold-case") + (set-port-fold-case! in #f)) + (else ;; assume a #!/bin/bash line + (skip-line in))) + (let ((res (read-one))) + (if (not (eof-object? res)) + res)))) ((#\() (list->vector (read-one))) ((#\') (read-char in) (list 'syntax (read-one))) ((#\`) (read-char in) (list 'quasisyntax (read-one)))