From 1d4b26ecfc9500f7de48d24e8a1ba1ec2cc5eeac Mon Sep 17 00:00:00 2001 From: Carson McDonald Date: Wed, 26 Jun 2013 08:37:28 -0400 Subject: Add arena save/restore around use of hash KEY. --- src/hash.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/hash.c') diff --git a/src/hash.c b/src/hash.c index 5d78a6ea7..9b8c546b9 100644 --- a/src/hash.c +++ b/src/hash.c @@ -145,7 +145,9 @@ mrb_hash_set(mrb_state *mrb, mrb_value hash, mrb_value key, mrb_value val) /* mr k = kh_get(ht, h, key); if (k == kh_end(h)) { /* expand */ + int ai = mrb_gc_arena_save(mrb); k = kh_put(ht, h, KEY(key)); + mrb_gc_arena_restore(mrb, ai); } kh_value(h, k) = val; @@ -169,7 +171,9 @@ mrb_hash_dup(mrb_state *mrb, mrb_value hash) for (k = kh_begin(h); k != kh_end(h); k++) { if (kh_exist(h,k)) { + int ai = mrb_gc_arena_save(mrb); ret_k = kh_put(ht, ret_h, KEY(kh_key(h,k))); + mrb_gc_arena_restore(mrb, ai); kh_val(ret_h, ret_k) = kh_val(h,k); } } -- cgit v1.2.3 From 4dfa2033b6f811e4c9c6007d0a40521d2ed2948d Mon Sep 17 00:00:00 2001 From: Jun Hiroe Date: Wed, 26 Jun 2013 23:00:42 +0900 Subject: Refactor mrb_hash_has_keyWithKey() func in hash.c --- src/hash.c | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) (limited to 'src/hash.c') diff --git a/src/hash.c b/src/hash.c index 5d78a6ea7..b4a629743 100644 --- a/src/hash.c +++ b/src/hash.c @@ -921,17 +921,12 @@ mrb_hash_has_keyWithKey(mrb_state *mrb, mrb_value hash, mrb_value key) { khash_t(ht) *h = RHASH_TBL(hash); khiter_t k; - mrb_bool result; if (h) { k = kh_get(ht, h, key); - result = (k != kh_end(h)); + return mrb_bool_value(k != kh_end(h)); } - else { - result = 0; - } - - return mrb_bool_value(result); + return mrb_false_value(); } /* 15.2.13.4.13 */ -- cgit v1.2.3 From 0e5ecae325c63e78868fe461b40c12f69f8eb74e Mon Sep 17 00:00:00 2001 From: Jun Hiroe Date: Thu, 27 Jun 2013 21:23:12 +0900 Subject: Refactor mrb_hash_empty_p() func in hash.c --- src/hash.c | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) (limited to 'src/hash.c') diff --git a/src/hash.c b/src/hash.c index e08de0cfe..3684b3b40 100644 --- a/src/hash.c +++ b/src/hash.c @@ -776,16 +776,9 @@ mrb_value mrb_hash_empty_p(mrb_state *mrb, mrb_value self) { khash_t(ht) *h = RHASH_TBL(self); - mrb_bool empty_p; - if (h) { - empty_p = (kh_size(h) == 0); - } - else { - empty_p = 1; - } - - return mrb_bool_value(empty_p); + if (h) return mrb_bool_value(kh_size(h) == 0); + return mrb_true_value(); } static mrb_value -- cgit v1.2.3