methodobject.h 3.22 KB
Newer Older
1 2 3 4 5 6
#ifndef Py_METHODOBJECT_H
#define Py_METHODOBJECT_H
#ifdef __cplusplus
extern "C" {
#endif

7
/***********************************************************
Guido van Rossum's avatar
Guido van Rossum committed
8 9
Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
The Netherlands.
10 11 12

                        All Rights Reserved

13 14
Permission to use, copy, modify, and distribute this software and its
documentation for any purpose and without fee is hereby granted,
15
provided that the above copyright notice appear in all copies and that
16
both that copyright notice and this permission notice appear in
17
supporting documentation, and that the names of Stichting Mathematisch
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
Centrum or CWI or Corporation for National Research Initiatives or
CNRI not be used in advertising or publicity pertaining to
distribution of the software without specific, written prior
permission.

While CWI is the initial source for this software, a modified version
is made available by the Corporation for National Research Initiatives
(CNRI) at the Internet address ftp://ftp.python.org.

STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
35 36 37

******************************************************************/

Guido van Rossum's avatar
Guido van Rossum committed
38 39
/* Method object interface */

40
extern DL_IMPORT(PyTypeObject) PyCFunction_Type;
Guido van Rossum's avatar
Guido van Rossum committed
41

42
#define PyCFunction_Check(op) ((op)->ob_type == &PyCFunction_Type)
Guido van Rossum's avatar
Guido van Rossum committed
43

44
typedef PyObject *(*PyCFunction) Py_FPROTO((PyObject *, PyObject *));
45 46
typedef PyObject *(*PyCFunctionWithKeywords)
	Py_FPROTO((PyObject *, PyObject *, PyObject *));
Guido van Rossum's avatar
Guido van Rossum committed
47

48 49 50
extern DL_IMPORT(PyCFunction) PyCFunction_GetFunction Py_PROTO((PyObject *));
extern DL_IMPORT(PyObject *) PyCFunction_GetSelf Py_PROTO((PyObject *));
extern DL_IMPORT(int) PyCFunction_GetFlags Py_PROTO((PyObject *));
Guido van Rossum's avatar
Guido van Rossum committed
51

52 53 54 55 56 57 58 59 60
/* Macros for direct access to these values. Type checks are *not*
   done, so use with care. */
#define PyCFunction_GET_FUNCTION(func) \
        (((PyCFunctionObject *)func) -> m_ml -> ml_meth)
#define PyCFunction_GET_SELF(func) \
	(((PyCFunctionObject *)func) -> m_self)
#define PyCFunction_GET_FLAGS(func) \
	(((PyCFunctionObject *)func) -> m_ml -> ml_flags)

61 62 63 64 65
struct PyMethodDef {
	char		*ml_name;
	PyCFunction	ml_meth;
	int		ml_flags;
	char		*ml_doc;
Guido van Rossum's avatar
Guido van Rossum committed
66
};
67
typedef struct PyMethodDef PyMethodDef;
Guido van Rossum's avatar
Guido van Rossum committed
68

69
extern DL_IMPORT(PyObject *) Py_FindMethod
70
	Py_PROTO((PyMethodDef[], PyObject *, char *));
71

72
extern DL_IMPORT(PyObject *) PyCFunction_New
73
	Py_PROTO((PyMethodDef *, PyObject *));
74

Guido van Rossum's avatar
Guido van Rossum committed
75 76
/* Flag passed to newmethodobject */
#define METH_VARARGS  0x0001
77
#define METH_KEYWORDS 0x0002
Guido van Rossum's avatar
Guido van Rossum committed
78

79 80 81 82 83
typedef struct PyMethodChain {
	PyMethodDef *methods;		/* Methods of this type */
	struct PyMethodChain *link;	/* NULL or base type */
} PyMethodChain;

84
extern DL_IMPORT(PyObject *) Py_FindMethodInChain
85 86
	Py_PROTO((PyMethodChain *, PyObject *, char *));

87 88 89 90 91 92
typedef struct {
	PyObject_HEAD
	PyMethodDef *m_ml;
	PyObject    *m_self;
} PyCFunctionObject;

93 94 95 96
#ifdef __cplusplus
}
#endif
#endif /* !Py_METHODOBJECT_H */