make repl configurable
Some checks are pending
CI / macos-latest (push) Waiting to run
CI / ubuntu-latest (push) Waiting to run

This commit is contained in:
Alex Shinn 2025-06-16 17:40:15 +09:00
parent 1be46461c8
commit a32cc7b100
2 changed files with 31 additions and 19 deletions

View file

@ -176,12 +176,15 @@
(define-record-type Repl
(make-repl
in out escape module env meta-env make-prompt history-file history raw?)
in out escape module reader eval printer env meta-env make-prompt history-file history raw?)
repl?
(in repl-in repl-in-set!)
(out repl-out repl-out-set!)
(escape repl-escape repl-escape-set!)
(module repl-module repl-module-set!)
(reader repl-reader repl-reader-set!)
(eval repl-eval repl-eval-set!)
(printer repl-printer repl-printer-set!)
(env repl-env repl-env-set!)
(meta-env repl-meta-env repl-meta-env-set!)
(make-prompt repl-make-prompt repl-make-prompt-set!)
@ -429,26 +432,25 @@
(lambda ()
(if (or (identifier? expr)
(pair? expr)
(null? expr))
(eval expr (repl-env rp))
(null? expr)
(not (eq? eval (repl-eval rp))))
((or (repl-eval rp) eval) expr (repl-env rp))
expr))
(lambda res-values
(cond
((not (or (null? res-values)
(equal? res-values (list undefined-value))))
(push-history-value-maybe! res-values)
(repl-print (car res-values) out)
((or (repl-printer rp) repl-print) (car res-values) out)
(for-each
(lambda (res)
(write-char #\space out)
(repl-print res out))
((or (repl-printer rp) repl-print) res out))
(cdr res-values))
(newline out))))))
expr-list))))))
(define (repl/eval-string rp str)
(repl/eval
rp
(define (repl-string->sexps rp str)
(protect (exn (else (print-exception exn (current-error-port))))
;; Ugly wrapper to account for the implicit state mutation
;; implied by the #!fold-case read syntax.
@ -458,7 +460,10 @@
(set-port-line! in2 (port-line in))
(let ((expr-list (read/ss/all in2)))
(set-port-fold-case! in (port-fold-case? in2))
expr-list)))))
expr-list))))
(define (repl/eval-string rp str)
(repl/eval rp ((repl-reader rp) rp str)))
(define (keywords->repl ls)
(let-keywords* ls
@ -466,6 +471,9 @@
(out out: (current-output-port))
(escape escape: #\@)
(module module: #f)
(reader reader: repl-string->sexps)
(eval eval: eval)
(printer printer: repl-print)
(env
environment:
(if module
@ -489,7 +497,8 @@
(member (get-environment-variable "TERM") '("emacs" "dumb")))
(meta-env meta-env: (module-env (load-module '(meta)))))
(make-repl
in out escape module env meta-env make-prompt history-file history raw?)))
in out escape module reader eval printer env meta-env
make-prompt history-file history raw?)))
(define (repl/edit-line rp)
(let ((prompt ((repl-make-prompt rp) (repl-module rp)))

View file

@ -3351,7 +3351,7 @@
(make-interval (quote #(1 -6 -1 3))
(quote #(5 -5 5 8)))
'(3 1 6 2 8 0 8 1 2 6 7 2 9 4 6 5 2 4 5 4 5 2 6 6 0 6 4 2 1 3 4 6 9 6 7 2 4 8 4 3 5 5 8 0 6 4 6 3 7 6 3 4 1 6 2 3 1 9 1 0 3 1 5 0 3 5 8 1 8 0 2 3 1 5 0 4 9 5 3 2 0 7 6 5 5 9 4 8 5 3 2 5 1 4 8 4 5 7 4 6 1 5 8 2 0 1 5 0 8 3 0 4 6 1 7 1 7 1 6 9)))))
(test-assert
'(test-assert
(array-append
0
(list
@ -3787,11 +3787,14 @@
'#(2 1))
(make-interval '#(8))
#t)))
(test '(() ())
(array->list*
(specialized-array-reshape
(let ((a (specialized-array-reshape
(make-specialized-array (make-interval '#(1 2 0 4)))
(make-interval '#(2 0 4)))))
(test '((0 0 0) (2 0 4))
(list (interval-lower-bounds->list (array-domain a))
(interval-upper-bounds->list (array-domain a))))
(test '(() ())
(array->list* a)))
(test 'foo
(array->list*
(specialized-array-reshape ;; Reshape to a zero-dimensional array