methodobject.h revision 910d7d46dce571fa81428718e9be5307a56adeee
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 10051ab123b465685e714668099c0a6dd86de5673bGuido van Rossumextern DL_IMPORT(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 19ea9cb5aebf38741871ad4f28971dcd23ddd77ad2Fred Drakeextern DL_IMPORT(PyCFunction) PyCFunction_GetFunction(PyObject *); 20ea9cb5aebf38741871ad4f28971dcd23ddd77ad2Fred Drakeextern DL_IMPORT(PyObject *) PyCFunction_GetSelf(PyObject *); 21ea9cb5aebf38741871ad4f28971dcd23ddd77ad2Fred Drakeextern DL_IMPORT(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) 31910d7d46dce571fa81428718e9be5307a56adeeeJeremy Hyltonextern DL_IMPORT(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 41ea9cb5aebf38741871ad4f28971dcd23ddd77ad2Fred Drakeextern DL_IMPORT(PyObject *) Py_FindMethod(PyMethodDef[], PyObject *, char *); 429dc8d0e0a3f9520cfff61c479beea29d593e2e39Guido van Rossum 43ea9cb5aebf38741871ad4f28971dcd23ddd77ad2Fred Drakeextern DL_IMPORT(PyObject *) PyCFunction_New(PyMethodDef *, PyObject *); 44a3309960a50dbadfd854299e7420223eb8718a56Guido van Rossum 455799b520086129ed8aaadeb3b941b3000a42576aGuido van Rossum/* Flag passed to newmethodobject */ 46767bf49b6b3d8825cfa5c52c2e8019bd23429fcdAndrew M. Kuchling#define METH_OLDARGS 0x0000 475799b520086129ed8aaadeb3b941b3000a42576aGuido van Rossum#define METH_VARARGS 0x0001 48bebdc376c3aa584bfb9825758d5cf8d5c09c8692Guido van Rossum#define METH_KEYWORDS 0x0002 49910d7d46dce571fa81428718e9be5307a56adeeeJeremy Hylton/* METH_NOARGS and METH_O must not be combined with any other flag. */ 50910d7d46dce571fa81428718e9be5307a56adeeeJeremy Hylton#define METH_NOARGS 0x0004 51910d7d46dce571fa81428718e9be5307a56adeeeJeremy Hylton#define METH_O 0x0008 525799b520086129ed8aaadeb3b941b3000a42576aGuido van Rossum 5369785032358a007fbcf56e62c0acea59db79431fGuido van Rossumtypedef struct PyMethodChain { 54ea9cb5aebf38741871ad4f28971dcd23ddd77ad2Fred Drake PyMethodDef *methods; /* Methods of this type */ 55ea9cb5aebf38741871ad4f28971dcd23ddd77ad2Fred Drake struct PyMethodChain *link; /* NULL or base type */ 5669785032358a007fbcf56e62c0acea59db79431fGuido van Rossum} PyMethodChain; 5769785032358a007fbcf56e62c0acea59db79431fGuido van Rossum 58ea9cb5aebf38741871ad4f28971dcd23ddd77ad2Fred Drakeextern DL_IMPORT(PyObject *) Py_FindMethodInChain(PyMethodChain *, PyObject *, 59ea9cb5aebf38741871ad4f28971dcd23ddd77ad2Fred Drake char *); 6069785032358a007fbcf56e62c0acea59db79431fGuido van Rossum 619223351617793f0674b8410d39ff5437b2a29879Guido van Rossumtypedef struct { 62ea9cb5aebf38741871ad4f28971dcd23ddd77ad2Fred Drake PyObject_HEAD 63ea9cb5aebf38741871ad4f28971dcd23ddd77ad2Fred Drake PyMethodDef *m_ml; 64ea9cb5aebf38741871ad4f28971dcd23ddd77ad2Fred Drake PyObject *m_self; 659223351617793f0674b8410d39ff5437b2a29879Guido van Rossum} PyCFunctionObject; 669223351617793f0674b8410d39ff5437b2a29879Guido van Rossum 67a3309960a50dbadfd854299e7420223eb8718a56Guido van Rossum#ifdef __cplusplus 68a3309960a50dbadfd854299e7420223eb8718a56Guido van Rossum} 69a3309960a50dbadfd854299e7420223eb8718a56Guido van Rossum#endif 70a3309960a50dbadfd854299e7420223eb8718a56Guido van Rossum#endif /* !Py_METHODOBJECT_H */ 71