mirror of
https://github.com/python/cpython.git
synced 2025-08-27 12:16:04 +00:00
gh-121485: Always use 64-bit integers for integers bits count (GH-121486)
Use 64-bit integers instead of platform specific size_t or Py_ssize_t to represent the number of bits in Python integer.
This commit is contained in:
parent
58ce131037
commit
32c7dbb2bc
13 changed files with 187 additions and 111 deletions
|
@ -169,9 +169,9 @@ safe_multiply(PyObject *v, PyObject *w)
|
|||
if (PyLong_Check(v) && PyLong_Check(w) &&
|
||||
!_PyLong_IsZero((PyLongObject *)v) && !_PyLong_IsZero((PyLongObject *)w)
|
||||
) {
|
||||
size_t vbits = _PyLong_NumBits(v);
|
||||
size_t wbits = _PyLong_NumBits(w);
|
||||
if (vbits == (size_t)-1 || wbits == (size_t)-1) {
|
||||
uint64_t vbits = _PyLong_NumBits(v);
|
||||
uint64_t wbits = _PyLong_NumBits(w);
|
||||
if (vbits == (uint64_t)-1 || wbits == (uint64_t)-1) {
|
||||
return NULL;
|
||||
}
|
||||
if (vbits + wbits > MAX_INT_SIZE) {
|
||||
|
@ -215,9 +215,9 @@ safe_power(PyObject *v, PyObject *w)
|
|||
if (PyLong_Check(v) && PyLong_Check(w) &&
|
||||
!_PyLong_IsZero((PyLongObject *)v) && _PyLong_IsPositive((PyLongObject *)w)
|
||||
) {
|
||||
size_t vbits = _PyLong_NumBits(v);
|
||||
uint64_t vbits = _PyLong_NumBits(v);
|
||||
size_t wbits = PyLong_AsSize_t(w);
|
||||
if (vbits == (size_t)-1 || wbits == (size_t)-1) {
|
||||
if (vbits == (uint64_t)-1 || wbits == (size_t)-1) {
|
||||
return NULL;
|
||||
}
|
||||
if (vbits > MAX_INT_SIZE / wbits) {
|
||||
|
@ -234,9 +234,9 @@ safe_lshift(PyObject *v, PyObject *w)
|
|||
if (PyLong_Check(v) && PyLong_Check(w) &&
|
||||
!_PyLong_IsZero((PyLongObject *)v) && !_PyLong_IsZero((PyLongObject *)w)
|
||||
) {
|
||||
size_t vbits = _PyLong_NumBits(v);
|
||||
uint64_t vbits = _PyLong_NumBits(v);
|
||||
size_t wbits = PyLong_AsSize_t(w);
|
||||
if (vbits == (size_t)-1 || wbits == (size_t)-1) {
|
||||
if (vbits == (uint64_t)-1 || wbits == (size_t)-1) {
|
||||
return NULL;
|
||||
}
|
||||
if (wbits > MAX_INT_SIZE || vbits > MAX_INT_SIZE - wbits) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue