Kaydet (Commit) 9f688bf9 authored tarafından Tim Peters's avatar Tim Peters

Some cleanup of longs in prepartion for Cray J90 fixes: got

rid of Py_PROTO, switched to ANSI function decls, and did some
minor fiddling.
üst 47073205
...@@ -52,7 +52,7 @@ struct _longobject { ...@@ -52,7 +52,7 @@ struct _longobject {
digit ob_digit[1]; digit ob_digit[1];
}; };
DL_IMPORT(PyLongObject *) _PyLong_New Py_PROTO((int)); DL_IMPORT(PyLongObject *) _PyLong_New(int);
#ifdef __cplusplus #ifdef __cplusplus
} }
......
...@@ -22,14 +22,14 @@ extern DL_IMPORT(PyTypeObject) PyLong_Type; ...@@ -22,14 +22,14 @@ extern DL_IMPORT(PyTypeObject) PyLong_Type;
#define PyLong_Check(op) ((op)->ob_type == &PyLong_Type) #define PyLong_Check(op) ((op)->ob_type == &PyLong_Type)
extern DL_IMPORT(PyObject *) PyLong_FromLong Py_PROTO((long)); extern DL_IMPORT(PyObject *) PyLong_FromLong(long);
extern DL_IMPORT(PyObject *) PyLong_FromUnsignedLong Py_PROTO((unsigned long)); extern DL_IMPORT(PyObject *) PyLong_FromUnsignedLong(unsigned long);
extern DL_IMPORT(PyObject *) PyLong_FromDouble Py_PROTO((double)); extern DL_IMPORT(PyObject *) PyLong_FromDouble(double);
extern DL_IMPORT(long) PyLong_AsLong Py_PROTO((PyObject *)); extern DL_IMPORT(long) PyLong_AsLong(PyObject *);
extern DL_IMPORT(unsigned long) PyLong_AsUnsignedLong Py_PROTO((PyObject *)); extern DL_IMPORT(unsigned long) PyLong_AsUnsignedLong(PyObject *);
extern DL_IMPORT(double) PyLong_AsDouble Py_PROTO((PyObject *)); extern DL_IMPORT(double) PyLong_AsDouble(PyObject *);
extern DL_IMPORT(PyObject *) PyLong_FromVoidPtr Py_PROTO((void *)); extern DL_IMPORT(PyObject *) PyLong_FromVoidPtr(void *);
extern DL_IMPORT(void *) PyLong_AsVoidPtr Py_PROTO((PyObject *)); extern DL_IMPORT(void *) PyLong_AsVoidPtr(PyObject *);
#ifdef HAVE_LONG_LONG #ifdef HAVE_LONG_LONG
...@@ -54,14 +54,14 @@ extern DL_IMPORT(void *) PyLong_AsVoidPtr Py_PROTO((PyObject *)); ...@@ -54,14 +54,14 @@ extern DL_IMPORT(void *) PyLong_AsVoidPtr Py_PROTO((PyObject *));
#define LONG_LONG long long #define LONG_LONG long long
#endif #endif
extern DL_IMPORT(PyObject *) PyLong_FromLongLong Py_PROTO((LONG_LONG)); extern DL_IMPORT(PyObject *) PyLong_FromLongLong(LONG_LONG);
extern DL_IMPORT(PyObject *) PyLong_FromUnsignedLongLong Py_PROTO((unsigned LONG_LONG)); extern DL_IMPORT(PyObject *) PyLong_FromUnsignedLongLong(unsigned LONG_LONG);
extern DL_IMPORT(LONG_LONG) PyLong_AsLongLong Py_PROTO((PyObject *)); extern DL_IMPORT(LONG_LONG) PyLong_AsLongLong(PyObject *);
extern DL_IMPORT(unsigned LONG_LONG) PyLong_AsUnsignedLongLong Py_PROTO((PyObject *)); extern DL_IMPORT(unsigned LONG_LONG) PyLong_AsUnsignedLongLong(PyObject *);
#endif /* HAVE_LONG_LONG */ #endif /* HAVE_LONG_LONG */
DL_IMPORT(PyObject *) PyLong_FromString Py_PROTO((char *, char **, int)); DL_IMPORT(PyObject *) PyLong_FromString(char *, char **, int);
DL_IMPORT(PyObject *) PyLong_FromUnicode Py_PROTO((Py_UNICODE*, int, int)); DL_IMPORT(PyObject *) PyLong_FromUnicode(Py_UNICODE*, int, int);
#ifdef __cplusplus #ifdef __cplusplus
} }
......
...@@ -22,11 +22,11 @@ redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES. ...@@ -22,11 +22,11 @@ redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#define ABS(x) ((x) < 0 ? -(x) : (x)) #define ABS(x) ((x) < 0 ? -(x) : (x))
/* Forward */ /* Forward */
static PyLongObject *long_normalize Py_PROTO((PyLongObject *)); static PyLongObject *long_normalize(PyLongObject *);
static PyLongObject *mul1 Py_PROTO((PyLongObject *, wdigit)); static PyLongObject *mul1(PyLongObject *, wdigit);
static PyLongObject *muladd1 Py_PROTO((PyLongObject *, wdigit, wdigit)); static PyLongObject *muladd1(PyLongObject *, wdigit, wdigit);
static PyLongObject *divrem1 Py_PROTO((PyLongObject *, wdigit, digit *)); static PyLongObject *divrem1(PyLongObject *, wdigit, digit *);
static PyObject *long_format Py_PROTO((PyObject *aa, int base, int addL)); static PyObject *long_format(PyObject *aa, int base, int addL);
static int ticker; /* XXX Could be shared with ceval? */ static int ticker; /* XXX Could be shared with ceval? */
...@@ -41,8 +41,7 @@ static int ticker; /* XXX Could be shared with ceval? */ ...@@ -41,8 +41,7 @@ static int ticker; /* XXX Could be shared with ceval? */
of the algorithms used, this could save at most be one word anyway. */ of the algorithms used, this could save at most be one word anyway. */
static PyLongObject * static PyLongObject *
long_normalize(v) long_normalize(register PyLongObject *v)
register PyLongObject *v;
{ {
int j = ABS(v->ob_size); int j = ABS(v->ob_size);
register int i = j; register int i = j;
...@@ -58,8 +57,7 @@ long_normalize(v) ...@@ -58,8 +57,7 @@ long_normalize(v)
Return NULL and set exception if we run out of memory. */ Return NULL and set exception if we run out of memory. */
PyLongObject * PyLongObject *
_PyLong_New(size) _PyLong_New(int size)
int size;
{ {
return PyObject_NEW_VAR(PyLongObject, &PyLong_Type, size); return PyObject_NEW_VAR(PyLongObject, &PyLong_Type, size);
} }
...@@ -67,8 +65,7 @@ _PyLong_New(size) ...@@ -67,8 +65,7 @@ _PyLong_New(size)
/* Create a new long int object from a C long int */ /* Create a new long int object from a C long int */
PyObject * PyObject *
PyLong_FromLong(ival) PyLong_FromLong(long ival)
long ival;
{ {
/* Assume a C long fits in at most 5 'digits' */ /* Assume a C long fits in at most 5 'digits' */
/* Works on both 32- and 64-bit machines */ /* Works on both 32- and 64-bit machines */
...@@ -92,8 +89,7 @@ PyLong_FromLong(ival) ...@@ -92,8 +89,7 @@ PyLong_FromLong(ival)
/* Create a new long int object from a C unsigned long int */ /* Create a new long int object from a C unsigned long int */
PyObject * PyObject *
PyLong_FromUnsignedLong(ival) PyLong_FromUnsignedLong(unsigned long ival)
unsigned long ival;
{ {
/* Assume a C long fits in at most 5 'digits' */ /* Assume a C long fits in at most 5 'digits' */
/* Works on both 32- and 64-bit machines */ /* Works on both 32- and 64-bit machines */
...@@ -113,12 +109,7 @@ PyLong_FromUnsignedLong(ival) ...@@ -113,12 +109,7 @@ PyLong_FromUnsignedLong(ival)
/* Create a new long int object from a C double */ /* Create a new long int object from a C double */
PyObject * PyObject *
#ifdef MPW
PyLong_FromDouble(double dval) PyLong_FromDouble(double dval)
#else
PyLong_FromDouble(dval)
double dval;
#endif /* MPW */
{ {
PyLongObject *v; PyLongObject *v;
double frac; double frac;
...@@ -156,8 +147,7 @@ PyLong_FromDouble(dval) ...@@ -156,8 +147,7 @@ PyLong_FromDouble(dval)
Returns -1 and sets an error condition if overflow occurs. */ Returns -1 and sets an error condition if overflow occurs. */
long long
PyLong_AsLong(vv) PyLong_AsLong(PyObject *vv)
PyObject *vv;
{ {
/* This version by Tim Peters */ /* This version by Tim Peters */
register PyLongObject *v; register PyLongObject *v;
...@@ -201,8 +191,7 @@ PyLong_AsLong(vv) ...@@ -201,8 +191,7 @@ PyLong_AsLong(vv)
Returns -1 and sets an error condition if overflow occurs. */ Returns -1 and sets an error condition if overflow occurs. */
unsigned long unsigned long
PyLong_AsUnsignedLong(vv) PyLong_AsUnsignedLong(PyObject *vv)
PyObject *vv;
{ {
register PyLongObject *v; register PyLongObject *v;
unsigned long x, prev; unsigned long x, prev;
...@@ -235,8 +224,7 @@ PyLong_AsUnsignedLong(vv) ...@@ -235,8 +224,7 @@ PyLong_AsUnsignedLong(vv)
/* Get a C double from a long int object. */ /* Get a C double from a long int object. */
double double
PyLong_AsDouble(vv) PyLong_AsDouble(PyObject *vv)
PyObject *vv;
{ {
register PyLongObject *v; register PyLongObject *v;
double x; double x;
...@@ -264,8 +252,7 @@ PyLong_AsDouble(vv) ...@@ -264,8 +252,7 @@ PyLong_AsDouble(vv)
/* Create a new long (or int) object from a C pointer */ /* Create a new long (or int) object from a C pointer */
PyObject * PyObject *
PyLong_FromVoidPtr(p) PyLong_FromVoidPtr(void *p)
void *p;
{ {
#if SIZEOF_VOID_P == SIZEOF_LONG #if SIZEOF_VOID_P == SIZEOF_LONG
return PyInt_FromLong((long)p); return PyInt_FromLong((long)p);
...@@ -284,8 +271,7 @@ PyLong_FromVoidPtr(p) ...@@ -284,8 +271,7 @@ PyLong_FromVoidPtr(p)
/* Get a C pointer from a long object (or an int object in some cases) */ /* Get a C pointer from a long object (or an int object in some cases) */
void * void *
PyLong_AsVoidPtr(vv) PyLong_AsVoidPtr(PyObject *vv)
PyObject *vv;
{ {
/* This function will allow int or long objects. If vv is neither, /* This function will allow int or long objects. If vv is neither,
then the PyLong_AsLong*() functions will raise the exception: then the PyLong_AsLong*() functions will raise the exception:
...@@ -327,8 +313,7 @@ PyLong_AsVoidPtr(vv) ...@@ -327,8 +313,7 @@ PyLong_AsVoidPtr(vv)
/* Create a new long int object from a C LONG_LONG int */ /* Create a new long int object from a C LONG_LONG int */
PyObject * PyObject *
PyLong_FromLongLong(ival) PyLong_FromLongLong(LONG_LONG ival)
LONG_LONG ival;
{ {
#if SIZEOF_LONG_LONG == SIZEOF_LONG #if SIZEOF_LONG_LONG == SIZEOF_LONG
/* In case the compiler is faking it. */ /* In case the compiler is faking it. */
...@@ -369,8 +354,7 @@ PyLong_FromLongLong(ival) ...@@ -369,8 +354,7 @@ PyLong_FromLongLong(ival)
/* Create a new long int object from a C unsigned LONG_LONG int */ /* Create a new long int object from a C unsigned LONG_LONG int */
PyObject * PyObject *
PyLong_FromUnsignedLongLong(ival) PyLong_FromUnsignedLongLong(unsigned LONG_LONG ival)
unsigned LONG_LONG ival;
{ {
#if SIZEOF_LONG_LONG == SIZEOF_LONG #if SIZEOF_LONG_LONG == SIZEOF_LONG
/* In case the compiler is faking it. */ /* In case the compiler is faking it. */
...@@ -403,8 +387,7 @@ PyLong_FromUnsignedLongLong(ival) ...@@ -403,8 +387,7 @@ PyLong_FromUnsignedLongLong(ival)
Returns -1 and sets an error condition if overflow occurs. */ Returns -1 and sets an error condition if overflow occurs. */
LONG_LONG LONG_LONG
PyLong_AsLongLong(vv) PyLong_AsLongLong(PyObject *vv)
PyObject *vv;
{ {
#if SIZEOF_LONG_LONG == SIZEOF_LONG #if SIZEOF_LONG_LONG == SIZEOF_LONG
/* In case the compiler is faking it. */ /* In case the compiler is faking it. */
...@@ -444,8 +427,7 @@ PyLong_AsLongLong(vv) ...@@ -444,8 +427,7 @@ PyLong_AsLongLong(vv)
} }
unsigned LONG_LONG unsigned LONG_LONG
PyLong_AsUnsignedLongLong(vv) PyLong_AsUnsignedLongLong(PyObject *vv)
PyObject *vv;
{ {
#if SIZEOF_LONG_LONG == 4 #if SIZEOF_LONG_LONG == 4
/* In case the compiler is faking it. */ /* In case the compiler is faking it. */
...@@ -488,9 +470,7 @@ PyLong_AsUnsignedLongLong(vv) ...@@ -488,9 +470,7 @@ PyLong_AsUnsignedLongLong(vv)
/* Multiply by a single digit, ignoring the sign. */ /* Multiply by a single digit, ignoring the sign. */
static PyLongObject * static PyLongObject *
mul1(a, n) mul1(PyLongObject *a, wdigit n)
PyLongObject *a;
wdigit n;
{ {
return muladd1(a, n, (digit)0); return muladd1(a, n, (digit)0);
} }
...@@ -498,10 +478,7 @@ mul1(a, n) ...@@ -498,10 +478,7 @@ mul1(a, n)
/* Multiply by a single digit and add a single digit, ignoring the sign. */ /* Multiply by a single digit and add a single digit, ignoring the sign. */
static PyLongObject * static PyLongObject *
muladd1(a, n, extra) muladd1(PyLongObject *a, wdigit n, wdigit extra)
PyLongObject *a;
wdigit n;
wdigit extra;
{ {
int size_a = ABS(a->ob_size); int size_a = ABS(a->ob_size);
PyLongObject *z = _PyLong_New(size_a+1); PyLongObject *z = _PyLong_New(size_a+1);
...@@ -524,10 +501,7 @@ muladd1(a, n, extra) ...@@ -524,10 +501,7 @@ muladd1(a, n, extra)
The sign of a is ignored; n should not be zero. */ The sign of a is ignored; n should not be zero. */
static PyLongObject * static PyLongObject *
divrem1(a, n, prem) divrem1(PyLongObject *a, wdigit n, digit *prem)
PyLongObject *a;
wdigit n;
digit *prem;
{ {
int size = ABS(a->ob_size); int size = ABS(a->ob_size);
PyLongObject *z; PyLongObject *z;
...@@ -552,10 +526,7 @@ divrem1(a, n, prem) ...@@ -552,10 +526,7 @@ divrem1(a, n, prem)
If base is 8 or 16, add the proper prefix '0' or '0x'. */ If base is 8 or 16, add the proper prefix '0' or '0x'. */
static PyObject * static PyObject *
long_format(aa, base, addL) long_format(PyObject *aa, int base, int addL)
PyObject *aa;
int base;
int addL;
{ {
register PyLongObject *a = (PyLongObject *)aa; register PyLongObject *a = (PyLongObject *)aa;
PyStringObject *str; PyStringObject *str;
...@@ -682,25 +653,8 @@ long_format(aa, base, addL) ...@@ -682,25 +653,8 @@ long_format(aa, base, addL)
return (PyObject *)str; return (PyObject *)str;
} }
#if 0
/* Convert a string to a long int object, in a given base.
Base zero implies a default depending on the number.
External linkage: used in compile.c and stropmodule.c. */
PyObject *
long_scan(str, base)
char *str;
int base;
{
return PyLong_FromString(str, (char **)NULL, base);
}
#endif
PyObject * PyObject *
PyLong_FromString(str, pend, base) PyLong_FromString(char *str, char **pend, int base)
char *str;
char **pend;
int base;
{ {
int sign = 1; int sign = 1;
char *start, *orig_str = str; char *start, *orig_str = str;
...@@ -773,10 +727,7 @@ PyLong_FromString(str, pend, base) ...@@ -773,10 +727,7 @@ PyLong_FromString(str, pend, base)
} }
PyObject * PyObject *
PyLong_FromUnicode(u, length, base) PyLong_FromUnicode(Py_UNICODE *u, int length, int base)
Py_UNICODE *u;
int length;
int base;
{ {
char buffer[256]; char buffer[256];
...@@ -791,19 +742,18 @@ PyLong_FromUnicode(u, length, base) ...@@ -791,19 +742,18 @@ PyLong_FromUnicode(u, length, base)
return PyLong_FromString(buffer, NULL, base); return PyLong_FromString(buffer, NULL, base);
} }
/* forward */
static PyLongObject *x_divrem static PyLongObject *x_divrem
Py_PROTO((PyLongObject *, PyLongObject *, PyLongObject **)); (PyLongObject *, PyLongObject *, PyLongObject **);
static PyObject *long_pos Py_PROTO((PyLongObject *)); static PyObject *long_pos(PyLongObject *);
static int long_divrem Py_PROTO((PyLongObject *, PyLongObject *, static int long_divrem(PyLongObject *, PyLongObject *,
PyLongObject **, PyLongObject **)); PyLongObject **, PyLongObject **);
/* Long division with remainder, top-level routine */ /* Long division with remainder, top-level routine */
static int static int
long_divrem(a, b, pdiv, prem) long_divrem(PyLongObject *a, PyLongObject *b,
PyLongObject *a, *b; PyLongObject **pdiv, PyLongObject **prem)
PyLongObject **pdiv;
PyLongObject **prem;
{ {
int size_a = ABS(a->ob_size), size_b = ABS(b->ob_size); int size_a = ABS(a->ob_size), size_b = ABS(b->ob_size);
PyLongObject *z; PyLongObject *z;
...@@ -849,9 +799,7 @@ long_divrem(a, b, pdiv, prem) ...@@ -849,9 +799,7 @@ long_divrem(a, b, pdiv, prem)
/* Unsigned long division with remainder -- the algorithm */ /* Unsigned long division with remainder -- the algorithm */
static PyLongObject * static PyLongObject *
x_divrem(v1, w1, prem) x_divrem(PyLongObject *v1, PyLongObject *w1, PyLongObject **prem)
PyLongObject *v1, *w1;
PyLongObject **prem;
{ {
int size_v = ABS(v1->ob_size), size_w = ABS(w1->ob_size); int size_v = ABS(v1->ob_size), size_w = ABS(w1->ob_size);
digit d = (digit) ((twodigits)BASE / (w1->ob_digit[size_w-1] + 1)); digit d = (digit) ((twodigits)BASE / (w1->ob_digit[size_w-1] + 1));
...@@ -945,55 +893,26 @@ x_divrem(v1, w1, prem) ...@@ -945,55 +893,26 @@ x_divrem(v1, w1, prem)
/* Methods */ /* Methods */
/* Forward */
static void long_dealloc Py_PROTO((PyObject *));
static PyObject *long_repr Py_PROTO((PyObject *));
static int long_compare Py_PROTO((PyLongObject *, PyLongObject *));
static long long_hash Py_PROTO((PyLongObject *));
static PyObject *long_add Py_PROTO((PyLongObject *, PyLongObject *));
static PyObject *long_sub Py_PROTO((PyLongObject *, PyLongObject *));
static PyObject *long_mul Py_PROTO((PyLongObject *, PyLongObject *));
static PyObject *long_div Py_PROTO((PyLongObject *, PyLongObject *));
static PyObject *long_mod Py_PROTO((PyLongObject *, PyLongObject *));
static PyObject *long_divmod Py_PROTO((PyLongObject *, PyLongObject *));
static PyObject *long_pow
Py_PROTO((PyLongObject *, PyLongObject *, PyLongObject *));
static PyObject *long_neg Py_PROTO((PyLongObject *));
static PyObject *long_pos Py_PROTO((PyLongObject *));
static PyObject *long_abs Py_PROTO((PyLongObject *));
static int long_nonzero Py_PROTO((PyLongObject *));
static PyObject *long_invert Py_PROTO((PyLongObject *));
static PyObject *long_lshift Py_PROTO((PyLongObject *, PyLongObject *));
static PyObject *long_rshift Py_PROTO((PyLongObject *, PyLongObject *));
static PyObject *long_and Py_PROTO((PyLongObject *, PyLongObject *));
static PyObject *long_xor Py_PROTO((PyLongObject *, PyLongObject *));
static PyObject *long_or Py_PROTO((PyLongObject *, PyLongObject *));
static void static void
long_dealloc(v) long_dealloc(PyObject *v)
PyObject *v;
{ {
PyObject_DEL(v); PyObject_DEL(v);
} }
static PyObject * static PyObject *
long_repr(v) long_repr(PyObject *v)
PyObject *v;
{ {
return long_format(v, 10, 1); return long_format(v, 10, 1);
} }
static PyObject * static PyObject *
long_str(v) long_str(PyObject *v)
PyObject *v;
{ {
return long_format(v, 10, 0); return long_format(v, 10, 0);
} }
static int static int
long_compare(a, b) long_compare(PyLongObject *a, PyLongObject *b)
PyLongObject *a, *b;
{ {
int sign; int sign;
...@@ -1019,8 +938,7 @@ long_compare(a, b) ...@@ -1019,8 +938,7 @@ long_compare(a, b)
} }
static long static long
long_hash(v) long_hash(PyLongObject *v)
PyLongObject *v;
{ {
long x; long x;
int i, sign; int i, sign;
...@@ -1049,10 +967,8 @@ long_hash(v) ...@@ -1049,10 +967,8 @@ long_hash(v)
/* Add the absolute values of two long integers. */ /* Add the absolute values of two long integers. */
static PyLongObject *x_add Py_PROTO((PyLongObject *, PyLongObject *));
static PyLongObject * static PyLongObject *
x_add(a, b) x_add(PyLongObject *a, PyLongObject *b)
PyLongObject *a, *b;
{ {
int size_a = ABS(a->ob_size), size_b = ABS(b->ob_size); int size_a = ABS(a->ob_size), size_b = ABS(b->ob_size);
PyLongObject *z; PyLongObject *z;
...@@ -1087,10 +1003,8 @@ x_add(a, b) ...@@ -1087,10 +1003,8 @@ x_add(a, b)
/* Subtract the absolute values of two integers. */ /* Subtract the absolute values of two integers. */
static PyLongObject *x_sub Py_PROTO((PyLongObject *, PyLongObject *));
static PyLongObject * static PyLongObject *
x_sub(a, b) x_sub(PyLongObject *a, PyLongObject *b)
PyLongObject *a, *b;
{ {
int size_a = ABS(a->ob_size), size_b = ABS(b->ob_size); int size_a = ABS(a->ob_size), size_b = ABS(b->ob_size);
PyLongObject *z; PyLongObject *z;
...@@ -1142,9 +1056,7 @@ x_sub(a, b) ...@@ -1142,9 +1056,7 @@ x_sub(a, b)
} }
static PyObject * static PyObject *
long_add(a, b) long_add(PyLongObject *a, PyLongObject *b)
PyLongObject *a;
PyLongObject *b;
{ {
PyLongObject *z; PyLongObject *z;
...@@ -1167,9 +1079,7 @@ long_add(a, b) ...@@ -1167,9 +1079,7 @@ long_add(a, b)
} }
static PyObject * static PyObject *
long_sub(a, b) long_sub(PyLongObject *a, PyLongObject *b)
PyLongObject *a;
PyLongObject *b;
{ {
PyLongObject *z; PyLongObject *z;
...@@ -1191,9 +1101,7 @@ long_sub(a, b) ...@@ -1191,9 +1101,7 @@ long_sub(a, b)
} }
static PyObject * static PyObject *
long_mul(a, b) long_mul(PyLongObject *a, PyLongObject *b)
PyLongObject *a;
PyLongObject *b;
{ {
int size_a; int size_a;
int size_b; int size_b;
...@@ -1259,14 +1167,9 @@ long_mul(a, b) ...@@ -1259,14 +1167,9 @@ long_mul(a, b)
have different signs. We then subtract one from the 'div' have different signs. We then subtract one from the 'div'
part of the outcome to keep the invariant intact. */ part of the outcome to keep the invariant intact. */
static int l_divmod Py_PROTO((PyLongObject *, PyLongObject *,
PyLongObject **, PyLongObject **));
static int static int
l_divmod(v, w, pdiv, pmod) l_divmod(PyLongObject *v, PyLongObject *w,
PyLongObject *v; PyLongObject **pdiv, PyLongObject **pmod)
PyLongObject *w;
PyLongObject **pdiv;
PyLongObject **pmod;
{ {
PyLongObject *div, *mod; PyLongObject *div, *mod;
...@@ -1301,9 +1204,7 @@ l_divmod(v, w, pdiv, pmod) ...@@ -1301,9 +1204,7 @@ l_divmod(v, w, pdiv, pmod)
} }
static PyObject * static PyObject *
long_div(v, w) long_div(PyLongObject *v, PyLongObject *w)
PyLongObject *v;
PyLongObject *w;
{ {
PyLongObject *div, *mod; PyLongObject *div, *mod;
if (l_divmod(v, w, &div, &mod) < 0) if (l_divmod(v, w, &div, &mod) < 0)
...@@ -1313,9 +1214,7 @@ long_div(v, w) ...@@ -1313,9 +1214,7 @@ long_div(v, w)
} }
static PyObject * static PyObject *
long_mod(v, w) long_mod(PyLongObject *v, PyLongObject *w)
PyLongObject *v;
PyLongObject *w;
{ {
PyLongObject *div, *mod; PyLongObject *div, *mod;
if (l_divmod(v, w, &div, &mod) < 0) if (l_divmod(v, w, &div, &mod) < 0)
...@@ -1325,9 +1224,7 @@ long_mod(v, w) ...@@ -1325,9 +1224,7 @@ long_mod(v, w)
} }
static PyObject * static PyObject *
long_divmod(v, w) long_divmod(PyLongObject *v, PyLongObject *w)
PyLongObject *v;
PyLongObject *w;
{ {
PyObject *z; PyObject *z;
PyLongObject *div, *mod; PyLongObject *div, *mod;
...@@ -1346,10 +1243,7 @@ long_divmod(v, w) ...@@ -1346,10 +1243,7 @@ long_divmod(v, w)
} }
static PyObject * static PyObject *
long_pow(a, b, c) long_pow(PyLongObject *a, PyLongObject *b, PyLongObject *c)
PyLongObject *a;
PyLongObject *b;
PyLongObject *c;
{ {
PyLongObject *z, *div, *mod; PyLongObject *z, *div, *mod;
int size_b, i; int size_b, i;
...@@ -1428,8 +1322,7 @@ long_pow(a, b, c) ...@@ -1428,8 +1322,7 @@ long_pow(a, b, c)
} }
static PyObject * static PyObject *
long_invert(v) long_invert(PyLongObject *v)
PyLongObject *v;
{ {
/* Implement ~x as -(x+1) */ /* Implement ~x as -(x+1) */
PyLongObject *x; PyLongObject *x;
...@@ -1447,16 +1340,14 @@ long_invert(v) ...@@ -1447,16 +1340,14 @@ long_invert(v)
} }
static PyObject * static PyObject *
long_pos(v) long_pos(PyLongObject *v)
PyLongObject *v;
{ {
Py_INCREF(v); Py_INCREF(v);
return (PyObject *)v; return (PyObject *)v;
} }
static PyObject * static PyObject *
long_neg(v) long_neg(PyLongObject *v)
PyLongObject *v;
{ {
PyLongObject *z; PyLongObject *z;
int i, n; int i, n;
...@@ -1476,8 +1367,7 @@ long_neg(v) ...@@ -1476,8 +1367,7 @@ long_neg(v)
} }
static PyObject * static PyObject *
long_abs(v) long_abs(PyLongObject *v)
PyLongObject *v;
{ {
if (v->ob_size < 0) if (v->ob_size < 0)
return long_neg(v); return long_neg(v);
...@@ -1488,16 +1378,13 @@ long_abs(v) ...@@ -1488,16 +1378,13 @@ long_abs(v)
} }
static int static int
long_nonzero(v) long_nonzero(PyLongObject *v)
PyLongObject *v;
{ {
return ABS(v->ob_size) != 0; return ABS(v->ob_size) != 0;
} }
static PyObject * static PyObject *
long_rshift(a, b) long_rshift(PyLongObject *a, PyLongObject *b)
PyLongObject *a;
PyLongObject *b;
{ {
PyLongObject *z; PyLongObject *z;
long shiftby; long shiftby;
...@@ -1549,9 +1436,7 @@ long_rshift(a, b) ...@@ -1549,9 +1436,7 @@ long_rshift(a, b)
} }
static PyObject * static PyObject *
long_lshift(a, b) long_lshift(PyLongObject *a, PyLongObject *b)
PyLongObject *a;
PyLongObject *b;
{ {
/* This version due to Tim Peters */ /* This version due to Tim Peters */
PyLongObject *z; PyLongObject *z;
...@@ -1605,12 +1490,10 @@ long_lshift(a, b) ...@@ -1605,12 +1490,10 @@ long_lshift(a, b)
#define MAX(x, y) ((x) < (y) ? (y) : (x)) #define MAX(x, y) ((x) < (y) ? (y) : (x))
#define MIN(x, y) ((x) > (y) ? (y) : (x)) #define MIN(x, y) ((x) > (y) ? (y) : (x))
static PyObject *long_bitwise Py_PROTO((PyLongObject *, int, PyLongObject *));
static PyObject * static PyObject *
long_bitwise(a, op, b) long_bitwise(PyLongObject *a,
PyLongObject *a; int op, /* '&', '|', '^' */
int op; /* '&', '|', '^' */ PyLongObject *b)
PyLongObject *b;
{ {
digit maska, maskb; /* 0 or MASK */ digit maska, maskb; /* 0 or MASK */
int negz; int negz;
...@@ -1709,33 +1592,25 @@ long_bitwise(a, op, b) ...@@ -1709,33 +1592,25 @@ long_bitwise(a, op, b)
} }
static PyObject * static PyObject *
long_and(a, b) long_and(PyLongObject *a, PyLongObject *b)
PyLongObject *a;
PyLongObject *b;
{ {
return long_bitwise(a, '&', b); return long_bitwise(a, '&', b);
} }
static PyObject * static PyObject *
long_xor(a, b) long_xor(PyLongObject *a, PyLongObject *b)
PyLongObject *a;
PyLongObject *b;
{ {
return long_bitwise(a, '^', b); return long_bitwise(a, '^', b);
} }
static PyObject * static PyObject *
long_or(a, b) long_or(PyLongObject *a, PyLongObject *b)
PyLongObject *a;
PyLongObject *b;
{ {
return long_bitwise(a, '|', b); return long_bitwise(a, '|', b);
} }
static int static int
long_coerce(pv, pw) long_coerce(PyObject **pv, PyObject **pw)
PyObject **pv;
PyObject **pw;
{ {
if (PyInt_Check(*pw)) { if (PyInt_Check(*pw)) {
*pw = PyLong_FromLong(PyInt_AsLong(*pw)); *pw = PyLong_FromLong(PyInt_AsLong(*pw));
...@@ -1746,8 +1621,7 @@ long_coerce(pv, pw) ...@@ -1746,8 +1621,7 @@ long_coerce(pv, pw)
} }
static PyObject * static PyObject *
long_int(v) long_int(PyObject *v)
PyObject *v;
{ {
long x; long x;
x = PyLong_AsLong(v); x = PyLong_AsLong(v);
...@@ -1757,16 +1631,14 @@ long_int(v) ...@@ -1757,16 +1631,14 @@ long_int(v)
} }
static PyObject * static PyObject *
long_long(v) long_long(PyObject *v)
PyObject *v;
{ {
Py_INCREF(v); Py_INCREF(v);
return v; return v;
} }
static PyObject * static PyObject *
long_float(v) long_float(PyObject *v)
PyObject *v;
{ {
double result; double result;
PyFPE_START_PROTECT("long_float", return 0) PyFPE_START_PROTECT("long_float", return 0)
...@@ -1776,50 +1648,42 @@ long_float(v) ...@@ -1776,50 +1648,42 @@ long_float(v)
} }
static PyObject * static PyObject *
long_oct(v) long_oct(PyObject *v)
PyObject *v;
{ {
return long_format(v, 8, 1); return long_format(v, 8, 1);
} }
static PyObject * static PyObject *
long_hex(v) long_hex(PyObject *v)
PyObject *v;
{ {
return long_format(v, 16, 1); return long_format(v, 16, 1);
} }
#define UF (unaryfunc)
#define BF (binaryfunc)
#define TF (ternaryfunc)
#define IF (inquiry)
static PyNumberMethods long_as_number = { static PyNumberMethods long_as_number = {
BF long_add, /*nb_add*/ (binaryfunc) long_add, /*nb_add*/
BF long_sub, /*nb_subtract*/ (binaryfunc) long_sub, /*nb_subtract*/
BF long_mul, /*nb_multiply*/ (binaryfunc) long_mul, /*nb_multiply*/
BF long_div, /*nb_divide*/ (binaryfunc) long_div, /*nb_divide*/
BF long_mod, /*nb_remainder*/ (binaryfunc) long_mod, /*nb_remainder*/
BF long_divmod, /*nb_divmod*/ (binaryfunc) long_divmod, /*nb_divmod*/
TF long_pow, /*nb_power*/ (ternaryfunc) long_pow, /*nb_power*/
UF long_neg, /*nb_negative*/ (unaryfunc) long_neg, /*nb_negative*/
UF long_pos, /*tp_positive*/ (unaryfunc) long_pos, /*tp_positive*/
UF long_abs, /*tp_absolute*/ (unaryfunc) long_abs, /*tp_absolute*/
IF long_nonzero,/*tp_nonzero*/ (inquiry) long_nonzero, /*tp_nonzero*/
UF long_invert, /*nb_invert*/ (unaryfunc) long_invert, /*nb_invert*/
BF long_lshift, /*nb_lshift*/ (binaryfunc) long_lshift, /*nb_lshift*/
BF long_rshift, /*nb_rshift*/ (binaryfunc) long_rshift, /*nb_rshift*/
BF long_and, /*nb_and*/ (binaryfunc) long_and, /*nb_and*/
BF long_xor, /*nb_xor*/ (binaryfunc) long_xor, /*nb_xor*/
BF long_or, /*nb_or*/ (binaryfunc) long_or, /*nb_or*/
(int (*) Py_FPROTO((PyObject **, PyObject **))) (int (*) (PyObject **, PyObject **))
(coercion)long_coerce, /*nb_coerce*/ (coercion)long_coerce, /*nb_coerce*/
UF long_int, /*nb_int*/ (unaryfunc) long_int, /*nb_int*/
UF long_long, /*nb_long*/ (unaryfunc) long_long, /*nb_long*/
UF long_float, /*nb_float*/ (unaryfunc) long_float, /*nb_float*/
UF long_oct, /*nb_oct*/ (unaryfunc) long_oct, /*nb_oct*/
UF long_hex, /*nb_hex*/ (unaryfunc) long_hex, /*nb_hex*/
}; };
PyTypeObject PyLong_Type = { PyTypeObject PyLong_Type = {
...@@ -1828,18 +1692,18 @@ PyTypeObject PyLong_Type = { ...@@ -1828,18 +1692,18 @@ PyTypeObject PyLong_Type = {
"long int", "long int",
sizeof(PyLongObject) - sizeof(digit), sizeof(PyLongObject) - sizeof(digit),
sizeof(digit), sizeof(digit),
(destructor)long_dealloc, /*tp_dealloc*/ (destructor)long_dealloc, /*tp_dealloc*/
0, /*tp_print*/ 0, /*tp_print*/
0, /*tp_getattr*/ 0, /*tp_getattr*/
0, /*tp_setattr*/ 0, /*tp_setattr*/
(int (*) Py_FPROTO((PyObject *, PyObject *))) (int (*) (PyObject *, PyObject *))
(cmpfunc)long_compare, /*tp_compare*/ (cmpfunc)long_compare, /*tp_compare*/
(reprfunc)long_repr, /*tp_repr*/ (reprfunc)long_repr, /*tp_repr*/
&long_as_number,/*tp_as_number*/ &long_as_number, /*tp_as_number*/
0, /*tp_as_sequence*/ 0, /*tp_as_sequence*/
0, /*tp_as_mapping*/ 0, /*tp_as_mapping*/
(long (*) Py_FPROTO((PyObject *))) (long (*) (PyObject *))
(hashfunc)long_hash, /*tp_hash*/ (hashfunc)long_hash, /*tp_hash*/
0, /*tp_call*/ 0, /*tp_call*/
(reprfunc)long_str, /*tp_str*/ (reprfunc)long_str, /*tp_str*/
}; };
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment