diff options
| author | ksss <[email protected]> | 2014-04-24 13:53:54 +0000 |
|---|---|---|
| committer | ksss <[email protected]> | 2014-04-24 13:53:54 +0000 |
| commit | 209bf256aa6a42a23211701e6fbc49285cf91ef6 (patch) | |
| tree | 9ad9394bf1a95553fad748445fec46c936bbe77b /mrblib | |
| parent | 18c4741883b69fbd35daf9ef79592a54cc03f0e9 (diff) | |
| download | mruby-209bf256aa6a42a23211701e6fbc49285cf91ef6.tar.gz mruby-209bf256aa6a42a23211701e6fbc49285cf91ef6.zip | |
Range#each fixnums are special
Diffstat (limited to 'mrblib')
| -rw-r--r-- | mrblib/range.rb | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/mrblib/range.rb b/mrblib/range.rb index d587cab45..1ec9ac508 100644 --- a/mrblib/range.rb +++ b/mrblib/range.rb @@ -13,11 +13,23 @@ class Range return to_enum :each unless block_given? val = self.first + last = self.last + + if val.kind_of?(Fixnum) && last.kind_of?(Fixnum) # fixnums are special + lim = last + lim += 1 unless exclude_end? + i = val + while i < lim + block.call(i) + i += 1 + end + return self + end + unless val.respond_to? :succ raise TypeError, "can't iterate" end - last = self.last return self if (val <=> last) > 0 while((val <=> last) < 0) |
