aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-04-30 09:48:25 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-04-30 09:48:25 +0000
commit60712bdc10947b53508ff6f5ab064e5462776968 (patch)
tree20444740e2fce4c4f6dad0269f610b73cca646a6
parent82baf3973f6a691038c0d65d4f282a8a2485dc42 (diff)
downloadruby-60712bdc10947b53508ff6f5ab064e5462776968.tar.gz
Define Integer#<= instead of Bignum#<=.
* numeric.c (int_le): Define Integer#<=. * bignum.c (rb_big_le): Don't define Bignum#<=. Renamed from big_le. * internal.h (rb_big_le): Declared. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54841 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog9
-rw-r--r--bignum.c13
-rw-r--r--internal.h1
-rw-r--r--numeric.c19
4 files changed, 29 insertions, 13 deletions
diff --git a/ChangeLog b/ChangeLog
index 9c68d832ef..67176ea4d9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+Sat Apr 30 18:44:05 2016 Tanaka Akira <akr@fsij.org>
+
+ * numeric.c (int_le): Define Integer#<=.
+
+ * bignum.c (rb_big_le): Don't define Bignum#<=.
+ Renamed from big_le.
+
+ * internal.h (rb_big_le): Declared.
+
Sat Apr 30 18:11:44 2016 Tanaka Akira <akr@fsij.org>
* bignum.c (Init_Bignum): Define Integer#GMP_VERSION.
diff --git a/bignum.c b/bignum.c
index 048568d035..d81f601ba4 100644
--- a/bignum.c
+++ b/bignum.c
@@ -5474,16 +5474,8 @@ big_lt(VALUE x, VALUE y)
return big_op(x, y, big_op_lt);
}
-/*
- * call-seq:
- * big <= real -> true or false
- *
- * Returns <code>true</code> if the value of <code>big</code> is
- * less than or equal to that of <code>real</code>.
- */
-
-static VALUE
-big_le(VALUE x, VALUE y)
+VALUE
+rb_big_le(VALUE x, VALUE y)
{
return big_op(x, y, big_op_le);
}
@@ -6884,7 +6876,6 @@ Init_Bignum(void)
rb_define_method(rb_cBignum, ">", big_gt, 1);
rb_define_method(rb_cBignum, ">=", big_ge, 1);
rb_define_method(rb_cBignum, "<", big_lt, 1);
- rb_define_method(rb_cBignum, "<=", big_le, 1);
rb_define_method(rb_cBignum, "===", rb_big_eq, 1);
#ifdef USE_GMP
diff --git a/internal.h b/internal.h
index 08379cb7b7..e975838d3b 100644
--- a/internal.h
+++ b/internal.h
@@ -787,6 +787,7 @@ VALUE rb_big_abs(VALUE x);
VALUE rb_big_size_m(VALUE big);
VALUE rb_big_bit_length(VALUE big);
VALUE rb_big_remainder(VALUE x, VALUE y);
+VALUE rb_big_le(VALUE x, VALUE y);
/* class.c */
VALUE rb_class_boot(VALUE);
diff --git a/numeric.c b/numeric.c
index 314207bc71..7b4ba01479 100644
--- a/numeric.c
+++ b/numeric.c
@@ -3906,11 +3906,12 @@ fix_lt(VALUE x, VALUE y)
}
/*
+ * Document-method: Integer#<=
* Document-method: Fixnum#<=
* call-seq:
- * fix <= real -> true or false
+ * int <= real -> true or false
*
- * Returns +true+ if the value of +fix+ is less than or equal to that of
+ * Returns +true+ if the value of +int+ is less than or equal to that of
* +real+.
*/
@@ -3933,6 +3934,18 @@ fix_le(VALUE x, VALUE y)
}
}
+static VALUE
+int_le(VALUE x, VALUE y)
+{
+ if (FIXNUM_P(x)) {
+ return fix_le(x, y);
+ }
+ else if (RB_TYPE_P(x, T_BIGNUM)) {
+ return rb_big_le(x, y);
+ }
+ return Qnil;
+}
+
/*
* Document-method: Integer#~
* call-seq:
@@ -4885,6 +4898,8 @@ 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_le, 1);
+
rb_define_method(rb_cFixnum, "==", fix_equal, 1);
rb_define_method(rb_cFixnum, "===", fix_equal, 1);
rb_define_method(rb_cFixnum, ">", fix_gt, 1);