From: Masaki Fukushima Date: 1999-10-17T12:44:11+09:00 Subject: [ruby-dev:8044] Array freeze check 福嶋です。 Arrayでfreezeのチェックが幾つか抜けているようです。 % cat foo.rb a = [0,1,2,3] a.freeze p a.pop p a.shift a.reverse! p a a.clear p a % ruby foo.rb 3 0 [2, 1] [] Index: array.c =================================================================== RCS file: /home/cvs/ruby/array.c,v retrieving revision 1.4 diff -u -r1.4 array.c --- array.c 1999/10/16 10:33:05 1.4 +++ array.c 1999/10/17 03:35:33 @@ -280,6 +280,7 @@ rb_ary_pop(ary) VALUE ary; { + rb_ary_modify(ary); if (RARRAY(ary)->len == 0) return Qnil; if (RARRAY(ary)->len * 10 < RARRAY(ary)->capa && RARRAY(ary)->capa > ARY_DEFAULT_SIZE) { RARRAY(ary)->capa = RARRAY(ary)->len * 2; @@ -294,6 +295,7 @@ { VALUE top; + rb_ary_modify(ary); if (RARRAY(ary)->len == 0) return Qnil; top = RARRAY(ary)->ptr[0]; @@ -844,6 +846,7 @@ VALUE *p1, *p2; VALUE tmp; + rb_ary_modify(ary); if (RARRAY(ary)->len == 0) return ary; p1 = RARRAY(ary)->ptr; @@ -1026,6 +1029,7 @@ rb_ary_clear(ary) VALUE ary; { + rb_ary_modify(ary); RARRAY(ary)->len = 0; if (ARY_DEFAULT_SIZE*3 < RARRAY(ary)->capa) { RARRAY(ary)->capa = ARY_DEFAULT_SIZE * 2; --- 福嶋正機