Commit b5bcc6f9 authored by Paul Eggert's avatar Paul Eggert

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.
parent 4ad6c932
Pipeline #3956 failed with stage
in 59 minutes and 56 seconds
......@@ -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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment