On Tue, Apr 01, 2008 at 01:23:38PM +0200, Klaas-Jan Stol wrote:
> in the exception handler, a new Undef is created in $P0. When leaving
> this line, this code won't work. When commenting out this line, it
> will print "hi", as expected.
> I don't get that, because, 3 lines later, a new object is stored by
> name "lex"; I had expected to overwrite the current object by that
> name.
>
> [...]
> 
> .sub main
>    push_eh exc
>    foo()
>    pop_eh
>    .return ()
> 
>  exc:
>    $P0 = new 'Undef'
>    .lex "ex", $P0
>    .get_results($P1, $S0)
>    store_lex "ex", $P1
>    find_lex $P2, "ex"
>    print $P1
> .end
> 
> .sub foo
>    $P0 = new 'String'
>    $P0 = "hi"
>    throw $P0
> .end


I think that .get_results() has to be the _first_ instruction
executed as part of an exception handler.  When I change the
exception handler to the following seems to work just fine:

  exc:
    .get_results($P1, $S0)
    $P0 = new 'Undef'
    .lex "ex", $P0
    store_lex "ex", $P1
    find_lex $P2, "ex"
    print $P1

Pm

Reply via email to