From: Nobuyoshi Nakada Date: 2007-01-09T19:02:10+09:00 Subject: [ruby-dev:30117] Re: Array#dupがおかしい? なかだです。 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はできる。 中田 伸悦