@@ -1061,7 +1061,7 @@ static PyMappingMethods mappingproxy_as_mapping = {
10611061 0 , /* mp_ass_subscript */
10621062};
10631063
1064- static int is_known_dict_subclass_or (PyObject * o ) {
1064+ static int mappingproxy_is_known_dict_subclass_or (PyObject * o ) {
10651065 return (PyAnyDict_CheckExact (o ) || PyODict_CheckExact (o ) ||
10661066 (PyAnyDict_Check (o ) && Py_TYPE (o )-> tp_as_number -> nb_or == PyDict_Type .tp_as_number -> nb_or )) ||
10671067 (PyODict_Check (o ) && Py_TYPE (o )-> tp_as_number -> nb_or == PyODict_Type .tp_as_number -> nb_or );
@@ -1075,13 +1075,13 @@ mappingproxy_or(PyObject *left, PyObject *right)
10751075 right = ((mappingproxyobject * )right )-> mapping ;
10761076 }
10771077 PyObject * left_mapping = ((mappingproxyobject * )left )-> mapping ;
1078- if (is_known_dict_subclass_or (right ) || PyFrozenDict_CheckExact (left_mapping )) {
1078+ if (mappingproxy_is_known_dict_subclass_or (right ) || PyFrozenDict_CheckExact (left_mapping )) {
10791079 return PyNumber_Or (left_mapping , right );
10801080 }
10811081 } else {
10821082 assert (PyObject_TypeCheck (right , & PyDictProxy_Type ));
10831083 PyObject * right_mapping = ((mappingproxyobject * )right )-> mapping ;
1084- if (is_known_dict_subclass_or (left ) || PyFrozenDict_CheckExact (right_mapping )) {
1084+ if (mappingproxy_is_known_dict_subclass_or (left ) || PyFrozenDict_CheckExact (right_mapping )) {
10851085 return PyNumber_Or (left , right_mapping );
10861086 }
10871087 }
@@ -1246,6 +1246,13 @@ mappingproxy_traverse(PyObject *self, visitproc visit, void *arg)
12461246 return 0 ;
12471247}
12481248
1249+ static int
1250+ mappingproxy_is_known_dict_subclass_richcompare (PyObject * o ) {
1251+ return (PyAnyDict_CheckExact (o ) || PyODict_CheckExact (o ) ||
1252+ (PyAnyDict_Check (o ) && Py_TYPE (o )-> tp_richcompare == PyDict_Type .tp_richcompare ) ||
1253+ (PyODict_Check (o ) && Py_TYPE (o )-> tp_richcompare == PyODict_Type .tp_richcompare ));
1254+ }
1255+
12491256static PyObject *
12501257mappingproxy_richcompare (PyObject * self , PyObject * w , int op )
12511258{
@@ -1254,17 +1261,7 @@ mappingproxy_richcompare(PyObject *self, PyObject *w, int op)
12541261 if (PyObject_TypeCheck (w , & PyDictProxy_Type )) {
12551262 w = ((mappingproxyobject * )w )-> mapping ;
12561263 }
1257-
1258- if (PyAnyDict_CheckExact (w ) ||
1259- (PyAnyDict_Check (w ) && Py_TYPE (w )-> tp_richcompare == PyDict_Type .tp_richcompare )) {
1260- return PyObject_RichCompare (v -> mapping , w , op );
1261- }
1262- if (PyODict_CheckExact (w ) ||
1263- (PyODict_Check (w ) && Py_TYPE (w )-> tp_richcompare == PyODict_Type .tp_richcompare )) {
1264- return PyObject_RichCompare (v -> mapping , w , op );
1265- }
1266- if (PyFrozenDict_CheckExact (v -> mapping )) {
1267- // immutable - safe to foward.
1264+ if (mappingproxy_is_known_dict_subclass_richcompare (w ) || PyFrozenDict_CheckExact (v -> mapping )) {
12681265 return PyObject_RichCompare (v -> mapping , w , op );
12691266 }
12701267 }
0 commit comments