mirror of
https://github.com/python/cpython.git
synced 2026-01-06 07:22:09 +00:00
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".
This commit is contained in:
parent
7cf3d8e251
commit
bb86bf4c4e
21 changed files with 68 additions and 72 deletions
|
|
@ -209,19 +209,15 @@ _Pickle_ClearState(PickleState *st)
|
|||
static int
|
||||
_Pickle_InitState(PickleState *st)
|
||||
{
|
||||
PyObject *builtins;
|
||||
PyObject *copyreg = NULL;
|
||||
PyObject *compat_pickle = NULL;
|
||||
PyObject *codecs = NULL;
|
||||
PyObject *functools = NULL;
|
||||
_Py_IDENTIFIER(getattr);
|
||||
|
||||
builtins = PyEval_GetBuiltins();
|
||||
if (builtins == NULL)
|
||||
goto error;
|
||||
st->getattr = PyDict_GetItemString(builtins, "getattr");
|
||||
st->getattr = _PyEval_GetBuiltinId(&PyId_getattr);
|
||||
if (st->getattr == NULL)
|
||||
goto error;
|
||||
Py_INCREF(st->getattr);
|
||||
|
||||
copyreg = PyImport_ImportModule("copyreg");
|
||||
if (!copyreg)
|
||||
|
|
|
|||
|
|
@ -2943,7 +2943,8 @@ static PyObject *
|
|||
array_arrayiterator___reduce___impl(arrayiterobject *self)
|
||||
/*[clinic end generated code: output=7898a52e8e66e016 input=a062ea1e9951417a]*/
|
||||
{
|
||||
PyObject *func = _PyObject_GetBuiltin("iter");
|
||||
_Py_IDENTIFIER(iter);
|
||||
PyObject *func = _PyEval_GetBuiltinId(&PyId_iter);
|
||||
if (self->ao == NULL) {
|
||||
return Py_BuildValue("N(())", func);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -368,8 +368,9 @@ _grouper_next(_grouperobject *igo)
|
|||
static PyObject *
|
||||
_grouper_reduce(_grouperobject *lz, PyObject *Py_UNUSED(ignored))
|
||||
{
|
||||
_Py_IDENTIFIER(iter);
|
||||
if (((groupbyobject *)lz->parent)->currgrouper != lz) {
|
||||
return Py_BuildValue("N(())", _PyObject_GetBuiltin("iter"));
|
||||
return Py_BuildValue("N(())", _PyEval_GetBuiltinId(&PyId_iter));
|
||||
}
|
||||
return Py_BuildValue("O(OO)", Py_TYPE(lz), lz->parent, lz->tgtkey);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue