From 7bc403cda1afe5cc72ce79897d68071568896b42 Mon Sep 17 00:00:00 2001 From: Mark Wooding Date: Tue, 19 Nov 2019 00:19:38 +0000 Subject: [PATCH] *.c: Use Python's facilities for defining class and static methods. These weren't available when this library was first written, but the workaround is rather ugly and no longer necessary. --- pyke.h | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/pyke.h b/pyke.h index e200c09..66438a4 100644 --- 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) \ -- 2.11.0