In rb_protect_inspect (array.c), I see this: return rb_ensure(inspect_call, (VALUE)&iarg, inspect_ensure, obj); But in eval.c, rb_ensure is defined as follows: VALUE rb_ensure(b_proc, data1, e_proc, data2) VALUE (*b_proc)(); VALUE (*e_proc)(); VALUE data1, data2; { ... } It seems there's an argument mismatch here. Should arguments 2 and 3 be swapped? Paul