pike.git / src / operators.c

version» Context lines:

pike.git/src/operators.c:2305:    }    }       bad_arg_error("`-", sp-2, 2, 2, get_name_of_type(TYPEOF(sp[-2])),    sp-1, "Subtract on different types.\n");    }       switch(TYPEOF(sp[-2]))    {    case T_OBJECT: -  CALL_OPERATOR(LFUN_SUBTRACT,2); -  break; +  if(!call_lfun(LFUN_SUBTRACT, LFUN_RSUBTRACT)) +  bad_arg_error("`-", sp-2, 2, 2, get_name_of_type(TYPEOF(sp[-2])), +  sp-1, "Subtract on objects without subtract operator.\n"); +  return;       case T_ARRAY:    {    struct array *a;       check_array_for_destruct(sp[-2].u.array);    check_array_for_destruct(sp[-1].u.array);    a = subtract_arrays(sp[-2].u.array, sp[-1].u.array);    pop_n_elems(2);    push_array(a);
pike.git/src/operators.c:2348:       case T_FLOAT:    sp--;    sp[-1].u.float_number -= sp[0].u.float_number;    return;       case T_INT:    if(INT_TYPE_SUB_OVERFLOW(sp[-2].u.integer, sp[-1].u.integer))    {    convert_stack_top_to_bignum(); -  f_minus(2); +  call_lfun(LFUN_SUBTRACT, LFUN_RSUBTRACT);    return;    }    sp--;    SET_SVAL(sp[-1], PIKE_T_INT, NUMBER_NUMBER, integer,    sp[-1].u.integer - sp[0].u.integer);    return;       case T_STRING:    {    struct pike_string *s,*ret;
pike.git/src/operators.c:2605:    else    {    int args = 2;    SIMPLE_ARG_TYPE_ERROR("`&", 2, get_name_of_type(TYPEOF(sp[-2])));    }    }       switch(TYPEOF(sp[-2]))    {    case T_OBJECT: -  CALL_OPERATOR(LFUN_AND,2); +  call_lfun(LFUN_AND,LFUN_RAND);    break;       case T_INT:    sp--;    SET_SVAL(sp[-1], PIKE_T_INT, NUMBER_NUMBER, integer,    sp[-1].u.integer & sp[0].u.integer);    break;       case T_MAPPING:    {
pike.git/src/operators.c:2893:    }    } else {    int args = 2;    SIMPLE_ARG_TYPE_ERROR("`|", 2, get_name_of_type(TYPEOF(sp[-2])));    }    }       switch(TYPEOF(sp[-2]))    {    case T_OBJECT: -  CALL_OPERATOR(LFUN_OR,2); +  call_lfun(LFUN_OR,LFUN_ROR);    break;       case T_INT:    sp--;    SET_SVAL(sp[-1], T_INT, NUMBER_NUMBER, integer,    sp[-1].u.integer | sp[0].u.integer);    break;       case T_MAPPING:    {
pike.git/src/operators.c:3139:    }    } else {    int args = 2;    SIMPLE_ARG_TYPE_ERROR("`^", 2, get_name_of_type(TYPEOF(sp[-2])));    }    }       switch(TYPEOF(sp[-2]))    {    case T_OBJECT: -  CALL_OPERATOR(LFUN_XOR,2); +  if(!call_lfun(LFUN_XOR,LFUN_RXOR)) +  { +  int args = 2; +  SIMPLE_ARG_TYPE_ERROR("`^", 1, "type"); +  }    break;       case T_INT:    sp--;    SET_SVAL(sp[-1], T_INT, NUMBER_NUMBER, integer,    sp[-1].u.integer ^ sp[0].u.integer);    break;       case T_MAPPING:    {
pike.git/src/operators.c:4045:    return;    }    }       PIKE_ERROR("`/", "Division on different types.\n", sp, 2);    }       switch(TYPEOF(sp[-2]))    {    case T_OBJECT: -  do_lfun_division: -  CALL_OPERATOR(LFUN_DIVIDE,2); -  break; +  call_lfun(LFUN_DIVIDE,LFUN_RDIVIDE); +  return;       case T_STRING:    {    struct array *ret;    ret=explode(sp[-2].u.string,sp[-1].u.string);    free_string(sp[-2].u.string);    free_string(sp[-1].u.string);    SET_SVAL(sp[-2], T_ARRAY, 0, array, ret);    sp--;    return;
pike.git/src/operators.c:4087:    INT_TYPE tmp;       if (sp[-1].u.integer == 0)    OP_DIVISION_BY_ZERO_ERROR("`/");       if(INT_TYPE_DIV_OVERFLOW(sp[-2].u.integer, sp[-1].u.integer))    {    stack_swap();    convert_stack_top_to_bignum();    stack_swap(); -  goto do_lfun_division; +  call_lfun(LFUN_DIVIDE,LFUN_RDIVIDE); +  return;    }    else    tmp = sp[-2].u.integer/sp[-1].u.integer;    sp--;       /* What is this trying to solve? /Noring */    /* It fixes rounding towards negative infinity. /mast */    if((sp[-1].u.integer<0) != (sp[0].u.integer<0))    if(tmp*sp[0].u.integer!=sp[-1].u.integer)    tmp--;
pike.git/src/operators.c:4273:    return;    }    }       PIKE_ERROR("`%", "Modulo on different types.\n", sp, 2);    }       switch(TYPEOF(sp[-2]))    {    case T_OBJECT: -  CALL_OPERATOR(LFUN_MOD,2); -  break; +  if(!call_lfun(LFUN_MOD,LFUN_RMOD)) +  PIKE_ERROR("`%", "Modulo on different types.\n", sp, 2); +  return;       case T_FLOAT:    {    FLOAT_TYPE foo;    if(sp[-1].u.float_number == 0.0)    OP_MODULO_BY_ZERO_ERROR("`%");    sp--;    foo = (FLOAT_TYPE)(sp[-1].u.float_number / sp[0].u.float_number);    foo = (FLOAT_TYPE)(sp[-1].u.float_number -    sp[0].u.float_number * floor(foo));