Skip to content

Commit 3c1e481

Browse files
committed
Issue #14383: Add _PyDict_GetItemId() and _PyDict_SetItemId() functions
These functions simplify the usage of static constant Unicode strings. Generalize the usage of _Py_Identifier in ceval.c and typeobject.c.
1 parent 70b2e1e commit 3c1e481

File tree

4 files changed

+118
-122
lines changed

4 files changed

+118
-122
lines changed

Include/dictobject.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,9 @@ PyAPI_FUNC(int) PyDict_MergeFromSeq2(PyObject *d,
155155
int override);
156156

157157
PyAPI_FUNC(PyObject *) PyDict_GetItemString(PyObject *dp, const char *key);
158+
PyAPI_FUNC(PyObject *) _PyDict_GetItemId(PyObject *dp, struct _Py_Identifier *key);
158159
PyAPI_FUNC(int) PyDict_SetItemString(PyObject *dp, const char *key, PyObject *item);
160+
PyAPI_FUNC(int) _PyDict_SetItemId(PyObject *dp, struct _Py_Identifier *key, PyObject *item);
159161
PyAPI_FUNC(int) PyDict_DelItemString(PyObject *dp, const char *key);
160162

161163
#ifdef __cplusplus

Objects/dictobject.c

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2198,6 +2198,16 @@ PyTypeObject PyDict_Type = {
21982198
PyObject_GC_Del, /* tp_free */
21992199
};
22002200

2201+
PyObject *
2202+
_PyDict_GetItemId(PyObject *dp, struct _Py_Identifier *key)
2203+
{
2204+
PyObject *kv;
2205+
kv = _PyUnicode_FromId(key); /* borrowed */
2206+
if (kv == NULL)
2207+
return NULL;
2208+
return PyDict_GetItem(dp, kv);
2209+
}
2210+
22012211
/* For backward compatibility with old dictionary interface */
22022212

22032213
PyObject *
@@ -2212,6 +2222,16 @@ PyDict_GetItemString(PyObject *v, const char *key)
22122222
return rv;
22132223
}
22142224

2225+
int
2226+
_PyDict_SetItemId(PyObject *v, struct _Py_Identifier *key, PyObject *item)
2227+
{
2228+
PyObject *kv;
2229+
kv = _PyUnicode_FromId(key); /* borrowed */
2230+
if (kv == NULL)
2231+
return -1;
2232+
return PyDict_SetItem(v, kv, item);
2233+
}
2234+
22152235
int
22162236
PyDict_SetItemString(PyObject *v, const char *key, PyObject *item)
22172237
{

0 commit comments

Comments
 (0)