Bug #1885 ยป struct_comparison.diff
struct.c (working copy) | ||
---|---|---|
return result;
|
||
}
|
||
static VALUE
|
||
recursive_equal(VALUE s, VALUE s2, int recur)
|
||
{
|
||
long i;
|
||
if (recur) return Qtrue; /* Subtle! */
|
||
for (i=0; i<RSTRUCT_LEN(s); i++) {
|
||
if (!rb_eql(RSTRUCT_PTR(s)[i], RSTRUCT_PTR(s2)[i])) return Qfalse;
|
||
}
|
||
return Qtrue;
|
||
}
|
||
/*
|
||
* call-seq:
|
||
* struct == other_struct => true or false
|
||
... | ... | |
static VALUE
|
||
rb_struct_equal(VALUE s, VALUE s2)
|
||
{
|
||
long i;
|
||
if (s == s2) return Qtrue;
|
||
if (TYPE(s2) != T_STRUCT) return Qfalse;
|
||
if (rb_obj_class(s) != rb_obj_class(s2)) return Qfalse;
|
||
... | ... | |
rb_bug("inconsistent struct"); /* should never happen */
|
||
}
|
||
for (i=0; i<RSTRUCT_LEN(s); i++) {
|
||
if (!rb_equal(RSTRUCT_PTR(s)[i], RSTRUCT_PTR(s2)[i])) return Qfalse;
|
||
}
|
||
return Qtrue;
|
||
return rb_exec_recursive_paired(recursive_equal, s, s2, s2);
|
||
}
|
||
static VALUE
|
||
... | ... | |
return rb_exec_recursive(recursive_hash, s, 0);
|
||
}
|
||
static VALUE
|
||
recursive_eql(VALUE s, VALUE s2, int recur)
|
||
{
|
||
long i;
|
||
if (recur) return Qtrue; /* Subtle! */
|
||
for (i=0; i<RSTRUCT_LEN(s); i++) {
|
||
if (!rb_eql(RSTRUCT_PTR(s)[i], RSTRUCT_PTR(s2)[i])) return Qfalse;
|
||
}
|
||
return Qtrue;
|
||
}
|
||
/*
|
||
* code-seq:
|
||
* struct.eql?(other) => true or false
|
||
... | ... | |
static VALUE
|
||
rb_struct_eql(VALUE s, VALUE s2)
|
||
{
|
||
long i;
|
||
if (s == s2) return Qtrue;
|
||
if (TYPE(s2) != T_STRUCT) return Qfalse;
|
||
if (rb_obj_class(s) != rb_obj_class(s2)) return Qfalse;
|
||
... | ... | |
rb_bug("inconsistent struct"); /* should never happen */
|
||
}
|
||
for (i=0; i<RSTRUCT_LEN(s); i++) {
|
||
if (!rb_eql(RSTRUCT_PTR(s)[i], RSTRUCT_PTR(s2)[i])) return Qfalse;
|
||
}
|
||
return Qtrue;
|
||
return rb_exec_recursive_paired(recursive_eql, s, s2, s2);
|
||
}
|
||
/*
|