summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--bignum.c8
-rw-r--r--numeric.c18
3 files changed, 22 insertions, 11 deletions
diff --git a/ChangeLog b/ChangeLog
index c79370bace..e3b4e985d9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Sat Apr 30 11:53:48 2016 Tanaka Akira <akr@fsij.org>
+
+ * numeric.c (int_or): {Fixnum,Bignum}#| is unified into
+ Integer.
+
+ * bignum.c (rb_big_or): Don't define Bignum#|.
+
Sat Apr 30 11:18:47 2016 Yuichiro Kaneko <yui-knk@ruby-lang.org>
* vm_trace.c: Fix typos. [ci skip]
diff --git a/bignum.c b/bignum.c
index 35d2fba665..bca8c1ddfe 100644
--- a/bignum.c
+++ b/bignum.c
@@ -6556,13 +6556,6 @@ bigor_int(VALUE x, long xn, BDIGIT hibitsx, long y)
return bignorm(z);
}
-/*
- * call-seq:
- * big | numeric -> integer
- *
- * Performs bitwise +or+ between _big_ and _numeric_.
- */
-
VALUE
rb_big_or(VALUE x, VALUE y)
{
@@ -6978,7 +6971,6 @@ Init_Bignum(void)
rb_define_method(rb_cBignum, "fdiv", rb_big_fdiv, 1);
rb_define_method(rb_cBignum, "**", rb_big_pow, 1);
rb_define_method(rb_cBignum, "&", rb_big_and, 1);
- rb_define_method(rb_cBignum, "|", rb_big_or, 1);
rb_define_method(rb_cBignum, "~", rb_big_neg, 0);
rb_define_method(rb_cBignum, "==", rb_big_eq, 1);
diff --git a/numeric.c b/numeric.c
index 8335a2c45c..95a77d5e4c 100644
--- a/numeric.c
+++ b/numeric.c
@@ -3913,9 +3913,9 @@ fix_and(VALUE x, VALUE y)
}
/*
- * Document-method: Fixnum#|
+ * Document-method: Integer#|
* call-seq:
- * fix | integer -> integer_result
+ * integer | integer -> integer_result
*
* Bitwise OR.
*/
@@ -3936,6 +3936,18 @@ fix_or(VALUE x, VALUE y)
return rb_funcall(x, '|', 1, y);
}
+static VALUE
+int_or(VALUE x, VALUE y)
+{
+ if (FIXNUM_P(x)) {
+ return fix_or(x, y);
+ }
+ else if (RB_TYPE_P(x, T_BIGNUM)) {
+ return rb_big_or(x, y);
+ }
+ return Qnil;
+}
+
/*
* Document-method: Integer#^
* call-seq:
@@ -4769,7 +4781,7 @@ Init_Numeric(void)
rb_define_method(rb_cFixnum, "~", fix_rev, 0);
rb_define_method(rb_cFixnum, "&", fix_and, 1);
- rb_define_method(rb_cFixnum, "|", fix_or, 1);
+ rb_define_method(rb_cInteger, "|", int_or, 1);
rb_define_method(rb_cInteger, "^", int_xor, 1);
rb_define_method(rb_cInteger, "[]", int_aref, 1);