In the spirit of getting real continuations working Just Right, this modifies IMCC's PCC implementation to emit the updatecc *after* the pushtop, so that the redundant pushtop isn't necessary when returning with a real continuation.
I'm also thinking that updatecc should cow_copy_context, not save_context. Right? Luke Index: imcc/pcc.c =================================================================== RCS file: /cvs/public/parrot/imcc/pcc.c,v retrieving revision 1.39 diff -u -r1.39 pcc.c --- imcc/pcc.c 16 Dec 2003 08:53:34 -0000 1.39 +++ imcc/pcc.c 14 Jan 2004 06:09:31 -0000 @@ -997,13 +997,13 @@ /* * if we reuse the continuation, update it */ + ins = insINS(interp, unit, ins, "savetop", regs, 0); if (!sub->pcc_sub->nci) if (!need_cc) ins = insINS(interp, unit, ins, "updatecc", regs, 0); /* * emit a savetop for now */ - ins = insINS(interp, unit, ins, "savetop", regs, 0); ins = insINS(interp, unit, ins, need_cc ? "invokecc" : "invoke", regs, 0); ins->type |= ITPCCSUB; /*