mirror of
https://github.com/python/cpython.git
synced 2024-11-30 05:15:14 +08:00
bpo-42161: Micro-optimize _collections._count_elements() (GH-23008)
Move the _PyLong_GetOne() call outside the fast-path loop.
This commit is contained in:
parent
c310185c08
commit
35b95aaf21
@ -2278,6 +2278,7 @@ _collections__count_elements_impl(PyObject *module, PyObject *mapping,
|
||||
PyObject *dict_get;
|
||||
PyObject *mapping_setitem;
|
||||
PyObject *dict_setitem;
|
||||
PyObject *one = _PyLong_GetOne(); // borrowed reference
|
||||
|
||||
it = PyObject_GetIter(iterable);
|
||||
if (it == NULL)
|
||||
@ -2324,10 +2325,10 @@ _collections__count_elements_impl(PyObject *module, PyObject *mapping,
|
||||
if (oldval == NULL) {
|
||||
if (PyErr_Occurred())
|
||||
goto done;
|
||||
if (_PyDict_SetItem_KnownHash(mapping, key, _PyLong_GetOne(), hash) < 0)
|
||||
if (_PyDict_SetItem_KnownHash(mapping, key, one, hash) < 0)
|
||||
goto done;
|
||||
} else {
|
||||
newval = PyNumber_Add(oldval, _PyLong_GetOne());
|
||||
newval = PyNumber_Add(oldval, one);
|
||||
if (newval == NULL)
|
||||
goto done;
|
||||
if (_PyDict_SetItem_KnownHash(mapping, key, newval, hash) < 0)
|
||||
@ -2336,13 +2337,13 @@ _collections__count_elements_impl(PyObject *module, PyObject *mapping,
|
||||
}
|
||||
Py_DECREF(key);
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
bound_get = _PyObject_GetAttrId(mapping, &PyId_get);
|
||||
if (bound_get == NULL)
|
||||
goto done;
|
||||
|
||||
PyObject *zero = _PyLong_GetZero(); // borrowed reference
|
||||
PyObject *one = _PyLong_GetOne(); // borrowed reference
|
||||
while (1) {
|
||||
key = PyIter_Next(it);
|
||||
if (key == NULL)
|
||||
|
Loading…
Reference in New Issue
Block a user