summaryrefslogtreecommitdiff
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
commit53b4c2b87a9c6832e663cf5773a8aca9a1cf3341 (patch)
tree6448711f10de49e5cae0bd6c3f8531c3cac90b6d /range.c
parenta767a76ad132befbf1cf39619c55c993c854157a (diff)
* numeric.c (fix_div): should not convert the result into
integer. [ruby-core:05524] git-svn-id: svn+ssh://ci.ruby-lang.org/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 684db357a8..a361a347eb 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;