pike.git / src / interpret_functions.h

version» Context lines:

pike.git/src/interpret_functions.h:2333:    }    else    {    DO_JUMP_TO_NEXT;    }    });      OPCODE2_RETURN(F_CALL_LFUN_N_AND_RETURN , "call lfun <n> & return", I_UPDATE_ALL, {    PIKE_OPCODE_T *addr;    if((addr = lower_mega_apply_tailcall(arg2, Pike_fp->current_object, -  (arg1+Pike_fp->context->identifier_level)))) +  (arg1+Pike_fp->context->identifier_level), arg2)))    {    DO_JUMP_TO(addr);    }else{    DO_DUMB_RETURN;    }    });      OPCODE1_JUMP(F_CALL_LFUN_AND_POP, "call lfun & pop", I_UPDATE_ALL, {    PIKE_OPCODE_T *addr;    JUMP_SET_TO_PC_AT_NEXT (Pike_fp->return_addr);
pike.git/src/interpret_functions.h:2360:    }    else    {    pop_stack();    DO_JUMP_TO_NEXT;    }    });      OPCODE1_RETURN(F_CALL_LFUN_AND_RETURN , "call lfun & return", I_UPDATE_ALL, {    PIKE_OPCODE_T *addr; -  if((addr = lower_mega_apply_tailcall((INT32)(Pike_sp - *--Pike_mark_sp), +  INT32 args = (INT32)(Pike_sp - *--Pike_mark_sp); +  if((addr = lower_mega_apply_tailcall(args,    Pike_fp->current_object, -  (arg1+Pike_fp->context->identifier_level)))) +  (arg1+Pike_fp->context->identifier_level), args)))    {    DO_JUMP_TO(addr);    }else{    DO_DUMB_RETURN;    }    });      OPCODE1_JUMP(F_MARK_CALL_LFUN, "mark, call lfun" , I_UPDATE_ALL, {    PIKE_OPCODE_T *addr;    JUMP_SET_TO_PC_AT_NEXT (Pike_fp->return_addr);
pike.git/src/interpret_functions.h:2401:    else    {    pop_stack();    DO_JUMP_TO_NEXT;    }    });      OPCODE1_RETURN(F_MARK_CALL_LFUN_AND_RETURN , "mark, call lfun & return", I_UPDATE_ALL, {    PIKE_OPCODE_T *addr;    if((addr = lower_mega_apply_tailcall(0, Pike_fp->current_object, -  (arg1+Pike_fp->context->identifier_level)))) +  (arg1+Pike_fp->context->identifier_level), 0)))    {    DO_JUMP_TO(addr);    }    else    {    DO_DUMB_RETURN;    }    });      MKAPPLY2(OPCODE1,APPLY,"apply",APPLY_SVALUE_STRICT,
pike.git/src/interpret_functions.h:2540:    pop_stack();    DO_JUMP_TO_NEXT;    }    }   });      OPCODE1_RETURN(F_CALL_OTHER_AND_RETURN,"call other & return", I_UPDATE_ALL, {    INT32 args=(INT32)(Pike_sp - *--Pike_mark_sp);    struct svalue *s;    s = Pike_sp - args; -  /* -  * this optimization is broken since *_tailcall was introduced. -  * I have no idea why... Disable it for now. -  * -  */ -  if(0 && TYPEOF(*s) == T_OBJECT) +  +  if(TYPEOF(*s) == T_OBJECT)    {    struct object *o;    struct program *p;    o = s->u.object;    if((p=o->prog))    {    p = p->inherits[SUBTYPEOF(*s)].prog;    if(FIND_LFUN(p, LFUN_ARROW) == -1)    {    int fun;    PIKE_OPCODE_T *addr;    fun=find_shared_string_identifier(Pike_fp->context->prog->strings[arg1],    p);    if(fun >= 0)    { -  +  PIKE_OPCODE_T *addr;    fun += o->prog->inherits[SUBTYPEOF(*s)].identifier_level; -  if((addr = lower_mega_apply_tailcall(args-1, o, fun))) +  if((addr = lower_mega_apply_tailcall(args-1, o, fun, args)))    { -  Pike_fp->save_sp_offset--; +     DO_JUMP_TO(addr);    } -  stack_pop_keep_top(); +     DO_DUMB_RETURN;    }    }    }    }       {    struct svalue tmp;    struct svalue tmp2;    PIKE_OPCODE_T *addr;