added lispworks condition - closing #4

moved all conditions into a function to reduce repetition
This commit is contained in:
Ava Fox 2023-01-31 14:17:10 -05:00
parent 60693b4a13
commit a3db02eff1
1 changed files with 13 additions and 10 deletions

View File

@ -1,10 +1,17 @@
(in-package :with-user-abort)
(define-condition user-abort (#+sbcl sb-sys:interactive-interrupt
#+ccl ccl:interrupt-signal-condition
#+clisp system::simple-interrupt-condition
#+ecl ext:interactive-interrupt
#+allegro excl:interrupt-signal)
(eval-when (compile load eval)
(defun get-implementation-condition ()
(quote
#+sbcl sb-sys:interactive-interrupt
#+ccl ccl:interrupt-signal-condition
#+clisp system::simple-interrupt-condition
#+ecl ext:interactive-interrupt
#+allegro excl:interrupt-signal
#+lispworks conditions:keyboard-break)))
(define-condition user-abort (#.(get-implementation-condition))
()
(:documentation "condition that inherits from implementation specific interrupt condition"))
@ -23,11 +30,7 @@
(defmacro with-user-abort (&body body)
"execute BODY, signalling user-abort if the interrupt signal is received"
`(handler-bind ((#+sbcl sb-sys:interactive-interrupt
#+ccl ccl:interrupt-signal-condition
#+clisp system::simple-interrupt-condition
#+ecl ext:interactive-interrupt
#+allegro excl:interrupt-signal
`(handler-bind ((#.(get-implementation-condition)
#'user-abort))
,@body))