Skip to content

Commit e89d66c

Browse files
eendebakptvstinner
andauthored
Apply suggestions from code review
Co-authored-by: Victor Stinner <vstinner@python.org>
1 parent 73e7b1b commit e89d66c

1 file changed

Lines changed: 13 additions & 9 deletions

File tree

Objects/longobject.c

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -501,20 +501,22 @@ PyLong_FromDouble(double dval)
501501
static inline unsigned long
502502
unroll_digits_ulong(PyLongObject *v, Py_ssize_t *iptr)
503503
{
504+
assert(ULONG_MAX >= ((1UL << PyLong_SHIFT) - 1));
505+
504506
Py_ssize_t i = *iptr;
505-
digit *digits = v->long_value.ob_digit;
506507
assert(i >= 2);
508+
507509
/* unroll 1 digit */
508510
--i;
509-
assert(ULONG_MAX >= ((1UL << PyLong_SHIFT) - 1));
511+
digit *digits = v->long_value.ob_digit;
510512
unsigned long x = digits[i];
511513

512-
#if ((ULONG_MAX >> PyLong_SHIFT)) >= ((1UL << PyLong_SHIFT) - 1)
514+
#if (ULONG_MAX >> PyLong_SHIFT) >= ((1UL << PyLong_SHIFT) - 1)
513515
/* unroll another digit */
514516
x <<= PyLong_SHIFT;
515517
--i;
516518
x |= digits[i];
517-
#endif
519+
#endif
518520

519521
*iptr = i;
520522
return x;
@@ -523,12 +525,14 @@ unroll_digits_ulong(PyLongObject *v, Py_ssize_t *iptr)
523525
static inline size_t
524526
unroll_digits_size_t(PyLongObject *v, Py_ssize_t *iptr)
525527
{
528+
assert(SIZE_MAX >= ((1UL << PyLong_SHIFT) - 1));
529+
526530
Py_ssize_t i = *iptr;
527-
digit *digits = v->long_value.ob_digit;
528531
assert(i >= 2);
532+
529533
/* unroll 1 digit */
530534
--i;
531-
assert(SIZE_MAX >= ((1UL << PyLong_SHIFT) - 1));
535+
digit *digits = v->long_value.ob_digit;
532536
size_t x = digits[i];
533537

534538
#if ( (SIZE_MAX >> PyLong_SHIFT) >= ( ( 1 << PyLong_SHIFT) - 1) )
@@ -690,7 +694,7 @@ PyLong_AsSsize_t(PyObject *vv) {
690694

691695
size_t x = unroll_digits_size_t(v, &i);
692696
while (--i >= 0) {
693-
if (x > SIZE_MAX >> PyLong_SHIFT) {
697+
if (x > (SIZE_MAX >> PyLong_SHIFT)) {
694698
goto overflow;
695699
}
696700
x = (x << PyLong_SHIFT) | v->long_value.ob_digit[i];
@@ -752,7 +756,7 @@ PyLong_AsUnsignedLong(PyObject *vv)
752756

753757
unsigned long x = unroll_digits_ulong(v, &i);
754758
while (--i >= 0) {
755-
if (x > ULONG_MAX >> PyLong_SHIFT) {
759+
if (x > (ULONG_MAX >> PyLong_SHIFT)) {
756760
goto overflow;
757761
}
758762
x = (x << PyLong_SHIFT) | v->long_value.ob_digit[i];
@@ -796,7 +800,7 @@ PyLong_AsSize_t(PyObject *vv)
796800

797801
size_t x = unroll_digits_size_t(v, &i);
798802
while (--i >= 0) {
799-
if (x > SIZE_MAX >> PyLong_SHIFT) {
803+
if (x > (SIZE_MAX >> PyLong_SHIFT)) {
800804
PyErr_SetString(PyExc_OverflowError,
801805
"Python int too large to convert to C size_t");
802806
return (size_t) -1;

0 commit comments

Comments
 (0)