From 805a4ba314850354680a9e856b1aaec3eb2ddad8 Mon Sep 17 00:00:00 2001 From: ocean Date: Tue, 15 Nov 2005 07:06:00 +0000 Subject: * array.c (rb_ary_fill): tail elements were vanished when the middle part of array was filled. (ie: [0,1,2,3,4].fill(-1,2,1) => [0,1,-1]) * test/ruby/test_array.rb (test_fill): added. git-svn-id: http://svn.ruby-lang.org/repos/ruby/branches/ruby_1_8@9541 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- array.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'array.c') diff --git a/array.c b/array.c index e47ecf3fd..b23c311f0 100644 --- a/array.c +++ b/array.c @@ -2261,9 +2261,13 @@ rb_ary_fill(argc, argv, ary) REALLOC_N(RARRAY(ary)->ptr, VALUE, end); RARRAY(ary)->aux.capa = end; } - if (beg > RARRAY(ary)->len) { - rb_mem_clear(RARRAY(ary)->ptr + RARRAY(ary)->len, end - RARRAY(ary)->len); - } + RARRAY(ary)->len = end; + } + if (beg > RARRAY(ary)->len) { + rb_mem_clear(RARRAY(ary)->ptr + RARRAY(ary)->len, end - RARRAY(ary)->len); + } + else { + rb_mem_clear(RARRAY(ary)->ptr + beg, end - beg); } if (block_p) { @@ -2274,11 +2278,9 @@ rb_ary_fill(argc, argv, ary) v = rb_yield(LONG2NUM(i)); if (i>=RARRAY(ary)->len) break; RARRAY(ary)->ptr[i] = v; - RARRAY(ary)->len = i+1; } } else { - RARRAY(ary)->len = end; p = RARRAY(ary)->ptr + beg; pend = p + len; while (p < pend) { -- cgit