1 2 /* Method object interface */ 3 4 #ifndef Py_METHODOBJECT_H 5 #define Py_METHODOBJECT_H 6 #ifdef __cplusplus 7 extern "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 14 PyAPI_DATA(PyTypeObject) PyCFunction_Type; 15 16 #define PyCFunction_Check(op) (Py_TYPE(op) == &PyCFunction_Type) 17 18 typedef PyObject *(*PyCFunction)(PyObject *, PyObject *); 19 typedef PyObject *(*PyCFunctionWithKeywords)(PyObject *, PyObject *, 20 PyObject *); 21 typedef PyObject *(*PyNoArgsFunction)(PyObject *); 22 23 PyAPI_FUNC(PyCFunction) PyCFunction_GetFunction(PyObject *); 24 PyAPI_FUNC(PyObject *) PyCFunction_GetSelf(PyObject *); 25 PyAPI_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) 35 PyAPI_FUNC(PyObject *) PyCFunction_Call(PyObject *, PyObject *, PyObject *); 36 37 struct 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 }; 44 typedef struct PyMethodDef PyMethodDef; 45 46 PyAPI_FUNC(PyObject *) Py_FindMethod(PyMethodDef[], PyObject *, const char *); 47 48 #define PyCFunction_New(ML, SELF) PyCFunction_NewEx((ML), (SELF), NULL) 49 PyAPI_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 73 typedef struct PyMethodChain { 74 PyMethodDef *methods; /* Methods of this type */ 75 struct PyMethodChain *link; /* NULL or base type */ 76 } PyMethodChain; 77 78 PyAPI_FUNC(PyObject *) Py_FindMethodInChain(PyMethodChain *, PyObject *, 79 const char *); 80 81 typedef 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 88 PyAPI_FUNC(int) PyCFunction_ClearFreeList(void); 89 90 #ifdef __cplusplus 91 } 92 #endif 93 #endif /* !Py_METHODOBJECT_H */ 94