Skip to content

Commit b3cde88

Browse files
committed
Merge branch 'pylong_aslong' of github.com:eendebakpt/cpython into pylong_aslong
2 parents d8994b0 + d3fb72a commit b3cde88

1 file changed

Lines changed: 31 additions & 1 deletion

File tree

Objects/longobject.c

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -511,7 +511,7 @@ PyLong_FromDouble(double dval)
511511
long
512512
PyLong_AsLongAndOverflow(PyObject *vv, int *overflow)
513513
{
514-
/* This version by Tim Peters */
514+
/* This version originally by Tim Peters */
515515
PyLongObject *v;
516516
unsigned long x, prev;
517517
long res;
@@ -565,6 +565,36 @@ PyLong_AsLongAndOverflow(PyObject *vv, int *overflow)
565565
goto exit;
566566
}
567567
}
568+
569+
/*
570+
digit *digits = v->long_value.ob_digit;
571+
572+
assert(i >= 2);
573+
#if ((ULONG_MAX >> PyLong_SHIFT)) >= ((1UL << PyLong_SHIFT) - 1)
574+
/* use 2 digits *
575+
--i;
576+
x = digits[i];
577+
x <<= PyLong_SHIFT;
578+
--i;
579+
x |= digits[i];
580+
#else
581+
/* use 1 digit *
582+
//--i;
583+
assert(ULONG_MAX >= ((1UL << PyLong_SHIFT) - 1));
584+
//x = digits[i];
585+
x=0;
586+
#endif
587+
*/
588+
589+
/*
590+
while (--i >= 0) {
591+
if (x > SIZE_MAX >> PyLong_SHIFT) {
592+
*overflow = sign;
593+
goto exit;
594+
}
595+
x = (x << PyLong_SHIFT) | v->long_value.ob_digit[i];
596+
}
597+
*/
568598
/* Haven't lost any bits, but casting to long requires extra
569599
* care (see comment above).
570600
*/

0 commit comments

Comments
 (0)