On Sat, May 18, 2002 at 05:57:46AM +0900, Michael Campbell wrote: > This seems correct to me; you're not calling <=> in the second code > snippet. I disagree. In the second code snippet, I call Foo#==, which is not defined in Foo, but is defined in Comparable (which is in compar.c) to be: static VALUE cmp_equal(x, y) VALUE x, y; { VALUE a[2]; if (x == y) return Qtrue; a[0] = x; a[1] = y; return rb_rescue(cmp_eq, (VALUE)a, cmp_failed, 0); } The feature in question is the rb_rescue at the end of the function. Paul