pike.git
/
src
/
operators.c
version
»
Context lines:
10
20
40
80
file
none
3
pike.git/src/operators.c:3771:
a = sp[-2].u.float_number; b = (double)sp[-1].u.integer; goto res_is_powf; case TWO_TYPES(T_INT,T_FLOAT): a = (double)sp[-2].u.integer; b = (double)sp[-1].u.float_number; res_is_powf: {
-
double r = pow( a, b );
-
if( r != HUGE_VAL )
-
{
+
sp-=2;
-
push_float(
r
);
+
push_float(
pow(
a, b
)
)
;
return; }
-
}
-
/* When float overflows, switch to bignums. FIXME: mpf? */
-
/* fallthrough */
-
+
default: stack_swap(); convert_stack_top_to_bignum(); stack_swap(); /* fallthrough again (this is the slow path).. */ case TWO_TYPES(T_OBJECT,T_INT): case TWO_TYPES(T_OBJECT,T_OBJECT): if( !call_lfun( LFUN_POW, LFUN_RPOW ) ) Pike_error("Illegal argument 1 to `**.\n");