[#7968] array .{first, last, at} — Kazunori NISHI <kazunori@...>

西@九大です。

25 messages 1999/10/07
[#7969] Re: array .{first, last, at} — nobu.nakada@... 1999/10/07

なかだです。

[#7983] Re: array .{first, last, at} — Kazunori NISHI <kazunori@...> 1999/10/12

西@九大です。

[#7984] Re: array .{first, last, at} — matz@... (Yukihiro Matsumoto) 1999/10/12

まつもと ゆきひろです

[#7985] [patch] Array#delete_at w/ minus value — EGUCHI Osamu <eguchi@...> 1999/10/12

えぐち@エスアンドイーです。

[ruby-dev:8044] Array freeze check

From: Masaki Fukushima <fukusima@...>
Date: 1999-10-17 03:44:11 UTC
List: ruby-dev #8044
福嶋です。

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;


---
福嶋正機

In This Thread

Prev Next