summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2023-11-15 17:10:06 (GMT)
committerGitHub <noreply@github.com>2023-11-15 17:10:06 (GMT)
commitbd2f1485b089bd38d123b4d202a37e567f119482 (patch)
tree5d1bde9b3388f7a19cec276386532173e44f66ba
parentec055073673d5b949aa81311405d92159bab342e (diff)
downloadcpython-bd2f1485b089bd38d123b4d202a37e567f119482.zip
cpython-bd2f1485b089bd38d123b4d202a37e567f119482.tar.gz
cpython-bd2f1485b089bd38d123b4d202a37e567f119482.tar.bz2
gh-112026: Restore removed _PyDict_GetItemStringWithError() (#112119)
Restore the removed _PyDict_GetItemStringWithError() function. It is used by numpy.
-rw-r--r--Include/cpython/dictobject.h2
-rw-r--r--Misc/NEWS.d/next/C API/2023-11-15-17-10-09.gh-issue-112026.ts9yyn.rst2
-rw-r--r--Objects/dictobject.c14
3 files changed, 17 insertions, 1 deletions
diff --git a/Include/cpython/dictobject.h b/Include/cpython/dictobject.h
index 91ddc08..944965f 100644
--- a/Include/cpython/dictobject.h
+++ b/Include/cpython/dictobject.h
@@ -34,7 +34,7 @@ typedef struct {
PyAPI_FUNC(PyObject *) _PyDict_GetItem_KnownHash(PyObject *mp, PyObject *key,
Py_hash_t hash);
-
+PyAPI_FUNC(PyObject *) _PyDict_GetItemStringWithError(PyObject *, const char *);
PyAPI_FUNC(PyObject *) PyDict_SetDefault(
PyObject *mp, PyObject *key, PyObject *defaultobj);
diff --git a/Misc/NEWS.d/next/C API/2023-11-15-17-10-09.gh-issue-112026.ts9yyn.rst b/Misc/NEWS.d/next/C API/2023-11-15-17-10-09.gh-issue-112026.ts9yyn.rst
new file mode 100644
index 0000000..7d54f6b
--- /dev/null
+++ b/Misc/NEWS.d/next/C API/2023-11-15-17-10-09.gh-issue-112026.ts9yyn.rst
@@ -0,0 +1,2 @@
+Restore the removed ``_PyDict_GetItemStringWithError()`` function. It is
+used by numpy. Patch by Victor Stinner.
diff --git a/Objects/dictobject.c b/Objects/dictobject.c
index 556c74d..70f424e 100644
--- a/Objects/dictobject.c
+++ b/Objects/dictobject.c
@@ -1842,6 +1842,20 @@ _PyDict_GetItemIdWithError(PyObject *dp, _Py_Identifier *key)
return _PyDict_GetItem_KnownHash(dp, kv, hash); // borrowed reference
}
+PyObject *
+_PyDict_GetItemStringWithError(PyObject *v, const char *key)
+{
+ PyObject *kv, *rv;
+ kv = PyUnicode_FromString(key);
+ if (kv == NULL) {
+ return NULL;
+ }
+ rv = PyDict_GetItemWithError(v, kv);
+ Py_DECREF(kv);
+ return rv;
+}
+
+
/* Fast version of global value lookup (LOAD_GLOBAL).
* Lookup in globals, then builtins.
*