mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* ext/bigdecimal: Workaround fix for bigdecimal test failures caused
by [ruby-dev:47413] [Feature #8509] * ext/bigdecimal/bigdecimal.h (BDIGIT): Make it independent from the definition for bignum.c. (SIZEOF_BDIGITS): Ditto. (BDIGIT_DBL): Ditto. (BDIGIT_DBL_SIGNED): Ditto. (PRI_BDIGIT_PREFIX): Undefine the definition. (PRI_BDIGIT_DBL_PREFIX): Ditto. * ext/bigdecimal/bigdecimal.c (RBIGNUM_ZERO_P): Use rb_bigzero_p. (bigzero_p): Removed. (is_even): Use rb_big_pack. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41502 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
a0d42f0354
commit
a461f2f8bb
3 changed files with 42 additions and 16 deletions
17
ChangeLog
17
ChangeLog
|
@ -1,3 +1,20 @@
|
|||
Fri Jun 21 00:37:31 2013 Tanaka Akira <akr@fsij.org>
|
||||
|
||||
* ext/bigdecimal: Workaround fix for bigdecimal test failures caused
|
||||
by [ruby-dev:47413] [Feature #8509]
|
||||
|
||||
* ext/bigdecimal/bigdecimal.h (BDIGIT): Make it independent from the
|
||||
definition for bignum.c.
|
||||
(SIZEOF_BDIGITS): Ditto.
|
||||
(BDIGIT_DBL): Ditto.
|
||||
(BDIGIT_DBL_SIGNED): Ditto.
|
||||
(PRI_BDIGIT_PREFIX): Undefine the definition.
|
||||
(PRI_BDIGIT_DBL_PREFIX): Ditto.
|
||||
|
||||
* ext/bigdecimal/bigdecimal.c (RBIGNUM_ZERO_P): Use rb_bigzero_p.
|
||||
(bigzero_p): Removed.
|
||||
(is_even): Use rb_big_pack.
|
||||
|
||||
Thu Jun 20 22:52:42 2013 Tanaka Akira <akr@fsij.org>
|
||||
|
||||
* bignum.c (bigmul1_toom3): Don't call bignorm twice.
|
||||
|
|
|
@ -86,23 +86,9 @@ static ID id_eq;
|
|||
#endif
|
||||
|
||||
#ifndef RBIGNUM_ZERO_P
|
||||
# define RBIGNUM_ZERO_P(x) (RBIGNUM_LEN(x) == 0 || \
|
||||
(RBIGNUM_DIGITS(x)[0] == 0 && \
|
||||
(RBIGNUM_LEN(x) == 1 || bigzero_p(x))))
|
||||
# define RBIGNUM_ZERO_P(x) rb_bigzero_p(x)
|
||||
#endif
|
||||
|
||||
static inline int
|
||||
bigzero_p(VALUE x)
|
||||
{
|
||||
long i;
|
||||
BDIGIT *ds = RBIGNUM_DIGITS(x);
|
||||
|
||||
for (i = RBIGNUM_LEN(x) - 1; 0 <= i; i--) {
|
||||
if (ds[i]) return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
#ifndef RRATIONAL_ZERO_P
|
||||
# define RRATIONAL_ZERO_P(x) (FIXNUM_P(RRATIONAL(x)->num) && \
|
||||
FIX2LONG(RRATIONAL(x)->num) == 0)
|
||||
|
@ -2130,7 +2116,11 @@ is_even(VALUE x)
|
|||
return (FIX2LONG(x) % 2) == 0;
|
||||
|
||||
case T_BIGNUM:
|
||||
return (RBIGNUM_DIGITS(x)[0] % 2) == 0;
|
||||
{
|
||||
unsigned long l;
|
||||
rb_big_pack(x, &l, 1);
|
||||
return l % 2 == 0;
|
||||
}
|
||||
|
||||
default:
|
||||
break;
|
||||
|
|
|
@ -19,6 +19,25 @@
|
|||
#include "ruby/ruby.h"
|
||||
#include <float.h>
|
||||
|
||||
#undef BDIGIT
|
||||
#undef SIZEOF_BDIGITS
|
||||
#undef BDIGIT_DBL
|
||||
#undef BDIGIT_DBL_SIGNED
|
||||
#undef PRI_BDIGIT_PREFIX
|
||||
#undef PRI_BDIGIT_DBL_PREFIX
|
||||
|
||||
#ifdef HAVE_INT64_T
|
||||
# define BDIGIT uint32_t
|
||||
# define BDIGIT_DBL uint64_t
|
||||
# define BDIGIT_DBL_SIGNED int64_t
|
||||
# define SIZEOF_BDIGITS 4
|
||||
#else
|
||||
# define BDIGIT uint16_t
|
||||
# define BDIGIT_DBL uint32_t
|
||||
# define BDIGIT_DBL_SIGNED int32_t
|
||||
# define SIZEOF_BDIGITS 2
|
||||
#endif
|
||||
|
||||
#if defined(__cplusplus)
|
||||
extern "C" {
|
||||
#if 0
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue