From 81003ba7f1fcb0d2e4232433665725f9286a958e Mon Sep 17 00:00:00 2001 From: =?utf8?q?David=20V=C3=A1zquez?= Date: Sat, 22 Feb 2014 03:16:10 +0100 Subject: [PATCH] Stop propagating errors at toplevel --- src/toplevel.lisp | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/toplevel.lisp b/src/toplevel.lisp index 3c38003..9d6594b 100644 --- a/src/toplevel.lisp +++ b/src/toplevel.lisp @@ -264,9 +264,23 @@ (#j:jqconsole:Write prompt "jqconsole-prompt")) (flet ((process-input (input) (let* ((form (read-from-string input)) - (result (multiple-value-list (eval-interactive form)))) - (dolist (x result) - (#j:jqconsole:Write (format nil "~S~%" x) "jqconsole-return")) + (successp nil) + result) + ;; Capture errors. We evaluate the form and set successp + ;; to T. However, if a non-local exist happens, we cancel + ;; it, so it is not propagated more. + (block nil + (unwind-protect + (progn + (setq result (multiple-value-list (eval-interactive form))) + (setq successp t)) + (return))) + + (if successp + (dolist (x result) + (#j:jqconsole:Write (format nil "~S~%" x) "jqconsole-return")) + (#j:jqconsole:Write (format nil "Error occurred~%") "jqconsole-error")) + (save-history)) (toplevel))) (#j:jqconsole:Prompt t #'process-input))) -- 1.7.10.4