mp *x;
mpw *p;
- sz = l->ob_size;
+ sz = Py_SIZE(l);
if (sz < 0) sz = -sz;
assert(MPW_BITS >= SHIFT);
bits = (unsigned long)sz * SHIFT;
w = (bits + MPW_BITS - 1)/MPW_BITS;
- x = mp_new(w, l->ob_size < 0 ? MP_NEG : 0);
+ 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;
l->ob_digit[i++] = r & MASK;
r >>= SHIFT;
}
- l->ob_size = (x->f & MP_NEG) ? -sz : sz;
+ Py_SIZE(l) = (x->f & MP_NEG) ? -sz : sz;
return ((PyObject *)l);
}
if (!o) return (0);
if ((x = tomp(o)) == 0) {
PyErr_Format(PyExc_TypeError, "can't convert %.100s to mp",
- o->ob_type->tp_name);
+ Py_TYPE(o)->tp_name);
}
return (x);
}
if (!o) return (0);
if ((x = tomp(o)) == 0) {
PyErr_Format(PyExc_TypeError, "can't convert %.100s to gf",
- o->ob_type->tp_name);
+ Py_TYPE(o)->tp_name);
}
return (x);
}
if (!good_radix_p(radix, 1)) VALERR("bad radix");
if ((z = mp_frompyobject(x, radix)) == 0) {
PyErr_Format(PyExc_TypeError, "can't convert %.100s to mp",
- x->ob_type->tp_name);
+ Py_TYPE(x)->tp_name);
goto end;
}
zz = (mp_pyobj *)ty->tp_alloc(ty, 0);
return ((PyObject *)zz);
}
-long mphash(mp *x)
+Py_hash_t mphash(mp *x)
{
PyObject *l = mp_topylong(x);
- long h = PyObject_Hash(l);
+ Py_hash_t h = PyObject_Hash(l);
Py_DECREF(l); return (h);
}
-static long mp_pyhash(PyObject *me) { return (mphash(MP_X(me))); }
+static Py_hash_t mp_pyhash(PyObject *me) { return (mphash(MP_X(me))); }
static PyObject *mpmeth_jacobi(PyObject *me, PyObject *arg)
{
static PyObject *ty##meth_frombuf(PyObject *me, PyObject *arg) \
{ \
buf b; \
- char *p; \
- Py_ssize_t sz; \
+ struct bin in; \
PyObject *rc = 0; \
mp *x; \
\
- if (!PyArg_ParseTuple(arg, "s#:frombuf", &p, &sz)) goto end; \
- buf_init(&b, p, sz); \
+ if (!PyArg_ParseTuple(arg, "O&:frombuf", convbin, &in)) goto end; \
+ buf_init(&b, (/*unconst*/ void *)in.p, in.sz); \
if ((x = buf_getmp(&b)) == 0) VALERR("malformed data"); \
rc = Py_BuildValue("(NN)", ty##_pywrap(x), \
bytestring_pywrapbuf(&b)); \
#define LOADOP(pre, name) \
static PyObject *pre##meth_##name(PyObject *me, PyObject *arg) \
{ \
- char *p; \
- Py_ssize_t len; \
- if (!PyArg_ParseTuple(arg, "s#:" #name, &p, &len)) return (0); \
- return (pre##_pywrap(mp_##name(MP_NEW, p, len))); \
+ struct bin in; \
+ if (!PyArg_ParseTuple(arg, "O&:" #name, convbin, &in)) return (0); \
+ return (pre##_pywrap(mp_##name(MP_NEW, in.p, in.sz))); \
}
LOADOP(mp, loadl)
LOADOP(mp, loadb)
};
static const PyTypeObject mp_pytype_skel = {
- PyObject_HEAD_INIT(0) 0, /* Header */
+ PyVarObject_HEAD_INIT(0, 0) /* Header */
"MP", /* @tp_name@ */
sizeof(mp_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
};
static const PyTypeObject mpmul_pytype_skel = {
- PyObject_HEAD_INIT(0) 0, /* Header */
+ PyVarObject_HEAD_INIT(0, 0) /* Header */
"MPMul", /* @tp_name@ */
sizeof(mpmul_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
};
static const PyTypeObject mpmont_pytype_skel = {
- PyObject_HEAD_INIT(0) 0, /* Header */
+ PyVarObject_HEAD_INIT(0, 0) /* Header */
"MPMont", /* @tp_name@ */
sizeof(mpmont_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
};
static const PyTypeObject mpbarrett_pytype_skel = {
- PyObject_HEAD_INIT(0) 0, /* Header */
+ PyVarObject_HEAD_INIT(0, 0) /* Header */
"MPBarrett", /* @tp_name@ */
sizeof(mpbarrett_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
};
static const PyTypeObject mpreduce_pytype_skel = {
- PyObject_HEAD_INIT(0) 0, /* Header */
+ PyVarObject_HEAD_INIT(0, 0) /* Header */
"MPReduce", /* @tp_name@ */
sizeof(mpreduce_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
};
static const PyTypeObject mpcrt_pytype_skel = {
- PyObject_HEAD_INIT(0) 0, /* Header */
+ PyVarObject_HEAD_INIT(0, 0) /* Header */
"MPCRT", /* @tp_name@ */
sizeof(mpcrt_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
if (!good_radix_p(radix, 1)) VALERR("radix out of range");
if ((z = mp_frompyobject(x, radix)) == 0) {
PyErr_Format(PyExc_TypeError, "can't convert %.100s to gf",
- x->ob_type->tp_name);
+ Py_TYPE(x)->tp_name);
goto end;
}
if (MP_NEGP(z)) {
};
static const PyTypeObject gf_pytype_skel = {
- PyObject_HEAD_INIT(0) 0, /* Header */
+ PyVarObject_HEAD_INIT(0, 0) /* Header */
"GF", /* @tp_name@ */
sizeof(mp_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
};
static const PyTypeObject gfreduce_pytype_skel = {
- PyObject_HEAD_INIT(0) 0, /* Header */
+ PyVarObject_HEAD_INIT(0, 0) /* Header */
"GFReduce", /* @tp_name@ */
sizeof(gfreduce_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
};
static const PyTypeObject gfn_pytype_skel = {
- PyObject_HEAD_INIT(0) 0, /* Header */
+ PyVarObject_HEAD_INIT(0, 0) /* Header */
"GFN", /* @tp_name@ */
sizeof(gfn_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
/*----- Glue --------------------------------------------------------------*/
+static const struct nameval consts[] = {
+ CONST(MPW_MAX),
+ { 0 }
+};
+
void mp_pyinit(void)
{
INITTYPE(mp, root);
INSERT("GF", gf_pytype);
INSERT("GFReduce", gfreduce_pytype);
INSERT("GFN", gfn_pytype);
+ setconstants(mod, consts);
}
/*----- That's all, folks -------------------------------------------------*/