pike.git / src / interpret_functions.h

version» Context lines:

pike.git/src/interpret_functions.h:2237:    else { \    pop_stack(); \    DO_JUMP_TO_NEXT; \    } \   }); \    \   PIKE_CONCAT(OP,_RETURN)(PIKE_CONCAT3(F_,OPCODE,_AND_RETURN), \    NAME " & return",I_UPDATE_ALL, \   { \    PIKE_OPCODE_T *addr; \ -  if((addr = low_mega_apply(TYPE, (INT32)(Pike_sp - *--Pike_mark_sp), \ -  ARG2,ARG3))) \ +  if((addr = low_mega_apply_tailcall(TYPE, \ +  (INT32)(Pike_sp - *--Pike_mark_sp), \ +  ARG2,ARG3))) \    { \ -  DO_IF_DEBUG(Pike_fp->next->pc=0); \ -  unlink_previous_frame(); \ +     DO_JUMP_TO(addr); \    } \    else { \    DO_DUMB_RETURN; \    } \   })         #define MKAPPLY2(OP,OPCODE,NAME,TYPE, ARG2, ARG3) \    \
pike.git/src/interpret_functions.h:2289:    else { \    pop_stack(); \    DO_JUMP_TO_NEXT; \    } \   }); \    \   PIKE_CONCAT(OP,_RETURN)(PIKE_CONCAT3(F_MARK_,OPCODE,_AND_RETURN), \    "mark, " NAME " & return",I_UPDATE_ALL, \   { \    PIKE_OPCODE_T *addr; \ -  if((addr=low_mega_apply(TYPE, 0, ARG2, ARG3))) \ +  if((addr=low_mega_apply_tailcall(TYPE, 0, ARG2, ARG3))) \    { \ -  DO_IF_DEBUG(Pike_fp->next->pc=0); \ -  unlink_previous_frame(); \ +     DO_JUMP_TO(addr); \    } \    else { \    DO_DUMB_RETURN; \    } \   })         OPCODE1_JUMP(F_CALL_LFUN , "call lfun", I_UPDATE_ALL, {    PIKE_OPCODE_T *addr;
pike.git/src/interpret_functions.h:2352:    }    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((INT32)(Pike_sp - *--Pike_mark_sp), +  if((addr = lower_mega_apply_tailcall((INT32)(Pike_sp - *--Pike_mark_sp),    Pike_fp->current_object,    (arg1+Pike_fp->context->identifier_level))))    { -  DO_IF_DEBUG(Pike_fp->next->pc=0); -  unlink_previous_frame(); +     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);    if((addr = lower_mega_apply(0, Pike_fp->current_object,
pike.git/src/interpret_functions.h:2394:    }    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(0, Pike_fp->current_object, +  if((addr = lower_mega_apply_tailcall(0, Pike_fp->current_object,    (arg1+Pike_fp->context->identifier_level))))    { -  DO_IF_DEBUG(Pike_fp->next->pc=0); -  unlink_previous_frame(); +     DO_JUMP_TO(addr);    }    else    {    DO_DUMB_RETURN;    }    });      MKAPPLY2(OPCODE1,APPLY,"apply",APPLY_SVALUE_STRICT,    &((Pike_fp->context->prog->constants + arg1)->sval),0);
pike.git/src/interpret_functions.h:2536:    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; -  if(TYPEOF(*s) == T_OBJECT) +  /* +  * this optimization is broken since *_tailcall was introduced. +  * I have no idea why... Disable it for now. +  * +  */ +  if(0 && 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)    {    fun += o->prog->inherits[SUBTYPEOF(*s)].identifier_level; -  if((addr = lower_mega_apply(args-1, o, fun))) +  if((addr = lower_mega_apply_tailcall(args-1, o, fun)))    {    Pike_fp->save_sp_offset--; -  DO_IF_DEBUG(Pike_fp->next->pc=0); -  unlink_previous_frame(); +     DO_JUMP_TO(addr);    }    stack_pop_keep_top();    DO_DUMB_RETURN;    }    }    }    }       {
pike.git/src/interpret_functions.h:2579:    struct svalue tmp2;    PIKE_OPCODE_T *addr;    SET_SVAL(tmp, PIKE_T_STRING, 1, string,    Pike_fp->context->prog->strings[arg1]);       index_no_free(&tmp2, s, &tmp);    free_svalue(s);    move_svalue (s, &tmp2);    print_return_value();    -  if((addr = low_mega_apply(APPLY_STACK, args, 0, 0))) +  if((addr = low_mega_apply_tailcall(APPLY_STACK, args, 0, 0)))    { -  DO_IF_DEBUG(Pike_fp->next->pc=0); -  unlink_previous_frame(); +     DO_JUMP_TO(addr);    }    DO_DUMB_RETURN;    }   });      #undef DO_CALL_BUILTIN   #ifdef PIKE_DEBUG   #define DO_CALL_BUILTIN(ARGS) do { \    int args_=(ARGS); \