Defining and using a repl-print generic to allow customizing REPL output.

This commit is contained in:
Alex Shinn 2024-10-28 09:16:30 +09:00
parent 4f3a98b2b3
commit f4e3c0fd0b
2 changed files with 14 additions and 9 deletions

View file

@ -402,6 +402,11 @@
((= (length value) 1) (push-history-value! (car value)))
(else (push-history-value! value))))
(define-generic repl-print)
(define-method (repl-print obj (out output-port?))
(write/ss obj out))
(define (repl/eval rp expr-list)
(let ((thread (current-thread))
(out (repl-out rp)))
@ -422,17 +427,17 @@
(null? expr))
(eval expr (repl-env rp))
expr))
(lambda res-list
(lambda res-values
(cond
((not (or (null? res-list)
(equal? res-list (list (if #f #f)))))
(push-history-value-maybe! res-list)
(write/ss (car res-list) out)
((not (or (null? res-values)
(equal? res-values (list undefined-value))))
(push-history-value-maybe! res-values)
(repl-print (car res-values) out)
(for-each
(lambda (res)
(write-char #\space out)
(write/ss res out))
(cdr res-list))
(repl-print res out))
(cdr res-values))
(newline out))))))
expr-list))))))

View file

@ -1,8 +1,8 @@
(define-library (chibi repl)
(export repl $0 $1 $2 $3 $4 $5 $6 $7 $8 $9)
(export repl repl-print $0 $1 $2 $3 $4 $5 $6 $7 $8 $9)
(import (chibi) (only (meta) load-module module-name->file)
(chibi ast) (chibi modules) (chibi doc)
(chibi ast) (chibi modules) (chibi doc) (chibi generic)
(chibi string) (chibi io) (chibi optional)
(chibi process) (chibi term edit-line)
(srfi 1)