From 271aaf297ec02e60f1b5e98b737e58e7cdf12eb7 Mon Sep 17 00:00:00 2001 From: nobu Date: Tue, 21 Aug 2007 04:47:01 +0000 Subject: [PATCH] * 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 --- ChangeLog | 4 +++- hash.c | 5 ++++- 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 +Tue Aug 21 13:46:59 2007 Nobuyoshi Nakada + + * 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;