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