mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* include/ruby/ruby.h,
internal.h, ext/-test-/bignum/bigzero.c: Hide a Bignum definition. [ruby-core:42891] [Feature #6083] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44957 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
d8633ac16c
commit
ab9bc151e8
4 changed files with 53 additions and 43 deletions
|
@ -1,3 +1,10 @@
|
|||
Sat Feb 15 00:27:46 2014 Tanaka Akira <akr@fsij.org>
|
||||
|
||||
* include/ruby/ruby.h,
|
||||
internal.h,
|
||||
ext/-test-/bignum/bigzero.c: Hide a Bignum definition.
|
||||
[ruby-core:42891] [Feature #6083]
|
||||
|
||||
Sat Feb 15 00:13:14 2014 Tanaka Akira <akr@fsij.org>
|
||||
|
||||
* include/ruby/intern.h,
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
#include "ruby.h"
|
||||
#include "internal.h"
|
||||
|
||||
static VALUE
|
||||
bug_big_zero(VALUE self, VALUE length)
|
||||
|
|
|
@ -1069,48 +1069,6 @@ struct RStruct {
|
|||
#define RSTRUCT_SET(st, idx, v) RB_OBJ_WRITE(st, &RSTRUCT_CONST_PTR(st)[idx], (v))
|
||||
#define RSTRUCT_GET(st, idx) (RSTRUCT_CONST_PTR(st)[idx])
|
||||
|
||||
#define RBIGNUM_EMBED_LEN_NUMBITS 3
|
||||
#ifndef RBIGNUM_EMBED_LEN_MAX
|
||||
# if (SIZEOF_VALUE*3/SIZEOF_ACTUAL_BDIGIT) < (1 << RBIGNUM_EMBED_LEN_NUMBITS)-1
|
||||
# define RBIGNUM_EMBED_LEN_MAX (SIZEOF_VALUE*3/SIZEOF_ACTUAL_BDIGIT)
|
||||
# else
|
||||
# define RBIGNUM_EMBED_LEN_MAX ((1 << RBIGNUM_EMBED_LEN_NUMBITS)-1)
|
||||
# endif
|
||||
#endif
|
||||
struct RBignum {
|
||||
struct RBasic basic;
|
||||
union {
|
||||
struct {
|
||||
long len;
|
||||
BDIGIT *digits;
|
||||
} heap;
|
||||
BDIGIT ary[RBIGNUM_EMBED_LEN_MAX];
|
||||
} as;
|
||||
};
|
||||
#define RBIGNUM_SIGN_BIT FL_USER1
|
||||
/* sign: positive:1, negative:0 */
|
||||
#define RBIGNUM_SIGN(b) ((RBASIC(b)->flags & RBIGNUM_SIGN_BIT) != 0)
|
||||
#define RBIGNUM_SET_SIGN(b,sign) \
|
||||
((sign) ? (RBASIC(b)->flags |= RBIGNUM_SIGN_BIT) \
|
||||
: (RBASIC(b)->flags &= ~RBIGNUM_SIGN_BIT))
|
||||
#define RBIGNUM_POSITIVE_P(b) RBIGNUM_SIGN(b)
|
||||
#define RBIGNUM_NEGATIVE_P(b) (!RBIGNUM_SIGN(b))
|
||||
|
||||
#define RBIGNUM_EMBED_FLAG FL_USER2
|
||||
#define RBIGNUM_EMBED_LEN_MASK (FL_USER5|FL_USER4|FL_USER3)
|
||||
#define RBIGNUM_EMBED_LEN_SHIFT (FL_USHIFT+RBIGNUM_EMBED_LEN_NUMBITS)
|
||||
#define RBIGNUM_LEN(b) \
|
||||
((RBASIC(b)->flags & RBIGNUM_EMBED_FLAG) ? \
|
||||
(long)((RBASIC(b)->flags >> RBIGNUM_EMBED_LEN_SHIFT) & \
|
||||
(RBIGNUM_EMBED_LEN_MASK >> RBIGNUM_EMBED_LEN_SHIFT)) : \
|
||||
RBIGNUM(b)->as.heap.len)
|
||||
/* LSB:RBIGNUM_DIGITS(b)[0], MSB:RBIGNUM_DIGITS(b)[RBIGNUM_LEN(b)-1] */
|
||||
#define RBIGNUM_DIGITS(b) \
|
||||
((RBASIC(b)->flags & RBIGNUM_EMBED_FLAG) ? \
|
||||
RBIGNUM(b)->as.ary : \
|
||||
RBIGNUM(b)->as.heap.digits)
|
||||
#define RBIGNUM_LENINT(b) rb_long2int(RBIGNUM_LEN(b))
|
||||
|
||||
#define R_CAST(st) (struct st*)
|
||||
#define RBASIC(obj) (R_CAST(RBasic)(obj))
|
||||
#define ROBJECT(obj) (R_CAST(RObject)(obj))
|
||||
|
@ -1124,7 +1082,6 @@ struct RBignum {
|
|||
#define RDATA(obj) (R_CAST(RData)(obj))
|
||||
#define RTYPEDDATA(obj) (R_CAST(RTypedData)(obj))
|
||||
#define RSTRUCT(obj) (R_CAST(RStruct)(obj))
|
||||
#define RBIGNUM(obj) (R_CAST(RBignum)(obj))
|
||||
#define RFILE(obj) (R_CAST(RFile)(obj))
|
||||
#define RRATIONAL(obj) (R_CAST(RRational)(obj))
|
||||
#define RCOMPLEX(obj) (R_CAST(RComplex)(obj))
|
||||
|
|
45
internal.h
45
internal.h
|
@ -305,6 +305,51 @@ struct method_table_wrapper {
|
|||
size_t serial;
|
||||
};
|
||||
|
||||
#define RBIGNUM_EMBED_LEN_NUMBITS 3
|
||||
#ifndef RBIGNUM_EMBED_LEN_MAX
|
||||
# if (SIZEOF_VALUE*3/SIZEOF_ACTUAL_BDIGIT) < (1 << RBIGNUM_EMBED_LEN_NUMBITS)-1
|
||||
# define RBIGNUM_EMBED_LEN_MAX (SIZEOF_VALUE*3/SIZEOF_ACTUAL_BDIGIT)
|
||||
# else
|
||||
# define RBIGNUM_EMBED_LEN_MAX ((1 << RBIGNUM_EMBED_LEN_NUMBITS)-1)
|
||||
# endif
|
||||
#endif
|
||||
|
||||
struct RBignum {
|
||||
struct RBasic basic;
|
||||
union {
|
||||
struct {
|
||||
long len;
|
||||
BDIGIT *digits;
|
||||
} heap;
|
||||
BDIGIT ary[RBIGNUM_EMBED_LEN_MAX];
|
||||
} as;
|
||||
};
|
||||
#define RBIGNUM_SIGN_BIT FL_USER1
|
||||
/* sign: positive:1, negative:0 */
|
||||
#define RBIGNUM_SIGN(b) ((RBASIC(b)->flags & RBIGNUM_SIGN_BIT) != 0)
|
||||
#define RBIGNUM_SET_SIGN(b,sign) \
|
||||
((sign) ? (RBASIC(b)->flags |= RBIGNUM_SIGN_BIT) \
|
||||
: (RBASIC(b)->flags &= ~RBIGNUM_SIGN_BIT))
|
||||
#define RBIGNUM_POSITIVE_P(b) RBIGNUM_SIGN(b)
|
||||
#define RBIGNUM_NEGATIVE_P(b) (!RBIGNUM_SIGN(b))
|
||||
|
||||
#define RBIGNUM_EMBED_FLAG FL_USER2
|
||||
#define RBIGNUM_EMBED_LEN_MASK (FL_USER5|FL_USER4|FL_USER3)
|
||||
#define RBIGNUM_EMBED_LEN_SHIFT (FL_USHIFT+RBIGNUM_EMBED_LEN_NUMBITS)
|
||||
#define RBIGNUM_LEN(b) \
|
||||
((RBASIC(b)->flags & RBIGNUM_EMBED_FLAG) ? \
|
||||
(long)((RBASIC(b)->flags >> RBIGNUM_EMBED_LEN_SHIFT) & \
|
||||
(RBIGNUM_EMBED_LEN_MASK >> RBIGNUM_EMBED_LEN_SHIFT)) : \
|
||||
RBIGNUM(b)->as.heap.len)
|
||||
/* LSB:RBIGNUM_DIGITS(b)[0], MSB:RBIGNUM_DIGITS(b)[RBIGNUM_LEN(b)-1] */
|
||||
#define RBIGNUM_DIGITS(b) \
|
||||
((RBASIC(b)->flags & RBIGNUM_EMBED_FLAG) ? \
|
||||
RBIGNUM(b)->as.ary : \
|
||||
RBIGNUM(b)->as.heap.digits)
|
||||
#define RBIGNUM_LENINT(b) rb_long2int(RBIGNUM_LEN(b))
|
||||
|
||||
#define RBIGNUM(obj) (R_CAST(RBignum)(obj))
|
||||
|
||||
/* class.c */
|
||||
void rb_class_subclass_add(VALUE super, VALUE klass);
|
||||
void rb_class_remove_from_super_subclasses(VALUE);
|
||||
|
|
Loading…
Add table
Reference in a new issue