mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Hoisted out ensure_cmp which checks the comparison succeeded
This commit is contained in:
parent
74aaa8e7ab
commit
dd77796f1c
1 changed files with 13 additions and 9 deletions
22
numeric.c
22
numeric.c
|
@ -467,17 +467,23 @@ rb_num_coerce_cmp(VALUE x, VALUE y, ID func)
|
||||||
return Qnil;
|
return Qnil;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static VALUE
|
||||||
|
ensure_cmp(VALUE c, VALUE x, VALUE y)
|
||||||
|
{
|
||||||
|
if (NIL_P(c)) rb_cmperr(x, y);
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
VALUE
|
VALUE
|
||||||
rb_num_coerce_relop(VALUE x, VALUE y, ID func)
|
rb_num_coerce_relop(VALUE x, VALUE y, ID func)
|
||||||
{
|
{
|
||||||
VALUE c, x0 = x, y0 = y;
|
VALUE x0 = x, y0 = y;
|
||||||
|
|
||||||
if (!do_coerce(&x, &y, FALSE) ||
|
if (!do_coerce(&x, &y, FALSE)) {
|
||||||
NIL_P(c = rb_funcall(x, func, 1, y))) {
|
|
||||||
rb_cmperr(x0, y0);
|
rb_cmperr(x0, y0);
|
||||||
return Qnil; /* not reached */
|
UNREACHABLE_RETURN(Qnil);
|
||||||
}
|
}
|
||||||
return c;
|
return ensure_cmp(rb_funcall(x, func, 1, y), x0, y0);
|
||||||
}
|
}
|
||||||
|
|
||||||
NORETURN(static VALUE num_sadded(VALUE x, VALUE name));
|
NORETURN(static VALUE num_sadded(VALUE x, VALUE name));
|
||||||
|
@ -1518,9 +1524,7 @@ flo_cmp(VALUE x, VALUE y)
|
||||||
MJIT_FUNC_EXPORTED int
|
MJIT_FUNC_EXPORTED int
|
||||||
rb_float_cmp(VALUE x, VALUE y)
|
rb_float_cmp(VALUE x, VALUE y)
|
||||||
{
|
{
|
||||||
VALUE c = flo_cmp(x, y);
|
return NUM2INT(ensure_cmp(flo_cmp(x, y), x, y));
|
||||||
if (NIL_P(c)) rb_cmperr(x, y);
|
|
||||||
return NUM2INT(c);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -5093,7 +5097,7 @@ int_upto(VALUE from, VALUE to)
|
||||||
rb_yield(i);
|
rb_yield(i);
|
||||||
i = rb_funcall(i, '+', 1, INT2FIX(1));
|
i = rb_funcall(i, '+', 1, INT2FIX(1));
|
||||||
}
|
}
|
||||||
if (NIL_P(c)) rb_cmperr(i, to);
|
ensure_cmp(c, i, to);
|
||||||
}
|
}
|
||||||
return from;
|
return from;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue