diff --git a/ChangeLog b/ChangeLog index 8b5d55500f..587bd28387 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +Fri Aug 24 15:17:40 2001 Yukihiro Matsumoto + + * array.c (rb_ary_equal): check identiry equality first. + + * string.c (rb_str_equal): ditto. + + * struct.c (rb_struct_equal): ditto. + Fri Aug 24 14:45:26 2001 Usaku Nakamura * dln.c (dln_strerror): fix a bug that sometimes made null message on @@ -5,6 +13,10 @@ Fri Aug 24 14:45:26 2001 Usaku Nakamura * win32/win32.c (mystrerror): ditto. +Fri Aug 24 03:15:07 2001 Yukihiro Matsumoto + + * numeric.c (Init_Numeric): undef Integer::new. + Thu Aug 23 10:10:59 2001 Yukihiro Matsumoto * eval.c (is_defined): should not dump core for "defined?(())". diff --git a/array.c b/array.c index 3966890ac4..724cdbb66b 100644 --- a/array.c +++ b/array.c @@ -1341,6 +1341,7 @@ rb_ary_equal(ary1, ary2) { long i; + if (ary1 == ary2) return Qtrue; if (TYPE(ary2) != T_ARRAY) return Qfalse; if (RARRAY(ary1)->len != RARRAY(ary2)->len) return Qfalse; for (i=0; ilen; i++) { diff --git a/bignum.c b/bignum.c index 226fe49e67..754ddce25a 100644 --- a/bignum.c +++ b/bignum.c @@ -1418,8 +1418,6 @@ Init_Bignum() { rb_cBignum = rb_define_class("Bignum", rb_cInteger); - rb_undef_method(CLASS_OF(rb_cBignum), "new"); - rb_define_method(rb_cBignum, "to_s", rb_big_to_s, 0); rb_define_method(rb_cBignum, "coerce", rb_big_coerce, 1); rb_define_method(rb_cBignum, "-@", rb_big_uminus, 0); diff --git a/numeric.c b/numeric.c index 40e607b222..a60cb6c364 100644 --- a/numeric.c +++ b/numeric.c @@ -1125,7 +1125,7 @@ fix_equal(x, y) VALUE x, y; { if (FIXNUM_P(y)) { - return (FIX2LONG(x) == FIX2LONG(y))?Qtrue:Qfalse; + return (x == y)?Qtrue:Qfalse; } else { return num_equal(x, y); @@ -1556,6 +1556,8 @@ Init_Numeric() rb_define_method(rb_cNumeric, "truncate", num_truncate, 0); rb_cInteger = rb_define_class("Integer", rb_cNumeric); + rb_undef_method(CLASS_OF(rb_cInteger), "new"); + rb_define_method(rb_cInteger, "integer?", int_int_p, 0); rb_define_method(rb_cInteger, "upto", int_upto, 1); rb_define_method(rb_cInteger, "downto", int_downto, 1); @@ -1577,8 +1579,6 @@ Init_Numeric() rb_define_singleton_method(rb_cFixnum, "induced_from", rb_fix_induced_from, 1); rb_define_singleton_method(rb_cInteger, "induced_from", rb_int_induced_from, 1); - rb_undef_method(CLASS_OF(rb_cFixnum), "new"); - rb_define_method(rb_cFixnum, "to_s", fix_to_s, 0); rb_define_method(rb_cFixnum, "type", fix_type, 0); diff --git a/string.c b/string.c index 42a1f3b79f..da00bb4bf3 100644 --- a/string.c +++ b/string.c @@ -565,6 +565,7 @@ static VALUE rb_str_equal(str1, str2) VALUE str1, str2; { + if (str1 == str2) return Qtrue; if (TYPE(str2) != T_STRING) return Qfalse; diff --git a/struct.c b/struct.c index ecd9cf46dd..a50c395514 100644 --- a/struct.c +++ b/struct.c @@ -525,6 +525,7 @@ rb_struct_equal(s, s2) { long i; + if (s == s2) return Qtrue; if (TYPE(s2) != T_STRUCT) return Qfalse; if (CLASS_OF(s) != CLASS_OF(s2)) return Qfalse; if (RSTRUCT(s)->len != RSTRUCT(s2)->len) {