From 6c2be430400d53832eb05d5b617e495121e9241f Mon Sep 17 00:00:00 2001 From: matz Date: Thu, 23 Mar 2000 04:14:31 +0000 Subject: 2000-03-23 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_4@647 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- hash.c | 31 +++++++++++++------------------ 1 file changed, 13 insertions(+), 18 deletions(-) (limited to 'hash.c') diff --git a/hash.c b/hash.c index f3be774e67..cc456a79b9 100644 --- a/hash.c +++ b/hash.c @@ -238,22 +238,16 @@ rb_hash_s_create(argc, argv, klass) VALUE hash; int i; - if (argc == 1) { - if (TYPE(argv[0]) == T_HASH) { - NEWOBJ(hash, struct RHash); - OBJSETUP(hash, klass, T_HASH); + if (argc == 1 && TYPE(argv[0]) == T_HASH) { + NEWOBJ(hash, struct RHash); + OBJSETUP(hash, klass, T_HASH); - hash->iter_lev = 0; - hash->ifnone = Qnil; - hash->tbl = 0; /* avoid GC crashing */ - hash->tbl = st_copy(RHASH(argv[0])->tbl); + hash->iter_lev = 0; + hash->ifnone = Qnil; + hash->tbl = 0; /* avoid GC crashing */ + hash->tbl = st_copy(RHASH(argv[0])->tbl); - return (VALUE)hash; - } - else { - VALUE a = rb_Array(argv[0]); - return rb_hash_s_create(RARRAY(a)->len, RARRAY(a)->ptr, klass); - } + return (VALUE)hash; } if (argc % 2 != 0) { @@ -431,10 +425,11 @@ rb_hash_delete(hash, key) VALUE val; rb_hash_modify(hash); - if (RHASH(hash)->iter_lev > 0 && - st_delete_safe(RHASH(hash)->tbl, &key, &val, Qnil)) { - FL_SET(hash, HASH_DELETED); - return val; + if (RHASH(hash)->iter_lev > 0) { + if (st_delete_safe(RHASH(hash)->tbl, &key, &val, Qnil)) { + FL_SET(hash, HASH_DELETED); + return val; + } } else if (st_delete(RHASH(hash)->tbl, &key, &val)) return val; -- cgit v1.2.3