[#30220] schedule for Ruby 1.8.6 — "Akinori MUSHA" <knu@...>

 ruby-core を読んでいない人もいると思うので、ここでもアナウンス

20 messages 2007/01/30

[ruby-dev:30117] Re: Array#dupがおかしい?

From: "Nobuyoshi Nakada" <nobu@...>
Date: 2007-01-09 10:02:10 UTC
List: ruby-dev #30117
なかだです。

At Tue, 9 Jan 2007 17:41:05 +0900,
madoka yamamoto wrote in [ruby-dev:30116]:
> trunkのrubyを試してたんですがArray#dupがおかしいようです。
>
> ./miniruby -e 'p ([0,1][0,1]).dup'
> #[0, 1]と表示される

lfreeをrevertしたときのミスでしょうか。


Index: array.c
===================================================================
--- array.c	(revision 11516)
+++ array.c	(working copy)
@@ -2091,13 +2091,15 @@ rb_ary_replace(VALUE copy, VALUE orig)
     VALUE *ptr;

-    rb_ary_modify(copy);
-    ary_iter_check(copy);
     orig = to_ary(orig);
+    rb_ary_modify_check(copy);
+    ary_iter_check(copy);
     if (copy == orig) return copy;
     shared = ary_make_shared(orig);
-    ptr = RARRAY(copy)->ptr;
+    if (!ARY_SHARED_P(copy)) {
+	ptr = RARRAY(copy)->ptr;
 	xfree(ptr);
-    RARRAY(copy)->ptr = RARRAY(shared)->ptr;
-    RARRAY(copy)->len = RARRAY(shared)->len;
+    }
+    RARRAY(copy)->ptr = RARRAY(orig)->ptr;
+    RARRAY(copy)->len = RARRAY(orig)->len;
     RARRAY(copy)->aux.shared = shared;
     FL_SET(copy, ELTS_SHARED);


-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

In This Thread