pike.git / src / opcodes.c

version» Context lines:

pike.git/src/opcodes.c:17:   #include "object.h"   #include "error.h"   #include "pike_types.h"   #include "pike_memory.h"   #include "fd_control.h"   #include "cyclic.h"   #include "builtin_functions.h"   #include "module_support.h"   #include "security.h"   #include "bignum.h" + #include "operators.h"    - RCSID("$Id: opcodes.c,v 1.65 1999/11/04 20:25:18 hubbe Exp $"); + RCSID("$Id: opcodes.c,v 1.66 1999/11/04 22:27:59 hubbe Exp $");      void index_no_free(struct svalue *to,struct svalue *what,struct svalue *ind)   {    INT32 i;      #ifdef PIKE_SECURITY    if(what->type <= MAX_COMPLEX)    if(!CHECK_DATA_SECURITY(what->u.array, SECURITY_BIT_INDEX))    error("Index permission denied.\n");   #endif
pike.git/src/opcodes.c:1080:    pop_n_elems(sp-save_sp); \    break; \    } \    } \    cnt=e; \    UNSET_ONERROR(err); \    break; \    } \    \    case 'c': \ -  if(field_length == -1) field_length = 1; \ +  { \ +  int e; \ +  sval.type=T_INT; \ +  sval.subtype=NUMBER_NUMBER; \ +  if(field_length == -1) \ +  { \ +  if(eye+1 > input_len) \ +  { \ +  chars_matched[0]=eye; \ +  return matches; \ +  } \ +  sval.u.integer=input[eye]; \ +  eye++; \ +  break; \ +  } \    if(eye+field_length > input_len) \    { \    chars_matched[0]=eye; \    return matches; \    } \ -  sval.type=T_INT; \ -  sval.subtype=NUMBER_NUMBER; \ + CHAROPT2( \ +  for(e=0;e<field_length;e++) \ +  { \ +  if(input[eye+e]>255) \ +  { \ +  chars_matched[0]=eye; \ +  return matches; \ +  } \ +  } \ + ) \    sval.u.integer=0; \    if (minus_flag) \    { \    int x, pos=0; \    \    while(--field_length >= 0) \    { \    int lshfun, orfun; \    x = input[eye]; \    \    DO_IF_BIGNUM( \    if(INT_TYPE_LSH_OVERFLOW(x, pos)) \    { \    push_int(sval.u.integer); \    convert_stack_top_to_bignum(); \ -  lshfun=FIND_LFUN(sp[-1].u.object->prog, LFUN_LSH); \ -  orfun=FIND_LFUN(sp[-1].u.object->prog, LFUN_OR); \ +     \    while(field_length-- >= 0) \    { \    push_int(input[eye]); \    convert_stack_top_to_bignum(); \    push_int(pos); \ -  apply_low(sp[-2].u.object, lshfun, 1); \ -  stack_swap(); \ -  pop_stack(); \ -  apply_low(sp[-2].u.object, orfun, 1); \ -  stack_swap(); \ -  pop_stack(); \ +  o_lsh(); \ +  o_or(); \    pos+=8; \    eye++; \    } \    sval=*--sp; \    break; \    } \    ); \    sval.u.integer|=x<<pos; \    \    pos+=8; \    eye++; \    } \    } \    else \    while(--field_length >= 0) \    { \ -  int lshfun, orfun; \ +     DO_IF_BIGNUM( \    if(INT_TYPE_LSH_OVERFLOW(sval.u.integer, 8)) \    { \    push_int(sval.u.integer); \    convert_stack_top_to_bignum(); \ -  lshfun=FIND_LFUN(sp[-1].u.object->prog, LFUN_LSH); \ -  orfun=FIND_LFUN(sp[-1].u.object->prog, LFUN_OR); \ +     \    while(field_length-- >= 0) \    { \    push_int(8); \ -  apply_low(sp[-2].u.object, lshfun, 1); \ -  stack_swap(); \ -  pop_stack(); \ +  o_lsh(); \    push_int(input[eye]); \ -  apply_low(sp[-2].u.object, orfun, 1); \ -  stack_swap(); \ -  pop_stack(); \ +  o_or(); \    eye++; \    } \    sval=*--sp; \    break; \    } \    ); \    sval.u.integer<<=8; \    sval.u.integer |= input[eye]; \    eye++; \    } \    break; \ -  +  } \    \    case 'b': \    case 'o': \    case 'd': \    case 'x': \    case 'D': \    case 'i': \    { \    int base = 0; \    PIKE_CONCAT(p_wchar, INPUT_SHIFT) *t; \
pike.git/src/opcodes.c:1433:    break; \   CHAROPT( \    }else{ \    if(set.a) \    { \    INT32 x; \    struct svalue tmp; \    tmp.type=T_INT; \    tmp.u.integer=input[eye]; \    x=switch_lookup(set.a, &tmp); \ -  if( set.neg != (x<0 && (x&1)) ) break; \ +  if( set.neg != (x<0 && (x&1)) ) break; \    }else{ \    break; \    } \    } \   ) \    } \ -  if(set.a) { free_array(set.a); set.a=0; } \ +  if(set.a) { free_array(set.a); set.a=0; } \    sval.type=T_STRING; \    DO_IF_CHECKER(sval.subtype=0); \    sval.u.string=PIKE_CONCAT(make_shared_binary_string, \    INPUT_SHIFT)(input+e,eye-e); \    break; \    \    case 'n': \    sval.type=T_INT; \    sval.subtype=NUMBER_NUMBER; \    sval.u.integer=eye; \
pike.git/src/opcodes.c:1475:    check_stack(1); \    *sp++=sval; \    DO_IF_DEBUG(sval.type=99); \    } \    } \    chars_matched[0]=eye; \    success[0]=1; \    return matches; \   }    +  + /* Confusing? Yes - Hubbe */ +    #define CHAROPT(X) -  + #define CHAROPT2(X) X      MKREADSET(0)   MK_VERY_LOW_SSCANF(0,0) -  +  + #undef CHAROPT2 + #define CHAROPT2(X) X +    MK_VERY_LOW_SSCANF(1,0)   MK_VERY_LOW_SSCANF(2,0)      #undef CHAROPT   #define CHAROPT(X) X -  +    MKREADSET(1)   MKREADSET(2)    -  + #undef CHAROPT2 + #define CHAROPT2(X)      MK_VERY_LOW_SSCANF(0,1) -  + MK_VERY_LOW_SSCANF(0,2) +  + #undef CHAROPT2 + #define CHAROPT2(X) X +    MK_VERY_LOW_SSCANF(1,1)   MK_VERY_LOW_SSCANF(2,1) - MK_VERY_LOW_SSCANF(0,2) +    MK_VERY_LOW_SSCANF(1,2)   MK_VERY_LOW_SSCANF(2,2)      void o_sscanf(INT32 args)   {   #ifdef PIKE_DEBUG    extern int t_flag;   #endif    INT32 e,i;    int x;