diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-04-26 11:47:14 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-04-26 11:47:14 +0000 |
commit | c7206f51882e441104530f43b522e79f727c090a (patch) | |
tree | 8c7291b6f8b3dc6e7d2e820bcfcb70ca8616fb56 /numeric.c | |
parent | 3e29ad69160f3f2df6d7ddecda5b4d34c9cd48c3 (diff) | |
download | ruby-c7206f51882e441104530f43b522e79f727c090a.tar.gz |
{Fixnum,Bignum}#size is unified into Integer.
* numeric.c (int_size): {Fixnum,Bignum}#size is unified into Integer.
* bignum.c (rb_big_size_m): Don't define Bignum#size.
* internal.h (rb_big_size_m): Declared.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54780 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'numeric.c')
-rw-r--r-- | numeric.c | 23 |
1 files changed, 19 insertions, 4 deletions
@@ -4104,21 +4104,36 @@ int_abs(VALUE num) return Qnil; } +static VALUE +fix_size(VALUE fix) +{ + return INT2FIX(sizeof(long)); +} + /* * call-seq: - * fix.size -> fixnum + * int.size -> int * * Returns the number of bytes in the machine representation of +fix+. * * 1.size #=> 4 * -1.size #=> 4 * 2147483647.size #=> 4 + * (256**10 - 1).size #=> 12 + * (256**20 - 1).size #=> 20 + * (256**40 - 1).size #=> 40 */ static VALUE -fix_size(VALUE fix) +int_size(VALUE num) { - return INT2FIX(sizeof(long)); + if (FIXNUM_P(num)) { + return fix_size(num); + } + else if (RB_TYPE_P(num, T_BIGNUM)) { + return rb_big_size_m(num); + } + return Qnil; } static VALUE @@ -4669,7 +4684,7 @@ Init_Numeric(void) rb_define_method(rb_cFixnum, "<<", rb_fix_lshift, 1); rb_define_method(rb_cFixnum, ">>", rb_fix_rshift, 1); - rb_define_method(rb_cFixnum, "size", fix_size, 0); + rb_define_method(rb_cInteger, "size", int_size, 0); rb_define_method(rb_cInteger, "bit_length", rb_int_bit_length, 0); rb_define_method(rb_cFixnum, "succ", fix_succ, 0); |