1 diff -aur ruby-1.8.5.orig/array.c ruby-1.8.5/array.c
2 --- ruby-1.8.5.orig/array.c 2006-06-24 16:53:36.000000000 +0200
3 +++ ruby-1.8.5/array.c 2006-11-12 11:58:46.187673233 +0100
5 rb_ary_modify_check(ary);
6 if (RARRAY(ary)->len == 0) return Qnil;
7 top = RARRAY(ary)->ptr[0];
8 - ary_make_shared(ary);
9 - RARRAY(ary)->ptr++; /* shift ptr */
10 + if (RARRAY(ary)->len < ARY_DEFAULT_SIZE && !FL_TEST(ary, ELTS_SHARED)) {
11 + MEMMOVE(RARRAY(ary)->ptr, RARRAY(ary)->ptr + 1, VALUE, RARRAY(ary)->len - 1);
14 + if (!FL_TEST(ary, ELTS_SHARED)) {
15 + RARRAY(ary)->ptr[0] = Qnil;
17 + ary_make_shared(ary);
18 + RARRAY(ary)->ptr++; /* shift ptr */