From e16de03b65d850f81f9ddeab4b3d9f9d3d868301 Mon Sep 17 00:00:00 2001 From: Yuichi Nishiwaki Date: Sun, 3 Aug 2014 14:38:38 +0900 Subject: [PATCH] abort execution when an error occurred during running a file program --- piclib/picrin/repl.scm | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/piclib/picrin/repl.scm b/piclib/picrin/repl.scm index 7a7c9569..759421d0 100644 --- a/piclib/picrin/repl.scm +++ b/piclib/picrin/repl.scm @@ -48,7 +48,7 @@ (else (file->string (car args))))))) - (define (main-loop in out) + (define (main-loop in out on-err) (display "> " out) (let ((expr (read in))) (if (eof-object? expr) @@ -60,10 +60,12 @@ (lambda (condition) (display (error-object-message condition) (current-error-port)) (newline) - (leave)) + (if on-err + (on-err) + (leave))) (lambda () (print (eval expr '(picrin user)) out))))) - (main-loop in out))))) + (main-loop in out on-err))))) (define (run-repl program) (let ((in (if program @@ -71,8 +73,11 @@ (current-input-port))) (out (if program (open-output-string) ; ignore output - (current-output-port)))) - (main-loop in out))) + (current-output-port))) + (on-err (if program + (lambda () (exit 1)) + #f))) + (main-loop in out on-err))) (define (repl) (let ((program (getopt)))