On Sat, Jun 08, 2002 at 01:15:48AM -0400, Dan Sugalski wrote:
> First, we need to beef up ret, but that's a problem of definition. It 
> should walk the control stack until it hits something it can return, 
> so we can undo exception handler pushes, scope change, and suchlike 
> things. (My problem, I'll update the docs)

Why does ret need to be so smart?  We can have an opcode that pop
exception handlers (we need it anyway) and a ret that just return.  If
this turn out later to be a performance bottleneck, it will always be
possible to optimize this by adding an opcode that performs both.

> Second, in the final go, the callco op won't be needed--call should 
> be sufficient, but that'll need support in the PMCs.

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);
    }

-- Jerome

Reply via email to