Array#pop $B$G$N(B capa $B$N=L>.(B

e$B?9ED$H?=$7$^$9!%e(B

e$B$H$"$k>r7o2<$Ge(B ruby_xrealloc
e$B$,0[>o$J9bIQEY$G8F$P$l$F$$$?$N$GD4$Y$F$e(B
e$B$?$H$3$m!$e(B Array#pop e$B$Ge(B capa
e$B$r=L$a$k%3!<%I$KL@$i$+$K%P%0$H;W$o$l$kIte(B
e$BJ,$,$"$C$?$N$G=$@5$7$F$
$^$7$?!%e(B

Index: array.c

RCS file: /src/ruby/array.c,v
retrieving revision 1.188
diff -u -r1.188 array.c
— array.c 24 Jun 2006 14:52:59 -0000 1.188
+++ array.c 13 Jul 2006 04:26:37 -0000
@@ -454,10 +454,11 @@
rb_ary_modify_check(ary);
if (RARRAY(ary)->len == 0) return Qnil;
if (!FL_TEST(ary, ELTS_SHARED) &&

  •       RARRAY(ary)->len * 2 < RARRAY(ary)->aux.capa &&
    
  •       RARRAY(ary)->len * 3 < RARRAY(ary)->aux.capa &&
          RARRAY(ary)->aux.capa > ARY_DEFAULT_SIZE) {
    
  •   RARRAY(ary)->aux.capa = RARRAY(ary)->len * 2;
    
  •   REALLOC_N(RARRAY(ary)->ptr, VALUE, RARRAY(ary)->aux.capa);
    
  •           RARRAY(ary)->aux.capa = RARRAY(ary)->len * 2 ;
    
  •           REALLOC_N(RARRAY(ary)->ptr, VALUE, 
    

RARRAY(ary)->aux.capa);
}
return RARRAY(ary)->ptr[–RARRAY(ary)->len];
}