Commit a746b506 authored by Guido van Rossum's avatar Guido van Rossum

Use rich comparisons in min and max.

parent f233879f
...@@ -1371,7 +1371,7 @@ Return the dictionary containing the current scope's local variables."; ...@@ -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) ...@@ -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) ...@@ -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."; ...@@ -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[] =
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment