2 * This file compiles an abstract syntax tree (AST) into Python bytecode.
4 * The primary entry point is PyAST_Compile(), which returns a
5 * PyCodeObject. The compiler makes several passes to build the code
7 * 1. Checks for future statements. See future.c
8 * 2. Builds a symbol table. See symtable.c.
9 * 3. Generate code for basic blocks. See compiler_mod() in this file.
10 * 4. Assemble the basic blocks into final code. See assemble() in
12 * 5. Optimize the byte code (peephole optimizations). See peephole.c
14 * Note that compiler_mod() suggests module, but the module ast type
15 * (mod_ty) has cases for expressions and interactive statements.
17 * CAUTION: The VISIT_* macros abort the current function when they
18 * encounter a problem. So don't invoke them when there is memory
19 * which needs to be released. Code blocks are OK, as the compiler
20 * structure takes care of releasing those. Use the arena to manage
26 #include "Python-ast.h"
35 int Py_OptimizeFlag
= 0;
37 #define DEFAULT_BLOCK_SIZE 16
38 #define DEFAULT_BLOCKS 8
39 #define DEFAULT_CODE_SIZE 128
40 #define DEFAULT_LNOTAB_SIZE 16
45 unsigned i_hasarg
: 1;
46 unsigned char i_opcode
;
48 struct basicblock_
*i_target
; /* target block (if jump instruction) */
52 typedef struct basicblock_
{
53 /* Each basicblock in a compilation unit is linked via b_list in the
54 reverse order that the block are allocated. b_list points to the next
55 block, not to be confused with b_next, which is next by control flow. */
56 struct basicblock_
*b_list
;
57 /* number of instructions used */
59 /* length of instruction array (b_instr) */
61 /* pointer to an array of instructions, initially NULL */
62 struct instr
*b_instr
;
63 /* If b_next is non-NULL, it is a pointer to the next
64 block reached by normal control flow. */
65 struct basicblock_
*b_next
;
66 /* b_seen is used to perform a DFS of basicblocks. */
68 /* b_return is true if a RETURN_VALUE opcode is inserted. */
69 unsigned b_return
: 1;
70 /* depth of stack upon entry of block, computed by stackdepth() */
72 /* instruction offset for block, computed by assemble_jump_offsets() */
76 /* fblockinfo tracks the current frame block.
78 A frame block is used to handle loops, try/except, and try/finally.
79 It's called a frame block to distinguish it from a basic block in the
83 enum fblocktype
{ LOOP
, EXCEPT
, FINALLY_TRY
, FINALLY_END
};
86 enum fblocktype fb_type
;
90 /* The following items change on entry and exit of code blocks.
91 They must be saved and restored when returning to a block.
93 struct compiler_unit
{
94 PySTEntryObject
*u_ste
;
97 /* The following fields are dicts that map objects to
98 the index of them in co_XXX. The index is used as
99 the argument for opcodes that refer to those collections.
101 PyObject
*u_consts
; /* all constants */
102 PyObject
*u_names
; /* all names */
103 PyObject
*u_varnames
; /* local variables */
104 PyObject
*u_cellvars
; /* cell variables */
105 PyObject
*u_freevars
; /* free variables */
107 PyObject
*u_private
; /* for private name mangling */
109 int u_argcount
; /* number of arguments for block */
110 /* Pointer to the most recently allocated block. By following b_list
111 members, you can reach all early allocated blocks. */
112 basicblock
*u_blocks
;
113 basicblock
*u_curblock
; /* pointer to current block */
114 int u_tmpname
; /* temporary variables for list comps */
117 struct fblockinfo u_fblock
[CO_MAXBLOCKS
];
119 int u_firstlineno
; /* the first lineno of the block */
120 int u_lineno
; /* the lineno for the current stmt */
121 bool u_lineno_set
; /* boolean to indicate whether instr
122 has been generated with current lineno */
125 /* This struct captures the global state of a compilation.
127 The u pointer points to the current compilation unit, while units
128 for enclosing blocks are stored in c_stack. The u and c_stack are
129 managed by compiler_enter_scope() and compiler_exit_scope().
133 const char *c_filename
;
134 struct symtable
*c_st
;
135 PyFutureFeatures
*c_future
; /* pointer to module's __future__ */
136 PyCompilerFlags
*c_flags
;
138 int c_interactive
; /* true if in interactive mode */
141 struct compiler_unit
*u
; /* compiler state for current block */
142 PyObject
*c_stack
; /* Python list holding compiler_unit ptrs */
143 char *c_encoding
; /* source encoding (a borrowed reference) */
144 PyArena
*c_arena
; /* pointer to memory allocation arena */
147 static int compiler_enter_scope(struct compiler
*, identifier
, void *, int);
148 static void compiler_free(struct compiler
*);
149 static basicblock
*compiler_new_block(struct compiler
*);
150 static int compiler_next_instr(struct compiler
*, basicblock
*);
151 static int compiler_addop(struct compiler
*, int);
152 static int compiler_addop_o(struct compiler
*, int, PyObject
*, PyObject
*);
153 static int compiler_addop_i(struct compiler
*, int, int);
154 static int compiler_addop_j(struct compiler
*, int, basicblock
*, int);
155 static basicblock
*compiler_use_new_block(struct compiler
*);
156 static int compiler_error(struct compiler
*, const char *);
157 static int compiler_nameop(struct compiler
*, identifier
, expr_context_ty
);
159 static PyCodeObject
*compiler_mod(struct compiler
*, mod_ty
);
160 static int compiler_visit_stmt(struct compiler
*, stmt_ty
);
161 static int compiler_visit_keyword(struct compiler
*, keyword_ty
);
162 static int compiler_visit_expr(struct compiler
*, expr_ty
);
163 static int compiler_augassign(struct compiler
*, stmt_ty
);
164 static int compiler_visit_slice(struct compiler
*, slice_ty
,
167 static int compiler_push_fblock(struct compiler
*, enum fblocktype
,
169 static void compiler_pop_fblock(struct compiler
*, enum fblocktype
,
171 /* Returns true if there is a loop on the fblock stack. */
172 static int compiler_in_loop(struct compiler
*);
174 static int inplace_binop(struct compiler
*, operator_ty
);
175 static int expr_constant(expr_ty e
);
177 static int compiler_with(struct compiler
*, stmt_ty
);
179 static PyCodeObject
*assemble(struct compiler
*, int addNone
);
180 static PyObject
*__doc__
;
183 _Py_Mangle(PyObject
*privateobj
, PyObject
*ident
)
185 /* Name mangling: __private becomes _classname__private.
186 This is independent from how the name is used. */
187 const char *p
, *name
= PyString_AsString(ident
);
190 if (privateobj
== NULL
|| !PyString_Check(privateobj
) ||
191 name
== NULL
|| name
[0] != '_' || name
[1] != '_') {
195 p
= PyString_AsString(privateobj
);
197 /* Don't mangle __id__ or names with dots.
199 The only time a name with a dot can occur is when
200 we are compiling an import statement that has a
203 TODO(jhylton): Decide whether we want to support
204 mangling of the module name, e.g. __M.X.
206 if ((name
[nlen
-1] == '_' && name
[nlen
-2] == '_')
207 || strchr(name
, '.')) {
209 return ident
; /* Don't mangle __whatever__ */
211 /* Strip leading underscores from class name */
216 return ident
; /* Don't mangle if class is just underscores */
220 assert(1 <= PY_SSIZE_T_MAX
- nlen
);
221 assert(1 + nlen
<= PY_SSIZE_T_MAX
- plen
);
223 ident
= PyString_FromStringAndSize(NULL
, 1 + nlen
+ plen
);
226 /* ident = "_" + p[:plen] + name # i.e. 1+plen+nlen bytes */
227 buffer
= PyString_AS_STRING(ident
);
229 strncpy(buffer
+1, p
, plen
);
230 strcpy(buffer
+1+plen
, name
);
235 compiler_init(struct compiler
*c
)
237 memset(c
, 0, sizeof(struct compiler
));
239 c
->c_stack
= PyList_New(0);
247 PyAST_Compile(mod_ty mod
, const char *filename
, PyCompilerFlags
*flags
,
251 PyCodeObject
*co
= NULL
;
252 PyCompilerFlags local_flags
;
256 __doc__
= PyString_InternFromString("__doc__");
261 if (!compiler_init(&c
))
263 c
.c_filename
= filename
;
265 c
.c_future
= PyFuture_FromAST(mod
, filename
);
266 if (c
.c_future
== NULL
)
269 local_flags
.cf_flags
= 0;
270 flags
= &local_flags
;
272 merged
= c
.c_future
->ff_features
| flags
->cf_flags
;
273 c
.c_future
->ff_features
= merged
;
274 flags
->cf_flags
= merged
;
278 c
.c_st
= PySymtable_Build(mod
, filename
, c
.c_future
);
279 if (c
.c_st
== NULL
) {
280 if (!PyErr_Occurred())
281 PyErr_SetString(PyExc_SystemError
, "no symtable");
285 /* XXX initialize to NULL for now, need to handle */
288 co
= compiler_mod(&c
, mod
);
292 assert(co
|| PyErr_Occurred());
297 PyNode_Compile(struct _node
*n
, const char *filename
)
299 PyCodeObject
*co
= NULL
;
301 PyArena
*arena
= PyArena_New();
304 mod
= PyAST_FromNode(n
, NULL
, filename
, arena
);
306 co
= PyAST_Compile(mod
, filename
, NULL
, arena
);
312 compiler_free(struct compiler
*c
)
315 PySymtable_Free(c
->c_st
);
317 PyObject_Free(c
->c_future
);
318 Py_DECREF(c
->c_stack
);
322 list2dict(PyObject
*list
)
326 PyObject
*dict
= PyDict_New();
327 if (!dict
) return NULL
;
329 n
= PyList_Size(list
);
330 for (i
= 0; i
< n
; i
++) {
331 v
= PyInt_FromLong(i
);
336 k
= PyList_GET_ITEM(list
, i
);
337 k
= PyTuple_Pack(2, k
, k
->ob_type
);
338 if (k
== NULL
|| PyDict_SetItem(dict
, k
, v
) < 0) {
350 /* Return new dict containing names from src that match scope(s).
352 src is a symbol table dictionary. If the scope of a name matches
353 either scope_type or flag is set, insert it into the new dict. The
354 values are integers, starting at offset and increasing by one for
359 dictbytype(PyObject
*src
, int scope_type
, int flag
, int offset
)
361 Py_ssize_t pos
= 0, i
= offset
, scope
;
362 PyObject
*k
, *v
, *dest
= PyDict_New();
368 while (PyDict_Next(src
, &pos
, &k
, &v
)) {
369 /* XXX this should probably be a macro in symtable.h */
370 assert(PyInt_Check(v
));
371 scope
= (PyInt_AS_LONG(v
) >> SCOPE_OFF
) & SCOPE_MASK
;
373 if (scope
== scope_type
|| PyInt_AS_LONG(v
) & flag
) {
374 PyObject
*tuple
, *item
= PyInt_FromLong(i
);
380 tuple
= PyTuple_Pack(2, k
, k
->ob_type
);
381 if (!tuple
|| PyDict_SetItem(dest
, tuple
, item
) < 0) {
395 compiler_unit_check(struct compiler_unit
*u
)
398 for (block
= u
->u_blocks
; block
!= NULL
; block
= block
->b_list
) {
399 assert((void *)block
!= (void *)0xcbcbcbcb);
400 assert((void *)block
!= (void *)0xfbfbfbfb);
401 assert((void *)block
!= (void *)0xdbdbdbdb);
402 if (block
->b_instr
!= NULL
) {
403 assert(block
->b_ialloc
> 0);
404 assert(block
->b_iused
> 0);
405 assert(block
->b_ialloc
>= block
->b_iused
);
408 assert (block
->b_iused
== 0);
409 assert (block
->b_ialloc
== 0);
415 compiler_unit_free(struct compiler_unit
*u
)
417 basicblock
*b
, *next
;
419 compiler_unit_check(u
);
423 PyObject_Free((void *)b
->b_instr
);
425 PyObject_Free((void *)b
);
430 Py_CLEAR(u
->u_consts
);
431 Py_CLEAR(u
->u_names
);
432 Py_CLEAR(u
->u_varnames
);
433 Py_CLEAR(u
->u_freevars
);
434 Py_CLEAR(u
->u_cellvars
);
435 Py_CLEAR(u
->u_private
);
440 compiler_enter_scope(struct compiler
*c
, identifier name
, void *key
,
443 struct compiler_unit
*u
;
445 u
= (struct compiler_unit
*)PyObject_Malloc(sizeof(
446 struct compiler_unit
));
451 memset(u
, 0, sizeof(struct compiler_unit
));
453 u
->u_ste
= PySymtable_Lookup(c
->c_st
, key
);
455 compiler_unit_free(u
);
460 u
->u_varnames
= list2dict(u
->u_ste
->ste_varnames
);
461 u
->u_cellvars
= dictbytype(u
->u_ste
->ste_symbols
, CELL
, 0, 0);
462 if (!u
->u_varnames
|| !u
->u_cellvars
) {
463 compiler_unit_free(u
);
467 u
->u_freevars
= dictbytype(u
->u_ste
->ste_symbols
, FREE
, DEF_FREE_CLASS
,
468 PyDict_Size(u
->u_cellvars
));
469 if (!u
->u_freevars
) {
470 compiler_unit_free(u
);
477 u
->u_firstlineno
= lineno
;
479 u
->u_lineno_set
= false;
480 u
->u_consts
= PyDict_New();
482 compiler_unit_free(u
);
485 u
->u_names
= PyDict_New();
487 compiler_unit_free(u
);
493 /* Push the old compiler_unit on the stack. */
495 PyObject
*wrapper
= PyCObject_FromVoidPtr(c
->u
, NULL
);
496 if (!wrapper
|| PyList_Append(c
->c_stack
, wrapper
) < 0) {
498 compiler_unit_free(u
);
502 u
->u_private
= c
->u
->u_private
;
503 Py_XINCREF(u
->u_private
);
508 if (compiler_use_new_block(c
) == NULL
)
515 compiler_exit_scope(struct compiler
*c
)
521 compiler_unit_free(c
->u
);
522 /* Restore c->u to the parent unit. */
523 n
= PyList_GET_SIZE(c
->c_stack
) - 1;
525 wrapper
= PyList_GET_ITEM(c
->c_stack
, n
);
526 c
->u
= (struct compiler_unit
*)PyCObject_AsVoidPtr(wrapper
);
528 /* we are deleting from a list so this really shouldn't fail */
529 if (PySequence_DelItem(c
->c_stack
, n
) < 0)
530 Py_FatalError("compiler_exit_scope()");
531 compiler_unit_check(c
->u
);
538 /* Allocate a new "anonymous" local variable.
539 Used by list comprehensions and with statements.
543 compiler_new_tmpname(struct compiler
*c
)
546 PyOS_snprintf(tmpname
, sizeof(tmpname
), "_[%d]", ++c
->u
->u_tmpname
);
547 return PyString_FromString(tmpname
);
550 /* Allocate a new block and return a pointer to it.
551 Returns NULL on error.
555 compiler_new_block(struct compiler
*c
)
558 struct compiler_unit
*u
;
561 b
= (basicblock
*)PyObject_Malloc(sizeof(basicblock
));
566 memset((void *)b
, 0, sizeof(basicblock
));
567 /* Extend the singly linked list of blocks with new block. */
568 b
->b_list
= u
->u_blocks
;
574 compiler_use_new_block(struct compiler
*c
)
576 basicblock
*block
= compiler_new_block(c
);
579 c
->u
->u_curblock
= block
;
584 compiler_next_block(struct compiler
*c
)
586 basicblock
*block
= compiler_new_block(c
);
589 c
->u
->u_curblock
->b_next
= block
;
590 c
->u
->u_curblock
= block
;
595 compiler_use_next_block(struct compiler
*c
, basicblock
*block
)
597 assert(block
!= NULL
);
598 c
->u
->u_curblock
->b_next
= block
;
599 c
->u
->u_curblock
= block
;
603 /* Returns the offset of the next instruction in the current block's
604 b_instr array. Resizes the b_instr as necessary.
605 Returns -1 on failure.
609 compiler_next_instr(struct compiler
*c
, basicblock
*b
)
612 if (b
->b_instr
== NULL
) {
613 b
->b_instr
= (struct instr
*)PyObject_Malloc(
614 sizeof(struct instr
) * DEFAULT_BLOCK_SIZE
);
615 if (b
->b_instr
== NULL
) {
619 b
->b_ialloc
= DEFAULT_BLOCK_SIZE
;
620 memset((char *)b
->b_instr
, 0,
621 sizeof(struct instr
) * DEFAULT_BLOCK_SIZE
);
623 else if (b
->b_iused
== b
->b_ialloc
) {
625 size_t oldsize
, newsize
;
626 oldsize
= b
->b_ialloc
* sizeof(struct instr
);
627 newsize
= oldsize
<< 1;
629 if (oldsize
> (PY_SIZE_MAX
>> 1)) {
639 tmp
= (struct instr
*)PyObject_Realloc(
640 (void *)b
->b_instr
, newsize
);
646 memset((char *)b
->b_instr
+ oldsize
, 0, newsize
- oldsize
);
651 /* Set the i_lineno member of the instruction at offset off if the
652 line number for the current expression/statement has not
653 already been set. If it has been set, the call has no effect.
655 The line number is reset in the following cases:
656 - when entering a new scope
658 - on each expression that start a new line
659 - before the "except" clause
660 - before the "for" and "while" expressions
664 compiler_set_lineno(struct compiler
*c
, int off
)
667 if (c
->u
->u_lineno_set
)
669 c
->u
->u_lineno_set
= true;
670 b
= c
->u
->u_curblock
;
671 b
->b_instr
[off
].i_lineno
= c
->u
->u_lineno
;
675 opcode_stack_effect(int opcode
, int oparg
)
699 case BINARY_MULTIPLY
:
703 case BINARY_SUBTRACT
:
705 case BINARY_FLOOR_DIVIDE
:
706 case BINARY_TRUE_DIVIDE
:
708 case INPLACE_FLOOR_DIVIDE
:
709 case INPLACE_TRUE_DIVIDE
:
740 case INPLACE_SUBTRACT
:
741 case INPLACE_MULTIPLY
:
771 case PRINT_NEWLINE_TO
:
782 return -1; /* XXX Sometimes more */
797 return -1; /* or -2 or -3 if exception occurred */
805 case UNPACK_SEQUENCE
:
853 return 3; /* actually pushed by an exception */
864 #define NARGS(o) (((o) % 256) + 2*((o) / 256))
866 return -NARGS(oparg
);
867 case CALL_FUNCTION_VAR
:
868 case CALL_FUNCTION_KW
:
869 return -NARGS(oparg
)-1;
870 case CALL_FUNCTION_VAR_KW
:
871 return -NARGS(oparg
)-2;
890 fprintf(stderr
, "opcode = %d\n", opcode
);
891 Py_FatalError("opcode_stack_effect()");
894 return 0; /* not reachable */
897 /* Add an opcode with no argument.
898 Returns 0 on failure, 1 on success.
902 compiler_addop(struct compiler
*c
, int opcode
)
907 off
= compiler_next_instr(c
, c
->u
->u_curblock
);
910 b
= c
->u
->u_curblock
;
911 i
= &b
->b_instr
[off
];
912 i
->i_opcode
= opcode
;
914 if (opcode
== RETURN_VALUE
)
916 compiler_set_lineno(c
, off
);
921 compiler_add_o(struct compiler
*c
, PyObject
*dict
, PyObject
*o
)
925 unsigned char *p
, *q
;
928 int real_part_zero
, imag_part_zero
;
930 /* necessary to make sure types aren't coerced (e.g., int and long) */
931 /* _and_ to distinguish 0.0 from -0.0 e.g. on IEEE platforms */
932 if (PyFloat_Check(o
)) {
933 d
= PyFloat_AS_DOUBLE(o
);
934 p
= (unsigned char*) &d
;
935 /* all we need is to make the tuple different in either the 0.0
936 * or -0.0 case from all others, just to avoid the "coercion".
938 if (*p
==0 && p
[sizeof(double)-1]==0)
939 t
= PyTuple_Pack(3, o
, o
->ob_type
, Py_None
);
941 t
= PyTuple_Pack(2, o
, o
->ob_type
);
943 else if (PyComplex_Check(o
)) {
944 /* complex case is even messier: we need to make complex(x,
945 0.) different from complex(x, -0.) and complex(0., y)
946 different from complex(-0., y), for any x and y. In
947 particular, all four complex zeros should be
949 z
= PyComplex_AsCComplex(o
);
950 p
= (unsigned char*) &(z
.real
);
951 q
= (unsigned char*) &(z
.imag
);
952 /* all that matters here is that on IEEE platforms
953 real_part_zero will be true if z.real == 0., and false if
954 z.real == -0. In fact, real_part_zero will also be true
955 for some other rarely occurring nonzero floats, but this
956 doesn't matter. Similar comments apply to
958 real_part_zero
= *p
==0 && p
[sizeof(double)-1]==0;
959 imag_part_zero
= *q
==0 && q
[sizeof(double)-1]==0;
960 if (real_part_zero
&& imag_part_zero
) {
961 t
= PyTuple_Pack(4, o
, o
->ob_type
, Py_True
, Py_True
);
963 else if (real_part_zero
&& !imag_part_zero
) {
964 t
= PyTuple_Pack(4, o
, o
->ob_type
, Py_True
, Py_False
);
966 else if (!real_part_zero
&& imag_part_zero
) {
967 t
= PyTuple_Pack(4, o
, o
->ob_type
, Py_False
, Py_True
);
970 t
= PyTuple_Pack(2, o
, o
->ob_type
);
974 t
= PyTuple_Pack(2, o
, o
->ob_type
);
979 v
= PyDict_GetItem(dict
, t
);
981 arg
= PyDict_Size(dict
);
982 v
= PyInt_FromLong(arg
);
987 if (PyDict_SetItem(dict
, t
, v
) < 0) {
995 arg
= PyInt_AsLong(v
);
1001 compiler_addop_o(struct compiler
*c
, int opcode
, PyObject
*dict
,
1004 int arg
= compiler_add_o(c
, dict
, o
);
1007 return compiler_addop_i(c
, opcode
, arg
);
1011 compiler_addop_name(struct compiler
*c
, int opcode
, PyObject
*dict
,
1015 PyObject
*mangled
= _Py_Mangle(c
->u
->u_private
, o
);
1018 arg
= compiler_add_o(c
, dict
, mangled
);
1022 return compiler_addop_i(c
, opcode
, arg
);
1025 /* Add an opcode with an integer argument.
1026 Returns 0 on failure, 1 on success.
1030 compiler_addop_i(struct compiler
*c
, int opcode
, int oparg
)
1034 off
= compiler_next_instr(c
, c
->u
->u_curblock
);
1037 i
= &c
->u
->u_curblock
->b_instr
[off
];
1038 i
->i_opcode
= opcode
;
1041 compiler_set_lineno(c
, off
);
1046 compiler_addop_j(struct compiler
*c
, int opcode
, basicblock
*b
, int absolute
)
1052 off
= compiler_next_instr(c
, c
->u
->u_curblock
);
1055 i
= &c
->u
->u_curblock
->b_instr
[off
];
1056 i
->i_opcode
= opcode
;
1063 compiler_set_lineno(c
, off
);
1067 /* The distinction between NEW_BLOCK and NEXT_BLOCK is subtle. (I'd
1068 like to find better names.) NEW_BLOCK() creates a new block and sets
1069 it as the current block. NEXT_BLOCK() also creates an implicit jump
1070 from the current block to the new block.
1073 /* The returns inside these macros make it impossible to decref objects
1074 created in the local function. Local objects should use the arena.
1078 #define NEW_BLOCK(C) { \
1079 if (compiler_use_new_block((C)) == NULL) \
1083 #define NEXT_BLOCK(C) { \
1084 if (compiler_next_block((C)) == NULL) \
1088 #define ADDOP(C, OP) { \
1089 if (!compiler_addop((C), (OP))) \
1093 #define ADDOP_IN_SCOPE(C, OP) { \
1094 if (!compiler_addop((C), (OP))) { \
1095 compiler_exit_scope(c); \
1100 #define ADDOP_O(C, OP, O, TYPE) { \
1101 if (!compiler_addop_o((C), (OP), (C)->u->u_ ## TYPE, (O))) \
1105 #define ADDOP_NAME(C, OP, O, TYPE) { \
1106 if (!compiler_addop_name((C), (OP), (C)->u->u_ ## TYPE, (O))) \
1110 #define ADDOP_I(C, OP, O) { \
1111 if (!compiler_addop_i((C), (OP), (O))) \
1115 #define ADDOP_JABS(C, OP, O) { \
1116 if (!compiler_addop_j((C), (OP), (O), 1)) \
1120 #define ADDOP_JREL(C, OP, O) { \
1121 if (!compiler_addop_j((C), (OP), (O), 0)) \
1125 /* VISIT and VISIT_SEQ takes an ASDL type as their second argument. They use
1126 the ASDL name to synthesize the name of the C type and the visit function.
1129 #define VISIT(C, TYPE, V) {\
1130 if (!compiler_visit_ ## TYPE((C), (V))) \
1134 #define VISIT_IN_SCOPE(C, TYPE, V) {\
1135 if (!compiler_visit_ ## TYPE((C), (V))) { \
1136 compiler_exit_scope(c); \
1141 #define VISIT_SLICE(C, V, CTX) {\
1142 if (!compiler_visit_slice((C), (V), (CTX))) \
1146 #define VISIT_SEQ(C, TYPE, SEQ) { \
1148 asdl_seq *seq = (SEQ); /* avoid variable capture */ \
1149 for (_i = 0; _i < asdl_seq_LEN(seq); _i++) { \
1150 TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, _i); \
1151 if (!compiler_visit_ ## TYPE((C), elt)) \
1156 #define VISIT_SEQ_IN_SCOPE(C, TYPE, SEQ) { \
1158 asdl_seq *seq = (SEQ); /* avoid variable capture */ \
1159 for (_i = 0; _i < asdl_seq_LEN(seq); _i++) { \
1160 TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, _i); \
1161 if (!compiler_visit_ ## TYPE((C), elt)) { \
1162 compiler_exit_scope(c); \
1169 compiler_isdocstring(stmt_ty s
)
1171 if (s
->kind
!= Expr_kind
)
1173 return s
->v
.Expr
.value
->kind
== Str_kind
;
1176 /* Compile a sequence of statements, checking for a docstring. */
1179 compiler_body(struct compiler
*c
, asdl_seq
*stmts
)
1184 if (!asdl_seq_LEN(stmts
))
1186 st
= (stmt_ty
)asdl_seq_GET(stmts
, 0);
1187 if (compiler_isdocstring(st
) && Py_OptimizeFlag
< 2) {
1188 /* don't generate docstrings if -OO */
1190 VISIT(c
, expr
, st
->v
.Expr
.value
);
1191 if (!compiler_nameop(c
, __doc__
, Store
))
1194 for (; i
< asdl_seq_LEN(stmts
); i
++)
1195 VISIT(c
, stmt
, (stmt_ty
)asdl_seq_GET(stmts
, i
));
1199 static PyCodeObject
*
1200 compiler_mod(struct compiler
*c
, mod_ty mod
)
1204 static PyObject
*module
;
1206 module
= PyString_InternFromString("<module>");
1210 /* Use 0 for firstlineno initially, will fixup in assemble(). */
1211 if (!compiler_enter_scope(c
, module
, mod
, 0))
1213 switch (mod
->kind
) {
1215 if (!compiler_body(c
, mod
->v
.Module
.body
)) {
1216 compiler_exit_scope(c
);
1220 case Interactive_kind
:
1221 c
->c_interactive
= 1;
1222 VISIT_SEQ_IN_SCOPE(c
, stmt
,
1223 mod
->v
.Interactive
.body
);
1225 case Expression_kind
:
1226 VISIT_IN_SCOPE(c
, expr
, mod
->v
.Expression
.body
);
1230 PyErr_SetString(PyExc_SystemError
,
1231 "suite should not be possible");
1234 PyErr_Format(PyExc_SystemError
,
1235 "module kind %d should not be possible",
1239 co
= assemble(c
, addNone
);
1240 compiler_exit_scope(c
);
1244 /* The test for LOCAL must come before the test for FREE in order to
1245 handle classes where name is both local and free. The local var is
1246 a method and the free var is a free var referenced within a method.
1250 get_ref_type(struct compiler
*c
, PyObject
*name
)
1252 int scope
= PyST_GetScope(c
->u
->u_ste
, name
);
1255 PyOS_snprintf(buf
, sizeof(buf
),
1256 "unknown scope for %.100s in %.100s(%s) in %s\n"
1257 "symbols: %s\nlocals: %s\nglobals: %s\n",
1258 PyString_AS_STRING(name
),
1259 PyString_AS_STRING(c
->u
->u_name
),
1260 PyObject_REPR(c
->u
->u_ste
->ste_id
),
1262 PyObject_REPR(c
->u
->u_ste
->ste_symbols
),
1263 PyObject_REPR(c
->u
->u_varnames
),
1264 PyObject_REPR(c
->u
->u_names
)
1273 compiler_lookup_arg(PyObject
*dict
, PyObject
*name
)
1276 k
= PyTuple_Pack(2, name
, name
->ob_type
);
1279 v
= PyDict_GetItem(dict
, k
);
1283 return PyInt_AS_LONG(v
);
1287 compiler_make_closure(struct compiler
*c
, PyCodeObject
*co
, int args
)
1289 int i
, free
= PyCode_GetNumFree(co
);
1291 ADDOP_O(c
, LOAD_CONST
, (PyObject
*)co
, consts
);
1292 ADDOP_I(c
, MAKE_FUNCTION
, args
);
1295 for (i
= 0; i
< free
; ++i
) {
1296 /* Bypass com_addop_varname because it will generate
1297 LOAD_DEREF but LOAD_CLOSURE is needed.
1299 PyObject
*name
= PyTuple_GET_ITEM(co
->co_freevars
, i
);
1302 /* Special case: If a class contains a method with a
1303 free variable that has the same name as a method,
1304 the name will be considered free *and* local in the
1305 class. It should be handled by the closure, as
1306 well as by the normal name loookup logic.
1308 reftype
= get_ref_type(c
, name
);
1309 if (reftype
== CELL
)
1310 arg
= compiler_lookup_arg(c
->u
->u_cellvars
, name
);
1311 else /* (reftype == FREE) */
1312 arg
= compiler_lookup_arg(c
->u
->u_freevars
, name
);
1314 printf("lookup %s in %s %d %d\n"
1315 "freevars of %s: %s\n",
1316 PyObject_REPR(name
),
1317 PyString_AS_STRING(c
->u
->u_name
),
1319 PyString_AS_STRING(co
->co_name
),
1320 PyObject_REPR(co
->co_freevars
));
1321 Py_FatalError("compiler_make_closure()");
1323 ADDOP_I(c
, LOAD_CLOSURE
, arg
);
1325 ADDOP_I(c
, BUILD_TUPLE
, free
);
1326 ADDOP_O(c
, LOAD_CONST
, (PyObject
*)co
, consts
);
1327 ADDOP_I(c
, MAKE_CLOSURE
, args
);
1332 compiler_decorators(struct compiler
*c
, asdl_seq
* decos
)
1339 for (i
= 0; i
< asdl_seq_LEN(decos
); i
++) {
1340 VISIT(c
, expr
, (expr_ty
)asdl_seq_GET(decos
, i
));
1346 compiler_arguments(struct compiler
*c
, arguments_ty args
)
1349 int n
= asdl_seq_LEN(args
->args
);
1350 /* Correctly handle nested argument lists */
1351 for (i
= 0; i
< n
; i
++) {
1352 expr_ty arg
= (expr_ty
)asdl_seq_GET(args
->args
, i
);
1353 if (arg
->kind
== Tuple_kind
) {
1354 PyObject
*id
= PyString_FromFormat(".%d", i
);
1358 if (!compiler_nameop(c
, id
, Load
)) {
1363 VISIT(c
, expr
, arg
);
1370 compiler_function(struct compiler
*c
, stmt_ty s
)
1373 PyObject
*first_const
= Py_None
;
1374 arguments_ty args
= s
->v
.FunctionDef
.args
;
1375 asdl_seq
* decos
= s
->v
.FunctionDef
.decorator_list
;
1377 int i
, n
, docstring
;
1379 assert(s
->kind
== FunctionDef_kind
);
1381 if (!compiler_decorators(c
, decos
))
1384 VISIT_SEQ(c
, expr
, args
->defaults
);
1385 if (!compiler_enter_scope(c
, s
->v
.FunctionDef
.name
, (void *)s
,
1389 st
= (stmt_ty
)asdl_seq_GET(s
->v
.FunctionDef
.body
, 0);
1390 docstring
= compiler_isdocstring(st
);
1391 if (docstring
&& Py_OptimizeFlag
< 2)
1392 first_const
= st
->v
.Expr
.value
->v
.Str
.s
;
1393 if (compiler_add_o(c
, c
->u
->u_consts
, first_const
) < 0) {
1394 compiler_exit_scope(c
);
1398 /* unpack nested arguments */
1399 compiler_arguments(c
, args
);
1401 c
->u
->u_argcount
= asdl_seq_LEN(args
->args
);
1402 n
= asdl_seq_LEN(s
->v
.FunctionDef
.body
);
1403 /* if there was a docstring, we need to skip the first statement */
1404 for (i
= docstring
; i
< n
; i
++) {
1405 st
= (stmt_ty
)asdl_seq_GET(s
->v
.FunctionDef
.body
, i
);
1406 VISIT_IN_SCOPE(c
, stmt
, st
);
1408 co
= assemble(c
, 1);
1409 compiler_exit_scope(c
);
1413 compiler_make_closure(c
, co
, asdl_seq_LEN(args
->defaults
));
1416 for (i
= 0; i
< asdl_seq_LEN(decos
); i
++) {
1417 ADDOP_I(c
, CALL_FUNCTION
, 1);
1420 return compiler_nameop(c
, s
->v
.FunctionDef
.name
, Store
);
1424 compiler_class(struct compiler
*c
, stmt_ty s
)
1429 asdl_seq
* decos
= s
->v
.ClassDef
.decorator_list
;
1431 if (!compiler_decorators(c
, decos
))
1434 /* push class name on stack, needed by BUILD_CLASS */
1435 ADDOP_O(c
, LOAD_CONST
, s
->v
.ClassDef
.name
, consts
);
1436 /* push the tuple of base classes on the stack */
1437 n
= asdl_seq_LEN(s
->v
.ClassDef
.bases
);
1439 VISIT_SEQ(c
, expr
, s
->v
.ClassDef
.bases
);
1440 ADDOP_I(c
, BUILD_TUPLE
, n
);
1441 if (!compiler_enter_scope(c
, s
->v
.ClassDef
.name
, (void *)s
,
1444 Py_XDECREF(c
->u
->u_private
);
1445 c
->u
->u_private
= s
->v
.ClassDef
.name
;
1446 Py_INCREF(c
->u
->u_private
);
1447 str
= PyString_InternFromString("__name__");
1448 if (!str
|| !compiler_nameop(c
, str
, Load
)) {
1450 compiler_exit_scope(c
);
1455 str
= PyString_InternFromString("__module__");
1456 if (!str
|| !compiler_nameop(c
, str
, Store
)) {
1458 compiler_exit_scope(c
);
1463 if (!compiler_body(c
, s
->v
.ClassDef
.body
)) {
1464 compiler_exit_scope(c
);
1468 ADDOP_IN_SCOPE(c
, LOAD_LOCALS
);
1469 ADDOP_IN_SCOPE(c
, RETURN_VALUE
);
1470 co
= assemble(c
, 1);
1471 compiler_exit_scope(c
);
1475 compiler_make_closure(c
, co
, 0);
1478 ADDOP_I(c
, CALL_FUNCTION
, 0);
1479 ADDOP(c
, BUILD_CLASS
);
1480 /* apply decorators */
1481 for (i
= 0; i
< asdl_seq_LEN(decos
); i
++) {
1482 ADDOP_I(c
, CALL_FUNCTION
, 1);
1484 if (!compiler_nameop(c
, s
->v
.ClassDef
.name
, Store
))
1490 compiler_ifexp(struct compiler
*c
, expr_ty e
)
1492 basicblock
*end
, *next
;
1494 assert(e
->kind
== IfExp_kind
);
1495 end
= compiler_new_block(c
);
1498 next
= compiler_new_block(c
);
1501 VISIT(c
, expr
, e
->v
.IfExp
.test
);
1502 ADDOP_JREL(c
, JUMP_IF_FALSE
, next
);
1504 VISIT(c
, expr
, e
->v
.IfExp
.body
);
1505 ADDOP_JREL(c
, JUMP_FORWARD
, end
);
1506 compiler_use_next_block(c
, next
);
1508 VISIT(c
, expr
, e
->v
.IfExp
.orelse
);
1509 compiler_use_next_block(c
, end
);
1514 compiler_lambda(struct compiler
*c
, expr_ty e
)
1517 static identifier name
;
1518 arguments_ty args
= e
->v
.Lambda
.args
;
1519 assert(e
->kind
== Lambda_kind
);
1522 name
= PyString_InternFromString("<lambda>");
1528 VISIT_SEQ(c
, expr
, args
->defaults
);
1529 if (!compiler_enter_scope(c
, name
, (void *)e
, e
->lineno
))
1532 /* unpack nested arguments */
1533 compiler_arguments(c
, args
);
1535 c
->u
->u_argcount
= asdl_seq_LEN(args
->args
);
1536 VISIT_IN_SCOPE(c
, expr
, e
->v
.Lambda
.body
);
1537 if (c
->u
->u_ste
->ste_generator
) {
1538 ADDOP_IN_SCOPE(c
, POP_TOP
);
1541 ADDOP_IN_SCOPE(c
, RETURN_VALUE
);
1543 co
= assemble(c
, 1);
1544 compiler_exit_scope(c
);
1548 compiler_make_closure(c
, co
, asdl_seq_LEN(args
->defaults
));
1555 compiler_print(struct compiler
*c
, stmt_ty s
)
1560 assert(s
->kind
== Print_kind
);
1561 n
= asdl_seq_LEN(s
->v
.Print
.values
);
1563 if (s
->v
.Print
.dest
) {
1564 VISIT(c
, expr
, s
->v
.Print
.dest
);
1567 for (i
= 0; i
< n
; i
++) {
1568 expr_ty e
= (expr_ty
)asdl_seq_GET(s
->v
.Print
.values
, i
);
1573 ADDOP(c
, PRINT_ITEM_TO
);
1577 ADDOP(c
, PRINT_ITEM
);
1580 if (s
->v
.Print
.nl
) {
1582 ADDOP(c
, PRINT_NEWLINE_TO
)
1584 ADDOP(c
, PRINT_NEWLINE
)
1592 compiler_if(struct compiler
*c
, stmt_ty s
)
1594 basicblock
*end
, *next
;
1596 assert(s
->kind
== If_kind
);
1597 end
= compiler_new_block(c
);
1600 next
= compiler_new_block(c
);
1604 constant
= expr_constant(s
->v
.If
.test
);
1605 /* constant = 0: "if 0"
1606 * constant = 1: "if 1", "if 2", ...
1607 * constant = -1: rest */
1608 if (constant
== 0) {
1610 VISIT_SEQ(c
, stmt
, s
->v
.If
.orelse
);
1611 } else if (constant
== 1) {
1612 VISIT_SEQ(c
, stmt
, s
->v
.If
.body
);
1614 VISIT(c
, expr
, s
->v
.If
.test
);
1615 ADDOP_JREL(c
, JUMP_IF_FALSE
, next
);
1617 VISIT_SEQ(c
, stmt
, s
->v
.If
.body
);
1618 ADDOP_JREL(c
, JUMP_FORWARD
, end
);
1619 compiler_use_next_block(c
, next
);
1622 VISIT_SEQ(c
, stmt
, s
->v
.If
.orelse
);
1624 compiler_use_next_block(c
, end
);
1629 compiler_for(struct compiler
*c
, stmt_ty s
)
1631 basicblock
*start
, *cleanup
, *end
;
1633 start
= compiler_new_block(c
);
1634 cleanup
= compiler_new_block(c
);
1635 end
= compiler_new_block(c
);
1636 if (start
== NULL
|| end
== NULL
|| cleanup
== NULL
)
1638 ADDOP_JREL(c
, SETUP_LOOP
, end
);
1639 if (!compiler_push_fblock(c
, LOOP
, start
))
1641 VISIT(c
, expr
, s
->v
.For
.iter
);
1643 compiler_use_next_block(c
, start
);
1644 /* for expressions must be traced on each iteration,
1645 so we need to set an extra line number. */
1646 c
->u
->u_lineno_set
= false;
1647 ADDOP_JREL(c
, FOR_ITER
, cleanup
);
1648 VISIT(c
, expr
, s
->v
.For
.target
);
1649 VISIT_SEQ(c
, stmt
, s
->v
.For
.body
);
1650 ADDOP_JABS(c
, JUMP_ABSOLUTE
, start
);
1651 compiler_use_next_block(c
, cleanup
);
1652 ADDOP(c
, POP_BLOCK
);
1653 compiler_pop_fblock(c
, LOOP
, start
);
1654 VISIT_SEQ(c
, stmt
, s
->v
.For
.orelse
);
1655 compiler_use_next_block(c
, end
);
1660 compiler_while(struct compiler
*c
, stmt_ty s
)
1662 basicblock
*loop
, *orelse
, *end
, *anchor
= NULL
;
1663 int constant
= expr_constant(s
->v
.While
.test
);
1665 if (constant
== 0) {
1666 if (s
->v
.While
.orelse
)
1667 VISIT_SEQ(c
, stmt
, s
->v
.While
.orelse
);
1670 loop
= compiler_new_block(c
);
1671 end
= compiler_new_block(c
);
1672 if (constant
== -1) {
1673 anchor
= compiler_new_block(c
);
1677 if (loop
== NULL
|| end
== NULL
)
1679 if (s
->v
.While
.orelse
) {
1680 orelse
= compiler_new_block(c
);
1687 ADDOP_JREL(c
, SETUP_LOOP
, end
);
1688 compiler_use_next_block(c
, loop
);
1689 if (!compiler_push_fblock(c
, LOOP
, loop
))
1691 if (constant
== -1) {
1692 /* while expressions must be traced on each iteration,
1693 so we need to set an extra line number. */
1694 c
->u
->u_lineno_set
= false;
1695 VISIT(c
, expr
, s
->v
.While
.test
);
1696 ADDOP_JREL(c
, JUMP_IF_FALSE
, anchor
);
1699 VISIT_SEQ(c
, stmt
, s
->v
.While
.body
);
1700 ADDOP_JABS(c
, JUMP_ABSOLUTE
, loop
);
1702 /* XXX should the two POP instructions be in a separate block
1703 if there is no else clause ?
1706 if (constant
== -1) {
1707 compiler_use_next_block(c
, anchor
);
1709 ADDOP(c
, POP_BLOCK
);
1711 compiler_pop_fblock(c
, LOOP
, loop
);
1712 if (orelse
!= NULL
) /* what if orelse is just pass? */
1713 VISIT_SEQ(c
, stmt
, s
->v
.While
.orelse
);
1714 compiler_use_next_block(c
, end
);
1720 compiler_continue(struct compiler
*c
)
1722 static const char LOOP_ERROR_MSG
[] = "'continue' not properly in loop";
1723 static const char IN_FINALLY_ERROR_MSG
[] =
1724 "'continue' not supported inside 'finally' clause";
1727 if (!c
->u
->u_nfblocks
)
1728 return compiler_error(c
, LOOP_ERROR_MSG
);
1729 i
= c
->u
->u_nfblocks
- 1;
1730 switch (c
->u
->u_fblock
[i
].fb_type
) {
1732 ADDOP_JABS(c
, JUMP_ABSOLUTE
, c
->u
->u_fblock
[i
].fb_block
);
1736 while (--i
>= 0 && c
->u
->u_fblock
[i
].fb_type
!= LOOP
) {
1737 /* Prevent continue anywhere under a finally
1738 even if hidden in a sub-try or except. */
1739 if (c
->u
->u_fblock
[i
].fb_type
== FINALLY_END
)
1740 return compiler_error(c
, IN_FINALLY_ERROR_MSG
);
1743 return compiler_error(c
, LOOP_ERROR_MSG
);
1744 ADDOP_JABS(c
, CONTINUE_LOOP
, c
->u
->u_fblock
[i
].fb_block
);
1747 return compiler_error(c
, IN_FINALLY_ERROR_MSG
);
1753 /* Code generated for "try: <body> finally: <finalbody>" is as follows:
1759 L: <code for finalbody>
1762 The special instructions use the block stack. Each block
1763 stack entry contains the instruction that created it (here
1764 SETUP_FINALLY), the level of the value stack at the time the
1765 block stack entry was created, and a label (here L).
1768 Pushes the current value stack level and the label
1769 onto the block stack.
1771 Pops en entry from the block stack, and pops the value
1772 stack until its level is the same as indicated on the
1773 block stack. (The label is ignored.)
1775 Pops a variable number of entries from the *value* stack
1776 and re-raises the exception they specify. The number of
1777 entries popped depends on the (pseudo) exception type.
1779 The block stack is unwound when an exception is raised:
1780 when a SETUP_FINALLY entry is found, the exception is pushed
1781 onto the value stack (and the exception condition is cleared),
1782 and the interpreter jumps to the label gotten from the block
1787 compiler_try_finally(struct compiler
*c
, stmt_ty s
)
1789 basicblock
*body
, *end
;
1790 body
= compiler_new_block(c
);
1791 end
= compiler_new_block(c
);
1792 if (body
== NULL
|| end
== NULL
)
1795 ADDOP_JREL(c
, SETUP_FINALLY
, end
);
1796 compiler_use_next_block(c
, body
);
1797 if (!compiler_push_fblock(c
, FINALLY_TRY
, body
))
1799 VISIT_SEQ(c
, stmt
, s
->v
.TryFinally
.body
);
1800 ADDOP(c
, POP_BLOCK
);
1801 compiler_pop_fblock(c
, FINALLY_TRY
, body
);
1803 ADDOP_O(c
, LOAD_CONST
, Py_None
, consts
);
1804 compiler_use_next_block(c
, end
);
1805 if (!compiler_push_fblock(c
, FINALLY_END
, end
))
1807 VISIT_SEQ(c
, stmt
, s
->v
.TryFinally
.finalbody
);
1808 ADDOP(c
, END_FINALLY
);
1809 compiler_pop_fblock(c
, FINALLY_END
, end
);
1815 Code generated for "try: S except E1, V1: S1 except E2, V2: S2 ...":
1816 (The contents of the value stack is shown in [], with the top
1817 at the right; 'tb' is trace-back info, 'val' the exception's
1818 associated value, and 'exc' the exception.)
1820 Value stack Label Instruction Argument
1826 [tb, val, exc] L1: DUP )
1827 [tb, val, exc, exc] <evaluate E1> )
1828 [tb, val, exc, exc, E1] COMPARE_OP EXC_MATCH ) only if E1
1829 [tb, val, exc, 1-or-0] JUMP_IF_FALSE L2 )
1830 [tb, val, exc, 1] POP )
1832 [tb, val] <assign to V1> (or POP if no V1)
1837 [tb, val, exc, 0] L2: POP
1839 .............................etc.......................
1841 [tb, val, exc, 0] Ln+1: POP
1842 [tb, val, exc] END_FINALLY # re-raise exception
1844 [] L0: <next statement>
1846 Of course, parts are not generated if Vi or Ei is not present.
1849 compiler_try_except(struct compiler
*c
, stmt_ty s
)
1851 basicblock
*body
, *orelse
, *except
, *end
;
1854 body
= compiler_new_block(c
);
1855 except
= compiler_new_block(c
);
1856 orelse
= compiler_new_block(c
);
1857 end
= compiler_new_block(c
);
1858 if (body
== NULL
|| except
== NULL
|| orelse
== NULL
|| end
== NULL
)
1860 ADDOP_JREL(c
, SETUP_EXCEPT
, except
);
1861 compiler_use_next_block(c
, body
);
1862 if (!compiler_push_fblock(c
, EXCEPT
, body
))
1864 VISIT_SEQ(c
, stmt
, s
->v
.TryExcept
.body
);
1865 ADDOP(c
, POP_BLOCK
);
1866 compiler_pop_fblock(c
, EXCEPT
, body
);
1867 ADDOP_JREL(c
, JUMP_FORWARD
, orelse
);
1868 n
= asdl_seq_LEN(s
->v
.TryExcept
.handlers
);
1869 compiler_use_next_block(c
, except
);
1870 for (i
= 0; i
< n
; i
++) {
1871 excepthandler_ty handler
= (excepthandler_ty
)asdl_seq_GET(
1872 s
->v
.TryExcept
.handlers
, i
);
1873 if (!handler
->v
.ExceptHandler
.type
&& i
< n
-1)
1874 return compiler_error(c
, "default 'except:' must be last");
1875 c
->u
->u_lineno_set
= false;
1876 c
->u
->u_lineno
= handler
->lineno
;
1877 except
= compiler_new_block(c
);
1880 if (handler
->v
.ExceptHandler
.type
) {
1882 VISIT(c
, expr
, handler
->v
.ExceptHandler
.type
);
1883 ADDOP_I(c
, COMPARE_OP
, PyCmp_EXC_MATCH
);
1884 ADDOP_JREL(c
, JUMP_IF_FALSE
, except
);
1888 if (handler
->v
.ExceptHandler
.name
) {
1889 VISIT(c
, expr
, handler
->v
.ExceptHandler
.name
);
1895 VISIT_SEQ(c
, stmt
, handler
->v
.ExceptHandler
.body
);
1896 ADDOP_JREL(c
, JUMP_FORWARD
, end
);
1897 compiler_use_next_block(c
, except
);
1898 if (handler
->v
.ExceptHandler
.type
)
1901 ADDOP(c
, END_FINALLY
);
1902 compiler_use_next_block(c
, orelse
);
1903 VISIT_SEQ(c
, stmt
, s
->v
.TryExcept
.orelse
);
1904 compiler_use_next_block(c
, end
);
1909 compiler_import_as(struct compiler
*c
, identifier name
, identifier asname
)
1911 /* The IMPORT_NAME opcode was already generated. This function
1912 merely needs to bind the result to a name.
1914 If there is a dot in name, we need to split it and emit a
1915 LOAD_ATTR for each name.
1917 const char *src
= PyString_AS_STRING(name
);
1918 const char *dot
= strchr(src
, '.');
1920 /* Consume the base module name to get the first attribute */
1923 /* NB src is only defined when dot != NULL */
1925 dot
= strchr(src
, '.');
1926 attr
= PyString_FromStringAndSize(src
,
1927 dot
? dot
- src
: strlen(src
));
1930 ADDOP_O(c
, LOAD_ATTR
, attr
, names
);
1935 return compiler_nameop(c
, asname
, Store
);
1939 compiler_import(struct compiler
*c
, stmt_ty s
)
1941 /* The Import node stores a module name like a.b.c as a single
1942 string. This is convenient for all cases except
1944 where we need to parse that string to extract the individual
1946 XXX Perhaps change the representation to make this case simpler?
1948 int i
, n
= asdl_seq_LEN(s
->v
.Import
.names
);
1950 for (i
= 0; i
< n
; i
++) {
1951 alias_ty alias
= (alias_ty
)asdl_seq_GET(s
->v
.Import
.names
, i
);
1955 if (c
->c_flags
&& (c
->c_flags
->cf_flags
& CO_FUTURE_ABSOLUTE_IMPORT
))
1956 level
= PyInt_FromLong(0);
1958 level
= PyInt_FromLong(-1);
1963 ADDOP_O(c
, LOAD_CONST
, level
, consts
);
1965 ADDOP_O(c
, LOAD_CONST
, Py_None
, consts
);
1966 ADDOP_NAME(c
, IMPORT_NAME
, alias
->name
, names
);
1968 if (alias
->asname
) {
1969 r
= compiler_import_as(c
, alias
->name
, alias
->asname
);
1974 identifier tmp
= alias
->name
;
1975 const char *base
= PyString_AS_STRING(alias
->name
);
1976 char *dot
= strchr(base
, '.');
1978 tmp
= PyString_FromStringAndSize(base
,
1980 r
= compiler_nameop(c
, tmp
, Store
);
1992 compiler_from_import(struct compiler
*c
, stmt_ty s
)
1994 int i
, n
= asdl_seq_LEN(s
->v
.ImportFrom
.names
);
1996 PyObject
*names
= PyTuple_New(n
);
2002 if (s
->v
.ImportFrom
.level
== 0 && c
->c_flags
&&
2003 !(c
->c_flags
->cf_flags
& CO_FUTURE_ABSOLUTE_IMPORT
))
2004 level
= PyInt_FromLong(-1);
2006 level
= PyInt_FromLong(s
->v
.ImportFrom
.level
);
2013 /* build up the names */
2014 for (i
= 0; i
< n
; i
++) {
2015 alias_ty alias
= (alias_ty
)asdl_seq_GET(s
->v
.ImportFrom
.names
, i
);
2016 Py_INCREF(alias
->name
);
2017 PyTuple_SET_ITEM(names
, i
, alias
->name
);
2020 if (s
->lineno
> c
->c_future
->ff_lineno
) {
2021 if (!strcmp(PyString_AS_STRING(s
->v
.ImportFrom
.module
),
2025 return compiler_error(c
,
2026 "from __future__ imports must occur "
2027 "at the beginning of the file");
2032 ADDOP_O(c
, LOAD_CONST
, level
, consts
);
2034 ADDOP_O(c
, LOAD_CONST
, names
, consts
);
2036 ADDOP_NAME(c
, IMPORT_NAME
, s
->v
.ImportFrom
.module
, names
);
2037 for (i
= 0; i
< n
; i
++) {
2038 alias_ty alias
= (alias_ty
)asdl_seq_GET(s
->v
.ImportFrom
.names
, i
);
2039 identifier store_name
;
2041 if (i
== 0 && *PyString_AS_STRING(alias
->name
) == '*') {
2043 ADDOP(c
, IMPORT_STAR
);
2047 ADDOP_NAME(c
, IMPORT_FROM
, alias
->name
, names
);
2048 store_name
= alias
->name
;
2050 store_name
= alias
->asname
;
2052 if (!compiler_nameop(c
, store_name
, Store
)) {
2057 /* remove imported module */
2063 compiler_assert(struct compiler
*c
, stmt_ty s
)
2065 static PyObject
*assertion_error
= NULL
;
2068 if (Py_OptimizeFlag
)
2070 if (assertion_error
== NULL
) {
2071 assertion_error
= PyString_InternFromString("AssertionError");
2072 if (assertion_error
== NULL
)
2075 if (s
->v
.Assert
.test
->kind
== Tuple_kind
&&
2076 asdl_seq_LEN(s
->v
.Assert
.test
->v
.Tuple
.elts
) > 0) {
2078 "assertion is always true, perhaps remove parentheses?";
2079 if (PyErr_WarnExplicit(PyExc_SyntaxWarning
, msg
, c
->c_filename
,
2080 c
->u
->u_lineno
, NULL
, NULL
) == -1)
2083 VISIT(c
, expr
, s
->v
.Assert
.test
);
2084 end
= compiler_new_block(c
);
2087 ADDOP_JREL(c
, JUMP_IF_TRUE
, end
);
2089 ADDOP_O(c
, LOAD_GLOBAL
, assertion_error
, names
);
2090 if (s
->v
.Assert
.msg
) {
2091 VISIT(c
, expr
, s
->v
.Assert
.msg
);
2092 ADDOP_I(c
, RAISE_VARARGS
, 2);
2095 ADDOP_I(c
, RAISE_VARARGS
, 1);
2097 compiler_use_next_block(c
, end
);
2103 compiler_visit_stmt(struct compiler
*c
, stmt_ty s
)
2107 /* Always assign a lineno to the next instruction for a stmt. */
2108 c
->u
->u_lineno
= s
->lineno
;
2109 c
->u
->u_lineno_set
= false;
2112 case FunctionDef_kind
:
2113 return compiler_function(c
, s
);
2115 return compiler_class(c
, s
);
2117 if (c
->u
->u_ste
->ste_type
!= FunctionBlock
)
2118 return compiler_error(c
, "'return' outside function");
2119 if (s
->v
.Return
.value
) {
2120 VISIT(c
, expr
, s
->v
.Return
.value
);
2123 ADDOP_O(c
, LOAD_CONST
, Py_None
, consts
);
2124 ADDOP(c
, RETURN_VALUE
);
2127 VISIT_SEQ(c
, expr
, s
->v
.Delete
.targets
)
2130 n
= asdl_seq_LEN(s
->v
.Assign
.targets
);
2131 VISIT(c
, expr
, s
->v
.Assign
.value
);
2132 for (i
= 0; i
< n
; i
++) {
2136 (expr_ty
)asdl_seq_GET(s
->v
.Assign
.targets
, i
));
2139 case AugAssign_kind
:
2140 return compiler_augassign(c
, s
);
2142 return compiler_print(c
, s
);
2144 return compiler_for(c
, s
);
2146 return compiler_while(c
, s
);
2148 return compiler_if(c
, s
);
2151 if (s
->v
.Raise
.type
) {
2152 VISIT(c
, expr
, s
->v
.Raise
.type
);
2154 if (s
->v
.Raise
.inst
) {
2155 VISIT(c
, expr
, s
->v
.Raise
.inst
);
2157 if (s
->v
.Raise
.tback
) {
2158 VISIT(c
, expr
, s
->v
.Raise
.tback
);
2163 ADDOP_I(c
, RAISE_VARARGS
, n
);
2165 case TryExcept_kind
:
2166 return compiler_try_except(c
, s
);
2167 case TryFinally_kind
:
2168 return compiler_try_finally(c
, s
);
2170 return compiler_assert(c
, s
);
2172 return compiler_import(c
, s
);
2173 case ImportFrom_kind
:
2174 return compiler_from_import(c
, s
);
2176 VISIT(c
, expr
, s
->v
.Exec
.body
);
2177 if (s
->v
.Exec
.globals
) {
2178 VISIT(c
, expr
, s
->v
.Exec
.globals
);
2179 if (s
->v
.Exec
.locals
) {
2180 VISIT(c
, expr
, s
->v
.Exec
.locals
);
2185 ADDOP_O(c
, LOAD_CONST
, Py_None
, consts
);
2188 ADDOP(c
, EXEC_STMT
);
2193 if (c
->c_interactive
&& c
->c_nestlevel
<= 1) {
2194 VISIT(c
, expr
, s
->v
.Expr
.value
);
2195 ADDOP(c
, PRINT_EXPR
);
2197 else if (s
->v
.Expr
.value
->kind
!= Str_kind
&&
2198 s
->v
.Expr
.value
->kind
!= Num_kind
) {
2199 VISIT(c
, expr
, s
->v
.Expr
.value
);
2206 if (!compiler_in_loop(c
))
2207 return compiler_error(c
, "'break' outside loop");
2208 ADDOP(c
, BREAK_LOOP
);
2211 return compiler_continue(c
);
2213 return compiler_with(c
, s
);
2219 unaryop(unaryop_ty op
)
2223 return UNARY_INVERT
;
2227 return UNARY_POSITIVE
;
2229 return UNARY_NEGATIVE
;
2231 PyErr_Format(PyExc_SystemError
,
2232 "unary op %d should not be possible", op
);
2238 binop(struct compiler
*c
, operator_ty op
)
2244 return BINARY_SUBTRACT
;
2246 return BINARY_MULTIPLY
;
2248 if (c
->c_flags
&& c
->c_flags
->cf_flags
& CO_FUTURE_DIVISION
)
2249 return BINARY_TRUE_DIVIDE
;
2251 return BINARY_DIVIDE
;
2253 return BINARY_MODULO
;
2255 return BINARY_POWER
;
2257 return BINARY_LSHIFT
;
2259 return BINARY_RSHIFT
;
2267 return BINARY_FLOOR_DIVIDE
;
2269 PyErr_Format(PyExc_SystemError
,
2270 "binary op %d should not be possible", op
);
2294 return PyCmp_IS_NOT
;
2298 return PyCmp_NOT_IN
;
2305 inplace_binop(struct compiler
*c
, operator_ty op
)
2311 return INPLACE_SUBTRACT
;
2313 return INPLACE_MULTIPLY
;
2315 if (c
->c_flags
&& c
->c_flags
->cf_flags
& CO_FUTURE_DIVISION
)
2316 return INPLACE_TRUE_DIVIDE
;
2318 return INPLACE_DIVIDE
;
2320 return INPLACE_MODULO
;
2322 return INPLACE_POWER
;
2324 return INPLACE_LSHIFT
;
2326 return INPLACE_RSHIFT
;
2334 return INPLACE_FLOOR_DIVIDE
;
2336 PyErr_Format(PyExc_SystemError
,
2337 "inplace binary op %d should not be possible", op
);
2343 compiler_nameop(struct compiler
*c
, identifier name
, expr_context_ty ctx
)
2346 enum { OP_FAST
, OP_GLOBAL
, OP_DEREF
, OP_NAME
} optype
;
2348 PyObject
*dict
= c
->u
->u_names
;
2350 /* XXX AugStore isn't used anywhere! */
2352 mangled
= _Py_Mangle(c
->u
->u_private
, name
);
2358 scope
= PyST_GetScope(c
->u
->u_ste
, mangled
);
2361 dict
= c
->u
->u_freevars
;
2365 dict
= c
->u
->u_cellvars
;
2369 if (c
->u
->u_ste
->ste_type
== FunctionBlock
)
2372 case GLOBAL_IMPLICIT
:
2373 if (c
->u
->u_ste
->ste_type
== FunctionBlock
&&
2374 !c
->u
->u_ste
->ste_unoptimized
)
2377 case GLOBAL_EXPLICIT
:
2381 /* scope can be 0 */
2385 /* XXX Leave assert here, but handle __doc__ and the like better */
2386 assert(scope
|| PyString_AS_STRING(name
)[0] == '_');
2391 case Load
: op
= LOAD_DEREF
; break;
2392 case Store
: op
= STORE_DEREF
; break;
2397 PyErr_Format(PyExc_SyntaxError
,
2398 "can not delete variable '%s' referenced "
2400 PyString_AS_STRING(name
));
2405 PyErr_SetString(PyExc_SystemError
,
2406 "param invalid for deref variable");
2412 case Load
: op
= LOAD_FAST
; break;
2413 case Store
: op
= STORE_FAST
; break;
2414 case Del
: op
= DELETE_FAST
; break;
2420 PyErr_SetString(PyExc_SystemError
,
2421 "param invalid for local variable");
2424 ADDOP_O(c
, op
, mangled
, varnames
);
2429 case Load
: op
= LOAD_GLOBAL
; break;
2430 case Store
: op
= STORE_GLOBAL
; break;
2431 case Del
: op
= DELETE_GLOBAL
; break;
2437 PyErr_SetString(PyExc_SystemError
,
2438 "param invalid for global variable");
2444 case Load
: op
= LOAD_NAME
; break;
2445 case Store
: op
= STORE_NAME
; break;
2446 case Del
: op
= DELETE_NAME
; break;
2452 PyErr_SetString(PyExc_SystemError
,
2453 "param invalid for name variable");
2460 arg
= compiler_add_o(c
, dict
, mangled
);
2464 return compiler_addop_i(c
, op
, arg
);
2468 compiler_boolop(struct compiler
*c
, expr_ty e
)
2474 assert(e
->kind
== BoolOp_kind
);
2475 if (e
->v
.BoolOp
.op
== And
)
2476 jumpi
= JUMP_IF_FALSE
;
2478 jumpi
= JUMP_IF_TRUE
;
2479 end
= compiler_new_block(c
);
2482 s
= e
->v
.BoolOp
.values
;
2483 n
= asdl_seq_LEN(s
) - 1;
2485 for (i
= 0; i
< n
; ++i
) {
2486 VISIT(c
, expr
, (expr_ty
)asdl_seq_GET(s
, i
));
2487 ADDOP_JREL(c
, jumpi
, end
);
2490 VISIT(c
, expr
, (expr_ty
)asdl_seq_GET(s
, n
));
2491 compiler_use_next_block(c
, end
);
2496 compiler_list(struct compiler
*c
, expr_ty e
)
2498 int n
= asdl_seq_LEN(e
->v
.List
.elts
);
2499 if (e
->v
.List
.ctx
== Store
) {
2500 ADDOP_I(c
, UNPACK_SEQUENCE
, n
);
2502 VISIT_SEQ(c
, expr
, e
->v
.List
.elts
);
2503 if (e
->v
.List
.ctx
== Load
) {
2504 ADDOP_I(c
, BUILD_LIST
, n
);
2510 compiler_tuple(struct compiler
*c
, expr_ty e
)
2512 int n
= asdl_seq_LEN(e
->v
.Tuple
.elts
);
2513 if (e
->v
.Tuple
.ctx
== Store
) {
2514 ADDOP_I(c
, UNPACK_SEQUENCE
, n
);
2516 VISIT_SEQ(c
, expr
, e
->v
.Tuple
.elts
);
2517 if (e
->v
.Tuple
.ctx
== Load
) {
2518 ADDOP_I(c
, BUILD_TUPLE
, n
);
2524 compiler_compare(struct compiler
*c
, expr_ty e
)
2527 basicblock
*cleanup
= NULL
;
2529 /* XXX the logic can be cleaned up for 1 or multiple comparisons */
2530 VISIT(c
, expr
, e
->v
.Compare
.left
);
2531 n
= asdl_seq_LEN(e
->v
.Compare
.ops
);
2534 cleanup
= compiler_new_block(c
);
2535 if (cleanup
== NULL
)
2538 (expr_ty
)asdl_seq_GET(e
->v
.Compare
.comparators
, 0));
2540 for (i
= 1; i
< n
; i
++) {
2542 ADDOP(c
, ROT_THREE
);
2543 ADDOP_I(c
, COMPARE_OP
,
2544 cmpop((cmpop_ty
)(asdl_seq_GET(
2545 e
->v
.Compare
.ops
, i
- 1))));
2546 ADDOP_JREL(c
, JUMP_IF_FALSE
, cleanup
);
2551 (expr_ty
)asdl_seq_GET(e
->v
.Compare
.comparators
, i
));
2553 VISIT(c
, expr
, (expr_ty
)asdl_seq_GET(e
->v
.Compare
.comparators
, n
- 1));
2554 ADDOP_I(c
, COMPARE_OP
,
2555 cmpop((cmpop_ty
)(asdl_seq_GET(e
->v
.Compare
.ops
, n
- 1))));
2557 basicblock
*end
= compiler_new_block(c
);
2560 ADDOP_JREL(c
, JUMP_FORWARD
, end
);
2561 compiler_use_next_block(c
, cleanup
);
2564 compiler_use_next_block(c
, end
);
2570 compiler_call(struct compiler
*c
, expr_ty e
)
2574 VISIT(c
, expr
, e
->v
.Call
.func
);
2575 n
= asdl_seq_LEN(e
->v
.Call
.args
);
2576 VISIT_SEQ(c
, expr
, e
->v
.Call
.args
);
2577 if (e
->v
.Call
.keywords
) {
2578 VISIT_SEQ(c
, keyword
, e
->v
.Call
.keywords
);
2579 n
|= asdl_seq_LEN(e
->v
.Call
.keywords
) << 8;
2581 if (e
->v
.Call
.starargs
) {
2582 VISIT(c
, expr
, e
->v
.Call
.starargs
);
2585 if (e
->v
.Call
.kwargs
) {
2586 VISIT(c
, expr
, e
->v
.Call
.kwargs
);
2591 ADDOP_I(c
, CALL_FUNCTION
, n
);
2594 ADDOP_I(c
, CALL_FUNCTION_VAR
, n
);
2597 ADDOP_I(c
, CALL_FUNCTION_KW
, n
);
2600 ADDOP_I(c
, CALL_FUNCTION_VAR_KW
, n
);
2607 compiler_listcomp_generator(struct compiler
*c
, asdl_seq
*generators
,
2608 int gen_index
, expr_ty elt
)
2610 /* generate code for the iterator, then each of the ifs,
2611 and then write to the element */
2614 basicblock
*start
, *anchor
, *skip
, *if_cleanup
;
2617 start
= compiler_new_block(c
);
2618 skip
= compiler_new_block(c
);
2619 if_cleanup
= compiler_new_block(c
);
2620 anchor
= compiler_new_block(c
);
2622 if (start
== NULL
|| skip
== NULL
|| if_cleanup
== NULL
||
2626 l
= (comprehension_ty
)asdl_seq_GET(generators
, gen_index
);
2627 VISIT(c
, expr
, l
->iter
);
2629 compiler_use_next_block(c
, start
);
2630 ADDOP_JREL(c
, FOR_ITER
, anchor
);
2632 VISIT(c
, expr
, l
->target
);
2634 /* XXX this needs to be cleaned up...a lot! */
2635 n
= asdl_seq_LEN(l
->ifs
);
2636 for (i
= 0; i
< n
; i
++) {
2637 expr_ty e
= (expr_ty
)asdl_seq_GET(l
->ifs
, i
);
2639 ADDOP_JREL(c
, JUMP_IF_FALSE
, if_cleanup
);
2644 if (++gen_index
< asdl_seq_LEN(generators
))
2645 if (!compiler_listcomp_generator(c
, generators
, gen_index
, elt
))
2648 /* only append after the last for generator */
2649 if (gen_index
>= asdl_seq_LEN(generators
)) {
2650 VISIT(c
, expr
, elt
);
2651 ADDOP_I(c
, LIST_APPEND
, gen_index
+1);
2653 compiler_use_next_block(c
, skip
);
2655 for (i
= 0; i
< n
; i
++) {
2656 ADDOP_I(c
, JUMP_FORWARD
, 1);
2658 compiler_use_next_block(c
, if_cleanup
);
2661 ADDOP_JABS(c
, JUMP_ABSOLUTE
, start
);
2662 compiler_use_next_block(c
, anchor
);
2668 compiler_listcomp(struct compiler
*c
, expr_ty e
)
2670 assert(e
->kind
== ListComp_kind
);
2671 ADDOP_I(c
, BUILD_LIST
, 0);
2672 return compiler_listcomp_generator(c
, e
->v
.ListComp
.generators
, 0,
2677 compiler_genexp_generator(struct compiler
*c
,
2678 asdl_seq
*generators
, int gen_index
,
2681 /* generate code for the iterator, then each of the ifs,
2682 and then write to the element */
2684 comprehension_ty ge
;
2685 basicblock
*start
, *anchor
, *skip
, *if_cleanup
, *end
;
2688 start
= compiler_new_block(c
);
2689 skip
= compiler_new_block(c
);
2690 if_cleanup
= compiler_new_block(c
);
2691 anchor
= compiler_new_block(c
);
2692 end
= compiler_new_block(c
);
2694 if (start
== NULL
|| skip
== NULL
|| if_cleanup
== NULL
||
2695 anchor
== NULL
|| end
== NULL
)
2698 ge
= (comprehension_ty
)asdl_seq_GET(generators
, gen_index
);
2699 ADDOP_JREL(c
, SETUP_LOOP
, end
);
2700 if (!compiler_push_fblock(c
, LOOP
, start
))
2703 if (gen_index
== 0) {
2704 /* Receive outermost iter as an implicit argument */
2705 c
->u
->u_argcount
= 1;
2706 ADDOP_I(c
, LOAD_FAST
, 0);
2709 /* Sub-iter - calculate on the fly */
2710 VISIT(c
, expr
, ge
->iter
);
2713 compiler_use_next_block(c
, start
);
2714 ADDOP_JREL(c
, FOR_ITER
, anchor
);
2716 VISIT(c
, expr
, ge
->target
);
2718 /* XXX this needs to be cleaned up...a lot! */
2719 n
= asdl_seq_LEN(ge
->ifs
);
2720 for (i
= 0; i
< n
; i
++) {
2721 expr_ty e
= (expr_ty
)asdl_seq_GET(ge
->ifs
, i
);
2723 ADDOP_JREL(c
, JUMP_IF_FALSE
, if_cleanup
);
2728 if (++gen_index
< asdl_seq_LEN(generators
))
2729 if (!compiler_genexp_generator(c
, generators
, gen_index
, elt
))
2732 /* only append after the last 'for' generator */
2733 if (gen_index
>= asdl_seq_LEN(generators
)) {
2734 VISIT(c
, expr
, elt
);
2735 ADDOP(c
, YIELD_VALUE
);
2738 compiler_use_next_block(c
, skip
);
2740 for (i
= 0; i
< n
; i
++) {
2741 ADDOP_I(c
, JUMP_FORWARD
, 1);
2743 compiler_use_next_block(c
, if_cleanup
);
2747 ADDOP_JABS(c
, JUMP_ABSOLUTE
, start
);
2748 compiler_use_next_block(c
, anchor
);
2749 ADDOP(c
, POP_BLOCK
);
2750 compiler_pop_fblock(c
, LOOP
, start
);
2751 compiler_use_next_block(c
, end
);
2757 compiler_genexp(struct compiler
*c
, expr_ty e
)
2759 static identifier name
;
2761 expr_ty outermost_iter
= ((comprehension_ty
)
2762 (asdl_seq_GET(e
->v
.GeneratorExp
.generators
,
2766 name
= PyString_FromString("<genexpr>");
2771 if (!compiler_enter_scope(c
, name
, (void *)e
, e
->lineno
))
2773 compiler_genexp_generator(c
, e
->v
.GeneratorExp
.generators
, 0,
2774 e
->v
.GeneratorExp
.elt
);
2775 co
= assemble(c
, 1);
2776 compiler_exit_scope(c
);
2780 compiler_make_closure(c
, co
, 0);
2783 VISIT(c
, expr
, outermost_iter
);
2785 ADDOP_I(c
, CALL_FUNCTION
, 1);
2791 compiler_visit_keyword(struct compiler
*c
, keyword_ty k
)
2793 ADDOP_O(c
, LOAD_CONST
, k
->arg
, consts
);
2794 VISIT(c
, expr
, k
->value
);
2798 /* Test whether expression is constant. For constants, report
2799 whether they are true or false.
2801 Return values: 1 for true, 0 for false, -1 for non-constant.
2805 expr_constant(expr_ty e
)
2809 return PyObject_IsTrue(e
->v
.Num
.n
);
2811 return PyObject_IsTrue(e
->v
.Str
.s
);
2813 /* __debug__ is not assignable, so we can optimize
2814 * it away in if and while statements */
2815 if (strcmp(PyString_AS_STRING(e
->v
.Name
.id
),
2817 return ! Py_OptimizeFlag
;
2825 Implements the with statement from PEP 343.
2827 The semantics outlined in that PEP are as follows:
2832 It is implemented roughly as:
2835 exit = context.__exit__ # not calling it
2836 value = context.__enter__()
2838 VAR = value # if VAR present in the syntax
2841 if an exception was raised:
2842 exc = copy of (exception, instance, traceback)
2844 exc = (None, None, None)
2848 compiler_with(struct compiler
*c
, stmt_ty s
)
2850 static identifier enter_attr
, exit_attr
;
2851 basicblock
*block
, *finally
;
2852 identifier tmpvalue
= NULL
;
2854 assert(s
->kind
== With_kind
);
2857 enter_attr
= PyString_InternFromString("__enter__");
2862 exit_attr
= PyString_InternFromString("__exit__");
2867 block
= compiler_new_block(c
);
2868 finally
= compiler_new_block(c
);
2869 if (!block
|| !finally
)
2872 if (s
->v
.With
.optional_vars
) {
2873 /* Create a temporary variable to hold context.__enter__().
2874 We need to do this rather than preserving it on the stack
2875 because SETUP_FINALLY remembers the stack level.
2876 We need to do the assignment *inside* the try/finally
2877 so that context.__exit__() is called when the assignment
2878 fails. But we need to call context.__enter__() *before*
2879 the try/finally so that if it fails we won't call
2882 tmpvalue
= compiler_new_tmpname(c
);
2883 if (tmpvalue
== NULL
)
2885 PyArena_AddPyObject(c
->c_arena
, tmpvalue
);
2889 VISIT(c
, expr
, s
->v
.With
.context_expr
);
2891 /* Squirrel away context.__exit__ by stuffing it under context */
2893 ADDOP_O(c
, LOAD_ATTR
, exit_attr
, names
);
2896 /* Call context.__enter__() */
2897 ADDOP_O(c
, LOAD_ATTR
, enter_attr
, names
);
2898 ADDOP_I(c
, CALL_FUNCTION
, 0);
2900 if (s
->v
.With
.optional_vars
) {
2901 /* Store it in tmpvalue */
2902 if (!compiler_nameop(c
, tmpvalue
, Store
))
2906 /* Discard result from context.__enter__() */
2910 /* Start the try block */
2911 ADDOP_JREL(c
, SETUP_FINALLY
, finally
);
2913 compiler_use_next_block(c
, block
);
2914 if (!compiler_push_fblock(c
, FINALLY_TRY
, block
)) {
2918 if (s
->v
.With
.optional_vars
) {
2919 /* Bind saved result of context.__enter__() to VAR */
2920 if (!compiler_nameop(c
, tmpvalue
, Load
) ||
2921 !compiler_nameop(c
, tmpvalue
, Del
))
2923 VISIT(c
, expr
, s
->v
.With
.optional_vars
);
2927 VISIT_SEQ(c
, stmt
, s
->v
.With
.body
);
2929 /* End of try block; start the finally block */
2930 ADDOP(c
, POP_BLOCK
);
2931 compiler_pop_fblock(c
, FINALLY_TRY
, block
);
2933 ADDOP_O(c
, LOAD_CONST
, Py_None
, consts
);
2934 compiler_use_next_block(c
, finally
);
2935 if (!compiler_push_fblock(c
, FINALLY_END
, finally
))
2938 /* Finally block starts; context.__exit__ is on the stack under
2939 the exception or return information. Just issue our magic
2941 ADDOP(c
, WITH_CLEANUP
);
2943 /* Finally block ends. */
2944 ADDOP(c
, END_FINALLY
);
2945 compiler_pop_fblock(c
, FINALLY_END
, finally
);
2950 compiler_visit_expr(struct compiler
*c
, expr_ty e
)
2954 /* If expr e has a different line number than the last expr/stmt,
2955 set a new line number for the next instruction.
2957 if (e
->lineno
> c
->u
->u_lineno
) {
2958 c
->u
->u_lineno
= e
->lineno
;
2959 c
->u
->u_lineno_set
= false;
2963 return compiler_boolop(c
, e
);
2965 VISIT(c
, expr
, e
->v
.BinOp
.left
);
2966 VISIT(c
, expr
, e
->v
.BinOp
.right
);
2967 ADDOP(c
, binop(c
, e
->v
.BinOp
.op
));
2970 VISIT(c
, expr
, e
->v
.UnaryOp
.operand
);
2971 ADDOP(c
, unaryop(e
->v
.UnaryOp
.op
));
2974 return compiler_lambda(c
, e
);
2976 return compiler_ifexp(c
, e
);
2978 n
= asdl_seq_LEN(e
->v
.Dict
.values
);
2979 ADDOP_I(c
, BUILD_MAP
, (n
>0xFFFF ? 0xFFFF : n
));
2980 for (i
= 0; i
< n
; i
++) {
2982 (expr_ty
)asdl_seq_GET(e
->v
.Dict
.values
, i
));
2984 (expr_ty
)asdl_seq_GET(e
->v
.Dict
.keys
, i
));
2985 ADDOP(c
, STORE_MAP
);
2989 return compiler_listcomp(c
, e
);
2990 case GeneratorExp_kind
:
2991 return compiler_genexp(c
, e
);
2993 if (c
->u
->u_ste
->ste_type
!= FunctionBlock
)
2994 return compiler_error(c
, "'yield' outside function");
2995 if (e
->v
.Yield
.value
) {
2996 VISIT(c
, expr
, e
->v
.Yield
.value
);
2999 ADDOP_O(c
, LOAD_CONST
, Py_None
, consts
);
3001 ADDOP(c
, YIELD_VALUE
);
3004 return compiler_compare(c
, e
);
3006 return compiler_call(c
, e
);
3008 VISIT(c
, expr
, e
->v
.Repr
.value
);
3009 ADDOP(c
, UNARY_CONVERT
);
3012 ADDOP_O(c
, LOAD_CONST
, e
->v
.Num
.n
, consts
);
3015 ADDOP_O(c
, LOAD_CONST
, e
->v
.Str
.s
, consts
);
3017 /* The following exprs can be assignment targets. */
3018 case Attribute_kind
:
3019 if (e
->v
.Attribute
.ctx
!= AugStore
)
3020 VISIT(c
, expr
, e
->v
.Attribute
.value
);
3021 switch (e
->v
.Attribute
.ctx
) {
3024 /* Fall through to load */
3026 ADDOP_NAME(c
, LOAD_ATTR
, e
->v
.Attribute
.attr
, names
);
3030 /* Fall through to save */
3032 ADDOP_NAME(c
, STORE_ATTR
, e
->v
.Attribute
.attr
, names
);
3035 ADDOP_NAME(c
, DELETE_ATTR
, e
->v
.Attribute
.attr
, names
);
3039 PyErr_SetString(PyExc_SystemError
,
3040 "param invalid in attribute expression");
3044 case Subscript_kind
:
3045 switch (e
->v
.Subscript
.ctx
) {
3047 VISIT(c
, expr
, e
->v
.Subscript
.value
);
3048 VISIT_SLICE(c
, e
->v
.Subscript
.slice
, AugLoad
);
3051 VISIT(c
, expr
, e
->v
.Subscript
.value
);
3052 VISIT_SLICE(c
, e
->v
.Subscript
.slice
, Load
);
3055 VISIT_SLICE(c
, e
->v
.Subscript
.slice
, AugStore
);
3058 VISIT(c
, expr
, e
->v
.Subscript
.value
);
3059 VISIT_SLICE(c
, e
->v
.Subscript
.slice
, Store
);
3062 VISIT(c
, expr
, e
->v
.Subscript
.value
);
3063 VISIT_SLICE(c
, e
->v
.Subscript
.slice
, Del
);
3067 PyErr_SetString(PyExc_SystemError
,
3068 "param invalid in subscript expression");
3073 return compiler_nameop(c
, e
->v
.Name
.id
, e
->v
.Name
.ctx
);
3074 /* child nodes of List and Tuple will have expr_context set */
3076 return compiler_list(c
, e
);
3078 return compiler_tuple(c
, e
);
3084 compiler_augassign(struct compiler
*c
, stmt_ty s
)
3086 expr_ty e
= s
->v
.AugAssign
.target
;
3089 assert(s
->kind
== AugAssign_kind
);
3092 case Attribute_kind
:
3093 auge
= Attribute(e
->v
.Attribute
.value
, e
->v
.Attribute
.attr
,
3094 AugLoad
, e
->lineno
, e
->col_offset
, c
->c_arena
);
3097 VISIT(c
, expr
, auge
);
3098 VISIT(c
, expr
, s
->v
.AugAssign
.value
);
3099 ADDOP(c
, inplace_binop(c
, s
->v
.AugAssign
.op
));
3100 auge
->v
.Attribute
.ctx
= AugStore
;
3101 VISIT(c
, expr
, auge
);
3103 case Subscript_kind
:
3104 auge
= Subscript(e
->v
.Subscript
.value
, e
->v
.Subscript
.slice
,
3105 AugLoad
, e
->lineno
, e
->col_offset
, c
->c_arena
);
3108 VISIT(c
, expr
, auge
);
3109 VISIT(c
, expr
, s
->v
.AugAssign
.value
);
3110 ADDOP(c
, inplace_binop(c
, s
->v
.AugAssign
.op
));
3111 auge
->v
.Subscript
.ctx
= AugStore
;
3112 VISIT(c
, expr
, auge
);
3115 if (!compiler_nameop(c
, e
->v
.Name
.id
, Load
))
3117 VISIT(c
, expr
, s
->v
.AugAssign
.value
);
3118 ADDOP(c
, inplace_binop(c
, s
->v
.AugAssign
.op
));
3119 return compiler_nameop(c
, e
->v
.Name
.id
, Store
);
3121 PyErr_Format(PyExc_SystemError
,
3122 "invalid node type (%d) for augmented assignment",
3130 compiler_push_fblock(struct compiler
*c
, enum fblocktype t
, basicblock
*b
)
3132 struct fblockinfo
*f
;
3133 if (c
->u
->u_nfblocks
>= CO_MAXBLOCKS
) {
3134 PyErr_SetString(PyExc_SystemError
,
3135 "too many statically nested blocks");
3138 f
= &c
->u
->u_fblock
[c
->u
->u_nfblocks
++];
3145 compiler_pop_fblock(struct compiler
*c
, enum fblocktype t
, basicblock
*b
)
3147 struct compiler_unit
*u
= c
->u
;
3148 assert(u
->u_nfblocks
> 0);
3150 assert(u
->u_fblock
[u
->u_nfblocks
].fb_type
== t
);
3151 assert(u
->u_fblock
[u
->u_nfblocks
].fb_block
== b
);
3155 compiler_in_loop(struct compiler
*c
) {
3157 struct compiler_unit
*u
= c
->u
;
3158 for (i
= 0; i
< u
->u_nfblocks
; ++i
) {
3159 if (u
->u_fblock
[i
].fb_type
== LOOP
)
3164 /* Raises a SyntaxError and returns 0.
3165 If something goes wrong, a different exception may be raised.
3169 compiler_error(struct compiler
*c
, const char *errstr
)
3172 PyObject
*u
= NULL
, *v
= NULL
;
3174 loc
= PyErr_ProgramText(c
->c_filename
, c
->u
->u_lineno
);
3179 u
= Py_BuildValue("(ziOO)", c
->c_filename
, c
->u
->u_lineno
,
3183 v
= Py_BuildValue("(zO)", errstr
, u
);
3186 PyErr_SetObject(PyExc_SyntaxError
, v
);
3195 compiler_handle_subscr(struct compiler
*c
, const char *kind
,
3196 expr_context_ty ctx
)
3200 /* XXX this code is duplicated */
3202 case AugLoad
: /* fall through to Load */
3203 case Load
: op
= BINARY_SUBSCR
; break;
3204 case AugStore
:/* fall through to Store */
3205 case Store
: op
= STORE_SUBSCR
; break;
3206 case Del
: op
= DELETE_SUBSCR
; break;
3208 PyErr_Format(PyExc_SystemError
,
3209 "invalid %s kind %d in subscript\n",
3213 if (ctx
== AugLoad
) {
3214 ADDOP_I(c
, DUP_TOPX
, 2);
3216 else if (ctx
== AugStore
) {
3217 ADDOP(c
, ROT_THREE
);
3224 compiler_slice(struct compiler
*c
, slice_ty s
, expr_context_ty ctx
)
3227 assert(s
->kind
== Slice_kind
);
3229 /* only handles the cases where BUILD_SLICE is emitted */
3230 if (s
->v
.Slice
.lower
) {
3231 VISIT(c
, expr
, s
->v
.Slice
.lower
);
3234 ADDOP_O(c
, LOAD_CONST
, Py_None
, consts
);
3237 if (s
->v
.Slice
.upper
) {
3238 VISIT(c
, expr
, s
->v
.Slice
.upper
);
3241 ADDOP_O(c
, LOAD_CONST
, Py_None
, consts
);
3244 if (s
->v
.Slice
.step
) {
3246 VISIT(c
, expr
, s
->v
.Slice
.step
);
3248 ADDOP_I(c
, BUILD_SLICE
, n
);
3253 compiler_simple_slice(struct compiler
*c
, slice_ty s
, expr_context_ty ctx
)
3255 int op
= 0, slice_offset
= 0, stack_count
= 0;
3257 assert(s
->v
.Slice
.step
== NULL
);
3258 if (s
->v
.Slice
.lower
) {
3261 if (ctx
!= AugStore
)
3262 VISIT(c
, expr
, s
->v
.Slice
.lower
);
3264 if (s
->v
.Slice
.upper
) {
3267 if (ctx
!= AugStore
)
3268 VISIT(c
, expr
, s
->v
.Slice
.upper
);
3271 if (ctx
== AugLoad
) {
3272 switch (stack_count
) {
3273 case 0: ADDOP(c
, DUP_TOP
); break;
3274 case 1: ADDOP_I(c
, DUP_TOPX
, 2); break;
3275 case 2: ADDOP_I(c
, DUP_TOPX
, 3); break;
3278 else if (ctx
== AugStore
) {
3279 switch (stack_count
) {
3280 case 0: ADDOP(c
, ROT_TWO
); break;
3281 case 1: ADDOP(c
, ROT_THREE
); break;
3282 case 2: ADDOP(c
, ROT_FOUR
); break;
3287 case AugLoad
: /* fall through to Load */
3288 case Load
: op
= SLICE
; break;
3289 case AugStore
:/* fall through to Store */
3290 case Store
: op
= STORE_SLICE
; break;
3291 case Del
: op
= DELETE_SLICE
; break;
3294 PyErr_SetString(PyExc_SystemError
,
3295 "param invalid in simple slice");
3299 ADDOP(c
, op
+ slice_offset
);
3304 compiler_visit_nested_slice(struct compiler
*c
, slice_ty s
,
3305 expr_context_ty ctx
)
3309 ADDOP_O(c
, LOAD_CONST
, Py_Ellipsis
, consts
);
3312 return compiler_slice(c
, s
, ctx
);
3314 VISIT(c
, expr
, s
->v
.Index
.value
);
3318 PyErr_SetString(PyExc_SystemError
,
3319 "extended slice invalid in nested slice");
3326 compiler_visit_slice(struct compiler
*c
, slice_ty s
, expr_context_ty ctx
)
3328 char * kindname
= NULL
;
3332 if (ctx
!= AugStore
) {
3333 VISIT(c
, expr
, s
->v
.Index
.value
);
3337 kindname
= "ellipsis";
3338 if (ctx
!= AugStore
) {
3339 ADDOP_O(c
, LOAD_CONST
, Py_Ellipsis
, consts
);
3344 if (!s
->v
.Slice
.step
)
3345 return compiler_simple_slice(c
, s
, ctx
);
3346 if (ctx
!= AugStore
) {
3347 if (!compiler_slice(c
, s
, ctx
))
3352 kindname
= "extended slice";
3353 if (ctx
!= AugStore
) {
3354 int i
, n
= asdl_seq_LEN(s
->v
.ExtSlice
.dims
);
3355 for (i
= 0; i
< n
; i
++) {
3356 slice_ty sub
= (slice_ty
)asdl_seq_GET(
3357 s
->v
.ExtSlice
.dims
, i
);
3358 if (!compiler_visit_nested_slice(c
, sub
, ctx
))
3361 ADDOP_I(c
, BUILD_TUPLE
, n
);
3365 PyErr_Format(PyExc_SystemError
,
3366 "invalid subscript kind %d", s
->kind
);
3369 return compiler_handle_subscr(c
, kindname
, ctx
);
3373 /* End of the compiler section, beginning of the assembler section */
3375 /* do depth-first search of basic block graph, starting with block.
3376 post records the block indices in post-order.
3378 XXX must handle implicit jumps from one block to next
3382 PyObject
*a_bytecode
; /* string containing bytecode */
3383 int a_offset
; /* offset into bytecode */
3384 int a_nblocks
; /* number of reachable blocks */
3385 basicblock
**a_postorder
; /* list of blocks in dfs postorder */
3386 PyObject
*a_lnotab
; /* string containing lnotab */
3387 int a_lnotab_off
; /* offset into lnotab */
3388 int a_lineno
; /* last lineno of emitted instruction */
3389 int a_lineno_off
; /* bytecode offset of last lineno */
3393 dfs(struct compiler
*c
, basicblock
*b
, struct assembler
*a
)
3396 struct instr
*instr
= NULL
;
3401 if (b
->b_next
!= NULL
)
3402 dfs(c
, b
->b_next
, a
);
3403 for (i
= 0; i
< b
->b_iused
; i
++) {
3404 instr
= &b
->b_instr
[i
];
3405 if (instr
->i_jrel
|| instr
->i_jabs
)
3406 dfs(c
, instr
->i_target
, a
);
3408 a
->a_postorder
[a
->a_nblocks
++] = b
;
3412 stackdepth_walk(struct compiler
*c
, basicblock
*b
, int depth
, int maxdepth
)
3415 struct instr
*instr
;
3416 if (b
->b_seen
|| b
->b_startdepth
>= depth
)
3419 b
->b_startdepth
= depth
;
3420 for (i
= 0; i
< b
->b_iused
; i
++) {
3421 instr
= &b
->b_instr
[i
];
3422 depth
+= opcode_stack_effect(instr
->i_opcode
, instr
->i_oparg
);
3423 if (depth
> maxdepth
)
3425 assert(depth
>= 0); /* invalid code or bug in stackdepth() */
3426 if (instr
->i_jrel
|| instr
->i_jabs
) {
3427 maxdepth
= stackdepth_walk(c
, instr
->i_target
,
3429 if (instr
->i_opcode
== JUMP_ABSOLUTE
||
3430 instr
->i_opcode
== JUMP_FORWARD
) {
3431 goto out
; /* remaining code is dead */
3436 maxdepth
= stackdepth_walk(c
, b
->b_next
, depth
, maxdepth
);
3442 /* Find the flow path that needs the largest stack. We assume that
3443 * cycles in the flow graph have no net effect on the stack depth.
3446 stackdepth(struct compiler
*c
)
3448 basicblock
*b
, *entryblock
;
3450 for (b
= c
->u
->u_blocks
; b
!= NULL
; b
= b
->b_list
) {
3452 b
->b_startdepth
= INT_MIN
;
3457 return stackdepth_walk(c
, entryblock
, 0, 0);
3461 assemble_init(struct assembler
*a
, int nblocks
, int firstlineno
)
3463 memset(a
, 0, sizeof(struct assembler
));
3464 a
->a_lineno
= firstlineno
;
3465 a
->a_bytecode
= PyString_FromStringAndSize(NULL
, DEFAULT_CODE_SIZE
);
3468 a
->a_lnotab
= PyString_FromStringAndSize(NULL
, DEFAULT_LNOTAB_SIZE
);
3471 if (nblocks
> PY_SIZE_MAX
/ sizeof(basicblock
*)) {
3475 a
->a_postorder
= (basicblock
**)PyObject_Malloc(
3476 sizeof(basicblock
*) * nblocks
);
3477 if (!a
->a_postorder
) {
3485 assemble_free(struct assembler
*a
)
3487 Py_XDECREF(a
->a_bytecode
);
3488 Py_XDECREF(a
->a_lnotab
);
3490 PyObject_Free(a
->a_postorder
);
3493 /* Return the size of a basic block in bytes. */
3496 instrsize(struct instr
*instr
)
3498 if (!instr
->i_hasarg
)
3499 return 1; /* 1 byte for the opcode*/
3500 if (instr
->i_oparg
> 0xffff)
3501 return 6; /* 1 (opcode) + 1 (EXTENDED_ARG opcode) + 2 (oparg) + 2(oparg extended) */
3502 return 3; /* 1 (opcode) + 2 (oparg) */
3506 blocksize(basicblock
*b
)
3511 for (i
= 0; i
< b
->b_iused
; i
++)
3512 size
+= instrsize(&b
->b_instr
[i
]);
3516 /* All about a_lnotab.
3518 c_lnotab is an array of unsigned bytes disguised as a Python string.
3519 It is used to map bytecode offsets to source code line #s (when needed
3522 The array is conceptually a list of
3523 (bytecode offset increment, line number increment)
3524 pairs. The details are important and delicate, best illustrated by example:
3526 byte code offset source code line number
3533 The first trick is that these numbers aren't stored, only the increments
3534 from one row to the next (this doesn't really work, but it's a start):
3536 0, 1, 6, 1, 44, 5, 300, 300, 11, 1
3538 The second trick is that an unsigned byte can't hold negative values, or
3539 values larger than 255, so (a) there's a deep assumption that byte code
3540 offsets and their corresponding line #s both increase monotonically, and (b)
3541 if at least one column jumps by more than 255 from one row to the next, more
3542 than one pair is written to the table. In case #b, there's no way to know
3543 from looking at the table later how many were written. That's the delicate
3544 part. A user of c_lnotab desiring to find the source line number
3545 corresponding to a bytecode address A should do something like this
3548 for addr_incr, line_incr in c_lnotab:
3554 In order for this to work, when the addr field increments by more than 255,
3555 the line # increment in each pair generated must be 0 until the remaining addr
3556 increment is < 256. So, in the example above, assemble_lnotab (it used
3557 to be called com_set_lineno) should not (as was actually done until 2.2)
3558 expand 300, 300 to 255, 255, 45, 45,
3559 but to 255, 0, 45, 255, 0, 45.
3563 assemble_lnotab(struct assembler
*a
, struct instr
*i
)
3565 int d_bytecode
, d_lineno
;
3567 unsigned char *lnotab
;
3569 d_bytecode
= a
->a_offset
- a
->a_lineno_off
;
3570 d_lineno
= i
->i_lineno
- a
->a_lineno
;
3572 assert(d_bytecode
>= 0);
3573 assert(d_lineno
>= 0);
3575 if(d_bytecode
== 0 && d_lineno
== 0)
3578 if (d_bytecode
> 255) {
3579 int j
, nbytes
, ncodes
= d_bytecode
/ 255;
3580 nbytes
= a
->a_lnotab_off
+ 2 * ncodes
;
3581 len
= PyString_GET_SIZE(a
->a_lnotab
);
3582 if (nbytes
>= len
) {
3583 if ((len
<= INT_MAX
/ 2) && (len
* 2 < nbytes
))
3585 else if (len
<= INT_MAX
/ 2)
3591 if (_PyString_Resize(&a
->a_lnotab
, len
) < 0)
3594 lnotab
= (unsigned char *)
3595 PyString_AS_STRING(a
->a_lnotab
) + a
->a_lnotab_off
;
3596 for (j
= 0; j
< ncodes
; j
++) {
3600 d_bytecode
-= ncodes
* 255;
3601 a
->a_lnotab_off
+= ncodes
* 2;
3603 assert(d_bytecode
<= 255);
3604 if (d_lineno
> 255) {
3605 int j
, nbytes
, ncodes
= d_lineno
/ 255;
3606 nbytes
= a
->a_lnotab_off
+ 2 * ncodes
;
3607 len
= PyString_GET_SIZE(a
->a_lnotab
);
3608 if (nbytes
>= len
) {
3609 if ((len
<= INT_MAX
/ 2) && len
* 2 < nbytes
)
3611 else if (len
<= INT_MAX
/ 2)
3617 if (_PyString_Resize(&a
->a_lnotab
, len
) < 0)
3620 lnotab
= (unsigned char *)
3621 PyString_AS_STRING(a
->a_lnotab
) + a
->a_lnotab_off
;
3622 *lnotab
++ = d_bytecode
;
3625 for (j
= 1; j
< ncodes
; j
++) {
3629 d_lineno
-= ncodes
* 255;
3630 a
->a_lnotab_off
+= ncodes
* 2;
3633 len
= PyString_GET_SIZE(a
->a_lnotab
);
3634 if (a
->a_lnotab_off
+ 2 >= len
) {
3635 if (_PyString_Resize(&a
->a_lnotab
, len
* 2) < 0)
3638 lnotab
= (unsigned char *)
3639 PyString_AS_STRING(a
->a_lnotab
) + a
->a_lnotab_off
;
3641 a
->a_lnotab_off
+= 2;
3643 *lnotab
++ = d_bytecode
;
3644 *lnotab
++ = d_lineno
;
3646 else { /* First line of a block; def stmt, etc. */
3648 *lnotab
++ = d_lineno
;
3650 a
->a_lineno
= i
->i_lineno
;
3651 a
->a_lineno_off
= a
->a_offset
;
3656 Extend the bytecode with a new instruction.
3657 Update lnotab if necessary.
3661 assemble_emit(struct assembler
*a
, struct instr
*i
)
3663 int size
, arg
= 0, ext
= 0;
3664 Py_ssize_t len
= PyString_GET_SIZE(a
->a_bytecode
);
3667 size
= instrsize(i
);
3672 if (i
->i_lineno
&& !assemble_lnotab(a
, i
))
3674 if (a
->a_offset
+ size
>= len
) {
3675 if (len
> PY_SSIZE_T_MAX
/ 2)
3677 if (_PyString_Resize(&a
->a_bytecode
, len
* 2) < 0)
3680 code
= PyString_AS_STRING(a
->a_bytecode
) + a
->a_offset
;
3681 a
->a_offset
+= size
;
3683 assert(i
->i_hasarg
);
3684 *code
++ = (char)EXTENDED_ARG
;
3685 *code
++ = ext
& 0xff;
3689 *code
++ = i
->i_opcode
;
3691 assert(size
== 3 || size
== 6);
3692 *code
++ = arg
& 0xff;
3699 assemble_jump_offsets(struct assembler
*a
, struct compiler
*c
)
3702 int bsize
, totsize
, extended_arg_count
, last_extended_arg_count
= 0;
3705 /* Compute the size of each block and fixup jump args.
3706 Replace block pointer with position in bytecode. */
3709 for (i
= a
->a_nblocks
- 1; i
>= 0; i
--) {
3710 b
= a
->a_postorder
[i
];
3711 bsize
= blocksize(b
);
3712 b
->b_offset
= totsize
;
3715 extended_arg_count
= 0;
3716 for (b
= c
->u
->u_blocks
; b
!= NULL
; b
= b
->b_list
) {
3717 bsize
= b
->b_offset
;
3718 for (i
= 0; i
< b
->b_iused
; i
++) {
3719 struct instr
*instr
= &b
->b_instr
[i
];
3720 /* Relative jumps are computed relative to
3721 the instruction pointer after fetching
3722 the jump instruction.
3724 bsize
+= instrsize(instr
);
3726 instr
->i_oparg
= instr
->i_target
->b_offset
;
3727 else if (instr
->i_jrel
) {
3728 int delta
= instr
->i_target
->b_offset
- bsize
;
3729 instr
->i_oparg
= delta
;
3733 if (instr
->i_oparg
> 0xffff)
3734 extended_arg_count
++;
3738 /* XXX: This is an awful hack that could hurt performance, but
3739 on the bright side it should work until we come up
3740 with a better solution.
3742 In the meantime, should the goto be dropped in favor
3745 The issue is that in the first loop blocksize() is called
3746 which calls instrsize() which requires i_oparg be set
3747 appropriately. There is a bootstrap problem because
3748 i_oparg is calculated in the second loop above.
3750 So we loop until we stop seeing new EXTENDED_ARGs.
3751 The only EXTENDED_ARGs that could be popping up are
3752 ones in jump instructions. So this should converge
3755 if (last_extended_arg_count
!= extended_arg_count
) {
3756 last_extended_arg_count
= extended_arg_count
;
3762 dict_keys_inorder(PyObject
*dict
, int offset
)
3764 PyObject
*tuple
, *k
, *v
;
3765 Py_ssize_t i
, pos
= 0, size
= PyDict_Size(dict
);
3767 tuple
= PyTuple_New(size
);
3770 while (PyDict_Next(dict
, &pos
, &k
, &v
)) {
3771 i
= PyInt_AS_LONG(v
);
3772 k
= PyTuple_GET_ITEM(k
, 0);
3774 assert((i
- offset
) < size
);
3775 assert((i
- offset
) >= 0);
3776 PyTuple_SET_ITEM(tuple
, i
- offset
, k
);
3782 compute_code_flags(struct compiler
*c
)
3784 PySTEntryObject
*ste
= c
->u
->u_ste
;
3786 if (ste
->ste_type
!= ModuleBlock
)
3787 flags
|= CO_NEWLOCALS
;
3788 if (ste
->ste_type
== FunctionBlock
) {
3789 if (!ste
->ste_unoptimized
)
3790 flags
|= CO_OPTIMIZED
;
3791 if (ste
->ste_nested
)
3793 if (ste
->ste_generator
)
3794 flags
|= CO_GENERATOR
;
3796 if (ste
->ste_varargs
)
3797 flags
|= CO_VARARGS
;
3798 if (ste
->ste_varkeywords
)
3799 flags
|= CO_VARKEYWORDS
;
3800 if (ste
->ste_generator
)
3801 flags
|= CO_GENERATOR
;
3803 /* (Only) inherit compilerflags in PyCF_MASK */
3804 flags
|= (c
->c_flags
->cf_flags
& PyCF_MASK
);
3806 n
= PyDict_Size(c
->u
->u_freevars
);
3810 n
= PyDict_Size(c
->u
->u_cellvars
);
3821 static PyCodeObject
*
3822 makecode(struct compiler
*c
, struct assembler
*a
)
3825 PyCodeObject
*co
= NULL
;
3826 PyObject
*consts
= NULL
;
3827 PyObject
*names
= NULL
;
3828 PyObject
*varnames
= NULL
;
3829 PyObject
*filename
= NULL
;
3830 PyObject
*name
= NULL
;
3831 PyObject
*freevars
= NULL
;
3832 PyObject
*cellvars
= NULL
;
3833 PyObject
*bytecode
= NULL
;
3836 tmp
= dict_keys_inorder(c
->u
->u_consts
, 0);
3839 consts
= PySequence_List(tmp
); /* optimize_code requires a list */
3842 names
= dict_keys_inorder(c
->u
->u_names
, 0);
3843 varnames
= dict_keys_inorder(c
->u
->u_varnames
, 0);
3844 if (!consts
|| !names
|| !varnames
)
3847 cellvars
= dict_keys_inorder(c
->u
->u_cellvars
, 0);
3850 freevars
= dict_keys_inorder(c
->u
->u_freevars
, PyTuple_Size(cellvars
));
3853 filename
= PyString_FromString(c
->c_filename
);
3857 nlocals
= PyDict_Size(c
->u
->u_varnames
);
3858 flags
= compute_code_flags(c
);
3862 bytecode
= PyCode_Optimize(a
->a_bytecode
, consts
, names
, a
->a_lnotab
);
3866 tmp
= PyList_AsTuple(consts
); /* PyCode_New requires a tuple */
3872 co
= PyCode_New(c
->u
->u_argcount
, nlocals
, stackdepth(c
), flags
,
3873 bytecode
, consts
, names
, varnames
,
3875 filename
, c
->u
->u_name
,
3876 c
->u
->u_firstlineno
,
3881 Py_XDECREF(varnames
);
3882 Py_XDECREF(filename
);
3884 Py_XDECREF(freevars
);
3885 Py_XDECREF(cellvars
);
3886 Py_XDECREF(bytecode
);
3891 /* For debugging purposes only */
3894 dump_instr(const struct instr
*i
)
3896 const char *jrel
= i
->i_jrel
? "jrel " : "";
3897 const char *jabs
= i
->i_jabs
? "jabs " : "";
3902 sprintf(arg
, "arg: %d ", i
->i_oparg
);
3904 fprintf(stderr
, "line: %d, opcode: %d %s%s%s\n",
3905 i
->i_lineno
, i
->i_opcode
, arg
, jabs
, jrel
);
3909 dump_basicblock(const basicblock
*b
)
3911 const char *seen
= b
->b_seen
? "seen " : "";
3912 const char *b_return
= b
->b_return
? "return " : "";
3913 fprintf(stderr
, "used: %d, depth: %d, offset: %d %s%s\n",
3914 b
->b_iused
, b
->b_startdepth
, b
->b_offset
, seen
, b_return
);
3917 for (i
= 0; i
< b
->b_iused
; i
++) {
3918 fprintf(stderr
, " [%02d] ", i
);
3919 dump_instr(b
->b_instr
+ i
);
3925 static PyCodeObject
*
3926 assemble(struct compiler
*c
, int addNone
)
3928 basicblock
*b
, *entryblock
;
3931 PyCodeObject
*co
= NULL
;
3933 /* Make sure every block that falls off the end returns None.
3934 XXX NEXT_BLOCK() isn't quite right, because if the last
3935 block ends with a jump or return b_next shouldn't set.
3937 if (!c
->u
->u_curblock
->b_return
) {
3940 ADDOP_O(c
, LOAD_CONST
, Py_None
, consts
);
3941 ADDOP(c
, RETURN_VALUE
);
3946 for (b
= c
->u
->u_blocks
; b
!= NULL
; b
= b
->b_list
) {
3951 /* Set firstlineno if it wasn't explicitly set. */
3952 if (!c
->u
->u_firstlineno
) {
3953 if (entryblock
&& entryblock
->b_instr
)
3954 c
->u
->u_firstlineno
= entryblock
->b_instr
->i_lineno
;
3956 c
->u
->u_firstlineno
= 1;
3958 if (!assemble_init(&a
, nblocks
, c
->u
->u_firstlineno
))
3960 dfs(c
, entryblock
, &a
);
3962 /* Can't modify the bytecode after computing jump offsets. */
3963 assemble_jump_offsets(&a
, c
);
3965 /* Emit code in reverse postorder from dfs. */
3966 for (i
= a
.a_nblocks
- 1; i
>= 0; i
--) {
3967 b
= a
.a_postorder
[i
];
3968 for (j
= 0; j
< b
->b_iused
; j
++)
3969 if (!assemble_emit(&a
, &b
->b_instr
[j
]))
3973 if (_PyString_Resize(&a
.a_lnotab
, a
.a_lnotab_off
) < 0)
3975 if (_PyString_Resize(&a
.a_bytecode
, a
.a_offset
) < 0)
3978 co
= makecode(c
, &a
);