Skip to content

Commit 35b95aa

Browse files
authored
bpo-42161: Micro-optimize _collections._count_elements() (GH-23008)
Move the _PyLong_GetOne() call outside the fast-path loop.
1 parent c310185 commit 35b95aa

File tree

1 file changed

+5
-4
lines changed

1 file changed

+5
-4
lines changed

Modules/_collectionsmodule.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2278,6 +2278,7 @@ _collections__count_elements_impl(PyObject *module, PyObject *mapping,
22782278
PyObject *dict_get;
22792279
PyObject *mapping_setitem;
22802280
PyObject *dict_setitem;
2281+
PyObject *one = _PyLong_GetOne(); // borrowed reference
22812282

22822283
it = PyObject_GetIter(iterable);
22832284
if (it == NULL)
@@ -2324,10 +2325,10 @@ _collections__count_elements_impl(PyObject *module, PyObject *mapping,
23242325
if (oldval == NULL) {
23252326
if (PyErr_Occurred())
23262327
goto done;
2327-
if (_PyDict_SetItem_KnownHash(mapping, key, _PyLong_GetOne(), hash) < 0)
2328+
if (_PyDict_SetItem_KnownHash(mapping, key, one, hash) < 0)
23282329
goto done;
23292330
} else {
2330-
newval = PyNumber_Add(oldval, _PyLong_GetOne());
2331+
newval = PyNumber_Add(oldval, one);
23312332
if (newval == NULL)
23322333
goto done;
23332334
if (_PyDict_SetItem_KnownHash(mapping, key, newval, hash) < 0)
@@ -2336,13 +2337,13 @@ _collections__count_elements_impl(PyObject *module, PyObject *mapping,
23362337
}
23372338
Py_DECREF(key);
23382339
}
2339-
} else {
2340+
}
2341+
else {
23402342
bound_get = _PyObject_GetAttrId(mapping, &PyId_get);
23412343
if (bound_get == NULL)
23422344
goto done;
23432345

23442346
PyObject *zero = _PyLong_GetZero(); // borrowed reference
2345-
PyObject *one = _PyLong_GetOne(); // borrowed reference
23462347
while (1) {
23472348
key = PyIter_Next(it);
23482349
if (key == NULL)

0 commit comments

Comments
 (0)