Change cmpobject() to coerce numerical values before comparing them

This commit is contained in:
Guido van Rossum 1991-07-01 18:48:04 +00:00
parent ef0068ff9d
commit 9fb036811a

View file

@ -117,11 +117,26 @@ cmpobject(v, w)
return -1;
if (w == NULL)
return 1;
if ((tp = v->ob_type) != w->ob_type)
if ((tp = v->ob_type) != w->ob_type) {
if (tp->tp_as_number != NULL &&
w->ob_type->tp_as_number != NULL) {
if (coerce(&v, &w) != 0) {
err_clear();
/* XXX Should report the error,
XXX but the interface isn't there... */
}
else {
int cmp = (*v->ob_type->tp_compare)(v, w);
DECREF(v);
DECREF(w);
return cmp;
}
}
return strcmp(tp->tp_name, w->ob_type->tp_name);
}
if (tp->tp_compare == NULL)
return (v < w) ? -1 : 1;
return ((*tp->tp_compare)(v, w));
return (*tp->tp_compare)(v, w);
}
object *