Yes, that's an excellent point-- something like:
function captured() {
try {
handler->();
throw "throw";
}
finally {
alert("finally!");
}
}
function handler(k) {
k();
}
This calls the handler with A still on the stack, and the handler runs A again;
then throwing passes through the finally twice, resulting in two alerts.
Thanks for the careful reading. Now I'm not sure whether the function call
notation makes sense. There's a pigeonhole problem with finally: if you expect
a capturing form of function call to happen in the context of its
handlers/finalizers, but you also expect the handlers/finalizers to be executed
when the activation is suspended, then you can't guarantee that a finally block
only executes once.
With generators, this doesn't come up because `yield' simply jumps immediately
out of the frame, without invoking additional user code first.
Dave
On Apr 12, 2010, at 7:08 PM, Waldemar Horwat wrote:
> David Herman wrote:
>> Thinking about continuations
>> http://calculist.blogspot.com/2010/04/thinking-about-continuations.html
>
> Your attempted fix for evaluating finally blocks just moved the problem
> elsewhere. Since in the final expression you have A(... A(x)), you'll just
> end up executing the same finally block twice under certain circumstances.
>
> Waldemar
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss