chiark / gitweb /
Use ValueError instead of SyntaxError throughout.
[catacomb-python] / mp.c
diff --git a/mp.c b/mp.c
index 038324a8e1f1cc2a97d29a28b4035925004efd34..2434eaf75f1147e54cfb25be55ac5a05066075d7 100644 (file)
--- a/mp.c
+++ b/mp.c
@@ -848,7 +848,7 @@ static PyNumberMethods mp_pynumber = {
 
 static PyTypeObject mp_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
-  "catacomb.MP",                       /* @tp_name@ */
+  "MP",                                        /* @tp_name@ */
   sizeof(mp_pyobj),                    /* @tp_basicsize@ */
   0,                                   /* @tp_itemsize@ */
 
@@ -921,7 +921,7 @@ static PyObject *meth__MP_fromstring(PyObject *me,
   if (!good_radix_p(r, 1)) VALERR("bad radix");
   sc.buf = p; sc.lim = p + len;
   if ((zz = mp_read(MP_NEW, r, &mptext_stringops, &sc)) == 0)
-    SYNERR("bad integer");
+    VALERR("bad integer");
   z = Py_BuildValue("(Ns#)", mp_pywrap(zz), sc.buf, (int)(sc.lim - sc.buf));
 end:
   return (z);
@@ -937,6 +937,15 @@ static PyObject *meth__MP_factorial(PyObject *me, PyObject *arg)
   return mp_pywrap(x);
 }
 
+static PyObject *meth__MP_fibonacci(PyObject *me, PyObject *arg)
+{
+  long i;
+  mp *x;
+  if (!PyArg_ParseTuple(arg, "Ol:fibonacci", &me, &i)) return (0);
+  x = mp_fibonacci(i);
+  return mp_pywrap(x);
+}
+
 #define LOADOP(pre, py, name)                                          \
   static PyObject *meth__##py##_##name(PyObject *me, PyObject *arg)    \
   {                                                                    \
@@ -1051,7 +1060,7 @@ static PyMethodDef mpmul_pymethods[] = {
 
 static PyTypeObject *mpmul_pytype, mpmul_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
-  "catacomb.MPMul",                    /* @tp_name@ */
+  "MPMul",                             /* @tp_name@ */
   sizeof(mpmul_pyobj),                 /* @tp_basicsize@ */
   0,                                   /* @tp_itemsize@ */
 
@@ -1318,7 +1327,7 @@ B.mexp([(X0, N0), (X1, N1), ...]) = X0^N0 X1^N1 mod B.m\n\
 
 static PyTypeObject *mpmont_pytype, mpmont_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
-  "catacomb.MPMont",                   /* @tp_name@ */
+  "MPMont",                            /* @tp_name@ */
   sizeof(mpmont_pyobj),                        /* @tp_basicsize@ */
   0,                                   /* @tp_itemsize@ */
 
@@ -1457,7 +1466,7 @@ B.mexp([(X0, N0), (X1, N1), ...]) = X0^N0 X1^N1 mod B.m\n\
 
 static PyTypeObject *mpbarrett_pytype, mpbarrett_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
-  "catacomb.MPBarrett",                        /* @tp_name@ */
+  "MPBarrett",                         /* @tp_name@ */
   sizeof(mpbarrett_pyobj),             /* @tp_basicsize@ */
   0,                                   /* @tp_itemsize@ */
 
@@ -1585,7 +1594,7 @@ static PyMethodDef mpreduce_pymethods[] = {
 
 static PyTypeObject *mpreduce_pytype, mpreduce_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
-  "catacomb.MPReduce",                 /* @tp_name@ */
+  "MPReduce",                          /* @tp_name@ */
   sizeof(mpreduce_pyobj),              /* @tp_basicsize@ */
   0,                                   /* @tp_itemsize@ */
 
@@ -1754,7 +1763,7 @@ static PyMethodDef mpcrt_pymethods[] = {
 
 static PyTypeObject *mpcrt_pytype, mpcrt_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
-  "catacomb.MPCRT",                    /* @tp_name@ */
+  "MPCRT",                             /* @tp_name@ */
   sizeof(mpcrt_pyobj),                 /* @tp_basicsize@ */
   0,                                   /* @tp_itemsize@ */
 
@@ -2036,7 +2045,7 @@ static PyNumberMethods gf_pynumber = {
 
 static PyTypeObject gf_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
-  "catacomb.GF",                       /* @tp_name@ */
+  "GF",                                        /* @tp_name@ */
   sizeof(mp_pyobj),                    /* @tp_basicsize@ */
   0,                                   /* @tp_itemsize@ */
 
@@ -2114,7 +2123,7 @@ static PyObject *meth__GF_fromstring(PyObject *me,
   if ((zz = mp_read(MP_NEW, r, &mptext_stringops, &sc)) == 0 ||
       MP_NEGP(zz)) {
     if (zz) MP_DROP(zz);
-    SYNERR("bad binary polynomial");
+    VALERR("bad binary polynomial");
   }
   z = Py_BuildValue("(Ns#)", gf_pywrap(zz), sc.buf, (int)(sc.lim - sc.buf));
 end:
@@ -2259,7 +2268,7 @@ static PyMethodDef gfreduce_pymethods[] = {
 
 static PyTypeObject *gfreduce_pytype, gfreduce_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
-  "catacomb.GFReduce",                 /* @tp_name@ */
+  "GFReduce",                          /* @tp_name@ */
   sizeof(gfreduce_pyobj),              /* @tp_basicsize@ */
   0,                                   /* @tp_itemsize@ */
 
@@ -2393,7 +2402,7 @@ static PyMethodDef gfn_pymethods[] = {
 
 static PyTypeObject gfn_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
-  "catacomb.GFN",                      /* @tp_name@ */
+  "GFN",                               /* @tp_name@ */
   sizeof(gfn_pyobj),                   /* @tp_basicsize@ */
   0,                                   /* @tp_itemsize@ */
 
@@ -2458,6 +2467,8 @@ read a prefix from STR to decide radix: allow `0' for octal, `0x' for hex\n\
 or `R_' for other radix R.")
   METH (_MP_factorial,         "\
 factorial(I) -> I!: compute factorial")
+  METH (_MP_fibonacci,         "\
+fibonacci(I) -> F(I): compute Fibonacci number")
   METH (_MP_loadl,             "\
 loadl(STR) -> X: read little-endian bytes")
   METH (_MP_loadb,             "\