X-Git-Url: https://git.distorted.org.uk/~mdw/catacomb-python/blobdiff_plain/b2687a0a4b3c5e45cad7c5815a6d3805bfc8d4f1..deed09b295097b46d76cfe1c120a9cfeea5f5986:/field.c diff --git a/field.c b/field.c index af7a561..1f316f3 100644 --- a/field.c +++ b/field.c @@ -1,7 +1,5 @@ /* -*-c-*- * - * $Id$ - * * Abstract fields * * (c) 2004 Straylight/Edgeware @@ -68,7 +66,7 @@ static PyObject *field_dopywrap(PyTypeObject *ty, field *f) fobj->ty.ht_type.tp_alloc = PyType_GenericAlloc; fobj->ty.ht_type.tp_free = 0; fobj->ty.ht_type.tp_new = fe_pynew; - PyType_Ready(&fobj->ty.ht_type); + typeready(&fobj->ty.ht_type); return ((PyObject *)fobj); } @@ -231,13 +229,7 @@ end: } static long fe_pyhash(PyObject *me) -{ - long i = mp_tolong(FE_X(me)); - i ^= 0xdcf62d6c; /* random perturbance */ - if (i == -1) - i = -2; - return (i); -} + { return (mphash(FE_X(me))); } static int fe_pycoerce(PyObject **x, PyObject **y) { @@ -263,10 +255,12 @@ end: static PyObject *fe_pyint(PyObject *x) { long l; + PyObject *rc; mp *xx = F_OUT(FE_F(x), MP_NEW, FE_X(x)); - if (mp_tolong_checked(xx, &l)) { MP_DROP(xx); return (0); } + if (!mp_tolong_checked(xx, &l, 0)) rc = PyInt_FromLong(l); + else rc = mp_topylong(xx); MP_DROP(xx); - return (PyInt_FromLong(l)); + return (rc); } static PyObject *fe_pylong(PyObject *x) @@ -343,8 +337,8 @@ static PyObject *feget__value(PyObject *me, void *hunoz) static PyGetSetDef fe_pygetset[] = { #define GETSETNAME(op, name) fe##op##_##name GET (field, "X.field -> field containing X") - GET (value, "X.value -> `natural' integer representation of X") - GET (_value, "X._value -> internal integer representation of X") + GET (value, "X.value -> `natural' MP/GF representation of X") + GET (_value, "X._value -> internal MP/GF representation of X") #undef GETSETNAME { 0 } }; @@ -408,7 +402,7 @@ static PyNumberMethods fe_pynumber = { static PyTypeObject fe_pytype_skel = { PyObject_HEAD_INIT(0) 0, /* Header */ - "catacomb.FE", /* @tp_name@ */ + "FE", /* @tp_name@ */ sizeof(fe_pyobj), /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */ @@ -538,7 +532,7 @@ static PyMethodDef field_pymethods[] = { static PyTypeObject field_pytype_skel = { PyObject_HEAD_INIT(0) 0, /* Header */ - "catacomb.Field", /* @tp_name@ */ + "Field", /* @tp_name@ */ sizeof(field_pyobj), /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */ @@ -616,7 +610,7 @@ static PyGetSetDef primefield_pygetset[] = { static PyTypeObject primefield_pytype_skel = { PyObject_HEAD_INIT(0) 0, /* Header */ - "catacomb.PrimeField", /* @tp_name@ */ + "PrimeField", /* @tp_name@ */ sizeof(field_pyobj), /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */ @@ -683,7 +677,7 @@ end: static PyTypeObject niceprimefield_pytype_skel = { PyObject_HEAD_INIT(0) 0, /* Header */ - "catacomb.NicePrimeField", /* @tp_name@ */ + "NicePrimeField", /* @tp_name@ */ sizeof(field_pyobj), /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */ @@ -743,7 +737,7 @@ static PyGetSetDef binfield_pygetset[] = { static PyTypeObject binfield_pytype_skel = { PyObject_HEAD_INIT(0) 0, /* Header */ - "catacomb.BinField", /* @tp_name@ */ + "BinField", /* @tp_name@ */ sizeof(field_pyobj), /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */ @@ -816,7 +810,7 @@ static PyGetSetDef binpolyfield_pygetset[] = { static PyTypeObject binpolyfield_pytype_skel = { PyObject_HEAD_INIT(0) 0, /* Header */ - "catacomb.BinPolyField", /* @tp_name@ */ + "BinPolyField", /* @tp_name@ */ sizeof(field_pyobj), /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */ @@ -898,7 +892,7 @@ static PyGetSetDef binnormfield_pygetset[] = { static PyTypeObject binnormfield_pytype_skel = { PyObject_HEAD_INIT(0) 0, /* Header */ - "catacomb.BinNormField", /* @tp_name@ */ + "BinNormField", /* @tp_name@ */ sizeof(field_pyobj), /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */ @@ -958,7 +952,7 @@ static PyObject *meth__Field_parse(PyObject *me, PyObject *arg) qd.p = p; qd.e = 0; if ((f = field_parse(&qd)) == 0) - SYNERR(qd.e); + VALERR(qd.e); rc = Py_BuildValue("(Ns)", field_pywrap(f), qd.p); end: return (rc);