@@ -3028,33 +3028,32 @@ PyLong_AsDouble(PyObject *v)
3028
3028
3029
3029
/* Methods */
3030
3030
3031
- static int
3031
+ /* if a < b, return a negative number
3032
+ if a == b, return 0
3033
+ if a > b, return a positive number */
3034
+
3035
+ static Py_ssize_t
3032
3036
long_compare (PyLongObject * a , PyLongObject * b )
3033
3037
{
3034
- Py_ssize_t sign ;
3035
-
3036
- if (Py_SIZE (a ) != Py_SIZE (b )) {
3037
- sign = Py_SIZE (a ) - Py_SIZE (b );
3038
- }
3039
- else {
3038
+ Py_ssize_t sign = Py_SIZE (a ) - Py_SIZE (b );
3039
+ if (sign == 0 ) {
3040
3040
Py_ssize_t i = Py_ABS (Py_SIZE (a ));
3041
- while (-- i >= 0 && a -> ob_digit [i ] == b -> ob_digit [i ])
3042
- ;
3043
- if (i < 0 )
3044
- sign = 0 ;
3045
- else {
3046
- sign = (sdigit )a -> ob_digit [i ] - (sdigit )b -> ob_digit [i ];
3047
- if (Py_SIZE (a ) < 0 )
3048
- sign = - sign ;
3041
+ sdigit diff = 0 ;
3042
+ while (-- i >= 0 ) {
3043
+ diff = (sdigit ) a -> ob_digit [i ] - (sdigit ) b -> ob_digit [i ];
3044
+ if (diff ) {
3045
+ break ;
3046
+ }
3049
3047
}
3048
+ sign = Py_SIZE (a ) < 0 ? - diff : diff ;
3050
3049
}
3051
- return sign < 0 ? -1 : sign > 0 ? 1 : 0 ;
3050
+ return sign ;
3052
3051
}
3053
3052
3054
3053
static PyObject *
3055
3054
long_richcompare (PyObject * self , PyObject * other , int op )
3056
3055
{
3057
- int result ;
3056
+ Py_ssize_t result ;
3058
3057
CHECK_BINOP (self , other );
3059
3058
if (self == other )
3060
3059
result = 0 ;
@@ -5210,7 +5209,8 @@ _PyLong_DivmodNear(PyObject *a, PyObject *b)
5210
5209
{
5211
5210
PyLongObject * quo = NULL , * rem = NULL ;
5212
5211
PyObject * twice_rem , * result , * temp ;
5213
- int cmp , quo_is_odd , quo_is_neg ;
5212
+ int quo_is_odd , quo_is_neg ;
5213
+ Py_ssize_t cmp ;
5214
5214
5215
5215
/* Equivalent Python code:
5216
5216
0 commit comments