mirror of
https://github.com/python/cpython.git
synced 2025-07-19 17:25:54 +00:00
bpo-24076: Inline single digit unpacking in the integer fastpath of sum() (GH-28469)
This commit is contained in:
parent
0bfa1106ac
commit
debd804037
2 changed files with 10 additions and 1 deletions
|
@ -2479,7 +2479,15 @@ builtin_sum_impl(PyObject *module, PyObject *iterable, PyObject *start)
|
|||
return PyLong_FromLong(i_result);
|
||||
}
|
||||
if (PyLong_CheckExact(item) || PyBool_Check(item)) {
|
||||
long b = PyLong_AsLongAndOverflow(item, &overflow);
|
||||
long b;
|
||||
overflow = 0;
|
||||
/* Single digits are common, fast, and cannot overflow on unpacking. */
|
||||
switch (Py_SIZE(item)) {
|
||||
case -1: b = -(sdigit) ((PyLongObject*)item)->ob_digit[0]; break;
|
||||
case 0: continue;
|
||||
case 1: b = ((PyLongObject*)item)->ob_digit[0]; break;
|
||||
default: b = PyLong_AsLongAndOverflow(item, &overflow); break;
|
||||
}
|
||||
if (overflow == 0 &&
|
||||
(i_result >= 0 ? (b <= LONG_MAX - i_result)
|
||||
: (b >= LONG_MIN - i_result)))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue