[CM] s7: bubbling up errors (bug?)
Christos Vagias
chris.actondev at gmail.com
Sat Jul 18 13:46:04 PDT 2020
Oh, I see!
Thanks a lot for the clarification (and thorough explanation).
I saw this line from the documentation
(apply throw args))))) ; and pass the error on up
and didn't take into account the signature of throw.
Thanks again!
On Sat, 18 Jul 2020 at 22:01, <bil at ccrma.stanford.edu> wrote:
> throw is (throw tag . info), that is it takes its trailing args and puts
> them
> in a list. The first throw gets the args: 'some-error "..." 1. It
> passes
> these as: 'some-error ("..." 1) to the first error handler (that's why
> you
> can apply format to cadr -- cadr has been turned into a list). You
> throw
> that again using apply, so its args the second time are: some-error
> '("..." 1),
> (I'm trying to show that the second call is not like the first -- it has
> only one trailing arg, the list '("..." 1). Once again throw treats it
> as
> a rest arg, and puts it in a list, then the second error handler sees:
> some-error (("..." 1)). If you want to rethrow, the second throw needs
> to match the first one, use (apply throw (car args) (cadr args)).
> It might be better to use (lambda (type info) for the error handler,
> so you can say
>
> (catch #t
> (lambda ()
> (catch #t
> (lambda ()
> (throw 'some-error "::: ERROR ::: (~A)~%" 1))
> (lambda (type info)
> (apply format *stderr* info)
> (apply throw type info))))
> (lambda (type info)
> (apply format *stderr* info)
> ))
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://cm-mail.stanford.edu/mailman/private/cmdist/attachments/20200718/12495346/attachment.html>
More information about the Cmdist
mailing list