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

Reply via email to