summaryrefslogtreecommitdiffstats
path: root/range.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-08-04 04:31:33 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-08-04 04:31:33 +0000
commit8ff71e339442f9bedfa17a8f3781c89187ee394d (patch)
tree6448711f10de49e5cae0bd6c3f8531c3cac90b6d /range.c
parent86793f1d39f427932afb7e2a9417b11d37cb2589 (diff)
downloadruby-8ff71e339442f9bedfa17a8f3781c89187ee394d.tar.gz
ruby-8ff71e339442f9bedfa17a8f3781c89187ee394d.tar.xz
ruby-8ff71e339442f9bedfa17a8f3781c89187ee394d.zip
* numeric.c (fix_div): should not convert the result into
integer. [ruby-core:05524] git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@8905 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'range.c')
-rw-r--r--range.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/range.c b/range.c
index 684db357a..a361a347e 100644
--- a/range.c
+++ b/range.c
@@ -466,12 +466,21 @@ rb_range_beg_len(range, begp, lenp, len, err)
long len;
int err;
{
- long beg, end, b, e;
+ VALUE b, e;
+ long beg, end;
- if (!rb_obj_is_kind_of(range, rb_cRange)) return Qfalse;
-
- beg = b = NUM2LONG(rb_ivar_get(range, id_beg));
- end = e = NUM2LONG(rb_ivar_get(range, id_end));
+ if (rb_obj_is_kind_of(range, rb_cRange)) {
+ b = rb_ivar_get(range, id_beg);
+ e = rb_ivar_get(range, id_end);
+ }
+ else {
+ b = rb_check_to_integer(range, "begin");
+ if (NIL_P(b)) return Qnil;
+ e = rb_check_to_integer(range, "end");
+ if (NIL_P(e)) return Qnil;
+ }
+ beg = NUM2LONG(b);
+ end = NUM2LONG(e);
if (beg < 0) {
beg += len;