pike.git
/
src
/
operators.c
version
»
Context lines:
10
20
40
80
file
none
3
pike.git/src/operators.c:1758:
Pike_sp[e-1] = Pike_sp[-1]; Pike_sp--; } } add_strings(args); return; case BIT_INT: { INT_TYPE size = Pike_sp[-args].u.integer;
+
int all_undef = !size && SUBTYPEOF(Pike_sp[-args]);
for(e = -args+1; e < 0; e++) { if (DO_INT_TYPE_ADD_OVERFLOW(size, Pike_sp[e].u.integer, &size)) { convert_svalue_to_bignum(Pike_sp-args); f_add(args); return; }
-
+
all_undef = all_undef && !size && SUBTYPEOF(Pike_sp[e]);
} Pike_sp-=args;
-
+
if (all_undef) {
+
/* Adding UNDEFINED's give UNDEFINED. */
+
push_undefined();
+
} else {
push_int(size);
-
+
}
break; } case BIT_FLOAT: { FLOAT_ARG_TYPE res = Pike_sp[-args].u.float_number; for(e=args-1; e>0; e-- ) res += Pike_sp[-e].u.float_number; Pike_sp -= args-1; Pike_sp[-1].u.float_number = res;