pike.git / src / interpret.c

version» Context lines:

pike.git/src/interpret.c:1:   /*\   ||| This file a part of Pike, and is copyright by Fredrik Hubinette   ||| Pike is distributed as GPL (General Public License)   ||| See the files COPYING and DISCLAIMER for more information.   \*/   /**/   #include "global.h" - RCSID("$Id: interpret.c,v 1.130 1999/10/23 00:26:56 noring Exp $"); + RCSID("$Id: interpret.c,v 1.131 1999/10/24 05:56:31 hubbe Exp $");   #include "interpret.h"   #include "object.h"   #include "program.h"   #include "svalue.h"   #include "array.h"   #include "mapping.h"   #include "error.h"   #include "language.h"   #include "stralloc.h"   #include "constants.h"
pike.git/src/interpret.c:416:   #define DOJUMP() \    do { int tmp; tmp=EXTRACT_INT(pc); pc+=tmp; if(tmp < 0) fast_check_threads_etc(6); }while(0)      #define COMPARISMENT(ID,EXPR) \   CASE(ID); \   instr=EXPR; \   pop_n_elems(2); \   push_int(instr); \   break    - #define LOOP(ID, OP1, OP2, OP3, OP4) \ + #ifdef AUTO_BIGNUM + #define AUTO_BIGNUM_LOOP_TEST(X,Y) INT_TYPE_ADD_OVERFLOW(X,Y) + #else + #define AUTO_BIGNUM_LOOP_TEST(X,Y) 0 + #endif +  + #define LOOP(ID, INC, OP2, OP4) \   CASE(ID) \   { \    union anything *i=get_pointer_if_this_type(sp-2, T_INT); \ -  if(i) \ +  if(i && !AUTO_BIGNUM_LOOP_TEST(i->integer,INC)) \    { \ -  OP1 ( i->integer ); \ +  i->integer += INC; \    if(i->integer OP2 sp[-3].u.integer) \    { \    pc+=EXTRACT_INT(pc); \    fast_check_threads_etc(8); \    }else{ \    pc+=sizeof(INT32); \ -  } \ +  } \    }else{ \ -  lvalue_to_svalue_no_free(sp-2,sp); sp++; \ -  push_int(1); \ -  OP3; \ +  lvalue_to_svalue_no_free(sp,sp-2); sp++; \ +  push_int(INC); \ +  f_add(2); \    assign_lvalue(sp-3,sp-1); \    if(OP4 ( sp-1, sp-4 )) \    { \    pc+=EXTRACT_INT(pc); \    fast_check_threads_etc(8); \    }else{ \    pc+=sizeof(INT32); \    } \    pop_stack(); \    } \