diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2021-11-01 13:35:10 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2021-11-01 13:35:10 +0900 |
| commit | a0dd4668405a061f35aaaad9b15bcf7f651648ba (patch) | |
| tree | b4eccf214671ca93b52ef72227b6e8d6facfdad7 /src/object.c | |
| parent | d8204d51afc0e22aa5e720386af36ca12ddd3b01 (diff) | |
| download | mruby-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/object.c')
| -rw-r--r-- | src/object.c | 7 |
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 |
