diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-02-26 17:15:00 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-02-26 17:15:00 +0000 |
commit | aba4666e197331362f4a53b37bc21909144a3494 (patch) | |
tree | 9a59a2a739ca7ddbf1d798c7b5ebf66fd927944f /hash.c | |
parent | 52e0246b61c3eb9871761692704e41687f8437c0 (diff) | |
download | ruby-aba4666e197331362f4a53b37bc21909144a3494.tar.gz |
* eval.c (localjump_destination): lambda should not interfere
return from the yielded block.
* hash.c (delete_if_i): use st_delete_safe() (via
rb_hash_delete()) instead of returning ST_DELETE.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@5842 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'hash.c')
-rw-r--r-- | hash.c | 11 |
1 files changed, 6 insertions, 5 deletions
@@ -679,12 +679,13 @@ rb_hash_shift(hash) } static enum st_retval -delete_if_i(key, value) - VALUE key, value; +delete_if_i(key, value, hash) + VALUE key, value, hash; { if (key == Qundef) return ST_CONTINUE; - if (RTEST(rb_yield_values(2, key, value))) - return ST_DELETE; + if (RTEST(rb_yield_values(2, key, value))) { + rb_hash_delete(hash, key); + } return ST_CONTINUE; } @@ -705,7 +706,7 @@ rb_hash_delete_if(hash) VALUE hash; { rb_hash_modify(hash); - rb_hash_foreach(hash, delete_if_i, 0); + rb_hash_foreach(hash, delete_if_i, hash); return hash; } |