summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2021-11-02 17:55:10 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2021-11-04 15:54:31 +0900
commitc21a094a7fa51d94a78d166758b1740eb7f8b370 (patch)
treee484fab8068d65f715a58d09c7fcf3de90b73d19 /src
parent877e82eb92344e1ab96ae9288667a8425b42a376 (diff)
downloadmruby-c21a094a7fa51d94a78d166758b1740eb7f8b370.tar.gz
mruby-c21a094a7fa51d94a78d166758b1740eb7f8b370.zip
hash.c: avoid `mrb_obj_id` to get the hash value if possible.
Diffstat (limited to 'src')
-rw-r--r--src/hash.c7
-rw-r--r--src/object.c2
2 files changed, 8 insertions, 1 deletions
diff --git a/src/hash.c b/src/hash.c
index c0d3d712f..fc6b6fa6b 100644
--- a/src/hash.c
+++ b/src/hash.c
@@ -326,8 +326,15 @@ obj_hash_code(mrb_state *mrb, mrb_value key, struct RHash *h)
case MRB_TT_TRUE:
case MRB_TT_FALSE:
case MRB_TT_SYMBOL:
+ hash_code = U32(mrb_fixnum(key));
+ break;
case MRB_TT_INTEGER:
+ if (mrb_fixnum_p(key)) {
+ hash_code = U32(mrb_fixnum(key));
+ break;
+ }
#ifndef MRB_NO_FLOAT
+ /* fall through */
case MRB_TT_FLOAT:
#endif
hash_code = U32(mrb_obj_id(key));
diff --git a/src/object.c b/src/object.c
index 8eb6b6b5e..de0298fab 100644
--- a/src/object.c
+++ b/src/object.c
@@ -16,7 +16,7 @@ mrb_obj_eq(mrb_state *mrb, mrb_value v1, mrb_value v2)
{
#if defined(MRB_NAN_BOXING)
return v1.u == v2.u;
-#elif defined(MRB_NAN_BOXING)
+#elif defined(MRB_WORD_BOXING)
return v1.w == v2.w;
#else /* MRB_NO_BOXING */
if (mrb_type(v1) != mrb_type(v2)) return FALSE;