diff options
| -rw-r--r-- | src/hash.c | 6 | ||||
| -rw-r--r-- | src/parse.y | 2 | ||||
| -rw-r--r-- | test/t/hash.rb | 4 |
3 files changed, 4 insertions, 8 deletions
diff --git a/src/hash.c b/src/hash.c index de99065f5..45219cb40 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/src/parse.y b/src/parse.y index 9a7748d30..96f399fb0 100644 --- a/src/parse.y +++ b/src/parse.y @@ -4647,7 +4647,7 @@ mrb_parser_parse(parser_state *p) } } else { - if ((int)tree->car == NODE_SCOPE) { + if ((intptr_t)tree->car == NODE_SCOPE) { p->locals = cons(tree->cdr->car, 0); } if (p->begin_tree) { 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 |
