1 2/* Method object interface */ 3 4#ifndef Py_METHODOBJECT_H 5#define Py_METHODOBJECT_H 6#ifdef __cplusplus 7extern "C" { 8#endif 9 10/* This is about the type 'builtin_function_or_method', 11 not Python methods in user-defined classes. See classobject.h 12 for the latter. */ 13 14PyAPI_DATA(PyTypeObject) PyCFunction_Type; 15 16#define PyCFunction_Check(op) (Py_TYPE(op) == &PyCFunction_Type) 17 18typedef PyObject *(*PyCFunction)(PyObject *, PyObject *); 19typedef PyObject *(*PyCFunctionWithKeywords)(PyObject *, PyObject *, 20 PyObject *); 21typedef PyObject *(*PyNoArgsFunction)(PyObject *); 22 23PyAPI_FUNC(PyCFunction) PyCFunction_GetFunction(PyObject *); 24PyAPI_FUNC(PyObject *) PyCFunction_GetSelf(PyObject *); 25PyAPI_FUNC(int) PyCFunction_GetFlags(PyObject *); 26 27/* Macros for direct access to these values. Type checks are *not* 28 done, so use with care. */ 29#define PyCFunction_GET_FUNCTION(func) \ 30 (((PyCFunctionObject *)func) -> m_ml -> ml_meth) 31#define PyCFunction_GET_SELF(func) \ 32 (((PyCFunctionObject *)func) -> m_self) 33#define PyCFunction_GET_FLAGS(func) \ 34 (((PyCFunctionObject *)func) -> m_ml -> ml_flags) 35PyAPI_FUNC(PyObject *) PyCFunction_Call(PyObject *, PyObject *, PyObject *); 36 37struct PyMethodDef { 38 const char *ml_name; /* The name of the built-in function/method */ 39 PyCFunction ml_meth; /* The C function that implements it */ 40 int ml_flags; /* Combination of METH_xxx flags, which mostly 41 describe the args expected by the C func */ 42 const char *ml_doc; /* The __doc__ attribute, or NULL */ 43}; 44typedef struct PyMethodDef PyMethodDef; 45 46PyAPI_FUNC(PyObject *) Py_FindMethod(PyMethodDef[], PyObject *, const char *); 47 48#define PyCFunction_New(ML, SELF) PyCFunction_NewEx((ML), (SELF), NULL) 49PyAPI_FUNC(PyObject *) PyCFunction_NewEx(PyMethodDef *, PyObject *, 50 PyObject *); 51 52/* Flag passed to newmethodobject */ 53#define METH_OLDARGS 0x0000 54#define METH_VARARGS 0x0001 55#define METH_KEYWORDS 0x0002 56/* METH_NOARGS and METH_O must not be combined with the flags above. */ 57#define METH_NOARGS 0x0004 58#define METH_O 0x0008 59 60/* METH_CLASS and METH_STATIC are a little different; these control 61 the construction of methods for a class. These cannot be used for 62 functions in modules. */ 63#define METH_CLASS 0x0010 64#define METH_STATIC 0x0020 65 66/* METH_COEXIST allows a method to be entered eventhough a slot has 67 already filled the entry. When defined, the flag allows a separate 68 method, "__contains__" for example, to coexist with a defined 69 slot like sq_contains. */ 70 71#define METH_COEXIST 0x0040 72 73typedef struct PyMethodChain { 74 PyMethodDef *methods; /* Methods of this type */ 75 struct PyMethodChain *link; /* NULL or base type */ 76} PyMethodChain; 77 78PyAPI_FUNC(PyObject *) Py_FindMethodInChain(PyMethodChain *, PyObject *, 79 const char *); 80 81typedef struct { 82 PyObject_HEAD 83 PyMethodDef *m_ml; /* Description of the C function to call */ 84 PyObject *m_self; /* Passed as 'self' arg to the C func, can be NULL */ 85 PyObject *m_module; /* The __module__ attribute, can be anything */ 86} PyCFunctionObject; 87 88PyAPI_FUNC(int) PyCFunction_ClearFreeList(void); 89 90#ifdef __cplusplus 91} 92#endif 93#endif /* !Py_METHODOBJECT_H */ 94