diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-04-01 15:19:11 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-04-01 15:19:11 +0900 |
| commit | 312e11da399e6ccb03a61ef1ce46778970e46827 (patch) | |
| tree | dd993731ab2b45894324c945a6fc0ce7f0490250 /src | |
| parent | 1690fc4c99162aece186fd6e4f5d8fe43e34564e (diff) | |
| download | mruby-312e11da399e6ccb03a61ef1ce46778970e46827.tar.gz mruby-312e11da399e6ccb03a61ef1ce46778970e46827.zip | |
should adjust hash value order at deletion
Diffstat (limited to 'src')
| -rw-r--r-- | src/hash.c | 6 |
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; } } |
