*.py: Upgrade old-fashioned `raise' syntax.
[catacomb-python] / buffer.c
index 49ed9d2..59eaec6 100644 (file)
--- a/buffer.c
+++ b/buffer.c
@@ -52,18 +52,18 @@ static PyObject *buferr;
 
 static PyObject *rbuf_pynew(PyTypeObject *ty, PyObject *arg, PyObject *kw)
 {
-  char *p, *q;
-  Py_ssize_t n;
+  struct bin in;
+  void *q;
   buf_pyobj *me = 0;
   static const char *const kwlist[] = { "data", 0 };
 
-  if (!PyArg_ParseTupleAndKeywords(arg, kw, "s#:new", KWLIST, &p, &n))
+  if (!PyArg_ParseTupleAndKeywords(arg, kw, "O&:new", KWLIST, convbin, &in))
     goto end;
-  q = xmalloc(n);
-  memcpy(q, p, n);
+  q = xmalloc(in.sz);
+  memcpy(q, in.p, in.sz);
   me = (buf_pyobj *)ty->tp_alloc(ty, 0);
   me->sub = 0;
-  buf_init(&me->b, q, n);
+  buf_init(&me->b, q, in.sz);
 end:
   return ((PyObject *)me);
 }
@@ -107,10 +107,9 @@ end:
 }
 
 #define RBMETH_GETU_(n, W, w)                                          \
-  static PyObject *rbmeth_getu##w(PyObject *me, PyObject *arg)         \
+  static PyObject *rbmeth_getu##w(PyObject *me)                                \
   {                                                                    \
     uint##n x;                                                         \
-    if (!PyArg_ParseTuple(arg, ":getu" #w)) goto end;                  \
     if (buf_getu##w(BUF_B(me), &x)) BUFERR("buffer exhausted");                \
     if (MASK##W <= ULONG_MAX) return (getulong(x));                    \
     else { kludge64 y; ASSIGN64(y, x); return (getk64(y)); }           \
@@ -120,11 +119,10 @@ end:
 DOUINTCONV(RBMETH_GETU_)
 
 #define RBMETH_GETBLK_(n, W, w)                                                \
-  static PyObject *rbmeth_getblk##w(PyObject *me, PyObject *arg)       \
+  static PyObject *rbmeth_getblk##w(PyObject *me)                      \
   {                                                                    \
     size_t sz;                                                         \
     char *q;                                                           \
-    if (!PyArg_ParseTuple(arg, ":getblk" #w)) goto end;                        \
     if ((q = buf_getmem##w(BUF_B(me), &sz)) == 0)                      \
       BUFERR("buffer exhausted");                                      \
     return (bytestring_pywrap(q, sz));                                 \
@@ -134,11 +132,10 @@ DOUINTCONV(RBMETH_GETU_)
 BUF_DOSUFFIXES(RBMETH_GETBLK_)
 
 #define RBMETH_GETBUF_(n, W, w)                                                \
-  static PyObject *rbmeth_getbuf##w(PyObject *me, PyObject *arg)       \
+  static PyObject *rbmeth_getbuf##w(PyObject *me)                      \
   {                                                                    \
     buf_pyobj *b;                                                      \
     buf bb;                                                            \
-    if (!PyArg_ParseTuple(arg, ":getbuf" #w)) goto end;                        \
     if (buf_getbuf##w(BUF_B(me), &bb)) BUFERR("buffer exhausted");     \
     b = PyObject_NEW(buf_pyobj, rbuf_pytype);                          \
     b->b = bb;                                                         \
@@ -150,20 +147,18 @@ BUF_DOSUFFIXES(RBMETH_GETBLK_)
   }
 BUF_DOSUFFIXES(RBMETH_GETBUF_)
 
-static PyObject *rbmeth_getmp(PyObject *me, PyObject *arg)
+static PyObject *rbmeth_getmp(PyObject *me)
 {
   mp *x;
-  if (!PyArg_ParseTuple(arg, ":getmp")) goto end;
   if ((x = buf_getmp(BUF_B(me))) == 0) BUFERR("buffer exhausted");
   return (mp_pywrap(x));
 end:
   return (0);
 }
 
-static PyObject *rbmeth_getgf(PyObject *me, PyObject *arg)
+static PyObject *rbmeth_getgf(PyObject *me)
 {
   mp *x;
-  if (!PyArg_ParseTuple(arg, ":getgf")) goto end;
   if ((x = buf_getmp(BUF_B(me))) == 0) BUFERR("buffer exhausted");
   return (gf_pywrap(x));
 end:
@@ -260,16 +255,16 @@ static const PyMethodDef rbuf_pymethods[] = {
   METH (skip,          "RBUF.skip(N)")
   METH (get,           "RBUF.get(N) -> BYTES")
 #define RBMETH_DECL_GETU_(n, W, w)                                     \
-    METH(getu##w,      "RBUF.getu" #w "() -> INT")
+    NAMETH(getu##w,    "RBUF.getu" #w "() -> INT")
   DOUINTCONV(RBMETH_DECL_GETU_)
 #define RBMETH_DECL_GETBLK_(n, W, w)                                   \
-    METH(getblk##w,    "RBUF.getblk" #w "() -> BYTES")
+    NAMETH(getblk##w,  "RBUF.getblk" #w "() -> BYTES")
   BUF_DOSUFFIXES(RBMETH_DECL_GETBLK_)
 #define RBMETH_DECL_GETBUF_(n, W, w)                                   \
-    METH(getbuf##w,    "RBUF.getbuf" #w "() -> RBUF'")
+    NAMETH(getbuf##w,  "RBUF.getbuf" #w "() -> RBUF'")
   BUF_DOSUFFIXES(RBMETH_DECL_GETBUF_)
-  METH (getmp,         "RBUF.getmp() -> X")
-  METH (getgf,         "RBUF.getgf() -> X")
+  NAMETH(getmp,                "RBUF.getmp() -> X")
+  NAMETH(getgf,                "RBUF.getgf() -> X")
   KWMETH(getecpt,      "RBUF.getecpt([curve = None]) -> P")
   METH (getecptraw,    "RBUF.getecptraw(CURVE) -> P")
   METH (getge,         "RBUF.getge(GROUP) -> X")
@@ -285,8 +280,8 @@ static const PyBufferProcs rbuf_pybuffer = {
   0                                    /* @bf_getcharbuffer@ */
 };
 
-static PyTypeObject rbuf_pytype_skel = {
-  PyObject_HEAD_INIT(0) 0,             /* Header */
+static const PyTypeObject rbuf_pytype_skel = {
+  PyVarObject_HEAD_INIT(0, 0)          /* Header */
   "ReadBuffer",                                /* @tp_name@ */
   sizeof(buf_pyobj),                   /* @tp_basicsize@ */
   0,                                   /* @tp_itemsize@ */
@@ -388,11 +383,10 @@ static PyObject *wbmeth_zero(PyObject *me, PyObject *arg)
 
 static PyObject *wbmeth_put(PyObject *me, PyObject *arg)
 {
-  void *p;
-  Py_ssize_t n;
-  if (!PyArg_ParseTuple(arg, "s#:put", &p, &n)) return (0);
-  ensure(me, n);
-  buf_put(BUF_B(me), p, n); assert(BOK(BUF_B(me)));
+  struct bin in;
+  if (!PyArg_ParseTuple(arg, "O&:put", convbin, &in)) return (0);
+  ensure(me, in.sz);
+  buf_put(BUF_B(me), in.p, in.sz); assert(BOK(BUF_B(me)));
   RETURN_ME;
 }
 
@@ -412,12 +406,11 @@ DOUINTCONV(WBMETH_PUTU_)
 #define WBMETH_PUTBLK_(n, W, w)                                                \
   static PyObject *wbmeth_putblk##w(PyObject *me, PyObject *arg)       \
   {                                                                    \
-    char *p;                                                           \
-    Py_ssize_t sz;                                                     \
-    if (!PyArg_ParseTuple(arg, "s#:putblk" #w, &p, &sz)) goto end;     \
-    if (MASK##W && sz > MASK##W) VALERR("too large");                  \
-    ensure(me, sz + SZ_##n);                                           \
-    buf_putmem##w(BUF_B(me), p, sz); assert(BOK(BUF_B(me)));           \
+    struct bin in;                                                     \
+    if (!PyArg_ParseTuple(arg, "O&:putblk" #w, convbin, &in)) goto end;        \
+    if (MASK##W && in.sz > MASK##W) VALERR("too large");               \
+    ensure(me, in.sz + SZ_##n);                                                \
+    buf_putmem##w(BUF_B(me), in.p, in.sz); assert(BOK(BUF_B(me)));     \
     RETURN_ME;                                                         \
   end:                                                                 \
     return (0);                                                                \
@@ -525,8 +518,8 @@ static const PyBufferProcs wbuf_pybuffer = {
   0                                    /* @bf_getcharbuffer@ */
 };
 
-static PyTypeObject wbuf_pytype_skel = {
-  PyObject_HEAD_INIT(0) 0,             /* Header */
+static const PyTypeObject wbuf_pytype_skel = {
+  PyVarObject_HEAD_INIT(0, 0)          /* Header */
   "WriteBuffer",                       /* @tp_name@ */
   sizeof(buf_pyobj),                   /* @tp_basicsize@ */
   0,                                   /* @tp_itemsize@ */