repl: Use exception handling.
authorJan Nieuwenhuizen <janneke@gnu.org>
Wed, 28 Dec 2016 19:49:19 +0000 (20:49 +0100)
committerJan Nieuwenhuizen <janneke@gnu.org>
Wed, 28 Dec 2016 19:49:19 +0000 (20:49 +0100)
* module/mes/repl.mes (repl): Use catch to prevent exit upon error.

module/mes/repl.mes

index aa18a8366572999185c693e4ebf86fef61bd18d2..dc2daef27e3484fedb4572b218acf6d75cb8fbf3 100644 (file)
@@ -159,23 +159,29 @@ along with Mes.  If not, see <http://www.gnu.org/licenses/>.
       (force-output)
       (let ((sexp (read-env a)))
         (when (not (eq? sexp '()))
-          (when print-sexp?
-            (display "[sexp=")
-            (display sexp)
-            (display "]")
-            (newline))
-          (cond ((and (pair? sexp) (eq? (car sexp) (string->symbol "unquote")))
-                 (let ((r (meta (cadr sexp) a)))
-                   (if (pair? r) (loop (append r a))
-                       (loop a))))
-                ((and (pair? sexp) (eq? (car sexp) 'mes-use-module))
-                 (loop (mes-load-module-env (cadr sexp) a)))
-                (else (let ((e (eval sexp a)))
-                        (if (eq? e *unspecified*) (loop a)
-                            (let ((id (string->symbol (string-append "$" (number->string count)))))
-                              (set! count (+ count 1))
-                              (display id)
-                              (display " = ")
-                              (display e)
-                              (newline)
-                              (loop (acons id e a))))))))))))
+          (catch #t
+            (lambda ()
+              (when print-sexp?
+                (display "[sexp=")
+                (display sexp)
+                (display "]")
+                (newline))
+              (cond ((and (pair? sexp) (eq? (car sexp) (string->symbol "unquote")))
+                     (let ((r (meta (cadr sexp) a)))
+                       (if (pair? r) (loop (append r a))
+                           (loop a))))
+                    ((and (pair? sexp) (eq? (car sexp) 'mes-use-module))
+                     (loop (mes-load-module-env (cadr sexp) a)))
+                    (else
+                     (let ((e (eval sexp a)))
+                       (if (eq? e *unspecified*) (loop a)
+                           (let ((id (string->symbol (string-append "$" (number->string count)))))
+                             (set! count (+ count 1))
+                             (display id)
+                             (display " = ")
+                             (display e)
+                             (newline)
+                             (loop (acons id e a))))))))
+            (lambda (key . args)
+              (format (current-error-port) "exception: ~a ~a\n" key args)
+              (loop a))))))))