summaryrefslogtreecommitdiffhomepage
path: root/src/etc.c
diff options
context:
space:
mode:
authorYAMAMOTO Masaya <[email protected]>2017-10-11 17:53:17 +0900
committerYAMAMOTO Masaya <[email protected]>2017-10-11 17:58:11 +0900
commitacdc2d1f242f2547ca842be5d62a2b06356b39ea (patch)
tree3479c21be76ce7edde6a5fcacb6f60c1a5698a8a /src/etc.c
parent679dfd75a8aeb26ee4ff0d7c148e1f6e88e39c3d (diff)
downloadmruby-acdc2d1f242f2547ca842be5d62a2b06356b39ea.tar.gz
mruby-acdc2d1f242f2547ca842be5d62a2b06356b39ea.zip
Add MRB_WITHOUT_FLOAT
Diffstat (limited to 'src/etc.c')
-rw-r--r--src/etc.c12
1 files changed, 12 insertions, 0 deletions
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)