aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-08-21 04:47:01 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-08-21 04:47:01 +0000
commit271aaf297ec02e60f1b5e98b737e58e7cdf12eb7 (patch)
treed739fff49bee78a0c51bb361a429e36be7a79605
parentbe4fc7941bff50f6c90210a1d9e9178ffc05adda (diff)
downloadruby-271aaf297ec02e60f1b5e98b737e58e7cdf12eb7.tar.gz
* hash.c (rb_hash_clear): use st_clear() unless iterating.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@13125 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog4
-rw-r--r--hash.c5
2 files changed, 7 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 5f3fc450ef..e52e7c23b3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,6 @@
-Tue Aug 21 13:43:49 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Tue Aug 21 13:46:59 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * hash.c (rb_hash_clear): use st_clear() unless iterating.
* st.c (struct st_table_entry): add new members, fore and back, to
iterate in inserted order.
diff --git a/hash.c b/hash.c
index 20bc33b878..910676f498 100644
--- a/hash.c
+++ b/hash.c
@@ -842,7 +842,10 @@ rb_hash_clear(VALUE hash)
{
rb_hash_modify(hash);
if (RHASH(hash)->tbl->num_entries > 0) {
- rb_hash_foreach(hash, clear_i, 0);
+ if (RHASH(hash)->iter_lev > 0)
+ rb_hash_foreach(hash, clear_i, 0);
+ else
+ st_clear(RHASH(hash)->tbl);
}
return hash;