summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2021-05-26 22:51:07 (GMT)
committerGitHub <noreply@github.com>2021-05-26 22:51:07 (GMT)
commit3e7ee02327db13e4337374597cdc4458ecb9e3ad (patch)
treecf61463ec1ded73c693c981875d68e483c2af552 /Modules
parentd8fd8c8568cbc2f53c1abeda3596a89a46f0e3d7 (diff)
downloadcpython-3e7ee02327db13e4337374597cdc4458ecb9e3ad.zip
cpython-3e7ee02327db13e4337374597cdc4458ecb9e3ad.tar.gz
cpython-3e7ee02327db13e4337374597cdc4458ecb9e3ad.tar.bz2
bpo-42161: mathmodule.c: move _PyLong_GetOne() loop invariant (GH-26391)
Move _PyLong_GetZero() and _PyLong_GetOne() loop invariants outside loops in functions: * math.comb() * math.gcd() * math.lcm() * math.perm()
Diffstat (limited to 'Modules')
-rw-r--r--Modules/mathmodule.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/Modules/mathmodule.c b/Modules/mathmodule.c
index d0dd12d..a2a2db2 100644
--- a/Modules/mathmodule.c
+++ b/Modules/mathmodule.c
@@ -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;
}