diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2024-03-07 09:21:08 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-07 09:21:08 (GMT) |
commit | 72d3cc94cd8cae1925e7a14f297b06ac6184f916 (patch) | |
tree | df9d7a5a97a79f97065282dd8e5a89f57ea2e18b /Objects | |
parent | 882fcede83af783a834b759e4643130dc1307ee3 (diff) | |
download | cpython-72d3cc94cd8cae1925e7a14f297b06ac6184f916.zip cpython-72d3cc94cd8cae1925e7a14f297b06ac6184f916.tar.gz cpython-72d3cc94cd8cae1925e7a14f297b06ac6184f916.tar.bz2 |
gh-116437: Use new C API PyDict_Pop() to simplify the code (GH-116438)
Diffstat (limited to 'Objects')
-rw-r--r-- | Objects/moduleobject.c | 10 | ||||
-rw-r--r-- | Objects/typeobject.c | 34 |
2 files changed, 26 insertions, 18 deletions
diff --git a/Objects/moduleobject.c b/Objects/moduleobject.c index 3a1c516..9cd98fb 100644 --- a/Objects/moduleobject.c +++ b/Objects/moduleobject.c @@ -1004,9 +1004,13 @@ module_set_annotations(PyModuleObject *m, PyObject *value, void *Py_UNUSED(ignor } else { /* delete */ - ret = PyDict_DelItem(dict, &_Py_ID(__annotations__)); - if (ret < 0 && PyErr_ExceptionMatches(PyExc_KeyError)) { - PyErr_SetString(PyExc_AttributeError, "__annotations__"); + ret = PyDict_Pop(dict, &_Py_ID(__annotations__), NULL); + if (ret == 0) { + PyErr_SetObject(PyExc_AttributeError, &_Py_ID(__annotations__)); + ret = -1; + } + else if (ret > 0) { + ret = 0; } } diff --git a/Objects/typeobject.c b/Objects/typeobject.c index 181d032..d8c3e92 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -1236,20 +1236,22 @@ type_set_abstractmethods(PyTypeObject *type, PyObject *value, void *context) } else { abstract = 0; - res = PyDict_DelItem(dict, &_Py_ID(__abstractmethods__)); - if (res && PyErr_ExceptionMatches(PyExc_KeyError)) { + res = PyDict_Pop(dict, &_Py_ID(__abstractmethods__), NULL); + if (res == 0) { PyErr_SetObject(PyExc_AttributeError, &_Py_ID(__abstractmethods__)); return -1; } } - if (res == 0) { - PyType_Modified(type); - if (abstract) - type->tp_flags |= Py_TPFLAGS_IS_ABSTRACT; - else - type->tp_flags &= ~Py_TPFLAGS_IS_ABSTRACT; + if (res < 0) { + return -1; } - return res; + + PyType_Modified(type); + if (abstract) + type->tp_flags |= Py_TPFLAGS_IS_ABSTRACT; + else + type->tp_flags &= ~Py_TPFLAGS_IS_ABSTRACT; + return 0; } static PyObject * @@ -1606,16 +1608,18 @@ type_set_annotations(PyTypeObject *type, PyObject *value, void *context) result = PyDict_SetItem(dict, &_Py_ID(__annotations__), value); } else { /* delete */ - result = PyDict_DelItem(dict, &_Py_ID(__annotations__)); - if (result < 0 && PyErr_ExceptionMatches(PyExc_KeyError)) { + result = PyDict_Pop(dict, &_Py_ID(__annotations__), NULL); + if (result == 0) { PyErr_SetString(PyExc_AttributeError, "__annotations__"); + return -1; } } - - if (result == 0) { - PyType_Modified(type); + if (result < 0) { + return -1; } - return result; + + PyType_Modified(type); + return 0; } static PyObject * |