annotate Include/methodobject.h @ 73323:dad02a080bbc

Improve byte-compilation in packaging to be independent of -O or -B. The code I fixed to comply with PEP 3147 still had one bug: When run under python -O, some paths for pyc files would be pyo, because I called imp.cache_from_source without explicit debug_override argument in some places, and under -O that would return .pyo (this is well explained in the imp docs). Now all code (util.byte_compile, build_py, install_lib) can create .pyo files according to options given by users, without interference from the calling Python’s own optimize mode. On a related topic, I also removed the code that prevented byte compilation under python -B. The rationale is that packaging gives control over the creation of pyc files to the user with its own explicit option, and the behavior should not be changed if the calling Python happens to run with -B for whatever reason. I will argue that this is a bug fix and ask to be allowed to backport this change to distutils. Finally, I moved one nugget of information about the --compile and --optimize options from the source into the doc. It clears up a misunderstanding that I (and maybe other people) had.
author Éric Araujo <merwok@netwok.org>
date Thu, 03 Nov 2011 05:08:28 +0100
parents 62b61abd02b8
children 7a7b698f6f21
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
44351
86a2679dca46 #1629: Renamed Py_Size, Py_Type and Py_Refcnt to Py_SIZE, Py_TYPE and Py_REFCNT.
Christian Heimes <christian@cheimes.de>
parents: 43177
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. */
66664
62b61abd02b8 Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents: 48418
diff changeset
29 #ifndef Py_LIMITED_API
8656
9e536dd3dc97 Marc-Andre Lemburg's patch to move the typedef for PyCFunctionObject
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
30 #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
31 (((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
32 #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
33 (((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
34 #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
35 (((PyCFunctionObject *)func) -> m_ml -> ml_flags)
66664
62b61abd02b8 Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents: 48418
diff changeset
36 #endif
24752
c1eb668525e1 Excise DL_EXPORT from Include.
Mark Hammond <mhammond@skippinet.com.au>
parents: 22613
diff changeset
37 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
38
2129
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2072
diff changeset
39 struct PyMethodDef {
35999
9541369b0dca Add const to several API functions that take char *.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 33856
diff changeset
40 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
41 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
42 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
43 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
44 const char *ml_doc; /* The __doc__ attribute, or NULL */
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 6
diff changeset
45 };
2129
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2072
diff changeset
46 typedef struct PyMethodDef PyMethodDef;
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 6
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 */
43177
b7bfa780a882 Get rid of METH_OLDARGS.
Georg Brandl <georg@python.org>
parents: 42334
diff changeset
53 /* #define METH_OLDARGS 0x0000 -- unsupported now */
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
39536
8f5b9982beba Completely get rid of PyClass and PyInstance.
Guido van Rossum <guido@python.org>
parents: 35999
diff changeset
66 /* METH_COEXIST allows a method to be entered even though a slot has
31172
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
66664
62b61abd02b8 Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents: 48418
diff changeset
73 #ifndef Py_LIMITED_API
8656
9e536dd3dc97 Marc-Andre Lemburg's patch to move the typedef for PyCFunctionObject
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
74 typedef struct {
13444
5709ddba423c ANSI-fication and Py_PROTO extermination.
Fred Drake <fdrake@acm.org>
parents: 13256
diff changeset
75 PyObject_HEAD
33856
60c60dc75c77 Wrote down the invariants of some common objects whose structure is
Armin Rigo <arigo@tunes.org>
parents: 31172
diff changeset
76 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
77 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
78 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
79 } PyCFunctionObject;
66664
62b61abd02b8 Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents: 48418
diff changeset
80 #endif
8656
9e536dd3dc97 Marc-Andre Lemburg's patch to move the typedef for PyCFunctionObject
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
81
45371
7c4c46342137 Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60700,60705-60706,60708,60711,60714,60720,60724-60730,60732,60736,60742,60744,60746,60748,60750-60751,60753,60756-60757,60759-60761,60763-60764,60766,60769-60770,60774-60784,60787-60845 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44351
diff changeset
82 PyAPI_FUNC(int) PyCFunction_ClearFreeList(void);
7c4c46342137 Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60700,60705-60706,60708,60711,60714,60720,60724-60730,60732,60736,60742,60744,60746,60748,60750-60751,60753,60756-60757,60759-60761,60763-60764,60766,60769-60770,60774-60784,60787-60845 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44351
diff changeset
83
1329
519c25039c6a * Added support for X11 modules.
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
84 #ifdef __cplusplus
519c25039c6a * Added support for X11 modules.
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
85 }
519c25039c6a * Added support for X11 modules.
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
86 #endif
519c25039c6a * Added support for X11 modules.
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
87 #endif /* !Py_METHODOBJECT_H */