bpo-35444: Unify and optimize the helper for getting a builtin object. (GH-11047)
This speeds up pickling of some iterators.
This fixes also error handling in pickling methods when fail to
look up builtin "getattr".
diff --git a/Objects/dictobject.c b/Objects/dictobject.c
index 72cb4c5..a871636 100644
--- a/Objects/dictobject.c
+++ b/Objects/dictobject.c
@@ -3810,6 +3810,7 @@
static PyObject *
dictiter_reduce(dictiterobject *di, PyObject *Py_UNUSED(ignored))
{
+ _Py_IDENTIFIER(iter);
/* copy the iterator state */
dictiterobject tmp = *di;
Py_XINCREF(tmp.di_dict);
@@ -3819,7 +3820,7 @@
if (list == NULL) {
return NULL;
}
- return Py_BuildValue("N(N)", _PyObject_GetBuiltin("iter"), list);
+ return Py_BuildValue("N(N)", _PyEval_GetBuiltinId(&PyId_iter), list);
}
PyTypeObject PyDictRevIterItem_Type = {