From f4e3c0fd0bbaf93cacb0da7b75e35de63fb95f77 Mon Sep 17 00:00:00 2001 From: Alex Shinn Date: Mon, 28 Oct 2024 09:16:30 +0900 Subject: [PATCH] Defining and using a repl-print generic to allow customizing REPL output. --- lib/chibi/repl.scm | 19 ++++++++++++------- lib/chibi/repl.sld | 4 ++-- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/lib/chibi/repl.scm b/lib/chibi/repl.scm index 5c2d5e73..7226f9fb 100644 --- a/lib/chibi/repl.scm +++ b/lib/chibi/repl.scm @@ -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)))))) diff --git a/lib/chibi/repl.sld b/lib/chibi/repl.sld index ae504cba..3e3ff957 100644 --- a/lib/chibi/repl.sld +++ b/lib/chibi/repl.sld @@ -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)