[armedbear-devel] Implementing non local exits in a runtime with structured exception handling
Erik Huelsmann
ehuels at gmail.com
Thu Oct 15 09:40:01 UTC 2009
Hi Matthew,
On Thu, Oct 15, 2009 at 7:46 AM, Matthew D. Swank <akopa at charter.net> wrote:
> I am playing with a lisp dialect (at least in my head) that I am
> thinking about implementing on the CLR. Like Java the CLR requires
> jumps across method call boundaries to be done using the exception
> handling mechanism.
>
> If I have code like the following in abcl:
>
> (block foo
> (flet ((callback () (return-from foo t)))
> (something-that-calls-into-java #'callback)
> ... stuff that won't happen if the callback is invoked))
>
> And the plain old Java I'm calling into is pathological and catches the
> exception raised by calling the callback without re-throwing it, the
> non-local return never happens. Is that correct?
That's correct.
> If so, is there no way around it?
Well, given that the work around would have a performance impact, I
wouldn't like to make it a generic one, but you could do this:
(block foo
(let (boo)
(flet ((callback () (setf boo t) (return-from foo t)))
(something that calls into java #'callback)
(when boo (return-from foo t))
...))
I.O.W.: You can set a variable to be checked after you return from Java.
Hope that helps,
Erik.
More information about the armedbear-devel
mailing list