On Sat Jun 14 20:37:53 2008, coke wrote:
> On Sat Apr 14 15:46:56 2007, allison wrote:
> > What I get is:
> >
> > [oops; continuation 0x188ae28 of type 24 is trying to jump from
> runloop
> > 2 to runloop 1]
> > ok
> > not ok
> >
> > from line 252 of src/pmc/continuation.pmc
> >
> > Looks like this is yet-another-example of the inferior runloops
> problem.
> >
> > Throwing an exception from a called sub works just fine:
> >
> > .sub main :main
> > newclass $P0, "Parent"
> > push_eh handler
> > "foo"()
> > print "not "
> > handler:
> > print "ok\n"
> > end
> > .end
> >
> > .sub foo
> > $P1 = new .Exception
> > $P1["_message"] = "Blah"
> > throw $P1
> > .end
> >
> > Allison
>
> If I update the syntax here a bit to what I think is the modern-day
> parrot analog, I get:
>
> $ cat foo.pir
> .sub main :main
> newclass $P0, "Parent"
> push_eh handler
> $P2 = new "Parent"
> print "not "
> handler:
> print "ok\n"
> end
> .end
>
> .namespace ["Parent"]
> .sub __init :method
> $S0 = typeof self
> if $S0 != "Parent" goto INIT_OK
> die "Can not instantiate an interface!"
> INIT_OK:
> .end
>
> 2;0 [EMAIL PROTECTED]:~/sandbox/parrot$ ./parrot foo.pir
> [oops; continuation 0x82232f0 of type 21 is trying to jump from
> runloop 2 to runloop 1]
> ok
> not ok
>
> ... Which is what allison was saying she got on the older version.
>
> If nothing else, the inferior runloop diagnostic here shouldn't be
> occuring. Let's see how
> this fares when we re-merge the pdd25 work back into trunk.
>
Post pdd25cx mergeback, updating the syntax yet again, and simplifying it
slightly, we have
the attached file, which generates:
ok #test exception from init vtable
not ok #test exception from init vtable
Even better, remove the 'end' opcode (which shouldn't be needed), and you get a
segmentation fault. (see attached for backtrace)
--
Will "Coke" Coleda
#0 0xb7de8715 in Parrot_ParrotIO_nci_say (interp=0x804f040, pmc=0x81d4e40)
at
/home/coke/sandbox/parrot/tools/build/../../lib/Parrot/Pmc2c/PCCMETHOD.pm:451
#1 0xb7e0338e in Parrot_NCI_invoke (interp=0x804f040, pmc=0x81d4e40,
next=0x8230d30) at ./src/pmc/nci.pmc:203
#2 0xb7c2d6d0 in Parrot_callmethodcc_p_sc (cur_opcode=0x8230d24,
interp=0x804f040) at src/ops/object.ops:78
#3 0xb7cbc8c4 in runops_slow_core (interp=0x804f040, pc=0x8230d24)
at src/runops_cores.c:221
#4 0xb7c8f946 in runops_int (interp=0x804f040, offset=0)
at src/interpreter.c:929
#5 0xb7c90223 in runops (interp=0x804f040, offs=0) at src/inter_run.c:101
#6 0xb7c904c0 in runops_args (interp=0x804f040, sub=0x8214d90,
obj=0x809ded0, meth_unused=0x0, sig=0xb7ef11b3 "vP",
ap=0xbf99b10c "\004M!\bH±\231¿P,[EMAIL PROTECTED]") at src/inter_run.c:223
#7 0xb7c905fc in Parrot_runops_fromc_args (interp=0x804f040, sub=0x8214d90,
sig=0xb7ef11b3 "vP") at src/inter_run.c:295
#8 0xb7c79697 in Parrot_runcode (interp=0x804f040, argc=1, argv=0xbf99b278)
at src/embed.c:951
#9 0xb7eccdb2 in imcc_run_pbc (interp=0x804f040, obj_file=0,
output_file=0x0, argc=1, argv=0xbf99b278) at compilers/imcc/main.c:783
#10 0xb7ecd7a2 in imcc_run (interp=0x804f040,
sourcefile=0xbf99b9f7 "foo.pir", argc=1, argv=0xbf99b278)
at compilers/imcc/main.c:1071
#11 0x08048978 in main (argc=1, argv=0xbf99b278) at src/main.c:61
.sub main :main
.local pmc type
newclass type, 'Parent'
.local pmc obj
push_eh handler
obj = new 'Parent'
print 'not '
handler:
.local pmc exception
.local string message
.get_results(exception,message)
print "ok #"
say message
end
.end
.namespace ['Parent']
.sub 'init' :vtable
die 'test exception from init vtable'
.end