Orbits
1
Main Page
Related Pages
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Properties
Macros
Pages
usr
local
include
python2.7
code.h
Go to the documentation of this file.
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) See
27
Objects/lnotab_notes.txt for details. */
28
void
*
co_zombieframe
;
/* for optimization only (see frameobject.c) */
29
PyObject
*
co_weakreflist
;
/* to support weakrefs to code objects */
30
}
PyCodeObject
;
31
32
/* Masks for co_flags above */
33
#define CO_OPTIMIZED 0x0001
34
#define CO_NEWLOCALS 0x0002
35
#define CO_VARARGS 0x0004
36
#define CO_VARKEYWORDS 0x0008
37
#define CO_NESTED 0x0010
38
#define CO_GENERATOR 0x0020
39
/* The CO_NOFREE flag is set if there are no free or cell variables.
40
This information is redundant, but it allows a single flag test
41
to determine whether there is any extra work to be done when the
42
call frame it setup.
43
*/
44
#define CO_NOFREE 0x0040
45
46
#if 0
47
/* This is no longer used. Stopped defining in 2.5, do not re-use. */
48
#define CO_GENERATOR_ALLOWED 0x1000
49
#endif
50
#define CO_FUTURE_DIVISION 0x2000
51
#define CO_FUTURE_ABSOLUTE_IMPORT 0x4000
/* do absolute imports by default */
52
#define CO_FUTURE_WITH_STATEMENT 0x8000
53
#define CO_FUTURE_PRINT_FUNCTION 0x10000
54
#define CO_FUTURE_UNICODE_LITERALS 0x20000
55
56
/* This should be defined if a future statement modifies the syntax.
57
For example, when a keyword is added.
58
*/
59
#if 1
60
#define PY_PARSER_REQUIRES_FUTURE_KEYWORD
61
#endif
62
63
#define CO_MAXBLOCKS 20
/* Max static block nesting within a function */
64
65
PyAPI_DATA
(
PyTypeObject
) PyCode_Type;
66
67
#define PyCode_Check(op) (Py_TYPE(op) == &PyCode_Type)
68
#define PyCode_GetNumFree(op) (PyTuple_GET_SIZE((op)->co_freevars))
69
70
/* Public interface */
71
PyAPI_FUNC
(
PyCodeObject
*) PyCode_New(
72
int
,
int
,
int
,
int
,
PyObject
*,
PyObject
*,
PyObject
*,
PyObject
*,
73
PyObject
*,
PyObject
*,
PyObject
*,
PyObject
*,
int
,
PyObject
*);
74
/* same as struct above */
75
76
/* Creates a new empty code object with the specified source location. */
77
PyAPI_FUNC
(
PyCodeObject
*)
78
PyCode_NewEmpty(const
char
*filename, const
char
*
funcname
,
int
firstlineno
);
79
80
/* Return the line number associated with the specified bytecode index
81
in this code object. If you just need the line number of a frame,
82
use PyFrame_GetLineNumber() instead. */
83
PyAPI_FUNC
(
int
) PyCode_Addr2Line(
PyCodeObject
*,
int
);
84
85
/* for internal use only */
86
#define _PyCode_GETCODEPTR(co, pp) \
87
((*Py_TYPE((co)->co_code)->tp_as_buffer->bf_getreadbuffer) \
88
((co)->co_code, 0, (void **)(pp)))
89
90
typedef
struct
_addr_pair
{
91
int
ap_lower
;
92
int
ap_upper
;
93
}
PyAddrPair
;
94
95
/* Update *bounds to describe the first and one-past-the-last instructions in the
96
same line as lasti. Return the number of that line.
97
*/
98
PyAPI_FUNC
(
int
) _PyCode_CheckLineNumber(PyCodeObject*
co
,
99
int
lasti
,
PyAddrPair
*
bounds
);
100
101
PyAPI_FUNC
(
PyObject
*) PyCode_Optimize(
PyObject
*
code
,
PyObject
*
consts
,
102
PyObject
*
names
,
PyObject
*
lineno_obj
);
103
104
#ifdef __cplusplus
105
}
106
#endif
107
#endif
/* !Py_CODE_H */
Fri Nov 21 2014 12:23:28
1.8.3.1
Copyright 2014 Google Inc. All rights reserved.