diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2021-10-29 22:51:36 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2021-10-30 17:44:46 +0900 |
| commit | 9f0410789d02fe0d91c46e35b83b31c4cf8d0442 (patch) | |
| tree | ee91c0906210ec3540d8c41bace42d04dfcb614b /src | |
| parent | 85fcd2dc6f91ae4ff1ccf3954c951f19efa3570c (diff) | |
| download | mruby-9f0410789d02fe0d91c46e35b83b31c4cf8d0442.tar.gz mruby-9f0410789d02fe0d91c46e35b83b31c4cf8d0442.zip | |
boxing_nan.h: allow `MRB_INT64` with `MRB_NAN_BOXING`.
Integers out of 32 bit range will be allocated in the heap.
Diffstat (limited to 'src')
| -rw-r--r-- | src/etc.c | 42 | ||||
| -rw-r--r-- | src/kernel.c | 2 |
2 files changed, 20 insertions, 24 deletions
@@ -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 |
