So I tried the pdd25cx branch at r28617 with Kea Common Lisp and got
17 subtest failures, 15 of which appear to be due to transfer of control
to the wrong error handler. The attached code illustrates the problem:
[EMAIL PROTECTED]> ./parrot eh-test.pir
got bar
test err: Tried to get null global
[EMAIL PROTECTED]>
Since the error is caused in the "main" sub, the error message ought to
say
main err: Tried to get null global
as it does in trunk. So the test_err handler is not getting
disestablished when the "test" sub returns. I assume this applies to
all continuations; otherwise, adding a "pop_eh" would be enough. It
looks like the failure in t/pmc/coroutine.t case 3 ("Coroutine -
exception in main") is related, but haven't looked at it in detail.
Do you have a plan for how to fix this? I would love to help, but I
have no idea what you have in mind.
-- Bob Rogers
http://rgrjr.dyndns.org/
.sub main :main
$P1 = new 'String'
$P1 = 'bar'
set_global 'foo', $P1
push_eh main_err
$S0 = 'foo'
test($S0)
null $S0
## This fails with "Tried to get null global", but
## incorrectly sends us to the "test err:" handler.
get_global $P0, $S0
print "done.\n"
end
main_err:
.get_results ($P0, $S0)
print "main err: "
print $S0
print "\n"
.end
.sub test
.param string str
push_eh test_err
get_global $P0, str
print "got "
print $P0
print "\n"
.return ()
test_err:
.get_results ($P0, $S0)
print "test err: "
print $S0
print "\n"
.end