chiark / gitweb /
pwsafe: Abolish the `chomp' function, and only chomp when reading stdin.
[catacomb-python] / field.c
diff --git a/field.c b/field.c
index bb99b77ffeb9e61325bc9f8a8d3b30529b0a9b1d..eafa42f2017d6eca147c18cdcb8f67041d0bc6e3 100644 (file)
--- a/field.c
+++ b/field.c
@@ -1,13 +1,11 @@
 /* -*-c-*-
- *
- * $Id$
  *
  * Abstract fields
  *
  * (c) 2004 Straylight/Edgeware
  */
 
-/*----- Licensing notice --------------------------------------------------* 
+/*----- Licensing notice --------------------------------------------------*
  *
  * This file is part of the Python interface to Catacomb.
  *
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
- * 
+ *
  * Catacomb/Python is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
- * 
+ *
  * You should have received a copy of the GNU General Public License
  * along with Catacomb/Python; if not, write to the Free Software Foundation,
  * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
@@ -58,17 +56,17 @@ static PyObject *field_dopywrap(PyTypeObject *ty, field *f)
 {
   field_pyobj *fobj = newtype(ty, 0, f->ops->name);
   fobj->f = f;
-  fobj->ty.type.tp_basicsize = sizeof(fe_pyobj);
-  fobj->ty.type.tp_base = fe_pytype;
+  fobj->ty.ht_type.tp_basicsize = sizeof(fe_pyobj);
+  fobj->ty.ht_type.tp_base = fe_pytype;
   Py_INCREF(fe_pytype);
-  fobj->ty.type.tp_flags = (Py_TPFLAGS_DEFAULT |
-                           Py_TPFLAGS_BASETYPE |
-                           Py_TPFLAGS_CHECKTYPES |
-                           Py_TPFLAGS_HEAPTYPE);
-  fobj->ty.type.tp_alloc = PyType_GenericAlloc;
-  fobj->ty.type.tp_free = 0;
-  fobj->ty.type.tp_new = fe_pynew;
-  PyType_Ready(&fobj->ty.type);
+  fobj->ty.ht_type.tp_flags = (Py_TPFLAGS_DEFAULT |
+                              Py_TPFLAGS_BASETYPE |
+                              Py_TPFLAGS_CHECKTYPES |
+                              Py_TPFLAGS_HEAPTYPE);
+  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);
   return ((PyObject *)fobj);
 }
 
@@ -115,16 +113,16 @@ static mp *tofe(field *f, PyObject *o)
 
   if (FE_PYCHECK(o)) {
     if (FE_F(o) != f && !field_samep(FE_F(o), f)) return (0);
-    y = FE_X(o);
-  }
-  if ((x = tomp(o)) != 0) {
+    y = MP_COPY(FE_X(o));
+  } else if ((x = tomp(o)) != 0) {
     if (MP_ZEROP(x))
-      y = f->zero;
+      y = MP_COPY(f->zero);
     else if (MP_EQ(x, MP_ONE))
-      y = f->one;
+      y = MP_COPY(f->one);
+    else
+      y = F_IN(f, MP_NEW, x);
+    MP_DROP(x);
   }
-  if (x) MP_DROP(x);
-  if (y) MP_COPY(y);
   return (y);
 }
 
@@ -610,7 +608,7 @@ static PyObject *pfget_p(PyObject *me, void *hunoz)
 
 static PyGetSetDef primefield_pygetset[] = {
 #define GETSETNAME(op, name) pf##op##_##name
-  GET  (p,             "F.p -> prime field characteristic")
+  GET  (p,             "F.p -> prime field characteristic")
 #undef GETSETNAME
 };
 
@@ -736,7 +734,7 @@ static PyObject *bfget_m(PyObject *me, void *hunoz)
 
 static PyGetSetDef binfield_pygetset[] = {
 #define GETSETNAME(op, name) bf##op##_##name
-  GET  (m,             "F.m -> field polynomial degree")
+  GET  (m,             "F.m -> field polynomial degree")
 #undef GETSETNAME
   { 0 }
 };
@@ -809,7 +807,7 @@ end:
 
 static PyGetSetDef binpolyfield_pygetset[] = {
 #define GETSETNAME(op, name) pf##op##_##name
-  GET  (p,             "F.p -> field polynomial")
+  GET  (p,             "F.p -> field polynomial")
 #undef GETSETNAME
   { 0 }
 };
@@ -888,10 +886,10 @@ static PyObject *bnfget_beta(PyObject *me, void *hunoz)
 
 static PyGetSetDef binnormfield_pygetset[] = {
 #define GETSETNAME(op, name) pf##op##_##name
-  GET  (p,             "F.p -> field polynomial")
+  GET  (p,             "F.p -> field polynomial")
 #undef GETSETNAME
 #define GETSETNAME(op, name) bnf##op##_##name
-  GET  (beta,          "F.beta -> conversion factor")
+  GET  (beta,          "F.beta -> conversion factor")
 #undef GETSETNAME
   { 0 }
 };
@@ -966,7 +964,7 @@ end:
 
 static PyMethodDef methods[] = {
 #define METHNAME(func) meth_##func
-  METH (_Field_parse,          "parse(STR) -> F, REST")
+  METH (_Field_parse,          "parse(STR) -> F, REST")
 #undef METHNAME
   { 0 }
 };