complex.c: removed redundant conditions

Fixnums can be compared by object values themselves only.
Addition/subtraction/mulplication of fixnum 0 do not affect the
sign.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62701 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2018-03-09 02:06:39 +00:00
Родитель 38b240156c
Коммит 1e30a7e001
1 изменённых файлов: 9 добавлений и 27 удалений

Просмотреть файл

@ -70,12 +70,10 @@ f_##n(VALUE x, VALUE y)\
inline static VALUE
f_add(VALUE x, VALUE y)
{
#ifndef PRESERVE_SIGNEDZERO
if (FIXNUM_P(y) && FIXNUM_ZERO_P(y))
if (FIXNUM_ZERO_P(y))
return x;
else if (FIXNUM_P(x) && FIXNUM_ZERO_P(x))
if (FIXNUM_ZERO_P(x))
return y;
#endif
return rb_funcall(x, '+', 1, y);
}
@ -107,36 +105,20 @@ f_gt_p(VALUE x, VALUE y)
inline static VALUE
f_mul(VALUE x, VALUE y)
{
#ifndef PRESERVE_SIGNEDZERO
if (FIXNUM_P(y)) {
long iy = FIX2LONG(y);
if (iy == 0) {
if (RB_INTEGER_TYPE_P(x))
return ZERO;
}
else if (iy == 1)
return x;
}
else if (FIXNUM_P(x)) {
long ix = FIX2LONG(x);
if (ix == 0) {
if (RB_INTEGER_TYPE_P(y))
return ZERO;
}
else if (ix == 1)
return y;
}
#endif
if (FIXNUM_ZERO_P(y) && RB_INTEGER_TYPE_P(x))
return ZERO;
if (FIXNUM_ZERO_P(x) && RB_INTEGER_TYPE_P(y))
return ZERO;
if (y == ONE) return x;
if (x == ONE) return y;
return rb_funcall(x, '*', 1, y);
}
inline static VALUE
f_sub(VALUE x, VALUE y)
{
#ifndef PRESERVE_SIGNEDZERO
if (FIXNUM_P(y) && FIXNUM_ZERO_P(y))
if (FIXNUM_ZERO_P(y))
return x;
#endif
return rb_funcall(x, '-', 1, y);
}