pike.git / src / interpret.c

version» Context lines:

pike.git/src/interpret.c:2519: Inside #if defined (PIKE_USE_MACHINE_CODE) && defined (OPCODE_RETURN_JUMPADDR)
   /* If the function that returns is the only ref to the current    * 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    -  stack_pop_n_elems_keep_top (Pike_sp - save_sp); +     basic_low_return (save_sp); -  /* consider using a flag for immediate destruct instead... */ +  +  stack_pop_n_elems_keep_top (Pike_sp - save_sp);    { -  +  /* consider using a flag for immediate destruct instead... */    extern struct object *objects_to_destruct;    if( objects_to_destruct )    destruct_objects_to_destruct();    }      #ifdef PIKE_DEBUG    if(save_sp > Pike_sp)    Pike_fatal("Pike function did not leave an return value\n");   #endif   
pike.git/src/interpret.c:2566:    int fun = Pike_fp->fun;    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_FN_DONE(fn);    }       basic_low_return (save_sp);    -  if(save_sp < Pike_sp) -  { +     pop_n_elems(Pike_sp-save_sp);    /* consider using a flag for immediate destruct instead... */    destruct_objects_to_destruct(); -  } +       #if defined (PIKE_USE_MACHINE_CODE) && defined (OPCODE_RETURN_JUMPADDR)    free_object (o);   #endif   }         void unlink_previous_frame(void)   {    struct pike_frame *current, *prev;