diff --git a/Include/object.h b/Include/object.h index 258b0744968..fd7c235cd40 100644 --- a/Include/object.h +++ b/Include/object.h @@ -667,6 +667,11 @@ PyAPI_DATA(PyObject) _Py_NotImplementedStruct; /* Don't use this directly */ #define Py_GT 4 #define Py_GE 5 +/* Maps Py_LT to Py_GT, ..., Py_GE to Py_LE. + * Defined in object.c. + */ +PyAPI_DATA(int) _Py_SwappedOp[]; + /* Define staticforward and statichere for source compatibility with old C extensions. diff --git a/Objects/classobject.c b/Objects/classobject.c index bdbcd6a1b31..506faab4678 100644 --- a/Objects/classobject.c +++ b/Objects/classobject.c @@ -1873,9 +1873,6 @@ half_richcompare(PyObject *v, PyObject *w, int op) return res; } -/* Map rich comparison operators to their swapped version, e.g. LT --> GT */ -static int swapped_op[] = {Py_GT, Py_GE, Py_EQ, Py_NE, Py_LT, Py_LE}; - static PyObject * instance_richcompare(PyObject *v, PyObject *w, int op) { @@ -1889,7 +1886,7 @@ instance_richcompare(PyObject *v, PyObject *w, int op) } if (PyInstance_Check(w)) { - res = half_richcompare(w, v, swapped_op[op]); + res = half_richcompare(w, v, _Py_SwappedOp[op]); if (res != Py_NotImplemented) return res; Py_DECREF(res); diff --git a/Objects/object.c b/Objects/object.c index 721a6ac75c4..b28420d27c7 100644 --- a/Objects/object.c +++ b/Objects/object.c @@ -476,7 +476,7 @@ adjust_tp_compare(int c) ? (t)->tp_richcompare : NULL) /* Map rich comparison operators to their swapped version, e.g. LT --> GT */ -static int swapped_op[] = {Py_GT, Py_GE, Py_EQ, Py_NE, Py_LT, Py_LE}; +extern int _Py_SwappedOp[] = {Py_GT, Py_GE, Py_EQ, Py_NE, Py_LT, Py_LE}; /* Try a genuine rich comparison, returning an object. Return: NULL for exception; @@ -494,7 +494,7 @@ try_rich_compare(PyObject *v, PyObject *w, int op) if (v->ob_type != w->ob_type && PyType_IsSubtype(w->ob_type, v->ob_type) && (f = RICHCOMPARE(w->ob_type)) != NULL) { - res = (*f)(w, v, swapped_op[op]); + res = (*f)(w, v, _Py_SwappedOp[op]); if (res != Py_NotImplemented) return res; Py_DECREF(res); @@ -506,7 +506,7 @@ try_rich_compare(PyObject *v, PyObject *w, int op) Py_DECREF(res); } if ((f = RICHCOMPARE(w->ob_type)) != NULL) { - return (*f)(w, v, swapped_op[op]); + return (*f)(w, v, _Py_SwappedOp[op]); } res = Py_NotImplemented; Py_INCREF(res); @@ -1703,7 +1703,7 @@ PyObject_Dir(PyObject *arg) assert(result); if (!PyList_Check(result)) { - PyErr_SetString(PyExc_TypeError, + PyErr_SetString(PyExc_TypeError, "Expected keys() to be a list."); goto error; } diff --git a/Objects/typeobject.c b/Objects/typeobject.c index 6f5323e2147..600dca5c93b 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -4638,9 +4638,6 @@ half_richcompare(PyObject *self, PyObject *other, int op) return res; } -/* Map rich comparison operators to their swapped version, e.g. LT --> GT */ -static int swapped_op[] = {Py_GT, Py_GE, Py_EQ, Py_NE, Py_LT, Py_LE}; - static PyObject * slot_tp_richcompare(PyObject *self, PyObject *other, int op) { @@ -4653,7 +4650,7 @@ slot_tp_richcompare(PyObject *self, PyObject *other, int op) Py_DECREF(res); } if (other->ob_type->tp_richcompare == slot_tp_richcompare) { - res = half_richcompare(other, self, swapped_op[op]); + res = half_richcompare(other, self, _Py_SwappedOp[op]); if (res != Py_NotImplemented) { return res; }