mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 21:51:50 +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
	
	 Serhiy Storchaka
						Serhiy Storchaka