diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2000-08-07 05:05:04 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2000-08-07 05:05:04 +0000 |
commit | c67251edb478509b4abd9910e0b499a116112a3c (patch) | |
tree | 81d59bfb40b0efc64b3acfc9cbe4dd7d3628af85 /array.c | |
parent | 14fe04bdacfb1bbe1e568c4e1dd4092a64c5ede7 (diff) | |
download | ruby-c67251edb478509b4abd9910e0b499a116112a3c.tar.gz |
matz
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@876 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'array.c')
-rw-r--r-- | array.c | 15 |
1 files changed, 12 insertions, 3 deletions
@@ -1121,7 +1121,7 @@ rb_ary_slice_bang(argc, argv, ary) } static VALUE -rb_ary_delete_if(ary) +rb_ary_reject_bang(ary) VALUE ary; { long i1, i2; @@ -1134,12 +1134,21 @@ rb_ary_delete_if(ary) } i2++; } + if (RARRAY(ary)->len == i2) return Qnil; RARRAY(ary)->len = i2; return ary; } static VALUE +rb_ary_delete_if(ary) + VALUE ary; +{ + rb_ary_reject_bang(ary); + return ary; +} + +static VALUE rb_ary_replace_m(ary, ary2) VALUE ary, ary2; { @@ -1274,7 +1283,7 @@ rb_ary_assoc(ary, key) p = RARRAY(ary)->ptr; pend = p + RARRAY(ary)->len; while (p < pend) { if (TYPE(*p) == T_ARRAY - && RARRAY(*p)->len > 1 + && RARRAY(*p)->len > 0 && rb_equal(RARRAY(*p)->ptr[0], key)) return *p; p++; @@ -1626,7 +1635,7 @@ Init_Array() rb_define_method(rb_cArray, "delete", rb_ary_delete, 1); rb_define_method(rb_cArray, "delete_at", rb_ary_delete_at_m, 1); rb_define_method(rb_cArray, "delete_if", rb_ary_delete_if, 0); - rb_define_method(rb_cArray, "reject!", rb_ary_delete_if, 0); + rb_define_method(rb_cArray, "reject!", rb_ary_reject_bang, 0); rb_define_method(rb_cArray, "replace", rb_ary_replace_m, 1); rb_define_method(rb_cArray, "clear", rb_ary_clear, 0); rb_define_method(rb_cArray, "fill", rb_ary_fill, -1); |