annotate Include/code.h @ 49955:878d40468c4e legacy-trunk

Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
author Vinay Sajip <vinay_sajip@yahoo.co.uk>
date Wed, 03 Dec 2008 23:22:58 +0000
parents c78d3586c474
children a171048daf76
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
1 /* Definitions for bytecode */
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
2
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
3 #ifndef Py_CODE_H
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
4 #define Py_CODE_H
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
5 #ifdef __cplusplus
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
6 extern "C" {
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
7 #endif
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
8
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
9 /* Bytecode object */
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
10 typedef struct {
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
11 PyObject_HEAD
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
12 int co_argcount; /* #arguments, except *args */
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
13 int co_nlocals; /* #local variables */
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
14 int co_stacksize; /* #entries needed for evaluation stack */
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
15 int co_flags; /* CO_..., see below */
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
16 PyObject *co_code; /* instruction opcodes */
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
17 PyObject *co_consts; /* list (constants used) */
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
18 PyObject *co_names; /* list of strings (names used) */
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
19 PyObject *co_varnames; /* tuple of strings (local variable names) */
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
20 PyObject *co_freevars; /* tuple of strings (free variable names) */
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
21 PyObject *co_cellvars; /* tuple of strings (cell variable names) */
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
22 /* The rest doesn't count for hash/cmp */
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
23 PyObject *co_filename; /* string (where it was loaded from) */
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
24 PyObject *co_name; /* string (name, for reference) */
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
25 int co_firstlineno; /* first source line number */
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
26 PyObject *co_lnotab; /* string (encoding addr<->lineno mapping) */
38244
a637c78bf119 Merge from rjones-funccall branch.
Richard Jones <richard@commonground.com.au>
parents: 37838
diff changeset
27 void *co_zombieframe; /* for optimization only (see frameobject.c) */
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
28 } PyCodeObject;
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
29
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
30 /* Masks for co_flags above */
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
31 #define CO_OPTIMIZED 0x0001
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
32 #define CO_NEWLOCALS 0x0002
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
33 #define CO_VARARGS 0x0004
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
34 #define CO_VARKEYWORDS 0x0008
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
35 #define CO_NESTED 0x0010
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
36 #define CO_GENERATOR 0x0020
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
37 /* The CO_NOFREE flag is set if there are no free or cell variables.
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
38 This information is redundant, but it allows a single flag test
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
39 to determine whether there is any extra work to be done when the
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
40 call frame it setup.
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
41 */
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
42 #define CO_NOFREE 0x0040
36602
9c0fd586475c Generators have been permanent for a while. This comment is no longer applicable.
Neal Norwitz <nnorwitz@gmail.com>
parents: 35744
diff changeset
43
36654
6b42920accc9 Per discussion on python-dev, remove CO_GENERATOR_ALLOWED. Leave comment about not removing yet.
Neal Norwitz <nnorwitz@gmail.com>
parents: 36602
diff changeset
44 #if 0
6b42920accc9 Per discussion on python-dev, remove CO_GENERATOR_ALLOWED. Leave comment about not removing yet.
Neal Norwitz <nnorwitz@gmail.com>
parents: 36602
diff changeset
45 /* This is no longer used. Stopped defining in 2.5, do not re-use. */
6b42920accc9 Per discussion on python-dev, remove CO_GENERATOR_ALLOWED. Leave comment about not removing yet.
Neal Norwitz <nnorwitz@gmail.com>
parents: 36602
diff changeset
46 #define CO_GENERATOR_ALLOWED 0x1000
6b42920accc9 Per discussion on python-dev, remove CO_GENERATOR_ALLOWED. Leave comment about not removing yet.
Neal Norwitz <nnorwitz@gmail.com>
parents: 36602
diff changeset
47 #endif
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
48 #define CO_FUTURE_DIVISION 0x2000
37418
cea54c9d921d Don't abbreviate ABS, use long name ABSOLUTE.
Neal Norwitz <nnorwitz@gmail.com>
parents: 36726
diff changeset
49 #define CO_FUTURE_ABSOLUTE_IMPORT 0x4000 /* do absolute imports by default */
36726
bbf16fd024df from __future__ import with_statement addon for 'with', mostly written by
Thomas Wouters <thomas@python.org>
parents: 36712
diff changeset
50 #define CO_FUTURE_WITH_STATEMENT 0x8000
45891
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 44350
diff changeset
51 #define CO_FUTURE_PRINT_FUNCTION 0x10000
46118
c78d3586c474 Patch #2477: Added from __future__ import unicode_literals
Christian Heimes <christian@cheimes.de>
parents: 45891
diff changeset
52 #define CO_FUTURE_UNICODE_LITERALS 0x20000
36726
bbf16fd024df from __future__ import with_statement addon for 'with', mostly written by
Thomas Wouters <thomas@python.org>
parents: 36712
diff changeset
53
bbf16fd024df from __future__ import with_statement addon for 'with', mostly written by
Thomas Wouters <thomas@python.org>
parents: 36712
diff changeset
54 /* This should be defined if a future statement modifies the syntax.
bbf16fd024df from __future__ import with_statement addon for 'with', mostly written by
Thomas Wouters <thomas@python.org>
parents: 36712
diff changeset
55 For example, when a keyword is added.
bbf16fd024df from __future__ import with_statement addon for 'with', mostly written by
Thomas Wouters <thomas@python.org>
parents: 36712
diff changeset
56 */
45891
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 44350
diff changeset
57 #if 1
36726
bbf16fd024df from __future__ import with_statement addon for 'with', mostly written by
Thomas Wouters <thomas@python.org>
parents: 36712
diff changeset
58 #define PY_PARSER_REQUIRES_FUTURE_KEYWORD
39779
b8fbd322760a with and as are now keywords. There are some generated files I can't recreate.
Neal Norwitz <nnorwitz@gmail.com>
parents: 39601
diff changeset
59 #endif
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
60
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
61 #define CO_MAXBLOCKS 20 /* Max static block nesting within a function */
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
62
35744
e7815495bb27 Use the newer names for APIs after the AST merge
Neal Norwitz <nnorwitz@gmail.com>
parents: 35742
diff changeset
63 PyAPI_DATA(PyTypeObject) PyCode_Type;
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
64
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
65 #define PyCode_Check(op) (Py_TYPE(op) == &PyCode_Type)
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
66 #define PyCode_GetNumFree(op) (PyTuple_GET_SIZE((op)->co_freevars))
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
67
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
68 /* Public interface */
35744
e7815495bb27 Use the newer names for APIs after the AST merge
Neal Norwitz <nnorwitz@gmail.com>
parents: 35742
diff changeset
69 PyAPI_FUNC(PyCodeObject *) PyCode_New(
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
70 int, int, int, int, PyObject *, PyObject *, PyObject *, PyObject *,
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
71 PyObject *, PyObject *, PyObject *, PyObject *, int, PyObject *);
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
72 /* same as struct above */
35744
e7815495bb27 Use the newer names for APIs after the AST merge
Neal Norwitz <nnorwitz@gmail.com>
parents: 35742
diff changeset
73 PyAPI_FUNC(int) PyCode_Addr2Line(PyCodeObject *, int);
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
74
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
75 /* for internal use only */
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
76 #define _PyCode_GETCODEPTR(co, pp) \
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
77 ((*Py_TYPE((co)->co_code)->tp_as_buffer->bf_getreadbuffer) \
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
78 ((co)->co_code, 0, (void **)(pp)))
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
79
37838
cc48985c3266 Refactor: Move code that uses co_lnotab from ceval to codeobject
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 37418
diff changeset
80 typedef struct _addr_pair {
cc48985c3266 Refactor: Move code that uses co_lnotab from ceval to codeobject
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 37418
diff changeset
81 int ap_lower;
cc48985c3266 Refactor: Move code that uses co_lnotab from ceval to codeobject
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 37418
diff changeset
82 int ap_upper;
cc48985c3266 Refactor: Move code that uses co_lnotab from ceval to codeobject
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 37418
diff changeset
83 } PyAddrPair;
cc48985c3266 Refactor: Move code that uses co_lnotab from ceval to codeobject
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 37418
diff changeset
84
cc48985c3266 Refactor: Move code that uses co_lnotab from ceval to codeobject
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 37418
diff changeset
85 /* Check whether lasti (an instruction offset) falls outside bounds
cc48985c3266 Refactor: Move code that uses co_lnotab from ceval to codeobject
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 37418
diff changeset
86 and whether it is a line number that should be traced. Returns
cc48985c3266 Refactor: Move code that uses co_lnotab from ceval to codeobject
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 37418
diff changeset
87 a line number if it should be traced or -1 if the line should not.
cc48985c3266 Refactor: Move code that uses co_lnotab from ceval to codeobject
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 37418
diff changeset
88
cc48985c3266 Refactor: Move code that uses co_lnotab from ceval to codeobject
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 37418
diff changeset
89 If lasti is not within bounds, updates bounds.
cc48985c3266 Refactor: Move code that uses co_lnotab from ceval to codeobject
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 37418
diff changeset
90 */
cc48985c3266 Refactor: Move code that uses co_lnotab from ceval to codeobject
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 37418
diff changeset
91
cc48985c3266 Refactor: Move code that uses co_lnotab from ceval to codeobject
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 37418
diff changeset
92 PyAPI_FUNC(int) PyCode_CheckLineNumber(PyCodeObject* co,
cc48985c3266 Refactor: Move code that uses co_lnotab from ceval to codeobject
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 37418
diff changeset
93 int lasti, PyAddrPair *bounds);
cc48985c3266 Refactor: Move code that uses co_lnotab from ceval to codeobject
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 37418
diff changeset
94
39601
eeda2704130e Move peephole optimizer to separate file. (Forgot .h in previous checkin.)
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 38244
diff changeset
95 PyAPI_FUNC(PyObject*) PyCode_Optimize(PyObject *code, PyObject* consts,
eeda2704130e Move peephole optimizer to separate file. (Forgot .h in previous checkin.)
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 38244
diff changeset
96 PyObject *names, PyObject *lineno_obj);
eeda2704130e Move peephole optimizer to separate file. (Forgot .h in previous checkin.)
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 38244
diff changeset
97
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
98 #ifdef __cplusplus
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
99 }
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
100 #endif
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
101 #endif /* !Py_CODE_H */