On Sat, Jun 08, 2002 at 12:20:55PM -0400, Melvin Smith wrote:
> At 09:50 AM 6/8/2002 +0200, Jerome Vouillon wrote:
> >Alternatively, I think you can just replace the definition of yield
> >by:
> >
> >    inline op yield (in INT) {
> >      struct Parrot_Sub * sub =
> >        (struct Parrot_Sub*)interpreter->pmc_reg.registers[0]->data;
> >      sub->init = OFFSET($1);
> >      stack_pop(interpreter, interpreter->control_stack,
> >                &dest, STACK_ENTRY_DESTINATION);
> >      goto ADDRESS(dest);
> >    }
> 
> What would that accomplish?
> 
> If yield is to suspend the current coroutine and return back to the
> controlling context, you don't need an argument to yield, unless you
> wish to yield and jump to a different address than you were called
> from, but is that the semantics of a co-routine yielding?

You mentioned in a previous mail:
  "On a return, we can set the entry address back to the "start" of the
   co-routine for another call."
The argument to the "yield" opcode was intended to allow this.
But you're right: one could just as well put a "branch" just after
the "yield".

-- Jerome

Reply via email to