On 3/29/07, Amaury Forgeot d'Arc <[EMAIL PROTECTED]> wrote: > Hello, > > Sorry if I am wrong, but it seems to me that the change in r54588 has a > problem: > http://mail.python.org/pipermail/python-3000-checkins/2007-March/000433.html > - in the normal case, the return value is INCREF'ed twice > - in the error case, Py_INCREF(NULL) is called... > > One easy way to correct this is to move the last INCREF: > (sorry for the approximative patch format) > > python/branches/p3yk/Objects/typeobject.c: > ================================================= > static PyObject * > object_richcompare(PyObject *self, PyObject *other, int op) > { > PyObject *res; > > switch (op) { > > case Py_EQ: > res = (self == other) ? Py_True : Py_False; > + Py_INCREF(res); > break; > > case Py_NE: > /* By default, != returns the opposite of ==, > unless the latter returns NotImplemented. */ > res = PyObject_RichCompare(self, other, Py_EQ); > if (res != NULL && res != Py_NotImplemented) { > int ok = PyObject_IsTrue(res); > Py_DECREF(res); > if (ok < 0) > res = NULL; > else { > if (ok) > res = Py_False; > else > res = Py_True; > Py_INCREF(res); > } > } > break; > > default: > res = Py_NotImplemented; > + Py_INCREF(res); > break; > } > > - Py_INCREF(res); > return res; > } >
It looks right, although you could also remove the INCREF in Py_NE and change the INCREF at the bottom to XINCREF or just return on the error. -Brett _______________________________________________ Python-3000 mailing list [email protected] http://mail.python.org/mailman/listinfo/python-3000 Unsubscribe: http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com
