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