Use rich comparisons in min and max.
This commit is contained in:
parent
ac7be6888b
commit
53451b3fd1
@ -1371,7 +1371,7 @@ Return the dictionary containing the current scope's local variables.";
|
|||||||
|
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
min_max(PyObject *args, int sign)
|
min_max(PyObject *args, int op)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
PyObject *v, *w, *x;
|
PyObject *v, *w, *x;
|
||||||
@ -1401,16 +1401,16 @@ min_max(PyObject *args, int sign)
|
|||||||
if (w == NULL)
|
if (w == NULL)
|
||||||
w = x;
|
w = x;
|
||||||
else {
|
else {
|
||||||
int c = PyObject_Compare(x, w);
|
int cmp = PyObject_RichCompareBool(x, w, op);
|
||||||
if (c && PyErr_Occurred()) {
|
if (cmp > 0) {
|
||||||
|
Py_DECREF(w);
|
||||||
|
w = x;
|
||||||
|
}
|
||||||
|
else if (cmp < 0) {
|
||||||
Py_DECREF(x);
|
Py_DECREF(x);
|
||||||
Py_XDECREF(w);
|
Py_XDECREF(w);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
if (c * sign > 0) {
|
|
||||||
Py_DECREF(w);
|
|
||||||
w = x;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
Py_DECREF(x);
|
Py_DECREF(x);
|
||||||
}
|
}
|
||||||
@ -1424,7 +1424,7 @@ min_max(PyObject *args, int sign)
|
|||||||
static PyObject *
|
static PyObject *
|
||||||
builtin_min(PyObject *self, PyObject *v)
|
builtin_min(PyObject *self, PyObject *v)
|
||||||
{
|
{
|
||||||
return min_max(v, -1);
|
return min_max(v, Py_LT);
|
||||||
}
|
}
|
||||||
|
|
||||||
static char min_doc[] =
|
static char min_doc[] =
|
||||||
@ -1438,7 +1438,7 @@ With two or more arguments, return the smallest argument.";
|
|||||||
static PyObject *
|
static PyObject *
|
||||||
builtin_max(PyObject *self, PyObject *v)
|
builtin_max(PyObject *self, PyObject *v)
|
||||||
{
|
{
|
||||||
return min_max(v, 1);
|
return min_max(v, Py_GT);
|
||||||
}
|
}
|
||||||
|
|
||||||
static char max_doc[] =
|
static char max_doc[] =
|
||||||
|
Loading…
x
Reference in New Issue
Block a user