summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2021-11-01 13:35:10 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2021-11-01 13:35:10 +0900
commita0dd4668405a061f35aaaad9b15bcf7f651648ba (patch)
treeb4eccf214671ca93b52ef72227b6e8d6facfdad7 /src
parentd8204d51afc0e22aa5e720386af36ca12ddd3b01 (diff)
downloadmruby-a0dd4668405a061f35aaaad9b15bcf7f651648ba.tar.gz
mruby-a0dd4668405a061f35aaaad9b15bcf7f651648ba.zip
object.c: fast implementation of `mrb_obj_eq`.
For `MRB_NAN_BOXING` and `MRB_WORD_BOXING`.
Diffstat (limited to 'src')
-rw-r--r--src/object.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/object.c b/src/object.c
index b3c9973bf..8eb6b6b5e 100644
--- a/src/object.c
+++ b/src/object.c
@@ -14,12 +14,18 @@
MRB_API mrb_bool
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)
+ return v1.w == v2.w;
+#else /* MRB_NO_BOXING */
if (mrb_type(v1) != mrb_type(v2)) return FALSE;
switch (mrb_type(v1)) {
case MRB_TT_TRUE:
return TRUE;
case MRB_TT_FALSE:
+ return (mrb_fixnum(v1) == mrb_fixnum(v2));
case MRB_TT_INTEGER:
return (mrb_integer(v1) == mrb_integer(v2));
case MRB_TT_SYMBOL:
@@ -33,6 +39,7 @@ mrb_obj_eq(mrb_state *mrb, mrb_value v1, mrb_value v2)
default:
return (mrb_ptr(v1) == mrb_ptr(v2));
}
+#endif
}
MRB_API mrb_bool