diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-03-09 01:27:34 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-03-09 01:27:34 +0900 |
| commit | 452bf73c2317cc4c9cf69b4dbf3ff82c3bde89c3 (patch) | |
| tree | 5fb6ec876dee56c557a101e3b94b01635715809b | |
| parent | 6a23be78055555c005a4d57f0643f652ad39aac8 (diff) | |
| parent | d7b179475b3dbdc4fa6441a74e97560936e4942e (diff) | |
| download | mruby-452bf73c2317cc4c9cf69b4dbf3ff82c3bde89c3.tar.gz mruby-452bf73c2317cc4c9cf69b4dbf3ff82c3bde89c3.zip | |
Merge pull request #1832 from ksss/fix-1823
fix #1823
| -rw-r--r-- | src/hash.c | 9 | ||||
| -rw-r--r-- | test/t/hash.rb | 1 |
2 files changed, 7 insertions, 3 deletions
diff --git a/src/hash.c b/src/hash.c index af3571eaf..34cc15131 100644 --- a/src/hash.c +++ b/src/hash.c @@ -874,6 +874,7 @@ static mrb_value hash_equal(mrb_state *mrb, mrb_value hash1, mrb_value hash2, mrb_bool eql) { khash_t(ht) *h1, *h2; + mrb_bool eq; if (mrb_obj_equal(mrb, hash1, hash2)) return mrb_true_value(); if (!mrb_hash_p(hash2)) { @@ -881,8 +882,6 @@ hash_equal(mrb_state *mrb, mrb_value hash1, mrb_value hash2, mrb_bool eql) return mrb_false_value(); } else { - mrb_bool eq; - if (eql) { eq = mrb_eql(mrb, hash2, hash1); } @@ -908,7 +907,11 @@ hash_equal(mrb_state *mrb, mrb_value hash1, mrb_value hash2, mrb_bool eql) key = kh_key(h1,k1); k2 = kh_get(ht, mrb, h2, key); if (k2 != kh_end(h2)) { - if (mrb_eql(mrb, kh_value(h1,k1), kh_value(h2,k2))) { + if (eql) + eq = mrb_eql(mrb, kh_value(h1,k1), kh_value(h2,k2)); + else + eq = mrb_equal(mrb, kh_value(h1,k1), kh_value(h2,k2)); + if (eq) { continue; /* next key */ } } diff --git a/test/t/hash.rb b/test/t/hash.rb index 92bc223b6..e7d5e8f74 100644 --- a/test/t/hash.rb +++ b/test/t/hash.rb @@ -12,6 +12,7 @@ end assert('Hash#==', '15.2.13.4.1') do assert_true({ 'abc' => 'abc' } == { 'abc' => 'abc' }) assert_false({ 'abc' => 'abc' } == { 'cba' => 'cba' }) + assert_true({ :equal => 1 } == { :equal => 1.0 }) end assert('Hash#[]', '15.2.13.4.2') do |
