bug#39811: Missing dynwind exit application
Stefan Israelsson Tampe <[email protected]>
| Newsgroups | gmane.lisp.guile.bugs |
|---|---|
| Message-ID | <CAGua6m2ez-P3Bic=2kBgNf-QzYAiGbA0Zkms9A5XE-VaOEbQ1Q@mail.gmail.com> |
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?