From c21a094a7fa51d94a78d166758b1740eb7f8b370 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Tue, 2 Nov 2021 17:55:10 +0900 Subject: hash.c: avoid `mrb_obj_id` to get the hash value if possible. --- src/hash.c | 7 +++++++ src/object.c | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) (limited to 'src') 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; -- cgit v1.2.3