From 67ae8797ac0950782930cab8214588346028dde4 Mon Sep 17 00:00:00 2001 From: Mark Wooding Date: Mon, 21 Oct 2019 11:43:43 +0100 Subject: [PATCH] mp.c: Use newer names for the internal `long' representation parameters. In Python 2.6, the `SHIFT' and `MASK' constants grew `PyLong_' prefixes, but the old names were retained for compatibility; in Python 3, the old names are gone. Use the new names, defining them as necessary. --- mp.c | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/mp.c b/mp.c index b646846..b25fdce 100644 --- a/mp.c +++ b/mp.c @@ -33,7 +33,15 @@ PyTypeObject *mp_pytype = 0; PyTypeObject *gf_pytype = 0; -STATIC_ASSERT(MPW_BITS >= SHIFT, +#ifndef PyLong_SHIFT +# define PyLong_SHIFT SHIFT +#endif + +#ifndef PyLong_MASK +# define PyLong_MASK MASK +#endif + +STATIC_ASSERT(MPW_BITS >= PyLong_SHIFT, "Catacomb's limbs are now narrower than than Python's!"); mp *mp_frompylong(PyObject *obj) @@ -50,13 +58,13 @@ mp *mp_frompylong(PyObject *obj) sz = Py_SIZE(l); if (sz < 0) sz = -sz; - bits = (unsigned long)sz * SHIFT; + bits = (unsigned long)sz * PyLong_SHIFT; w = (bits + MPW_BITS - 1)/MPW_BITS; x = mp_new(w, Py_SIZE(l) < 0 ? MP_NEG : 0); p = x->v; for (i = 0; i < sz; i++) { r |= (mpd)l->ob_digit[i] << b; - b += SHIFT; + b += PyLong_SHIFT; while (b >= MPW_BITS) { *p++ = MPW(r); r >>= MPW_BITS; @@ -75,7 +83,7 @@ mp *mp_frompylong(PyObject *obj) PyObject *mp_topylong(mp *x) { unsigned long bits = mp_bits(x); - int sz = (bits + SHIFT - 1)/SHIFT; + int sz = (bits + PyLong_SHIFT - 1)/PyLong_SHIFT; PyLongObject *l = _PyLong_New(sz); mpd r = 0; int b = 0; @@ -85,15 +93,15 @@ PyObject *mp_topylong(mp *x) while (i < sz && p < x->vl) { r |= (mpd)*p++ << b; b += MPW_BITS; - while (i < sz && b >= SHIFT) { - l->ob_digit[i++] = r & MASK; - r >>= SHIFT; - b -= SHIFT; + while (i < sz && b >= PyLong_SHIFT) { + l->ob_digit[i++] = r & PyLong_MASK; + r >>= PyLong_SHIFT; + b -= PyLong_SHIFT; } } while (i < sz && r) { - l->ob_digit[i++] = r & MASK; - r >>= SHIFT; + l->ob_digit[i++] = r & PyLong_MASK; + r >>= PyLong_SHIFT; } Py_SIZE(l) = (x->f & MP_NEG) ? -sz : sz; return ((PyObject *)l); -- 2.11.0