1 /*
2 * This file compiles an abstract syntax tree (AST) into Python bytecode.
3 *
4 * The primary entry point is PyAST_Compile(), which returns a
5 * PyCodeObject. The compiler makes several passes to build the code
6 * object:
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
11 * this file.
12 * 5. Optimize the byte code (peephole optimizations). See peephole.c
13 *
14 * Note that compiler_mod() suggests module, but the module ast type
15 * (mod_ty) has cases for expressions and interactive statements.
16 *
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
21 * objects.
22 */
23
24 #include "Python.h"
25
26 #include "Python-ast.h"
27 #include "ast.h"
28 #include "code.h"
29 #include "symtable.h"
30 #include "opcode.h"
31 #include "wordcode_helpers.h"
32
33 #define DEFAULT_BLOCK_SIZE 16
34 #define DEFAULT_BLOCKS 8
35 #define DEFAULT_CODE_SIZE 128
36 #define DEFAULT_LNOTAB_SIZE 16
37
38 #define COMP_GENEXP 0
39 #define COMP_LISTCOMP 1
40 #define COMP_SETCOMP 2
41 #define COMP_DICTCOMP 3
42
43 #define IS_TOP_LEVEL_AWAIT(c) ( \
44 (c->c_flags->cf_flags & PyCF_ALLOW_TOP_LEVEL_AWAIT) \
45 && (c->u->u_ste->ste_type == ModuleBlock))
46
47 struct instr {
48 unsigned i_jabs : 1;
49 unsigned i_jrel : 1;
50 unsigned char i_opcode;
51 int i_oparg;
52 struct basicblock_ *i_target; /* target block (if jump instruction) */
53 int i_lineno;
54 };
55
56 typedef struct basicblock_ {
57 /* Each basicblock in a compilation unit is linked via b_list in the
58 reverse order that the block are allocated. b_list points to the next
59 block, not to be confused with b_next, which is next by control flow. */
60 struct basicblock_ *b_list;
61 /* number of instructions used */
62 int b_iused;
63 /* length of instruction array (b_instr) */
64 int b_ialloc;
65 /* pointer to an array of instructions, initially NULL */
66 struct instr *b_instr;
67 /* If b_next is non-NULL, it is a pointer to the next
68 block reached by normal control flow. */
69 struct basicblock_ *b_next;
70 /* b_seen is used to perform a DFS of basicblocks. */
71 unsigned b_seen : 1;
72 /* b_return is true if a RETURN_VALUE opcode is inserted. */
73 unsigned b_return : 1;
74 /* depth of stack upon entry of block, computed by stackdepth() */
75 int b_startdepth;
76 /* instruction offset for block, computed by assemble_jump_offsets() */
77 int b_offset;
78 } basicblock;
79
80 /* fblockinfo tracks the current frame block.
81
82 A frame block is used to handle loops, try/except, and try/finally.
83 It's called a frame block to distinguish it from a basic block in the
84 compiler IR.
85 */
86
87 enum fblocktype { WHILE_LOOP, FOR_LOOP, TRY_EXCEPT, FINALLY_TRY, FINALLY_END,
88 WITH, ASYNC_WITH, HANDLER_CLEANUP, POP_VALUE, EXCEPTION_HANDLER };
89
90 struct fblockinfo {
91 enum fblocktype fb_type;
92 basicblock *fb_block;
93 /* (optional) type-specific exit or cleanup block */
94 basicblock *fb_exit;
95 /* (optional) additional information required for unwinding */
96 void *fb_datum;
97 };
98
99 enum {
100 COMPILER_SCOPE_MODULE,
101 COMPILER_SCOPE_CLASS,
102 COMPILER_SCOPE_FUNCTION,
103 COMPILER_SCOPE_ASYNC_FUNCTION,
104 COMPILER_SCOPE_LAMBDA,
105 COMPILER_SCOPE_COMPREHENSION,
106 };
107
108 /* The following items change on entry and exit of code blocks.
109 They must be saved and restored when returning to a block.
110 */
111 struct compiler_unit {
112 PySTEntryObject *u_ste;
113
114 PyObject *u_name;
115 PyObject *u_qualname; /* dot-separated qualified name (lazy) */
116 int u_scope_type;
117
118 /* The following fields are dicts that map objects to
119 the index of them in co_XXX. The index is used as
120 the argument for opcodes that refer to those collections.
121 */
122 PyObject *u_consts; /* all constants */
123 PyObject *u_names; /* all names */
124 PyObject *u_varnames; /* local variables */
125 PyObject *u_cellvars; /* cell variables */
126 PyObject *u_freevars; /* free variables */
127
128 PyObject *u_private; /* for private name mangling */
129
130 Py_ssize_t u_argcount; /* number of arguments for block */
131 Py_ssize_t u_posonlyargcount; /* number of positional only arguments for block */
132 Py_ssize_t u_kwonlyargcount; /* number of keyword only arguments for block */
133 /* Pointer to the most recently allocated block. By following b_list
134 members, you can reach all early allocated blocks. */
135 basicblock *u_blocks;
136 basicblock *u_curblock; /* pointer to current block */
137
138 int u_nfblocks;
139 struct fblockinfo u_fblock[CO_MAXBLOCKS];
140
141 int u_firstlineno; /* the first lineno of the block */
142 int u_lineno; /* the lineno for the current stmt */
143 int u_col_offset; /* the offset of the current stmt */
144 };
145
146 /* This struct captures the global state of a compilation.
147
148 The u pointer points to the current compilation unit, while units
149 for enclosing blocks are stored in c_stack. The u and c_stack are
150 managed by compiler_enter_scope() and compiler_exit_scope().
151
152 Note that we don't track recursion levels during compilation - the
153 task of detecting and rejecting excessive levels of nesting is
154 handled by the symbol analysis pass.
155
156 */
157
158 struct compiler {
159 PyObject *c_filename;
160 struct symtable *c_st;
161 PyFutureFeatures *c_future; /* pointer to module's __future__ */
162 PyCompilerFlags *c_flags;
163
164 int c_optimize; /* optimization level */
165 int c_interactive; /* true if in interactive mode */
166 int c_nestlevel;
167 int c_do_not_emit_bytecode; /* The compiler won't emit any bytecode
168 if this value is different from zero.
169 This can be used to temporarily visit
170 nodes without emitting bytecode to
171 check only errors. */
172
173 PyObject *c_const_cache; /* Python dict holding all constants,
174 including names tuple */
175 struct compiler_unit *u; /* compiler state for current block */
176 PyObject *c_stack; /* Python list holding compiler_unit ptrs */
177 PyArena *c_arena; /* pointer to memory allocation arena */
178 };
179
180 static int compiler_enter_scope(struct compiler *, identifier, int, void *, int);
181 static void compiler_free(struct compiler *);
182 static basicblock *compiler_new_block(struct compiler *);
183 static int compiler_next_instr(basicblock *);
184 static int compiler_addop(struct compiler *, int);
185 static int compiler_addop_i(struct compiler *, int, Py_ssize_t);
186 static int compiler_addop_j(struct compiler *, int, basicblock *, int);
187 static int compiler_error(struct compiler *, const char *);
188 static int compiler_warn(struct compiler *, const char *, ...);
189 static int compiler_nameop(struct compiler *, identifier, expr_context_ty);
190
191 static PyCodeObject *compiler_mod(struct compiler *, mod_ty);
192 static int compiler_visit_stmt(struct compiler *, stmt_ty);
193 static int compiler_visit_keyword(struct compiler *, keyword_ty);
194 static int compiler_visit_expr(struct compiler *, expr_ty);
195 static int compiler_augassign(struct compiler *, stmt_ty);
196 static int compiler_annassign(struct compiler *, stmt_ty);
197 static int compiler_subscript(struct compiler *, expr_ty);
198 static int compiler_slice(struct compiler *, expr_ty);
199
200 static int inplace_binop(operator_ty);
201 static int are_all_items_const(asdl_seq *, Py_ssize_t, Py_ssize_t);
202 static int expr_constant(expr_ty);
203
204 static int compiler_with(struct compiler *, stmt_ty, int);
205 static int compiler_async_with(struct compiler *, stmt_ty, int);
206 static int compiler_async_for(struct compiler *, stmt_ty);
207 static int compiler_call_helper(struct compiler *c, int n,
208 asdl_seq *args,
209 asdl_seq *keywords);
210 static int compiler_try_except(struct compiler *, stmt_ty);
211 static int compiler_set_qualname(struct compiler *);
212
213 static int compiler_sync_comprehension_generator(
214 struct compiler *c,
215 asdl_seq *generators, int gen_index,
216 int depth,
217 expr_ty elt, expr_ty val, int type);
218
219 static int compiler_async_comprehension_generator(
220 struct compiler *c,
221 asdl_seq *generators, int gen_index,
222 int depth,
223 expr_ty elt, expr_ty val, int type);
224
225 static PyCodeObject *assemble(struct compiler *, int addNone);
226 static PyObject *__doc__, *__annotations__;
227
228 #define CAPSULE_NAME "compile.c compiler unit"
229
230 PyObject *
_Py_Mangle(PyObject * privateobj,PyObject * ident)231 _Py_Mangle(PyObject *privateobj, PyObject *ident)
232 {
233 /* Name mangling: __private becomes _classname__private.
234 This is independent from how the name is used. */
235 PyObject *result;
236 size_t nlen, plen, ipriv;
237 Py_UCS4 maxchar;
238 if (privateobj == NULL || !PyUnicode_Check(privateobj) ||
239 PyUnicode_READ_CHAR(ident, 0) != '_' ||
240 PyUnicode_READ_CHAR(ident, 1) != '_') {
241 Py_INCREF(ident);
242 return ident;
243 }
244 nlen = PyUnicode_GET_LENGTH(ident);
245 plen = PyUnicode_GET_LENGTH(privateobj);
246 /* Don't mangle __id__ or names with dots.
247
248 The only time a name with a dot can occur is when
249 we are compiling an import statement that has a
250 package name.
251
252 TODO(jhylton): Decide whether we want to support
253 mangling of the module name, e.g. __M.X.
254 */
255 if ((PyUnicode_READ_CHAR(ident, nlen-1) == '_' &&
256 PyUnicode_READ_CHAR(ident, nlen-2) == '_') ||
257 PyUnicode_FindChar(ident, '.', 0, nlen, 1) != -1) {
258 Py_INCREF(ident);
259 return ident; /* Don't mangle __whatever__ */
260 }
261 /* Strip leading underscores from class name */
262 ipriv = 0;
263 while (PyUnicode_READ_CHAR(privateobj, ipriv) == '_')
264 ipriv++;
265 if (ipriv == plen) {
266 Py_INCREF(ident);
267 return ident; /* Don't mangle if class is just underscores */
268 }
269 plen -= ipriv;
270
271 if (plen + nlen >= PY_SSIZE_T_MAX - 1) {
272 PyErr_SetString(PyExc_OverflowError,
273 "private identifier too large to be mangled");
274 return NULL;
275 }
276
277 maxchar = PyUnicode_MAX_CHAR_VALUE(ident);
278 if (PyUnicode_MAX_CHAR_VALUE(privateobj) > maxchar)
279 maxchar = PyUnicode_MAX_CHAR_VALUE(privateobj);
280
281 result = PyUnicode_New(1 + nlen + plen, maxchar);
282 if (!result)
283 return 0;
284 /* ident = "_" + priv[ipriv:] + ident # i.e. 1+plen+nlen bytes */
285 PyUnicode_WRITE(PyUnicode_KIND(result), PyUnicode_DATA(result), 0, '_');
286 if (PyUnicode_CopyCharacters(result, 1, privateobj, ipriv, plen) < 0) {
287 Py_DECREF(result);
288 return NULL;
289 }
290 if (PyUnicode_CopyCharacters(result, plen+1, ident, 0, nlen) < 0) {
291 Py_DECREF(result);
292 return NULL;
293 }
294 assert(_PyUnicode_CheckConsistency(result, 1));
295 return result;
296 }
297
298 static int
compiler_init(struct compiler * c)299 compiler_init(struct compiler *c)
300 {
301 memset(c, 0, sizeof(struct compiler));
302
303 c->c_const_cache = PyDict_New();
304 if (!c->c_const_cache) {
305 return 0;
306 }
307
308 c->c_stack = PyList_New(0);
309 if (!c->c_stack) {
310 Py_CLEAR(c->c_const_cache);
311 return 0;
312 }
313
314 return 1;
315 }
316
317 PyCodeObject *
PyAST_CompileObject(mod_ty mod,PyObject * filename,PyCompilerFlags * flags,int optimize,PyArena * arena)318 PyAST_CompileObject(mod_ty mod, PyObject *filename, PyCompilerFlags *flags,
319 int optimize, PyArena *arena)
320 {
321 struct compiler c;
322 PyCodeObject *co = NULL;
323 PyCompilerFlags local_flags = _PyCompilerFlags_INIT;
324 int merged;
325
326 if (!__doc__) {
327 __doc__ = PyUnicode_InternFromString("__doc__");
328 if (!__doc__)
329 return NULL;
330 }
331 if (!__annotations__) {
332 __annotations__ = PyUnicode_InternFromString("__annotations__");
333 if (!__annotations__)
334 return NULL;
335 }
336 if (!compiler_init(&c))
337 return NULL;
338 Py_INCREF(filename);
339 c.c_filename = filename;
340 c.c_arena = arena;
341 c.c_future = PyFuture_FromASTObject(mod, filename);
342 if (c.c_future == NULL)
343 goto finally;
344 if (!flags) {
345 flags = &local_flags;
346 }
347 merged = c.c_future->ff_features | flags->cf_flags;
348 c.c_future->ff_features = merged;
349 flags->cf_flags = merged;
350 c.c_flags = flags;
351 c.c_optimize = (optimize == -1) ? _Py_GetConfig()->optimization_level : optimize;
352 c.c_nestlevel = 0;
353 c.c_do_not_emit_bytecode = 0;
354
355 _PyASTOptimizeState state;
356 state.optimize = c.c_optimize;
357 state.ff_features = merged;
358
359 if (!_PyAST_Optimize(mod, arena, &state)) {
360 goto finally;
361 }
362
363 c.c_st = PySymtable_BuildObject(mod, filename, c.c_future);
364 if (c.c_st == NULL) {
365 if (!PyErr_Occurred())
366 PyErr_SetString(PyExc_SystemError, "no symtable");
367 goto finally;
368 }
369
370 co = compiler_mod(&c, mod);
371
372 finally:
373 compiler_free(&c);
374 assert(co || PyErr_Occurred());
375 return co;
376 }
377
378 PyCodeObject *
PyAST_CompileEx(mod_ty mod,const char * filename_str,PyCompilerFlags * flags,int optimize,PyArena * arena)379 PyAST_CompileEx(mod_ty mod, const char *filename_str, PyCompilerFlags *flags,
380 int optimize, PyArena *arena)
381 {
382 PyObject *filename;
383 PyCodeObject *co;
384 filename = PyUnicode_DecodeFSDefault(filename_str);
385 if (filename == NULL)
386 return NULL;
387 co = PyAST_CompileObject(mod, filename, flags, optimize, arena);
388 Py_DECREF(filename);
389 return co;
390
391 }
392
393 PyCodeObject *
PyNode_Compile(struct _node * n,const char * filename)394 PyNode_Compile(struct _node *n, const char *filename)
395 {
396 PyCodeObject *co = NULL;
397 mod_ty mod;
398 PyArena *arena = PyArena_New();
399 if (!arena)
400 return NULL;
401 mod = PyAST_FromNode(n, NULL, filename, arena);
402 if (mod)
403 co = PyAST_Compile(mod, filename, NULL, arena);
404 PyArena_Free(arena);
405 return co;
406 }
407
408 static void
compiler_free(struct compiler * c)409 compiler_free(struct compiler *c)
410 {
411 if (c->c_st)
412 PySymtable_Free(c->c_st);
413 if (c->c_future)
414 PyObject_Free(c->c_future);
415 Py_XDECREF(c->c_filename);
416 Py_DECREF(c->c_const_cache);
417 Py_DECREF(c->c_stack);
418 }
419
420 static PyObject *
list2dict(PyObject * list)421 list2dict(PyObject *list)
422 {
423 Py_ssize_t i, n;
424 PyObject *v, *k;
425 PyObject *dict = PyDict_New();
426 if (!dict) return NULL;
427
428 n = PyList_Size(list);
429 for (i = 0; i < n; i++) {
430 v = PyLong_FromSsize_t(i);
431 if (!v) {
432 Py_DECREF(dict);
433 return NULL;
434 }
435 k = PyList_GET_ITEM(list, i);
436 if (PyDict_SetItem(dict, k, v) < 0) {
437 Py_DECREF(v);
438 Py_DECREF(dict);
439 return NULL;
440 }
441 Py_DECREF(v);
442 }
443 return dict;
444 }
445
446 /* Return new dict containing names from src that match scope(s).
447
448 src is a symbol table dictionary. If the scope of a name matches
449 either scope_type or flag is set, insert it into the new dict. The
450 values are integers, starting at offset and increasing by one for
451 each key.
452 */
453
454 static PyObject *
dictbytype(PyObject * src,int scope_type,int flag,Py_ssize_t offset)455 dictbytype(PyObject *src, int scope_type, int flag, Py_ssize_t offset)
456 {
457 Py_ssize_t i = offset, scope, num_keys, key_i;
458 PyObject *k, *v, *dest = PyDict_New();
459 PyObject *sorted_keys;
460
461 assert(offset >= 0);
462 if (dest == NULL)
463 return NULL;
464
465 /* Sort the keys so that we have a deterministic order on the indexes
466 saved in the returned dictionary. These indexes are used as indexes
467 into the free and cell var storage. Therefore if they aren't
468 deterministic, then the generated bytecode is not deterministic.
469 */
470 sorted_keys = PyDict_Keys(src);
471 if (sorted_keys == NULL)
472 return NULL;
473 if (PyList_Sort(sorted_keys) != 0) {
474 Py_DECREF(sorted_keys);
475 return NULL;
476 }
477 num_keys = PyList_GET_SIZE(sorted_keys);
478
479 for (key_i = 0; key_i < num_keys; key_i++) {
480 /* XXX this should probably be a macro in symtable.h */
481 long vi;
482 k = PyList_GET_ITEM(sorted_keys, key_i);
483 v = PyDict_GetItem(src, k);
484 assert(PyLong_Check(v));
485 vi = PyLong_AS_LONG(v);
486 scope = (vi >> SCOPE_OFFSET) & SCOPE_MASK;
487
488 if (scope == scope_type || vi & flag) {
489 PyObject *item = PyLong_FromSsize_t(i);
490 if (item == NULL) {
491 Py_DECREF(sorted_keys);
492 Py_DECREF(dest);
493 return NULL;
494 }
495 i++;
496 if (PyDict_SetItem(dest, k, item) < 0) {
497 Py_DECREF(sorted_keys);
498 Py_DECREF(item);
499 Py_DECREF(dest);
500 return NULL;
501 }
502 Py_DECREF(item);
503 }
504 }
505 Py_DECREF(sorted_keys);
506 return dest;
507 }
508
509 static void
compiler_unit_check(struct compiler_unit * u)510 compiler_unit_check(struct compiler_unit *u)
511 {
512 basicblock *block;
513 for (block = u->u_blocks; block != NULL; block = block->b_list) {
514 assert((uintptr_t)block != 0xcbcbcbcbU);
515 assert((uintptr_t)block != 0xfbfbfbfbU);
516 assert((uintptr_t)block != 0xdbdbdbdbU);
517 if (block->b_instr != NULL) {
518 assert(block->b_ialloc > 0);
519 assert(block->b_iused > 0);
520 assert(block->b_ialloc >= block->b_iused);
521 }
522 else {
523 assert (block->b_iused == 0);
524 assert (block->b_ialloc == 0);
525 }
526 }
527 }
528
529 static void
compiler_unit_free(struct compiler_unit * u)530 compiler_unit_free(struct compiler_unit *u)
531 {
532 basicblock *b, *next;
533
534 compiler_unit_check(u);
535 b = u->u_blocks;
536 while (b != NULL) {
537 if (b->b_instr)
538 PyObject_Free((void *)b->b_instr);
539 next = b->b_list;
540 PyObject_Free((void *)b);
541 b = next;
542 }
543 Py_CLEAR(u->u_ste);
544 Py_CLEAR(u->u_name);
545 Py_CLEAR(u->u_qualname);
546 Py_CLEAR(u->u_consts);
547 Py_CLEAR(u->u_names);
548 Py_CLEAR(u->u_varnames);
549 Py_CLEAR(u->u_freevars);
550 Py_CLEAR(u->u_cellvars);
551 Py_CLEAR(u->u_private);
552 PyObject_Free(u);
553 }
554
555 static int
compiler_enter_scope(struct compiler * c,identifier name,int scope_type,void * key,int lineno)556 compiler_enter_scope(struct compiler *c, identifier name,
557 int scope_type, void *key, int lineno)
558 {
559 struct compiler_unit *u;
560 basicblock *block;
561
562 u = (struct compiler_unit *)PyObject_Calloc(1, sizeof(
563 struct compiler_unit));
564 if (!u) {
565 PyErr_NoMemory();
566 return 0;
567 }
568 u->u_scope_type = scope_type;
569 u->u_argcount = 0;
570 u->u_posonlyargcount = 0;
571 u->u_kwonlyargcount = 0;
572 u->u_ste = PySymtable_Lookup(c->c_st, key);
573 if (!u->u_ste) {
574 compiler_unit_free(u);
575 return 0;
576 }
577 Py_INCREF(name);
578 u->u_name = name;
579 u->u_varnames = list2dict(u->u_ste->ste_varnames);
580 u->u_cellvars = dictbytype(u->u_ste->ste_symbols, CELL, 0, 0);
581 if (!u->u_varnames || !u->u_cellvars) {
582 compiler_unit_free(u);
583 return 0;
584 }
585 if (u->u_ste->ste_needs_class_closure) {
586 /* Cook up an implicit __class__ cell. */
587 _Py_IDENTIFIER(__class__);
588 PyObject *name;
589 int res;
590 assert(u->u_scope_type == COMPILER_SCOPE_CLASS);
591 assert(PyDict_GET_SIZE(u->u_cellvars) == 0);
592 name = _PyUnicode_FromId(&PyId___class__);
593 if (!name) {
594 compiler_unit_free(u);
595 return 0;
596 }
597 res = PyDict_SetItem(u->u_cellvars, name, _PyLong_Zero);
598 if (res < 0) {
599 compiler_unit_free(u);
600 return 0;
601 }
602 }
603
604 u->u_freevars = dictbytype(u->u_ste->ste_symbols, FREE, DEF_FREE_CLASS,
605 PyDict_GET_SIZE(u->u_cellvars));
606 if (!u->u_freevars) {
607 compiler_unit_free(u);
608 return 0;
609 }
610
611 u->u_blocks = NULL;
612 u->u_nfblocks = 0;
613 u->u_firstlineno = lineno;
614 u->u_lineno = 0;
615 u->u_col_offset = 0;
616 u->u_consts = PyDict_New();
617 if (!u->u_consts) {
618 compiler_unit_free(u);
619 return 0;
620 }
621 u->u_names = PyDict_New();
622 if (!u->u_names) {
623 compiler_unit_free(u);
624 return 0;
625 }
626
627 u->u_private = NULL;
628
629 /* Push the old compiler_unit on the stack. */
630 if (c->u) {
631 PyObject *capsule = PyCapsule_New(c->u, CAPSULE_NAME, NULL);
632 if (!capsule || PyList_Append(c->c_stack, capsule) < 0) {
633 Py_XDECREF(capsule);
634 compiler_unit_free(u);
635 return 0;
636 }
637 Py_DECREF(capsule);
638 u->u_private = c->u->u_private;
639 Py_XINCREF(u->u_private);
640 }
641 c->u = u;
642
643 c->c_nestlevel++;
644
645 block = compiler_new_block(c);
646 if (block == NULL)
647 return 0;
648 c->u->u_curblock = block;
649
650 if (u->u_scope_type != COMPILER_SCOPE_MODULE) {
651 if (!compiler_set_qualname(c))
652 return 0;
653 }
654
655 return 1;
656 }
657
658 static void
compiler_exit_scope(struct compiler * c)659 compiler_exit_scope(struct compiler *c)
660 {
661 Py_ssize_t n;
662 PyObject *capsule;
663
664 c->c_nestlevel--;
665 compiler_unit_free(c->u);
666 /* Restore c->u to the parent unit. */
667 n = PyList_GET_SIZE(c->c_stack) - 1;
668 if (n >= 0) {
669 capsule = PyList_GET_ITEM(c->c_stack, n);
670 c->u = (struct compiler_unit *)PyCapsule_GetPointer(capsule, CAPSULE_NAME);
671 assert(c->u);
672 /* we are deleting from a list so this really shouldn't fail */
673 if (PySequence_DelItem(c->c_stack, n) < 0)
674 Py_FatalError("compiler_exit_scope()");
675 compiler_unit_check(c->u);
676 }
677 else
678 c->u = NULL;
679
680 }
681
682 static int
compiler_set_qualname(struct compiler * c)683 compiler_set_qualname(struct compiler *c)
684 {
685 _Py_static_string(dot, ".");
686 _Py_static_string(dot_locals, ".<locals>");
687 Py_ssize_t stack_size;
688 struct compiler_unit *u = c->u;
689 PyObject *name, *base, *dot_str, *dot_locals_str;
690
691 base = NULL;
692 stack_size = PyList_GET_SIZE(c->c_stack);
693 assert(stack_size >= 1);
694 if (stack_size > 1) {
695 int scope, force_global = 0;
696 struct compiler_unit *parent;
697 PyObject *mangled, *capsule;
698
699 capsule = PyList_GET_ITEM(c->c_stack, stack_size - 1);
700 parent = (struct compiler_unit *)PyCapsule_GetPointer(capsule, CAPSULE_NAME);
701 assert(parent);
702
703 if (u->u_scope_type == COMPILER_SCOPE_FUNCTION
704 || u->u_scope_type == COMPILER_SCOPE_ASYNC_FUNCTION
705 || u->u_scope_type == COMPILER_SCOPE_CLASS) {
706 assert(u->u_name);
707 mangled = _Py_Mangle(parent->u_private, u->u_name);
708 if (!mangled)
709 return 0;
710 scope = PyST_GetScope(parent->u_ste, mangled);
711 Py_DECREF(mangled);
712 assert(scope != GLOBAL_IMPLICIT);
713 if (scope == GLOBAL_EXPLICIT)
714 force_global = 1;
715 }
716
717 if (!force_global) {
718 if (parent->u_scope_type == COMPILER_SCOPE_FUNCTION
719 || parent->u_scope_type == COMPILER_SCOPE_ASYNC_FUNCTION
720 || parent->u_scope_type == COMPILER_SCOPE_LAMBDA) {
721 dot_locals_str = _PyUnicode_FromId(&dot_locals);
722 if (dot_locals_str == NULL)
723 return 0;
724 base = PyUnicode_Concat(parent->u_qualname, dot_locals_str);
725 if (base == NULL)
726 return 0;
727 }
728 else {
729 Py_INCREF(parent->u_qualname);
730 base = parent->u_qualname;
731 }
732 }
733 }
734
735 if (base != NULL) {
736 dot_str = _PyUnicode_FromId(&dot);
737 if (dot_str == NULL) {
738 Py_DECREF(base);
739 return 0;
740 }
741 name = PyUnicode_Concat(base, dot_str);
742 Py_DECREF(base);
743 if (name == NULL)
744 return 0;
745 PyUnicode_Append(&name, u->u_name);
746 if (name == NULL)
747 return 0;
748 }
749 else {
750 Py_INCREF(u->u_name);
751 name = u->u_name;
752 }
753 u->u_qualname = name;
754
755 return 1;
756 }
757
758
759 /* Allocate a new block and return a pointer to it.
760 Returns NULL on error.
761 */
762
763 static basicblock *
compiler_new_block(struct compiler * c)764 compiler_new_block(struct compiler *c)
765 {
766 basicblock *b;
767 struct compiler_unit *u;
768
769 u = c->u;
770 b = (basicblock *)PyObject_Calloc(1, sizeof(basicblock));
771 if (b == NULL) {
772 PyErr_NoMemory();
773 return NULL;
774 }
775 /* Extend the singly linked list of blocks with new block. */
776 b->b_list = u->u_blocks;
777 u->u_blocks = b;
778 return b;
779 }
780
781 static basicblock *
compiler_next_block(struct compiler * c)782 compiler_next_block(struct compiler *c)
783 {
784 basicblock *block = compiler_new_block(c);
785 if (block == NULL)
786 return NULL;
787 c->u->u_curblock->b_next = block;
788 c->u->u_curblock = block;
789 return block;
790 }
791
792 static basicblock *
compiler_use_next_block(struct compiler * c,basicblock * block)793 compiler_use_next_block(struct compiler *c, basicblock *block)
794 {
795 assert(block != NULL);
796 c->u->u_curblock->b_next = block;
797 c->u->u_curblock = block;
798 return block;
799 }
800
801 /* Returns the offset of the next instruction in the current block's
802 b_instr array. Resizes the b_instr as necessary.
803 Returns -1 on failure.
804 */
805
806 static int
compiler_next_instr(basicblock * b)807 compiler_next_instr(basicblock *b)
808 {
809 assert(b != NULL);
810 if (b->b_instr == NULL) {
811 b->b_instr = (struct instr *)PyObject_Calloc(
812 DEFAULT_BLOCK_SIZE, sizeof(struct instr));
813 if (b->b_instr == NULL) {
814 PyErr_NoMemory();
815 return -1;
816 }
817 b->b_ialloc = DEFAULT_BLOCK_SIZE;
818 }
819 else if (b->b_iused == b->b_ialloc) {
820 struct instr *tmp;
821 size_t oldsize, newsize;
822 oldsize = b->b_ialloc * sizeof(struct instr);
823 newsize = oldsize << 1;
824
825 if (oldsize > (SIZE_MAX >> 1)) {
826 PyErr_NoMemory();
827 return -1;
828 }
829
830 if (newsize == 0) {
831 PyErr_NoMemory();
832 return -1;
833 }
834 b->b_ialloc <<= 1;
835 tmp = (struct instr *)PyObject_Realloc(
836 (void *)b->b_instr, newsize);
837 if (tmp == NULL) {
838 PyErr_NoMemory();
839 return -1;
840 }
841 b->b_instr = tmp;
842 memset((char *)b->b_instr + oldsize, 0, newsize - oldsize);
843 }
844 return b->b_iused++;
845 }
846
847 /* Set the line number and column offset for the following instructions.
848
849 The line number is reset in the following cases:
850 - when entering a new scope
851 - on each statement
852 - on each expression and sub-expression
853 - before the "except" and "finally" clauses
854 */
855
856 #define SET_LOC(c, x) \
857 (c)->u->u_lineno = (x)->lineno; \
858 (c)->u->u_col_offset = (x)->col_offset;
859
860 /* Return the stack effect of opcode with argument oparg.
861
862 Some opcodes have different stack effect when jump to the target and
863 when not jump. The 'jump' parameter specifies the case:
864
865 * 0 -- when not jump
866 * 1 -- when jump
867 * -1 -- maximal
868 */
869 /* XXX Make the stack effect of WITH_CLEANUP_START and
870 WITH_CLEANUP_FINISH deterministic. */
871 static int
stack_effect(int opcode,int oparg,int jump)872 stack_effect(int opcode, int oparg, int jump)
873 {
874 switch (opcode) {
875 case NOP:
876 case EXTENDED_ARG:
877 return 0;
878
879 /* Stack manipulation */
880 case POP_TOP:
881 return -1;
882 case ROT_TWO:
883 case ROT_THREE:
884 case ROT_FOUR:
885 return 0;
886 case DUP_TOP:
887 return 1;
888 case DUP_TOP_TWO:
889 return 2;
890
891 /* Unary operators */
892 case UNARY_POSITIVE:
893 case UNARY_NEGATIVE:
894 case UNARY_NOT:
895 case UNARY_INVERT:
896 return 0;
897
898 case SET_ADD:
899 case LIST_APPEND:
900 return -1;
901 case MAP_ADD:
902 return -2;
903
904 /* Binary operators */
905 case BINARY_POWER:
906 case BINARY_MULTIPLY:
907 case BINARY_MATRIX_MULTIPLY:
908 case BINARY_MODULO:
909 case BINARY_ADD:
910 case BINARY_SUBTRACT:
911 case BINARY_SUBSCR:
912 case BINARY_FLOOR_DIVIDE:
913 case BINARY_TRUE_DIVIDE:
914 return -1;
915 case INPLACE_FLOOR_DIVIDE:
916 case INPLACE_TRUE_DIVIDE:
917 return -1;
918
919 case INPLACE_ADD:
920 case INPLACE_SUBTRACT:
921 case INPLACE_MULTIPLY:
922 case INPLACE_MATRIX_MULTIPLY:
923 case INPLACE_MODULO:
924 return -1;
925 case STORE_SUBSCR:
926 return -3;
927 case DELETE_SUBSCR:
928 return -2;
929
930 case BINARY_LSHIFT:
931 case BINARY_RSHIFT:
932 case BINARY_AND:
933 case BINARY_XOR:
934 case BINARY_OR:
935 return -1;
936 case INPLACE_POWER:
937 return -1;
938 case GET_ITER:
939 return 0;
940
941 case PRINT_EXPR:
942 return -1;
943 case LOAD_BUILD_CLASS:
944 return 1;
945 case INPLACE_LSHIFT:
946 case INPLACE_RSHIFT:
947 case INPLACE_AND:
948 case INPLACE_XOR:
949 case INPLACE_OR:
950 return -1;
951
952 case SETUP_WITH:
953 /* 1 in the normal flow.
954 * Restore the stack position and push 6 values before jumping to
955 * the handler if an exception be raised. */
956 return jump ? 6 : 1;
957 case RETURN_VALUE:
958 return -1;
959 case IMPORT_STAR:
960 return -1;
961 case SETUP_ANNOTATIONS:
962 return 0;
963 case YIELD_VALUE:
964 return 0;
965 case YIELD_FROM:
966 return -1;
967 case POP_BLOCK:
968 return 0;
969 case POP_EXCEPT:
970 return -3;
971
972 case STORE_NAME:
973 return -1;
974 case DELETE_NAME:
975 return 0;
976 case UNPACK_SEQUENCE:
977 return oparg-1;
978 case UNPACK_EX:
979 return (oparg&0xFF) + (oparg>>8);
980 case FOR_ITER:
981 /* -1 at end of iterator, 1 if continue iterating. */
982 return jump > 0 ? -1 : 1;
983
984 case STORE_ATTR:
985 return -2;
986 case DELETE_ATTR:
987 return -1;
988 case STORE_GLOBAL:
989 return -1;
990 case DELETE_GLOBAL:
991 return 0;
992 case LOAD_CONST:
993 return 1;
994 case LOAD_NAME:
995 return 1;
996 case BUILD_TUPLE:
997 case BUILD_LIST:
998 case BUILD_SET:
999 case BUILD_STRING:
1000 return 1-oparg;
1001 case BUILD_MAP:
1002 return 1 - 2*oparg;
1003 case BUILD_CONST_KEY_MAP:
1004 return -oparg;
1005 case LOAD_ATTR:
1006 return 0;
1007 case COMPARE_OP:
1008 case IS_OP:
1009 case CONTAINS_OP:
1010 return -1;
1011 case JUMP_IF_NOT_EXC_MATCH:
1012 return -2;
1013 case IMPORT_NAME:
1014 return -1;
1015 case IMPORT_FROM:
1016 return 1;
1017
1018 /* Jumps */
1019 case JUMP_FORWARD:
1020 case JUMP_ABSOLUTE:
1021 return 0;
1022
1023 case JUMP_IF_TRUE_OR_POP:
1024 case JUMP_IF_FALSE_OR_POP:
1025 return jump ? 0 : -1;
1026
1027 case POP_JUMP_IF_FALSE:
1028 case POP_JUMP_IF_TRUE:
1029 return -1;
1030
1031 case LOAD_GLOBAL:
1032 return 1;
1033
1034 /* Exception handling */
1035 case SETUP_FINALLY:
1036 /* 0 in the normal flow.
1037 * Restore the stack position and push 6 values before jumping to
1038 * the handler if an exception be raised. */
1039 return jump ? 6 : 0;
1040 case RERAISE:
1041 return -3;
1042
1043 case WITH_EXCEPT_START:
1044 return 1;
1045
1046 case LOAD_FAST:
1047 return 1;
1048 case STORE_FAST:
1049 return -1;
1050 case DELETE_FAST:
1051 return 0;
1052
1053 case RAISE_VARARGS:
1054 return -oparg;
1055
1056 /* Functions and calls */
1057 case CALL_FUNCTION:
1058 return -oparg;
1059 case CALL_METHOD:
1060 return -oparg-1;
1061 case CALL_FUNCTION_KW:
1062 return -oparg-1;
1063 case CALL_FUNCTION_EX:
1064 return -1 - ((oparg & 0x01) != 0);
1065 case MAKE_FUNCTION:
1066 return -1 - ((oparg & 0x01) != 0) - ((oparg & 0x02) != 0) -
1067 ((oparg & 0x04) != 0) - ((oparg & 0x08) != 0);
1068 case BUILD_SLICE:
1069 if (oparg == 3)
1070 return -2;
1071 else
1072 return -1;
1073
1074 /* Closures */
1075 case LOAD_CLOSURE:
1076 return 1;
1077 case LOAD_DEREF:
1078 case LOAD_CLASSDEREF:
1079 return 1;
1080 case STORE_DEREF:
1081 return -1;
1082 case DELETE_DEREF:
1083 return 0;
1084
1085 /* Iterators and generators */
1086 case GET_AWAITABLE:
1087 return 0;
1088 case SETUP_ASYNC_WITH:
1089 /* 0 in the normal flow.
1090 * Restore the stack position to the position before the result
1091 * of __aenter__ and push 6 values before jumping to the handler
1092 * if an exception be raised. */
1093 return jump ? -1 + 6 : 0;
1094 case BEFORE_ASYNC_WITH:
1095 return 1;
1096 case GET_AITER:
1097 return 0;
1098 case GET_ANEXT:
1099 return 1;
1100 case GET_YIELD_FROM_ITER:
1101 return 0;
1102 case END_ASYNC_FOR:
1103 return -7;
1104 case FORMAT_VALUE:
1105 /* If there's a fmt_spec on the stack, we go from 2->1,
1106 else 1->1. */
1107 return (oparg & FVS_MASK) == FVS_HAVE_SPEC ? -1 : 0;
1108 case LOAD_METHOD:
1109 return 1;
1110 case LOAD_ASSERTION_ERROR:
1111 return 1;
1112 case LIST_TO_TUPLE:
1113 return 0;
1114 case LIST_EXTEND:
1115 case SET_UPDATE:
1116 case DICT_MERGE:
1117 case DICT_UPDATE:
1118 return -1;
1119 default:
1120 return PY_INVALID_STACK_EFFECT;
1121 }
1122 return PY_INVALID_STACK_EFFECT; /* not reachable */
1123 }
1124
1125 int
PyCompile_OpcodeStackEffectWithJump(int opcode,int oparg,int jump)1126 PyCompile_OpcodeStackEffectWithJump(int opcode, int oparg, int jump)
1127 {
1128 return stack_effect(opcode, oparg, jump);
1129 }
1130
1131 int
PyCompile_OpcodeStackEffect(int opcode,int oparg)1132 PyCompile_OpcodeStackEffect(int opcode, int oparg)
1133 {
1134 return stack_effect(opcode, oparg, -1);
1135 }
1136
1137 /* Add an opcode with no argument.
1138 Returns 0 on failure, 1 on success.
1139 */
1140
1141 static int
compiler_addop(struct compiler * c,int opcode)1142 compiler_addop(struct compiler *c, int opcode)
1143 {
1144 basicblock *b;
1145 struct instr *i;
1146 int off;
1147 assert(!HAS_ARG(opcode));
1148 if (c->c_do_not_emit_bytecode) {
1149 return 1;
1150 }
1151 off = compiler_next_instr(c->u->u_curblock);
1152 if (off < 0)
1153 return 0;
1154 b = c->u->u_curblock;
1155 i = &b->b_instr[off];
1156 i->i_opcode = opcode;
1157 i->i_oparg = 0;
1158 if (opcode == RETURN_VALUE)
1159 b->b_return = 1;
1160 i->i_lineno = c->u->u_lineno;
1161 return 1;
1162 }
1163
1164 static Py_ssize_t
compiler_add_o(PyObject * dict,PyObject * o)1165 compiler_add_o(PyObject *dict, PyObject *o)
1166 {
1167 PyObject *v;
1168 Py_ssize_t arg;
1169
1170 v = PyDict_GetItemWithError(dict, o);
1171 if (!v) {
1172 if (PyErr_Occurred()) {
1173 return -1;
1174 }
1175 arg = PyDict_GET_SIZE(dict);
1176 v = PyLong_FromSsize_t(arg);
1177 if (!v) {
1178 return -1;
1179 }
1180 if (PyDict_SetItem(dict, o, v) < 0) {
1181 Py_DECREF(v);
1182 return -1;
1183 }
1184 Py_DECREF(v);
1185 }
1186 else
1187 arg = PyLong_AsLong(v);
1188 return arg;
1189 }
1190
1191 // Merge const *o* recursively and return constant key object.
1192 static PyObject*
merge_consts_recursive(struct compiler * c,PyObject * o)1193 merge_consts_recursive(struct compiler *c, PyObject *o)
1194 {
1195 // None and Ellipsis are singleton, and key is the singleton.
1196 // No need to merge object and key.
1197 if (o == Py_None || o == Py_Ellipsis) {
1198 Py_INCREF(o);
1199 return o;
1200 }
1201
1202 PyObject *key = _PyCode_ConstantKey(o);
1203 if (key == NULL) {
1204 return NULL;
1205 }
1206
1207 // t is borrowed reference
1208 PyObject *t = PyDict_SetDefault(c->c_const_cache, key, key);
1209 if (t != key) {
1210 // o is registered in c_const_cache. Just use it.
1211 Py_XINCREF(t);
1212 Py_DECREF(key);
1213 return t;
1214 }
1215
1216 // We registered o in c_const_cache.
1217 // When o is a tuple or frozenset, we want to merge its
1218 // items too.
1219 if (PyTuple_CheckExact(o)) {
1220 Py_ssize_t len = PyTuple_GET_SIZE(o);
1221 for (Py_ssize_t i = 0; i < len; i++) {
1222 PyObject *item = PyTuple_GET_ITEM(o, i);
1223 PyObject *u = merge_consts_recursive(c, item);
1224 if (u == NULL) {
1225 Py_DECREF(key);
1226 return NULL;
1227 }
1228
1229 // See _PyCode_ConstantKey()
1230 PyObject *v; // borrowed
1231 if (PyTuple_CheckExact(u)) {
1232 v = PyTuple_GET_ITEM(u, 1);
1233 }
1234 else {
1235 v = u;
1236 }
1237 if (v != item) {
1238 Py_INCREF(v);
1239 PyTuple_SET_ITEM(o, i, v);
1240 Py_DECREF(item);
1241 }
1242
1243 Py_DECREF(u);
1244 }
1245 }
1246 else if (PyFrozenSet_CheckExact(o)) {
1247 // *key* is tuple. And its first item is frozenset of
1248 // constant keys.
1249 // See _PyCode_ConstantKey() for detail.
1250 assert(PyTuple_CheckExact(key));
1251 assert(PyTuple_GET_SIZE(key) == 2);
1252
1253 Py_ssize_t len = PySet_GET_SIZE(o);
1254 if (len == 0) { // empty frozenset should not be re-created.
1255 return key;
1256 }
1257 PyObject *tuple = PyTuple_New(len);
1258 if (tuple == NULL) {
1259 Py_DECREF(key);
1260 return NULL;
1261 }
1262 Py_ssize_t i = 0, pos = 0;
1263 PyObject *item;
1264 Py_hash_t hash;
1265 while (_PySet_NextEntry(o, &pos, &item, &hash)) {
1266 PyObject *k = merge_consts_recursive(c, item);
1267 if (k == NULL) {
1268 Py_DECREF(tuple);
1269 Py_DECREF(key);
1270 return NULL;
1271 }
1272 PyObject *u;
1273 if (PyTuple_CheckExact(k)) {
1274 u = PyTuple_GET_ITEM(k, 1);
1275 Py_INCREF(u);
1276 Py_DECREF(k);
1277 }
1278 else {
1279 u = k;
1280 }
1281 PyTuple_SET_ITEM(tuple, i, u); // Steals reference of u.
1282 i++;
1283 }
1284
1285 // Instead of rewriting o, we create new frozenset and embed in the
1286 // key tuple. Caller should get merged frozenset from the key tuple.
1287 PyObject *new = PyFrozenSet_New(tuple);
1288 Py_DECREF(tuple);
1289 if (new == NULL) {
1290 Py_DECREF(key);
1291 return NULL;
1292 }
1293 assert(PyTuple_GET_ITEM(key, 1) == o);
1294 Py_DECREF(o);
1295 PyTuple_SET_ITEM(key, 1, new);
1296 }
1297
1298 return key;
1299 }
1300
1301 static Py_ssize_t
compiler_add_const(struct compiler * c,PyObject * o)1302 compiler_add_const(struct compiler *c, PyObject *o)
1303 {
1304 if (c->c_do_not_emit_bytecode) {
1305 return 0;
1306 }
1307
1308 PyObject *key = merge_consts_recursive(c, o);
1309 if (key == NULL) {
1310 return -1;
1311 }
1312
1313 Py_ssize_t arg = compiler_add_o(c->u->u_consts, key);
1314 Py_DECREF(key);
1315 return arg;
1316 }
1317
1318 static int
compiler_addop_load_const(struct compiler * c,PyObject * o)1319 compiler_addop_load_const(struct compiler *c, PyObject *o)
1320 {
1321 if (c->c_do_not_emit_bytecode) {
1322 return 1;
1323 }
1324
1325 Py_ssize_t arg = compiler_add_const(c, o);
1326 if (arg < 0)
1327 return 0;
1328 return compiler_addop_i(c, LOAD_CONST, arg);
1329 }
1330
1331 static int
compiler_addop_o(struct compiler * c,int opcode,PyObject * dict,PyObject * o)1332 compiler_addop_o(struct compiler *c, int opcode, PyObject *dict,
1333 PyObject *o)
1334 {
1335 if (c->c_do_not_emit_bytecode) {
1336 return 1;
1337 }
1338
1339 Py_ssize_t arg = compiler_add_o(dict, o);
1340 if (arg < 0)
1341 return 0;
1342 return compiler_addop_i(c, opcode, arg);
1343 }
1344
1345 static int
compiler_addop_name(struct compiler * c,int opcode,PyObject * dict,PyObject * o)1346 compiler_addop_name(struct compiler *c, int opcode, PyObject *dict,
1347 PyObject *o)
1348 {
1349 Py_ssize_t arg;
1350
1351 if (c->c_do_not_emit_bytecode) {
1352 return 1;
1353 }
1354
1355 PyObject *mangled = _Py_Mangle(c->u->u_private, o);
1356 if (!mangled)
1357 return 0;
1358 arg = compiler_add_o(dict, mangled);
1359 Py_DECREF(mangled);
1360 if (arg < 0)
1361 return 0;
1362 return compiler_addop_i(c, opcode, arg);
1363 }
1364
1365 /* Add an opcode with an integer argument.
1366 Returns 0 on failure, 1 on success.
1367 */
1368
1369 static int
compiler_addop_i(struct compiler * c,int opcode,Py_ssize_t oparg)1370 compiler_addop_i(struct compiler *c, int opcode, Py_ssize_t oparg)
1371 {
1372 struct instr *i;
1373 int off;
1374
1375 if (c->c_do_not_emit_bytecode) {
1376 return 1;
1377 }
1378
1379 /* oparg value is unsigned, but a signed C int is usually used to store
1380 it in the C code (like Python/ceval.c).
1381
1382 Limit to 32-bit signed C int (rather than INT_MAX) for portability.
1383
1384 The argument of a concrete bytecode instruction is limited to 8-bit.
1385 EXTENDED_ARG is used for 16, 24, and 32-bit arguments. */
1386 assert(HAS_ARG(opcode));
1387 assert(0 <= oparg && oparg <= 2147483647);
1388
1389 off = compiler_next_instr(c->u->u_curblock);
1390 if (off < 0)
1391 return 0;
1392 i = &c->u->u_curblock->b_instr[off];
1393 i->i_opcode = opcode;
1394 i->i_oparg = Py_SAFE_DOWNCAST(oparg, Py_ssize_t, int);
1395 i->i_lineno = c->u->u_lineno;
1396 return 1;
1397 }
1398
1399 static int
compiler_addop_j(struct compiler * c,int opcode,basicblock * b,int absolute)1400 compiler_addop_j(struct compiler *c, int opcode, basicblock *b, int absolute)
1401 {
1402 struct instr *i;
1403 int off;
1404
1405 if (c->c_do_not_emit_bytecode) {
1406 return 1;
1407 }
1408
1409 assert(HAS_ARG(opcode));
1410 assert(b != NULL);
1411 off = compiler_next_instr(c->u->u_curblock);
1412 if (off < 0)
1413 return 0;
1414 i = &c->u->u_curblock->b_instr[off];
1415 i->i_opcode = opcode;
1416 i->i_target = b;
1417 if (absolute)
1418 i->i_jabs = 1;
1419 else
1420 i->i_jrel = 1;
1421 i->i_lineno = c->u->u_lineno;
1422 return 1;
1423 }
1424
1425 /* NEXT_BLOCK() creates an implicit jump from the current block
1426 to the new block.
1427
1428 The returns inside this macro make it impossible to decref objects
1429 created in the local function. Local objects should use the arena.
1430 */
1431 #define NEXT_BLOCK(C) { \
1432 if (compiler_next_block((C)) == NULL) \
1433 return 0; \
1434 }
1435
1436 #define ADDOP(C, OP) { \
1437 if (!compiler_addop((C), (OP))) \
1438 return 0; \
1439 }
1440
1441 #define ADDOP_IN_SCOPE(C, OP) { \
1442 if (!compiler_addop((C), (OP))) { \
1443 compiler_exit_scope(c); \
1444 return 0; \
1445 } \
1446 }
1447
1448 #define ADDOP_LOAD_CONST(C, O) { \
1449 if (!compiler_addop_load_const((C), (O))) \
1450 return 0; \
1451 }
1452
1453 /* Same as ADDOP_LOAD_CONST, but steals a reference. */
1454 #define ADDOP_LOAD_CONST_NEW(C, O) { \
1455 PyObject *__new_const = (O); \
1456 if (__new_const == NULL) { \
1457 return 0; \
1458 } \
1459 if (!compiler_addop_load_const((C), __new_const)) { \
1460 Py_DECREF(__new_const); \
1461 return 0; \
1462 } \
1463 Py_DECREF(__new_const); \
1464 }
1465
1466 #define ADDOP_O(C, OP, O, TYPE) { \
1467 if (!compiler_addop_o((C), (OP), (C)->u->u_ ## TYPE, (O))) \
1468 return 0; \
1469 }
1470
1471 /* Same as ADDOP_O, but steals a reference. */
1472 #define ADDOP_N(C, OP, O, TYPE) { \
1473 if (!compiler_addop_o((C), (OP), (C)->u->u_ ## TYPE, (O))) { \
1474 Py_DECREF((O)); \
1475 return 0; \
1476 } \
1477 Py_DECREF((O)); \
1478 }
1479
1480 #define ADDOP_NAME(C, OP, O, TYPE) { \
1481 if (!compiler_addop_name((C), (OP), (C)->u->u_ ## TYPE, (O))) \
1482 return 0; \
1483 }
1484
1485 #define ADDOP_I(C, OP, O) { \
1486 if (!compiler_addop_i((C), (OP), (O))) \
1487 return 0; \
1488 }
1489
1490 #define ADDOP_JABS(C, OP, O) { \
1491 if (!compiler_addop_j((C), (OP), (O), 1)) \
1492 return 0; \
1493 }
1494
1495 #define ADDOP_JREL(C, OP, O) { \
1496 if (!compiler_addop_j((C), (OP), (O), 0)) \
1497 return 0; \
1498 }
1499
1500
1501 #define ADDOP_COMPARE(C, CMP) { \
1502 if (!compiler_addcompare((C), (cmpop_ty)(CMP))) \
1503 return 0; \
1504 }
1505
1506 /* VISIT and VISIT_SEQ takes an ASDL type as their second argument. They use
1507 the ASDL name to synthesize the name of the C type and the visit function.
1508 */
1509
1510 #define VISIT(C, TYPE, V) {\
1511 if (!compiler_visit_ ## TYPE((C), (V))) \
1512 return 0; \
1513 }
1514
1515 #define VISIT_IN_SCOPE(C, TYPE, V) {\
1516 if (!compiler_visit_ ## TYPE((C), (V))) { \
1517 compiler_exit_scope(c); \
1518 return 0; \
1519 } \
1520 }
1521
1522 #define VISIT_SLICE(C, V, CTX) {\
1523 if (!compiler_visit_slice((C), (V), (CTX))) \
1524 return 0; \
1525 }
1526
1527 #define VISIT_SEQ(C, TYPE, SEQ) { \
1528 int _i; \
1529 asdl_seq *seq = (SEQ); /* avoid variable capture */ \
1530 for (_i = 0; _i < asdl_seq_LEN(seq); _i++) { \
1531 TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, _i); \
1532 if (!compiler_visit_ ## TYPE((C), elt)) \
1533 return 0; \
1534 } \
1535 }
1536
1537 #define VISIT_SEQ_IN_SCOPE(C, TYPE, SEQ) { \
1538 int _i; \
1539 asdl_seq *seq = (SEQ); /* avoid variable capture */ \
1540 for (_i = 0; _i < asdl_seq_LEN(seq); _i++) { \
1541 TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, _i); \
1542 if (!compiler_visit_ ## TYPE((C), elt)) { \
1543 compiler_exit_scope(c); \
1544 return 0; \
1545 } \
1546 } \
1547 }
1548
1549 /* These macros allows to check only for errors and not emmit bytecode
1550 * while visiting nodes.
1551 */
1552
1553 #define BEGIN_DO_NOT_EMIT_BYTECODE { \
1554 c->c_do_not_emit_bytecode++;
1555
1556 #define END_DO_NOT_EMIT_BYTECODE \
1557 c->c_do_not_emit_bytecode--; \
1558 }
1559
1560 /* Search if variable annotations are present statically in a block. */
1561
1562 static int
find_ann(asdl_seq * stmts)1563 find_ann(asdl_seq *stmts)
1564 {
1565 int i, j, res = 0;
1566 stmt_ty st;
1567
1568 for (i = 0; i < asdl_seq_LEN(stmts); i++) {
1569 st = (stmt_ty)asdl_seq_GET(stmts, i);
1570 switch (st->kind) {
1571 case AnnAssign_kind:
1572 return 1;
1573 case For_kind:
1574 res = find_ann(st->v.For.body) ||
1575 find_ann(st->v.For.orelse);
1576 break;
1577 case AsyncFor_kind:
1578 res = find_ann(st->v.AsyncFor.body) ||
1579 find_ann(st->v.AsyncFor.orelse);
1580 break;
1581 case While_kind:
1582 res = find_ann(st->v.While.body) ||
1583 find_ann(st->v.While.orelse);
1584 break;
1585 case If_kind:
1586 res = find_ann(st->v.If.body) ||
1587 find_ann(st->v.If.orelse);
1588 break;
1589 case With_kind:
1590 res = find_ann(st->v.With.body);
1591 break;
1592 case AsyncWith_kind:
1593 res = find_ann(st->v.AsyncWith.body);
1594 break;
1595 case Try_kind:
1596 for (j = 0; j < asdl_seq_LEN(st->v.Try.handlers); j++) {
1597 excepthandler_ty handler = (excepthandler_ty)asdl_seq_GET(
1598 st->v.Try.handlers, j);
1599 if (find_ann(handler->v.ExceptHandler.body)) {
1600 return 1;
1601 }
1602 }
1603 res = find_ann(st->v.Try.body) ||
1604 find_ann(st->v.Try.finalbody) ||
1605 find_ann(st->v.Try.orelse);
1606 break;
1607 default:
1608 res = 0;
1609 }
1610 if (res) {
1611 break;
1612 }
1613 }
1614 return res;
1615 }
1616
1617 /*
1618 * Frame block handling functions
1619 */
1620
1621 static int
compiler_push_fblock(struct compiler * c,enum fblocktype t,basicblock * b,basicblock * exit,void * datum)1622 compiler_push_fblock(struct compiler *c, enum fblocktype t, basicblock *b,
1623 basicblock *exit, void *datum)
1624 {
1625 struct fblockinfo *f;
1626 if (c->u->u_nfblocks >= CO_MAXBLOCKS) {
1627 return compiler_error(c, "too many statically nested blocks");
1628 }
1629 f = &c->u->u_fblock[c->u->u_nfblocks++];
1630 f->fb_type = t;
1631 f->fb_block = b;
1632 f->fb_exit = exit;
1633 f->fb_datum = datum;
1634 return 1;
1635 }
1636
1637 static void
compiler_pop_fblock(struct compiler * c,enum fblocktype t,basicblock * b)1638 compiler_pop_fblock(struct compiler *c, enum fblocktype t, basicblock *b)
1639 {
1640 struct compiler_unit *u = c->u;
1641 assert(u->u_nfblocks > 0);
1642 u->u_nfblocks--;
1643 assert(u->u_fblock[u->u_nfblocks].fb_type == t);
1644 assert(u->u_fblock[u->u_nfblocks].fb_block == b);
1645 }
1646
1647 static int
compiler_call_exit_with_nones(struct compiler * c)1648 compiler_call_exit_with_nones(struct compiler *c) {
1649 ADDOP_O(c, LOAD_CONST, Py_None, consts);
1650 ADDOP(c, DUP_TOP);
1651 ADDOP(c, DUP_TOP);
1652 ADDOP_I(c, CALL_FUNCTION, 3);
1653 return 1;
1654 }
1655
1656 /* Unwind a frame block. If preserve_tos is true, the TOS before
1657 * popping the blocks will be restored afterwards, unless another
1658 * return, break or continue is found. In which case, the TOS will
1659 * be popped.
1660 */
1661 static int
compiler_unwind_fblock(struct compiler * c,struct fblockinfo * info,int preserve_tos)1662 compiler_unwind_fblock(struct compiler *c, struct fblockinfo *info,
1663 int preserve_tos)
1664 {
1665 switch (info->fb_type) {
1666 case WHILE_LOOP:
1667 case EXCEPTION_HANDLER:
1668 return 1;
1669
1670 case FOR_LOOP:
1671 /* Pop the iterator */
1672 if (preserve_tos) {
1673 ADDOP(c, ROT_TWO);
1674 }
1675 ADDOP(c, POP_TOP);
1676 return 1;
1677
1678 case TRY_EXCEPT:
1679 ADDOP(c, POP_BLOCK);
1680 return 1;
1681
1682 case FINALLY_TRY:
1683 ADDOP(c, POP_BLOCK);
1684 if (preserve_tos) {
1685 if (!compiler_push_fblock(c, POP_VALUE, NULL, NULL, NULL)) {
1686 return 0;
1687 }
1688 }
1689 /* Emit the finally block, restoring the line number when done */
1690 int saved_lineno = c->u->u_lineno;
1691 VISIT_SEQ(c, stmt, info->fb_datum);
1692 c->u->u_lineno = saved_lineno;
1693 if (preserve_tos) {
1694 compiler_pop_fblock(c, POP_VALUE, NULL);
1695 }
1696 return 1;
1697
1698 case FINALLY_END:
1699 if (preserve_tos) {
1700 ADDOP(c, ROT_FOUR);
1701 }
1702 ADDOP(c, POP_TOP);
1703 ADDOP(c, POP_TOP);
1704 ADDOP(c, POP_TOP);
1705 if (preserve_tos) {
1706 ADDOP(c, ROT_FOUR);
1707 }
1708 ADDOP(c, POP_EXCEPT);
1709 return 1;
1710
1711 case WITH:
1712 case ASYNC_WITH:
1713 ADDOP(c, POP_BLOCK);
1714 if (preserve_tos) {
1715 ADDOP(c, ROT_TWO);
1716 }
1717 if(!compiler_call_exit_with_nones(c)) {
1718 return 0;
1719 }
1720 if (info->fb_type == ASYNC_WITH) {
1721 ADDOP(c, GET_AWAITABLE);
1722 ADDOP_LOAD_CONST(c, Py_None);
1723 ADDOP(c, YIELD_FROM);
1724 }
1725 ADDOP(c, POP_TOP);
1726 return 1;
1727
1728 case HANDLER_CLEANUP:
1729 if (info->fb_datum) {
1730 ADDOP(c, POP_BLOCK);
1731 }
1732 if (preserve_tos) {
1733 ADDOP(c, ROT_FOUR);
1734 }
1735 ADDOP(c, POP_EXCEPT);
1736 if (info->fb_datum) {
1737 ADDOP_LOAD_CONST(c, Py_None);
1738 compiler_nameop(c, info->fb_datum, Store);
1739 compiler_nameop(c, info->fb_datum, Del);
1740 }
1741 return 1;
1742
1743 case POP_VALUE:
1744 if (preserve_tos) {
1745 ADDOP(c, ROT_TWO);
1746 }
1747 ADDOP(c, POP_TOP);
1748 return 1;
1749 }
1750 Py_UNREACHABLE();
1751 }
1752
1753 /** Unwind block stack. If loop is not NULL, then stop when the first loop is encountered. */
1754 static int
compiler_unwind_fblock_stack(struct compiler * c,int preserve_tos,struct fblockinfo ** loop)1755 compiler_unwind_fblock_stack(struct compiler *c, int preserve_tos, struct fblockinfo **loop) {
1756 if (c->u->u_nfblocks == 0) {
1757 return 1;
1758 }
1759 struct fblockinfo *top = &c->u->u_fblock[c->u->u_nfblocks-1];
1760 if (loop != NULL && (top->fb_type == WHILE_LOOP || top->fb_type == FOR_LOOP)) {
1761 *loop = top;
1762 return 1;
1763 }
1764 struct fblockinfo copy = *top;
1765 c->u->u_nfblocks--;
1766 if (!compiler_unwind_fblock(c, ©, preserve_tos)) {
1767 return 0;
1768 }
1769 if (!compiler_unwind_fblock_stack(c, preserve_tos, loop)) {
1770 return 0;
1771 }
1772 c->u->u_fblock[c->u->u_nfblocks] = copy;
1773 c->u->u_nfblocks++;
1774 return 1;
1775 }
1776
1777 /* Compile a sequence of statements, checking for a docstring
1778 and for annotations. */
1779
1780 static int
compiler_body(struct compiler * c,asdl_seq * stmts)1781 compiler_body(struct compiler *c, asdl_seq *stmts)
1782 {
1783 int i = 0;
1784 stmt_ty st;
1785 PyObject *docstring;
1786
1787 /* Set current line number to the line number of first statement.
1788 This way line number for SETUP_ANNOTATIONS will always
1789 coincide with the line number of first "real" statement in module.
1790 If body is empty, then lineno will be set later in assemble. */
1791 if (c->u->u_scope_type == COMPILER_SCOPE_MODULE && asdl_seq_LEN(stmts)) {
1792 st = (stmt_ty)asdl_seq_GET(stmts, 0);
1793 SET_LOC(c, st);
1794 }
1795 /* Every annotated class and module should have __annotations__. */
1796 if (find_ann(stmts)) {
1797 ADDOP(c, SETUP_ANNOTATIONS);
1798 }
1799 if (!asdl_seq_LEN(stmts))
1800 return 1;
1801 /* if not -OO mode, set docstring */
1802 if (c->c_optimize < 2) {
1803 docstring = _PyAST_GetDocString(stmts);
1804 if (docstring) {
1805 i = 1;
1806 st = (stmt_ty)asdl_seq_GET(stmts, 0);
1807 assert(st->kind == Expr_kind);
1808 VISIT(c, expr, st->v.Expr.value);
1809 if (!compiler_nameop(c, __doc__, Store))
1810 return 0;
1811 }
1812 }
1813 for (; i < asdl_seq_LEN(stmts); i++)
1814 VISIT(c, stmt, (stmt_ty)asdl_seq_GET(stmts, i));
1815 return 1;
1816 }
1817
1818 static PyCodeObject *
compiler_mod(struct compiler * c,mod_ty mod)1819 compiler_mod(struct compiler *c, mod_ty mod)
1820 {
1821 PyCodeObject *co;
1822 int addNone = 1;
1823 static PyObject *module;
1824 if (!module) {
1825 module = PyUnicode_InternFromString("<module>");
1826 if (!module)
1827 return NULL;
1828 }
1829 /* Use 0 for firstlineno initially, will fixup in assemble(). */
1830 if (!compiler_enter_scope(c, module, COMPILER_SCOPE_MODULE, mod, 0))
1831 return NULL;
1832 switch (mod->kind) {
1833 case Module_kind:
1834 if (!compiler_body(c, mod->v.Module.body)) {
1835 compiler_exit_scope(c);
1836 return 0;
1837 }
1838 break;
1839 case Interactive_kind:
1840 if (find_ann(mod->v.Interactive.body)) {
1841 ADDOP(c, SETUP_ANNOTATIONS);
1842 }
1843 c->c_interactive = 1;
1844 VISIT_SEQ_IN_SCOPE(c, stmt,
1845 mod->v.Interactive.body);
1846 break;
1847 case Expression_kind:
1848 VISIT_IN_SCOPE(c, expr, mod->v.Expression.body);
1849 addNone = 0;
1850 break;
1851 default:
1852 PyErr_Format(PyExc_SystemError,
1853 "module kind %d should not be possible",
1854 mod->kind);
1855 return 0;
1856 }
1857 co = assemble(c, addNone);
1858 compiler_exit_scope(c);
1859 return co;
1860 }
1861
1862 /* The test for LOCAL must come before the test for FREE in order to
1863 handle classes where name is both local and free. The local var is
1864 a method and the free var is a free var referenced within a method.
1865 */
1866
1867 static int
get_ref_type(struct compiler * c,PyObject * name)1868 get_ref_type(struct compiler *c, PyObject *name)
1869 {
1870 int scope;
1871 if (c->u->u_scope_type == COMPILER_SCOPE_CLASS &&
1872 _PyUnicode_EqualToASCIIString(name, "__class__"))
1873 return CELL;
1874 scope = PyST_GetScope(c->u->u_ste, name);
1875 if (scope == 0) {
1876 _Py_FatalErrorFormat(__func__,
1877 "unknown scope for %.100s in %.100s(%s)\n"
1878 "symbols: %s\nlocals: %s\nglobals: %s",
1879 PyUnicode_AsUTF8(name),
1880 PyUnicode_AsUTF8(c->u->u_name),
1881 PyUnicode_AsUTF8(PyObject_Repr(c->u->u_ste->ste_id)),
1882 PyUnicode_AsUTF8(PyObject_Repr(c->u->u_ste->ste_symbols)),
1883 PyUnicode_AsUTF8(PyObject_Repr(c->u->u_varnames)),
1884 PyUnicode_AsUTF8(PyObject_Repr(c->u->u_names)));
1885 }
1886
1887 return scope;
1888 }
1889
1890 static int
compiler_lookup_arg(PyObject * dict,PyObject * name)1891 compiler_lookup_arg(PyObject *dict, PyObject *name)
1892 {
1893 PyObject *v;
1894 v = PyDict_GetItem(dict, name);
1895 if (v == NULL)
1896 return -1;
1897 return PyLong_AS_LONG(v);
1898 }
1899
1900 static int
compiler_make_closure(struct compiler * c,PyCodeObject * co,Py_ssize_t flags,PyObject * qualname)1901 compiler_make_closure(struct compiler *c, PyCodeObject *co, Py_ssize_t flags, PyObject *qualname)
1902 {
1903 Py_ssize_t i, free = PyCode_GetNumFree(co);
1904 if (qualname == NULL)
1905 qualname = co->co_name;
1906
1907 if (free) {
1908 for (i = 0; i < free; ++i) {
1909 /* Bypass com_addop_varname because it will generate
1910 LOAD_DEREF but LOAD_CLOSURE is needed.
1911 */
1912 PyObject *name = PyTuple_GET_ITEM(co->co_freevars, i);
1913 int arg, reftype;
1914
1915 /* Special case: If a class contains a method with a
1916 free variable that has the same name as a method,
1917 the name will be considered free *and* local in the
1918 class. It should be handled by the closure, as
1919 well as by the normal name lookup logic.
1920 */
1921 reftype = get_ref_type(c, name);
1922 if (reftype == CELL)
1923 arg = compiler_lookup_arg(c->u->u_cellvars, name);
1924 else /* (reftype == FREE) */
1925 arg = compiler_lookup_arg(c->u->u_freevars, name);
1926 if (arg == -1) {
1927 _Py_FatalErrorFormat(__func__,
1928 "lookup %s in %s %d %d\n"
1929 "freevars of %s: %s\n",
1930 PyUnicode_AsUTF8(PyObject_Repr(name)),
1931 PyUnicode_AsUTF8(c->u->u_name),
1932 reftype, arg,
1933 PyUnicode_AsUTF8(co->co_name),
1934 PyUnicode_AsUTF8(PyObject_Repr(co->co_freevars)));
1935 }
1936 ADDOP_I(c, LOAD_CLOSURE, arg);
1937 }
1938 flags |= 0x08;
1939 ADDOP_I(c, BUILD_TUPLE, free);
1940 }
1941 ADDOP_LOAD_CONST(c, (PyObject*)co);
1942 ADDOP_LOAD_CONST(c, qualname);
1943 ADDOP_I(c, MAKE_FUNCTION, flags);
1944 return 1;
1945 }
1946
1947 static int
compiler_decorators(struct compiler * c,asdl_seq * decos)1948 compiler_decorators(struct compiler *c, asdl_seq* decos)
1949 {
1950 int i;
1951
1952 if (!decos)
1953 return 1;
1954
1955 for (i = 0; i < asdl_seq_LEN(decos); i++) {
1956 VISIT(c, expr, (expr_ty)asdl_seq_GET(decos, i));
1957 }
1958 return 1;
1959 }
1960
1961 static int
compiler_visit_kwonlydefaults(struct compiler * c,asdl_seq * kwonlyargs,asdl_seq * kw_defaults)1962 compiler_visit_kwonlydefaults(struct compiler *c, asdl_seq *kwonlyargs,
1963 asdl_seq *kw_defaults)
1964 {
1965 /* Push a dict of keyword-only default values.
1966
1967 Return 0 on error, -1 if no dict pushed, 1 if a dict is pushed.
1968 */
1969 int i;
1970 PyObject *keys = NULL;
1971
1972 for (i = 0; i < asdl_seq_LEN(kwonlyargs); i++) {
1973 arg_ty arg = asdl_seq_GET(kwonlyargs, i);
1974 expr_ty default_ = asdl_seq_GET(kw_defaults, i);
1975 if (default_) {
1976 PyObject *mangled = _Py_Mangle(c->u->u_private, arg->arg);
1977 if (!mangled) {
1978 goto error;
1979 }
1980 if (keys == NULL) {
1981 keys = PyList_New(1);
1982 if (keys == NULL) {
1983 Py_DECREF(mangled);
1984 return 0;
1985 }
1986 PyList_SET_ITEM(keys, 0, mangled);
1987 }
1988 else {
1989 int res = PyList_Append(keys, mangled);
1990 Py_DECREF(mangled);
1991 if (res == -1) {
1992 goto error;
1993 }
1994 }
1995 if (!compiler_visit_expr(c, default_)) {
1996 goto error;
1997 }
1998 }
1999 }
2000 if (keys != NULL) {
2001 Py_ssize_t default_count = PyList_GET_SIZE(keys);
2002 PyObject *keys_tuple = PyList_AsTuple(keys);
2003 Py_DECREF(keys);
2004 ADDOP_LOAD_CONST_NEW(c, keys_tuple);
2005 ADDOP_I(c, BUILD_CONST_KEY_MAP, default_count);
2006 assert(default_count > 0);
2007 return 1;
2008 }
2009 else {
2010 return -1;
2011 }
2012
2013 error:
2014 Py_XDECREF(keys);
2015 return 0;
2016 }
2017
2018 static int
compiler_visit_annexpr(struct compiler * c,expr_ty annotation)2019 compiler_visit_annexpr(struct compiler *c, expr_ty annotation)
2020 {
2021 ADDOP_LOAD_CONST_NEW(c, _PyAST_ExprAsUnicode(annotation));
2022 return 1;
2023 }
2024
2025 static int
compiler_visit_argannotation(struct compiler * c,identifier id,expr_ty annotation,PyObject * names)2026 compiler_visit_argannotation(struct compiler *c, identifier id,
2027 expr_ty annotation, PyObject *names)
2028 {
2029 if (annotation) {
2030 PyObject *mangled;
2031 if (c->c_future->ff_features & CO_FUTURE_ANNOTATIONS) {
2032 VISIT(c, annexpr, annotation)
2033 }
2034 else {
2035 VISIT(c, expr, annotation);
2036 }
2037 mangled = _Py_Mangle(c->u->u_private, id);
2038 if (!mangled)
2039 return 0;
2040 if (PyList_Append(names, mangled) < 0) {
2041 Py_DECREF(mangled);
2042 return 0;
2043 }
2044 Py_DECREF(mangled);
2045 }
2046 return 1;
2047 }
2048
2049 static int
compiler_visit_argannotations(struct compiler * c,asdl_seq * args,PyObject * names)2050 compiler_visit_argannotations(struct compiler *c, asdl_seq* args,
2051 PyObject *names)
2052 {
2053 int i;
2054 for (i = 0; i < asdl_seq_LEN(args); i++) {
2055 arg_ty arg = (arg_ty)asdl_seq_GET(args, i);
2056 if (!compiler_visit_argannotation(
2057 c,
2058 arg->arg,
2059 arg->annotation,
2060 names))
2061 return 0;
2062 }
2063 return 1;
2064 }
2065
2066 static int
compiler_visit_annotations(struct compiler * c,arguments_ty args,expr_ty returns)2067 compiler_visit_annotations(struct compiler *c, arguments_ty args,
2068 expr_ty returns)
2069 {
2070 /* Push arg annotation dict.
2071 The expressions are evaluated out-of-order wrt the source code.
2072
2073 Return 0 on error, -1 if no dict pushed, 1 if a dict is pushed.
2074 */
2075 static identifier return_str;
2076 PyObject *names;
2077 Py_ssize_t len;
2078 names = PyList_New(0);
2079 if (!names)
2080 return 0;
2081
2082 if (!compiler_visit_argannotations(c, args->args, names))
2083 goto error;
2084 if (!compiler_visit_argannotations(c, args->posonlyargs, names))
2085 goto error;
2086 if (args->vararg && args->vararg->annotation &&
2087 !compiler_visit_argannotation(c, args->vararg->arg,
2088 args->vararg->annotation, names))
2089 goto error;
2090 if (!compiler_visit_argannotations(c, args->kwonlyargs, names))
2091 goto error;
2092 if (args->kwarg && args->kwarg->annotation &&
2093 !compiler_visit_argannotation(c, args->kwarg->arg,
2094 args->kwarg->annotation, names))
2095 goto error;
2096
2097 if (!return_str) {
2098 return_str = PyUnicode_InternFromString("return");
2099 if (!return_str)
2100 goto error;
2101 }
2102 if (!compiler_visit_argannotation(c, return_str, returns, names)) {
2103 goto error;
2104 }
2105
2106 len = PyList_GET_SIZE(names);
2107 if (len) {
2108 PyObject *keytuple = PyList_AsTuple(names);
2109 Py_DECREF(names);
2110 ADDOP_LOAD_CONST_NEW(c, keytuple);
2111 ADDOP_I(c, BUILD_CONST_KEY_MAP, len);
2112 return 1;
2113 }
2114 else {
2115 Py_DECREF(names);
2116 return -1;
2117 }
2118
2119 error:
2120 Py_DECREF(names);
2121 return 0;
2122 }
2123
2124 static int
compiler_visit_defaults(struct compiler * c,arguments_ty args)2125 compiler_visit_defaults(struct compiler *c, arguments_ty args)
2126 {
2127 VISIT_SEQ(c, expr, args->defaults);
2128 ADDOP_I(c, BUILD_TUPLE, asdl_seq_LEN(args->defaults));
2129 return 1;
2130 }
2131
2132 static Py_ssize_t
compiler_default_arguments(struct compiler * c,arguments_ty args)2133 compiler_default_arguments(struct compiler *c, arguments_ty args)
2134 {
2135 Py_ssize_t funcflags = 0;
2136 if (args->defaults && asdl_seq_LEN(args->defaults) > 0) {
2137 if (!compiler_visit_defaults(c, args))
2138 return -1;
2139 funcflags |= 0x01;
2140 }
2141 if (args->kwonlyargs) {
2142 int res = compiler_visit_kwonlydefaults(c, args->kwonlyargs,
2143 args->kw_defaults);
2144 if (res == 0) {
2145 return -1;
2146 }
2147 else if (res > 0) {
2148 funcflags |= 0x02;
2149 }
2150 }
2151 return funcflags;
2152 }
2153
2154 static int
forbidden_name(struct compiler * c,identifier name,expr_context_ty ctx)2155 forbidden_name(struct compiler *c, identifier name, expr_context_ty ctx)
2156 {
2157
2158 if (ctx == Store && _PyUnicode_EqualToASCIIString(name, "__debug__")) {
2159 compiler_error(c, "cannot assign to __debug__");
2160 return 1;
2161 }
2162 return 0;
2163 }
2164
2165 static int
compiler_check_debug_one_arg(struct compiler * c,arg_ty arg)2166 compiler_check_debug_one_arg(struct compiler *c, arg_ty arg)
2167 {
2168 if (arg != NULL) {
2169 if (forbidden_name(c, arg->arg, Store))
2170 return 0;
2171 }
2172 return 1;
2173 }
2174
2175 static int
compiler_check_debug_args_seq(struct compiler * c,asdl_seq * args)2176 compiler_check_debug_args_seq(struct compiler *c, asdl_seq *args)
2177 {
2178 if (args != NULL) {
2179 for (Py_ssize_t i = 0, n = asdl_seq_LEN(args); i < n; i++) {
2180 if (!compiler_check_debug_one_arg(c, asdl_seq_GET(args, i)))
2181 return 0;
2182 }
2183 }
2184 return 1;
2185 }
2186
2187 static int
compiler_check_debug_args(struct compiler * c,arguments_ty args)2188 compiler_check_debug_args(struct compiler *c, arguments_ty args)
2189 {
2190 if (!compiler_check_debug_args_seq(c, args->posonlyargs))
2191 return 0;
2192 if (!compiler_check_debug_args_seq(c, args->args))
2193 return 0;
2194 if (!compiler_check_debug_one_arg(c, args->vararg))
2195 return 0;
2196 if (!compiler_check_debug_args_seq(c, args->kwonlyargs))
2197 return 0;
2198 if (!compiler_check_debug_one_arg(c, args->kwarg))
2199 return 0;
2200 return 1;
2201 }
2202
2203 static int
compiler_function(struct compiler * c,stmt_ty s,int is_async)2204 compiler_function(struct compiler *c, stmt_ty s, int is_async)
2205 {
2206 PyCodeObject *co;
2207 PyObject *qualname, *docstring = NULL;
2208 arguments_ty args;
2209 expr_ty returns;
2210 identifier name;
2211 asdl_seq* decos;
2212 asdl_seq *body;
2213 Py_ssize_t i, funcflags;
2214 int annotations;
2215 int scope_type;
2216 int firstlineno;
2217
2218 if (is_async) {
2219 assert(s->kind == AsyncFunctionDef_kind);
2220
2221 args = s->v.AsyncFunctionDef.args;
2222 returns = s->v.AsyncFunctionDef.returns;
2223 decos = s->v.AsyncFunctionDef.decorator_list;
2224 name = s->v.AsyncFunctionDef.name;
2225 body = s->v.AsyncFunctionDef.body;
2226
2227 scope_type = COMPILER_SCOPE_ASYNC_FUNCTION;
2228 } else {
2229 assert(s->kind == FunctionDef_kind);
2230
2231 args = s->v.FunctionDef.args;
2232 returns = s->v.FunctionDef.returns;
2233 decos = s->v.FunctionDef.decorator_list;
2234 name = s->v.FunctionDef.name;
2235 body = s->v.FunctionDef.body;
2236
2237 scope_type = COMPILER_SCOPE_FUNCTION;
2238 }
2239
2240 if (!compiler_check_debug_args(c, args))
2241 return 0;
2242
2243 if (!compiler_decorators(c, decos))
2244 return 0;
2245
2246 firstlineno = s->lineno;
2247 if (asdl_seq_LEN(decos)) {
2248 firstlineno = ((expr_ty)asdl_seq_GET(decos, 0))->lineno;
2249 }
2250
2251 funcflags = compiler_default_arguments(c, args);
2252 if (funcflags == -1) {
2253 return 0;
2254 }
2255
2256 annotations = compiler_visit_annotations(c, args, returns);
2257 if (annotations == 0) {
2258 return 0;
2259 }
2260 else if (annotations > 0) {
2261 funcflags |= 0x04;
2262 }
2263
2264 if (!compiler_enter_scope(c, name, scope_type, (void *)s, firstlineno)) {
2265 return 0;
2266 }
2267
2268 /* if not -OO mode, add docstring */
2269 if (c->c_optimize < 2) {
2270 docstring = _PyAST_GetDocString(body);
2271 }
2272 if (compiler_add_const(c, docstring ? docstring : Py_None) < 0) {
2273 compiler_exit_scope(c);
2274 return 0;
2275 }
2276
2277 c->u->u_argcount = asdl_seq_LEN(args->args);
2278 c->u->u_posonlyargcount = asdl_seq_LEN(args->posonlyargs);
2279 c->u->u_kwonlyargcount = asdl_seq_LEN(args->kwonlyargs);
2280 VISIT_SEQ_IN_SCOPE(c, stmt, body);
2281 co = assemble(c, 1);
2282 qualname = c->u->u_qualname;
2283 Py_INCREF(qualname);
2284 compiler_exit_scope(c);
2285 if (co == NULL) {
2286 Py_XDECREF(qualname);
2287 Py_XDECREF(co);
2288 return 0;
2289 }
2290
2291 compiler_make_closure(c, co, funcflags, qualname);
2292 Py_DECREF(qualname);
2293 Py_DECREF(co);
2294
2295 /* decorators */
2296 for (i = 0; i < asdl_seq_LEN(decos); i++) {
2297 ADDOP_I(c, CALL_FUNCTION, 1);
2298 }
2299
2300 return compiler_nameop(c, name, Store);
2301 }
2302
2303 static int
compiler_class(struct compiler * c,stmt_ty s)2304 compiler_class(struct compiler *c, stmt_ty s)
2305 {
2306 PyCodeObject *co;
2307 PyObject *str;
2308 int i, firstlineno;
2309 asdl_seq* decos = s->v.ClassDef.decorator_list;
2310
2311 if (!compiler_decorators(c, decos))
2312 return 0;
2313
2314 firstlineno = s->lineno;
2315 if (asdl_seq_LEN(decos)) {
2316 firstlineno = ((expr_ty)asdl_seq_GET(decos, 0))->lineno;
2317 }
2318
2319 /* ultimately generate code for:
2320 <name> = __build_class__(<func>, <name>, *<bases>, **<keywords>)
2321 where:
2322 <func> is a function/closure created from the class body;
2323 it has a single argument (__locals__) where the dict
2324 (or MutableSequence) representing the locals is passed
2325 <name> is the class name
2326 <bases> is the positional arguments and *varargs argument
2327 <keywords> is the keyword arguments and **kwds argument
2328 This borrows from compiler_call.
2329 */
2330
2331 /* 1. compile the class body into a code object */
2332 if (!compiler_enter_scope(c, s->v.ClassDef.name,
2333 COMPILER_SCOPE_CLASS, (void *)s, firstlineno))
2334 return 0;
2335 /* this block represents what we do in the new scope */
2336 {
2337 /* use the class name for name mangling */
2338 Py_INCREF(s->v.ClassDef.name);
2339 Py_XSETREF(c->u->u_private, s->v.ClassDef.name);
2340 /* load (global) __name__ ... */
2341 str = PyUnicode_InternFromString("__name__");
2342 if (!str || !compiler_nameop(c, str, Load)) {
2343 Py_XDECREF(str);
2344 compiler_exit_scope(c);
2345 return 0;
2346 }
2347 Py_DECREF(str);
2348 /* ... and store it as __module__ */
2349 str = PyUnicode_InternFromString("__module__");
2350 if (!str || !compiler_nameop(c, str, Store)) {
2351 Py_XDECREF(str);
2352 compiler_exit_scope(c);
2353 return 0;
2354 }
2355 Py_DECREF(str);
2356 assert(c->u->u_qualname);
2357 ADDOP_LOAD_CONST(c, c->u->u_qualname);
2358 str = PyUnicode_InternFromString("__qualname__");
2359 if (!str || !compiler_nameop(c, str, Store)) {
2360 Py_XDECREF(str);
2361 compiler_exit_scope(c);
2362 return 0;
2363 }
2364 Py_DECREF(str);
2365 /* compile the body proper */
2366 if (!compiler_body(c, s->v.ClassDef.body)) {
2367 compiler_exit_scope(c);
2368 return 0;
2369 }
2370 /* Return __classcell__ if it is referenced, otherwise return None */
2371 if (c->u->u_ste->ste_needs_class_closure) {
2372 /* Store __classcell__ into class namespace & return it */
2373 str = PyUnicode_InternFromString("__class__");
2374 if (str == NULL) {
2375 compiler_exit_scope(c);
2376 return 0;
2377 }
2378 i = compiler_lookup_arg(c->u->u_cellvars, str);
2379 Py_DECREF(str);
2380 if (i < 0) {
2381 compiler_exit_scope(c);
2382 return 0;
2383 }
2384 assert(i == 0);
2385
2386 ADDOP_I(c, LOAD_CLOSURE, i);
2387 ADDOP(c, DUP_TOP);
2388 str = PyUnicode_InternFromString("__classcell__");
2389 if (!str || !compiler_nameop(c, str, Store)) {
2390 Py_XDECREF(str);
2391 compiler_exit_scope(c);
2392 return 0;
2393 }
2394 Py_DECREF(str);
2395 }
2396 else {
2397 /* No methods referenced __class__, so just return None */
2398 assert(PyDict_GET_SIZE(c->u->u_cellvars) == 0);
2399 ADDOP_LOAD_CONST(c, Py_None);
2400 }
2401 ADDOP_IN_SCOPE(c, RETURN_VALUE);
2402 /* create the code object */
2403 co = assemble(c, 1);
2404 }
2405 /* leave the new scope */
2406 compiler_exit_scope(c);
2407 if (co == NULL)
2408 return 0;
2409
2410 /* 2. load the 'build_class' function */
2411 ADDOP(c, LOAD_BUILD_CLASS);
2412
2413 /* 3. load a function (or closure) made from the code object */
2414 compiler_make_closure(c, co, 0, NULL);
2415 Py_DECREF(co);
2416
2417 /* 4. load class name */
2418 ADDOP_LOAD_CONST(c, s->v.ClassDef.name);
2419
2420 /* 5. generate the rest of the code for the call */
2421 if (!compiler_call_helper(c, 2,
2422 s->v.ClassDef.bases,
2423 s->v.ClassDef.keywords))
2424 return 0;
2425
2426 /* 6. apply decorators */
2427 for (i = 0; i < asdl_seq_LEN(decos); i++) {
2428 ADDOP_I(c, CALL_FUNCTION, 1);
2429 }
2430
2431 /* 7. store into <name> */
2432 if (!compiler_nameop(c, s->v.ClassDef.name, Store))
2433 return 0;
2434 return 1;
2435 }
2436
2437 /* Return 0 if the expression is a constant value except named singletons.
2438 Return 1 otherwise. */
2439 static int
check_is_arg(expr_ty e)2440 check_is_arg(expr_ty e)
2441 {
2442 if (e->kind != Constant_kind) {
2443 return 1;
2444 }
2445 PyObject *value = e->v.Constant.value;
2446 return (value == Py_None
2447 || value == Py_False
2448 || value == Py_True
2449 || value == Py_Ellipsis);
2450 }
2451
2452 /* Check operands of identity chacks ("is" and "is not").
2453 Emit a warning if any operand is a constant except named singletons.
2454 Return 0 on error.
2455 */
2456 static int
check_compare(struct compiler * c,expr_ty e)2457 check_compare(struct compiler *c, expr_ty e)
2458 {
2459 Py_ssize_t i, n;
2460 int left = check_is_arg(e->v.Compare.left);
2461 n = asdl_seq_LEN(e->v.Compare.ops);
2462 for (i = 0; i < n; i++) {
2463 cmpop_ty op = (cmpop_ty)asdl_seq_GET(e->v.Compare.ops, i);
2464 int right = check_is_arg((expr_ty)asdl_seq_GET(e->v.Compare.comparators, i));
2465 if (op == Is || op == IsNot) {
2466 if (!right || !left) {
2467 const char *msg = (op == Is)
2468 ? "\"is\" with a literal. Did you mean \"==\"?"
2469 : "\"is not\" with a literal. Did you mean \"!=\"?";
2470 return compiler_warn(c, msg);
2471 }
2472 }
2473 left = right;
2474 }
2475 return 1;
2476 }
2477
compiler_addcompare(struct compiler * c,cmpop_ty op)2478 static int compiler_addcompare(struct compiler *c, cmpop_ty op)
2479 {
2480 int cmp;
2481 switch (op) {
2482 case Eq:
2483 cmp = Py_EQ;
2484 break;
2485 case NotEq:
2486 cmp = Py_NE;
2487 break;
2488 case Lt:
2489 cmp = Py_LT;
2490 break;
2491 case LtE:
2492 cmp = Py_LE;
2493 break;
2494 case Gt:
2495 cmp = Py_GT;
2496 break;
2497 case GtE:
2498 cmp = Py_GE;
2499 break;
2500 case Is:
2501 ADDOP_I(c, IS_OP, 0);
2502 return 1;
2503 case IsNot:
2504 ADDOP_I(c, IS_OP, 1);
2505 return 1;
2506 case In:
2507 ADDOP_I(c, CONTAINS_OP, 0);
2508 return 1;
2509 case NotIn:
2510 ADDOP_I(c, CONTAINS_OP, 1);
2511 return 1;
2512 default:
2513 Py_UNREACHABLE();
2514 }
2515 ADDOP_I(c, COMPARE_OP, cmp);
2516 return 1;
2517 }
2518
2519
2520
2521 static int
compiler_jump_if(struct compiler * c,expr_ty e,basicblock * next,int cond)2522 compiler_jump_if(struct compiler *c, expr_ty e, basicblock *next, int cond)
2523 {
2524 switch (e->kind) {
2525 case UnaryOp_kind:
2526 if (e->v.UnaryOp.op == Not)
2527 return compiler_jump_if(c, e->v.UnaryOp.operand, next, !cond);
2528 /* fallback to general implementation */
2529 break;
2530 case BoolOp_kind: {
2531 asdl_seq *s = e->v.BoolOp.values;
2532 Py_ssize_t i, n = asdl_seq_LEN(s) - 1;
2533 assert(n >= 0);
2534 int cond2 = e->v.BoolOp.op == Or;
2535 basicblock *next2 = next;
2536 if (!cond2 != !cond) {
2537 next2 = compiler_new_block(c);
2538 if (next2 == NULL)
2539 return 0;
2540 }
2541 for (i = 0; i < n; ++i) {
2542 if (!compiler_jump_if(c, (expr_ty)asdl_seq_GET(s, i), next2, cond2))
2543 return 0;
2544 }
2545 if (!compiler_jump_if(c, (expr_ty)asdl_seq_GET(s, n), next, cond))
2546 return 0;
2547 if (next2 != next)
2548 compiler_use_next_block(c, next2);
2549 return 1;
2550 }
2551 case IfExp_kind: {
2552 basicblock *end, *next2;
2553 end = compiler_new_block(c);
2554 if (end == NULL)
2555 return 0;
2556 next2 = compiler_new_block(c);
2557 if (next2 == NULL)
2558 return 0;
2559 if (!compiler_jump_if(c, e->v.IfExp.test, next2, 0))
2560 return 0;
2561 if (!compiler_jump_if(c, e->v.IfExp.body, next, cond))
2562 return 0;
2563 ADDOP_JREL(c, JUMP_FORWARD, end);
2564 compiler_use_next_block(c, next2);
2565 if (!compiler_jump_if(c, e->v.IfExp.orelse, next, cond))
2566 return 0;
2567 compiler_use_next_block(c, end);
2568 return 1;
2569 }
2570 case Compare_kind: {
2571 Py_ssize_t i, n = asdl_seq_LEN(e->v.Compare.ops) - 1;
2572 if (n > 0) {
2573 if (!check_compare(c, e)) {
2574 return 0;
2575 }
2576 basicblock *cleanup = compiler_new_block(c);
2577 if (cleanup == NULL)
2578 return 0;
2579 VISIT(c, expr, e->v.Compare.left);
2580 for (i = 0; i < n; i++) {
2581 VISIT(c, expr,
2582 (expr_ty)asdl_seq_GET(e->v.Compare.comparators, i));
2583 ADDOP(c, DUP_TOP);
2584 ADDOP(c, ROT_THREE);
2585 ADDOP_COMPARE(c, asdl_seq_GET(e->v.Compare.ops, i));
2586 ADDOP_JABS(c, POP_JUMP_IF_FALSE, cleanup);
2587 NEXT_BLOCK(c);
2588 }
2589 VISIT(c, expr, (expr_ty)asdl_seq_GET(e->v.Compare.comparators, n));
2590 ADDOP_COMPARE(c, asdl_seq_GET(e->v.Compare.ops, n));
2591 ADDOP_JABS(c, cond ? POP_JUMP_IF_TRUE : POP_JUMP_IF_FALSE, next);
2592 basicblock *end = compiler_new_block(c);
2593 if (end == NULL)
2594 return 0;
2595 ADDOP_JREL(c, JUMP_FORWARD, end);
2596 compiler_use_next_block(c, cleanup);
2597 ADDOP(c, POP_TOP);
2598 if (!cond) {
2599 ADDOP_JREL(c, JUMP_FORWARD, next);
2600 }
2601 compiler_use_next_block(c, end);
2602 return 1;
2603 }
2604 /* fallback to general implementation */
2605 break;
2606 }
2607 default:
2608 /* fallback to general implementation */
2609 break;
2610 }
2611
2612 /* general implementation */
2613 VISIT(c, expr, e);
2614 ADDOP_JABS(c, cond ? POP_JUMP_IF_TRUE : POP_JUMP_IF_FALSE, next);
2615 return 1;
2616 }
2617
2618 static int
compiler_ifexp(struct compiler * c,expr_ty e)2619 compiler_ifexp(struct compiler *c, expr_ty e)
2620 {
2621 basicblock *end, *next;
2622
2623 assert(e->kind == IfExp_kind);
2624 end = compiler_new_block(c);
2625 if (end == NULL)
2626 return 0;
2627 next = compiler_new_block(c);
2628 if (next == NULL)
2629 return 0;
2630 if (!compiler_jump_if(c, e->v.IfExp.test, next, 0))
2631 return 0;
2632 VISIT(c, expr, e->v.IfExp.body);
2633 ADDOP_JREL(c, JUMP_FORWARD, end);
2634 compiler_use_next_block(c, next);
2635 VISIT(c, expr, e->v.IfExp.orelse);
2636 compiler_use_next_block(c, end);
2637 return 1;
2638 }
2639
2640 static int
compiler_lambda(struct compiler * c,expr_ty e)2641 compiler_lambda(struct compiler *c, expr_ty e)
2642 {
2643 PyCodeObject *co;
2644 PyObject *qualname;
2645 static identifier name;
2646 Py_ssize_t funcflags;
2647 arguments_ty args = e->v.Lambda.args;
2648 assert(e->kind == Lambda_kind);
2649
2650 if (!compiler_check_debug_args(c, args))
2651 return 0;
2652
2653 if (!name) {
2654 name = PyUnicode_InternFromString("<lambda>");
2655 if (!name)
2656 return 0;
2657 }
2658
2659 funcflags = compiler_default_arguments(c, args);
2660 if (funcflags == -1) {
2661 return 0;
2662 }
2663
2664 if (!compiler_enter_scope(c, name, COMPILER_SCOPE_LAMBDA,
2665 (void *)e, e->lineno))
2666 return 0;
2667
2668 /* Make None the first constant, so the lambda can't have a
2669 docstring. */
2670 if (compiler_add_const(c, Py_None) < 0)
2671 return 0;
2672
2673 c->u->u_argcount = asdl_seq_LEN(args->args);
2674 c->u->u_posonlyargcount = asdl_seq_LEN(args->posonlyargs);
2675 c->u->u_kwonlyargcount = asdl_seq_LEN(args->kwonlyargs);
2676 VISIT_IN_SCOPE(c, expr, e->v.Lambda.body);
2677 if (c->u->u_ste->ste_generator) {
2678 co = assemble(c, 0);
2679 }
2680 else {
2681 ADDOP_IN_SCOPE(c, RETURN_VALUE);
2682 co = assemble(c, 1);
2683 }
2684 qualname = c->u->u_qualname;
2685 Py_INCREF(qualname);
2686 compiler_exit_scope(c);
2687 if (co == NULL)
2688 return 0;
2689
2690 compiler_make_closure(c, co, funcflags, qualname);
2691 Py_DECREF(qualname);
2692 Py_DECREF(co);
2693
2694 return 1;
2695 }
2696
2697 static int
compiler_if(struct compiler * c,stmt_ty s)2698 compiler_if(struct compiler *c, stmt_ty s)
2699 {
2700 basicblock *end, *next;
2701 int constant;
2702 assert(s->kind == If_kind);
2703 end = compiler_new_block(c);
2704 if (end == NULL)
2705 return 0;
2706
2707 constant = expr_constant(s->v.If.test);
2708 /* constant = 0: "if 0"
2709 * constant = 1: "if 1", "if 2", ...
2710 * constant = -1: rest */
2711 if (constant == 0) {
2712 BEGIN_DO_NOT_EMIT_BYTECODE
2713 VISIT_SEQ(c, stmt, s->v.If.body);
2714 END_DO_NOT_EMIT_BYTECODE
2715 if (s->v.If.orelse) {
2716 VISIT_SEQ(c, stmt, s->v.If.orelse);
2717 }
2718 } else if (constant == 1) {
2719 VISIT_SEQ(c, stmt, s->v.If.body);
2720 if (s->v.If.orelse) {
2721 BEGIN_DO_NOT_EMIT_BYTECODE
2722 VISIT_SEQ(c, stmt, s->v.If.orelse);
2723 END_DO_NOT_EMIT_BYTECODE
2724 }
2725 } else {
2726 if (asdl_seq_LEN(s->v.If.orelse)) {
2727 next = compiler_new_block(c);
2728 if (next == NULL)
2729 return 0;
2730 }
2731 else {
2732 next = end;
2733 }
2734 if (!compiler_jump_if(c, s->v.If.test, next, 0)) {
2735 return 0;
2736 }
2737 VISIT_SEQ(c, stmt, s->v.If.body);
2738 if (asdl_seq_LEN(s->v.If.orelse)) {
2739 ADDOP_JREL(c, JUMP_FORWARD, end);
2740 compiler_use_next_block(c, next);
2741 VISIT_SEQ(c, stmt, s->v.If.orelse);
2742 }
2743 }
2744 compiler_use_next_block(c, end);
2745 return 1;
2746 }
2747
2748 static int
compiler_for(struct compiler * c,stmt_ty s)2749 compiler_for(struct compiler *c, stmt_ty s)
2750 {
2751 basicblock *start, *cleanup, *end;
2752
2753 start = compiler_new_block(c);
2754 cleanup = compiler_new_block(c);
2755 end = compiler_new_block(c);
2756 if (start == NULL || end == NULL || cleanup == NULL) {
2757 return 0;
2758 }
2759 if (!compiler_push_fblock(c, FOR_LOOP, start, end, NULL)) {
2760 return 0;
2761 }
2762 VISIT(c, expr, s->v.For.iter);
2763 ADDOP(c, GET_ITER);
2764 compiler_use_next_block(c, start);
2765 ADDOP_JREL(c, FOR_ITER, cleanup);
2766 VISIT(c, expr, s->v.For.target);
2767 VISIT_SEQ(c, stmt, s->v.For.body);
2768 ADDOP_JABS(c, JUMP_ABSOLUTE, start);
2769 compiler_use_next_block(c, cleanup);
2770
2771 compiler_pop_fblock(c, FOR_LOOP, start);
2772
2773 VISIT_SEQ(c, stmt, s->v.For.orelse);
2774 compiler_use_next_block(c, end);
2775 return 1;
2776 }
2777
2778
2779 static int
compiler_async_for(struct compiler * c,stmt_ty s)2780 compiler_async_for(struct compiler *c, stmt_ty s)
2781 {
2782 basicblock *start, *except, *end;
2783 if (IS_TOP_LEVEL_AWAIT(c)){
2784 c->u->u_ste->ste_coroutine = 1;
2785 } else if (c->u->u_scope_type != COMPILER_SCOPE_ASYNC_FUNCTION) {
2786 return compiler_error(c, "'async for' outside async function");
2787 }
2788
2789 start = compiler_new_block(c);
2790 except = compiler_new_block(c);
2791 end = compiler_new_block(c);
2792
2793 if (start == NULL || except == NULL || end == NULL) {
2794 return 0;
2795 }
2796 VISIT(c, expr, s->v.AsyncFor.iter);
2797 ADDOP(c, GET_AITER);
2798
2799 compiler_use_next_block(c, start);
2800 if (!compiler_push_fblock(c, FOR_LOOP, start, end, NULL)) {
2801 return 0;
2802 }
2803 /* SETUP_FINALLY to guard the __anext__ call */
2804 ADDOP_JREL(c, SETUP_FINALLY, except);
2805 ADDOP(c, GET_ANEXT);
2806 ADDOP_LOAD_CONST(c, Py_None);
2807 ADDOP(c, YIELD_FROM);
2808 ADDOP(c, POP_BLOCK); /* for SETUP_FINALLY */
2809
2810 /* Success block for __anext__ */
2811 VISIT(c, expr, s->v.AsyncFor.target);
2812 VISIT_SEQ(c, stmt, s->v.AsyncFor.body);
2813 ADDOP_JABS(c, JUMP_ABSOLUTE, start);
2814
2815 compiler_pop_fblock(c, FOR_LOOP, start);
2816
2817 /* Except block for __anext__ */
2818 compiler_use_next_block(c, except);
2819 ADDOP(c, END_ASYNC_FOR);
2820
2821 /* `else` block */
2822 VISIT_SEQ(c, stmt, s->v.For.orelse);
2823
2824 compiler_use_next_block(c, end);
2825
2826 return 1;
2827 }
2828
2829 static int
compiler_while(struct compiler * c,stmt_ty s)2830 compiler_while(struct compiler *c, stmt_ty s)
2831 {
2832 basicblock *loop, *orelse, *end, *anchor = NULL;
2833 int constant = expr_constant(s->v.While.test);
2834
2835 if (constant == 0) {
2836 BEGIN_DO_NOT_EMIT_BYTECODE
2837 // Push a dummy block so the VISIT_SEQ knows that we are
2838 // inside a while loop so it can correctly evaluate syntax
2839 // errors.
2840 if (!compiler_push_fblock(c, WHILE_LOOP, NULL, NULL, NULL)) {
2841 return 0;
2842 }
2843 VISIT_SEQ(c, stmt, s->v.While.body);
2844 // Remove the dummy block now that is not needed.
2845 compiler_pop_fblock(c, WHILE_LOOP, NULL);
2846 END_DO_NOT_EMIT_BYTECODE
2847 if (s->v.While.orelse) {
2848 VISIT_SEQ(c, stmt, s->v.While.orelse);
2849 }
2850 return 1;
2851 }
2852 loop = compiler_new_block(c);
2853 end = compiler_new_block(c);
2854 if (constant == -1) {
2855 anchor = compiler_new_block(c);
2856 if (anchor == NULL)
2857 return 0;
2858 }
2859 if (loop == NULL || end == NULL)
2860 return 0;
2861 if (s->v.While.orelse) {
2862 orelse = compiler_new_block(c);
2863 if (orelse == NULL)
2864 return 0;
2865 }
2866 else
2867 orelse = NULL;
2868
2869 compiler_use_next_block(c, loop);
2870 if (!compiler_push_fblock(c, WHILE_LOOP, loop, end, NULL))
2871 return 0;
2872 if (constant == -1) {
2873 if (!compiler_jump_if(c, s->v.While.test, anchor, 0))
2874 return 0;
2875 }
2876 VISIT_SEQ(c, stmt, s->v.While.body);
2877 ADDOP_JABS(c, JUMP_ABSOLUTE, loop);
2878
2879 /* XXX should the two POP instructions be in a separate block
2880 if there is no else clause ?
2881 */
2882
2883 if (constant == -1)
2884 compiler_use_next_block(c, anchor);
2885 compiler_pop_fblock(c, WHILE_LOOP, loop);
2886
2887 if (orelse != NULL) /* what if orelse is just pass? */
2888 VISIT_SEQ(c, stmt, s->v.While.orelse);
2889 compiler_use_next_block(c, end);
2890
2891 return 1;
2892 }
2893
2894 static int
compiler_return(struct compiler * c,stmt_ty s)2895 compiler_return(struct compiler *c, stmt_ty s)
2896 {
2897 int preserve_tos = ((s->v.Return.value != NULL) &&
2898 (s->v.Return.value->kind != Constant_kind));
2899 if (c->u->u_ste->ste_type != FunctionBlock)
2900 return compiler_error(c, "'return' outside function");
2901 if (s->v.Return.value != NULL &&
2902 c->u->u_ste->ste_coroutine && c->u->u_ste->ste_generator)
2903 {
2904 return compiler_error(
2905 c, "'return' with value in async generator");
2906 }
2907 if (preserve_tos) {
2908 VISIT(c, expr, s->v.Return.value);
2909 }
2910 if (!compiler_unwind_fblock_stack(c, preserve_tos, NULL))
2911 return 0;
2912 if (s->v.Return.value == NULL) {
2913 ADDOP_LOAD_CONST(c, Py_None);
2914 }
2915 else if (!preserve_tos) {
2916 VISIT(c, expr, s->v.Return.value);
2917 }
2918 ADDOP(c, RETURN_VALUE);
2919
2920 return 1;
2921 }
2922
2923 static int
compiler_break(struct compiler * c)2924 compiler_break(struct compiler *c)
2925 {
2926 struct fblockinfo *loop = NULL;
2927 if (!compiler_unwind_fblock_stack(c, 0, &loop)) {
2928 return 0;
2929 }
2930 if (loop == NULL) {
2931 return compiler_error(c, "'break' outside loop");
2932 }
2933 if (!compiler_unwind_fblock(c, loop, 0)) {
2934 return 0;
2935 }
2936 ADDOP_JABS(c, JUMP_ABSOLUTE, loop->fb_exit);
2937 return 1;
2938 }
2939
2940 static int
compiler_continue(struct compiler * c)2941 compiler_continue(struct compiler *c)
2942 {
2943 struct fblockinfo *loop = NULL;
2944 if (!compiler_unwind_fblock_stack(c, 0, &loop)) {
2945 return 0;
2946 }
2947 if (loop == NULL) {
2948 return compiler_error(c, "'continue' not properly in loop");
2949 }
2950 ADDOP_JABS(c, JUMP_ABSOLUTE, loop->fb_block);
2951 return 1;
2952 }
2953
2954
2955 /* Code generated for "try: <body> finally: <finalbody>" is as follows:
2956
2957 SETUP_FINALLY L
2958 <code for body>
2959 POP_BLOCK
2960 <code for finalbody>
2961 JUMP E
2962 L:
2963 <code for finalbody>
2964 E:
2965
2966 The special instructions use the block stack. Each block
2967 stack entry contains the instruction that created it (here
2968 SETUP_FINALLY), the level of the value stack at the time the
2969 block stack entry was created, and a label (here L).
2970
2971 SETUP_FINALLY:
2972 Pushes the current value stack level and the label
2973 onto the block stack.
2974 POP_BLOCK:
2975 Pops en entry from the block stack.
2976
2977 The block stack is unwound when an exception is raised:
2978 when a SETUP_FINALLY entry is found, the raised and the caught
2979 exceptions are pushed onto the value stack (and the exception
2980 condition is cleared), and the interpreter jumps to the label
2981 gotten from the block stack.
2982 */
2983
2984 static int
compiler_try_finally(struct compiler * c,stmt_ty s)2985 compiler_try_finally(struct compiler *c, stmt_ty s)
2986 {
2987 basicblock *body, *end, *exit;
2988
2989 body = compiler_new_block(c);
2990 end = compiler_new_block(c);
2991 exit = compiler_new_block(c);
2992 if (body == NULL || end == NULL || exit == NULL)
2993 return 0;
2994
2995 /* `try` block */
2996 ADDOP_JREL(c, SETUP_FINALLY, end);
2997 compiler_use_next_block(c, body);
2998 if (!compiler_push_fblock(c, FINALLY_TRY, body, end, s->v.Try.finalbody))
2999 return 0;
3000 if (s->v.Try.handlers && asdl_seq_LEN(s->v.Try.handlers)) {
3001 if (!compiler_try_except(c, s))
3002 return 0;
3003 }
3004 else {
3005 VISIT_SEQ(c, stmt, s->v.Try.body);
3006 }
3007 ADDOP(c, POP_BLOCK);
3008 compiler_pop_fblock(c, FINALLY_TRY, body);
3009 VISIT_SEQ(c, stmt, s->v.Try.finalbody);
3010 ADDOP_JREL(c, JUMP_FORWARD, exit);
3011 /* `finally` block */
3012 compiler_use_next_block(c, end);
3013 if (!compiler_push_fblock(c, FINALLY_END, end, NULL, NULL))
3014 return 0;
3015 VISIT_SEQ(c, stmt, s->v.Try.finalbody);
3016 compiler_pop_fblock(c, FINALLY_END, end);
3017 ADDOP(c, RERAISE);
3018 compiler_use_next_block(c, exit);
3019 return 1;
3020 }
3021
3022 /*
3023 Code generated for "try: S except E1 as V1: S1 except E2 as V2: S2 ...":
3024 (The contents of the value stack is shown in [], with the top
3025 at the right; 'tb' is trace-back info, 'val' the exception's
3026 associated value, and 'exc' the exception.)
3027
3028 Value stack Label Instruction Argument
3029 [] SETUP_FINALLY L1
3030 [] <code for S>
3031 [] POP_BLOCK
3032 [] JUMP_FORWARD L0
3033
3034 [tb, val, exc] L1: DUP )
3035 [tb, val, exc, exc] <evaluate E1> )
3036 [tb, val, exc, exc, E1] JUMP_IF_NOT_EXC_MATCH L2 ) only if E1
3037 [tb, val, exc] POP
3038 [tb, val] <assign to V1> (or POP if no V1)
3039 [tb] POP
3040 [] <code for S1>
3041 JUMP_FORWARD L0
3042
3043 [tb, val, exc] L2: DUP
3044 .............................etc.......................
3045
3046 [tb, val, exc] Ln+1: RERAISE # re-raise exception
3047
3048 [] L0: <next statement>
3049
3050 Of course, parts are not generated if Vi or Ei is not present.
3051 */
3052 static int
compiler_try_except(struct compiler * c,stmt_ty s)3053 compiler_try_except(struct compiler *c, stmt_ty s)
3054 {
3055 basicblock *body, *orelse, *except, *end;
3056 Py_ssize_t i, n;
3057
3058 body = compiler_new_block(c);
3059 except = compiler_new_block(c);
3060 orelse = compiler_new_block(c);
3061 end = compiler_new_block(c);
3062 if (body == NULL || except == NULL || orelse == NULL || end == NULL)
3063 return 0;
3064 ADDOP_JREL(c, SETUP_FINALLY, except);
3065 compiler_use_next_block(c, body);
3066 if (!compiler_push_fblock(c, TRY_EXCEPT, body, NULL, NULL))
3067 return 0;
3068 VISIT_SEQ(c, stmt, s->v.Try.body);
3069 ADDOP(c, POP_BLOCK);
3070 compiler_pop_fblock(c, TRY_EXCEPT, body);
3071 ADDOP_JREL(c, JUMP_FORWARD, orelse);
3072 n = asdl_seq_LEN(s->v.Try.handlers);
3073 compiler_use_next_block(c, except);
3074 /* Runtime will push a block here, so we need to account for that */
3075 if (!compiler_push_fblock(c, EXCEPTION_HANDLER, NULL, NULL, NULL))
3076 return 0;
3077 for (i = 0; i < n; i++) {
3078 excepthandler_ty handler = (excepthandler_ty)asdl_seq_GET(
3079 s->v.Try.handlers, i);
3080 if (!handler->v.ExceptHandler.type && i < n-1)
3081 return compiler_error(c, "default 'except:' must be last");
3082 SET_LOC(c, handler);
3083 except = compiler_new_block(c);
3084 if (except == NULL)
3085 return 0;
3086 if (handler->v.ExceptHandler.type) {
3087 ADDOP(c, DUP_TOP);
3088 VISIT(c, expr, handler->v.ExceptHandler.type);
3089 ADDOP_JABS(c, JUMP_IF_NOT_EXC_MATCH, except);
3090 }
3091 ADDOP(c, POP_TOP);
3092 if (handler->v.ExceptHandler.name) {
3093 basicblock *cleanup_end, *cleanup_body;
3094
3095 cleanup_end = compiler_new_block(c);
3096 cleanup_body = compiler_new_block(c);
3097 if (cleanup_end == NULL || cleanup_body == NULL) {
3098 return 0;
3099 }
3100
3101 compiler_nameop(c, handler->v.ExceptHandler.name, Store);
3102 ADDOP(c, POP_TOP);
3103
3104 /*
3105 try:
3106 # body
3107 except type as name:
3108 try:
3109 # body
3110 finally:
3111 name = None # in case body contains "del name"
3112 del name
3113 */
3114
3115 /* second try: */
3116 ADDOP_JREL(c, SETUP_FINALLY, cleanup_end);
3117 compiler_use_next_block(c, cleanup_body);
3118 if (!compiler_push_fblock(c, HANDLER_CLEANUP, cleanup_body, NULL, handler->v.ExceptHandler.name))
3119 return 0;
3120
3121 /* second # body */
3122 VISIT_SEQ(c, stmt, handler->v.ExceptHandler.body);
3123 compiler_pop_fblock(c, HANDLER_CLEANUP, cleanup_body);
3124 ADDOP(c, POP_BLOCK);
3125 ADDOP(c, POP_EXCEPT);
3126 /* name = None; del name */
3127 ADDOP_LOAD_CONST(c, Py_None);
3128 compiler_nameop(c, handler->v.ExceptHandler.name, Store);
3129 compiler_nameop(c, handler->v.ExceptHandler.name, Del);
3130 ADDOP_JREL(c, JUMP_FORWARD, end);
3131
3132 /* except: */
3133 compiler_use_next_block(c, cleanup_end);
3134
3135 /* name = None; del name */
3136 ADDOP_LOAD_CONST(c, Py_None);
3137 compiler_nameop(c, handler->v.ExceptHandler.name, Store);
3138 compiler_nameop(c, handler->v.ExceptHandler.name, Del);
3139
3140 ADDOP(c, RERAISE);
3141 }
3142 else {
3143 basicblock *cleanup_body;
3144
3145 cleanup_body = compiler_new_block(c);
3146 if (!cleanup_body)
3147 return 0;
3148
3149 ADDOP(c, POP_TOP);
3150 ADDOP(c, POP_TOP);
3151 compiler_use_next_block(c, cleanup_body);
3152 if (!compiler_push_fblock(c, HANDLER_CLEANUP, cleanup_body, NULL, NULL))
3153 return 0;
3154 VISIT_SEQ(c, stmt, handler->v.ExceptHandler.body);
3155 compiler_pop_fblock(c, HANDLER_CLEANUP, cleanup_body);
3156 ADDOP(c, POP_EXCEPT);
3157 ADDOP_JREL(c, JUMP_FORWARD, end);
3158 }
3159 compiler_use_next_block(c, except);
3160 }
3161 compiler_pop_fblock(c, EXCEPTION_HANDLER, NULL);
3162 ADDOP(c, RERAISE);
3163 compiler_use_next_block(c, orelse);
3164 VISIT_SEQ(c, stmt, s->v.Try.orelse);
3165 compiler_use_next_block(c, end);
3166 return 1;
3167 }
3168
3169 static int
compiler_try(struct compiler * c,stmt_ty s)3170 compiler_try(struct compiler *c, stmt_ty s) {
3171 if (s->v.Try.finalbody && asdl_seq_LEN(s->v.Try.finalbody))
3172 return compiler_try_finally(c, s);
3173 else
3174 return compiler_try_except(c, s);
3175 }
3176
3177
3178 static int
compiler_import_as(struct compiler * c,identifier name,identifier asname)3179 compiler_import_as(struct compiler *c, identifier name, identifier asname)
3180 {
3181 /* The IMPORT_NAME opcode was already generated. This function
3182 merely needs to bind the result to a name.
3183
3184 If there is a dot in name, we need to split it and emit a
3185 IMPORT_FROM for each name.
3186 */
3187 Py_ssize_t len = PyUnicode_GET_LENGTH(name);
3188 Py_ssize_t dot = PyUnicode_FindChar(name, '.', 0, len, 1);
3189 if (dot == -2)
3190 return 0;
3191 if (dot != -1) {
3192 /* Consume the base module name to get the first attribute */
3193 while (1) {
3194 Py_ssize_t pos = dot + 1;
3195 PyObject *attr;
3196 dot = PyUnicode_FindChar(name, '.', pos, len, 1);
3197 if (dot == -2)
3198 return 0;
3199 attr = PyUnicode_Substring(name, pos, (dot != -1) ? dot : len);
3200 if (!attr)
3201 return 0;
3202 ADDOP_N(c, IMPORT_FROM, attr, names);
3203 if (dot == -1) {
3204 break;
3205 }
3206 ADDOP(c, ROT_TWO);
3207 ADDOP(c, POP_TOP);
3208 }
3209 if (!compiler_nameop(c, asname, Store)) {
3210 return 0;
3211 }
3212 ADDOP(c, POP_TOP);
3213 return 1;
3214 }
3215 return compiler_nameop(c, asname, Store);
3216 }
3217
3218 static int
compiler_import(struct compiler * c,stmt_ty s)3219 compiler_import(struct compiler *c, stmt_ty s)
3220 {
3221 /* The Import node stores a module name like a.b.c as a single
3222 string. This is convenient for all cases except
3223 import a.b.c as d
3224 where we need to parse that string to extract the individual
3225 module names.
3226 XXX Perhaps change the representation to make this case simpler?
3227 */
3228 Py_ssize_t i, n = asdl_seq_LEN(s->v.Import.names);
3229
3230 for (i = 0; i < n; i++) {
3231 alias_ty alias = (alias_ty)asdl_seq_GET(s->v.Import.names, i);
3232 int r;
3233
3234 ADDOP_LOAD_CONST(c, _PyLong_Zero);
3235 ADDOP_LOAD_CONST(c, Py_None);
3236 ADDOP_NAME(c, IMPORT_NAME, alias->name, names);
3237
3238 if (alias->asname) {
3239 r = compiler_import_as(c, alias->name, alias->asname);
3240 if (!r)
3241 return r;
3242 }
3243 else {
3244 identifier tmp = alias->name;
3245 Py_ssize_t dot = PyUnicode_FindChar(
3246 alias->name, '.', 0, PyUnicode_GET_LENGTH(alias->name), 1);
3247 if (dot != -1) {
3248 tmp = PyUnicode_Substring(alias->name, 0, dot);
3249 if (tmp == NULL)
3250 return 0;
3251 }
3252 r = compiler_nameop(c, tmp, Store);
3253 if (dot != -1) {
3254 Py_DECREF(tmp);
3255 }
3256 if (!r)
3257 return r;
3258 }
3259 }
3260 return 1;
3261 }
3262
3263 static int
compiler_from_import(struct compiler * c,stmt_ty s)3264 compiler_from_import(struct compiler *c, stmt_ty s)
3265 {
3266 Py_ssize_t i, n = asdl_seq_LEN(s->v.ImportFrom.names);
3267 PyObject *names;
3268 static PyObject *empty_string;
3269
3270 if (!empty_string) {
3271 empty_string = PyUnicode_FromString("");
3272 if (!empty_string)
3273 return 0;
3274 }
3275
3276 ADDOP_LOAD_CONST_NEW(c, PyLong_FromLong(s->v.ImportFrom.level));
3277
3278 names = PyTuple_New(n);
3279 if (!names)
3280 return 0;
3281
3282 /* build up the names */
3283 for (i = 0; i < n; i++) {
3284 alias_ty alias = (alias_ty)asdl_seq_GET(s->v.ImportFrom.names, i);
3285 Py_INCREF(alias->name);
3286 PyTuple_SET_ITEM(names, i, alias->name);
3287 }
3288
3289 if (s->lineno > c->c_future->ff_lineno && s->v.ImportFrom.module &&
3290 _PyUnicode_EqualToASCIIString(s->v.ImportFrom.module, "__future__")) {
3291 Py_DECREF(names);
3292 return compiler_error(c, "from __future__ imports must occur "
3293 "at the beginning of the file");
3294 }
3295 ADDOP_LOAD_CONST_NEW(c, names);
3296
3297 if (s->v.ImportFrom.module) {
3298 ADDOP_NAME(c, IMPORT_NAME, s->v.ImportFrom.module, names);
3299 }
3300 else {
3301 ADDOP_NAME(c, IMPORT_NAME, empty_string, names);
3302 }
3303 for (i = 0; i < n; i++) {
3304 alias_ty alias = (alias_ty)asdl_seq_GET(s->v.ImportFrom.names, i);
3305 identifier store_name;
3306
3307 if (i == 0 && PyUnicode_READ_CHAR(alias->name, 0) == '*') {
3308 assert(n == 1);
3309 ADDOP(c, IMPORT_STAR);
3310 return 1;
3311 }
3312
3313 ADDOP_NAME(c, IMPORT_FROM, alias->name, names);
3314 store_name = alias->name;
3315 if (alias->asname)
3316 store_name = alias->asname;
3317
3318 if (!compiler_nameop(c, store_name, Store)) {
3319 return 0;
3320 }
3321 }
3322 /* remove imported module */
3323 ADDOP(c, POP_TOP);
3324 return 1;
3325 }
3326
3327 static int
compiler_assert(struct compiler * c,stmt_ty s)3328 compiler_assert(struct compiler *c, stmt_ty s)
3329 {
3330 basicblock *end;
3331
3332 if (c->c_optimize)
3333 return 1;
3334 if (s->v.Assert.test->kind == Tuple_kind &&
3335 asdl_seq_LEN(s->v.Assert.test->v.Tuple.elts) > 0)
3336 {
3337 if (!compiler_warn(c, "assertion is always true, "
3338 "perhaps remove parentheses?"))
3339 {
3340 return 0;
3341 }
3342 }
3343 end = compiler_new_block(c);
3344 if (end == NULL)
3345 return 0;
3346 if (!compiler_jump_if(c, s->v.Assert.test, end, 1))
3347 return 0;
3348 ADDOP(c, LOAD_ASSERTION_ERROR);
3349 if (s->v.Assert.msg) {
3350 VISIT(c, expr, s->v.Assert.msg);
3351 ADDOP_I(c, CALL_FUNCTION, 1);
3352 }
3353 ADDOP_I(c, RAISE_VARARGS, 1);
3354 compiler_use_next_block(c, end);
3355 return 1;
3356 }
3357
3358 static int
compiler_visit_stmt_expr(struct compiler * c,expr_ty value)3359 compiler_visit_stmt_expr(struct compiler *c, expr_ty value)
3360 {
3361 if (c->c_interactive && c->c_nestlevel <= 1) {
3362 VISIT(c, expr, value);
3363 ADDOP(c, PRINT_EXPR);
3364 return 1;
3365 }
3366
3367 if (value->kind == Constant_kind) {
3368 /* ignore constant statement */
3369 return 1;
3370 }
3371
3372 VISIT(c, expr, value);
3373 ADDOP(c, POP_TOP);
3374 return 1;
3375 }
3376
3377 static int
compiler_visit_stmt(struct compiler * c,stmt_ty s)3378 compiler_visit_stmt(struct compiler *c, stmt_ty s)
3379 {
3380 Py_ssize_t i, n;
3381
3382 /* Always assign a lineno to the next instruction for a stmt. */
3383 SET_LOC(c, s);
3384
3385 switch (s->kind) {
3386 case FunctionDef_kind:
3387 return compiler_function(c, s, 0);
3388 case ClassDef_kind:
3389 return compiler_class(c, s);
3390 case Return_kind:
3391 return compiler_return(c, s);
3392 case Delete_kind:
3393 VISIT_SEQ(c, expr, s->v.Delete.targets)
3394 break;
3395 case Assign_kind:
3396 n = asdl_seq_LEN(s->v.Assign.targets);
3397 VISIT(c, expr, s->v.Assign.value);
3398 for (i = 0; i < n; i++) {
3399 if (i < n - 1)
3400 ADDOP(c, DUP_TOP);
3401 VISIT(c, expr,
3402 (expr_ty)asdl_seq_GET(s->v.Assign.targets, i));
3403 }
3404 break;
3405 case AugAssign_kind:
3406 return compiler_augassign(c, s);
3407 case AnnAssign_kind:
3408 return compiler_annassign(c, s);
3409 case For_kind:
3410 return compiler_for(c, s);
3411 case While_kind:
3412 return compiler_while(c, s);
3413 case If_kind:
3414 return compiler_if(c, s);
3415 case Raise_kind:
3416 n = 0;
3417 if (s->v.Raise.exc) {
3418 VISIT(c, expr, s->v.Raise.exc);
3419 n++;
3420 if (s->v.Raise.cause) {
3421 VISIT(c, expr, s->v.Raise.cause);
3422 n++;
3423 }
3424 }
3425 ADDOP_I(c, RAISE_VARARGS, (int)n);
3426 break;
3427 case Try_kind:
3428 return compiler_try(c, s);
3429 case Assert_kind:
3430 return compiler_assert(c, s);
3431 case Import_kind:
3432 return compiler_import(c, s);
3433 case ImportFrom_kind:
3434 return compiler_from_import(c, s);
3435 case Global_kind:
3436 case Nonlocal_kind:
3437 break;
3438 case Expr_kind:
3439 return compiler_visit_stmt_expr(c, s->v.Expr.value);
3440 case Pass_kind:
3441 break;
3442 case Break_kind:
3443 return compiler_break(c);
3444 case Continue_kind:
3445 return compiler_continue(c);
3446 case With_kind:
3447 return compiler_with(c, s, 0);
3448 case AsyncFunctionDef_kind:
3449 return compiler_function(c, s, 1);
3450 case AsyncWith_kind:
3451 return compiler_async_with(c, s, 0);
3452 case AsyncFor_kind:
3453 return compiler_async_for(c, s);
3454 }
3455
3456 return 1;
3457 }
3458
3459 static int
unaryop(unaryop_ty op)3460 unaryop(unaryop_ty op)
3461 {
3462 switch (op) {
3463 case Invert:
3464 return UNARY_INVERT;
3465 case Not:
3466 return UNARY_NOT;
3467 case UAdd:
3468 return UNARY_POSITIVE;
3469 case USub:
3470 return UNARY_NEGATIVE;
3471 default:
3472 PyErr_Format(PyExc_SystemError,
3473 "unary op %d should not be possible", op);
3474 return 0;
3475 }
3476 }
3477
3478 static int
binop(operator_ty op)3479 binop(operator_ty op)
3480 {
3481 switch (op) {
3482 case Add:
3483 return BINARY_ADD;
3484 case Sub:
3485 return BINARY_SUBTRACT;
3486 case Mult:
3487 return BINARY_MULTIPLY;
3488 case MatMult:
3489 return BINARY_MATRIX_MULTIPLY;
3490 case Div:
3491 return BINARY_TRUE_DIVIDE;
3492 case Mod:
3493 return BINARY_MODULO;
3494 case Pow:
3495 return BINARY_POWER;
3496 case LShift:
3497 return BINARY_LSHIFT;
3498 case RShift:
3499 return BINARY_RSHIFT;
3500 case BitOr:
3501 return BINARY_OR;
3502 case BitXor:
3503 return BINARY_XOR;
3504 case BitAnd:
3505 return BINARY_AND;
3506 case FloorDiv:
3507 return BINARY_FLOOR_DIVIDE;
3508 default:
3509 PyErr_Format(PyExc_SystemError,
3510 "binary op %d should not be possible", op);
3511 return 0;
3512 }
3513 }
3514
3515 static int
inplace_binop(operator_ty op)3516 inplace_binop(operator_ty op)
3517 {
3518 switch (op) {
3519 case Add:
3520 return INPLACE_ADD;
3521 case Sub:
3522 return INPLACE_SUBTRACT;
3523 case Mult:
3524 return INPLACE_MULTIPLY;
3525 case MatMult:
3526 return INPLACE_MATRIX_MULTIPLY;
3527 case Div:
3528 return INPLACE_TRUE_DIVIDE;
3529 case Mod:
3530 return INPLACE_MODULO;
3531 case Pow:
3532 return INPLACE_POWER;
3533 case LShift:
3534 return INPLACE_LSHIFT;
3535 case RShift:
3536 return INPLACE_RSHIFT;
3537 case BitOr:
3538 return INPLACE_OR;
3539 case BitXor:
3540 return INPLACE_XOR;
3541 case BitAnd:
3542 return INPLACE_AND;
3543 case FloorDiv:
3544 return INPLACE_FLOOR_DIVIDE;
3545 default:
3546 PyErr_Format(PyExc_SystemError,
3547 "inplace binary op %d should not be possible", op);
3548 return 0;
3549 }
3550 }
3551
3552 static int
compiler_nameop(struct compiler * c,identifier name,expr_context_ty ctx)3553 compiler_nameop(struct compiler *c, identifier name, expr_context_ty ctx)
3554 {
3555 int op, scope;
3556 Py_ssize_t arg;
3557 enum { OP_FAST, OP_GLOBAL, OP_DEREF, OP_NAME } optype;
3558
3559 PyObject *dict = c->u->u_names;
3560 PyObject *mangled;
3561
3562 assert(!_PyUnicode_EqualToASCIIString(name, "None") &&
3563 !_PyUnicode_EqualToASCIIString(name, "True") &&
3564 !_PyUnicode_EqualToASCIIString(name, "False"));
3565
3566 if (forbidden_name(c, name, ctx))
3567 return 0;
3568
3569 mangled = _Py_Mangle(c->u->u_private, name);
3570 if (!mangled)
3571 return 0;
3572
3573 op = 0;
3574 optype = OP_NAME;
3575 scope = PyST_GetScope(c->u->u_ste, mangled);
3576 switch (scope) {
3577 case FREE:
3578 dict = c->u->u_freevars;
3579 optype = OP_DEREF;
3580 break;
3581 case CELL:
3582 dict = c->u->u_cellvars;
3583 optype = OP_DEREF;
3584 break;
3585 case LOCAL:
3586 if (c->u->u_ste->ste_type == FunctionBlock)
3587 optype = OP_FAST;
3588 break;
3589 case GLOBAL_IMPLICIT:
3590 if (c->u->u_ste->ste_type == FunctionBlock)
3591 optype = OP_GLOBAL;
3592 break;
3593 case GLOBAL_EXPLICIT:
3594 optype = OP_GLOBAL;
3595 break;
3596 default:
3597 /* scope can be 0 */
3598 break;
3599 }
3600
3601 /* XXX Leave assert here, but handle __doc__ and the like better */
3602 assert(scope || PyUnicode_READ_CHAR(name, 0) == '_');
3603
3604 switch (optype) {
3605 case OP_DEREF:
3606 switch (ctx) {
3607 case Load:
3608 op = (c->u->u_ste->ste_type == ClassBlock) ? LOAD_CLASSDEREF : LOAD_DEREF;
3609 break;
3610 case Store: op = STORE_DEREF; break;
3611 case Del: op = DELETE_DEREF; break;
3612 }
3613 break;
3614 case OP_FAST:
3615 switch (ctx) {
3616 case Load: op = LOAD_FAST; break;
3617 case Store: op = STORE_FAST; break;
3618 case Del: op = DELETE_FAST; break;
3619 }
3620 ADDOP_N(c, op, mangled, varnames);
3621 return 1;
3622 case OP_GLOBAL:
3623 switch (ctx) {
3624 case Load: op = LOAD_GLOBAL; break;
3625 case Store: op = STORE_GLOBAL; break;
3626 case Del: op = DELETE_GLOBAL; break;
3627 }
3628 break;
3629 case OP_NAME:
3630 switch (ctx) {
3631 case Load: op = LOAD_NAME; break;
3632 case Store: op = STORE_NAME; break;
3633 case Del: op = DELETE_NAME; break;
3634 }
3635 break;
3636 }
3637
3638 assert(op);
3639 arg = compiler_add_o(dict, mangled);
3640 Py_DECREF(mangled);
3641 if (arg < 0)
3642 return 0;
3643 return compiler_addop_i(c, op, arg);
3644 }
3645
3646 static int
compiler_boolop(struct compiler * c,expr_ty e)3647 compiler_boolop(struct compiler *c, expr_ty e)
3648 {
3649 basicblock *end;
3650 int jumpi;
3651 Py_ssize_t i, n;
3652 asdl_seq *s;
3653
3654 assert(e->kind == BoolOp_kind);
3655 if (e->v.BoolOp.op == And)
3656 jumpi = JUMP_IF_FALSE_OR_POP;
3657 else
3658 jumpi = JUMP_IF_TRUE_OR_POP;
3659 end = compiler_new_block(c);
3660 if (end == NULL)
3661 return 0;
3662 s = e->v.BoolOp.values;
3663 n = asdl_seq_LEN(s) - 1;
3664 assert(n >= 0);
3665 for (i = 0; i < n; ++i) {
3666 VISIT(c, expr, (expr_ty)asdl_seq_GET(s, i));
3667 ADDOP_JABS(c, jumpi, end);
3668 }
3669 VISIT(c, expr, (expr_ty)asdl_seq_GET(s, n));
3670 compiler_use_next_block(c, end);
3671 return 1;
3672 }
3673
3674 static int
starunpack_helper(struct compiler * c,asdl_seq * elts,int pushed,int build,int add,int extend,int tuple)3675 starunpack_helper(struct compiler *c, asdl_seq *elts, int pushed,
3676 int build, int add, int extend, int tuple)
3677 {
3678 Py_ssize_t n = asdl_seq_LEN(elts);
3679 Py_ssize_t i, seen_star = 0;
3680 if (n > 2 && are_all_items_const(elts, 0, n)) {
3681 PyObject *folded = PyTuple_New(n);
3682 if (folded == NULL) {
3683 return 0;
3684 }
3685 PyObject *val;
3686 for (i = 0; i < n; i++) {
3687 val = ((expr_ty)asdl_seq_GET(elts, i))->v.Constant.value;
3688 Py_INCREF(val);
3689 PyTuple_SET_ITEM(folded, i, val);
3690 }
3691 if (tuple) {
3692 ADDOP_LOAD_CONST_NEW(c, folded);
3693 } else {
3694 if (add == SET_ADD) {
3695 Py_SETREF(folded, PyFrozenSet_New(folded));
3696 if (folded == NULL) {
3697 return 0;
3698 }
3699 }
3700 ADDOP_I(c, build, pushed);
3701 ADDOP_LOAD_CONST_NEW(c, folded);
3702 ADDOP_I(c, extend, 1);
3703 }
3704 return 1;
3705 }
3706
3707 for (i = 0; i < n; i++) {
3708 expr_ty elt = asdl_seq_GET(elts, i);
3709 if (elt->kind == Starred_kind) {
3710 seen_star = 1;
3711 }
3712 }
3713 if (seen_star) {
3714 seen_star = 0;
3715 for (i = 0; i < n; i++) {
3716 expr_ty elt = asdl_seq_GET(elts, i);
3717 if (elt->kind == Starred_kind) {
3718 if (seen_star == 0) {
3719 ADDOP_I(c, build, i+pushed);
3720 seen_star = 1;
3721 }
3722 VISIT(c, expr, elt->v.Starred.value);
3723 ADDOP_I(c, extend, 1);
3724 }
3725 else {
3726 VISIT(c, expr, elt);
3727 if (seen_star) {
3728 ADDOP_I(c, add, 1);
3729 }
3730 }
3731 }
3732 assert(seen_star);
3733 if (tuple) {
3734 ADDOP(c, LIST_TO_TUPLE);
3735 }
3736 }
3737 else {
3738 for (i = 0; i < n; i++) {
3739 expr_ty elt = asdl_seq_GET(elts, i);
3740 VISIT(c, expr, elt);
3741 }
3742 if (tuple) {
3743 ADDOP_I(c, BUILD_TUPLE, n+pushed);
3744 } else {
3745 ADDOP_I(c, build, n+pushed);
3746 }
3747 }
3748 return 1;
3749 }
3750
3751 static int
assignment_helper(struct compiler * c,asdl_seq * elts)3752 assignment_helper(struct compiler *c, asdl_seq *elts)
3753 {
3754 Py_ssize_t n = asdl_seq_LEN(elts);
3755 Py_ssize_t i;
3756 int seen_star = 0;
3757 for (i = 0; i < n; i++) {
3758 expr_ty elt = asdl_seq_GET(elts, i);
3759 if (elt->kind == Starred_kind && !seen_star) {
3760 if ((i >= (1 << 8)) ||
3761 (n-i-1 >= (INT_MAX >> 8)))
3762 return compiler_error(c,
3763 "too many expressions in "
3764 "star-unpacking assignment");
3765 ADDOP_I(c, UNPACK_EX, (i + ((n-i-1) << 8)));
3766 seen_star = 1;
3767 }
3768 else if (elt->kind == Starred_kind) {
3769 return compiler_error(c,
3770 "multiple starred expressions in assignment");
3771 }
3772 }
3773 if (!seen_star) {
3774 ADDOP_I(c, UNPACK_SEQUENCE, n);
3775 }
3776 for (i = 0; i < n; i++) {
3777 expr_ty elt = asdl_seq_GET(elts, i);
3778 VISIT(c, expr, elt->kind != Starred_kind ? elt : elt->v.Starred.value);
3779 }
3780 return 1;
3781 }
3782
3783 static int
compiler_list(struct compiler * c,expr_ty e)3784 compiler_list(struct compiler *c, expr_ty e)
3785 {
3786 asdl_seq *elts = e->v.List.elts;
3787 if (e->v.List.ctx == Store) {
3788 return assignment_helper(c, elts);
3789 }
3790 else if (e->v.List.ctx == Load) {
3791 return starunpack_helper(c, elts, 0, BUILD_LIST,
3792 LIST_APPEND, LIST_EXTEND, 0);
3793 }
3794 else
3795 VISIT_SEQ(c, expr, elts);
3796 return 1;
3797 }
3798
3799 static int
compiler_tuple(struct compiler * c,expr_ty e)3800 compiler_tuple(struct compiler *c, expr_ty e)
3801 {
3802 asdl_seq *elts = e->v.Tuple.elts;
3803 if (e->v.Tuple.ctx == Store) {
3804 return assignment_helper(c, elts);
3805 }
3806 else if (e->v.Tuple.ctx == Load) {
3807 return starunpack_helper(c, elts, 0, BUILD_LIST,
3808 LIST_APPEND, LIST_EXTEND, 1);
3809 }
3810 else
3811 VISIT_SEQ(c, expr, elts);
3812 return 1;
3813 }
3814
3815 static int
compiler_set(struct compiler * c,expr_ty e)3816 compiler_set(struct compiler *c, expr_ty e)
3817 {
3818 return starunpack_helper(c, e->v.Set.elts, 0, BUILD_SET,
3819 SET_ADD, SET_UPDATE, 0);
3820 }
3821
3822 static int
are_all_items_const(asdl_seq * seq,Py_ssize_t begin,Py_ssize_t end)3823 are_all_items_const(asdl_seq *seq, Py_ssize_t begin, Py_ssize_t end)
3824 {
3825 Py_ssize_t i;
3826 for (i = begin; i < end; i++) {
3827 expr_ty key = (expr_ty)asdl_seq_GET(seq, i);
3828 if (key == NULL || key->kind != Constant_kind)
3829 return 0;
3830 }
3831 return 1;
3832 }
3833
3834 static int
compiler_subdict(struct compiler * c,expr_ty e,Py_ssize_t begin,Py_ssize_t end)3835 compiler_subdict(struct compiler *c, expr_ty e, Py_ssize_t begin, Py_ssize_t end)
3836 {
3837 Py_ssize_t i, n = end - begin;
3838 PyObject *keys, *key;
3839 if (n > 1 && are_all_items_const(e->v.Dict.keys, begin, end)) {
3840 for (i = begin; i < end; i++) {
3841 VISIT(c, expr, (expr_ty)asdl_seq_GET(e->v.Dict.values, i));
3842 }
3843 keys = PyTuple_New(n);
3844 if (keys == NULL) {
3845 return 0;
3846 }
3847 for (i = begin; i < end; i++) {
3848 key = ((expr_ty)asdl_seq_GET(e->v.Dict.keys, i))->v.Constant.value;
3849 Py_INCREF(key);
3850 PyTuple_SET_ITEM(keys, i - begin, key);
3851 }
3852 ADDOP_LOAD_CONST_NEW(c, keys);
3853 ADDOP_I(c, BUILD_CONST_KEY_MAP, n);
3854 }
3855 else {
3856 for (i = begin; i < end; i++) {
3857 VISIT(c, expr, (expr_ty)asdl_seq_GET(e->v.Dict.keys, i));
3858 VISIT(c, expr, (expr_ty)asdl_seq_GET(e->v.Dict.values, i));
3859 }
3860 ADDOP_I(c, BUILD_MAP, n);
3861 }
3862 return 1;
3863 }
3864
3865 static int
compiler_dict(struct compiler * c,expr_ty e)3866 compiler_dict(struct compiler *c, expr_ty e)
3867 {
3868 Py_ssize_t i, n, elements;
3869 int have_dict;
3870 int is_unpacking = 0;
3871 n = asdl_seq_LEN(e->v.Dict.values);
3872 have_dict = 0;
3873 elements = 0;
3874 for (i = 0; i < n; i++) {
3875 is_unpacking = (expr_ty)asdl_seq_GET(e->v.Dict.keys, i) == NULL;
3876 if (is_unpacking) {
3877 if (elements) {
3878 if (!compiler_subdict(c, e, i - elements, i)) {
3879 return 0;
3880 }
3881 if (have_dict) {
3882 ADDOP_I(c, DICT_UPDATE, 1);
3883 }
3884 have_dict = 1;
3885 elements = 0;
3886 }
3887 if (have_dict == 0) {
3888 ADDOP_I(c, BUILD_MAP, 0);
3889 have_dict = 1;
3890 }
3891 VISIT(c, expr, (expr_ty)asdl_seq_GET(e->v.Dict.values, i));
3892 ADDOP_I(c, DICT_UPDATE, 1);
3893 }
3894 else {
3895 if (elements == 0xFFFF) {
3896 if (!compiler_subdict(c, e, i - elements, i + 1)) {
3897 return 0;
3898 }
3899 if (have_dict) {
3900 ADDOP_I(c, DICT_UPDATE, 1);
3901 }
3902 have_dict = 1;
3903 elements = 0;
3904 }
3905 else {
3906 elements++;
3907 }
3908 }
3909 }
3910 if (elements) {
3911 if (!compiler_subdict(c, e, n - elements, n)) {
3912 return 0;
3913 }
3914 if (have_dict) {
3915 ADDOP_I(c, DICT_UPDATE, 1);
3916 }
3917 have_dict = 1;
3918 }
3919 if (!have_dict) {
3920 ADDOP_I(c, BUILD_MAP, 0);
3921 }
3922 return 1;
3923 }
3924
3925 static int
compiler_compare(struct compiler * c,expr_ty e)3926 compiler_compare(struct compiler *c, expr_ty e)
3927 {
3928 Py_ssize_t i, n;
3929
3930 if (!check_compare(c, e)) {
3931 return 0;
3932 }
3933 VISIT(c, expr, e->v.Compare.left);
3934 assert(asdl_seq_LEN(e->v.Compare.ops) > 0);
3935 n = asdl_seq_LEN(e->v.Compare.ops) - 1;
3936 if (n == 0) {
3937 VISIT(c, expr, (expr_ty)asdl_seq_GET(e->v.Compare.comparators, 0));
3938 ADDOP_COMPARE(c, asdl_seq_GET(e->v.Compare.ops, 0));
3939 }
3940 else {
3941 basicblock *cleanup = compiler_new_block(c);
3942 if (cleanup == NULL)
3943 return 0;
3944 for (i = 0; i < n; i++) {
3945 VISIT(c, expr,
3946 (expr_ty)asdl_seq_GET(e->v.Compare.comparators, i));
3947 ADDOP(c, DUP_TOP);
3948 ADDOP(c, ROT_THREE);
3949 ADDOP_COMPARE(c, asdl_seq_GET(e->v.Compare.ops, i));
3950 ADDOP_JABS(c, JUMP_IF_FALSE_OR_POP, cleanup);
3951 NEXT_BLOCK(c);
3952 }
3953 VISIT(c, expr, (expr_ty)asdl_seq_GET(e->v.Compare.comparators, n));
3954 ADDOP_COMPARE(c, asdl_seq_GET(e->v.Compare.ops, n));
3955 basicblock *end = compiler_new_block(c);
3956 if (end == NULL)
3957 return 0;
3958 ADDOP_JREL(c, JUMP_FORWARD, end);
3959 compiler_use_next_block(c, cleanup);
3960 ADDOP(c, ROT_TWO);
3961 ADDOP(c, POP_TOP);
3962 compiler_use_next_block(c, end);
3963 }
3964 return 1;
3965 }
3966
3967 static PyTypeObject *
infer_type(expr_ty e)3968 infer_type(expr_ty e)
3969 {
3970 switch (e->kind) {
3971 case Tuple_kind:
3972 return &PyTuple_Type;
3973 case List_kind:
3974 case ListComp_kind:
3975 return &PyList_Type;
3976 case Dict_kind:
3977 case DictComp_kind:
3978 return &PyDict_Type;
3979 case Set_kind:
3980 case SetComp_kind:
3981 return &PySet_Type;
3982 case GeneratorExp_kind:
3983 return &PyGen_Type;
3984 case Lambda_kind:
3985 return &PyFunction_Type;
3986 case JoinedStr_kind:
3987 case FormattedValue_kind:
3988 return &PyUnicode_Type;
3989 case Constant_kind:
3990 return Py_TYPE(e->v.Constant.value);
3991 default:
3992 return NULL;
3993 }
3994 }
3995
3996 static int
check_caller(struct compiler * c,expr_ty e)3997 check_caller(struct compiler *c, expr_ty e)
3998 {
3999 switch (e->kind) {
4000 case Constant_kind:
4001 case Tuple_kind:
4002 case List_kind:
4003 case ListComp_kind:
4004 case Dict_kind:
4005 case DictComp_kind:
4006 case Set_kind:
4007 case SetComp_kind:
4008 case GeneratorExp_kind:
4009 case JoinedStr_kind:
4010 case FormattedValue_kind:
4011 return compiler_warn(c, "'%.200s' object is not callable; "
4012 "perhaps you missed a comma?",
4013 infer_type(e)->tp_name);
4014 default:
4015 return 1;
4016 }
4017 }
4018
4019 static int
check_subscripter(struct compiler * c,expr_ty e)4020 check_subscripter(struct compiler *c, expr_ty e)
4021 {
4022 PyObject *v;
4023
4024 switch (e->kind) {
4025 case Constant_kind:
4026 v = e->v.Constant.value;
4027 if (!(v == Py_None || v == Py_Ellipsis ||
4028 PyLong_Check(v) || PyFloat_Check(v) || PyComplex_Check(v) ||
4029 PyAnySet_Check(v)))
4030 {
4031 return 1;
4032 }
4033 /* fall through */
4034 case Set_kind:
4035 case SetComp_kind:
4036 case GeneratorExp_kind:
4037 case Lambda_kind:
4038 return compiler_warn(c, "'%.200s' object is not subscriptable; "
4039 "perhaps you missed a comma?",
4040 infer_type(e)->tp_name);
4041 default:
4042 return 1;
4043 }
4044 }
4045
4046 static int
check_index(struct compiler * c,expr_ty e,expr_ty s)4047 check_index(struct compiler *c, expr_ty e, expr_ty s)
4048 {
4049 PyObject *v;
4050
4051 PyTypeObject *index_type = infer_type(s);
4052 if (index_type == NULL
4053 || PyType_FastSubclass(index_type, Py_TPFLAGS_LONG_SUBCLASS)
4054 || index_type == &PySlice_Type) {
4055 return 1;
4056 }
4057
4058 switch (e->kind) {
4059 case Constant_kind:
4060 v = e->v.Constant.value;
4061 if (!(PyUnicode_Check(v) || PyBytes_Check(v) || PyTuple_Check(v))) {
4062 return 1;
4063 }
4064 /* fall through */
4065 case Tuple_kind:
4066 case List_kind:
4067 case ListComp_kind:
4068 case JoinedStr_kind:
4069 case FormattedValue_kind:
4070 return compiler_warn(c, "%.200s indices must be integers or slices, "
4071 "not %.200s; "
4072 "perhaps you missed a comma?",
4073 infer_type(e)->tp_name,
4074 index_type->tp_name);
4075 default:
4076 return 1;
4077 }
4078 }
4079
4080 // Return 1 if the method call was optimized, -1 if not, and 0 on error.
4081 static int
maybe_optimize_method_call(struct compiler * c,expr_ty e)4082 maybe_optimize_method_call(struct compiler *c, expr_ty e)
4083 {
4084 Py_ssize_t argsl, i;
4085 expr_ty meth = e->v.Call.func;
4086 asdl_seq *args = e->v.Call.args;
4087
4088 /* Check that the call node is an attribute access, and that
4089 the call doesn't have keyword parameters. */
4090 if (meth->kind != Attribute_kind || meth->v.Attribute.ctx != Load ||
4091 asdl_seq_LEN(e->v.Call.keywords))
4092 return -1;
4093
4094 /* Check that there are no *varargs types of arguments. */
4095 argsl = asdl_seq_LEN(args);
4096 for (i = 0; i < argsl; i++) {
4097 expr_ty elt = asdl_seq_GET(args, i);
4098 if (elt->kind == Starred_kind) {
4099 return -1;
4100 }
4101 }
4102
4103 /* Alright, we can optimize the code. */
4104 VISIT(c, expr, meth->v.Attribute.value);
4105 ADDOP_NAME(c, LOAD_METHOD, meth->v.Attribute.attr, names);
4106 VISIT_SEQ(c, expr, e->v.Call.args);
4107 ADDOP_I(c, CALL_METHOD, asdl_seq_LEN(e->v.Call.args));
4108 return 1;
4109 }
4110
4111 static int
validate_keywords(struct compiler * c,asdl_seq * keywords)4112 validate_keywords(struct compiler *c, asdl_seq *keywords)
4113 {
4114 Py_ssize_t nkeywords = asdl_seq_LEN(keywords);
4115 for (Py_ssize_t i = 0; i < nkeywords; i++) {
4116 keyword_ty key = ((keyword_ty)asdl_seq_GET(keywords, i));
4117 if (key->arg == NULL) {
4118 continue;
4119 }
4120 if (forbidden_name(c, key->arg, Store)) {
4121 return -1;
4122 }
4123 for (Py_ssize_t j = i + 1; j < nkeywords; j++) {
4124 keyword_ty other = ((keyword_ty)asdl_seq_GET(keywords, j));
4125 if (other->arg && !PyUnicode_Compare(key->arg, other->arg)) {
4126 PyObject *msg = PyUnicode_FromFormat("keyword argument repeated: %U", key->arg);
4127 if (msg == NULL) {
4128 return -1;
4129 }
4130 c->u->u_col_offset = other->col_offset;
4131 compiler_error(c, PyUnicode_AsUTF8(msg));
4132 Py_DECREF(msg);
4133 return -1;
4134 }
4135 }
4136 }
4137 return 0;
4138 }
4139
4140 static int
compiler_call(struct compiler * c,expr_ty e)4141 compiler_call(struct compiler *c, expr_ty e)
4142 {
4143 int ret = maybe_optimize_method_call(c, e);
4144 if (ret >= 0) {
4145 return ret;
4146 }
4147 if (!check_caller(c, e->v.Call.func)) {
4148 return 0;
4149 }
4150 VISIT(c, expr, e->v.Call.func);
4151 return compiler_call_helper(c, 0,
4152 e->v.Call.args,
4153 e->v.Call.keywords);
4154 }
4155
4156 static int
compiler_joined_str(struct compiler * c,expr_ty e)4157 compiler_joined_str(struct compiler *c, expr_ty e)
4158 {
4159 VISIT_SEQ(c, expr, e->v.JoinedStr.values);
4160 if (asdl_seq_LEN(e->v.JoinedStr.values) != 1)
4161 ADDOP_I(c, BUILD_STRING, asdl_seq_LEN(e->v.JoinedStr.values));
4162 return 1;
4163 }
4164
4165 /* Used to implement f-strings. Format a single value. */
4166 static int
compiler_formatted_value(struct compiler * c,expr_ty e)4167 compiler_formatted_value(struct compiler *c, expr_ty e)
4168 {
4169 /* Our oparg encodes 2 pieces of information: the conversion
4170 character, and whether or not a format_spec was provided.
4171
4172 Convert the conversion char to 3 bits:
4173 : 000 0x0 FVC_NONE The default if nothing specified.
4174 !s : 001 0x1 FVC_STR
4175 !r : 010 0x2 FVC_REPR
4176 !a : 011 0x3 FVC_ASCII
4177
4178 next bit is whether or not we have a format spec:
4179 yes : 100 0x4
4180 no : 000 0x0
4181 */
4182
4183 int conversion = e->v.FormattedValue.conversion;
4184 int oparg;
4185
4186 /* The expression to be formatted. */
4187 VISIT(c, expr, e->v.FormattedValue.value);
4188
4189 switch (conversion) {
4190 case 's': oparg = FVC_STR; break;
4191 case 'r': oparg = FVC_REPR; break;
4192 case 'a': oparg = FVC_ASCII; break;
4193 case -1: oparg = FVC_NONE; break;
4194 default:
4195 PyErr_Format(PyExc_SystemError,
4196 "Unrecognized conversion character %d", conversion);
4197 return 0;
4198 }
4199 if (e->v.FormattedValue.format_spec) {
4200 /* Evaluate the format spec, and update our opcode arg. */
4201 VISIT(c, expr, e->v.FormattedValue.format_spec);
4202 oparg |= FVS_HAVE_SPEC;
4203 }
4204
4205 /* And push our opcode and oparg */
4206 ADDOP_I(c, FORMAT_VALUE, oparg);
4207
4208 return 1;
4209 }
4210
4211 static int
compiler_subkwargs(struct compiler * c,asdl_seq * keywords,Py_ssize_t begin,Py_ssize_t end)4212 compiler_subkwargs(struct compiler *c, asdl_seq *keywords, Py_ssize_t begin, Py_ssize_t end)
4213 {
4214 Py_ssize_t i, n = end - begin;
4215 keyword_ty kw;
4216 PyObject *keys, *key;
4217 assert(n > 0);
4218 if (n > 1) {
4219 for (i = begin; i < end; i++) {
4220 kw = asdl_seq_GET(keywords, i);
4221 VISIT(c, expr, kw->value);
4222 }
4223 keys = PyTuple_New(n);
4224 if (keys == NULL) {
4225 return 0;
4226 }
4227 for (i = begin; i < end; i++) {
4228 key = ((keyword_ty) asdl_seq_GET(keywords, i))->arg;
4229 Py_INCREF(key);
4230 PyTuple_SET_ITEM(keys, i - begin, key);
4231 }
4232 ADDOP_LOAD_CONST_NEW(c, keys);
4233 ADDOP_I(c, BUILD_CONST_KEY_MAP, n);
4234 }
4235 else {
4236 /* a for loop only executes once */
4237 for (i = begin; i < end; i++) {
4238 kw = asdl_seq_GET(keywords, i);
4239 ADDOP_LOAD_CONST(c, kw->arg);
4240 VISIT(c, expr, kw->value);
4241 }
4242 ADDOP_I(c, BUILD_MAP, n);
4243 }
4244 return 1;
4245 }
4246
4247 /* shared code between compiler_call and compiler_class */
4248 static int
compiler_call_helper(struct compiler * c,int n,asdl_seq * args,asdl_seq * keywords)4249 compiler_call_helper(struct compiler *c,
4250 int n, /* Args already pushed */
4251 asdl_seq *args,
4252 asdl_seq *keywords)
4253 {
4254 Py_ssize_t i, nseen, nelts, nkwelts;
4255
4256 if (validate_keywords(c, keywords) == -1) {
4257 return 0;
4258 }
4259
4260 nelts = asdl_seq_LEN(args);
4261 nkwelts = asdl_seq_LEN(keywords);
4262
4263 for (i = 0; i < nelts; i++) {
4264 expr_ty elt = asdl_seq_GET(args, i);
4265 if (elt->kind == Starred_kind) {
4266 goto ex_call;
4267 }
4268 }
4269 for (i = 0; i < nkwelts; i++) {
4270 keyword_ty kw = asdl_seq_GET(keywords, i);
4271 if (kw->arg == NULL) {
4272 goto ex_call;
4273 }
4274 }
4275
4276 /* No * or ** args, so can use faster calling sequence */
4277 for (i = 0; i < nelts; i++) {
4278 expr_ty elt = asdl_seq_GET(args, i);
4279 assert(elt->kind != Starred_kind);
4280 VISIT(c, expr, elt);
4281 }
4282 if (nkwelts) {
4283 PyObject *names;
4284 VISIT_SEQ(c, keyword, keywords);
4285 names = PyTuple_New(nkwelts);
4286 if (names == NULL) {
4287 return 0;
4288 }
4289 for (i = 0; i < nkwelts; i++) {
4290 keyword_ty kw = asdl_seq_GET(keywords, i);
4291 Py_INCREF(kw->arg);
4292 PyTuple_SET_ITEM(names, i, kw->arg);
4293 }
4294 ADDOP_LOAD_CONST_NEW(c, names);
4295 ADDOP_I(c, CALL_FUNCTION_KW, n + nelts + nkwelts);
4296 return 1;
4297 }
4298 else {
4299 ADDOP_I(c, CALL_FUNCTION, n + nelts);
4300 return 1;
4301 }
4302
4303 ex_call:
4304
4305 /* Do positional arguments. */
4306 if (n ==0 && nelts == 1 && ((expr_ty)asdl_seq_GET(args, 0))->kind == Starred_kind) {
4307 VISIT(c, expr, ((expr_ty)asdl_seq_GET(args, 0))->v.Starred.value);
4308 }
4309 else if (starunpack_helper(c, args, n, BUILD_LIST,
4310 LIST_APPEND, LIST_EXTEND, 1) == 0) {
4311 return 0;
4312 }
4313 /* Then keyword arguments */
4314 if (nkwelts) {
4315 /* Has a new dict been pushed */
4316 int have_dict = 0;
4317
4318 nseen = 0; /* the number of keyword arguments on the stack following */
4319 for (i = 0; i < nkwelts; i++) {
4320 keyword_ty kw = asdl_seq_GET(keywords, i);
4321 if (kw->arg == NULL) {
4322 /* A keyword argument unpacking. */
4323 if (nseen) {
4324 if (!compiler_subkwargs(c, keywords, i - nseen, i)) {
4325 return 0;
4326 }
4327 if (have_dict) {
4328 ADDOP_I(c, DICT_MERGE, 1);
4329 }
4330 have_dict = 1;
4331 nseen = 0;
4332 }
4333 if (!have_dict) {
4334 ADDOP_I(c, BUILD_MAP, 0);
4335 have_dict = 1;
4336 }
4337 VISIT(c, expr, kw->value);
4338 ADDOP_I(c, DICT_MERGE, 1);
4339 }
4340 else {
4341 nseen++;
4342 }
4343 }
4344 if (nseen) {
4345 /* Pack up any trailing keyword arguments. */
4346 if (!compiler_subkwargs(c, keywords, nkwelts - nseen, nkwelts)) {
4347 return 0;
4348 }
4349 if (have_dict) {
4350 ADDOP_I(c, DICT_MERGE, 1);
4351 }
4352 have_dict = 1;
4353 }
4354 assert(have_dict);
4355 }
4356 ADDOP_I(c, CALL_FUNCTION_EX, nkwelts > 0);
4357 return 1;
4358 }
4359
4360
4361 /* List and set comprehensions and generator expressions work by creating a
4362 nested function to perform the actual iteration. This means that the
4363 iteration variables don't leak into the current scope.
4364 The defined function is called immediately following its definition, with the
4365 result of that call being the result of the expression.
4366 The LC/SC version returns the populated container, while the GE version is
4367 flagged in symtable.c as a generator, so it returns the generator object
4368 when the function is called.
4369
4370 Possible cleanups:
4371 - iterate over the generator sequence instead of using recursion
4372 */
4373
4374
4375 static int
compiler_comprehension_generator(struct compiler * c,asdl_seq * generators,int gen_index,int depth,expr_ty elt,expr_ty val,int type)4376 compiler_comprehension_generator(struct compiler *c,
4377 asdl_seq *generators, int gen_index,
4378 int depth,
4379 expr_ty elt, expr_ty val, int type)
4380 {
4381 comprehension_ty gen;
4382 gen = (comprehension_ty)asdl_seq_GET(generators, gen_index);
4383 if (gen->is_async) {
4384 return compiler_async_comprehension_generator(
4385 c, generators, gen_index, depth, elt, val, type);
4386 } else {
4387 return compiler_sync_comprehension_generator(
4388 c, generators, gen_index, depth, elt, val, type);
4389 }
4390 }
4391
4392 static int
compiler_sync_comprehension_generator(struct compiler * c,asdl_seq * generators,int gen_index,int depth,expr_ty elt,expr_ty val,int type)4393 compiler_sync_comprehension_generator(struct compiler *c,
4394 asdl_seq *generators, int gen_index,
4395 int depth,
4396 expr_ty elt, expr_ty val, int type)
4397 {
4398 /* generate code for the iterator, then each of the ifs,
4399 and then write to the element */
4400
4401 comprehension_ty gen;
4402 basicblock *start, *anchor, *skip, *if_cleanup;
4403 Py_ssize_t i, n;
4404
4405 start = compiler_new_block(c);
4406 skip = compiler_new_block(c);
4407 if_cleanup = compiler_new_block(c);
4408 anchor = compiler_new_block(c);
4409
4410 if (start == NULL || skip == NULL || if_cleanup == NULL ||
4411 anchor == NULL)
4412 return 0;
4413
4414 gen = (comprehension_ty)asdl_seq_GET(generators, gen_index);
4415
4416 if (gen_index == 0) {
4417 /* Receive outermost iter as an implicit argument */
4418 c->u->u_argcount = 1;
4419 ADDOP_I(c, LOAD_FAST, 0);
4420 }
4421 else {
4422 /* Sub-iter - calculate on the fly */
4423 /* Fast path for the temporary variable assignment idiom:
4424 for y in [f(x)]
4425 */
4426 asdl_seq *elts;
4427 switch (gen->iter->kind) {
4428 case List_kind:
4429 elts = gen->iter->v.List.elts;
4430 break;
4431 case Tuple_kind:
4432 elts = gen->iter->v.Tuple.elts;
4433 break;
4434 default:
4435 elts = NULL;
4436 }
4437 if (asdl_seq_LEN(elts) == 1) {
4438 expr_ty elt = asdl_seq_GET(elts, 0);
4439 if (elt->kind != Starred_kind) {
4440 VISIT(c, expr, elt);
4441 start = NULL;
4442 }
4443 }
4444 if (start) {
4445 VISIT(c, expr, gen->iter);
4446 ADDOP(c, GET_ITER);
4447 }
4448 }
4449 if (start) {
4450 depth++;
4451 compiler_use_next_block(c, start);
4452 ADDOP_JREL(c, FOR_ITER, anchor);
4453 NEXT_BLOCK(c);
4454 }
4455 VISIT(c, expr, gen->target);
4456
4457 /* XXX this needs to be cleaned up...a lot! */
4458 n = asdl_seq_LEN(gen->ifs);
4459 for (i = 0; i < n; i++) {
4460 expr_ty e = (expr_ty)asdl_seq_GET(gen->ifs, i);
4461 if (!compiler_jump_if(c, e, if_cleanup, 0))
4462 return 0;
4463 NEXT_BLOCK(c);
4464 }
4465
4466 if (++gen_index < asdl_seq_LEN(generators))
4467 if (!compiler_comprehension_generator(c,
4468 generators, gen_index, depth,
4469 elt, val, type))
4470 return 0;
4471
4472 /* only append after the last for generator */
4473 if (gen_index >= asdl_seq_LEN(generators)) {
4474 /* comprehension specific code */
4475 switch (type) {
4476 case COMP_GENEXP:
4477 VISIT(c, expr, elt);
4478 ADDOP(c, YIELD_VALUE);
4479 ADDOP(c, POP_TOP);
4480 break;
4481 case COMP_LISTCOMP:
4482 VISIT(c, expr, elt);
4483 ADDOP_I(c, LIST_APPEND, depth + 1);
4484 break;
4485 case COMP_SETCOMP:
4486 VISIT(c, expr, elt);
4487 ADDOP_I(c, SET_ADD, depth + 1);
4488 break;
4489 case COMP_DICTCOMP:
4490 /* With '{k: v}', k is evaluated before v, so we do
4491 the same. */
4492 VISIT(c, expr, elt);
4493 VISIT(c, expr, val);
4494 ADDOP_I(c, MAP_ADD, depth + 1);
4495 break;
4496 default:
4497 return 0;
4498 }
4499
4500 compiler_use_next_block(c, skip);
4501 }
4502 compiler_use_next_block(c, if_cleanup);
4503 if (start) {
4504 ADDOP_JABS(c, JUMP_ABSOLUTE, start);
4505 compiler_use_next_block(c, anchor);
4506 }
4507
4508 return 1;
4509 }
4510
4511 static int
compiler_async_comprehension_generator(struct compiler * c,asdl_seq * generators,int gen_index,int depth,expr_ty elt,expr_ty val,int type)4512 compiler_async_comprehension_generator(struct compiler *c,
4513 asdl_seq *generators, int gen_index,
4514 int depth,
4515 expr_ty elt, expr_ty val, int type)
4516 {
4517 comprehension_ty gen;
4518 basicblock *start, *if_cleanup, *except;
4519 Py_ssize_t i, n;
4520 start = compiler_new_block(c);
4521 except = compiler_new_block(c);
4522 if_cleanup = compiler_new_block(c);
4523
4524 if (start == NULL || if_cleanup == NULL || except == NULL) {
4525 return 0;
4526 }
4527
4528 gen = (comprehension_ty)asdl_seq_GET(generators, gen_index);
4529
4530 if (gen_index == 0) {
4531 /* Receive outermost iter as an implicit argument */
4532 c->u->u_argcount = 1;
4533 ADDOP_I(c, LOAD_FAST, 0);
4534 }
4535 else {
4536 /* Sub-iter - calculate on the fly */
4537 VISIT(c, expr, gen->iter);
4538 ADDOP(c, GET_AITER);
4539 }
4540
4541 compiler_use_next_block(c, start);
4542
4543 ADDOP_JREL(c, SETUP_FINALLY, except);
4544 ADDOP(c, GET_ANEXT);
4545 ADDOP_LOAD_CONST(c, Py_None);
4546 ADDOP(c, YIELD_FROM);
4547 ADDOP(c, POP_BLOCK);
4548 VISIT(c, expr, gen->target);
4549
4550 n = asdl_seq_LEN(gen->ifs);
4551 for (i = 0; i < n; i++) {
4552 expr_ty e = (expr_ty)asdl_seq_GET(gen->ifs, i);
4553 if (!compiler_jump_if(c, e, if_cleanup, 0))
4554 return 0;
4555 NEXT_BLOCK(c);
4556 }
4557
4558 depth++;
4559 if (++gen_index < asdl_seq_LEN(generators))
4560 if (!compiler_comprehension_generator(c,
4561 generators, gen_index, depth,
4562 elt, val, type))
4563 return 0;
4564
4565 /* only append after the last for generator */
4566 if (gen_index >= asdl_seq_LEN(generators)) {
4567 /* comprehension specific code */
4568 switch (type) {
4569 case COMP_GENEXP:
4570 VISIT(c, expr, elt);
4571 ADDOP(c, YIELD_VALUE);
4572 ADDOP(c, POP_TOP);
4573 break;
4574 case COMP_LISTCOMP:
4575 VISIT(c, expr, elt);
4576 ADDOP_I(c, LIST_APPEND, depth + 1);
4577 break;
4578 case COMP_SETCOMP:
4579 VISIT(c, expr, elt);
4580 ADDOP_I(c, SET_ADD, depth + 1);
4581 break;
4582 case COMP_DICTCOMP:
4583 /* With '{k: v}', k is evaluated before v, so we do
4584 the same. */
4585 VISIT(c, expr, elt);
4586 VISIT(c, expr, val);
4587 ADDOP_I(c, MAP_ADD, depth + 1);
4588 break;
4589 default:
4590 return 0;
4591 }
4592 }
4593 compiler_use_next_block(c, if_cleanup);
4594 ADDOP_JABS(c, JUMP_ABSOLUTE, start);
4595
4596 compiler_use_next_block(c, except);
4597 ADDOP(c, END_ASYNC_FOR);
4598
4599 return 1;
4600 }
4601
4602 static int
compiler_comprehension(struct compiler * c,expr_ty e,int type,identifier name,asdl_seq * generators,expr_ty elt,expr_ty val)4603 compiler_comprehension(struct compiler *c, expr_ty e, int type,
4604 identifier name, asdl_seq *generators, expr_ty elt,
4605 expr_ty val)
4606 {
4607 PyCodeObject *co = NULL;
4608 comprehension_ty outermost;
4609 PyObject *qualname = NULL;
4610 int is_async_generator = 0;
4611 int top_level_await = IS_TOP_LEVEL_AWAIT(c);
4612
4613
4614 int is_async_function = c->u->u_ste->ste_coroutine;
4615
4616 outermost = (comprehension_ty) asdl_seq_GET(generators, 0);
4617 if (!compiler_enter_scope(c, name, COMPILER_SCOPE_COMPREHENSION,
4618 (void *)e, e->lineno))
4619 {
4620 goto error;
4621 }
4622
4623 is_async_generator = c->u->u_ste->ste_coroutine;
4624
4625 if (is_async_generator && !is_async_function && type != COMP_GENEXP && !top_level_await) {
4626 compiler_error(c, "asynchronous comprehension outside of "
4627 "an asynchronous function");
4628 goto error_in_scope;
4629 }
4630
4631 if (type != COMP_GENEXP) {
4632 int op;
4633 switch (type) {
4634 case COMP_LISTCOMP:
4635 op = BUILD_LIST;
4636 break;
4637 case COMP_SETCOMP:
4638 op = BUILD_SET;
4639 break;
4640 case COMP_DICTCOMP:
4641 op = BUILD_MAP;
4642 break;
4643 default:
4644 PyErr_Format(PyExc_SystemError,
4645 "unknown comprehension type %d", type);
4646 goto error_in_scope;
4647 }
4648
4649 ADDOP_I(c, op, 0);
4650 }
4651
4652 if (!compiler_comprehension_generator(c, generators, 0, 0, elt,
4653 val, type))
4654 goto error_in_scope;
4655
4656 if (type != COMP_GENEXP) {
4657 ADDOP(c, RETURN_VALUE);
4658 }
4659
4660 co = assemble(c, 1);
4661 qualname = c->u->u_qualname;
4662 Py_INCREF(qualname);
4663 compiler_exit_scope(c);
4664 if (top_level_await && is_async_generator){
4665 c->u->u_ste->ste_coroutine = 1;
4666 }
4667 if (co == NULL)
4668 goto error;
4669
4670 if (!compiler_make_closure(c, co, 0, qualname))
4671 goto error;
4672 Py_DECREF(qualname);
4673 Py_DECREF(co);
4674
4675 VISIT(c, expr, outermost->iter);
4676
4677 if (outermost->is_async) {
4678 ADDOP(c, GET_AITER);
4679 } else {
4680 ADDOP(c, GET_ITER);
4681 }
4682
4683 ADDOP_I(c, CALL_FUNCTION, 1);
4684
4685 if (is_async_generator && type != COMP_GENEXP) {
4686 ADDOP(c, GET_AWAITABLE);
4687 ADDOP_LOAD_CONST(c, Py_None);
4688 ADDOP(c, YIELD_FROM);
4689 }
4690
4691 return 1;
4692 error_in_scope:
4693 compiler_exit_scope(c);
4694 error:
4695 Py_XDECREF(qualname);
4696 Py_XDECREF(co);
4697 return 0;
4698 }
4699
4700 static int
compiler_genexp(struct compiler * c,expr_ty e)4701 compiler_genexp(struct compiler *c, expr_ty e)
4702 {
4703 static identifier name;
4704 if (!name) {
4705 name = PyUnicode_InternFromString("<genexpr>");
4706 if (!name)
4707 return 0;
4708 }
4709 assert(e->kind == GeneratorExp_kind);
4710 return compiler_comprehension(c, e, COMP_GENEXP, name,
4711 e->v.GeneratorExp.generators,
4712 e->v.GeneratorExp.elt, NULL);
4713 }
4714
4715 static int
compiler_listcomp(struct compiler * c,expr_ty e)4716 compiler_listcomp(struct compiler *c, expr_ty e)
4717 {
4718 static identifier name;
4719 if (!name) {
4720 name = PyUnicode_InternFromString("<listcomp>");
4721 if (!name)
4722 return 0;
4723 }
4724 assert(e->kind == ListComp_kind);
4725 return compiler_comprehension(c, e, COMP_LISTCOMP, name,
4726 e->v.ListComp.generators,
4727 e->v.ListComp.elt, NULL);
4728 }
4729
4730 static int
compiler_setcomp(struct compiler * c,expr_ty e)4731 compiler_setcomp(struct compiler *c, expr_ty e)
4732 {
4733 static identifier name;
4734 if (!name) {
4735 name = PyUnicode_InternFromString("<setcomp>");
4736 if (!name)
4737 return 0;
4738 }
4739 assert(e->kind == SetComp_kind);
4740 return compiler_comprehension(c, e, COMP_SETCOMP, name,
4741 e->v.SetComp.generators,
4742 e->v.SetComp.elt, NULL);
4743 }
4744
4745
4746 static int
compiler_dictcomp(struct compiler * c,expr_ty e)4747 compiler_dictcomp(struct compiler *c, expr_ty e)
4748 {
4749 static identifier name;
4750 if (!name) {
4751 name = PyUnicode_InternFromString("<dictcomp>");
4752 if (!name)
4753 return 0;
4754 }
4755 assert(e->kind == DictComp_kind);
4756 return compiler_comprehension(c, e, COMP_DICTCOMP, name,
4757 e->v.DictComp.generators,
4758 e->v.DictComp.key, e->v.DictComp.value);
4759 }
4760
4761
4762 static int
compiler_visit_keyword(struct compiler * c,keyword_ty k)4763 compiler_visit_keyword(struct compiler *c, keyword_ty k)
4764 {
4765 VISIT(c, expr, k->value);
4766 return 1;
4767 }
4768
4769 /* Test whether expression is constant. For constants, report
4770 whether they are true or false.
4771
4772 Return values: 1 for true, 0 for false, -1 for non-constant.
4773 */
4774
4775 static int
expr_constant(expr_ty e)4776 expr_constant(expr_ty e)
4777 {
4778 if (e->kind == Constant_kind) {
4779 return PyObject_IsTrue(e->v.Constant.value);
4780 }
4781 return -1;
4782 }
4783
4784 static int
compiler_with_except_finish(struct compiler * c)4785 compiler_with_except_finish(struct compiler *c) {
4786 basicblock *exit;
4787 exit = compiler_new_block(c);
4788 if (exit == NULL)
4789 return 0;
4790 ADDOP_JABS(c, POP_JUMP_IF_TRUE, exit);
4791 ADDOP(c, RERAISE);
4792 compiler_use_next_block(c, exit);
4793 ADDOP(c, POP_TOP);
4794 ADDOP(c, POP_TOP);
4795 ADDOP(c, POP_TOP);
4796 ADDOP(c, POP_EXCEPT);
4797 ADDOP(c, POP_TOP);
4798 return 1;
4799 }
4800
4801 /*
4802 Implements the async with statement.
4803
4804 The semantics outlined in that PEP are as follows:
4805
4806 async with EXPR as VAR:
4807 BLOCK
4808
4809 It is implemented roughly as:
4810
4811 context = EXPR
4812 exit = context.__aexit__ # not calling it
4813 value = await context.__aenter__()
4814 try:
4815 VAR = value # if VAR present in the syntax
4816 BLOCK
4817 finally:
4818 if an exception was raised:
4819 exc = copy of (exception, instance, traceback)
4820 else:
4821 exc = (None, None, None)
4822 if not (await exit(*exc)):
4823 raise
4824 */
4825 static int
compiler_async_with(struct compiler * c,stmt_ty s,int pos)4826 compiler_async_with(struct compiler *c, stmt_ty s, int pos)
4827 {
4828 basicblock *block, *final, *exit;
4829 withitem_ty item = asdl_seq_GET(s->v.AsyncWith.items, pos);
4830
4831 assert(s->kind == AsyncWith_kind);
4832 if (IS_TOP_LEVEL_AWAIT(c)){
4833 c->u->u_ste->ste_coroutine = 1;
4834 } else if (c->u->u_scope_type != COMPILER_SCOPE_ASYNC_FUNCTION){
4835 return compiler_error(c, "'async with' outside async function");
4836 }
4837
4838 block = compiler_new_block(c);
4839 final = compiler_new_block(c);
4840 exit = compiler_new_block(c);
4841 if (!block || !final || !exit)
4842 return 0;
4843
4844 /* Evaluate EXPR */
4845 VISIT(c, expr, item->context_expr);
4846
4847 ADDOP(c, BEFORE_ASYNC_WITH);
4848 ADDOP(c, GET_AWAITABLE);
4849 ADDOP_LOAD_CONST(c, Py_None);
4850 ADDOP(c, YIELD_FROM);
4851
4852 ADDOP_JREL(c, SETUP_ASYNC_WITH, final);
4853
4854 /* SETUP_ASYNC_WITH pushes a finally block. */
4855 compiler_use_next_block(c, block);
4856 if (!compiler_push_fblock(c, ASYNC_WITH, block, final, NULL)) {
4857 return 0;
4858 }
4859
4860 if (item->optional_vars) {
4861 VISIT(c, expr, item->optional_vars);
4862 }
4863 else {
4864 /* Discard result from context.__aenter__() */
4865 ADDOP(c, POP_TOP);
4866 }
4867
4868 pos++;
4869 if (pos == asdl_seq_LEN(s->v.AsyncWith.items))
4870 /* BLOCK code */
4871 VISIT_SEQ(c, stmt, s->v.AsyncWith.body)
4872 else if (!compiler_async_with(c, s, pos))
4873 return 0;
4874
4875 compiler_pop_fblock(c, ASYNC_WITH, block);
4876 ADDOP(c, POP_BLOCK);
4877 /* End of body; start the cleanup */
4878
4879 /* For successful outcome:
4880 * call __exit__(None, None, None)
4881 */
4882 if(!compiler_call_exit_with_nones(c))
4883 return 0;
4884 ADDOP(c, GET_AWAITABLE);
4885 ADDOP_O(c, LOAD_CONST, Py_None, consts);
4886 ADDOP(c, YIELD_FROM);
4887
4888 ADDOP(c, POP_TOP);
4889
4890 ADDOP_JABS(c, JUMP_ABSOLUTE, exit);
4891
4892 /* For exceptional outcome: */
4893 compiler_use_next_block(c, final);
4894
4895 ADDOP(c, WITH_EXCEPT_START);
4896 ADDOP(c, GET_AWAITABLE);
4897 ADDOP_LOAD_CONST(c, Py_None);
4898 ADDOP(c, YIELD_FROM);
4899 compiler_with_except_finish(c);
4900
4901 compiler_use_next_block(c, exit);
4902 return 1;
4903 }
4904
4905
4906 /*
4907 Implements the with statement from PEP 343.
4908 with EXPR as VAR:
4909 BLOCK
4910 is implemented as:
4911 <code for EXPR>
4912 SETUP_WITH E
4913 <code to store to VAR> or POP_TOP
4914 <code for BLOCK>
4915 LOAD_CONST (None, None, None)
4916 CALL_FUNCTION_EX 0
4917 JUMP_FORWARD EXIT
4918 E: WITH_EXCEPT_START (calls EXPR.__exit__)
4919 POP_JUMP_IF_TRUE T:
4920 RERAISE
4921 T: POP_TOP * 3 (remove exception from stack)
4922 POP_EXCEPT
4923 POP_TOP
4924 EXIT:
4925 */
4926
4927 static int
compiler_with(struct compiler * c,stmt_ty s,int pos)4928 compiler_with(struct compiler *c, stmt_ty s, int pos)
4929 {
4930 basicblock *block, *final, *exit;
4931 withitem_ty item = asdl_seq_GET(s->v.With.items, pos);
4932
4933 assert(s->kind == With_kind);
4934
4935 block = compiler_new_block(c);
4936 final = compiler_new_block(c);
4937 exit = compiler_new_block(c);
4938 if (!block || !final || !exit)
4939 return 0;
4940
4941 /* Evaluate EXPR */
4942 VISIT(c, expr, item->context_expr);
4943 /* Will push bound __exit__ */
4944 ADDOP_JREL(c, SETUP_WITH, final);
4945
4946 /* SETUP_WITH pushes a finally block. */
4947 compiler_use_next_block(c, block);
4948 if (!compiler_push_fblock(c, WITH, block, final, NULL)) {
4949 return 0;
4950 }
4951
4952 if (item->optional_vars) {
4953 VISIT(c, expr, item->optional_vars);
4954 }
4955 else {
4956 /* Discard result from context.__enter__() */
4957 ADDOP(c, POP_TOP);
4958 }
4959
4960 pos++;
4961 if (pos == asdl_seq_LEN(s->v.With.items))
4962 /* BLOCK code */
4963 VISIT_SEQ(c, stmt, s->v.With.body)
4964 else if (!compiler_with(c, s, pos))
4965 return 0;
4966
4967 ADDOP(c, POP_BLOCK);
4968 compiler_pop_fblock(c, WITH, block);
4969
4970 /* End of body; start the cleanup. */
4971
4972 /* For successful outcome:
4973 * call __exit__(None, None, None)
4974 */
4975 if (!compiler_call_exit_with_nones(c))
4976 return 0;
4977 ADDOP(c, POP_TOP);
4978 ADDOP_JREL(c, JUMP_FORWARD, exit);
4979
4980 /* For exceptional outcome: */
4981 compiler_use_next_block(c, final);
4982
4983 ADDOP(c, WITH_EXCEPT_START);
4984 compiler_with_except_finish(c);
4985
4986 compiler_use_next_block(c, exit);
4987 return 1;
4988 }
4989
4990 static int
compiler_visit_expr1(struct compiler * c,expr_ty e)4991 compiler_visit_expr1(struct compiler *c, expr_ty e)
4992 {
4993 switch (e->kind) {
4994 case NamedExpr_kind:
4995 VISIT(c, expr, e->v.NamedExpr.value);
4996 ADDOP(c, DUP_TOP);
4997 VISIT(c, expr, e->v.NamedExpr.target);
4998 break;
4999 case BoolOp_kind:
5000 return compiler_boolop(c, e);
5001 case BinOp_kind:
5002 VISIT(c, expr, e->v.BinOp.left);
5003 VISIT(c, expr, e->v.BinOp.right);
5004 ADDOP(c, binop(e->v.BinOp.op));
5005 break;
5006 case UnaryOp_kind:
5007 VISIT(c, expr, e->v.UnaryOp.operand);
5008 ADDOP(c, unaryop(e->v.UnaryOp.op));
5009 break;
5010 case Lambda_kind:
5011 return compiler_lambda(c, e);
5012 case IfExp_kind:
5013 return compiler_ifexp(c, e);
5014 case Dict_kind:
5015 return compiler_dict(c, e);
5016 case Set_kind:
5017 return compiler_set(c, e);
5018 case GeneratorExp_kind:
5019 return compiler_genexp(c, e);
5020 case ListComp_kind:
5021 return compiler_listcomp(c, e);
5022 case SetComp_kind:
5023 return compiler_setcomp(c, e);
5024 case DictComp_kind:
5025 return compiler_dictcomp(c, e);
5026 case Yield_kind:
5027 if (c->u->u_ste->ste_type != FunctionBlock)
5028 return compiler_error(c, "'yield' outside function");
5029 if (e->v.Yield.value) {
5030 VISIT(c, expr, e->v.Yield.value);
5031 }
5032 else {
5033 ADDOP_LOAD_CONST(c, Py_None);
5034 }
5035 ADDOP(c, YIELD_VALUE);
5036 break;
5037 case YieldFrom_kind:
5038 if (c->u->u_ste->ste_type != FunctionBlock)
5039 return compiler_error(c, "'yield' outside function");
5040
5041 if (c->u->u_scope_type == COMPILER_SCOPE_ASYNC_FUNCTION)
5042 return compiler_error(c, "'yield from' inside async function");
5043
5044 VISIT(c, expr, e->v.YieldFrom.value);
5045 ADDOP(c, GET_YIELD_FROM_ITER);
5046 ADDOP_LOAD_CONST(c, Py_None);
5047 ADDOP(c, YIELD_FROM);
5048 break;
5049 case Await_kind:
5050 if (!IS_TOP_LEVEL_AWAIT(c)){
5051 if (c->u->u_ste->ste_type != FunctionBlock){
5052 return compiler_error(c, "'await' outside function");
5053 }
5054
5055 if (c->u->u_scope_type != COMPILER_SCOPE_ASYNC_FUNCTION &&
5056 c->u->u_scope_type != COMPILER_SCOPE_COMPREHENSION){
5057 return compiler_error(c, "'await' outside async function");
5058 }
5059 }
5060
5061 VISIT(c, expr, e->v.Await.value);
5062 ADDOP(c, GET_AWAITABLE);
5063 ADDOP_LOAD_CONST(c, Py_None);
5064 ADDOP(c, YIELD_FROM);
5065 break;
5066 case Compare_kind:
5067 return compiler_compare(c, e);
5068 case Call_kind:
5069 return compiler_call(c, e);
5070 case Constant_kind:
5071 ADDOP_LOAD_CONST(c, e->v.Constant.value);
5072 break;
5073 case JoinedStr_kind:
5074 return compiler_joined_str(c, e);
5075 case FormattedValue_kind:
5076 return compiler_formatted_value(c, e);
5077 /* The following exprs can be assignment targets. */
5078 case Attribute_kind:
5079 VISIT(c, expr, e->v.Attribute.value);
5080 switch (e->v.Attribute.ctx) {
5081 case Load:
5082 ADDOP_NAME(c, LOAD_ATTR, e->v.Attribute.attr, names);
5083 break;
5084 case Store:
5085 if (forbidden_name(c, e->v.Attribute.attr, e->v.Attribute.ctx))
5086 return 0;
5087 ADDOP_NAME(c, STORE_ATTR, e->v.Attribute.attr, names);
5088 break;
5089 case Del:
5090 ADDOP_NAME(c, DELETE_ATTR, e->v.Attribute.attr, names);
5091 break;
5092 }
5093 break;
5094 case Subscript_kind:
5095 return compiler_subscript(c, e);
5096 case Starred_kind:
5097 switch (e->v.Starred.ctx) {
5098 case Store:
5099 /* In all legitimate cases, the Starred node was already replaced
5100 * by compiler_list/compiler_tuple. XXX: is that okay? */
5101 return compiler_error(c,
5102 "starred assignment target must be in a list or tuple");
5103 default:
5104 return compiler_error(c,
5105 "can't use starred expression here");
5106 }
5107 break;
5108 case Slice_kind:
5109 return compiler_slice(c, e);
5110 case Name_kind:
5111 return compiler_nameop(c, e->v.Name.id, e->v.Name.ctx);
5112 /* child nodes of List and Tuple will have expr_context set */
5113 case List_kind:
5114 return compiler_list(c, e);
5115 case Tuple_kind:
5116 return compiler_tuple(c, e);
5117 }
5118 return 1;
5119 }
5120
5121 static int
compiler_visit_expr(struct compiler * c,expr_ty e)5122 compiler_visit_expr(struct compiler *c, expr_ty e)
5123 {
5124 int old_lineno = c->u->u_lineno;
5125 int old_col_offset = c->u->u_col_offset;
5126 SET_LOC(c, e);
5127 int res = compiler_visit_expr1(c, e);
5128 c->u->u_lineno = old_lineno;
5129 c->u->u_col_offset = old_col_offset;
5130 return res;
5131 }
5132
5133 static int
compiler_augassign(struct compiler * c,stmt_ty s)5134 compiler_augassign(struct compiler *c, stmt_ty s)
5135 {
5136 assert(s->kind == AugAssign_kind);
5137 expr_ty e = s->v.AugAssign.target;
5138
5139 int old_lineno = c->u->u_lineno;
5140 int old_col_offset = c->u->u_col_offset;
5141 SET_LOC(c, e);
5142
5143 switch (e->kind) {
5144 case Attribute_kind:
5145 VISIT(c, expr, e->v.Attribute.value);
5146 ADDOP(c, DUP_TOP);
5147 ADDOP_NAME(c, LOAD_ATTR, e->v.Attribute.attr, names);
5148 break;
5149 case Subscript_kind:
5150 VISIT(c, expr, e->v.Subscript.value);
5151 VISIT(c, expr, e->v.Subscript.slice);
5152 ADDOP(c, DUP_TOP_TWO);
5153 ADDOP(c, BINARY_SUBSCR);
5154 break;
5155 case Name_kind:
5156 if (!compiler_nameop(c, e->v.Name.id, Load))
5157 return 0;
5158 break;
5159 default:
5160 PyErr_Format(PyExc_SystemError,
5161 "invalid node type (%d) for augmented assignment",
5162 e->kind);
5163 return 0;
5164 }
5165
5166 c->u->u_lineno = old_lineno;
5167 c->u->u_col_offset = old_col_offset;
5168
5169 VISIT(c, expr, s->v.AugAssign.value);
5170 ADDOP(c, inplace_binop(s->v.AugAssign.op));
5171
5172 SET_LOC(c, e);
5173
5174 switch (e->kind) {
5175 case Attribute_kind:
5176 ADDOP(c, ROT_TWO);
5177 ADDOP_NAME(c, STORE_ATTR, e->v.Attribute.attr, names);
5178 break;
5179 case Subscript_kind:
5180 ADDOP(c, ROT_THREE);
5181 ADDOP(c, STORE_SUBSCR);
5182 break;
5183 case Name_kind:
5184 return compiler_nameop(c, e->v.Name.id, Store);
5185 default:
5186 Py_UNREACHABLE();
5187 }
5188 return 1;
5189 }
5190
5191 static int
check_ann_expr(struct compiler * c,expr_ty e)5192 check_ann_expr(struct compiler *c, expr_ty e)
5193 {
5194 VISIT(c, expr, e);
5195 ADDOP(c, POP_TOP);
5196 return 1;
5197 }
5198
5199 static int
check_annotation(struct compiler * c,stmt_ty s)5200 check_annotation(struct compiler *c, stmt_ty s)
5201 {
5202 /* Annotations are only evaluated in a module or class. */
5203 if (c->u->u_scope_type == COMPILER_SCOPE_MODULE ||
5204 c->u->u_scope_type == COMPILER_SCOPE_CLASS) {
5205 return check_ann_expr(c, s->v.AnnAssign.annotation);
5206 }
5207 return 1;
5208 }
5209
5210 static int
check_ann_subscr(struct compiler * c,expr_ty e)5211 check_ann_subscr(struct compiler *c, expr_ty e)
5212 {
5213 /* We check that everything in a subscript is defined at runtime. */
5214 switch (e->kind) {
5215 case Slice_kind:
5216 if (e->v.Slice.lower && !check_ann_expr(c, e->v.Slice.lower)) {
5217 return 0;
5218 }
5219 if (e->v.Slice.upper && !check_ann_expr(c, e->v.Slice.upper)) {
5220 return 0;
5221 }
5222 if (e->v.Slice.step && !check_ann_expr(c, e->v.Slice.step)) {
5223 return 0;
5224 }
5225 return 1;
5226 case Tuple_kind: {
5227 /* extended slice */
5228 asdl_seq *elts = e->v.Tuple.elts;
5229 Py_ssize_t i, n = asdl_seq_LEN(elts);
5230 for (i = 0; i < n; i++) {
5231 if (!check_ann_subscr(c, asdl_seq_GET(elts, i))) {
5232 return 0;
5233 }
5234 }
5235 return 1;
5236 }
5237 default:
5238 return check_ann_expr(c, e);
5239 }
5240 }
5241
5242 static int
compiler_annassign(struct compiler * c,stmt_ty s)5243 compiler_annassign(struct compiler *c, stmt_ty s)
5244 {
5245 expr_ty targ = s->v.AnnAssign.target;
5246 PyObject* mangled;
5247
5248 assert(s->kind == AnnAssign_kind);
5249
5250 /* We perform the actual assignment first. */
5251 if (s->v.AnnAssign.value) {
5252 VISIT(c, expr, s->v.AnnAssign.value);
5253 VISIT(c, expr, targ);
5254 }
5255 switch (targ->kind) {
5256 case Name_kind:
5257 if (forbidden_name(c, targ->v.Name.id, Store))
5258 return 0;
5259 /* If we have a simple name in a module or class, store annotation. */
5260 if (s->v.AnnAssign.simple &&
5261 (c->u->u_scope_type == COMPILER_SCOPE_MODULE ||
5262 c->u->u_scope_type == COMPILER_SCOPE_CLASS)) {
5263 if (c->c_future->ff_features & CO_FUTURE_ANNOTATIONS) {
5264 VISIT(c, annexpr, s->v.AnnAssign.annotation)
5265 }
5266 else {
5267 VISIT(c, expr, s->v.AnnAssign.annotation);
5268 }
5269 ADDOP_NAME(c, LOAD_NAME, __annotations__, names);
5270 mangled = _Py_Mangle(c->u->u_private, targ->v.Name.id);
5271 ADDOP_LOAD_CONST_NEW(c, mangled);
5272 ADDOP(c, STORE_SUBSCR);
5273 }
5274 break;
5275 case Attribute_kind:
5276 if (forbidden_name(c, targ->v.Attribute.attr, Store))
5277 return 0;
5278 if (!s->v.AnnAssign.value &&
5279 !check_ann_expr(c, targ->v.Attribute.value)) {
5280 return 0;
5281 }
5282 break;
5283 case Subscript_kind:
5284 if (!s->v.AnnAssign.value &&
5285 (!check_ann_expr(c, targ->v.Subscript.value) ||
5286 !check_ann_subscr(c, targ->v.Subscript.slice))) {
5287 return 0;
5288 }
5289 break;
5290 default:
5291 PyErr_Format(PyExc_SystemError,
5292 "invalid node type (%d) for annotated assignment",
5293 targ->kind);
5294 return 0;
5295 }
5296 /* Annotation is evaluated last. */
5297 if (!s->v.AnnAssign.simple && !check_annotation(c, s)) {
5298 return 0;
5299 }
5300 return 1;
5301 }
5302
5303 /* Raises a SyntaxError and returns 0.
5304 If something goes wrong, a different exception may be raised.
5305 */
5306
5307 static int
compiler_error(struct compiler * c,const char * errstr)5308 compiler_error(struct compiler *c, const char *errstr)
5309 {
5310 PyObject *loc;
5311 PyObject *u = NULL, *v = NULL;
5312
5313 loc = PyErr_ProgramTextObject(c->c_filename, c->u->u_lineno);
5314 if (!loc) {
5315 Py_INCREF(Py_None);
5316 loc = Py_None;
5317 }
5318 u = Py_BuildValue("(OiiO)", c->c_filename, c->u->u_lineno,
5319 c->u->u_col_offset + 1, loc);
5320 if (!u)
5321 goto exit;
5322 v = Py_BuildValue("(zO)", errstr, u);
5323 if (!v)
5324 goto exit;
5325 PyErr_SetObject(PyExc_SyntaxError, v);
5326 exit:
5327 Py_DECREF(loc);
5328 Py_XDECREF(u);
5329 Py_XDECREF(v);
5330 return 0;
5331 }
5332
5333 /* Emits a SyntaxWarning and returns 1 on success.
5334 If a SyntaxWarning raised as error, replaces it with a SyntaxError
5335 and returns 0.
5336 */
5337 static int
compiler_warn(struct compiler * c,const char * format,...)5338 compiler_warn(struct compiler *c, const char *format, ...)
5339 {
5340 va_list vargs;
5341 #ifdef HAVE_STDARG_PROTOTYPES
5342 va_start(vargs, format);
5343 #else
5344 va_start(vargs);
5345 #endif
5346 PyObject *msg = PyUnicode_FromFormatV(format, vargs);
5347 va_end(vargs);
5348 if (msg == NULL) {
5349 return 0;
5350 }
5351 if (PyErr_WarnExplicitObject(PyExc_SyntaxWarning, msg, c->c_filename,
5352 c->u->u_lineno, NULL, NULL) < 0)
5353 {
5354 if (PyErr_ExceptionMatches(PyExc_SyntaxWarning)) {
5355 /* Replace the SyntaxWarning exception with a SyntaxError
5356 to get a more accurate error report */
5357 PyErr_Clear();
5358 assert(PyUnicode_AsUTF8(msg) != NULL);
5359 compiler_error(c, PyUnicode_AsUTF8(msg));
5360 }
5361 Py_DECREF(msg);
5362 return 0;
5363 }
5364 Py_DECREF(msg);
5365 return 1;
5366 }
5367
5368 static int
compiler_subscript(struct compiler * c,expr_ty e)5369 compiler_subscript(struct compiler *c, expr_ty e)
5370 {
5371 expr_context_ty ctx = e->v.Subscript.ctx;
5372 int op = 0;
5373
5374 if (ctx == Load) {
5375 if (!check_subscripter(c, e->v.Subscript.value)) {
5376 return 0;
5377 }
5378 if (!check_index(c, e->v.Subscript.value, e->v.Subscript.slice)) {
5379 return 0;
5380 }
5381 }
5382
5383 switch (ctx) {
5384 case Load: op = BINARY_SUBSCR; break;
5385 case Store: op = STORE_SUBSCR; break;
5386 case Del: op = DELETE_SUBSCR; break;
5387 }
5388 assert(op);
5389 VISIT(c, expr, e->v.Subscript.value);
5390 VISIT(c, expr, e->v.Subscript.slice);
5391 ADDOP(c, op);
5392 return 1;
5393 }
5394
5395 static int
compiler_slice(struct compiler * c,expr_ty s)5396 compiler_slice(struct compiler *c, expr_ty s)
5397 {
5398 int n = 2;
5399 assert(s->kind == Slice_kind);
5400
5401 /* only handles the cases where BUILD_SLICE is emitted */
5402 if (s->v.Slice.lower) {
5403 VISIT(c, expr, s->v.Slice.lower);
5404 }
5405 else {
5406 ADDOP_LOAD_CONST(c, Py_None);
5407 }
5408
5409 if (s->v.Slice.upper) {
5410 VISIT(c, expr, s->v.Slice.upper);
5411 }
5412 else {
5413 ADDOP_LOAD_CONST(c, Py_None);
5414 }
5415
5416 if (s->v.Slice.step) {
5417 n++;
5418 VISIT(c, expr, s->v.Slice.step);
5419 }
5420 ADDOP_I(c, BUILD_SLICE, n);
5421 return 1;
5422 }
5423
5424 /* End of the compiler section, beginning of the assembler section */
5425
5426 /* do depth-first search of basic block graph, starting with block.
5427 post records the block indices in post-order.
5428
5429 XXX must handle implicit jumps from one block to next
5430 */
5431
5432 struct assembler {
5433 PyObject *a_bytecode; /* string containing bytecode */
5434 int a_offset; /* offset into bytecode */
5435 int a_nblocks; /* number of reachable blocks */
5436 basicblock **a_postorder; /* list of blocks in dfs postorder */
5437 PyObject *a_lnotab; /* string containing lnotab */
5438 int a_lnotab_off; /* offset into lnotab */
5439 int a_lineno; /* last lineno of emitted instruction */
5440 int a_lineno_off; /* bytecode offset of last lineno */
5441 };
5442
5443 static void
dfs(struct compiler * c,basicblock * b,struct assembler * a,int end)5444 dfs(struct compiler *c, basicblock *b, struct assembler *a, int end)
5445 {
5446 int i, j;
5447
5448 /* Get rid of recursion for normal control flow.
5449 Since the number of blocks is limited, unused space in a_postorder
5450 (from a_nblocks to end) can be used as a stack for still not ordered
5451 blocks. */
5452 for (j = end; b && !b->b_seen; b = b->b_next) {
5453 b->b_seen = 1;
5454 assert(a->a_nblocks < j);
5455 a->a_postorder[--j] = b;
5456 }
5457 while (j < end) {
5458 b = a->a_postorder[j++];
5459 for (i = 0; i < b->b_iused; i++) {
5460 struct instr *instr = &b->b_instr[i];
5461 if (instr->i_jrel || instr->i_jabs)
5462 dfs(c, instr->i_target, a, j);
5463 }
5464 assert(a->a_nblocks < j);
5465 a->a_postorder[a->a_nblocks++] = b;
5466 }
5467 }
5468
5469 Py_LOCAL_INLINE(void)
stackdepth_push(basicblock *** sp,basicblock * b,int depth)5470 stackdepth_push(basicblock ***sp, basicblock *b, int depth)
5471 {
5472 assert(b->b_startdepth < 0 || b->b_startdepth == depth);
5473 if (b->b_startdepth < depth && b->b_startdepth < 100) {
5474 assert(b->b_startdepth < 0);
5475 b->b_startdepth = depth;
5476 *(*sp)++ = b;
5477 }
5478 }
5479
5480 /* Find the flow path that needs the largest stack. We assume that
5481 * cycles in the flow graph have no net effect on the stack depth.
5482 */
5483 static int
stackdepth(struct compiler * c)5484 stackdepth(struct compiler *c)
5485 {
5486 basicblock *b, *entryblock = NULL;
5487 basicblock **stack, **sp;
5488 int nblocks = 0, maxdepth = 0;
5489 for (b = c->u->u_blocks; b != NULL; b = b->b_list) {
5490 b->b_startdepth = INT_MIN;
5491 entryblock = b;
5492 nblocks++;
5493 }
5494 if (!entryblock)
5495 return 0;
5496 stack = (basicblock **)PyObject_Malloc(sizeof(basicblock *) * nblocks);
5497 if (!stack) {
5498 PyErr_NoMemory();
5499 return -1;
5500 }
5501
5502 sp = stack;
5503 stackdepth_push(&sp, entryblock, 0);
5504 while (sp != stack) {
5505 b = *--sp;
5506 int depth = b->b_startdepth;
5507 assert(depth >= 0);
5508 basicblock *next = b->b_next;
5509 for (int i = 0; i < b->b_iused; i++) {
5510 struct instr *instr = &b->b_instr[i];
5511 int effect = stack_effect(instr->i_opcode, instr->i_oparg, 0);
5512 if (effect == PY_INVALID_STACK_EFFECT) {
5513 _Py_FatalErrorFormat(__func__,
5514 "opcode = %d", instr->i_opcode);
5515 }
5516 int new_depth = depth + effect;
5517 if (new_depth > maxdepth) {
5518 maxdepth = new_depth;
5519 }
5520 assert(depth >= 0); /* invalid code or bug in stackdepth() */
5521 if (instr->i_jrel || instr->i_jabs) {
5522 effect = stack_effect(instr->i_opcode, instr->i_oparg, 1);
5523 assert(effect != PY_INVALID_STACK_EFFECT);
5524 int target_depth = depth + effect;
5525 if (target_depth > maxdepth) {
5526 maxdepth = target_depth;
5527 }
5528 assert(target_depth >= 0); /* invalid code or bug in stackdepth() */
5529 stackdepth_push(&sp, instr->i_target, target_depth);
5530 }
5531 depth = new_depth;
5532 if (instr->i_opcode == JUMP_ABSOLUTE ||
5533 instr->i_opcode == JUMP_FORWARD ||
5534 instr->i_opcode == RETURN_VALUE ||
5535 instr->i_opcode == RAISE_VARARGS ||
5536 instr->i_opcode == RERAISE)
5537 {
5538 /* remaining code is dead */
5539 next = NULL;
5540 break;
5541 }
5542 }
5543 if (next != NULL) {
5544 stackdepth_push(&sp, next, depth);
5545 }
5546 }
5547 PyObject_Free(stack);
5548 return maxdepth;
5549 }
5550
5551 static int
assemble_init(struct assembler * a,int nblocks,int firstlineno)5552 assemble_init(struct assembler *a, int nblocks, int firstlineno)
5553 {
5554 memset(a, 0, sizeof(struct assembler));
5555 a->a_lineno = firstlineno;
5556 a->a_bytecode = PyBytes_FromStringAndSize(NULL, DEFAULT_CODE_SIZE);
5557 if (!a->a_bytecode)
5558 return 0;
5559 a->a_lnotab = PyBytes_FromStringAndSize(NULL, DEFAULT_LNOTAB_SIZE);
5560 if (!a->a_lnotab)
5561 return 0;
5562 if ((size_t)nblocks > SIZE_MAX / sizeof(basicblock *)) {
5563 PyErr_NoMemory();
5564 return 0;
5565 }
5566 a->a_postorder = (basicblock **)PyObject_Malloc(
5567 sizeof(basicblock *) * nblocks);
5568 if (!a->a_postorder) {
5569 PyErr_NoMemory();
5570 return 0;
5571 }
5572 return 1;
5573 }
5574
5575 static void
assemble_free(struct assembler * a)5576 assemble_free(struct assembler *a)
5577 {
5578 Py_XDECREF(a->a_bytecode);
5579 Py_XDECREF(a->a_lnotab);
5580 if (a->a_postorder)
5581 PyObject_Free(a->a_postorder);
5582 }
5583
5584 static int
blocksize(basicblock * b)5585 blocksize(basicblock *b)
5586 {
5587 int i;
5588 int size = 0;
5589
5590 for (i = 0; i < b->b_iused; i++)
5591 size += instrsize(b->b_instr[i].i_oparg);
5592 return size;
5593 }
5594
5595 /* Appends a pair to the end of the line number table, a_lnotab, representing
5596 the instruction's bytecode offset and line number. See
5597 Objects/lnotab_notes.txt for the description of the line number table. */
5598
5599 static int
assemble_lnotab(struct assembler * a,struct instr * i)5600 assemble_lnotab(struct assembler *a, struct instr *i)
5601 {
5602 int d_bytecode, d_lineno;
5603 Py_ssize_t len;
5604 unsigned char *lnotab;
5605
5606 d_lineno = i->i_lineno - a->a_lineno;
5607 if (d_lineno == 0) {
5608 return 1;
5609 }
5610
5611 d_bytecode = (a->a_offset - a->a_lineno_off) * sizeof(_Py_CODEUNIT);
5612 assert(d_bytecode >= 0);
5613
5614 if (d_bytecode > 255) {
5615 int j, nbytes, ncodes = d_bytecode / 255;
5616 nbytes = a->a_lnotab_off + 2 * ncodes;
5617 len = PyBytes_GET_SIZE(a->a_lnotab);
5618 if (nbytes >= len) {
5619 if ((len <= INT_MAX / 2) && (len * 2 < nbytes))
5620 len = nbytes;
5621 else if (len <= INT_MAX / 2)
5622 len *= 2;
5623 else {
5624 PyErr_NoMemory();
5625 return 0;
5626 }
5627 if (_PyBytes_Resize(&a->a_lnotab, len) < 0)
5628 return 0;
5629 }
5630 lnotab = (unsigned char *)
5631 PyBytes_AS_STRING(a->a_lnotab) + a->a_lnotab_off;
5632 for (j = 0; j < ncodes; j++) {
5633 *lnotab++ = 255;
5634 *lnotab++ = 0;
5635 }
5636 d_bytecode -= ncodes * 255;
5637 a->a_lnotab_off += ncodes * 2;
5638 }
5639 assert(0 <= d_bytecode && d_bytecode <= 255);
5640
5641 if (d_lineno < -128 || 127 < d_lineno) {
5642 int j, nbytes, ncodes, k;
5643 if (d_lineno < 0) {
5644 k = -128;
5645 /* use division on positive numbers */
5646 ncodes = (-d_lineno) / 128;
5647 }
5648 else {
5649 k = 127;
5650 ncodes = d_lineno / 127;
5651 }
5652 d_lineno -= ncodes * k;
5653 assert(ncodes >= 1);
5654 nbytes = a->a_lnotab_off + 2 * ncodes;
5655 len = PyBytes_GET_SIZE(a->a_lnotab);
5656 if (nbytes >= len) {
5657 if ((len <= INT_MAX / 2) && len * 2 < nbytes)
5658 len = nbytes;
5659 else if (len <= INT_MAX / 2)
5660 len *= 2;
5661 else {
5662 PyErr_NoMemory();
5663 return 0;
5664 }
5665 if (_PyBytes_Resize(&a->a_lnotab, len) < 0)
5666 return 0;
5667 }
5668 lnotab = (unsigned char *)
5669 PyBytes_AS_STRING(a->a_lnotab) + a->a_lnotab_off;
5670 *lnotab++ = d_bytecode;
5671 *lnotab++ = k;
5672 d_bytecode = 0;
5673 for (j = 1; j < ncodes; j++) {
5674 *lnotab++ = 0;
5675 *lnotab++ = k;
5676 }
5677 a->a_lnotab_off += ncodes * 2;
5678 }
5679 assert(-128 <= d_lineno && d_lineno <= 127);
5680
5681 len = PyBytes_GET_SIZE(a->a_lnotab);
5682 if (a->a_lnotab_off + 2 >= len) {
5683 if (_PyBytes_Resize(&a->a_lnotab, len * 2) < 0)
5684 return 0;
5685 }
5686 lnotab = (unsigned char *)
5687 PyBytes_AS_STRING(a->a_lnotab) + a->a_lnotab_off;
5688
5689 a->a_lnotab_off += 2;
5690 if (d_bytecode) {
5691 *lnotab++ = d_bytecode;
5692 *lnotab++ = d_lineno;
5693 }
5694 else { /* First line of a block; def stmt, etc. */
5695 *lnotab++ = 0;
5696 *lnotab++ = d_lineno;
5697 }
5698 a->a_lineno = i->i_lineno;
5699 a->a_lineno_off = a->a_offset;
5700 return 1;
5701 }
5702
5703 /* assemble_emit()
5704 Extend the bytecode with a new instruction.
5705 Update lnotab if necessary.
5706 */
5707
5708 static int
assemble_emit(struct assembler * a,struct instr * i)5709 assemble_emit(struct assembler *a, struct instr *i)
5710 {
5711 int size, arg = 0;
5712 Py_ssize_t len = PyBytes_GET_SIZE(a->a_bytecode);
5713 _Py_CODEUNIT *code;
5714
5715 arg = i->i_oparg;
5716 size = instrsize(arg);
5717 if (i->i_lineno && !assemble_lnotab(a, i))
5718 return 0;
5719 if (a->a_offset + size >= len / (int)sizeof(_Py_CODEUNIT)) {
5720 if (len > PY_SSIZE_T_MAX / 2)
5721 return 0;
5722 if (_PyBytes_Resize(&a->a_bytecode, len * 2) < 0)
5723 return 0;
5724 }
5725 code = (_Py_CODEUNIT *)PyBytes_AS_STRING(a->a_bytecode) + a->a_offset;
5726 a->a_offset += size;
5727 write_op_arg(code, i->i_opcode, arg, size);
5728 return 1;
5729 }
5730
5731 static void
assemble_jump_offsets(struct assembler * a,struct compiler * c)5732 assemble_jump_offsets(struct assembler *a, struct compiler *c)
5733 {
5734 basicblock *b;
5735 int bsize, totsize, extended_arg_recompile;
5736 int i;
5737
5738 /* Compute the size of each block and fixup jump args.
5739 Replace block pointer with position in bytecode. */
5740 do {
5741 totsize = 0;
5742 for (i = a->a_nblocks - 1; i >= 0; i--) {
5743 b = a->a_postorder[i];
5744 bsize = blocksize(b);
5745 b->b_offset = totsize;
5746 totsize += bsize;
5747 }
5748 extended_arg_recompile = 0;
5749 for (b = c->u->u_blocks; b != NULL; b = b->b_list) {
5750 bsize = b->b_offset;
5751 for (i = 0; i < b->b_iused; i++) {
5752 struct instr *instr = &b->b_instr[i];
5753 int isize = instrsize(instr->i_oparg);
5754 /* Relative jumps are computed relative to
5755 the instruction pointer after fetching
5756 the jump instruction.
5757 */
5758 bsize += isize;
5759 if (instr->i_jabs || instr->i_jrel) {
5760 instr->i_oparg = instr->i_target->b_offset;
5761 if (instr->i_jrel) {
5762 instr->i_oparg -= bsize;
5763 }
5764 instr->i_oparg *= sizeof(_Py_CODEUNIT);
5765 if (instrsize(instr->i_oparg) != isize) {
5766 extended_arg_recompile = 1;
5767 }
5768 }
5769 }
5770 }
5771
5772 /* XXX: This is an awful hack that could hurt performance, but
5773 on the bright side it should work until we come up
5774 with a better solution.
5775
5776 The issue is that in the first loop blocksize() is called
5777 which calls instrsize() which requires i_oparg be set
5778 appropriately. There is a bootstrap problem because
5779 i_oparg is calculated in the second loop above.
5780
5781 So we loop until we stop seeing new EXTENDED_ARGs.
5782 The only EXTENDED_ARGs that could be popping up are
5783 ones in jump instructions. So this should converge
5784 fairly quickly.
5785 */
5786 } while (extended_arg_recompile);
5787 }
5788
5789 static PyObject *
dict_keys_inorder(PyObject * dict,Py_ssize_t offset)5790 dict_keys_inorder(PyObject *dict, Py_ssize_t offset)
5791 {
5792 PyObject *tuple, *k, *v;
5793 Py_ssize_t i, pos = 0, size = PyDict_GET_SIZE(dict);
5794
5795 tuple = PyTuple_New(size);
5796 if (tuple == NULL)
5797 return NULL;
5798 while (PyDict_Next(dict, &pos, &k, &v)) {
5799 i = PyLong_AS_LONG(v);
5800 Py_INCREF(k);
5801 assert((i - offset) < size);
5802 assert((i - offset) >= 0);
5803 PyTuple_SET_ITEM(tuple, i - offset, k);
5804 }
5805 return tuple;
5806 }
5807
5808 static PyObject *
consts_dict_keys_inorder(PyObject * dict)5809 consts_dict_keys_inorder(PyObject *dict)
5810 {
5811 PyObject *consts, *k, *v;
5812 Py_ssize_t i, pos = 0, size = PyDict_GET_SIZE(dict);
5813
5814 consts = PyList_New(size); /* PyCode_Optimize() requires a list */
5815 if (consts == NULL)
5816 return NULL;
5817 while (PyDict_Next(dict, &pos, &k, &v)) {
5818 i = PyLong_AS_LONG(v);
5819 /* The keys of the dictionary can be tuples wrapping a contant.
5820 * (see compiler_add_o and _PyCode_ConstantKey). In that case
5821 * the object we want is always second. */
5822 if (PyTuple_CheckExact(k)) {
5823 k = PyTuple_GET_ITEM(k, 1);
5824 }
5825 Py_INCREF(k);
5826 assert(i < size);
5827 assert(i >= 0);
5828 PyList_SET_ITEM(consts, i, k);
5829 }
5830 return consts;
5831 }
5832
5833 static int
compute_code_flags(struct compiler * c)5834 compute_code_flags(struct compiler *c)
5835 {
5836 PySTEntryObject *ste = c->u->u_ste;
5837 int flags = 0;
5838 if (ste->ste_type == FunctionBlock) {
5839 flags |= CO_NEWLOCALS | CO_OPTIMIZED;
5840 if (ste->ste_nested)
5841 flags |= CO_NESTED;
5842 if (ste->ste_generator && !ste->ste_coroutine)
5843 flags |= CO_GENERATOR;
5844 if (!ste->ste_generator && ste->ste_coroutine)
5845 flags |= CO_COROUTINE;
5846 if (ste->ste_generator && ste->ste_coroutine)
5847 flags |= CO_ASYNC_GENERATOR;
5848 if (ste->ste_varargs)
5849 flags |= CO_VARARGS;
5850 if (ste->ste_varkeywords)
5851 flags |= CO_VARKEYWORDS;
5852 }
5853
5854 /* (Only) inherit compilerflags in PyCF_MASK */
5855 flags |= (c->c_flags->cf_flags & PyCF_MASK);
5856
5857 if ((IS_TOP_LEVEL_AWAIT(c)) &&
5858 ste->ste_coroutine &&
5859 !ste->ste_generator) {
5860 flags |= CO_COROUTINE;
5861 }
5862
5863 return flags;
5864 }
5865
5866 // Merge *tuple* with constant cache.
5867 // Unlike merge_consts_recursive(), this function doesn't work recursively.
5868 static int
merge_const_tuple(struct compiler * c,PyObject ** tuple)5869 merge_const_tuple(struct compiler *c, PyObject **tuple)
5870 {
5871 assert(PyTuple_CheckExact(*tuple));
5872
5873 PyObject *key = _PyCode_ConstantKey(*tuple);
5874 if (key == NULL) {
5875 return 0;
5876 }
5877
5878 // t is borrowed reference
5879 PyObject *t = PyDict_SetDefault(c->c_const_cache, key, key);
5880 Py_DECREF(key);
5881 if (t == NULL) {
5882 return 0;
5883 }
5884 if (t == key) { // tuple is new constant.
5885 return 1;
5886 }
5887
5888 PyObject *u = PyTuple_GET_ITEM(t, 1);
5889 Py_INCREF(u);
5890 Py_DECREF(*tuple);
5891 *tuple = u;
5892 return 1;
5893 }
5894
5895 static PyCodeObject *
makecode(struct compiler * c,struct assembler * a)5896 makecode(struct compiler *c, struct assembler *a)
5897 {
5898 PyObject *tmp;
5899 PyCodeObject *co = NULL;
5900 PyObject *consts = NULL;
5901 PyObject *names = NULL;
5902 PyObject *varnames = NULL;
5903 PyObject *name = NULL;
5904 PyObject *freevars = NULL;
5905 PyObject *cellvars = NULL;
5906 PyObject *bytecode = NULL;
5907 Py_ssize_t nlocals;
5908 int nlocals_int;
5909 int flags;
5910 int posorkeywordargcount, posonlyargcount, kwonlyargcount, maxdepth;
5911
5912 consts = consts_dict_keys_inorder(c->u->u_consts);
5913 names = dict_keys_inorder(c->u->u_names, 0);
5914 varnames = dict_keys_inorder(c->u->u_varnames, 0);
5915 if (!consts || !names || !varnames)
5916 goto error;
5917
5918 cellvars = dict_keys_inorder(c->u->u_cellvars, 0);
5919 if (!cellvars)
5920 goto error;
5921 freevars = dict_keys_inorder(c->u->u_freevars, PyTuple_GET_SIZE(cellvars));
5922 if (!freevars)
5923 goto error;
5924
5925 if (!merge_const_tuple(c, &names) ||
5926 !merge_const_tuple(c, &varnames) ||
5927 !merge_const_tuple(c, &cellvars) ||
5928 !merge_const_tuple(c, &freevars))
5929 {
5930 goto error;
5931 }
5932
5933 nlocals = PyDict_GET_SIZE(c->u->u_varnames);
5934 assert(nlocals < INT_MAX);
5935 nlocals_int = Py_SAFE_DOWNCAST(nlocals, Py_ssize_t, int);
5936
5937 flags = compute_code_flags(c);
5938 if (flags < 0)
5939 goto error;
5940
5941 bytecode = PyCode_Optimize(a->a_bytecode, consts, names, a->a_lnotab);
5942 if (!bytecode)
5943 goto error;
5944
5945 tmp = PyList_AsTuple(consts); /* PyCode_New requires a tuple */
5946 if (!tmp)
5947 goto error;
5948 Py_DECREF(consts);
5949 consts = tmp;
5950 if (!merge_const_tuple(c, &consts)) {
5951 goto error;
5952 }
5953
5954 posonlyargcount = Py_SAFE_DOWNCAST(c->u->u_posonlyargcount, Py_ssize_t, int);
5955 posorkeywordargcount = Py_SAFE_DOWNCAST(c->u->u_argcount, Py_ssize_t, int);
5956 kwonlyargcount = Py_SAFE_DOWNCAST(c->u->u_kwonlyargcount, Py_ssize_t, int);
5957 maxdepth = stackdepth(c);
5958 if (maxdepth < 0) {
5959 goto error;
5960 }
5961 co = PyCode_NewWithPosOnlyArgs(posonlyargcount+posorkeywordargcount,
5962 posonlyargcount, kwonlyargcount, nlocals_int,
5963 maxdepth, flags, bytecode, consts, names,
5964 varnames, freevars, cellvars, c->c_filename,
5965 c->u->u_name, c->u->u_firstlineno, a->a_lnotab);
5966 error:
5967 Py_XDECREF(consts);
5968 Py_XDECREF(names);
5969 Py_XDECREF(varnames);
5970 Py_XDECREF(name);
5971 Py_XDECREF(freevars);
5972 Py_XDECREF(cellvars);
5973 Py_XDECREF(bytecode);
5974 return co;
5975 }
5976
5977
5978 /* For debugging purposes only */
5979 #if 0
5980 static void
5981 dump_instr(const struct instr *i)
5982 {
5983 const char *jrel = i->i_jrel ? "jrel " : "";
5984 const char *jabs = i->i_jabs ? "jabs " : "";
5985 char arg[128];
5986
5987 *arg = '\0';
5988 if (HAS_ARG(i->i_opcode)) {
5989 sprintf(arg, "arg: %d ", i->i_oparg);
5990 }
5991 fprintf(stderr, "line: %d, opcode: %d %s%s%s\n",
5992 i->i_lineno, i->i_opcode, arg, jabs, jrel);
5993 }
5994
5995 static void
5996 dump_basicblock(const basicblock *b)
5997 {
5998 const char *seen = b->b_seen ? "seen " : "";
5999 const char *b_return = b->b_return ? "return " : "";
6000 fprintf(stderr, "used: %d, depth: %d, offset: %d %s%s\n",
6001 b->b_iused, b->b_startdepth, b->b_offset, seen, b_return);
6002 if (b->b_instr) {
6003 int i;
6004 for (i = 0; i < b->b_iused; i++) {
6005 fprintf(stderr, " [%02d] ", i);
6006 dump_instr(b->b_instr + i);
6007 }
6008 }
6009 }
6010 #endif
6011
6012 static PyCodeObject *
assemble(struct compiler * c,int addNone)6013 assemble(struct compiler *c, int addNone)
6014 {
6015 basicblock *b, *entryblock;
6016 struct assembler a;
6017 int i, j, nblocks;
6018 PyCodeObject *co = NULL;
6019
6020 /* Make sure every block that falls off the end returns None.
6021 XXX NEXT_BLOCK() isn't quite right, because if the last
6022 block ends with a jump or return b_next shouldn't set.
6023 */
6024 if (!c->u->u_curblock->b_return) {
6025 NEXT_BLOCK(c);
6026 if (addNone)
6027 ADDOP_LOAD_CONST(c, Py_None);
6028 ADDOP(c, RETURN_VALUE);
6029 }
6030
6031 nblocks = 0;
6032 entryblock = NULL;
6033 for (b = c->u->u_blocks; b != NULL; b = b->b_list) {
6034 nblocks++;
6035 entryblock = b;
6036 }
6037
6038 /* Set firstlineno if it wasn't explicitly set. */
6039 if (!c->u->u_firstlineno) {
6040 if (entryblock && entryblock->b_instr && entryblock->b_instr->i_lineno)
6041 c->u->u_firstlineno = entryblock->b_instr->i_lineno;
6042 else
6043 c->u->u_firstlineno = 1;
6044 }
6045 if (!assemble_init(&a, nblocks, c->u->u_firstlineno))
6046 goto error;
6047 dfs(c, entryblock, &a, nblocks);
6048
6049 /* Can't modify the bytecode after computing jump offsets. */
6050 assemble_jump_offsets(&a, c);
6051
6052 /* Emit code in reverse postorder from dfs. */
6053 for (i = a.a_nblocks - 1; i >= 0; i--) {
6054 b = a.a_postorder[i];
6055 for (j = 0; j < b->b_iused; j++)
6056 if (!assemble_emit(&a, &b->b_instr[j]))
6057 goto error;
6058 }
6059
6060 if (_PyBytes_Resize(&a.a_lnotab, a.a_lnotab_off) < 0)
6061 goto error;
6062 if (_PyBytes_Resize(&a.a_bytecode, a.a_offset * sizeof(_Py_CODEUNIT)) < 0)
6063 goto error;
6064
6065 co = makecode(c, &a);
6066 error:
6067 assemble_free(&a);
6068 return co;
6069 }
6070
6071 #undef PyAST_Compile
6072 PyCodeObject *
PyAST_Compile(mod_ty mod,const char * filename,PyCompilerFlags * flags,PyArena * arena)6073 PyAST_Compile(mod_ty mod, const char *filename, PyCompilerFlags *flags,
6074 PyArena *arena)
6075 {
6076 return PyAST_CompileEx(mod, filename, flags, -1, arena);
6077 }
6078