Branch: Tag:

2013-06-17

2013-06-17 21:40:00 by Martin Nilsson <nilsson@opera.com>

Removed auto bignum checks.

61:   #define THIS_PROGRAM (fp->context->prog)      struct program *mpzmod_program = NULL; - #ifdef AUTO_BIGNUM +    struct program *bignum_program = NULL; - #endif +     - #ifdef AUTO_BIGNUM +    static mpz_t mpz_int_type_min;      void mpzmod_reduce(struct object *o)
318:    return 0;   }    - #else - #define PUSH_REDUCED(o) push_object(o) - #endif /* AUTO_BIGNUM */ -  +    /*! @module Gmp    *! GMP is a free library for arbitrary precision arithmetic,    *! operating on signed integers, rational numbers, and floating point
610:   static void mpzmod_get_int(INT32 args)   {    pop_n_elems(args); - #ifdef AUTO_BIGNUM +     add_ref(fp->current_object);    mpzmod_reduce(fp->current_object);    if( TYPEOF(Pike_sp[-1]) == T_OBJECT &&
618: Inside #if defined(AUTO_BIGNUM)
   {    apply_svalue(&auto_bignum_program, 1);    } - #else -  push_int(mpz_get_si(THIS)); - #endif /* AUTO_BIGNUM */ +    }      static INT32 crc_table[256];
841:       switch(method = sp[-args].u.integer)    { - #ifdef AUTO_BIGNUM +     case 't':    pop_n_elems(args);    if(THIS_PROGRAM == bignum_program)
849: Inside #if defined(AUTO_BIGNUM)
   else    push_constant_text("object");    return; - #endif +        case 'O': - #ifdef AUTO_BIGNUM +     if (THIS_PROGRAM == mpzmod_program) { - #endif +     push_constant_text ("Gmp.mpz(");    push_string (low_get_mpz_digits (THIS, 10));    push_constant_text (")");    f_add (3);    s = (--sp)->u.string;    break; - #ifdef AUTO_BIGNUM +     } - #endif +     /* Fall through */       case 'u': /* Note: 'u' is not really supported. */
1127:   }   #endif    - #ifdef AUTO_BIGNUM -  - #define DO_IF_AUTO_BIGNUM(X) X +    double double_from_sval(struct svalue *s)   {    switch(TYPEOF(*s))
1146:    return (double)0.0; /* Keep the compiler happy. */   }    - #else - #define DO_IF_AUTO_BIGNUM(X) - #endif -  +    #define BINFUN2(name, errmsg_op, fun, OP, f_op, LFUN) \   static void name(INT32 args) \   { \    INT32 e; \    struct object *res; \ -  DO_IF_AUTO_BIGNUM( \ +     if(THIS_PROGRAM == bignum_program) \    { \    double ret; \
1209:    return; ) \    } \    } \ -  } ) \ +  } \    for(e=0; e<args; e++) \    if(TYPEOF(sp[e-args]) != T_INT || !FITS_ULONG (sp[e-args].u.integer)) \    get_mpz(sp+e-args, 1, "Gmp.mpz->`" errmsg_op, e + 1, args); \
1231:   { \    INT32 e; \    struct object *res; \ -  DO_IF_AUTO_BIGNUM( \ +     if(THIS_PROGRAM == bignum_program) \    { \    double ret; \
1253:    return; \    } \    } \ -  } ) \ +  } \    for(e=0; e<args; e++) \    if(TYPEOF(sp[e-args]) != T_INT || !FITS_ULONG (sp[e-args].u.integer)) \    get_mpz(sp+e-args, 1, "Gmp.mpz->``" errmsg_op, e + 1, args); \
1274:   static void PIKE_CONCAT(name,_eq)(INT32 args) \   { \    INT32 e; \ -  DO_IF_AUTO_BIGNUM( \ +     if(THIS_PROGRAM == bignum_program) \    { \    double ret; \
1300:    return; \    } \    } \ -  } ) \ +  } \    for(e=0; e<args; e++) \    if(TYPEOF(sp[e-args]) != T_INT || !FITS_ULONG (sp[e-args].u.integer)) \    get_mpz(sp+e-args, 1, "Gmp.mpz->`" errmsg_op "=", e + 1, args); \
2251:      PIKE_MODULE_EXIT   { +  extern struct svalue auto_bignum_program;    pike_exit_mpf_module();    pike_exit_mpq_module();   #if defined(USE_GMP) || defined(USE_GMP2)
2259: Inside #if defined(USE_GMP) || defined(USE_GMP2)
   free_program(mpzmod_program);    mpzmod_program=0;    } - #ifdef AUTO_BIGNUM -  { -  extern struct svalue auto_bignum_program; +     free_svalue(&auto_bignum_program);    SET_SVAL_TYPE(auto_bignum_program, PIKE_T_FREE);    if(bignum_program)
2278: Inside #if defined(USE_GMP) || defined(USE_GMP2) and #if defined(AUTO_BIGNUM)
   NULL, NULL, NULL,   #endif    NULL, NULL); -  } +    #endif - #endif +    }      
2423:      PIKE_MODULE_INIT   { +  extern struct svalue auto_bignum_program;   #if defined(USE_GMP) || defined(USE_GMP2) - #ifdef PIKE_DEBUG -  if (mpzmod_program) { -  fatal("Gmp.mpz initialized twice!\n"); -  } - #endif /* PIKE_DEBUG */ +  int id;       init_crc_table();   
2458: Inside #if defined(USE_GMP) || defined(USE_GMP2)
   /* function(int:object) */    ADD_FUNCTION("fac", gmp_fac,tFunc(tInt,tObj), 0);    - #ifdef AUTO_BIGNUM -  { -  int id; -  extern struct svalue auto_bignum_program; -  - #ifdef PIKE_DEBUG -  if (bignum_program) { -  fatal("Gmp.bignum initialized twice!\n"); -  } - #endif /* PIKE_DEBUG */ +     /* This program autoconverts to integers, Gmp.mpz does not!!    * magic? no, just an if statement :) /Hubbe    */
2520: Inside #if 0
   free_type(ID_FROM_INT(Pike_compiler->new_program, id)->type);    ID_FROM_INT(Pike_compiler->new_program, id)->type=CONSTTYPE(tOr(tFunc(tOr5(tVoid,tStr,tInt,tFlt,tObj),tInt),tFunc(tStr tInt,tInt)));   #endif -  } +       #endif    - #endif -  +     pike_init_mpq_module();    pike_init_mpf_module();   }      /*! @endmodule    */