From 9f0410789d02fe0d91c46e35b83b31c4cf8d0442 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Fri, 29 Oct 2021 22:51:36 +0900 Subject: boxing_nan.h: allow `MRB_INT64` with `MRB_NAN_BOXING`. Integers out of 32 bit range will be allocated in the heap. --- src/etc.c | 42 +++++++++++++++++++----------------------- src/kernel.c | 2 +- 2 files changed, 20 insertions(+), 24 deletions(-) (limited to 'src') diff --git a/src/etc.c b/src/etc.c index 11784214a..ad1b18662 100644 --- a/src/etc.c +++ b/src/etc.c @@ -145,13 +145,7 @@ mrb_obj_id(mrb_value obj) } } -#if defined(MRB_NAN_BOXING) && defined(MRB_64BIT) -#define mrb_xxx_boxing_cptr_value mrb_nan_boxing_cptr_value -#endif - #ifdef MRB_WORD_BOXING -#define mrb_xxx_boxing_cptr_value mrb_word_boxing_cptr_value - #ifndef MRB_NO_FLOAT MRB_API mrb_value mrb_word_boxing_float_value(mrb_state *mrb, mrb_float f) @@ -190,23 +184,7 @@ mrb_word_boxing_value_float(mrb_value v) #endif /* MRB_NO_FLOAT */ MRB_API mrb_value -mrb_word_boxing_int_value(mrb_state *mrb, mrb_int n) -{ - if (FIXABLE(n)) return mrb_fixnum_value(n); - else { - union mrb_value_ v; - - v.p = mrb_obj_alloc(mrb, MRB_TT_INTEGER, mrb->integer_class); - v.ip->i = n; - MRB_SET_FROZEN_FLAG(v.ip); - return v.value; - } -} -#endif /* MRB_WORD_BOXING */ - -#if defined(MRB_WORD_BOXING) || (defined(MRB_NAN_BOXING) && defined(MRB_64BIT)) -MRB_API mrb_value -mrb_xxx_boxing_cptr_value(mrb_state *mrb, void *p) +mrb_word_boxing_cptr_value(mrb_state *mrb, void *p) { mrb_value v; struct RCptr *cptr = MRB_OBJ_ALLOC(mrb, MRB_TT_CPTR, mrb->object_class); @@ -215,6 +193,24 @@ mrb_xxx_boxing_cptr_value(mrb_state *mrb, void *p) cptr->p = p; return v; } +#endif /* MRB_WORD_BOXING */ + +#if defined(MRB_WORD_BOXING) || (defined(MRB_NAN_BOXING) && defined(MRB_INT64)) +MRB_API mrb_value +mrb_boxing_int_value(mrb_state *mrb, mrb_int n) +{ + if (FIXABLE(n)) return mrb_fixnum_value(n); + else { + mrb_value v; + struct RInteger *p; + + p = (struct RInteger*)mrb_obj_alloc(mrb, MRB_TT_INTEGER, mrb->integer_class); + p->i = n; + MRB_SET_FROZEN_FLAG((struct RBasic*)p); + SET_OBJ_VALUE(v, p); + return v; + } +} #endif #if defined _MSC_VER && _MSC_VER < 1900 diff --git a/src/kernel.c b/src/kernel.c index ae9709f3c..5ecebabeb 100644 --- a/src/kernel.c +++ b/src/kernel.c @@ -97,7 +97,7 @@ mrb_equal_m(mrb_state *mrb, mrb_value self) mrb_value mrb_obj_id_m(mrb_state *mrb, mrb_value self) { - return mrb_int_value(mrb, mrb_obj_id(self)); + return mrb_fixnum_value(mrb_obj_id(self)); } static int -- cgit v1.2.3