From: Christian Heimes Date: Thu, 14 Feb 2008 22:40:11 +0000 (+0000) Subject: Use a static and interned string for __subclasscheck__ and __instancecheck__ as sugge... X-Git-Tag: v2.6a1~164 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e247f0037f87d9e0a2582d0beb941fba6357454d;p=python Use a static and interned string for __subclasscheck__ and __instancecheck__ as suggested by Thomas Heller in #2115 --- diff --git a/Objects/abstract.c b/Objects/abstract.c index 89a78c6da6..93d73bb148 100644 --- a/Objects/abstract.c +++ b/Objects/abstract.c @@ -2401,10 +2401,17 @@ recursive_isinstance(PyObject *inst, PyObject *cls, int recursion_depth) int PyObject_IsInstance(PyObject *inst, PyObject *cls) { + static PyObject *name = NULL; PyObject *t, *v, *tb; PyObject *checker; PyErr_Fetch(&t, &v, &tb); - checker = PyObject_GetAttrString(cls, "__instancecheck__"); + + if (name == NULL) { + name = PyString_InternFromString("__instancecheck__"); + if (name == NULL) + return -1; + } + checker = PyObject_GetAttr(cls, name); PyErr_Restore(t, v, tb); if (checker != NULL) { PyObject *res; @@ -2477,10 +2484,17 @@ recursive_issubclass(PyObject *derived, PyObject *cls, int recursion_depth) int PyObject_IsSubclass(PyObject *derived, PyObject *cls) { + static PyObject *name = NULL; PyObject *t, *v, *tb; PyObject *checker; PyErr_Fetch(&t, &v, &tb); - checker = PyObject_GetAttrString(cls, "__subclasscheck__"); + + if (name == NULL) { + name = PyString_InternFromString("__subclasscheck__"); + if (name == NULL) + return -1; + } + checker = PyObject_GetAttr(cls, name); PyErr_Restore(t, v, tb); if (checker != NULL) { PyObject *res;