~ chicken-core (chicken-5) 4f04803b4b67f329b336beb37142fe8e6be710e3
commit 4f04803b4b67f329b336beb37142fe8e6be710e3
Author: felix <felix@call-with-current-continuation.org>
AuthorDate: Sun Jul 3 11:15:20 2011 +0200
Commit: felix <felix@call-with-current-continuation.org>
CommitDate: Sun Jul 3 11:15:20 2011 +0200
added optional evaluator procedure to repl (as suggested by John Cowan)
diff --git a/csi.scm b/csi.scm
index fec57a2b..bdaa518a 100644
--- a/csi.scm
+++ b/csi.scm
@@ -55,7 +55,7 @@ EOF
(hide parse-option-string bytevector-data member* canonicalize-args
describer-table dirseparator? circular-list? improper-pairs?
show-frameinfo selected-frame select-frame copy-from-frame
- findall command-table default-editor) )
+ findall command-table default-editor csi-eval) )
;;; Parameters:
@@ -286,7 +286,7 @@ EOF
(set! command-table (cons (list name proc help) command-table))))
(##sys#void))
-(set! ##sys#repl-eval-hook
+(set! csi-eval
(let ((eval eval)
(load-noisily load-noisily)
(read read)
@@ -1087,7 +1087,7 @@ EOF
(do ([args args (cdr args)])
((null? args)
(unless batch
- (repl)
+ (repl csi-eval)
(##sys#write-char-0 #\newline ##sys#standard-output) ) )
(let* ((arg (car args)))
(cond ((member arg simple-options))
diff --git a/eval.scm b/eval.scm
index dfad23e9..0ff35fcb 100644
--- a/eval.scm
+++ b/eval.scm
@@ -30,7 +30,7 @@
(uses expand)
(hide ##sys#r4rs-environment ##sys#r5rs-environment
##sys#interaction-environment pds pdss pxss d)
- (not inline ##sys#repl-eval-hook ##sys#repl-read-hook ##sys#repl-print-hook
+ (not inline ##sys#repl-read-hook ##sys#repl-print-hook
##sys#read-prompt-hook ##sys#alias-global-hook ##sys#user-read-hook
##sys#syntax-error-hook))
@@ -1506,7 +1506,6 @@
;;;; Read-Eval-Print loop:
-(define ##sys#repl-eval-hook #f)
(define ##sys#repl-print-length-limit #f)
(define ##sys#repl-read-hook #f)
(define ##sys#repl-recent-call-chain #f) ; used in csi for ,c command
@@ -1530,7 +1529,7 @@
(read read)
(call-with-current-continuation call-with-current-continuation)
(string-append string-append))
- (lambda ()
+ (lambda (#!optional (evaluator eval))
(define (write-err xs)
(for-each (cut ##sys#repl-print-hook <> ##sys#standard-error) xs) )
@@ -1610,7 +1609,7 @@
(##sys#read-char-0 ##sys#standard-input) )
(##sys#clear-trace-buffer)
(set! ##sys#unbound-in-eval '())
- (receive result ((or ##sys#repl-eval-hook eval) exp)
+ (receive result (evaluator exp)
(when (and ##sys#warnings-enabled (pair? ##sys#unbound-in-eval))
(let loop ((vars ##sys#unbound-in-eval) (u '()))
(cond ((null? vars)
diff --git a/manual/Unit eval b/manual/Unit eval
index ab6611bb..7392f8ee 100644
--- a/manual/Unit eval
+++ b/manual/Unit eval
@@ -102,13 +102,16 @@ this facility is mainly of interest when accessing foreign code.
==== repl
-<procedure>(repl)</procedure>
+<procedure>(repl [EVALUATOR])</procedure>
Start a new read-eval-print loop. Sets the {{reset-handler}} so that
any invocation of {{reset}} restarts the read-eval-print loop. Also
changes the current exception-handler to display a message, write
any arguments to the value of {{(current-error-port)}} and reset.
+If {{EVALUATOR}} is given, it should be a procedure of one argument that
+is used in place of {{eval}} to evaluate each entered expression.
+
=== Loading extension libraries
diff --git a/types.db b/types.db
index de0d3a0b..aecee858 100644
--- a/types.db
+++ b/types.db
@@ -393,7 +393,7 @@
(register-feature! (procedure register-feature! (#!rest symbol) undefined))
(remprop! (procedure remprop! (symbol symbol) undefined))
(rename-file (procedure rename-file (string string) string))
-(repl (procedure repl () undefined))
+(repl (procedure repl (#!optional (procedure (*) *)) undefined))
(repl-prompt (procedure repl-prompt (#!optional procedure) procedure))
(repository-path (procedure repository-path (#!optional *) *))
(require (procedure require (#!rest *) undefined))
Trap