@@ -1092,7 +1092,8 @@ unsafe_object_compare(PyObject* v, PyObject* w, CompareFuncs compare_funcs)
1092
1092
v -> ob_type -> tp_richcompare != NULL &&
1093
1093
v -> ob_type -> tp_richcompare == compare_funcs .key_richcompare );
1094
1094
#endif
1095
-
1095
+ if (v == w ) return 1 ;
1096
+
1096
1097
PyObject * res = (* compare_funcs .key_richcompare )(v , w , Py_LT );
1097
1098
if (res == NULL )
1098
1099
return -1 ;
@@ -1117,7 +1118,8 @@ unsafe_latin_compare(PyObject* v, PyObject* w, CompareFuncs compare_funcs){
1117
1118
PyUnicode_KIND (v ) == PyUnicode_KIND (w ) &&
1118
1119
PyUnicode_KIND (v ) == PyUnicode_1BYTE_KIND );
1119
1120
#endif
1120
-
1121
+ if (v == w ) return 1 ;
1122
+
1121
1123
int len = Py_MIN (PyUnicode_GET_LENGTH (v ), PyUnicode_GET_LENGTH (w ));
1122
1124
int res = memcmp (PyUnicode_DATA (v ), PyUnicode_DATA (w ), len );
1123
1125
@@ -1137,7 +1139,8 @@ unsafe_long_compare(PyObject *v, PyObject *w, CompareFuncs compare_funcs)
1137
1139
Py_ABS (Py_SIZE (v )) <= 1 &&
1138
1140
Py_ABS (Py_SIZE (w )) <= 1 );
1139
1141
#endif
1140
-
1142
+ if (v == w ) return 1 ;
1143
+
1141
1144
PyLongObject * vl , * wl ;
1142
1145
vl = (PyLongObject * )v ;
1143
1146
wl = (PyLongObject * )w ;
@@ -1161,7 +1164,8 @@ unsafe_float_compare(PyObject *v, PyObject *w, CompareFuncs compare_funcs){
1161
1164
assert (v -> ob_type == w -> ob_type &&
1162
1165
v -> ob_type == & PyFloat_Type );
1163
1166
#endif
1164
-
1167
+ if (v == w ) return 1 ;
1168
+
1165
1169
return PyFloat_AS_DOUBLE (v ) < PyFloat_AS_DOUBLE (w );
1166
1170
}
1167
1171
@@ -1180,7 +1184,8 @@ unsafe_tuple_compare(PyObject* v, PyObject* w, CompareFuncs compare_funcs)
1180
1184
Py_SIZE (v ) > 0 &&
1181
1185
Py_SIZE (w ) > 0 );
1182
1186
#endif
1183
-
1187
+ if (v == w ) return 1 ;
1188
+
1184
1189
PyTupleObject * vt , * wt ;
1185
1190
Py_ssize_t i ;
1186
1191
Py_ssize_t vlen , wlen ;
@@ -1215,7 +1220,7 @@ unsafe_tuple_compare(PyObject* v, PyObject* w, CompareFuncs compare_funcs)
1215
1220
1216
1221
/* Out of options: v[0] == w[0]! We need to look at v[1:] and w[1:].
1217
1222
* We can use code copied straight from tupleobject.c:tuplerichcompare: */
1218
- for (i = 0 ; i < vlen && i < wlen ; i ++ ) {
1223
+ for (i = 1 ; i < vlen && i < wlen ; i ++ ) {
1219
1224
k = PyObject_RichCompareBool (vt -> ob_item [i ],
1220
1225
wt -> ob_item [i ],
1221
1226
Py_EQ );
0 commit comments