Stop propagating errors at toplevel
authorDavid Vázquez <davazp@gmail.com>
Sat, 22 Feb 2014 02:16:10 +0000 (03:16 +0100)
committerDavid Vázquez <davazp@gmail.com>
Sat, 22 Feb 2014 02:16:10 +0000 (03:16 +0100)
src/toplevel.lisp

index 3c38003..9d6594b 100644 (file)
     (#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)))