On Wednesday 07 March 2007 17:02, Matt Diephouse wrote: > I don't think that's the right route to take. Exposing the pc to PIR-land > code seems dangerous and I don't think there's much point. As a PIR user, I > want the invoke vtable to behave just like any other PIR subroutine.
Agreed. > This gets us close to what I want: > > > > void* invoke(void *next) { > > STRING *meth = CONST_STRING(interp, "__invoke"); > > STRING *meth_v = CONST_STRING(interp, "invoke"); > > PMC *sub = Parrot_find_vtable_meth(interp, pmc, meth_v); > > if (PMC_IS_NULL(sub)) > > sub = find_or_die(interp, pmc, meth); > > (void*) Parrot_run_meth_fromc_args(interp, sub, > > pmc, meth, "??", next); That probably works, with the caveat that the Parrot_run_*_fromc*() functions seem to have big problems with multisubs. -- c