From acdc2d1f242f2547ca842be5d62a2b06356b39ea Mon Sep 17 00:00:00 2001 From: YAMAMOTO Masaya Date: Wed, 11 Oct 2017 17:53:17 +0900 Subject: Add MRB_WITHOUT_FLOAT --- src/etc.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'src/etc.c') diff --git a/src/etc.c b/src/etc.c index ccf4f3992..1b8d44a53 100644 --- a/src/etc.c +++ b/src/etc.c @@ -87,14 +87,20 @@ mrb_obj_to_sym(mrb_state *mrb, mrb_value name) } MRB_API mrb_int +#ifdef MRB_WITHOUT_FLOAT +mrb_fixnum_id(mrb_int f) +#else mrb_float_id(mrb_float f) +#endif { const char *p = (const char*)&f; int len = sizeof(f); uint32_t id = 0; +#ifndef MRB_WITHOUT_FLOAT /* normalize -0.0 to 0.0 */ if (f == 0) f = 0.0; +#endif while (len--) { id = id*65599 + *p; p++; @@ -125,9 +131,13 @@ mrb_obj_id(mrb_value obj) case MRB_TT_SYMBOL: return MakeID(mrb_symbol(obj)); case MRB_TT_FIXNUM: +#ifdef MRB_WITHOUT_FLOAT + return MakeID(mrb_fixnum_id(mrb_fixnum(obj))); +#else return MakeID2(mrb_float_id((mrb_float)mrb_fixnum(obj)), MRB_TT_FLOAT); case MRB_TT_FLOAT: return MakeID(mrb_float_id(mrb_float(obj))); +#endif case MRB_TT_STRING: case MRB_TT_OBJECT: case MRB_TT_CLASS: @@ -148,6 +158,7 @@ mrb_obj_id(mrb_value obj) } #ifdef MRB_WORD_BOXING +#ifndef MRB_WITHOUT_FLOAT MRB_API mrb_value mrb_word_boxing_float_value(mrb_state *mrb, mrb_float f) { @@ -167,6 +178,7 @@ mrb_word_boxing_float_pool(mrb_state *mrb, mrb_float f) nf->f = f; return mrb_obj_value(nf); } +#endif /* MRB_WITHOUT_FLOAT */ MRB_API mrb_value mrb_word_boxing_cptr_value(mrb_state *mrb, void *p) -- cgit v1.2.3