pike.git / src / interpret_functions.h

version» Context lines:

pike.git/src/interpret_functions.h:1:   /*   || This file is part of Pike. For copyright information see COPYRIGHT.   || Pike is distributed under GPL, LGPL and MPL. See the file COPYING   || for more information. - || $Id: interpret_functions.h,v 1.187 2006/02/27 12:07:10 mast Exp $ + || $Id: interpret_functions.h,v 1.188 2006/03/07 20:12:00 grubba Exp $   */      /*    * Opcode definitions for the interpreter.    */      #include "global.h"      #undef CJUMP   #undef AUTO_BIGNUM_LOOP_TEST
pike.git/src/interpret_functions.h:1272:    {    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 = Pike_fp->expendible; -  new_catch_ctx->continue_reladdr = GET_JUMP(); +     JUMP_SET_TO_PC_AT_NEXT (addr); -  +  new_catch_ctx->continue_reladdr = GET_JUMP();    new_catch_ctx->next_addr = addr;    new_catch_ctx->prev = Pike_interpreter.catch_ctx;    Pike_interpreter.catch_ctx = new_catch_ctx;    }       Pike_fp->expendible = Pike_fp->locals + 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)"); -  SKIPJUMP(); + #ifdef ENTRY_PROLOGUE_SIZE +  /* We also need to skip past the entry prologue... */ +  addr += ENTRY_PROLOGUE_SIZE; + #endif +  SET_PROG_COUNTER(addr); +  FETCH; +  JUMP_DONE;    }       else {    debug_malloc_touch_named (Pike_interpreter.catch_ctx, "(2)");    check_c_stack(8192);    -  /* 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); -  +     while (1) {    /* Loop here every time an exception is caught. Once we've    * gotten here and set things up to run eval_instruction from    * inside catching_eval_instruction, we keep doing it until it's    * time to return. */       int res = catching_eval_instruction (addr);       if (res != -3) {    /* There was an inter return inside the evaluated code. Just
pike.git/src/interpret_functions.h:1808:    tmp.type=PIKE_T_STRING;    tmp.u.string=Pike_fp->context.prog->strings[arg1];    tmp.subtype=0;    index_no_free(&tmp2, Pike_sp-1, &tmp);    free_svalue(Pike_sp-1);    move_svalue (Pike_sp - 1, &tmp2);    print_return_value();   });      OPCODE1(F_POS_INT_INDEX, "int index", 0, { -  push_int(arg1); +  push_int((ptrdiff_t)(int)arg1);    print_return_value();    DO_INDEX;   });      OPCODE1(F_NEG_INT_INDEX, "-int index", 0, {    push_int(-(ptrdiff_t)arg1);    print_return_value();    DO_INDEX;   });