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