Project

General

Profile

Bug #7676 ยป bug-7676.patch

Anonymous, 01/09/2013 11:00 PM

View differences:

array.c
len1 = RARRAY_LEN(ary1);
for (i = 0; i < len1; i++) {
if (*p1 != *p2) {
if (rb_equal(*p1, *p2)) {
len1 = RARRAY_LEN(ary1);
if (len1 != RARRAY_LEN(ary2))
return Qfalse;
if (len1 < i)
return Qtrue;
p1 = RARRAY_PTR(ary1) + i;
p2 = RARRAY_PTR(ary2) + i;
}
else {
if (rb_equal(*p1, *p2)) {
len1 = RARRAY_LEN(ary1);
if (len1 != RARRAY_LEN(ary2))
return Qfalse;
}
if (len1 < i)
return Qtrue;
p1 = RARRAY_PTR(ary1) + i;
p2 = RARRAY_PTR(ary2) + i;
}
else {
return Qfalse;
}
p1++;
p2++;
object.c
VALUE
rb_equal(VALUE obj1, VALUE obj2)
{
VALUE result;
if (obj1 == obj2) return Qtrue;
result = rb_funcall(obj1, id_eq, 1, obj2);
VALUE result = rb_funcall(obj1, id_eq, 1, obj2);
if (RTEST(result)) return Qtrue;
return Qfalse;
}
test/ruby/test_array.rb
a = [0, 4, 7, 10, 12]
assert_equal(nil, a.bsearch {|x| "foo" }) # undefined behavior
end
def test_array_equal_with_identical_but_nonequal_objects # [ruby-core:51328]
refute [Float::NAN] == [Float::NAN]
o = Object.new
def o.==(other)
false
end
refute [o] == [o]
end
end
    (1-1/1)