Next: iklib unwind-protect returnable, Previous: iklib unwind-protect except 3, Up: iklib unwind-protect [Index]
The unwind–protection mechanism has special integration with the loop
syntaxes defined by (vicare); if an unwind–protection syntax is
used in the body of a loop as defined by do, while,
until, for and break or continue are
used in the body forms: the cleanup forms are evaluated correctly. We
have to remember that break and continue are
implemented by escaping continuations.
This example shows breaking out of a while syntax; the body and
the unwind handler are evaluated only once; exit is never called.
#!vicare
(import (vicare))
(define x 3)
(define y #f)
(while (positive? x)
(with-unwind-protection
(lambda (why)
(set! y #t))
(lambda ()
(-- x)
(break)
(exit))))
x ⇒ 2
y ⇒ #t
This example shows using continue in a while syntax;
the body and the unwind handler are evaluated 3 times;
exit is never called.
#!vicare
(import (vicare))
(define x 3)
(define y 0)
(while (positive? x)
(with-unwind-protection
(lambda (why)
(++ y))
(lambda ()
(-- x)
(continue)
(exit))))
x ⇒ 0
y ⇒ 3