summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2014-03-09 01:27:34 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2014-03-09 01:27:34 +0900
commit452bf73c2317cc4c9cf69b4dbf3ff82c3bde89c3 (patch)
tree5fb6ec876dee56c557a101e3b94b01635715809b
parent6a23be78055555c005a4d57f0643f652ad39aac8 (diff)
parentd7b179475b3dbdc4fa6441a74e97560936e4942e (diff)
downloadmruby-452bf73c2317cc4c9cf69b4dbf3ff82c3bde89c3.tar.gz
mruby-452bf73c2317cc4c9cf69b4dbf3ff82c3bde89c3.zip
Merge pull request #1832 from ksss/fix-1823
fix #1823
-rw-r--r--src/hash.c9
-rw-r--r--test/t/hash.rb1
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