Next: iklib unwind-protect except 3, Previous: iklib unwind-protect except 1, Up: iklib unwind-protect [Index]
A continuable exception is raised with raise-continuable
and it
is a way to resume the execution of a chunk of code after raising an
exception. This example shows the basic mechanism:
(import (rnrs)) (with-exception-handler (lambda (E) (+ E 2)) (lambda () (raise-continuable 1))) ⇒ 3
The handling of a continuable exception can be the same of the handling of a non–continuable exception; in addition the exception handler is allowed to return. In the latter case the dynamic extent of the call to ?thunk is not exited, so ?unwind-handler is not called.
The following example shows what happens when ?thunk raises a continuable exception:
(import (vicare) (only (vicare checks) with-result add-result)) (with-result (with-exception-handler (lambda (E) (add-result 'exception-handler) (+ E 2)) (lambda () (with-unwind-protection (lambda (why) (add-result 'cleanup)) (lambda () (add-result 'thunk-in) (begin0 (raise-continuable 1) (add-result 'thunk-out))))))) ⇒ (3 (thunk-in exception-handler thunk-out cleanup))