diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2019-07-16 12:39:30 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2019-07-17 10:36:10 +0900 |
| commit | 2add8641648e00717c97b730be8762aece80029e (patch) | |
| tree | 27dea9ee9463b182fca96a48884184ef69cb1bb0 /mrbgems | |
| parent | 5eef75b678b41249cf4738ef42889090caea2ab0 (diff) | |
| download | mruby-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.c | 27 |
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) |
