mirror of
https://github.com/python/cpython.git
synced 2025-08-04 17:08:35 +00:00
bpo-42161: mathmodule.c: move _PyLong_GetOne() loop invariant (GH-26391) (GH-26393)
Move _PyLong_GetZero() and _PyLong_GetOne() loop invariants outside
loops in functions:
* math.comb()
* math.gcd()
* math.lcm()
* math.perm()
(cherry picked from commit 3e7ee02327
)
Co-authored-by: Victor Stinner <vstinner@python.org>
This commit is contained in:
parent
150a8e8a3e
commit
4115996342
1 changed files with 12 additions and 8 deletions
|
@ -845,13 +845,15 @@ math_gcd(PyObject *module, PyObject * const *args, Py_ssize_t nargs)
|
|||
Py_SETREF(res, PyNumber_Absolute(res));
|
||||
return res;
|
||||
}
|
||||
|
||||
PyObject *one = _PyLong_GetOne(); // borrowed ref
|
||||
for (i = 1; i < nargs; i++) {
|
||||
x = _PyNumber_Index(args[i]);
|
||||
if (x == NULL) {
|
||||
Py_DECREF(res);
|
||||
return NULL;
|
||||
}
|
||||
if (res == _PyLong_GetOne()) {
|
||||
if (res == one) {
|
||||
/* Fast path: just check arguments.
|
||||
It is okay to use identity comparison here. */
|
||||
Py_DECREF(x);
|
||||
|
@ -918,13 +920,15 @@ math_lcm(PyObject *module, PyObject * const *args, Py_ssize_t nargs)
|
|||
Py_SETREF(res, PyNumber_Absolute(res));
|
||||
return res;
|
||||
}
|
||||
|
||||
PyObject *zero = _PyLong_GetZero(); // borrowed ref
|
||||
for (i = 1; i < nargs; i++) {
|
||||
x = PyNumber_Index(args[i]);
|
||||
if (x == NULL) {
|
||||
Py_DECREF(res);
|
||||
return NULL;
|
||||
}
|
||||
if (res == _PyLong_GetZero()) {
|
||||
if (res == zero) {
|
||||
/* Fast path: just check arguments.
|
||||
It is okay to use identity comparison here. */
|
||||
Py_DECREF(x);
|
||||
|
@ -3293,10 +3297,10 @@ math_perm_impl(PyObject *module, PyObject *n, PyObject *k)
|
|||
goto done;
|
||||
}
|
||||
|
||||
factor = n;
|
||||
Py_INCREF(factor);
|
||||
factor = Py_NewRef(n);
|
||||
PyObject *one = _PyLong_GetOne(); // borrowed ref
|
||||
for (i = 1; i < factors; ++i) {
|
||||
Py_SETREF(factor, PyNumber_Subtract(factor, _PyLong_GetOne()));
|
||||
Py_SETREF(factor, PyNumber_Subtract(factor, one));
|
||||
if (factor == NULL) {
|
||||
goto error;
|
||||
}
|
||||
|
@ -3415,10 +3419,10 @@ math_comb_impl(PyObject *module, PyObject *n, PyObject *k)
|
|||
goto done;
|
||||
}
|
||||
|
||||
factor = n;
|
||||
Py_INCREF(factor);
|
||||
factor = Py_NewRef(n);
|
||||
PyObject *one = _PyLong_GetOne(); // borrowed ref
|
||||
for (i = 1; i < factors; ++i) {
|
||||
Py_SETREF(factor, PyNumber_Subtract(factor, _PyLong_GetOne()));
|
||||
Py_SETREF(factor, PyNumber_Subtract(factor, one));
|
||||
if (factor == NULL) {
|
||||
goto error;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue