blob: c01e8a8f6a2933c361348913d06ffb4bff0e799f [file] [log] [blame]
Guido van Rossuma3309961993-07-28 09:05:47 +00001#ifndef Py_METHODOBJECT_H
2#define Py_METHODOBJECT_H
3#ifdef __cplusplus
4extern "C" {
5#endif
6
Guido van Rossumf70e43a1991-02-19 12:39:46 +00007/***********************************************************
Guido van Rossumfd71b9e2000-06-30 23:50:40 +00008Copyright (c) 2000, BeOpen.com.
9Copyright (c) 1995-2000, Corporation for National Research Initiatives.
10Copyright (c) 1990-1995, Stichting Mathematisch Centrum.
11All rights reserved.
Guido van Rossumf70e43a1991-02-19 12:39:46 +000012
Guido van Rossumfd71b9e2000-06-30 23:50:40 +000013See the file "Misc/COPYRIGHT" for information on usage and
14redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
Guido van Rossumf70e43a1991-02-19 12:39:46 +000015******************************************************************/
16
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000017/* Method object interface */
18
Guido van Rossum051ab121995-02-27 10:17:52 +000019extern DL_IMPORT(PyTypeObject) PyCFunction_Type;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000020
Guido van Rossumcaa63801995-01-12 11:45:45 +000021#define PyCFunction_Check(op) ((op)->ob_type == &PyCFunction_Type)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000022
Guido van Rossumcaa63801995-01-12 11:45:45 +000023typedef PyObject *(*PyCFunction) Py_FPROTO((PyObject *, PyObject *));
Guido van Rossumbebdc371995-07-26 17:58:29 +000024typedef PyObject *(*PyCFunctionWithKeywords)
25 Py_FPROTO((PyObject *, PyObject *, PyObject *));
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000026
Guido van Rossum43466ec1998-12-04 18:48:25 +000027extern DL_IMPORT(PyCFunction) PyCFunction_GetFunction Py_PROTO((PyObject *));
28extern DL_IMPORT(PyObject *) PyCFunction_GetSelf Py_PROTO((PyObject *));
29extern DL_IMPORT(int) PyCFunction_GetFlags Py_PROTO((PyObject *));
Guido van Rossum3f5da241990-12-20 15:06:42 +000030
Guido van Rossum92233511998-07-10 15:21:55 +000031/* Macros for direct access to these values. Type checks are *not*
32 done, so use with care. */
33#define PyCFunction_GET_FUNCTION(func) \
34 (((PyCFunctionObject *)func) -> m_ml -> ml_meth)
35#define PyCFunction_GET_SELF(func) \
36 (((PyCFunctionObject *)func) -> m_self)
37#define PyCFunction_GET_FLAGS(func) \
38 (((PyCFunctionObject *)func) -> m_ml -> ml_flags)
39
Guido van Rossumcaa63801995-01-12 11:45:45 +000040struct PyMethodDef {
41 char *ml_name;
42 PyCFunction ml_meth;
43 int ml_flags;
44 char *ml_doc;
Guido van Rossum3f5da241990-12-20 15:06:42 +000045};
Guido van Rossumcaa63801995-01-12 11:45:45 +000046typedef struct PyMethodDef PyMethodDef;
Guido van Rossum3f5da241990-12-20 15:06:42 +000047
Guido van Rossum43466ec1998-12-04 18:48:25 +000048extern DL_IMPORT(PyObject *) Py_FindMethod
Guido van Rossumcaa63801995-01-12 11:45:45 +000049 Py_PROTO((PyMethodDef[], PyObject *, char *));
Guido van Rossum9dc8d0e1995-01-07 10:32:29 +000050
Guido van Rossum43466ec1998-12-04 18:48:25 +000051extern DL_IMPORT(PyObject *) PyCFunction_New
Guido van Rossumcaa63801995-01-12 11:45:45 +000052 Py_PROTO((PyMethodDef *, PyObject *));
Guido van Rossuma3309961993-07-28 09:05:47 +000053
Guido van Rossum5799b521995-01-04 19:06:22 +000054/* Flag passed to newmethodobject */
55#define METH_VARARGS 0x0001
Guido van Rossumbebdc371995-07-26 17:58:29 +000056#define METH_KEYWORDS 0x0002
Guido van Rossum5799b521995-01-04 19:06:22 +000057
Guido van Rossum69785031995-01-26 22:58:48 +000058typedef struct PyMethodChain {
59 PyMethodDef *methods; /* Methods of this type */
60 struct PyMethodChain *link; /* NULL or base type */
61} PyMethodChain;
62
Guido van Rossum43466ec1998-12-04 18:48:25 +000063extern DL_IMPORT(PyObject *) Py_FindMethodInChain
Guido van Rossum69785031995-01-26 22:58:48 +000064 Py_PROTO((PyMethodChain *, PyObject *, char *));
65
Guido van Rossum92233511998-07-10 15:21:55 +000066typedef struct {
67 PyObject_HEAD
68 PyMethodDef *m_ml;
69 PyObject *m_self;
70} PyCFunctionObject;
71
Guido van Rossuma3309961993-07-28 09:05:47 +000072#ifdef __cplusplus
73}
74#endif
75#endif /* !Py_METHODOBJECT_H */