summaryrefslogtreecommitdiffhomepage
path: root/src/hash.c
diff options
context:
space:
mode:
authorKOBAYASHI Shuji <[email protected]>2020-05-31 17:33:19 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2020-10-12 16:21:44 +0900
commit40d0d8fe0efa6a34b54ef90a93f16b17fe3f3c7b (patch)
treed534c29137acba361bbf6fa85872b1abdade551d /src/hash.c
parentee544dc881453cdd1f18f87344627206834e1ab4 (diff)
downloadmruby-40d0d8fe0efa6a34b54ef90a93f16b17fe3f3c7b.tar.gz
mruby-40d0d8fe0efa6a34b54ef90a93f16b17fe3f3c7b.zip
Fix `Fixnum` and `Float` comparison in `Hash` lookup
```console $ bin/mruby -e 'p({1 => 2}.key?(1.0))' true ``` ```console $ bin/mruby -e 'p({1 => 2}.key?(1.0))' false ```
Diffstat (limited to 'src/hash.c')
-rw-r--r--src/hash.c22
1 files changed, 4 insertions, 18 deletions
diff --git a/src/hash.c b/src/hash.c
index 2eef4afaf..84ed00001 100644
--- a/src/hash.c
+++ b/src/hash.c
@@ -96,27 +96,13 @@ ht_hash_equal(mrb_state *mrb, htable *t, mrb_value a, mrb_value b)
return mrb_symbol(a) == mrb_symbol(b);
case MRB_TT_FIXNUM:
- switch (mrb_type(b)) {
- case MRB_TT_FIXNUM:
- return mrb_fixnum(a) == mrb_fixnum(b);
-#ifndef MRB_NO_FLOAT
- case MRB_TT_FLOAT:
- return (mrb_float)mrb_fixnum(a) == mrb_float(b);
-#endif
- default:
- return FALSE;
- }
+ if (!mrb_fixnum_p(b)) return FALSE;
+ return mrb_fixnum(a) == mrb_fixnum(b);
#ifndef MRB_NO_FLOAT
case MRB_TT_FLOAT:
- switch (mrb_type(b)) {
- case MRB_TT_FIXNUM:
- return mrb_float(a) == (mrb_float)mrb_fixnum(b);
- case MRB_TT_FLOAT:
- return mrb_float(a) == mrb_float(b);
- default:
- return FALSE;
- }
+ if (!mrb_float_p(b)) return FALSE;
+ return mrb_float(a) == mrb_float(b);
#endif
default: