From b514a325b560d0f36451050e15dd7ff985171d7b Mon Sep 17 00:00:00 2001 From: "(no author)" <(no author)@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> Date: Tue, 7 Dec 1999 16:47:21 +0000 Subject: This commit was manufactured by cvs2svn to create tag 'v1_4_3'. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/tags/v1_4_3@582 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- array.c | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) (limited to 'array.c') diff --git a/array.c b/array.c index 9cc0ac1815..f3bd553872 100644 --- a/array.c +++ b/array.c @@ -280,6 +280,7 @@ VALUE 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 @@ rb_ary_shift(ary) { VALUE top; + rb_ary_modify(ary); if (RARRAY(ary)->len == 0) return Qnil; top = RARRAY(ary)->ptr[0]; @@ -821,6 +823,7 @@ rb_ary_reverse(ary) VALUE *p1, *p2; VALUE tmp; + rb_ary_modify(ary); if (RARRAY(ary)->len == 0) return ary; p1 = RARRAY(ary)->ptr; @@ -940,22 +943,19 @@ rb_ary_delete_at(ary, at) VALUE ary; VALUE at; { - long i1, i2, pos; + long i, pos = NUM2LONG(at), len = RARRAY(ary)->len; VALUE del = Qnil; rb_ary_modify(ary); - pos = NUM2LONG(at); - for (i1 = i2 = 0; i1 < RARRAY(ary)->len; i1++) { - if (i1 == pos) { - del = RARRAY(ary)->ptr[i1]; - continue; - } - if (i1 != i2) { - RARRAY(ary)->ptr[i2] = RARRAY(ary)->ptr[i1]; - } - i2++; + if (pos >= len) return Qnil; + if (pos < 0) pos += len; + if (pos < 0) return Qnil; + + del = RARRAY(ary)->ptr[pos]; + for (i = pos + 1; i < len; i++, pos++) { + RARRAY(ary)->ptr[pos] = RARRAY(ary)->ptr[i]; } - RARRAY(ary)->len = i2; + RARRAY(ary)->len = pos; return del; } @@ -1005,6 +1005,7 @@ static VALUE 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; -- cgit v1.2.3