mirror of
https://github.com/ashinn/chibi-scheme.git
synced 2025-06-17 19:36:47 +02:00
make repl configurable
This commit is contained in:
parent
1be46461c8
commit
a32cc7b100
2 changed files with 31 additions and 19 deletions
|
@ -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)))
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue