pike.git / src / interpret.c

version» Context lines:

pike.git/src/interpret.c:2353:    callsite_prepare(&C);    callsite_execute(&C);    callsite_free(&C);       return NULL;   }      void low_return(void)   {    struct svalue *save_sp = frame_get_save_sp(Pike_fp); -  struct object *o = Pike_fp->current_object; -  int fun = Pike_fp->fun; -  int pop = Pike_fp->flags & PIKE_FRAME_RETURN_POP; +  struct pike_frame *frame = Pike_fp; +  struct object *o = frame->current_object; +  int fun = frame->fun; +  int pop = frame->flags & PIKE_FRAME_RETURN_POP;       if (PIKE_FN_DONE_ENABLED()) {    /* DTrace leave probe    arg0: function name    */    char *fn = "(unknown)";    if (o && o->prog) {    struct identifier *id = ID_FROM_INT(o->prog, fun);    fn = id->name->size_shift == 0 ? id->name->str : "[widestring fn name]";    }
pike.git/src/interpret.c:2381: Inside #if defined (PIKE_USE_MACHINE_CODE) && defined (OPCODE_RETURN_JUMPADDR)
   * object and its program then the program would be freed in    * destruct_objects_to_destruct below. However, we're still    * executing in an opcode in its code so we need prog->program to    * stick around for a little while more to handle the returned    * address. We therefore add a ref to the current object so that    * it'll live through this function. */    add_ref (o);   #endif      #ifdef PIKE_DEBUG -  if(Pike_mark_sp < Pike_fp->save_mark_sp) +  if(Pike_mark_sp < frame->save_mark_sp)    Pike_fatal("Popped below save_mark_sp!\n");    if(Pike_sp<Pike_interpreter.evaluator_stack)    Pike_fatal("Stack error (also simple).\n");   #endif -  Pike_mark_sp=Pike_fp->save_mark_sp; -  POP_PIKE_FRAME(); +  Pike_mark_sp=frame->save_mark_sp; + #ifdef PROFILING +  pike_prof_account(frame); + #endif /* PROFILING */ +  LOW_POP_PIKE_FRAME(frame);       pike_pop_locals(save_sp, !pop);      #ifdef PIKE_DEBUG    if(save_sp+1 > Pike_sp && !pop)    Pike_fatal("Pike function did not leave a return value\n");   #endif       if(UNLIKELY(Pike_interpreter.trace_level>1))    do_trace_func_return (o, fun, 1);