Index: src/call/pcc.c =================================================================== --- src/call/pcc.c (revision 37678) +++ src/call/pcc.c (working copy) @@ -2972,7 +2972,12 @@ sigs, indexes, ctx, sig_obj); /* Set up the context object for the function invokation */ - interp->current_object = PMCNULL; + if (strncmp(signature, "Pi", 2) == 0) { + interp->current_object = VTABLE_get_pmc_keyed_int(interp, sig_obj, 0); + } + else { + interp->current_object = PMCNULL; + } interp->current_cont = NEED_CONTINUATION; ctx->current_cont = ret_cont; PMC_cont(ret_cont)->from_ctx = Parrot_context_ref(interp, ctx); Index: src/pmc/class.pmc =================================================================== --- src/pmc/class.pmc (revision 37678) +++ src/pmc/class.pmc (working copy) @@ -335,8 +335,10 @@ meth = Parrot_oo_find_vtable_override_for_class(interp, parent, name); if (!PMC_IS_NULL(meth)) { - Parrot_run_meth_fromc_args(interp, meth, object, name, "v"); - } + PMC *sig_obj = Parrot_pcc_build_sig_object_from_varargs(interp, object, "->", NULL); + Parrot_pcc_invoke_from_sig_object(interp, meth, sig_obj); + gc_unregister_pmc(interp, sig_obj); + } } }