annotate Include/code.h @ 58973:db86bf39ccaa legacy-trunk

Issue 7970: When email.Parser.Parser parses a MIME message of type message/rfc822 it turns it into an object whose body consists of a list containing a single Message object. HeaderParser, on the other hand, just copies the body as a string. Generator.flatten has a special handler for the message mime type that expected the body to be the one item list. This fails if the message was parsed by HeaderParser. So we now check to see if the body is a string first, and if so just we just emit it.
author R. David Murray <rdmurray@bitdance.com>
date Sun, 21 Feb 2010 04:23:00 +0000
parents dddf424bd669
children 22f589a8e3ab
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 */
54297
dddf424bd669 Issue #6042:
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 53931
diff changeset
26 PyObject *co_lnotab; /* string (encoding addr<->lineno mapping) See
dddf424bd669 Issue #6042:
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 53931
diff changeset
27 Objects/lnotab_notes.txt for details. */
38244
a637c78bf119 Merge from rjones-funccall branch.
Richard Jones <richard@commonground.com.au>
parents: 37838
diff changeset
28 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
29 } PyCodeObject;
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
30
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
31 /* Masks for co_flags above */
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
32 #define CO_OPTIMIZED 0x0001
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
33 #define CO_NEWLOCALS 0x0002
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
34 #define CO_VARARGS 0x0004
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
35 #define CO_VARKEYWORDS 0x0008
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
36 #define CO_NESTED 0x0010
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
37 #define CO_GENERATOR 0x0020
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
38 /* 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
39 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
40 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
41 call frame it setup.
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
42 */
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
43 #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
44
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
45 #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
46 /* 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
47 #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
48 #endif
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
49 #define CO_FUTURE_DIVISION 0x2000
37418
cea54c9d921d Don't abbreviate ABS, use long name ABSOLUTE.
Neal Norwitz <nnorwitz@gmail.com>
parents: 36726
diff changeset
50 #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
51 #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
52 #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
53 #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
54
bbf16fd024df from __future__ import with_statement addon for 'with', mostly written by
Thomas Wouters <thomas@python.org>
parents: 36712
diff changeset
55 /* 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
56 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
57 */
45891
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 44350
diff changeset
58 #if 1
36726
bbf16fd024df from __future__ import with_statement addon for 'with', mostly written by
Thomas Wouters <thomas@python.org>
parents: 36712
diff changeset
59 #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
60 #endif
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
61
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
62 #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
63
35744
e7815495bb27 Use the newer names for APIs after the AST merge
Neal Norwitz <nnorwitz@gmail.com>
parents: 35742
diff changeset
64 PyAPI_DATA(PyTypeObject) PyCode_Type;
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
65
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
66 #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
67 #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
68
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
69 /* Public interface */
35744
e7815495bb27 Use the newer names for APIs after the AST merge
Neal Norwitz <nnorwitz@gmail.com>
parents: 35742
diff changeset
70 PyAPI_FUNC(PyCodeObject *) PyCode_New(
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
71 int, int, int, int, PyObject *, PyObject *, PyObject *, PyObject *,
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
72 PyObject *, PyObject *, PyObject *, PyObject *, int, PyObject *);
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
73 /* same as struct above */
53930
a171048daf76 PyCode_NewEmpty:
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 46118
diff changeset
74
a171048daf76 PyCode_NewEmpty:
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 46118
diff changeset
75 /* Creates a new empty code object with the specified source location. */
a171048daf76 PyCode_NewEmpty:
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 46118
diff changeset
76 PyAPI_FUNC(PyCodeObject *)
a171048daf76 PyCode_NewEmpty:
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 46118
diff changeset
77 PyCode_NewEmpty(const char *filename, const char *funcname, int firstlineno);
a171048daf76 PyCode_NewEmpty:
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 46118
diff changeset
78
53931
9ef683d41c9b Issue 5954, PyFrame_GetLineNumber:
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 53930
diff changeset
79 /* Return the line number associated with the specified bytecode index
9ef683d41c9b Issue 5954, PyFrame_GetLineNumber:
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 53930
diff changeset
80 in this code object. If you just need the line number of a frame,
9ef683d41c9b Issue 5954, PyFrame_GetLineNumber:
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 53930
diff changeset
81 use PyFrame_GetLineNumber() instead. */
35744
e7815495bb27 Use the newer names for APIs after the AST merge
Neal Norwitz <nnorwitz@gmail.com>
parents: 35742
diff changeset
82 PyAPI_FUNC(int) PyCode_Addr2Line(PyCodeObject *, int);
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
83
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
84 /* for internal use only */
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
85 #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
86 ((*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
87 ((co)->co_code, 0, (void **)(pp)))
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
88
37838
cc48985c3266 Refactor: Move code that uses co_lnotab from ceval to codeobject
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 37418
diff changeset
89 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
90 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
91 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
92 } PyAddrPair;
cc48985c3266 Refactor: Move code that uses co_lnotab from ceval to codeobject
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 37418
diff changeset
93
54297
dddf424bd669 Issue #6042:
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 53931
diff changeset
94 /* Update *bounds to describe the first and one-past-the-last instructions in the
dddf424bd669 Issue #6042:
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 53931
diff changeset
95 same line as lasti. Return the number of that line.
37838
cc48985c3266 Refactor: Move code that uses co_lnotab from ceval to codeobject
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 37418
diff changeset
96 */
54297
dddf424bd669 Issue #6042:
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 53931
diff changeset
97 PyAPI_FUNC(int) _PyCode_CheckLineNumber(PyCodeObject* co,
dddf424bd669 Issue #6042:
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 53931
diff changeset
98 int lasti, PyAddrPair *bounds);
37838
cc48985c3266 Refactor: Move code that uses co_lnotab from ceval to codeobject
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 37418
diff changeset
99
39601
eeda2704130e Move peephole optimizer to separate file. (Forgot .h in previous checkin.)
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 38244
diff changeset
100 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
101 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
102
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
103 #ifdef __cplusplus
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
104 }
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
105 #endif
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
106 #endif /* !Py_CODE_H */