summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Dickinson <dickinsm@gmail.com>2009-02-15 15:14:57 (GMT)
committerMark Dickinson <dickinsm@gmail.com>2009-02-15 15:14:57 (GMT)
commite441674a96b892755fbfe4c1db3101915a3f5edd (patch)
tree076b767c731bc3922861467fc5459ecc6ef1a6cb
parent5a74bf63547fc471022238ea66f61f27ca5b9909 (diff)
downloadcpython-e441674a96b892755fbfe4c1db3101915a3f5edd.zip
cpython-e441674a96b892755fbfe4c1db3101915a3f5edd.tar.gz
cpython-e441674a96b892755fbfe4c1db3101915a3f5edd.tar.bz2
A few more type fixes for py3k that were missed in r69635
-rw-r--r--Include/longintrepr.h1
-rw-r--r--Objects/longobject.c25
2 files changed, 14 insertions, 12 deletions
diff --git a/Include/longintrepr.h b/Include/longintrepr.h
index 72f7199..2dbb3f5 100644
--- a/Include/longintrepr.h
+++ b/Include/longintrepr.h
@@ -19,6 +19,7 @@ extern "C" {
long_pow() requires that SHIFT be divisible by 5. */
typedef unsigned short digit;
+typedef short sdigit; /* signed variant of digit */
#define BASE_TWODIGITS_TYPE long
typedef unsigned BASE_TWODIGITS_TYPE twodigits;
typedef BASE_TWODIGITS_TYPE stwodigits; /* signed variant of twodigits */
diff --git a/Objects/longobject.c b/Objects/longobject.c
index 4ab60a1..ead6398 100644
--- a/Objects/longobject.c
+++ b/Objects/longobject.c
@@ -15,8 +15,10 @@
#define NSMALLNEGINTS 5
#endif
-#define MEDIUM_VALUE(x) (Py_SIZE(x) < 0 ? -(x)->ob_digit[0] : \
- (Py_SIZE(x) == 0 ? 0 : (x)->ob_digit[0]))
+/* convert a PyLong of size 1, 0 or -1 to an sdigit */
+#define MEDIUM_VALUE(x) (Py_SIZE(x) < 0 ? -(sdigit)(x)->ob_digit[0] : \
+ (Py_SIZE(x) == 0 ? (sdigit)0 : \
+ (sdigit)(x)->ob_digit[0]))
#define ABS(x) ((x) < 0 ? -(x) : (x))
#if NSMALLNEGINTS + NSMALLPOSINTS > 0
@@ -31,7 +33,7 @@ int quick_int_allocs, quick_neg_int_allocs;
#endif
static PyObject *
-get_small_int(int ival)
+get_small_int(sdigit ival)
{
PyObject *v = (PyObject*)(small_ints + ival + NSMALLNEGINTS);
Py_INCREF(v);
@@ -52,7 +54,7 @@ static PyLongObject *
maybe_small_long(PyLongObject *v)
{
if (v && ABS(Py_SIZE(v)) <= 1) {
- int ival = MEDIUM_VALUE(v);
+ sdigit ival = MEDIUM_VALUE(v);
if (-NSMALLNEGINTS <= ival && ival < NSMALLPOSINTS) {
Py_DECREF(v);
return (PyLongObject *)get_small_int(ival);
@@ -129,7 +131,7 @@ _PyLong_New(Py_ssize_t size)
sizeof(PyVarObject) instead of the offsetof, but this risks being
incorrect in the presence of padding between the PyVarObject header
and the digits. */
- if (size > MAX_LONG_DIGITS) {
+ if (size > (Py_ssize_t)MAX_LONG_DIGITS) {
PyErr_SetString(PyExc_OverflowError,
"too many digits in integer");
return NULL;
@@ -154,7 +156,7 @@ _PyLong_Copy(PyLongObject *src)
if (i < 0)
i = -(i);
if (i < 2) {
- int ival = src->ob_digit[0];
+ sdigit ival = src->ob_digit[0];
if (Py_SIZE(src) < 0)
ival = -ival;
CHECK_SMALL_INT(ival);
@@ -2142,7 +2144,7 @@ x_divrem(PyLongObject *v1, PyLongObject *w1, PyLongObject **prem)
carry += v->ob_digit[i+k] - z
+ ((twodigits)zz << PyLong_SHIFT);
v->ob_digit[i+k] = (digit)(carry & PyLong_MASK);
- carry = Py_ARITHMETIC_RIGHT_SHIFT(BASE_TWODIGITS_TYPE,
+ carry = Py_ARITHMETIC_RIGHT_SHIFT(stwodigits,
carry, PyLong_SHIFT);
carry -= zz;
}
@@ -2162,7 +2164,7 @@ x_divrem(PyLongObject *v1, PyLongObject *w1, PyLongObject **prem)
carry += v->ob_digit[i+k] + w->ob_digit[i];
v->ob_digit[i+k] = (digit)(carry & PyLong_MASK);
carry = Py_ARITHMETIC_RIGHT_SHIFT(
- BASE_TWODIGITS_TYPE,
+ stwodigits,
carry, PyLong_SHIFT);
}
}
@@ -2216,7 +2218,7 @@ long_compare(PyLongObject *a, PyLongObject *b)
if (i < 0)
sign = 0;
else {
- sign = (int)a->ob_digit[i] - (int)b->ob_digit[i];
+ sign = (sdigit)a->ob_digit[i] - (sdigit)b->ob_digit[i];
if (Py_SIZE(a) < 0)
sign = -sign;
}
@@ -3159,7 +3161,7 @@ long_pow(PyObject *v, PyObject *w, PyObject *x)
for (i = Py_SIZE(b) - 1; i >= 0; --i) {
digit bi = b->ob_digit[i];
- for (j = 1 << (PyLong_SHIFT-1); j != 0; j >>= 1) {
+ for (j = (digit)1 << (PyLong_SHIFT-1); j != 0; j >>= 1) {
MULT(z, z, z)
if (bi & j)
MULT(z, a, z)
@@ -3384,9 +3386,8 @@ long_bitwise(PyLongObject *a,
{
digit maska, maskb; /* 0 or PyLong_MASK */
int negz;
- Py_ssize_t size_a, size_b, size_z;
+ Py_ssize_t size_a, size_b, size_z, i;
PyLongObject *z;
- int i;
digit diga, digb;
PyObject *v;