summaryrefslogtreecommitdiffhomepage
path: root/mrbgems
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2019-07-16 12:39:30 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2019-07-17 10:36:10 +0900
commit2add8641648e00717c97b730be8762aece80029e (patch)
tree27dea9ee9463b182fca96a48884184ef69cb1bb0 /mrbgems
parent5eef75b678b41249cf4738ef42889090caea2ab0 (diff)
downloadmruby-2add8641648e00717c97b730be8762aece80029e.tar.gz
mruby-2add8641648e00717c97b730be8762aece80029e.zip
Allow `mruby-range-ext` to work with `MRB_WITHOUT_FLOAT`; ref #4576
Diffstat (limited to 'mrbgems')
-rw-r--r--mrbgems/mruby-range-ext/src/range.c27
1 files changed, 23 insertions, 4 deletions
diff --git a/mrbgems/mruby-range-ext/src/range.c b/mrbgems/mruby-range-ext/src/range.c
index fb76fe0d8..b8c76b796 100644
--- a/mrbgems/mruby-range-ext/src/range.c
+++ b/mrbgems/mruby-range-ext/src/range.c
@@ -1,7 +1,3 @@
-#ifdef MRB_WITHOUT_FLOAT
-# error Conflict 'MRB_WITHOUT_FLOAT' configuration in your 'build_config.rb'
-#endif
-
#include <mruby.h>
#include <mruby/range.h>
#include <math.h>
@@ -110,6 +106,7 @@ range_last(mrb_state *mrb, mrb_value range)
* ('a'..'z').size #=> nil
*/
+#ifndef MRB_WITHOUT_FLOAT
static mrb_value
range_size(mrb_state *mrb, mrb_value range)
{
@@ -162,6 +159,28 @@ range_size(mrb_state *mrb, mrb_value range)
}
return mrb_nil_value();
}
+#else
+static mrb_value
+range_size(mrb_state *mrb, mrb_value range)
+{
+ struct RRange *r = mrb_range_ptr(mrb, range);
+ mrb_value beg, end;
+ mrb_int excl;
+
+ beg = RANGE_BEG(r);
+ end = RANGE_END(r);
+ excl = RANGE_EXCL(r) ? 0 : 1;
+
+ if (mrb_fixnum_p(beg) && mrb_fixnum_p(end)) {
+ mrb_int a = mrb_fixnum(beg);
+ mrb_int b = mrb_fixnum(end);
+ mrb_int c = b - a + excl;
+
+ return mrb_fixnum_value(c);
+ }
+ return mrb_nil_value();
+}
+#endif /* MRB_WITHOUT_FLOAT */
void
mrb_mruby_range_ext_gem_init(mrb_state* mrb)