pike.git / src / operators.c

version» Context lines:

pike.git/src/operators.c:583:    {    FLOAT_TYPE f = 0.0;       switch(TYPEOF(Pike_sp[-1]))    {    case T_INT:    f=(FLOAT_TYPE)(Pike_sp[-1].u.integer);    break;       case T_STRING: + #if SIZEOF_FLOAT_TYPE > SIZEOF_DOUBLE    f = -  +  (FLOAT_TYPE)STRTOLD_PCHARP(MKPCHARP(Pike_sp[-1].u.string->str, +  Pike_sp[-1].u.string->size_shift), +  0); + #else +  f =    (FLOAT_TYPE)STRTOD_PCHARP(MKPCHARP(Pike_sp[-1].u.string->str,    Pike_sp[-1].u.string->size_shift),    0); -  + #endif    free_string(Pike_sp[-1].u.string);    break;       default:    Pike_error("Cannot cast %s to float.\n",    get_name_of_type(TYPEOF(Pike_sp[-1])));    }       SET_SVAL(Pike_sp[-1], T_FLOAT, 0, float_number, f);    break;
pike.git/src/operators.c:1665:    return;    }    }    Pike_sp-=args;    push_int(size);    break;    }       case BIT_FLOAT:    { -  double res = Pike_sp[-args].u.float_number; +  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;    }    break;       case BIT_FLOAT|BIT_INT:    { -  double res = 0.0; +  FLOAT_ARG_TYPE res = 0.0;    int i;    for(i=0; i<args; i++)    if (TYPEOF(Pike_sp[i-args]) == T_FLOAT)    res += Pike_sp[i-args].u.float_number;    else -  res += (double)Pike_sp[i-args].u.integer; +  res += (FLOAT_ARG_TYPE)Pike_sp[i-args].u.integer;    Pike_sp-=args;    push_float(res);    return;    }      #define ADD(TYPE, ADD_FUNC, PUSH_FUNC) do { \    struct TYPE *x = ADD_FUNC (Pike_sp - args, args); \    pop_n_elems (args); \    PUSH_FUNC (x); \    return; \
pike.git/src/operators.c:3680:            /*! @decl object|int|float `**(object|int|float arg1, object|int|float arg2)    *!    *! Exponentiation. Raise arg1 to the power of arg2.    *!    */   PMOD_EXPORT void f_exponent(INT32 args)   { -  double a, b; +  FLOAT_ARG_TYPE a, b;       if(args != 2 )    SIMPLE_WRONG_NUM_ARGS_ERROR("`**",2);       switch( TWO_TYPES(TYPEOF(Pike_sp[-2]), TYPEOF(Pike_sp[-1])) )    {    case TWO_TYPES(T_FLOAT,T_FLOAT):    a = Pike_sp[-2].u.float_number;    b = Pike_sp[-1].u.float_number;    goto res_is_powf;       case TWO_TYPES(T_FLOAT,T_INT):    a = Pike_sp[-2].u.float_number; -  b = (double)Pike_sp[-1].u.integer; +  b = (FLOAT_ARG_TYPE)Pike_sp[-1].u.integer;    goto res_is_powf;       case TWO_TYPES(T_INT,T_FLOAT): -  a = (double)Pike_sp[-2].u.integer; -  b = (double)Pike_sp[-1].u.float_number; +  a = (FLOAT_ARG_TYPE)Pike_sp[-2].u.integer; +  b = (FLOAT_ARG_TYPE)Pike_sp[-1].u.float_number;       res_is_powf:    {    Pike_sp-=2; -  + #if SIZEOF_FLOAT_TYPE > SIZEOF_DOUBLE +  push_float( powl( a, b ) ); + #else    push_float( pow( a, b ) ); -  + #endif    return;    }    default:    stack_swap();    convert_stack_top_to_bignum();    stack_swap();    /* FALLTHRU *//* again (this is the slow path).. */       case TWO_TYPES(T_OBJECT,T_INT):    case TWO_TYPES(T_OBJECT,T_FLOAT):