diff options
Diffstat (limited to 'Objects')
-rw-r--r-- | Objects/complexobject.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/Objects/complexobject.c b/Objects/complexobject.c index 191dcba..32f2b24 100644 --- a/Objects/complexobject.c +++ b/Objects/complexobject.c @@ -553,12 +553,6 @@ complex_richcompare(PyObject *v, PyObject *w, int op) Py_complex i, j; PyObject *res; - if (op != Py_EQ && op != Py_NE) { - PyErr_SetString(PyExc_TypeError, - "cannot compare complex numbers using <, <=, >, >="); - return NULL; - } - c = PyNumber_CoerceEx(&v, &w); if (c < 0) return NULL; @@ -566,7 +560,10 @@ complex_richcompare(PyObject *v, PyObject *w, int op) Py_INCREF(Py_NotImplemented); return Py_NotImplemented; } - if (!PyComplex_Check(v) || !PyComplex_Check(w)) { + /* May sure both arguments use complex comparison. + This implies PyComplex_Check(a) && PyComplex_Check(b). */ + if (v->ob_type->tp_richcompare != complex_richcompare || + w->ob_type->tp_richcompare != complex_richcompare) { Py_DECREF(v); Py_DECREF(w); Py_INCREF(Py_NotImplemented); @@ -578,6 +575,12 @@ complex_richcompare(PyObject *v, PyObject *w, int op) Py_DECREF(v); Py_DECREF(w); + if (op != Py_EQ && op != Py_NE) { + PyErr_SetString(PyExc_TypeError, + "cannot compare complex numbers using <, <=, >, >="); + return NULL; + } + if ((i.real == j.real && i.imag == j.imag) == (op == Py_EQ)) res = Py_True; else |