summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Modules/_decimal/_decimal.c27
1 files changed, 17 insertions, 10 deletions
diff --git a/Modules/_decimal/_decimal.c b/Modules/_decimal/_decimal.c
index d3e3940..628b2f7 100644
--- a/Modules/_decimal/_decimal.c
+++ b/Modules/_decimal/_decimal.c
@@ -3009,18 +3009,25 @@ convert_op_cmp(PyObject **vcmp, PyObject **wcmp, PyObject *v, PyObject *w,
*wcmp = Py_NotImplemented;
}
}
- else if (PyObject_IsInstance(w, Rational)) {
- *wcmp = numerator_as_decimal(w, context);
- if (*wcmp && !mpd_isspecial(MPD(v))) {
- *vcmp = multiply_by_denominator(v, w, context);
- if (*vcmp == NULL) {
- Py_CLEAR(*wcmp);
+ else {
+ int is_instance = PyObject_IsInstance(w, Rational);
+ if (is_instance < 0) {
+ *wcmp = NULL;
+ return 0;
+ }
+ if (is_instance) {
+ *wcmp = numerator_as_decimal(w, context);
+ if (*wcmp && !mpd_isspecial(MPD(v))) {
+ *vcmp = multiply_by_denominator(v, w, context);
+ if (*vcmp == NULL) {
+ Py_CLEAR(*wcmp);
+ }
}
}
- }
- else {
- Py_INCREF(Py_NotImplemented);
- *wcmp = Py_NotImplemented;
+ else {
+ Py_INCREF(Py_NotImplemented);
+ *wcmp = Py_NotImplemented;
+ }
}
if (*wcmp == NULL || *wcmp == Py_NotImplemented) {