From: Victor Stinner Date: Wed, 6 Nov 2013 17:59:18 +0000 (+0100) Subject: Issue #19512: type_abstractmethods() and type_set_abstractmethods() now use an X-Git-Tag: v3.4.0b1~369 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3688aa9a0417b5fbe94510da4a078c3ac3c481e0;p=thirdparty%2FPython%2Fcpython.git Issue #19512: type_abstractmethods() and type_set_abstractmethods() now use an identifier for the "__abstractmethods__" string --- diff --git a/Objects/typeobject.c b/Objects/typeobject.c index 309afa4b8575..02ad0b7e576d 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -48,6 +48,7 @@ _Py_IDENTIFIER(__hash__); _Py_IDENTIFIER(__module__); _Py_IDENTIFIER(__name__); _Py_IDENTIFIER(__new__); +_Py_IDENTIFIER(__abstractmethods__); static PyObject * slot_tp_new(PyTypeObject *type, PyObject *args, PyObject *kwds); @@ -383,9 +384,11 @@ type_abstractmethods(PyTypeObject *type, void *context) /* type itself has an __abstractmethods__ descriptor (this). Don't return that. */ if (type != &PyType_Type) - mod = PyDict_GetItemString(type->tp_dict, "__abstractmethods__"); + mod = _PyDict_GetItemId(type->tp_dict, &PyId___abstractmethods__); if (!mod) { - PyErr_SetString(PyExc_AttributeError, "__abstractmethods__"); + PyObject *message = _PyUnicode_FromId(&PyId___abstractmethods__); + if (message) + PyErr_SetObject(PyExc_AttributeError, message); return NULL; } Py_XINCREF(mod); @@ -404,13 +407,15 @@ type_set_abstractmethods(PyTypeObject *type, PyObject *value, void *context) abstract = PyObject_IsTrue(value); if (abstract < 0) return -1; - res = PyDict_SetItemString(type->tp_dict, "__abstractmethods__", value); + res = _PyDict_SetItemId(type->tp_dict, &PyId___abstractmethods__, value); } else { abstract = 0; - res = PyDict_DelItemString(type->tp_dict, "__abstractmethods__"); + res = _PyDict_DelItemId(type->tp_dict, &PyId___abstractmethods__); if (res && PyErr_ExceptionMatches(PyExc_KeyError)) { - PyErr_SetString(PyExc_AttributeError, "__abstractmethods__"); + PyObject *message = _PyUnicode_FromId(&PyId___abstractmethods__); + if (message) + PyErr_SetObject(PyExc_AttributeError, message); return -1; } }