pike.git / src / interpret.c

version» Context lines:

pike.git/src/interpret.c:315: Inside #if defined(PIKE_DEBUG)
   spcb=add_gc_callback(gc_check_stack_callback,0,0);    dmalloc_accept_leak(spcb);    }    }   #endif   #if defined(HAVE_COMPUTED_GOTO) || defined(PIKE_USE_MACHINE_CODE)    {    static int tables_need_init=1;    if(tables_need_init) {    /* Initialize the fcode_to_opcode table / jump labels. */ + #if !defined(OPCODE_INLINE_RETURN)    eval_instruction(NULL); -  + #endif   #if defined(PIKE_USE_MACHINE_CODE) && !defined(PIKE_DEBUG)    /* Simple operator opcodes... */   #define SET_INSTR_ADDRESS(X, Y) (instrs[(X)-F_OFFSET].address = (void *)Y)    SET_INSTR_ADDRESS(F_COMPL, o_compl);    SET_INSTR_ADDRESS(F_LSH, o_lsh);    SET_INSTR_ADDRESS(F_RSH, o_rsh);    SET_INSTR_ADDRESS(F_SUBTRACT, o_subtract);    SET_INSTR_ADDRESS(F_AND, o_and);    SET_INSTR_ADDRESS(F_OR, o_or);    SET_INSTR_ADDRESS(F_XOR, o_xor);
pike.git/src/interpret.c:1658: Inside #if defined(PIKE_USE_MACHINE_CODE)
  #endif /* DISASSEMBLE_CODE */    }    x = eval_instruction_low(pc);    pike_trace(3, "- eval_instruction(%p) ==> %d\n", pc, x);    return x;   }      static int eval_instruction_low(PIKE_OPCODE_T *pc)   #endif /* PIKE_DEBUG */   { -  if(pc == NULL) { -  +    #ifndef OPCODE_INLINE_RETURN -  +  if(pc == NULL) {    if(do_inter_return_label != NULL)    Pike_fatal("eval_instruction called with NULL (twice).\n");      #ifdef __GNUC__    do_inter_return_label = && inter_return_label;   #elif defined (_M_IX86)    /* MSVC. */    _asm    {    lea eax,inter_return_label
pike.git/src/interpret.c:1692: Inside #if 0
   */    if (do_inter_return_label == do_escape_catch_label) {    Pike_fatal("Inter return and escape catch labels are equal: %p\n",    do_inter_return_label);    }   #endif       /* Trick optimizer */    if(!dummy_label)    return 0; - #endif /* !OPCODE_INLINE_RETURN */ +     }       /* This else is important to avoid an overoptimization bug in (at    * least) gcc 4.0.2 20050808 which caused the address stored in    * do_inter_return_label to be at the CALL_MACHINE_CODE below. */    else { -  + #endif /* !OPCODE_INLINE_RETURN */    CALL_MACHINE_CODE(pc);    -  + #ifndef OPCODE_INLINE_RETURN    /* This code is never reached, but will    * prevent gcc from optimizing the labels below too much    */      #ifdef PIKE_DEBUG    fprintf(stderr,"We have reached the end of the world!\n");   #endif    }    - #ifndef OPCODE_INLINE_RETURN +    #ifdef __GNUC__    goto *dummy_label;   #endif    - #if 0 -  if (dummy_label) { -  inter_escape_catch_label: -  EXIT_MACHINE_CODE(); -  return -2; -  } - #endif -  - #endif /* !OPCODE_INLINE_RETURN */ +     inter_return_label: -  EXIT_MACHINE_CODE(); + #endif /*!OPCODE_INLINE_RETURUN */   #ifdef PIKE_DEBUG    pike_trace(3, "- Inter return\n");   #endif -  +  EXIT_MACHINE_CODE();    return -1;   }      #else /* PIKE_USE_MACHINE_CODE */         #ifndef SET_PROG_COUNTER   #define SET_PROG_COUNTER(X) (PROG_COUNTER=(X))   #endif /* SET_PROG_COUNTER */