Move exceptions with key and args to core
authorAndy Wingo <wingo@pobox.com>
Thu, 7 Nov 2019 15:43:23 +0000 (16:43 +0100)
committerAndy Wingo <wingo@pobox.com>
Thu, 7 Nov 2019 15:43:23 +0000 (16:43 +0100)
* module/ice-9/boot-9.scm (&exception-with-key-and-args)
  (&quit-exception): New definitions.
* module/ice-9/exceptions.scm (make-guile-exception):
  (guile-exception?, guile-exception-key, guile-exception-args): Update
  definitions.

module/ice-9/boot-9.scm
module/ice-9/exceptions.scm

index f725686c692adaec01c55b32a3475e925a426bda..7f7ad935be7b924f5f22895c58bd28cfcc717259 100644 (file)
@@ -1492,6 +1492,11 @@ exception composed of such an instance."
                     (proc (car exceptions))
                     (lp (cdr exceptions))))))))))
 
+(define &exception-with-key-and-args
+  (make-exception-type '&exception-with-key-and-args &exception '(key args)))
+(define &quit-exception
+  (make-exception-type '&quit-exception &exception '(code)))
+
 \f
 
 ;; Define catch and with-throw-handler, using some common helper routines and a
index 721140ca7e5cba4ef8b63a02873c481730582190..d3f63c2324e2b7778576094cfeeaa29bcafd0f71 100644 (file)
 ;; When a native guile exception is caught by with-exception-handler, we
 ;; convert it to a compound exception that includes not only the
 ;; standard exception objects expected by users of R6RS, SRFI-35, and
-;; R7RS, but also a special &guile condition that preserves the original
-;; KEY and ARGS passed to the native Guile catch handler.
-
-(define-exception-type &guile &exception
-  make-guile-exception guile-exception?
-  (key  guile-exception-key)
-  (args guile-exception-args))
+;; R7RS, but also a special &exception-with-key-and-args condition that
+;; preserves the original KEY and ARGS passed to the native Guile catch
+;; handler.
+
+(define make-guile-exception
+  (record-constructor &exception-with-key-and-args))
+(define guile-exception?
+  (record-predicate &exception-with-key-and-args))
+(define guile-exception-key
+  (record-accessor &exception-with-key-and-args 'key))
+(define guile-exception-args
+  (record-accessor &exception-with-key-and-args 'args))
 
 (define (default-guile-exception-converter key args)
   (make-exception (make-error)