pike.git / src / interpret_functions.h

version» Context lines:

pike.git/src/interpret_functions.h:1500:       {    struct catch_context *new_catch_ctx = alloc_catch_context();    DO_IF_REAL_DEBUG (    new_catch_ctx->frame = Pike_fp;    init_recovery (&new_catch_ctx->recovery, 0, 0, PERR_LOCATION());    );    DO_IF_NOT_REAL_DEBUG (    init_recovery (&new_catch_ctx->recovery, 0);    ); -  new_catch_ctx->save_expendible = frame_get_expendible(Pike_fp); +     JUMP_SET_TO_PC_AT_NEXT (addr);    new_catch_ctx->continue_reladdr = GET_JUMP()    /* We need to run the entry prologue... */    - ENTRY_PROLOGUE_SIZE;       new_catch_ctx->next_addr = addr;    new_catch_ctx->prev = Pike_interpreter.catch_ctx;    Pike_interpreter.catch_ctx = new_catch_ctx;    DO_IF_DEBUG({    TRACE((3,"- Pushed catch context %p\n", new_catch_ctx));    });    }    -  Pike_fp->expendible_offset = Pike_fp->num_locals; -  +     /* Need to adjust next_addr by sizeof(INT32) to skip past the jump    * address to the continue position after the catch block. */    addr = (PIKE_OPCODE_T *) ((INT32 *) addr + 1);       if (Pike_interpreter.catching_eval_jmpbuf) {    /* There's already a catching_eval_instruction around our    * eval_instruction, so we can just continue. */    debug_malloc_touch_named (Pike_interpreter.catch_ctx, "(1)");    /* Skip past the entry prologue... */    addr += ENTRY_PROLOGUE_SIZE;
pike.git/src/interpret_functions.h:1581:       DO_IF_DEBUG ({    TRACE((3,"- Caught exception. catch context: %p\n", cc));    if (!cc) Pike_fatal ("Catch context dropoff.\n");    if (cc->frame != Pike_fp)    Pike_fatal ("Catch context doesn't belong to this frame.\n");    });       debug_malloc_touch_named (cc, "(3)");    UNSETJMP (cc->recovery); -  frame_set_expendible(Pike_fp, cc->save_expendible); +     move_svalue (Pike_sp++, &throw_value);    mark_free_svalue (&throw_value);    low_destruct_objects_to_destruct();       if (cc->continue_reladdr < 0)    FAST_CHECK_THREADS_ON_BRANCH();    addr = cc->next_addr + cc->continue_reladdr;       DO_IF_DEBUG({    TRACE((3,"- Popping catch context %p ==> %p\n",
pike.git/src/interpret_functions.h:1777:      OPCODE1_RETURN(F_RETURN_LOCAL,"return local", I_UPDATE_SP|I_UPDATE_FP, {    DO_IF_DEBUG(    /* special case! Pike_interpreter.mark_stack may be invalid at the time we    * call return -1, so we must call the callbacks here to    * prevent false alarms! /Hubbe    */    if(d_flag>3) do_gc(NULL, 0);    if(d_flag>4) do_debug();    ); -  if(Pike_fp->expendible_offset <= arg1) -  { +  if (!(Pike_fp->flags & PIKE_FRAME_SAVE_LOCALS)) {    pop_n_elems(Pike_sp-1 - (Pike_fp->locals + arg1)); -  DO_IF_DEBUG(Pike_fp->num_locals = arg1); -  }else{ +  } else {    push_svalue(Pike_fp->locals + arg1);    }    DO_DUMB_RETURN;   });         OPCODE0_RETURN(F_RETURN_IF_TRUE,"return if true", I_UPDATE_SP|I_UPDATE_FP, {    if(!UNSAFE_IS_ZERO(Pike_sp-1)) DO_RETURN;    pop_stack();    DO_JUMP_TO_NEXT;
pike.git/src/interpret_functions.h:2817:    \    JUMP_SET_TO_PC_AT_NEXT (addr); \    Pike_fp->return_addr = (PIKE_OPCODE_T *)(((INT32 *) addr) + 1); \    addr += GET_JUMP(); \    \    addr += ENTRY_PROLOGUE_SIZE; \    \    new_frame->args = args; \    new_frame->locals=Pike_sp-args; \    new_frame->save_sp_offset = 0; \ -  new_frame->expendible_offset = 0; \ +     new_frame->save_mark_sp = Pike_mark_sp; \    DO_IF_DEBUG(new_frame->num_args=0;new_frame->num_locals=0;); \    SET_PROG_COUNTER(addr); \    new_frame->fun=Pike_fp->fun; \    DO_IF_PROFILING( new_frame->ident=Pike_fp->ident ); \    new_frame->current_storage=Pike_fp->current_storage; \    if(Pike_fp->scope) add_ref(new_frame->scope=Pike_fp->scope); \    add_ref(new_frame->current_object = Pike_fp->current_object); \    add_ref(new_frame->current_program = Pike_fp->current_program); \    new_frame->context = Pike_fp->context; \
pike.git/src/interpret_functions.h:3050:      OPCODE2(F_MAGIC_TYPES, "::_types", I_UPDATE_SP, {    push_magic_index(magic_types_program, arg2, arg1);   });      OPCODE2(F_INIT_FRAME, "init_frame", 0, {    Pike_fp->num_args = arg1;    Pike_fp->num_locals = arg2;    });    - OPCODE1(F_PROTECT_STACK, "protect_stack", 0, { -  Pike_fp->expendible_offset = arg1; -  }); -  +    /* Save local variables according to bitmask. The high 16 bits of arg1    is an offset, the low 16 bits is a bitmask for that offset. See doc    for pike_frame.save_locals_bitmask. */   OPCODE1(F_SAVE_LOCALS, "save_locals", 0, {    unsigned INT16 offset = ((arg1 & 0xFFFF0000) >> 16);    unsigned INT16 mask = arg1 & 0xFFFF;    if (!(Pike_fp->flags & PIKE_FRAME_SAVE_LOCALS)) {    size_t num_ints = (Pike_fp->num_locals >> 4) + 1;    size_t num_bytes = num_ints * sizeof(unsigned INT16);    Pike_fp->save_locals_bitmask = (unsigned INT16*)xalloc(num_bytes);