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