Simplify fixnum division slightly

* src/data.c (arith_driver): Streamline fixnum division a bit
more, and add a comment about why overflow is impossible.
This responds to a private comment by Stefan Monnier.
This commit is contained in:
Paul Eggert 2019-11-06 11:47:39 -08:00
parent 4ad6c932a8
commit b5bcc6f9ea

View file

@ -2943,7 +2943,7 @@ arith_driver (enum arithop code, ptrdiff_t nargs, Lisp_Object *args,
/* Set ACCUM to the next operation's result if it fits,
else exit the loop. */
bool overflow = false;
bool overflow;
intmax_t a;
switch (code)
{
@ -2953,9 +2953,11 @@ arith_driver (enum arithop code, ptrdiff_t nargs, Lisp_Object *args,
case Adiv:
if (next == 0)
xsignal0 (Qarith_error);
eassert (! INT_DIVIDE_OVERFLOW (accum, next));
a = accum / next;
break;
/* This cannot overflow, as integer overflow can
occur only if the dividend is INTMAX_MIN, but
INTMAX_MIN < MOST_NEGATIVE_FIXNUM <= accum. */
accum /= next;
continue;
case Alogand: accum &= next; continue;
case Alogior: accum |= next; continue;
case Alogxor: accum ^= next; continue;