pike.git / src / interpret.c

version» Context lines:

pike.git/src/interpret.c:2186:    return NULL;   }      static void pike_pop_locals(struct svalue *save_sp, ptrdiff_t n);      /* TAILCALL optimization variants. They try to reuse the current frame */   void* low_mega_apply_tailcall(enum apply_type type, INT32 args, void *arg1, void *arg2) {    struct pike_frame *frame = Pike_fp;    struct pike_callsite C;    -  if(frame->refs == 1 && Pike_sp != frame->locals + args) -  pike_pop_locals(frame->locals, args); -  +     callsite_init(&C, args);       /* We can reuse the current frame, so we set it into C here    * to allow callsite_resolve_* to pick it up    */    if (frame_can_reuse(frame))    C.frame = frame;       switch (type) {    case APPLY_STACK:
pike.git/src/interpret.c:2233:    callsite_free(&C);       return NULL;   }      /* NOTE: see comments in low_mega_apply_tailcall() */   void* lower_mega_apply_tailcall(INT32 args, struct object *o, ptrdiff_t fun) {    struct pike_frame *frame = Pike_fp;    struct pike_callsite C;    -  if(frame->refs == 1 && Pike_sp != frame->locals + args) -  pike_pop_locals(frame->locals, args); -  +     callsite_init(&C, args);       if (frame_can_reuse(frame))    C.frame = frame;       callsite_resolve_identifier(&C, o, fun);       if (C.frame == frame) {    if (C.type == CALLTYPE_PIKEFUN) {    return C.ptr;