restartable SRFI-34 exceptions, forgot to add that file
This commit is contained in:
parent
7d4264837f
commit
7345061513
|
@ -0,0 +1,49 @@
|
|||
;;; extremly simple restartable conditions with SRFI-34/35
|
||||
|
||||
;;; This file is part of the Scheme Untergrund Library.
|
||||
|
||||
;;; Copyright (c) 2004 by Eric Knauel.
|
||||
;;; For copyright information, see the file COPYING which comes with
|
||||
;;; the distribution.
|
||||
|
||||
;;; Example:
|
||||
|
||||
;;; (define-condition-type &harmless &condition
|
||||
;;; harmless-condition?)
|
||||
;;;
|
||||
;;; (with-exception-handler
|
||||
;;; (lambda (c)
|
||||
;;; (cond
|
||||
;;; ((harmless-condition? c)
|
||||
;;; (display "Oops!")
|
||||
;;; (newline)
|
||||
;;; (restart c))
|
||||
;;; (else
|
||||
;;; (error (condition-message c)))))
|
||||
;;; (lambda ()
|
||||
;;; (display "Everything ok.")
|
||||
;;; (newline)
|
||||
;;; (raise-restartable (condition (&harmless)))
|
||||
;;; (display "Never mind.")
|
||||
;;; (newline)
|
||||
;;; (raise-restartable (condition (&message (message "Ouch!"))))))
|
||||
|
||||
(define-condition-type &restartable-condition &condition
|
||||
restartable-condition?
|
||||
(cont restartable-condition-cont))
|
||||
|
||||
(define-syntax raise-restartable
|
||||
(syntax-rules ()
|
||||
((raise-restartable %obj)
|
||||
(call-with-current-continuation
|
||||
(lambda (restart-cont)
|
||||
(raise
|
||||
(make-compound-condition
|
||||
(condition (&restartable-condition (cont restart-cont))) %obj)))))))
|
||||
|
||||
(define-syntax restart
|
||||
(syntax-rules ()
|
||||
((restart %condition)
|
||||
(if (restartable-condition? %condition)
|
||||
((condition-ref (extract-condition %condition &restartable-condition) 'cont) 'ignored)
|
||||
(raise (condition (&message (message "not a restartable condition"))))))))
|
Loading…
Reference in New Issue