|
1 |
|
2 /* Method object interface */ |
|
3 |
|
4 #ifndef Py_METHODOBJECT_H |
|
5 #define Py_METHODOBJECT_H |
|
6 #ifdef __cplusplus |
|
7 extern "C" { |
|
8 #endif |
|
9 |
|
10 /* This is about the type 'builtin_function_or_method', |
|
11 not Python methods in user-defined classes. See classobject.h |
|
12 for the latter. */ |
|
13 |
|
14 PyAPI_DATA(PyTypeObject) PyCFunction_Type; |
|
15 |
|
16 #define PyCFunction_Check(op) (Py_TYPE(op) == &PyCFunction_Type) |
|
17 |
|
18 typedef PyObject *(*PyCFunction)(PyObject *, PyObject *); |
|
19 typedef PyObject *(*PyCFunctionWithKeywords)(PyObject *, PyObject *, |
|
20 PyObject *); |
|
21 typedef PyObject *(*PyNoArgsFunction)(PyObject *); |
|
22 |
|
23 PyAPI_FUNC(PyCFunction) PyCFunction_GetFunction(PyObject *); |
|
24 PyAPI_FUNC(PyObject *) PyCFunction_GetSelf(PyObject *); |
|
25 PyAPI_FUNC(int) PyCFunction_GetFlags(PyObject *); |
|
26 |
|
27 /* Macros for direct access to these values. Type checks are *not* |
|
28 done, so use with care. */ |
|
29 #define PyCFunction_GET_FUNCTION(func) \ |
|
30 (((PyCFunctionObject *)func) -> m_ml -> ml_meth) |
|
31 #define PyCFunction_GET_SELF(func) \ |
|
32 (((PyCFunctionObject *)func) -> m_self) |
|
33 #define PyCFunction_GET_FLAGS(func) \ |
|
34 (((PyCFunctionObject *)func) -> m_ml -> ml_flags) |
|
35 PyAPI_FUNC(PyObject *) PyCFunction_Call(PyObject *, PyObject *, PyObject *); |
|
36 |
|
37 struct PyMethodDef { |
|
38 const char *ml_name; /* The name of the built-in function/method */ |
|
39 PyCFunction ml_meth; /* The C function that implements it */ |
|
40 int ml_flags; /* Combination of METH_xxx flags, which mostly |
|
41 describe the args expected by the C func */ |
|
42 const char *ml_doc; /* The __doc__ attribute, or NULL */ |
|
43 }; |
|
44 typedef struct PyMethodDef PyMethodDef; |
|
45 |
|
46 PyAPI_FUNC(PyObject *) Py_FindMethod(PyMethodDef[], PyObject *, const char *); |
|
47 |
|
48 #define PyCFunction_New(ML, SELF) PyCFunction_NewEx((ML), (SELF), NULL) |
|
49 PyAPI_FUNC(PyObject *) PyCFunction_NewEx(PyMethodDef *, PyObject *, |
|
50 PyObject *); |
|
51 |
|
52 /* Flag passed to newmethodobject */ |
|
53 #define METH_OLDARGS 0x0000 |
|
54 #define METH_VARARGS 0x0001 |
|
55 #define METH_KEYWORDS 0x0002 |
|
56 /* METH_NOARGS and METH_O must not be combined with the flags above. */ |
|
57 #define METH_NOARGS 0x0004 |
|
58 #define METH_O 0x0008 |
|
59 |
|
60 /* METH_CLASS and METH_STATIC are a little different; these control |
|
61 the construction of methods for a class. These cannot be used for |
|
62 functions in modules. */ |
|
63 #define METH_CLASS 0x0010 |
|
64 #define METH_STATIC 0x0020 |
|
65 |
|
66 /* METH_COEXIST allows a method to be entered eventhough a slot has |
|
67 already filled the entry. When defined, the flag allows a separate |
|
68 method, "__contains__" for example, to coexist with a defined |
|
69 slot like sq_contains. */ |
|
70 |
|
71 #define METH_COEXIST 0x0040 |
|
72 |
|
73 typedef struct PyMethodChain { |
|
74 PyMethodDef *methods; /* Methods of this type */ |
|
75 struct PyMethodChain *link; /* NULL or base type */ |
|
76 } PyMethodChain; |
|
77 |
|
78 PyAPI_FUNC(PyObject *) Py_FindMethodInChain(PyMethodChain *, PyObject *, |
|
79 const char *); |
|
80 |
|
81 typedef struct { |
|
82 PyObject_HEAD |
|
83 PyMethodDef *m_ml; /* Description of the C function to call */ |
|
84 PyObject *m_self; /* Passed as 'self' arg to the C func, can be NULL */ |
|
85 PyObject *m_module; /* The __module__ attribute, can be anything */ |
|
86 } PyCFunctionObject; |
|
87 |
|
88 PyAPI_FUNC(int) PyCFunction_ClearFreeList(void); |
|
89 |
|
90 #ifdef __cplusplus |
|
91 } |
|
92 #endif |
|
93 #endif /* !Py_METHODOBJECT_H */ |