Skip to content

Commit

Permalink
* numeric.c (int_upto, int_downto): should fail unless the
Browse files Browse the repository at this point in the history
  argument is comparable.  (ruby-bugs-ja:PR#454)


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3766 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  • Loading branch information
nobu committed May 7, 2003
1 parent a03dd84 commit 89c25a3
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 4 deletions.
5 changes: 5 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
Thu May 8 08:56:04 2003 Nobuyoshi Nakada <[email protected]>

* numeric.c (int_upto, int_downto): should fail unless the
argument is comparable. (ruby-bugs-ja:PR#454)

Wed May 7 01:21:23 2003 Yukihiro Matsumoto <[email protected]>

* numeric.c (num_step): remove epsilon; add margin of 0.5, to make
Expand Down
28 changes: 24 additions & 4 deletions numeric.c
Original file line number Diff line number Diff line change
Expand Up @@ -1653,6 +1653,28 @@ fix_size(fix)
return INT2FIX(sizeof(long));
}

static VALUE
int_compare(i, to, id)
VALUE i, to;
ID id;
{
VALUE cmp = rb_funcall(i, id, 1, to);
if (NIL_P(cmp)) {
char *toclass;

if (SPECIAL_CONST_P(to)) {
to = rb_inspect(to);
toclass = StringValuePtr(to);
}
else {
toclass = rb_obj_classname(to);
}
rb_raise(rb_eArgError, "cannot compare %s with %s",
rb_obj_classname(i), toclass);
}
return cmp;
}

static VALUE
int_upto(from, to)
VALUE from, to;
Expand All @@ -1668,8 +1690,7 @@ int_upto(from, to)
else {
VALUE i = from;

for (;;) {
if (RTEST(rb_funcall(i, '>', 1, to))) break;
while (!int_compare(i, to, '>')) {
rb_yield(i);
i = rb_funcall(i, '+', 1, INT2FIX(1));
}
Expand All @@ -1692,8 +1713,7 @@ int_downto(from, to)
else {
VALUE i = from;

for (;;) {
if (RTEST(rb_funcall(i, '<', 1, to))) break;
while (!int_compare(i, to, '<')) {
rb_yield(i);
i = rb_funcall(i, '-', 1, INT2FIX(1));
}
Expand Down

0 comments on commit 89c25a3

Please sign in to comment.