methodobject.h revision 8f5cdaa784f555149adf5e94fd2e989f99d6b1db
1f70e43a073b36c6f6e9894c01025243a77a452d4Guido van Rossum 285a5fbbdfea617f6cc8fae82c9e8c2b5c424436dGuido van Rossum/* Method object interface */ 385a5fbbdfea617f6cc8fae82c9e8c2b5c424436dGuido van Rossum 4ea9cb5aebf38741871ad4f28971dcd23ddd77ad2Fred Drake#ifndef Py_METHODOBJECT_H 5ea9cb5aebf38741871ad4f28971dcd23ddd77ad2Fred Drake#define Py_METHODOBJECT_H 6ea9cb5aebf38741871ad4f28971dcd23ddd77ad2Fred Drake#ifdef __cplusplus 7ea9cb5aebf38741871ad4f28971dcd23ddd77ad2Fred Drakeextern "C" { 8ea9cb5aebf38741871ad4f28971dcd23ddd77ad2Fred Drake#endif 9ea9cb5aebf38741871ad4f28971dcd23ddd77ad2Fred Drake 1091a681debf9ffec155d0aff8a0bb5f965f592e16Mark HammondPyAPI_DATA(PyTypeObject) PyCFunction_Type; 1185a5fbbdfea617f6cc8fae82c9e8c2b5c424436dGuido van Rossum 12caa63808861d4e92d4dc1005fc01de0f2e4a8fd0Guido van Rossum#define PyCFunction_Check(op) ((op)->ob_type == &PyCFunction_Type) 1385a5fbbdfea617f6cc8fae82c9e8c2b5c424436dGuido van Rossum 14dbd9ba6a6c19c3d06f5684b3384a934f740038dbTim Peterstypedef PyObject *(*PyCFunction)(PyObject *, PyObject *); 15dbd9ba6a6c19c3d06f5684b3384a934f740038dbTim Peterstypedef PyObject *(*PyCFunctionWithKeywords)(PyObject *, PyObject *, 16dbd9ba6a6c19c3d06f5684b3384a934f740038dbTim Peters PyObject *); 17910d7d46dce571fa81428718e9be5307a56adeeeJeremy Hyltontypedef PyObject *(*PyNoArgsFunction)(PyObject *); 1885a5fbbdfea617f6cc8fae82c9e8c2b5c424436dGuido van Rossum 1991a681debf9ffec155d0aff8a0bb5f965f592e16Mark HammondPyAPI_FUNC(PyCFunction) PyCFunction_GetFunction(PyObject *); 2091a681debf9ffec155d0aff8a0bb5f965f592e16Mark HammondPyAPI_FUNC(PyObject *) PyCFunction_GetSelf(PyObject *); 2191a681debf9ffec155d0aff8a0bb5f965f592e16Mark HammondPyAPI_FUNC(int) PyCFunction_GetFlags(PyObject *); 223f5da24ea304e674a9abbdcffc4d671e32aa70f1Guido van Rossum 239223351617793f0674b8410d39ff5437b2a29879Guido van Rossum/* Macros for direct access to these values. Type checks are *not* 249223351617793f0674b8410d39ff5437b2a29879Guido van Rossum done, so use with care. */ 259223351617793f0674b8410d39ff5437b2a29879Guido van Rossum#define PyCFunction_GET_FUNCTION(func) \ 269223351617793f0674b8410d39ff5437b2a29879Guido van Rossum (((PyCFunctionObject *)func) -> m_ml -> ml_meth) 279223351617793f0674b8410d39ff5437b2a29879Guido van Rossum#define PyCFunction_GET_SELF(func) \ 289223351617793f0674b8410d39ff5437b2a29879Guido van Rossum (((PyCFunctionObject *)func) -> m_self) 299223351617793f0674b8410d39ff5437b2a29879Guido van Rossum#define PyCFunction_GET_FLAGS(func) \ 309223351617793f0674b8410d39ff5437b2a29879Guido van Rossum (((PyCFunctionObject *)func) -> m_ml -> ml_flags) 3191a681debf9ffec155d0aff8a0bb5f965f592e16Mark HammondPyAPI_FUNC(PyObject *) PyCFunction_Call(PyObject *, PyObject *, PyObject *); 329223351617793f0674b8410d39ff5437b2a29879Guido van Rossum 33caa63808861d4e92d4dc1005fc01de0f2e4a8fd0Guido van Rossumstruct PyMethodDef { 34ea9cb5aebf38741871ad4f28971dcd23ddd77ad2Fred Drake char *ml_name; 35ea9cb5aebf38741871ad4f28971dcd23ddd77ad2Fred Drake PyCFunction ml_meth; 36ea9cb5aebf38741871ad4f28971dcd23ddd77ad2Fred Drake int ml_flags; 37ea9cb5aebf38741871ad4f28971dcd23ddd77ad2Fred Drake char *ml_doc; 383f5da24ea304e674a9abbdcffc4d671e32aa70f1Guido van Rossum}; 39caa63808861d4e92d4dc1005fc01de0f2e4a8fd0Guido van Rossumtypedef struct PyMethodDef PyMethodDef; 403f5da24ea304e674a9abbdcffc4d671e32aa70f1Guido van Rossum 4191a681debf9ffec155d0aff8a0bb5f965f592e16Mark HammondPyAPI_FUNC(PyObject *) Py_FindMethod(PyMethodDef[], PyObject *, char *); 429dc8d0e0a3f9520cfff61c479beea29d593e2e39Guido van Rossum 434f0dcc9a9a4629607d4fff79912e8d0c86cd3914Jeremy Hylton#define PyCFunction_New(ML, SELF) PyCFunction_NewEx((ML), (SELF), NULL) 444f0dcc9a9a4629607d4fff79912e8d0c86cd3914Jeremy HyltonPyAPI_FUNC(PyObject *) PyCFunction_NewEx(PyMethodDef *, PyObject *, 454f0dcc9a9a4629607d4fff79912e8d0c86cd3914Jeremy Hylton PyObject *); 46a3309960a50dbadfd854299e7420223eb8718a56Guido van Rossum 475799b520086129ed8aaadeb3b941b3000a42576aGuido van Rossum/* Flag passed to newmethodobject */ 48767bf49b6b3d8825cfa5c52c2e8019bd23429fcdAndrew M. Kuchling#define METH_OLDARGS 0x0000 495799b520086129ed8aaadeb3b941b3000a42576aGuido van Rossum#define METH_VARARGS 0x0001 50bebdc376c3aa584bfb9825758d5cf8d5c09c8692Guido van Rossum#define METH_KEYWORDS 0x0002 517bf9715a8b794cb743fdac97a9014102985a3dd3Fred Drake/* METH_NOARGS and METH_O must not be combined with the flags above. */ 52910d7d46dce571fa81428718e9be5307a56adeeeJeremy Hylton#define METH_NOARGS 0x0004 53910d7d46dce571fa81428718e9be5307a56adeeeJeremy Hylton#define METH_O 0x0008 545799b520086129ed8aaadeb3b941b3000a42576aGuido van Rossum 557bf9715a8b794cb743fdac97a9014102985a3dd3Fred Drake/* METH_CLASS and METH_STATIC are a little different; these control 567bf9715a8b794cb743fdac97a9014102985a3dd3Fred Drake the construction of methods for a class. These cannot be used for 577bf9715a8b794cb743fdac97a9014102985a3dd3Fred Drake functions in modules. */ 587bf9715a8b794cb743fdac97a9014102985a3dd3Fred Drake#define METH_CLASS 0x0010 597bf9715a8b794cb743fdac97a9014102985a3dd3Fred Drake#define METH_STATIC 0x0020 607bf9715a8b794cb743fdac97a9014102985a3dd3Fred Drake 618f5cdaa784f555149adf5e94fd2e989f99d6b1dbRaymond Hettinger/* METH_COEXIST allows a method to be entered eventhough a slot has 628f5cdaa784f555149adf5e94fd2e989f99d6b1dbRaymond Hettinger already filled the entry. When defined, the flag allows a separate 638f5cdaa784f555149adf5e94fd2e989f99d6b1dbRaymond Hettinger method, "__contains__" for example, to coexist with a defined 648f5cdaa784f555149adf5e94fd2e989f99d6b1dbRaymond Hettinger slot like sq_contains. */ 658f5cdaa784f555149adf5e94fd2e989f99d6b1dbRaymond Hettinger 668f5cdaa784f555149adf5e94fd2e989f99d6b1dbRaymond Hettinger#define METH_COEXIST 0x0040 678f5cdaa784f555149adf5e94fd2e989f99d6b1dbRaymond Hettinger 6869785032358a007fbcf56e62c0acea59db79431fGuido van Rossumtypedef struct PyMethodChain { 69ea9cb5aebf38741871ad4f28971dcd23ddd77ad2Fred Drake PyMethodDef *methods; /* Methods of this type */ 70ea9cb5aebf38741871ad4f28971dcd23ddd77ad2Fred Drake struct PyMethodChain *link; /* NULL or base type */ 7169785032358a007fbcf56e62c0acea59db79431fGuido van Rossum} PyMethodChain; 7269785032358a007fbcf56e62c0acea59db79431fGuido van Rossum 7391a681debf9ffec155d0aff8a0bb5f965f592e16Mark HammondPyAPI_FUNC(PyObject *) Py_FindMethodInChain(PyMethodChain *, PyObject *, 74ea9cb5aebf38741871ad4f28971dcd23ddd77ad2Fred Drake char *); 7569785032358a007fbcf56e62c0acea59db79431fGuido van Rossum 769223351617793f0674b8410d39ff5437b2a29879Guido van Rossumtypedef struct { 77ea9cb5aebf38741871ad4f28971dcd23ddd77ad2Fred Drake PyObject_HEAD 78ea9cb5aebf38741871ad4f28971dcd23ddd77ad2Fred Drake PyMethodDef *m_ml; 79ea9cb5aebf38741871ad4f28971dcd23ddd77ad2Fred Drake PyObject *m_self; 804f0dcc9a9a4629607d4fff79912e8d0c86cd3914Jeremy Hylton PyObject *m_module; 819223351617793f0674b8410d39ff5437b2a29879Guido van Rossum} PyCFunctionObject; 829223351617793f0674b8410d39ff5437b2a29879Guido van Rossum 83a3309960a50dbadfd854299e7420223eb8718a56Guido van Rossum#ifdef __cplusplus 84a3309960a50dbadfd854299e7420223eb8718a56Guido van Rossum} 85a3309960a50dbadfd854299e7420223eb8718a56Guido van Rossum#endif 86a3309960a50dbadfd854299e7420223eb8718a56Guido van Rossum#endif /* !Py_METHODOBJECT_H */ 87