Leopold Toetsch writes:
> Luke Palmer <[EMAIL PROTECTED]> wrote:
> > 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.
> 
> The PCC shortcuts in imcc only deal with normal Sub calls (Sub and
> Closure, Coroutines should be ok too). Full Continuations currenty need
> some hints by the programmer.
> 
> Do you have an example what do you want to achieve?

Yep.  For instance:

    .sub _main
        savetop         # [1]
        newsub $P0, .Continuation, ret
        newsub $P1, .Closure, _other_sub
        .pcc_begin
        .pcc_call $P1, $P0
    ret:
        .pcc_end
        end
    .end

(And we'll assume that I really did need a real continuation here)

The savetop in [1] is redundant with the one that's called right before
invokecc.  The latter is not necessary, and is just wasting time copying
over a COW stack.  By swapping the positions of savetop (the one
generated by IMCC) and updatecc, the savetop may be called only once.

> > I'm also thinking that updatecc should cow_copy_context, not
> > save_context.  Right?
> 
> No, a RetContinuation is never changed, it has a copy of the
> interpreters context, which is restored on sub return.

Hmm, in that case, maybe swapping the roles isn't a good idea.  You
might get a stack frame on top that belongs to the continuation but is
_not_ marked COW.  Dangerous, indeed.

I'm not sure it's correct to assume that updatecc only applies to
RetContinuations.

Luke

Reply via email to