From 243c31667cc15a9a338330ad9b2a29b1cd1c76ec Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Tue, 18 Jan 2022 02:02:35 -0600 Subject: [PATCH] bpo-42161: Hoist the _PyLong_GetOne() call out of the inner loop. (GH-30656) --- Lib/test/test_sys.py | 2 +- Objects/enumobject.c | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py index f05cd75af97b5e..2c8c6ab6cee767 100644 --- a/Lib/test/test_sys.py +++ b/Lib/test/test_sys.py @@ -1375,7 +1375,7 @@ class C(object): pass x = codecs.charmap_build(encodings.iso8859_3.decoding_table) check(x, size('32B2iB')) # enumerate - check(enumerate([]), size('n3P')) + check(enumerate([]), size('n4P')) # reverse check(reversed(''), size('nP')) # float diff --git a/Objects/enumobject.c b/Objects/enumobject.c index b78230ddaebaaa..8fbf4fd6e470b0 100644 --- a/Objects/enumobject.c +++ b/Objects/enumobject.c @@ -16,9 +16,10 @@ class reversed "reversedobject *" "&PyReversed_Type" typedef struct { PyObject_HEAD Py_ssize_t en_index; /* current index of enumeration */ - PyObject* en_sit; /* secondary iterator of enumeration */ + PyObject* en_sit; /* secondary iterator of enumeration */ PyObject* en_result; /* result tuple */ PyObject* en_longindex; /* index for sequences >= PY_SSIZE_T_MAX */ + PyObject* one; /* borrowed reference */ } enumobject; @@ -78,6 +79,7 @@ enum_new_impl(PyTypeObject *type, PyObject *iterable, PyObject *start) Py_DECREF(en); return NULL; } + en->one = _PyLong_GetOne(); /* borrowed reference */ return (PyObject *)en; } @@ -157,7 +159,7 @@ enum_next_long(enumobject *en, PyObject* next_item) } next_index = en->en_longindex; assert(next_index != NULL); - stepped_up = PyNumber_Add(next_index, _PyLong_GetOne()); + stepped_up = PyNumber_Add(next_index, en->one); if (stepped_up == NULL) { Py_DECREF(next_item); return NULL;