Not long ago, Patrick R. Michaud proclaimed...
> Here's a simple test for resumable exceptions that I'm trying
> to get to work.  I'm probably coding/understanding something wrong, 
> so any suggestions or pointers would be greatly appreciated.
> 
>     .sub main :main
>         push_eh catcher
>         'foo'()
>         pop_eh
>         say 'ok 4'
>         .return ()
>       catcher:
>         .get_results ($P0, $S0)
>         $P1 = $P0['retcont']
>         $P1()
>     .end
>     
>     .sub 'foo'
>         say 'ok 1'
>         $P0 = new 'Exception'
>         throw $P0
>         say 'ok 2'
>         $P0 = new 'Exception'
>         throw $P0
>         say 'ok 3'
>     .end
> 
> What I'm trying to do is to test the ability to resume after
> exceptions thrown by C<foo>.  The C<main> sub above sets up
> a handler to catch exceptions, then calls C<foo>.  The handler
> simply resumes any exception that is caught.  The C<foo> sub
> prints 'ok 1', throws an exception, prints 'ok 2', throws another
> exception, and prints 'ok 3'.
> 
> I can resume the first exception but not the second:
> 
>     $ ./parrot x.pir
>     ok 1
>     ok 2
>     No exception handler and no message
>     current instr.: 'foo' pc 46 (x.pir:20)
>     called from Sub 'main' pc 29 (x.pir:10)
>     $
> 
> Suggestions and corrections to my code welcomed.

Check RT #58170 for this.  Let me know if you need more detail on what's
happening.

Reply via email to