summaryrefslogtreecommitdiffhomepage
path: root/src/etc.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2017-11-04 12:33:07 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2017-11-04 12:33:07 +0900
commitd6cb4f9cf2027eb20f67238aa6c051448602e7e6 (patch)
treec025d53534298097aadc3d7699de964bd8a7225f /src/etc.c
parent388d26d77027feaa3e107abf7209e2681868bbe6 (diff)
parenta751f7f196e35cf85ac6f5c0d855edeb68b2bf53 (diff)
downloadmruby-d6cb4f9cf2027eb20f67238aa6c051448602e7e6.tar.gz
mruby-d6cb4f9cf2027eb20f67238aa6c051448602e7e6.zip
Merge branch 'pandax381-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)