Mercurial > cpython-lru_cache-weakref
diff Objects/object.c @ 8472:c555c72f090d legacy-trunk
When comparing objects of different types (which is done by comparing
the type names), make sure that numeric objects are considered smaller
than all other objects, by forcing their name to "".
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Tue, 09 Jun 1998 18:58:44 +0000 |
| parents | 64b88a178328 |
| children | 6d2168a9641f |
line wrap: on
line diff
--- a/Objects/object.c Tue Jun 09 16:30:56 1998 +0000 +++ b/Objects/object.c Tue Jun 09 18:58:44 1998 +0000 @@ -284,7 +284,7 @@ PyObject_Compare(v, w) PyObject *v, *w; { - PyTypeObject *tp; + PyTypeObject *vtp, *wtp; if (v == NULL || w == NULL) { PyErr_BadInternalCall(); return -1; @@ -309,9 +309,11 @@ Py_DECREF(res); return (c < 0) ? -1 : (c > 0) ? 1 : 0; } - if ((tp = v->ob_type) != w->ob_type) { - if (tp->tp_as_number != NULL && - w->ob_type->tp_as_number != NULL) { + if ((vtp = v->ob_type) != (wtp = w->ob_type)) { + char *vname = vtp->tp_name; + char *wname = wtp->tp_name; + if (vtp->tp_as_number != NULL && + wtp->tp_as_number != NULL) { int err; err = PyNumber_CoerceEx(&v, &w); if (err < 0) @@ -323,11 +325,16 @@ return cmp; } } - return strcmp(tp->tp_name, w->ob_type->tp_name); + else if (vtp->tp_as_number != NULL) + vname = ""; + else if (wtp->tp_as_number != NULL) + wname = ""; + /* Numerical types compare smaller than all other types */ + return strcmp(vname, wname); } - if (tp->tp_compare == NULL) + if (vtp->tp_compare == NULL) return (v < w) ? -1 : 1; - return (*tp->tp_compare)(v, w); + return (*vtp->tp_compare)(v, w); } long
