Executing this code on guile-3.0.0:
(dynamic-wind
(lambda () (pk 'enter))
(lambda () (catch #t
(lambda () (throw 1))
(lambda x (pk 'catch x) (apply throw x))))
(lambda () (pk 'leave)))
Leads to the output:
scheme@(guile-user)> (load "bug.scm")
;;; (enter)
;;; (catch (a))
ice-9/boot-9.scm:1669:16: In procedure raise-exception:
Throw to key `a' with args `()'.
What, it does not execute the leave part of the dynamic wind.
This works however,
(catch #t
(lambda ()
(dynamic-wind
(lambda () (pk 'enter))
(lambda () (catch #t
(lambda () (throw 'a))
(lambda x (pk 'catch x) (apply throw x))))
(lambda () (pk 'leave))))
(lambda x #f))
So is this how it should be?