summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/hash.c6
-rw-r--r--test/t/hash.rb4
2 files changed, 3 insertions, 7 deletions
diff --git a/src/hash.c b/src/hash.c
index 3a2399c27..a435b4afd 100644
--- a/src/hash.c
+++ b/src/hash.c
@@ -602,7 +602,6 @@ mrb_hash_shift(mrb_state *mrb, mrb_value hash)
khash_t(ht) *h = RHASH_TBL(hash);
khiter_t k;
mrb_value delKey, delVal;
- mrb_value result;
mrb_hash_modify(mrb, hash);
if (h) {
@@ -613,10 +612,7 @@ mrb_hash_shift(mrb_state *mrb, mrb_value hash)
delKey = kh_key(h,k);
delVal = mrb_hash_delete_key(mrb, hash, delKey);
- result = mrb_hash_new(mrb, 1);
- k = kh_put(ht, RHASH_TBL(result), KEY(delKey));
- kh_value(RHASH_TBL(result), k) = delVal;
- return result;
+ return mrb_assoc_new(mrb, delKey, delVal);
}
}
}
diff --git a/test/t/hash.rb b/test/t/hash.rb
index 020c2aa3a..62cf241f4 100644
--- a/test/t/hash.rb
+++ b/test/t/hash.rb
@@ -192,10 +192,10 @@ end
assert('Hash#shift', '15.2.13.4.24') do
a = { 'abc_key' => 'abc_value', 'cba_key' => 'cba_value' }
- # TODO Broken ATM (Hash instead of Array
b = a.shift
- a == { 'abc_key' => 'abc_value' }
+ a == { 'abc_key' => 'abc_value' } and
+ b == [ 'cba_key', 'cba_value' ]
end
assert('Hash#size', '15.2.13.4.25') do