On Sun, Jul 09, 2006 at 06:27:13PM -0400, Bob Rogers wrote:
> I have a question about C<handled>. r13214 adds item 2 in the following
> snippet from the current revision:
>
> When the C<handled> opcode is called:
>
> =item 1
> Pop and destroy the exception record.
>
> =item 2
> If there was a continuation in the exception record, invoke the
> continuation.
I hadn't looked at r13214 yet, but I agree that changes is problematic. It
misses the implications of the continuation being passed as a parameter and
the existence of the C<handled> opcode: It is to give the handler complete
freedom as to where to transfer control after handling the exception.
RATIONALE:
What the programmer may consider a warning may become an error in the end.
Consider the Perl equivalent of gcc's -Werror. So it's not OK for throwcc
force continued execution at any given continuation when handling is done.
Also consider that there is little value in a C<handled> opcode that
transfers control. If it were OK for Parrot to force continued execution in
a particular place, then the handler could just return the values that are
currently the parameters of C<handled>, and Parrot would take it from there.
These are the use cases I had in mind for exception handler code:
(1) "I can handle it"
[a] execute C<handled>
[b] invoke some continuation, perhaps the one we got as a parameter,
perhaps a different one
(2) "I can't handle it"
just return
So in short I think C<handled> should go back to merely clearing the
"exception in progress" but not transfer control.
--
Chip Salzenberg <[EMAIL PROTECTED]>