chiark / gitweb /
pock: Use floor division on integers.
[catacomb-python] / field.c
diff --git a/field.c b/field.c
index 987b47d8d074a5e2269dc60be1e91c26b63740c4..fa424df422235551726bfa22d58e6535fbf290b9 100644 (file)
--- a/field.c
+++ b/field.c
@@ -218,7 +218,7 @@ end:
   return (rc);
 }
 
-static long fe_pyhash(PyObject *me)
+static Py_hash_t fe_pyhash(PyObject *me)
   { return (mphash(FE_X(me))); }
 
 static int fe_pycoerce(PyObject **x, PyObject **y)
@@ -301,9 +301,6 @@ UNOP(qdl, ; )
 UNOP(hlv, ; )
 #undef UNOP
 
-static PyObject *feget_field(PyObject *me, void *hunoz)
-  { RETURN_OBJ(FE_FOBJ(me)); }
-
 static PyObject *feget_value(PyObject *me, void *hunoz)
 {
   mp *x = F_OUT(FE_F(me), MP_NEW, FE_X(me));
@@ -323,9 +320,16 @@ static PyObject *feget__value(PyObject *me, void *hunoz)
     return (mp_pywrap(x));
 }
 
+static const PyMemberDef fe_pymembers[] = {
+#define MEMBERSTRUCT fe_pyobj
+  MEMRNM(field, T_OBJECT, ob_type, READONLY,
+                       "X.field -> field containing X")
+#undef MEMBERSTRUCT
+  { 0 }
+};
+
 static const PyGetSetDef fe_pygetset[] = {
 #define GETSETNAME(op, name) fe##op##_##name
-  GET  (field,         "X.field -> field containing X")
   GET  (value,         "X.value -> `natural' MP/GF representation of X")
   GET  (_value,        "X._value -> internal MP/GF representation of X")
 #undef GETSETNAME
@@ -389,8 +393,8 @@ static const PyNumberMethods fe_pynumber = {
   0,                                   /* @nb_inplace_true_divide@ */
 };
 
-static PyTypeObject fe_pytype_skel = {
-  PyObject_HEAD_INIT(0) 0,             /* Header */
+static const PyTypeObject fe_pytype_skel = {
+  PyVarObject_HEAD_INIT(0, 0)          /* Header */
   "FE",                                        /* @tp_name@ */
   sizeof(fe_pyobj),                    /* @tp_basicsize@ */
   0,                                   /* @tp_itemsize@ */
@@ -424,7 +428,7 @@ static PyTypeObject fe_pytype_skel = {
   0,                                   /* @tp_iter@ */
   0,                                   /* @tp_iternext@ */
   PYMETHODS(fe),                       /* @tp_methods@ */
-  0,                                   /* @tp_members@ */
+  PYMEMBERS(fe),                       /* @tp_members@ */
   PYGETSET(fe),                                /* @tp_getset@ */
   0,                                   /* @tp_base@ */
   0,                                   /* @tp_dict@ */
@@ -508,7 +512,7 @@ static PyObject *fget_noctets(PyObject *me, void *hunoz)
   { return (PyInt_FromLong(FIELD_F(me)->noctets)); }
 
 static PyObject *fget_name(PyObject *me, void *hunoz)
-  { return (PyString_FromString(F_NAME(FIELD_F(me)))); }
+  { return (TEXT_FROMSTR(F_NAME(FIELD_F(me)))); }
 
 static PyObject *fget_type(PyObject *me, void *hunoz)
   { return (PyInt_FromLong(F_TYPE(FIELD_F(me)))); }
@@ -535,8 +539,8 @@ static const PyMethodDef field_pymethods[] = {
   { 0 }
 };
 
-static PyTypeObject field_pytype_skel = {
-  PyObject_HEAD_INIT(0) 0,             /* Header */
+static const PyTypeObject field_pytype_skel = {
+  PyVarObject_HEAD_INIT(0, 0)          /* Header */
   "Field",                             /* @tp_name@ */
   sizeof(field_pyobj),                 /* @tp_basicsize@ */
   0,                                   /* @tp_itemsize@ */
@@ -613,8 +617,8 @@ static const PyGetSetDef primefield_pygetset[] = {
 #undef GETSETNAME
 };
 
-static PyTypeObject primefield_pytype_skel = {
-  PyObject_HEAD_INIT(0) 0,             /* Header */
+static const PyTypeObject primefield_pytype_skel = {
+  PyVarObject_HEAD_INIT(0, 0)          /* Header */
   "PrimeField",                                /* @tp_name@ */
   sizeof(field_pyobj),                 /* @tp_basicsize@ */
   0,                                   /* @tp_itemsize@ */
@@ -680,8 +684,8 @@ end:
   return (0);
 }
 
-static PyTypeObject niceprimefield_pytype_skel = {
-  PyObject_HEAD_INIT(0) 0,             /* Header */
+static const PyTypeObject niceprimefield_pytype_skel = {
+  PyVarObject_HEAD_INIT(0, 0)          /* Header */
   "NicePrimeField",                    /* @tp_name@ */
   sizeof(field_pyobj),                 /* @tp_basicsize@ */
   0,                                   /* @tp_itemsize@ */
@@ -744,8 +748,8 @@ static const PyGetSetDef binfield_pygetset[] = {
   { 0 }
 };
 
-static PyTypeObject binfield_pytype_skel = {
-  PyObject_HEAD_INIT(0) 0,             /* Header */
+static const PyTypeObject binfield_pytype_skel = {
+  PyVarObject_HEAD_INIT(0, 0)          /* Header */
   "BinField",                          /* @tp_name@ */
   sizeof(field_pyobj),                 /* @tp_basicsize@ */
   0,                                   /* @tp_itemsize@ */
@@ -810,8 +814,8 @@ end:
   return (0);
 }
 
-static PyTypeObject binpolyfield_pytype_skel = {
-  PyObject_HEAD_INIT(0) 0,             /* Header */
+static const PyTypeObject binpolyfield_pytype_skel = {
+  PyVarObject_HEAD_INIT(0, 0)          /* Header */
   "BinPolyField",                      /* @tp_name@ */
   sizeof(field_pyobj),                 /* @tp_basicsize@ */
   0,                                   /* @tp_itemsize@ */
@@ -889,8 +893,8 @@ static const PyGetSetDef binnormfield_pygetset[] = {
   { 0 }
 };
 
-static PyTypeObject binnormfield_pytype_skel = {
-  PyObject_HEAD_INIT(0) 0,             /* Header */
+static const PyTypeObject binnormfield_pytype_skel = {
+  PyVarObject_HEAD_INIT(0, 0)          /* Header */
   "BinNormField",                      /* @tp_name@ */
   sizeof(field_pyobj),                 /* @tp_basicsize@ */
   0,                                   /* @tp_itemsize@ */
@@ -939,6 +943,11 @@ static PyTypeObject binnormfield_pytype_skel = {
 
 /*----- Setup -------------------------------------------------------------*/
 
+static const struct nameval consts[] = {
+  CONST(FTY_PRIME), CONST(FTY_BINARY),
+  { 0 }
+};
+
 void field_pyinit(void)
 {
   INITTYPE(fe, root);
@@ -959,6 +968,7 @@ void field_pyinsert(PyObject *mod)
   INSERT("BinField", binfield_pytype);
   INSERT("BinPolyField", binpolyfield_pytype);
   INSERT("BinNormField", binnormfield_pytype);
+  setconstants(mod, consts);
 }
 
 /*----- That's all, folks -------------------------------------------------*/