*.c: Use Python's facilities for defining class and static methods.
authorMark Wooding <mdw@distorted.org.uk>
Tue, 19 Nov 2019 00:19:38 +0000 (00:19 +0000)
committerMark Wooding <mdw@distorted.org.uk>
Sat, 11 Apr 2020 11:44:14 +0000 (12:44 +0100)
These weren't available when this library was first written, but the
workaround is rather ugly and no longer necessary.

pyke.h

diff --git a/pyke.h b/pyke.h
index e200c09..66438a4 100644 (file)
--- a/pyke.h
+++ b/pyke.h
@@ -229,12 +229,12 @@ extern PyTypeObject *inittype(PyTypeObject */*skel*/,
 /* Macros for filling in `PyMethodDef' tables, ensuring that functions have
  * the expected signatures.
  */
-#define STD_METHOD(decor, func, doc)                                   \
-  { #func, decor(func), METH_VARARGS, doc },
-#define KEYWORD_METHOD(decor, func, doc)                               \
+#define STD_METHOD(decor, func, flags, doc)                            \
+  { #func, decor(func), METH_VARARGS | flags, doc },
+#define KEYWORD_METHOD(decor, func, flags, doc)                                \
   { #func,                                                             \
     CONVERT_CAREFULLY(PyCFunction, PyCFunctionWithKeywords, decor(func)), \
-    METH_VARARGS | METH_KEYWORDS,                                      \
+    METH_VARARGS | METH_KEYWORDS | flags,                              \
     doc },
 
 /* Convenience wrappers for filling in `PyMethodDef' tables, following
@@ -244,8 +244,12 @@ extern PyTypeObject *inittype(PyTypeObject */*skel*/,
  *
  * around the method table.
  */
-#define METH(func, doc) STD_METHOD(METHNAME, func, doc)
-#define KWMETH(func, doc) KEYWORD_METHOD(METHNAME, func, doc)
+#define METH(func, doc) STD_METHOD(METHNAME, func, 0, doc)
+#define KWMETH(func, doc) KEYWORD_METHOD(METHNAME, func, 0, doc)
+#define CMTH(func, doc) STD_METHOD(METHNAME, func, METH_CLASS, doc)
+#define KWCMTH(func, doc) KEYWORD_METHOD(METHNAME, func, METH_CLASS, doc)
+#define SMTH(func, doc) STD_METHOD(METHNAME, func, METH_STATIC, doc)
+#define KWSMTH(func, doc) KEYWORD_METHOD(METHNAME, func, METH_STATIC, doc)
 
 /* Convenience wrappers for filling in `PyGetSetDef' tables, following Pyke
  * naming convention.  Define `GETSETNAME' locally as
@@ -359,8 +363,8 @@ extern PyMethodDef *donemethods(void);
 
 /* Mapping methods. */
 #define GMAP_METMNAME(func) gmapmeth_##func
-#define GMAP_METH(func, doc) STD_METHOD(GMAP_METMNAME, func, doc)
-#define GMAP_KWMETH(func, doc) KEYWORD_METHOD(GMAP_METMNAME, func, doc)
+#define GMAP_METH(func, doc) STD_METHOD(GMAP_METMNAME, func, 0, doc)
+#define GMAP_KWMETH(func, doc) KEYWORD_METHOD(GMAP_METMNAME, func, 0, doc)
 #define GMAP_METHDECL(func, doc)                                       \
   extern PyObject *gmapmeth_##func(PyObject *, PyObject *);
 #define GMAP_KWMETHDECL(func, doc)                                     \