Define Integer#== instead of Bignum#==.

* numeric.c (int_equal): Define Integer#==.

* bignum.c (rb_big_eq): Don't define Bignum#==.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54846 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
akr 2016-04-30 11:18:00 +00:00
parent 70279a5700
commit 25f2c85066
3 changed files with 24 additions and 3 deletions

View File

@ -1,3 +1,9 @@
Sat Apr 30 20:17:08 2016 Tanaka Akira <akr@fsij.org>
* numeric.c (int_equal): Define Integer#==.
* bignum.c (rb_big_eq): Don't define Bignum#==.
Sat Apr 30 19:41:15 2016 Tanaka Akira <akr@fsij.org>
* numeric.c (int_gt): Define Integer#>.

View File

@ -6848,7 +6848,6 @@ Init_Bignum(void)
rb_define_method(rb_cBignum, "/", rb_big_div, 1);
rb_define_method(rb_cBignum, "%", rb_big_modulo, 1);
rb_define_method(rb_cBignum, "==", rb_big_eq, 1);
rb_define_method(rb_cBignum, "===", rb_big_eq, 1);
#ifdef USE_GMP

View File

@ -3747,11 +3747,14 @@ rb_int_pow(VALUE x, VALUE y)
}
/*
* Document-method: Integer#==
* Document-method: Fixnum#==
* call-seq:
* fix == other -> true or false
* int == other -> true or false
*
* Return +true+ if +fix+ equals +other+ numerically.
* Return +true+ if +int+ equals +other+ numerically.
* Contrast this with <code>Integer#eql?</code>, which
* requires <i>other</i> to be a <code>Integer</code>.
*
* 1 == 2 #=> false
* 1 == 1.0 #=> true
@ -3773,6 +3776,18 @@ fix_equal(VALUE x, VALUE y)
}
}
static VALUE
int_equal(VALUE x, VALUE y)
{
if (FIXNUM_P(x)) {
return fix_equal(x, y);
}
else if (RB_TYPE_P(x, T_BIGNUM)) {
return rb_big_eq(x, y);
}
return Qnil;
}
/*
* Document-method: Integer#<=>
* call-seq:
@ -4937,6 +4952,7 @@ Init_Numeric(void)
rb_define_method(rb_cInteger, "abs", int_abs, 0);
rb_define_method(rb_cInteger, "magnitude", int_abs, 0);
rb_define_method(rb_cInteger, "==", int_equal, 1);
rb_define_method(rb_cInteger, ">", int_gt, 1);
rb_define_method(rb_cInteger, ">=", int_ge, 1);
rb_define_method(rb_cInteger, "<", int_lt, 1);