Mercurial > cpython-lru_cache-weakref
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 |
| rev | line source |
|---|---|
| 35742 | 1 /* Definitions for bytecode */ |
| 2 | |
| 3 #ifndef Py_CODE_H | |
| 4 #define Py_CODE_H | |
| 5 #ifdef __cplusplus | |
| 6 extern "C" { | |
| 7 #endif | |
| 8 | |
| 9 /* Bytecode object */ | |
| 10 typedef struct { | |
| 11 PyObject_HEAD | |
| 12 int co_argcount; /* #arguments, except *args */ | |
| 13 int co_nlocals; /* #local variables */ | |
| 14 int co_stacksize; /* #entries needed for evaluation stack */ | |
| 15 int co_flags; /* CO_..., see below */ | |
| 16 PyObject *co_code; /* instruction opcodes */ | |
| 17 PyObject *co_consts; /* list (constants used) */ | |
| 18 PyObject *co_names; /* list of strings (names used) */ | |
| 19 PyObject *co_varnames; /* tuple of strings (local variable names) */ | |
| 20 PyObject *co_freevars; /* tuple of strings (free variable names) */ | |
| 21 PyObject *co_cellvars; /* tuple of strings (cell variable names) */ | |
| 22 /* The rest doesn't count for hash/cmp */ | |
| 23 PyObject *co_filename; /* string (where it was loaded from) */ | |
| 24 PyObject *co_name; /* string (name, for reference) */ | |
| 25 int co_firstlineno; /* first source line number */ | |
| 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 | 28 } PyCodeObject; |
| 29 | |
| 30 /* Masks for co_flags above */ | |
| 31 #define CO_OPTIMIZED 0x0001 | |
| 32 #define CO_NEWLOCALS 0x0002 | |
| 33 #define CO_VARARGS 0x0004 | |
| 34 #define CO_VARKEYWORDS 0x0008 | |
| 35 #define CO_NESTED 0x0010 | |
| 36 #define CO_GENERATOR 0x0020 | |
| 37 /* The CO_NOFREE flag is set if there are no free or cell variables. | |
| 38 This information is redundant, but it allows a single flag test | |
| 39 to determine whether there is any extra work to be done when the | |
| 40 call frame it setup. | |
| 41 */ | |
| 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 | 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 | 60 |
| 61 #define CO_MAXBLOCKS 20 /* Max static block nesting within a function */ | |
| 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 | 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 | 66 #define PyCode_GetNumFree(op) (PyTuple_GET_SIZE((op)->co_freevars)) |
| 67 | |
| 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 | 70 int, int, int, int, PyObject *, PyObject *, PyObject *, PyObject *, |
| 71 PyObject *, PyObject *, PyObject *, PyObject *, int, PyObject *); | |
| 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 | 74 |
| 75 /* for internal use only */ | |
| 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 | 78 ((co)->co_code, 0, (void **)(pp))) |
| 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 | 98 #ifdef __cplusplus |
| 99 } | |
| 100 #endif | |
| 101 #endif /* !Py_CODE_H */ |
