+++ /dev/null
-diff -aur ruby-1.8.5.orig/array.c ruby-1.8.5/array.c
---- ruby-1.8.5.orig/array.c 2006-06-24 16:53:36.000000000 +0200
-+++ ruby-1.8.5/array.c 2006-11-12 11:58:46.187673233 +0100
-@@ -501,8 +501,16 @@
- rb_ary_modify_check(ary);
- if (RARRAY(ary)->len == 0) return Qnil;
- top = RARRAY(ary)->ptr[0];
-- ary_make_shared(ary);
-- RARRAY(ary)->ptr++; /* shift ptr */
-+ if (RARRAY(ary)->len < ARY_DEFAULT_SIZE && !FL_TEST(ary, ELTS_SHARED)) {
-+ MEMMOVE(RARRAY(ary)->ptr, RARRAY(ary)->ptr + 1, VALUE, RARRAY(ary)->len - 1);
-+ }
-+ else {
-+ if (!FL_TEST(ary, ELTS_SHARED)) {
-+ RARRAY(ary)->ptr[0] = Qnil;
-+ }
-+ ary_make_shared(ary);
-+ RARRAY(ary)->ptr++; /* shift ptr */
-+ }
- RARRAY(ary)->len--;
-
- return top;