summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2014-04-01 15:19:11 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2014-04-01 15:19:11 +0900
commit312e11da399e6ccb03a61ef1ce46778970e46827 (patch)
treedd993731ab2b45894324c945a6fc0ce7f0490250 /src
parent1690fc4c99162aece186fd6e4f5d8fe43e34564e (diff)
downloadmruby-312e11da399e6ccb03a61ef1ce46778970e46827.tar.gz
mruby-312e11da399e6ccb03a61ef1ce46778970e46827.zip
should adjust hash value order at deletion
Diffstat (limited to 'src')
-rw-r--r--src/hash.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/hash.c b/src/hash.c
index 05e0ac333..0f534f47e 100644
--- a/src/hash.c
+++ b/src/hash.c
@@ -497,12 +497,18 @@ mrb_hash_delete_key(mrb_state *mrb, mrb_value hash, mrb_value key)
khash_t(ht) *h = RHASH_TBL(hash);
khiter_t k;
mrb_value delVal;
+ mrb_int n;
if (h) {
k = kh_get(ht, mrb, h, key);
if (k != kh_end(h)) {
delVal = kh_value(h, k).v;
+ n = kh_value(h, k).n;
kh_del(ht, mrb, h, k);
+ for (k = kh_begin(h); k != kh_end(h); k++) {
+ if (!kh_exist(h, k)) continue;
+ if (kh_value(h, k).n > n) kh_value(h, k).n--;
+ }
return delVal;
}
}