pyke/mapping.c: Introduce macro for unconstifying common keyword list.
[pyke] / mapping.c
index 615c5ed..363a2f0 100644 (file)
--- a/mapping.c
+++ b/mapping.c
@@ -54,7 +54,7 @@ static PyObject *itemiter_pynext(PyObject *me)
   return (rc);
 }
 
-static PyTypeObject itemiter_pytype_skel = {
+static const PyTypeObject itemiter_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "ItemIter",                          /* @tp_name@ */
   sizeof(iter_pyobj),                  /* @tp_basicsize@ */
@@ -112,7 +112,7 @@ static PyObject *valiter_pynext(PyObject *me)
   return (rc);
 }
 
-static PyTypeObject valiter_pytype_skel = {
+static const PyTypeObject valiter_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "ValueIter",                         /* @tp_name@ */
   sizeof(iter_pyobj),                  /* @tp_basicsize@ */
@@ -196,13 +196,12 @@ PyObject *gmapmeth_has_key(PyObject *me, PyObject *arg)
   return (getbool(PyMapping_HasKey(me, k)));
 }
 
-PyObject *gmapmeth_keys(PyObject *me, PyObject *arg)
+PyObject *gmapmeth_keys(PyObject *me)
 {
   PyObject *l = 0, *i = 0, *k, *rc = 0;
   int err;
 
-  if (!PyArg_ParseTuple(arg, ":keys") ||
-      (l = PyList_New(0)) == 0 ||
+  if ((l = PyList_New(0)) == 0 ||
       (i = PyObject_GetIter(me)) == 0)
     goto done;
   while ((k = PyIter_Next(i)) != 0)
@@ -214,13 +213,12 @@ done:
   return (rc);
 }
 
-PyObject *gmapmeth_values(PyObject *me, PyObject *arg)
+PyObject *gmapmeth_values(PyObject *me)
 {
   PyObject *l = 0, *i = 0, *k, *v, *rc = 0;
   int err = 0;
 
-  if (!PyArg_ParseTuple(arg, ":values") ||
-      (l = PyList_New(0)) == 0 ||
+  if ((l = PyList_New(0)) == 0 ||
       (i = PyObject_GetIter(me)) == 0)
     goto done;
   while ((k = PyIter_Next(i)) != 0) {
@@ -237,13 +235,12 @@ done:
   return (rc);
 }
 
-PyObject *gmapmeth_items(PyObject *me, PyObject *arg)
+PyObject *gmapmeth_items(PyObject *me)
 {
   PyObject *l = 0, *i = 0, *k, *v, *z, *rc = 0;
   int err = 0;
 
-  if (!PyArg_ParseTuple(arg, ":items") ||
-      (l = PyList_New(0)) == 0 ||
+  if ((l = PyList_New(0)) == 0 ||
       (i = PyObject_GetIter(me)) == 0)
     goto done;
   while ((k = PyIter_Next(i)) != 0) {
@@ -262,19 +259,15 @@ done:
   return (rc);
 }
 
-PyObject *gmapmeth_iterkeys(PyObject *me, PyObject *arg)
-{
-  if (!PyArg_ParseTuple(arg, ":iterkeys")) return (0);
-  return (PyObject_GetIter(me));
-}
+PyObject *gmapmeth_iterkeys(PyObject *me)
+  { return (PyObject_GetIter(me)); }
 
-PyObject *gmapmeth_itervalues(PyObject *me, PyObject *arg)
+PyObject *gmapmeth_itervalues(PyObject *me)
 {
   PyObject *i;
   iter_pyobj *ii;
 
-  if (!PyArg_ParseTuple(arg, ":itervalues") ||
-      (i = PyObject_GetIter(me)) == 0)
+  if ((i = PyObject_GetIter(me)) == 0)
     return (0);
   ii = PyObject_NEW(iter_pyobj, valiter_pytype);
   ii->map = me; Py_INCREF(me);
@@ -282,13 +275,12 @@ PyObject *gmapmeth_itervalues(PyObject *me, PyObject *arg)
   return ((PyObject *)ii);
 }
 
-PyObject *gmapmeth_iteritems(PyObject *me, PyObject *arg)
+PyObject *gmapmeth_iteritems(PyObject *me)
 {
   PyObject *i;
   iter_pyobj *ii;
 
-  if (!PyArg_ParseTuple(arg, ":iteritems") ||
-      (i = PyObject_GetIter(me)) == 0)
+  if ((i = PyObject_GetIter(me)) == 0)
     return (0);
   ii = PyObject_NEW(iter_pyobj, itemiter_pytype);
   ii->map = me; Py_INCREF(me);
@@ -296,12 +288,11 @@ PyObject *gmapmeth_iteritems(PyObject *me, PyObject *arg)
   return ((PyObject *)ii);
 }
 
-PyObject *gmapmeth_clear(PyObject *me, PyObject *arg)
+PyObject *gmapmeth_clear(PyObject *me)
 {
   PyObject *i = 0, *k = 0, *rc = 0;
 
-  if (!PyArg_ParseTuple(arg, ":clear") ||
-      (i = PyObject_GetIter(me)) == 0)
+  if ((i = PyObject_GetIter(me)) == 0)
     goto end;
   while ((k = PyIter_Next(i)) != 0) {
     PyObject_DelItem(me, k);
@@ -315,14 +306,13 @@ end:
 }
 
 static const char *const def_kwlist[] = { "key", "default", 0 };
+#define DEF_KWLIST ((/*unconst*/ char **)def_kwlist)
 
 PyObject *gmapmeth_get(PyObject *me, PyObject *arg, PyObject *kw)
 {
   PyObject *k, *def = Py_None, *v;
 
-  if (!PyArg_ParseTupleAndKeywords(arg, kw, "O|O:get",
-                                  (/*unconst*/ char **)def_kwlist,
-                                  &k, &def))
+  if (!PyArg_ParseTupleAndKeywords(arg, kw, "O|O:get", DEF_KWLIST, &k, &def))
     return (0);
   if ((v = PyObject_GetItem(me, k)) != 0) return (v);
   PyErr_Clear();
@@ -333,8 +323,7 @@ PyObject *gmapmeth_setdefault(PyObject *me, PyObject *arg, PyObject *kw)
 {
   PyObject *k, *def = Py_None, *v;
 
-  if (!PyArg_ParseTupleAndKeywords(arg, kw, "O|O:setdefault",
-                                  (/*unconst*/ char **)def_kwlist,
+  if (!PyArg_ParseTupleAndKeywords(arg, kw, "O|O:setdefault", DEF_KWLIST,
                                   &k, &def))
     return (0);
   if ((v = PyObject_GetItem(me, k)) != 0) return (v);
@@ -347,9 +336,7 @@ PyObject *gmapmeth_pop(PyObject *me, PyObject *arg, PyObject *kw)
 {
   PyObject *k, *def = 0, *v;
 
-  if (!PyArg_ParseTupleAndKeywords(arg, kw, "O|O:pop",
-                                  (/*unconst*/ char **)def_kwlist,
-                                  &k, &def))
+  if (!PyArg_ParseTupleAndKeywords(arg, kw, "O|O:pop", DEF_KWLIST, &k, &def))
     return (0);
   if ((v = PyObject_GetItem(me, k)) != 0) {
     PyObject_DelItem(me, k);
@@ -383,12 +370,11 @@ end:
   return (rc);
 }
 
-PyObject *gmapmeth_popitem(PyObject *me, PyObject *arg)
+PyObject *gmapmeth_popitem(PyObject *me)
 {
   PyObject *i = 0, *k = 0, *v = 0, *rc = 0;
 
-  if (!PyArg_ParseTuple(arg, ":popitem") ||
-      (i = PyObject_GetIter(me)) == 0)
+  if ((i = PyObject_GetIter(me)) == 0)
     goto end;
   if ((k = PyIter_Next(i)) == 0) {
     if (!PyErr_Occurred()) VALERR("popitem(): mapping is empty");