pike.git
/
src
/
operators.c
version
»
Context lines:
10
20
40
80
file
none
3
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));