summaryrefslogtreecommitdiffstats
path: root/range.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-01-04 22:32:40 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-01-04 22:32:40 +0000
commit967daa09f14dd5e5f0d731e7876d812f7dc501ec (patch)
tree45aa8c0d3c2800fd9e5157979d813ad9332c2194 /range.c
parent9dce99a67bb7ba7bf2e361be57bb5d9c6a801e00 (diff)
downloadruby-967daa09f14dd5e5f0d731e7876d812f7dc501ec.tar.gz
ruby-967daa09f14dd5e5f0d731e7876d812f7dc501ec.tar.xz
ruby-967daa09f14dd5e5f0d731e7876d812f7dc501ec.zip
* range.c (range_max): max value from ... not defined for non
Integer Numeric end values. [ruby-dev:37690] fix: #974 git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@21327 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'range.c')
-rw-r--r--range.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/range.c b/range.c
index bcbb9d921..32c0024a3 100644
--- a/range.c
+++ b/range.c
@@ -567,14 +567,13 @@ range_min(VALUE range)
*
*/
-
static VALUE
range_max(VALUE range)
{
VALUE e = RANGE_END(range);
- int ip = FIXNUM_P(e) || rb_obj_is_kind_of(e, rb_cInteger);
+ int nm = FIXNUM_P(e) || rb_obj_is_kind_of(e, rb_cNumeric);
- if (rb_block_given_p() || (EXCL(range) && !ip)) {
+ if (rb_block_given_p() || (EXCL(range) && !nm)) {
return rb_call_super(0, 0);
}
else {
@@ -584,6 +583,9 @@ range_max(VALUE range)
if (c > 0)
return Qnil;
if (EXCL(range)) {
+ if (!FIXNUM_P(e) && !rb_obj_is_kind_of(e, rb_cInteger)) {
+ rb_raise(rb_eTypeError, "cannot exclude non Integer end value");
+ }
if (c == 0) return Qnil;
if (FIXNUM_P(e)) {
return LONG2NUM(FIX2LONG(e) - 1);
@@ -594,6 +596,7 @@ range_max(VALUE range)
}
}
+
VALUE
rb_range_beg_len(VALUE range, long *begp, long *lenp, long len, int err)
{