Mailing List Archive

CVS: python/dist/src/Modules mpzmodule.c,2.42,2.43
Update of /cvsroot/python/python/dist/src/Modules
In directory usw-pr-cvs1:/tmp/cvs-serv7702/Modules

Modified Files:
mpzmodule.c
Log Message:
Get rid of all METH_OLDARGS & PyArg_Parse.
Fix floating point exception if mpz.powm(10, 1, 0) (modulus == 0).
Add a test.


Index: mpzmodule.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Modules/mpzmodule.c,v
retrieving revision 2.42
retrieving revision 2.43
diff -C2 -d -r2.42 -r2.43
*** mpzmodule.c 31 Mar 2002 22:02:37 -0000 2.42
--- mpzmodule.c 1 Apr 2002 01:37:14 -0000 2.43
***************
*** 836,840 ****
{
mpzobject *mpzp;
- PyObject *objp;


--- 836,839 ----
***************
*** 843,858 ****
#endif /* def MPZ_DEBUG */

- if (!PyArg_Parse(args, "O", &objp))
- return NULL;
-
/* at least we know it's some object */
! /* note DON't Py_DECREF args NEITHER objp */
!
! if (PyInt_Check(objp)) {
! long lval;
!
! if (!PyArg_Parse(objp, "l", &lval))
! return NULL;

if (lval == (long)0) {
Py_INCREF(mpz_value_zero);
--- 842,850 ----
#endif /* def MPZ_DEBUG */

/* at least we know it's some object */
! /* note DON't Py_DECREF args */

+ if (PyInt_Check(args)) {
+ long lval = PyInt_AS_LONG(args);
if (lval == (long)0) {
Py_INCREF(mpz_value_zero);
***************
*** 867,871 ****
else mpz_set_si(&mpzp->mpz, lval);
}
! else if (PyLong_Check(objp)) {
MP_INT mplongdigit;
int i;
--- 859,863 ----
else mpz_set_si(&mpzp->mpz, lval);
}
! else if (PyLong_Check(args)) {
MP_INT mplongdigit;
int i;
***************
*** 881,885 ****
/* how we're gonna handle this? */
if ((isnegative =
! ((i = ((PyLongObject *)objp)->ob_size) < 0) ))
i = -i;

--- 873,877 ----
/* how we're gonna handle this? */
if ((isnegative =
! ((i = ((PyLongObject *)args)->ob_size) < 0) ))
i = -i;

***************
*** 887,891 ****
mpz_set_ui(&mplongdigit,
(unsigned long)
! ((PyLongObject *)objp)->ob_digit[i]);
mpz_mul_2exp(&mplongdigit,&mplongdigit,
(unsigned long int)i * SHIFT);
--- 879,883 ----
mpz_set_ui(&mplongdigit,
(unsigned long)
! ((PyLongObject *)args)->ob_digit[i]);
mpz_mul_2exp(&mplongdigit,&mplongdigit,
(unsigned long int)i * SHIFT);
***************
*** 899,905 ****
mpz_clear(&mplongdigit);
}
! else if (PyString_Check(objp)) {
! unsigned char *cp = (unsigned char *)PyString_AS_STRING(objp);
! int len = PyString_GET_SIZE(objp);
MP_INT mplongdigit;

--- 891,897 ----
mpz_clear(&mplongdigit);
}
! else if (PyString_Check(args)) {
! unsigned char *cp = (unsigned char *)PyString_AS_STRING(args);
! int len = PyString_GET_SIZE(args);
MP_INT mplongdigit;

***************
*** 924,930 ****
mpz_clear(&mplongdigit);
}
! else if (is_mpzobject(objp)) {
! Py_INCREF(objp);
! mpzp = (mpzobject *)objp;
}
else {
--- 916,922 ----
mpz_clear(&mplongdigit);
}
! else if (is_mpzobject(args)) {
! Py_INCREF(args);
! mpzp = (mpzobject *)args;
}
else {
***************
*** 974,978 ****


! if (!PyArg_Parse(args, "(OOO)", &base, &exp, &mod))
return NULL;

--- 966,970 ----


! if (!PyArg_ParseTuple(args, "OOO", &base, &exp, &mod))
return NULL;

***************
*** 992,995 ****
--- 984,995 ----
}

+ if (mpz_cmp_ui(&mpzmod->mpz, 0) == 0) {
+ Py_DECREF(mpzbase);
+ Py_DECREF(mpzexp);
+ Py_DECREF(mpzmod);
+ PyErr_SetString(PyExc_ValueError, "modulus cannot be 0");
+ return NULL;
+ }
+
if (tstres < 0) {
MP_INT absexp;
***************
*** 1024,1028 ****


! if (!PyArg_Parse(args, "(OO)", &op1, &op2))
return NULL;

--- 1024,1028 ----


! if (!PyArg_ParseTuple(args, "OO", &op1, &op2))
return NULL;

***************
*** 1053,1057 ****


! if (!PyArg_Parse(args, "(OO)", &op1, &op2))
return NULL;

--- 1053,1057 ----


! if (!PyArg_ParseTuple(args, "OO", &op1, &op2))
return NULL;

***************
*** 1087,1099 ****
MPZ_sqrt(PyObject *self, PyObject *args)
{
- PyObject *op;
mpzobject *mpzop = NULL;
mpzobject *z;


! if (!PyArg_Parse(args, "O", &op))
! return NULL;
!
! if ((mpzop = mpz_mpzcoerce(op)) == NULL
|| (z = newmpzobject()) == NULL) {
Py_XDECREF(mpzop);
--- 1087,1095 ----
MPZ_sqrt(PyObject *self, PyObject *args)
{
mpzobject *mpzop = NULL;
mpzobject *z;


! if ((mpzop = mpz_mpzcoerce(args)) == NULL
|| (z = newmpzobject()) == NULL) {
Py_XDECREF(mpzop);
***************
*** 1112,1124 ****
MPZ_sqrtrem(PyObject *self, PyObject *args)
{
! PyObject *op, *z = NULL;
mpzobject *mpzop = NULL;
mpzobject *root = NULL, *rem = NULL;

!
! if (!PyArg_Parse(args, "O", &op))
! return NULL;
!
! if ((mpzop = mpz_mpzcoerce(op)) == NULL
|| (z = PyTuple_New(2)) == NULL
|| (root = newmpzobject()) == NULL
--- 1108,1116 ----
MPZ_sqrtrem(PyObject *self, PyObject *args)
{
! PyObject *z = NULL;
mpzobject *mpzop = NULL;
mpzobject *root = NULL, *rem = NULL;

! if ((mpzop = mpz_mpzcoerce(args)) == NULL
|| (z = PyTuple_New(2)) == NULL
|| (root = newmpzobject()) == NULL
***************
*** 1213,1217 ****


! if (!PyArg_Parse(args, "(OOO)", &num, &den, &mod))
return NULL;

--- 1205,1209 ----


! if (!PyArg_ParseTuple(args, "OOO", &num, &den, &mod))
return NULL;

***************
*** 1551,1565 ****
static PyMethodDef mpz_functions[] = {
#if 0
! {initialiser_name, MPZ_mpz, METH_OLDARGS},
#else /* 0 */
/* until guido ``fixes'' struct PyMethodDef */
! {(char *)initialiser_name, MPZ_mpz, METH_OLDARGS},
#endif /* 0 else */
! {"powm", MPZ_powm, METH_OLDARGS},
! {"gcd", MPZ_gcd, METH_OLDARGS},
! {"gcdext", MPZ_gcdext, METH_OLDARGS},
! {"sqrt", MPZ_sqrt, METH_OLDARGS},
! {"sqrtrem", MPZ_sqrtrem, METH_OLDARGS},
! {"divm", MPZ_divm, METH_OLDARGS},
{NULL, NULL} /* Sentinel */
};
--- 1543,1557 ----
static PyMethodDef mpz_functions[] = {
#if 0
! {initialiser_name, MPZ_mpz, METH_O},
#else /* 0 */
/* until guido ``fixes'' struct PyMethodDef */
! {(char *)initialiser_name, MPZ_mpz, METH_O},
#endif /* 0 else */
! {"powm", MPZ_powm, METH_VARARGS},
! {"gcd", MPZ_gcd, METH_VARARGS},
! {"gcdext", MPZ_gcdext, METH_VARARGS},
! {"sqrt", MPZ_sqrt, METH_O},
! {"sqrtrem", MPZ_sqrtrem, METH_O},
! {"divm", MPZ_divm, METH_VARARGS},
{NULL, NULL} /* Sentinel */
};