From 81003ba7f1fcb0d2e4232433665725f9286a958e Mon Sep 17 00:00:00 2001
From: =?utf8?q?David=20V=C3=A1zquez?= <davazp@gmail.com>
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