annotate Include/methodobject.h @ 80661:94de77bd0b4b 2.7

Issue #16194: document imp.load_dynamic problems when read several extension modules from the same binary object file.
author Andrew Svetlov <andrew.svetlov@gmail.com>
date Thu, 29 Nov 2012 19:51:28 +0200
parents 65ae68c7aca3
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
145
853b736a6a9e Added copyright notice.
Guido van Rossum <guido@python.org>
parents: 86
diff changeset
1
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
2 /* Method object interface */
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
3
13444
5709ddba423c ANSI-fication and Py_PROTO extermination.
Fred Drake <fdrake@acm.org>
parents: 13256
diff changeset
4 #ifndef Py_METHODOBJECT_H
5709ddba423c ANSI-fication and Py_PROTO extermination.
Fred Drake <fdrake@acm.org>
parents: 13256
diff changeset
5 #define Py_METHODOBJECT_H
5709ddba423c ANSI-fication and Py_PROTO extermination.
Fred Drake <fdrake@acm.org>
parents: 13256
diff changeset
6 #ifdef __cplusplus
5709ddba423c ANSI-fication and Py_PROTO extermination.
Fred Drake <fdrake@acm.org>
parents: 13256
diff changeset
7 extern "C" {
5709ddba423c ANSI-fication and Py_PROTO extermination.
Fred Drake <fdrake@acm.org>
parents: 13256
diff changeset
8 #endif
5709ddba423c ANSI-fication and Py_PROTO extermination.
Fred Drake <fdrake@acm.org>
parents: 13256
diff changeset
9
33856
60c60dc75c77 Wrote down the invariants of some common objects whose structure is
Armin Rigo <arigo@tunes.org>
parents: 31172
diff changeset
10 /* This is about the type 'builtin_function_or_method',
60c60dc75c77 Wrote down the invariants of some common objects whose structure is
Armin Rigo <arigo@tunes.org>
parents: 31172
diff changeset
11 not Python methods in user-defined classes. See classobject.h
60c60dc75c77 Wrote down the invariants of some common objects whose structure is
Armin Rigo <arigo@tunes.org>
parents: 31172
diff changeset
12 for the latter. */
60c60dc75c77 Wrote down the invariants of some common objects whose structure is
Armin Rigo <arigo@tunes.org>
parents: 31172
diff changeset
13
24752
c1eb668525e1 Excise DL_EXPORT from Include.
Mark Hammond <mhammond@skippinet.com.au>
parents: 22613
diff changeset
14 PyAPI_DATA(PyTypeObject) PyCFunction_Type;
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
15
44350
26384b8180c7 #1629: Renamed Py_Size, Py_Type and Py_Refcnt to Py_SIZE, Py_TYPE and Py_REFCNT. Macros for b/w compatibility are available.
Christian Heimes <christian@cheimes.de>
parents: 42333
diff changeset
16 #define PyCFunction_Check(op) (Py_TYPE(op) == &PyCFunction_Type)
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
17
13447
a89f7f268de4 Nuke all remaining occurrences of Py_PROTO and Py_FPROTO.
Tim Peters <tim.peters@gmail.com>
parents: 13444
diff changeset
18 typedef PyObject *(*PyCFunction)(PyObject *, PyObject *);
a89f7f268de4 Nuke all remaining occurrences of Py_PROTO and Py_FPROTO.
Tim Peters <tim.peters@gmail.com>
parents: 13444
diff changeset
19 typedef PyObject *(*PyCFunctionWithKeywords)(PyObject *, PyObject *,
a89f7f268de4 Nuke all remaining occurrences of Py_PROTO and Py_FPROTO.
Tim Peters <tim.peters@gmail.com>
parents: 13444
diff changeset
20 PyObject *);
19198
3c1c9948ff65 Remove much dead code from ceval.c
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 14375
diff changeset
21 typedef PyObject *(*PyNoArgsFunction)(PyObject *);
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
22
24752
c1eb668525e1 Excise DL_EXPORT from Include.
Mark Hammond <mhammond@skippinet.com.au>
parents: 22613
diff changeset
23 PyAPI_FUNC(PyCFunction) PyCFunction_GetFunction(PyObject *);
c1eb668525e1 Excise DL_EXPORT from Include.
Mark Hammond <mhammond@skippinet.com.au>
parents: 22613
diff changeset
24 PyAPI_FUNC(PyObject *) PyCFunction_GetSelf(PyObject *);
c1eb668525e1 Excise DL_EXPORT from Include.
Mark Hammond <mhammond@skippinet.com.au>
parents: 22613
diff changeset
25 PyAPI_FUNC(int) PyCFunction_GetFlags(PyObject *);
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 6
diff changeset
26
8656
9e536dd3dc97 Marc-Andre Lemburg's patch to move the typedef for PyCFunctionObject
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
27 /* Macros for direct access to these values. Type checks are *not*
9e536dd3dc97 Marc-Andre Lemburg's patch to move the typedef for PyCFunctionObject
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
28 done, so use with care. */
9e536dd3dc97 Marc-Andre Lemburg's patch to move the typedef for PyCFunctionObject
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
29 #define PyCFunction_GET_FUNCTION(func) \
9e536dd3dc97 Marc-Andre Lemburg's patch to move the typedef for PyCFunctionObject
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
30 (((PyCFunctionObject *)func) -> m_ml -> ml_meth)
9e536dd3dc97 Marc-Andre Lemburg's patch to move the typedef for PyCFunctionObject
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
31 #define PyCFunction_GET_SELF(func) \
9e536dd3dc97 Marc-Andre Lemburg's patch to move the typedef for PyCFunctionObject
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
32 (((PyCFunctionObject *)func) -> m_self)
9e536dd3dc97 Marc-Andre Lemburg's patch to move the typedef for PyCFunctionObject
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
33 #define PyCFunction_GET_FLAGS(func) \
9e536dd3dc97 Marc-Andre Lemburg's patch to move the typedef for PyCFunctionObject
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
34 (((PyCFunctionObject *)func) -> m_ml -> ml_flags)
24752
c1eb668525e1 Excise DL_EXPORT from Include.
Mark Hammond <mhammond@skippinet.com.au>
parents: 22613
diff changeset
35 PyAPI_FUNC(PyObject *) PyCFunction_Call(PyObject *, PyObject *, PyObject *);
8656
9e536dd3dc97 Marc-Andre Lemburg's patch to move the typedef for PyCFunctionObject
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
36
2129
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2072
diff changeset
37 struct PyMethodDef {
35999
9541369b0dca Add const to several API functions that take char *.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 33856
diff changeset
38 const char *ml_name; /* The name of the built-in function/method */
33856
60c60dc75c77 Wrote down the invariants of some common objects whose structure is
Armin Rigo <arigo@tunes.org>
parents: 31172
diff changeset
39 PyCFunction ml_meth; /* The C function that implements it */
60c60dc75c77 Wrote down the invariants of some common objects whose structure is
Armin Rigo <arigo@tunes.org>
parents: 31172
diff changeset
40 int ml_flags; /* Combination of METH_xxx flags, which mostly
60c60dc75c77 Wrote down the invariants of some common objects whose structure is
Armin Rigo <arigo@tunes.org>
parents: 31172
diff changeset
41 describe the args expected by the C func */
35999
9541369b0dca Add const to several API functions that take char *.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 33856
diff changeset
42 const char *ml_doc; /* The __doc__ attribute, or NULL */
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 6
diff changeset
43 };
2129
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2072
diff changeset
44 typedef struct PyMethodDef PyMethodDef;
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 6
diff changeset
45
35999
9541369b0dca Add const to several API functions that take char *.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 33856
diff changeset
46 PyAPI_FUNC(PyObject *) Py_FindMethod(PyMethodDef[], PyObject *, const char *);
2072
cf65a124fa4b added ml_doc and changed newmethodlist interface
Guido van Rossum <guido@python.org>
parents: 2058
diff changeset
47
27559
faabd9867fb8 Provide __module__ attributes for functions defined in C and Python.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 24752
diff changeset
48 #define PyCFunction_New(ML, SELF) PyCFunction_NewEx((ML), (SELF), NULL)
faabd9867fb8 Provide __module__ attributes for functions defined in C and Python.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 24752
diff changeset
49 PyAPI_FUNC(PyObject *) PyCFunction_NewEx(PyMethodDef *, PyObject *,
faabd9867fb8 Provide __module__ attributes for functions defined in C and Python.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 24752
diff changeset
50 PyObject *);
1329
519c25039c6a * Added support for X11 modules.
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
51
2058
508036dbba3b Added 1995 copyright.
Guido van Rossum <guido@python.org>
parents: 1794
diff changeset
52 /* Flag passed to newmethodobject */
13819
95eee868611e Added #define for oldest version of argument calling
Andrew M. Kuchling <amk@amk.ca>
parents: 13447
diff changeset
53 #define METH_OLDARGS 0x0000
2058
508036dbba3b Added 1995 copyright.
Guido van Rossum <guido@python.org>
parents: 1794
diff changeset
54 #define METH_VARARGS 0x0001
2863
10e007aef1cf changes for keyword args to built-in functions and classes
Guido van Rossum <guido@python.org>
parents: 2436
diff changeset
55 #define METH_KEYWORDS 0x0002
22613
ddc9543c76a0 Introduce two new flag bits that can be set in a PyMethodDef method
Fred Drake <fdrake@acm.org>
parents: 19198
diff changeset
56 /* METH_NOARGS and METH_O must not be combined with the flags above. */
19198
3c1c9948ff65 Remove much dead code from ceval.c
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 14375
diff changeset
57 #define METH_NOARGS 0x0004
3c1c9948ff65 Remove much dead code from ceval.c
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 14375
diff changeset
58 #define METH_O 0x0008
2058
508036dbba3b Added 1995 copyright.
Guido van Rossum <guido@python.org>
parents: 1794
diff changeset
59
22613
ddc9543c76a0 Introduce two new flag bits that can be set in a PyMethodDef method
Fred Drake <fdrake@acm.org>
parents: 19198
diff changeset
60 /* METH_CLASS and METH_STATIC are a little different; these control
ddc9543c76a0 Introduce two new flag bits that can be set in a PyMethodDef method
Fred Drake <fdrake@acm.org>
parents: 19198
diff changeset
61 the construction of methods for a class. These cannot be used for
ddc9543c76a0 Introduce two new flag bits that can be set in a PyMethodDef method
Fred Drake <fdrake@acm.org>
parents: 19198
diff changeset
62 functions in modules. */
ddc9543c76a0 Introduce two new flag bits that can be set in a PyMethodDef method
Fred Drake <fdrake@acm.org>
parents: 19198
diff changeset
63 #define METH_CLASS 0x0010
ddc9543c76a0 Introduce two new flag bits that can be set in a PyMethodDef method
Fred Drake <fdrake@acm.org>
parents: 19198
diff changeset
64 #define METH_STATIC 0x0020
ddc9543c76a0 Introduce two new flag bits that can be set in a PyMethodDef method
Fred Drake <fdrake@acm.org>
parents: 19198
diff changeset
65
31172
e4fb6164158c * Added a new method flag, METH_COEXIST.
Raymond Hettinger <python@rcn.com>
parents: 27559
diff changeset
66 /* METH_COEXIST allows a method to be entered eventhough a slot has
e4fb6164158c * Added a new method flag, METH_COEXIST.
Raymond Hettinger <python@rcn.com>
parents: 27559
diff changeset
67 already filled the entry. When defined, the flag allows a separate
e4fb6164158c * Added a new method flag, METH_COEXIST.
Raymond Hettinger <python@rcn.com>
parents: 27559
diff changeset
68 method, "__contains__" for example, to coexist with a defined
e4fb6164158c * Added a new method flag, METH_COEXIST.
Raymond Hettinger <python@rcn.com>
parents: 27559
diff changeset
69 slot like sq_contains. */
e4fb6164158c * Added a new method flag, METH_COEXIST.
Raymond Hettinger <python@rcn.com>
parents: 27559
diff changeset
70
e4fb6164158c * Added a new method flag, METH_COEXIST.
Raymond Hettinger <python@rcn.com>
parents: 27559
diff changeset
71 #define METH_COEXIST 0x0040
e4fb6164158c * Added a new method flag, METH_COEXIST.
Raymond Hettinger <python@rcn.com>
parents: 27559
diff changeset
72
2256
d091b246a3a7 added findmethodinchain and methodchain data types
Guido van Rossum <guido@python.org>
parents: 2129
diff changeset
73 typedef struct PyMethodChain {
13444
5709ddba423c ANSI-fication and Py_PROTO extermination.
Fred Drake <fdrake@acm.org>
parents: 13256
diff changeset
74 PyMethodDef *methods; /* Methods of this type */
5709ddba423c ANSI-fication and Py_PROTO extermination.
Fred Drake <fdrake@acm.org>
parents: 13256
diff changeset
75 struct PyMethodChain *link; /* NULL or base type */
2256
d091b246a3a7 added findmethodinchain and methodchain data types
Guido van Rossum <guido@python.org>
parents: 2129
diff changeset
76 } PyMethodChain;
d091b246a3a7 added findmethodinchain and methodchain data types
Guido van Rossum <guido@python.org>
parents: 2129
diff changeset
77
24752
c1eb668525e1 Excise DL_EXPORT from Include.
Mark Hammond <mhammond@skippinet.com.au>
parents: 22613
diff changeset
78 PyAPI_FUNC(PyObject *) Py_FindMethodInChain(PyMethodChain *, PyObject *,
35999
9541369b0dca Add const to several API functions that take char *.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 33856
diff changeset
79 const char *);
2256
d091b246a3a7 added findmethodinchain and methodchain data types
Guido van Rossum <guido@python.org>
parents: 2129
diff changeset
80
8656
9e536dd3dc97 Marc-Andre Lemburg's patch to move the typedef for PyCFunctionObject
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
81 typedef struct {
13444
5709ddba423c ANSI-fication and Py_PROTO extermination.
Fred Drake <fdrake@acm.org>
parents: 13256
diff changeset
82 PyObject_HEAD
33856
60c60dc75c77 Wrote down the invariants of some common objects whose structure is
Armin Rigo <arigo@tunes.org>
parents: 31172
diff changeset
83 PyMethodDef *m_ml; /* Description of the C function to call */
60c60dc75c77 Wrote down the invariants of some common objects whose structure is
Armin Rigo <arigo@tunes.org>
parents: 31172
diff changeset
84 PyObject *m_self; /* Passed as 'self' arg to the C func, can be NULL */
60c60dc75c77 Wrote down the invariants of some common objects whose structure is
Armin Rigo <arigo@tunes.org>
parents: 31172
diff changeset
85 PyObject *m_module; /* The __module__ attribute, can be anything */
8656
9e536dd3dc97 Marc-Andre Lemburg's patch to move the typedef for PyCFunctionObject
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
86 } PyCFunctionObject;
9e536dd3dc97 Marc-Andre Lemburg's patch to move the typedef for PyCFunctionObject
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
87
45341
65ae68c7aca3 Implemented Martin's suggestion to clear the free lists during the garbage collection of the highest generation.
Christian Heimes <christian@cheimes.de>
parents: 44350
diff changeset
88 PyAPI_FUNC(int) PyCFunction_ClearFreeList(void);
65ae68c7aca3 Implemented Martin's suggestion to clear the free lists during the garbage collection of the highest generation.
Christian Heimes <christian@cheimes.de>
parents: 44350
diff changeset
89
1329
519c25039c6a * Added support for X11 modules.
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
90 #ifdef __cplusplus
519c25039c6a * Added support for X11 modules.
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
91 }
519c25039c6a * Added support for X11 modules.
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
92 #endif
519c25039c6a * Added support for X11 modules.
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
93 #endif /* !Py_METHODOBJECT_H */