diff options
| author | Yukihiro Matsumoto <[email protected]> | 2012-06-01 02:30:54 +0900 |
|---|---|---|
| committer | Yukihiro Matsumoto <[email protected]> | 2012-06-01 02:30:54 +0900 |
| commit | b7d5ccdb36528b2ab0009e4ec443b53e91ffb89e (patch) | |
| tree | 494ef31e43d5c14ce5ab194511af92b4451436df | |
| parent | 1321a157c25d7931ca57e3dafc27b4d0c6d8d5f0 (diff) | |
| download | mruby-b7d5ccdb36528b2ab0009e4ec443b53e91ffb89e.tar.gz mruby-b7d5ccdb36528b2ab0009e4ec443b53e91ffb89e.zip | |
small refactoring; hash->ht should not be NULL
| -rw-r--r-- | src/hash.c | 47 |
1 files changed, 9 insertions, 38 deletions
diff --git a/src/hash.c b/src/hash.c index 12c03b6de..2b5657c75 100644 --- a/src/hash.c +++ b/src/hash.c @@ -59,12 +59,11 @@ mrb_hash_ht_key(mrb_state *mrb, mrb_value key) #define KEY(key) mrb_hash_ht_key(mrb, key) void -mrb_gc_mark_ht(mrb_state *mrb, struct RHash *c) +mrb_gc_mark_ht(mrb_state *mrb, struct RHash *hash) { khiter_t k; - khash_t(ht) *h = ((struct RHash*)c)->ht; + khash_t(ht) *h = hash->ht; - if (!h) return; for (k = kh_begin(h); k != kh_end(h); k++) if (kh_exist(h, k)) { mrb_gc_mark_value(mrb, kh_key(h, k)); @@ -73,23 +72,15 @@ mrb_gc_mark_ht(mrb_state *mrb, struct RHash *c) } size_t -mrb_gc_mark_ht_size(mrb_state *mrb, struct RHash *c) +mrb_gc_mark_ht_size(mrb_state *mrb, struct RHash *hash) { - size_t ht_size = 0; - khash_t(ht) *h = c->ht; - - /* ((struct RHash*)c)->ht */ - if (h) ht_size += kh_size(h)*2; - - return ht_size; + return kh_size(hash->ht)*2; } void -mrb_gc_free_ht(mrb_state *mrb, struct RHash *c) +mrb_gc_free_ht(mrb_state *mrb, struct RHash *hash) { - khash_t(ht) *h = c->ht; - - kh_destroy(ht, h); + kh_destroy(ht, hash->ht); } @@ -117,11 +108,9 @@ mrb_hash_get(mrb_state *mrb, mrb_value hash, mrb_value key) /* mrb_hash_aref */ khash_t(ht) *h = RHASH_TBL(hash); khiter_t k; - if (h) { - k = kh_get(ht, h, key); - if (k != kh_end(h)) - return kh_value(h, k); - } + k = kh_get(ht, h, key); + if (k != kh_end(h)) + return kh_value(h, k); /* not found */ if (MRB_RHASH_PROCDEFAULT_P(hash)) { @@ -174,21 +163,6 @@ mrb_hash_freeze(mrb_value hash) } mrb_value -mrb_hash(mrb_state *mrb, mrb_value obj) -{ - mrb_value hval = mrb_funcall(mrb, obj, "Hash", 0); -retry: - switch (mrb_type(hval)) { - case MRB_TT_FIXNUM: - return hval; - - default: - hval = mrb_to_int(mrb, hval); - goto retry; - } -} - -mrb_value mrb_hash_dup(mrb_state *mrb, mrb_value hash) { struct RHash* ret; @@ -1311,9 +1285,6 @@ mrb_hash_rassoc(mrb_state *mrb, mrb_value hash) mrb_value key, value, has_key; mrb_get_args(mrb, "o", &key); - if (mrb_nil_p(key)) - mrb_raise(mrb, E_ARGUMENT_ERROR, "wrong number of arguments"); - has_key = mrb_hash_has_keyWithKey(mrb, hash, key); if (mrb_test(has_key)) { value = mrb_hash_get(mrb, hash, key); |
