Index: struct.c =================================================================== --- struct.c (revision 24705) +++ struct.c (working copy) @@ -768,6 +768,18 @@ return result; } +static VALUE +recursive_equal(VALUE s, VALUE s2, int recur) +{ + long i; + + if (recur) return Qtrue; /* Subtle! */ + for (i=0; i true or false @@ -788,8 +800,6 @@ 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; @@ -797,10 +807,7 @@ rb_bug("inconsistent struct"); /* should never happen */ } - for (i=0; i true or false @@ -846,8 +865,6 @@ 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; @@ -855,10 +872,7 @@ rb_bug("inconsistent struct"); /* should never happen */ } - for (i=0; i