scm: Error throws rather than hard exit.
authorJan Nieuwenhuizen <janneke@gnu.org>
Tue, 3 Jan 2017 23:11:47 +0000 (00:11 +0100)
committerJan Nieuwenhuizen <janneke@gnu.org>
Tue, 3 Jan 2017 23:11:47 +0000 (00:11 +0100)
* module/mes/read-0.mes (read-character, read-string): Call error.
* module/mes/scm.mes (error): Call core:error instead of exit.
  (syntax-error): Likewise.
* module/mes/repl.mes (repl): Move read into catch.

module/mes/read-0.mes
module/mes/repl.mes
module/mes/scm.mes

index 514ef84987764096d961dfb3900d890a370e25be..1b2cef475e91d58efdb8dfe73c980f84cb28e9aa 100644 (file)
                                (egap . 12)
                                (nruter . 13)
                                (ecaps . 32)))) => cdr)
-              (#t (core:stderr (quote char-not-supported:)) (core:stderr n) (newline) (exit 1))))
+              (#t (error (quote char-not-supported) n))))
       (if (not (or (eq? p 42) (and (> p 96) (< p 123)))) (integer->char (lookup-char (list->symbol (cons (integer->char c) n))))
           (read-name (read-byte) (peek-byte) (cons (integer->char c) n))))
 
         (read-byte)
         (read-string (read-byte) (peek-byte) (append-char s 10)))
        ((eq? c 34) s)
-       ((eq? c -1) (core:stderr (quote EOF-in-string)) (newline) (exit 1))
+       ((eq? c -1) (error (quote EOF-in-string)))
        (#t (read-string (read-byte) (peek-byte) (append-char s c)))))
     (list->string (read-string (read-byte) (peek-byte) (list))))
 
index dc2daef27e3484fedb4572b218acf6d75cb8fbf3..45f4b54933463fd0ee94e3c47099915693c79f36 100644 (file)
@@ -1,7 +1,7 @@
 ;;; -*-scheme-*-
 
 ;;; Mes --- Maxwell Equations of Software
-;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2016,2017 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;;
 ;;; This file is part of Mes.
 ;;;
@@ -157,10 +157,10 @@ along with Mes.  If not, see <http://www.gnu.org/licenses/>.
     (let loop ((a (current-module)))
       (display "mes> ")
       (force-output)
-      (let ((sexp (read-env a)))
-        (when (not (eq? sexp '()))
-          (catch #t
-            (lambda ()
+      (catch #t
+        (lambda ()
+          (let ((sexp (read-env a)))
+            (when (not (eq? sexp '()))
               (when print-sexp?
                 (display "[sexp=")
                 (display sexp)
@@ -181,7 +181,7 @@ along with Mes.  If not, see <http://www.gnu.org/licenses/>.
                              (display " = ")
                              (display e)
                              (newline)
-                             (loop (acons id e a))))))))
-            (lambda (key . args)
-              (format (current-error-port) "exception: ~a ~a\n" key args)
-              (loop a))))))))
+                             (loop (acons id e a))))))))))
+        (lambda (key . args)
+          (format (current-error-port) "exception: ~a ~a\n" key args)
+          (loop a))))))
index 6cb6ed5973829ab896cc2e12eb6995471f79f912..917ce765a1f14f2e025f0c2051928846846fe82a 100644 (file)
@@ -1,7 +1,7 @@
 ;;; -*-scheme-*-
 
 ;;; Mes --- Maxwell Equations of Software
-;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2016,2017 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;;
 ;;; This file is part of Mes.
 ;;;
@@ -60,6 +60,8 @@
   (if (pair? l) (if (null? r) (begin (f (car l)) (for-each f (cdr l)))
                     (if (null? (cdr r)) (begin (f (car l) (caar r)) (for-each f (cdr l) (cdar r)))))))
 
+(define core:error error)
+
 (define (error who . rest)
   (display "error:" (current-error-port))
   (display who (current-error-port))
   (display rest (current-error-port))
   (newline (current-error-port))
   (display "exiting...\n" (current-error-port))
-  (exit 1))
+  (core:error (if (symbol? who) who 'error) (cons who rest)))
 
 (define (syntax-error message . rest)
   (display "syntax-error:" (current-error-port))
   (display message (current-error-port))
   (display ":" (current-error-port))
   (display rest (current-error-port))
-  (newline (current-error-port)))
+  (newline (current-error-port))
+  (core:error 'syntax-error (cons message rest)))
 
 \f
 (define integer? number?)