summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2018-10-12 08:25:54 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2018-10-12 08:25:54 +0900
commit82e00ce60f358489ae2c3a7fdbe4da9bf264b286 (patch)
tree16f26e6a8b6538465574b663bbc8a35bff1252a9
parenta690aef8d3219e3123822e741e2bb7c97220425c (diff)
downloadmruby-82e00ce60f358489ae2c3a7fdbe4da9bf264b286.tar.gz
mruby-82e00ce60f358489ae2c3a7fdbe4da9bf264b286.zip
`Hash#delete` should return the deleted value; fix #4133
-rw-r--r--src/hash.c2
-rw-r--r--test/t/hash.rb6
2 files changed, 4 insertions, 4 deletions
diff --git a/src/hash.c b/src/hash.c
index 21dc846af..5bccb3091 100644
--- a/src/hash.c
+++ b/src/hash.c
@@ -460,7 +460,7 @@ sg_del(mrb_state *mrb, seglist *t, mrb_value key, mrb_value *vp)
}
key2 = seg->e[i].key;
if (!mrb_undef_p(key2) && sg_hash_equal(mrb, t, key, key2)) {
- if (vp) *vp = key2;
+ if (vp) *vp = seg->e[i].val;
seg->e[i].key = mrb_undef_value();
t->size--;
return TRUE;
diff --git a/test/t/hash.rb b/test/t/hash.rb
index 5403a5901..8088bfa21 100644
--- a/test/t/hash.rb
+++ b/test/t/hash.rb
@@ -82,12 +82,12 @@ assert('Hash#default_proc', '15.2.13.4.7') do
end
assert('Hash#delete', '15.2.13.4.8') do
- a = { 'abc' => 'abc' }
- b = { 'abc' => 'abc' }
+ a = { 'abc' => 'ABC' }
+ b = { 'abc' => 'ABC' }
b_tmp_1 = false
b_tmp_2 = false
- a.delete('abc')
+ assert_equal 'ABC', a.delete('abc')
b.delete('abc') do |k|
b_tmp_1 = true
end