diff options
| author | KOBAYASHI Shuji <[email protected]> | 2020-05-31 17:33:19 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2020-10-12 16:21:44 +0900 |
| commit | 40d0d8fe0efa6a34b54ef90a93f16b17fe3f3c7b (patch) | |
| tree | d534c29137acba361bbf6fa85872b1abdade551d /src/hash.c | |
| parent | ee544dc881453cdd1f18f87344627206834e1ab4 (diff) | |
| download | mruby-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.c | 22 |
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: |
