Issue #5262: Fixed bug in next roll over time computation in TimedRotatingFileHandler.
[python.git] / Python / symtable.c
blob023c93398d167984ab68fc9aac9e80c4f649ff20
1 #include "Python.h"
2 #include "Python-ast.h"
3 #include "code.h"
4 #include "symtable.h"
5 #include "structmember.h"
7 /* error strings used for warnings */
8 #define GLOBAL_AFTER_ASSIGN \
9 "name '%.400s' is assigned to before global declaration"
11 #define GLOBAL_AFTER_USE \
12 "name '%.400s' is used prior to global declaration"
14 #define IMPORT_STAR_WARNING "import * only allowed at module level"
16 #define RETURN_VAL_IN_GENERATOR \
17 "'return' with argument inside generator"
20 static PySTEntryObject *
21 ste_new(struct symtable *st, identifier name, _Py_block_ty block,
22 void *key, int lineno)
24 PySTEntryObject *ste = NULL;
25 PyObject *k;
27 k = PyLong_FromVoidPtr(key);
28 if (k == NULL)
29 goto fail;
30 ste = PyObject_New(PySTEntryObject, &PySTEntry_Type);
31 if (ste == NULL)
32 goto fail;
33 ste->ste_table = st;
34 ste->ste_id = k;
35 ste->ste_tmpname = 0;
37 ste->ste_name = name;
38 Py_INCREF(name);
40 ste->ste_symbols = NULL;
41 ste->ste_varnames = NULL;
42 ste->ste_children = NULL;
44 ste->ste_symbols = PyDict_New();
45 if (ste->ste_symbols == NULL)
46 goto fail;
48 ste->ste_varnames = PyList_New(0);
49 if (ste->ste_varnames == NULL)
50 goto fail;
52 ste->ste_children = PyList_New(0);
53 if (ste->ste_children == NULL)
54 goto fail;
56 ste->ste_type = block;
57 ste->ste_unoptimized = 0;
58 ste->ste_nested = 0;
59 ste->ste_free = 0;
60 ste->ste_varargs = 0;
61 ste->ste_varkeywords = 0;
62 ste->ste_opt_lineno = 0;
63 ste->ste_tmpname = 0;
64 ste->ste_lineno = lineno;
66 if (st->st_cur != NULL &&
67 (st->st_cur->ste_nested ||
68 st->st_cur->ste_type == FunctionBlock))
69 ste->ste_nested = 1;
70 ste->ste_child_free = 0;
71 ste->ste_generator = 0;
72 ste->ste_returns_value = 0;
74 if (PyDict_SetItem(st->st_symbols, ste->ste_id, (PyObject *)ste) < 0)
75 goto fail;
77 return ste;
78 fail:
79 Py_XDECREF(ste);
80 return NULL;
83 static PyObject *
84 ste_repr(PySTEntryObject *ste)
86 char buf[256];
88 PyOS_snprintf(buf, sizeof(buf),
89 "<symtable entry %.100s(%ld), line %d>",
90 PyString_AS_STRING(ste->ste_name),
91 PyInt_AS_LONG(ste->ste_id), ste->ste_lineno);
92 return PyString_FromString(buf);
95 static void
96 ste_dealloc(PySTEntryObject *ste)
98 ste->ste_table = NULL;
99 Py_XDECREF(ste->ste_id);
100 Py_XDECREF(ste->ste_name);
101 Py_XDECREF(ste->ste_symbols);
102 Py_XDECREF(ste->ste_varnames);
103 Py_XDECREF(ste->ste_children);
104 PyObject_Del(ste);
107 #define OFF(x) offsetof(PySTEntryObject, x)
109 static PyMemberDef ste_memberlist[] = {
110 {"id", T_OBJECT, OFF(ste_id), READONLY},
111 {"name", T_OBJECT, OFF(ste_name), READONLY},
112 {"symbols", T_OBJECT, OFF(ste_symbols), READONLY},
113 {"varnames", T_OBJECT, OFF(ste_varnames), READONLY},
114 {"children", T_OBJECT, OFF(ste_children), READONLY},
115 {"optimized",T_INT, OFF(ste_unoptimized), READONLY},
116 {"nested", T_INT, OFF(ste_nested), READONLY},
117 {"type", T_INT, OFF(ste_type), READONLY},
118 {"lineno", T_INT, OFF(ste_lineno), READONLY},
119 {NULL}
122 PyTypeObject PySTEntry_Type = {
123 PyVarObject_HEAD_INIT(&PyType_Type, 0)
124 "symtable entry",
125 sizeof(PySTEntryObject),
127 (destructor)ste_dealloc, /* tp_dealloc */
128 0, /* tp_print */
129 0, /* tp_getattr */
130 0, /* tp_setattr */
131 0, /* tp_compare */
132 (reprfunc)ste_repr, /* tp_repr */
133 0, /* tp_as_number */
134 0, /* tp_as_sequence */
135 0, /* tp_as_mapping */
136 0, /* tp_hash */
137 0, /* tp_call */
138 0, /* tp_str */
139 PyObject_GenericGetAttr, /* tp_getattro */
140 0, /* tp_setattro */
141 0, /* tp_as_buffer */
142 Py_TPFLAGS_DEFAULT, /* tp_flags */
143 0, /* tp_doc */
144 0, /* tp_traverse */
145 0, /* tp_clear */
146 0, /* tp_richcompare */
147 0, /* tp_weaklistoffset */
148 0, /* tp_iter */
149 0, /* tp_iternext */
150 0, /* tp_methods */
151 ste_memberlist, /* tp_members */
152 0, /* tp_getset */
153 0, /* tp_base */
154 0, /* tp_dict */
155 0, /* tp_descr_get */
156 0, /* tp_descr_set */
157 0, /* tp_dictoffset */
158 0, /* tp_init */
159 0, /* tp_alloc */
160 0, /* tp_new */
163 static int symtable_analyze(struct symtable *st);
164 static int symtable_warn(struct symtable *st, char *msg, int lineno);
165 static int symtable_enter_block(struct symtable *st, identifier name,
166 _Py_block_ty block, void *ast, int lineno);
167 static int symtable_exit_block(struct symtable *st, void *ast);
168 static int symtable_visit_stmt(struct symtable *st, stmt_ty s);
169 static int symtable_visit_expr(struct symtable *st, expr_ty s);
170 static int symtable_visit_genexp(struct symtable *st, expr_ty s);
171 static int symtable_visit_arguments(struct symtable *st, arguments_ty);
172 static int symtable_visit_excepthandler(struct symtable *st, excepthandler_ty);
173 static int symtable_visit_alias(struct symtable *st, alias_ty);
174 static int symtable_visit_comprehension(struct symtable *st, comprehension_ty);
175 static int symtable_visit_keyword(struct symtable *st, keyword_ty);
176 static int symtable_visit_slice(struct symtable *st, slice_ty);
177 static int symtable_visit_params(struct symtable *st, asdl_seq *args, int top);
178 static int symtable_visit_params_nested(struct symtable *st, asdl_seq *args);
179 static int symtable_implicit_arg(struct symtable *st, int pos);
182 static identifier top = NULL, lambda = NULL, genexpr = NULL;
184 #define GET_IDENTIFIER(VAR) \
185 ((VAR) ? (VAR) : ((VAR) = PyString_InternFromString(# VAR)))
187 #define DUPLICATE_ARGUMENT \
188 "duplicate argument '%s' in function definition"
190 static struct symtable *
191 symtable_new(void)
193 struct symtable *st;
195 st = (struct symtable *)PyMem_Malloc(sizeof(struct symtable));
196 if (st == NULL)
197 return NULL;
199 st->st_filename = NULL;
200 st->st_symbols = NULL;
202 if ((st->st_stack = PyList_New(0)) == NULL)
203 goto fail;
204 if ((st->st_symbols = PyDict_New()) == NULL)
205 goto fail;
206 st->st_cur = NULL;
207 st->st_tmpname = 0;
208 st->st_private = NULL;
209 return st;
210 fail:
211 PySymtable_Free(st);
212 return NULL;
215 struct symtable *
216 PySymtable_Build(mod_ty mod, const char *filename, PyFutureFeatures *future)
218 struct symtable *st = symtable_new();
219 asdl_seq *seq;
220 int i;
222 if (st == NULL)
223 return st;
224 st->st_filename = filename;
225 st->st_future = future;
226 if (!GET_IDENTIFIER(top) ||
227 !symtable_enter_block(st, top, ModuleBlock, (void *)mod, 0)) {
228 PySymtable_Free(st);
229 return NULL;
232 st->st_top = st->st_cur;
233 st->st_cur->ste_unoptimized = OPT_TOPLEVEL;
234 /* Any other top-level initialization? */
235 switch (mod->kind) {
236 case Module_kind:
237 seq = mod->v.Module.body;
238 for (i = 0; i < asdl_seq_LEN(seq); i++)
239 if (!symtable_visit_stmt(st,
240 (stmt_ty)asdl_seq_GET(seq, i)))
241 goto error;
242 break;
243 case Expression_kind:
244 if (!symtable_visit_expr(st, mod->v.Expression.body))
245 goto error;
246 break;
247 case Interactive_kind:
248 seq = mod->v.Interactive.body;
249 for (i = 0; i < asdl_seq_LEN(seq); i++)
250 if (!symtable_visit_stmt(st,
251 (stmt_ty)asdl_seq_GET(seq, i)))
252 goto error;
253 break;
254 case Suite_kind:
255 PyErr_SetString(PyExc_RuntimeError,
256 "this compiler does not handle Suites");
257 goto error;
259 if (!symtable_exit_block(st, (void *)mod)) {
260 PySymtable_Free(st);
261 return NULL;
263 if (symtable_analyze(st))
264 return st;
265 PySymtable_Free(st);
266 return NULL;
267 error:
268 (void) symtable_exit_block(st, (void *)mod);
269 PySymtable_Free(st);
270 return NULL;
273 void
274 PySymtable_Free(struct symtable *st)
276 Py_XDECREF(st->st_symbols);
277 Py_XDECREF(st->st_stack);
278 PyMem_Free((void *)st);
281 PySTEntryObject *
282 PySymtable_Lookup(struct symtable *st, void *key)
284 PyObject *k, *v;
286 k = PyLong_FromVoidPtr(key);
287 if (k == NULL)
288 return NULL;
289 v = PyDict_GetItem(st->st_symbols, k);
290 if (v) {
291 assert(PySTEntry_Check(v));
292 Py_INCREF(v);
294 else {
295 PyErr_SetString(PyExc_KeyError,
296 "unknown symbol table entry");
299 Py_DECREF(k);
300 return (PySTEntryObject *)v;
303 int
304 PyST_GetScope(PySTEntryObject *ste, PyObject *name)
306 PyObject *v = PyDict_GetItem(ste->ste_symbols, name);
307 if (!v)
308 return 0;
309 assert(PyInt_Check(v));
310 return (PyInt_AS_LONG(v) >> SCOPE_OFF) & SCOPE_MASK;
314 /* Analyze raw symbol information to determine scope of each name.
316 The next several functions are helpers for PySymtable_Analyze(),
317 which determines whether a name is local, global, or free. In addition,
318 it determines which local variables are cell variables; they provide
319 bindings that are used for free variables in enclosed blocks.
321 There are also two kinds of free variables, implicit and explicit. An
322 explicit global is declared with the global statement. An implicit
323 global is a free variable for which the compiler has found no binding
324 in an enclosing function scope. The implicit global is either a global
325 or a builtin. Python's module and class blocks use the xxx_NAME opcodes
326 to handle these names to implement slightly odd semantics. In such a
327 block, the name is treated as global until it is assigned to; then it
328 is treated as a local.
330 The symbol table requires two passes to determine the scope of each name.
331 The first pass collects raw facts from the AST: the name is a parameter
332 here, the name is used by not defined here, etc. The second pass analyzes
333 these facts during a pass over the PySTEntryObjects created during pass 1.
335 When a function is entered during the second pass, the parent passes
336 the set of all name bindings visible to its children. These bindings
337 are used to determine if the variable is free or an implicit global.
338 After doing the local analysis, it analyzes each of its child blocks
339 using an updated set of name bindings.
341 The children update the free variable set. If a local variable is free
342 in a child, the variable is marked as a cell. The current function must
343 provide runtime storage for the variable that may outlive the function's
344 frame. Cell variables are removed from the free set before the analyze
345 function returns to its parent.
347 The sets of bound and free variables are implemented as dictionaries
348 mapping strings to None.
351 #define SET_SCOPE(DICT, NAME, I) { \
352 PyObject *o = PyInt_FromLong(I); \
353 if (!o) \
354 return 0; \
355 if (PyDict_SetItem((DICT), (NAME), o) < 0) { \
356 Py_DECREF(o); \
357 return 0; \
359 Py_DECREF(o); \
362 /* Decide on scope of name, given flags.
364 The namespace dictionaries may be modified to record information
365 about the new name. For example, a new global will add an entry to
366 global. A name that was global can be changed to local.
369 static int
370 analyze_name(PySTEntryObject *ste, PyObject *dict, PyObject *name, long flags,
371 PyObject *bound, PyObject *local, PyObject *free,
372 PyObject *global)
374 if (flags & DEF_GLOBAL) {
375 if (flags & DEF_PARAM) {
376 PyErr_Format(PyExc_SyntaxError,
377 "name '%s' is local and global",
378 PyString_AS_STRING(name));
379 PyErr_SyntaxLocation(ste->ste_table->st_filename,
380 ste->ste_lineno);
382 return 0;
384 SET_SCOPE(dict, name, GLOBAL_EXPLICIT);
385 if (PyDict_SetItem(global, name, Py_None) < 0)
386 return 0;
387 if (bound && PyDict_GetItem(bound, name)) {
388 if (PyDict_DelItem(bound, name) < 0)
389 return 0;
391 return 1;
393 if (flags & DEF_BOUND) {
394 SET_SCOPE(dict, name, LOCAL);
395 if (PyDict_SetItem(local, name, Py_None) < 0)
396 return 0;
397 if (PyDict_GetItem(global, name)) {
398 if (PyDict_DelItem(global, name) < 0)
399 return 0;
401 return 1;
403 /* If an enclosing block has a binding for this name, it
404 is a free variable rather than a global variable.
405 Note that having a non-NULL bound implies that the block
406 is nested.
408 if (bound && PyDict_GetItem(bound, name)) {
409 SET_SCOPE(dict, name, FREE);
410 ste->ste_free = 1;
411 if (PyDict_SetItem(free, name, Py_None) < 0)
412 return 0;
413 return 1;
415 /* If a parent has a global statement, then call it global
416 explicit? It could also be global implicit.
418 else if (global && PyDict_GetItem(global, name)) {
419 SET_SCOPE(dict, name, GLOBAL_IMPLICIT);
420 return 1;
422 else {
423 if (ste->ste_nested)
424 ste->ste_free = 1;
425 SET_SCOPE(dict, name, GLOBAL_IMPLICIT);
426 return 1;
428 /* Should never get here. */
429 PyErr_Format(PyExc_SystemError, "failed to set scope for %s",
430 PyString_AS_STRING(name));
431 return 0;
434 #undef SET_SCOPE
436 /* If a name is defined in free and also in locals, then this block
437 provides the binding for the free variable. The name should be
438 marked CELL in this block and removed from the free list.
440 Note that the current block's free variables are included in free.
441 That's safe because no name can be free and local in the same scope.
444 static int
445 analyze_cells(PyObject *scope, PyObject *free)
447 PyObject *name, *v, *w;
448 int success = 0;
449 Py_ssize_t pos = 0;
451 w = PyInt_FromLong(CELL);
452 if (!w)
453 return 0;
454 while (PyDict_Next(scope, &pos, &name, &v)) {
455 long flags;
456 assert(PyInt_Check(v));
457 flags = PyInt_AS_LONG(v);
458 if (flags != LOCAL)
459 continue;
460 if (!PyDict_GetItem(free, name))
461 continue;
462 /* Replace LOCAL with CELL for this name, and remove
463 from free. It is safe to replace the value of name
464 in the dict, because it will not cause a resize.
466 if (PyDict_SetItem(scope, name, w) < 0)
467 goto error;
468 if (!PyDict_DelItem(free, name) < 0)
469 goto error;
471 success = 1;
472 error:
473 Py_DECREF(w);
474 return success;
477 /* Check for illegal statements in unoptimized namespaces */
478 static int
479 check_unoptimized(const PySTEntryObject* ste) {
480 char buf[300];
481 const char* trailer;
483 if (ste->ste_type != FunctionBlock || !ste->ste_unoptimized
484 || !(ste->ste_free || ste->ste_child_free))
485 return 1;
487 trailer = (ste->ste_child_free ?
488 "contains a nested function with free variables" :
489 "is a nested function");
491 switch (ste->ste_unoptimized) {
492 case OPT_TOPLEVEL: /* exec / import * at top-level is fine */
493 case OPT_EXEC: /* qualified exec is fine */
494 return 1;
495 case OPT_IMPORT_STAR:
496 PyOS_snprintf(buf, sizeof(buf),
497 "import * is not allowed in function '%.100s' "
498 "because it is %s",
499 PyString_AS_STRING(ste->ste_name), trailer);
500 break;
501 case OPT_BARE_EXEC:
502 PyOS_snprintf(buf, sizeof(buf),
503 "unqualified exec is not allowed in function "
504 "'%.100s' it %s",
505 PyString_AS_STRING(ste->ste_name), trailer);
506 break;
507 default:
508 PyOS_snprintf(buf, sizeof(buf),
509 "function '%.100s' uses import * and bare exec, "
510 "which are illegal because it %s",
511 PyString_AS_STRING(ste->ste_name), trailer);
512 break;
515 PyErr_SetString(PyExc_SyntaxError, buf);
516 PyErr_SyntaxLocation(ste->ste_table->st_filename,
517 ste->ste_opt_lineno);
518 return 0;
521 /* Enter the final scope information into the st_symbols dict.
523 * All arguments are dicts. Modifies symbols, others are read-only.
525 static int
526 update_symbols(PyObject *symbols, PyObject *scope,
527 PyObject *bound, PyObject *free, int classflag)
529 PyObject *name, *v, *u, *w, *free_value = NULL;
530 Py_ssize_t pos = 0;
532 while (PyDict_Next(symbols, &pos, &name, &v)) {
533 long i, flags;
534 assert(PyInt_Check(v));
535 flags = PyInt_AS_LONG(v);
536 w = PyDict_GetItem(scope, name);
537 assert(w && PyInt_Check(w));
538 i = PyInt_AS_LONG(w);
539 flags |= (i << SCOPE_OFF);
540 u = PyInt_FromLong(flags);
541 if (!u)
542 return 0;
543 if (PyDict_SetItem(symbols, name, u) < 0) {
544 Py_DECREF(u);
545 return 0;
547 Py_DECREF(u);
550 free_value = PyInt_FromLong(FREE << SCOPE_OFF);
551 if (!free_value)
552 return 0;
554 /* add a free variable when it's only use is for creating a closure */
555 pos = 0;
556 while (PyDict_Next(free, &pos, &name, &v)) {
557 PyObject *o = PyDict_GetItem(symbols, name);
559 if (o) {
560 /* It could be a free variable in a method of
561 the class that has the same name as a local
562 or global in the class scope.
564 if (classflag &&
565 PyInt_AS_LONG(o) & (DEF_BOUND | DEF_GLOBAL)) {
566 long i = PyInt_AS_LONG(o) | DEF_FREE_CLASS;
567 o = PyInt_FromLong(i);
568 if (!o) {
569 Py_DECREF(free_value);
570 return 0;
572 if (PyDict_SetItem(symbols, name, o) < 0) {
573 Py_DECREF(o);
574 Py_DECREF(free_value);
575 return 0;
577 Py_DECREF(o);
579 /* else it's not free, probably a cell */
580 continue;
582 if (!PyDict_GetItem(bound, name))
583 continue; /* it's a global */
585 if (PyDict_SetItem(symbols, name, free_value) < 0) {
586 Py_DECREF(free_value);
587 return 0;
590 Py_DECREF(free_value);
591 return 1;
594 /* Make final symbol table decisions for block of ste.
596 Arguments:
597 ste -- current symtable entry (input/output)
598 bound -- set of variables bound in enclosing scopes (input). bound
599 is NULL for module blocks.
600 free -- set of free variables in enclosed scopes (output)
601 globals -- set of declared global variables in enclosing scopes (input)
603 The implementation uses two mutually recursive functions,
604 analyze_block() and analyze_child_block(). analyze_block() is
605 responsible for analyzing the individual names defined in a block.
606 analyze_child_block() prepares temporary namespace dictionaries
607 used to evaluated nested blocks.
609 The two functions exist because a child block should see the name
610 bindings of its enclosing blocks, but those bindings should not
611 propagate back to a parent block.
614 static int
615 analyze_child_block(PySTEntryObject *entry, PyObject *bound, PyObject *free,
616 PyObject *global, PyObject* child_free);
618 static int
619 analyze_block(PySTEntryObject *ste, PyObject *bound, PyObject *free,
620 PyObject *global)
622 PyObject *name, *v, *local = NULL, *scope = NULL;
623 PyObject *newbound = NULL, *newglobal = NULL;
624 PyObject *newfree = NULL, *allfree = NULL;
625 int i, success = 0;
626 Py_ssize_t pos = 0;
628 local = PyDict_New(); /* collect new names bound in block */
629 if (!local)
630 goto error;
631 scope = PyDict_New(); /* collect scopes defined for each name */
632 if (!scope)
633 goto error;
635 /* Allocate new global and bound variable dictionaries. These
636 dictionaries hold the names visible in nested blocks. For
637 ClassBlocks, the bound and global names are initialized
638 before analyzing names, because class bindings aren't
639 visible in methods. For other blocks, they are initialized
640 after names are analyzed.
643 /* TODO(jhylton): Package these dicts in a struct so that we
644 can write reasonable helper functions?
646 newglobal = PyDict_New();
647 if (!newglobal)
648 goto error;
649 newbound = PyDict_New();
650 if (!newbound)
651 goto error;
652 newfree = PyDict_New();
653 if (!newfree)
654 goto error;
656 if (ste->ste_type == ClassBlock) {
657 if (PyDict_Update(newglobal, global) < 0)
658 goto error;
659 if (bound)
660 if (PyDict_Update(newbound, bound) < 0)
661 goto error;
664 while (PyDict_Next(ste->ste_symbols, &pos, &name, &v)) {
665 long flags = PyInt_AS_LONG(v);
666 if (!analyze_name(ste, scope, name, flags,
667 bound, local, free, global))
668 goto error;
671 if (ste->ste_type != ClassBlock) {
672 if (ste->ste_type == FunctionBlock) {
673 if (PyDict_Update(newbound, local) < 0)
674 goto error;
676 if (bound) {
677 if (PyDict_Update(newbound, bound) < 0)
678 goto error;
680 if (PyDict_Update(newglobal, global) < 0)
681 goto error;
684 /* Recursively call analyze_block() on each child block.
686 newbound, newglobal now contain the names visible in
687 nested blocks. The free variables in the children will
688 be collected in allfree.
690 allfree = PyDict_New();
691 if (!allfree)
692 goto error;
693 for (i = 0; i < PyList_GET_SIZE(ste->ste_children); ++i) {
694 PyObject *c = PyList_GET_ITEM(ste->ste_children, i);
695 PySTEntryObject* entry;
696 assert(c && PySTEntry_Check(c));
697 entry = (PySTEntryObject*)c;
698 if (!analyze_child_block(entry, newbound, newfree, newglobal,
699 allfree))
700 goto error;
701 if (entry->ste_free || entry->ste_child_free)
702 ste->ste_child_free = 1;
705 if (PyDict_Update(newfree, allfree) < 0)
706 goto error;
707 if (ste->ste_type == FunctionBlock && !analyze_cells(scope, newfree))
708 goto error;
709 if (!update_symbols(ste->ste_symbols, scope, bound, newfree,
710 ste->ste_type == ClassBlock))
711 goto error;
712 if (!check_unoptimized(ste))
713 goto error;
715 if (PyDict_Update(free, newfree) < 0)
716 goto error;
717 success = 1;
718 error:
719 Py_XDECREF(local);
720 Py_XDECREF(scope);
721 Py_XDECREF(newbound);
722 Py_XDECREF(newglobal);
723 Py_XDECREF(newfree);
724 Py_XDECREF(allfree);
725 if (!success)
726 assert(PyErr_Occurred());
727 return success;
730 static int
731 analyze_child_block(PySTEntryObject *entry, PyObject *bound, PyObject *free,
732 PyObject *global, PyObject* child_free)
734 PyObject *temp_bound = NULL, *temp_global = NULL, *temp_free = NULL;
736 /* Copy the bound and global dictionaries.
738 These dictionary are used by all blocks enclosed by the
739 current block. The analyze_block() call modifies these
740 dictionaries.
743 temp_bound = PyDict_New();
744 if (!temp_bound)
745 goto error;
746 if (PyDict_Update(temp_bound, bound) < 0)
747 goto error;
748 temp_free = PyDict_New();
749 if (!temp_free)
750 goto error;
751 if (PyDict_Update(temp_free, free) < 0)
752 goto error;
753 temp_global = PyDict_New();
754 if (!temp_global)
755 goto error;
756 if (PyDict_Update(temp_global, global) < 0)
757 goto error;
759 if (!analyze_block(entry, temp_bound, temp_free, temp_global))
760 goto error;
761 if (PyDict_Update(child_free, temp_free) < 0)
762 goto error;
763 Py_DECREF(temp_bound);
764 Py_DECREF(temp_free);
765 Py_DECREF(temp_global);
766 return 1;
767 error:
768 Py_XDECREF(temp_bound);
769 Py_XDECREF(temp_free);
770 Py_XDECREF(temp_global);
771 return 0;
774 static int
775 symtable_analyze(struct symtable *st)
777 PyObject *free, *global;
778 int r;
780 free = PyDict_New();
781 if (!free)
782 return 0;
783 global = PyDict_New();
784 if (!global) {
785 Py_DECREF(free);
786 return 0;
788 r = analyze_block(st->st_top, NULL, free, global);
789 Py_DECREF(free);
790 Py_DECREF(global);
791 return r;
795 static int
796 symtable_warn(struct symtable *st, char *msg, int lineno)
798 if (PyErr_WarnExplicit(PyExc_SyntaxWarning, msg, st->st_filename,
799 lineno, NULL, NULL) < 0) {
800 if (PyErr_ExceptionMatches(PyExc_SyntaxWarning)) {
801 PyErr_SetString(PyExc_SyntaxError, msg);
802 PyErr_SyntaxLocation(st->st_filename,
803 st->st_cur->ste_lineno);
805 return 0;
807 return 1;
810 /* symtable_enter_block() gets a reference via ste_new.
811 This reference is released when the block is exited, via the DECREF
812 in symtable_exit_block().
815 static int
816 symtable_exit_block(struct symtable *st, void *ast)
818 Py_ssize_t end;
820 Py_CLEAR(st->st_cur);
821 end = PyList_GET_SIZE(st->st_stack) - 1;
822 if (end >= 0) {
823 st->st_cur = (PySTEntryObject *)PyList_GET_ITEM(st->st_stack,
824 end);
825 if (st->st_cur == NULL)
826 return 0;
827 Py_INCREF(st->st_cur);
828 if (PySequence_DelItem(st->st_stack, end) < 0)
829 return 0;
831 return 1;
834 static int
835 symtable_enter_block(struct symtable *st, identifier name, _Py_block_ty block,
836 void *ast, int lineno)
838 PySTEntryObject *prev = NULL;
840 if (st->st_cur) {
841 prev = st->st_cur;
842 if (PyList_Append(st->st_stack, (PyObject *)st->st_cur) < 0) {
843 return 0;
845 Py_DECREF(st->st_cur);
847 st->st_cur = ste_new(st, name, block, ast, lineno);
848 if (st->st_cur == NULL)
849 return 0;
850 if (name == GET_IDENTIFIER(top))
851 st->st_global = st->st_cur->ste_symbols;
852 if (prev) {
853 if (PyList_Append(prev->ste_children,
854 (PyObject *)st->st_cur) < 0) {
855 return 0;
858 return 1;
861 static long
862 symtable_lookup(struct symtable *st, PyObject *name)
864 PyObject *o;
865 PyObject *mangled = _Py_Mangle(st->st_private, name);
866 if (!mangled)
867 return 0;
868 o = PyDict_GetItem(st->st_cur->ste_symbols, mangled);
869 Py_DECREF(mangled);
870 if (!o)
871 return 0;
872 return PyInt_AsLong(o);
875 static int
876 symtable_add_def(struct symtable *st, PyObject *name, int flag)
878 PyObject *o;
879 PyObject *dict;
880 long val;
881 PyObject *mangled = _Py_Mangle(st->st_private, name);
883 if (!mangled)
884 return 0;
885 dict = st->st_cur->ste_symbols;
886 if ((o = PyDict_GetItem(dict, mangled))) {
887 val = PyInt_AS_LONG(o);
888 if ((flag & DEF_PARAM) && (val & DEF_PARAM)) {
889 /* Is it better to use 'mangled' or 'name' here? */
890 PyErr_Format(PyExc_SyntaxError, DUPLICATE_ARGUMENT,
891 PyString_AsString(name));
892 PyErr_SyntaxLocation(st->st_filename,
893 st->st_cur->ste_lineno);
894 goto error;
896 val |= flag;
897 } else
898 val = flag;
899 o = PyInt_FromLong(val);
900 if (o == NULL)
901 goto error;
902 if (PyDict_SetItem(dict, mangled, o) < 0) {
903 Py_DECREF(o);
904 goto error;
906 Py_DECREF(o);
908 if (flag & DEF_PARAM) {
909 if (PyList_Append(st->st_cur->ste_varnames, mangled) < 0)
910 goto error;
911 } else if (flag & DEF_GLOBAL) {
912 /* XXX need to update DEF_GLOBAL for other flags too;
913 perhaps only DEF_FREE_GLOBAL */
914 val = flag;
915 if ((o = PyDict_GetItem(st->st_global, mangled))) {
916 val |= PyInt_AS_LONG(o);
918 o = PyInt_FromLong(val);
919 if (o == NULL)
920 goto error;
921 if (PyDict_SetItem(st->st_global, mangled, o) < 0) {
922 Py_DECREF(o);
923 goto error;
925 Py_DECREF(o);
927 Py_DECREF(mangled);
928 return 1;
930 error:
931 Py_DECREF(mangled);
932 return 0;
935 /* VISIT, VISIT_SEQ and VIST_SEQ_TAIL take an ASDL type as their second argument.
936 They use the ASDL name to synthesize the name of the C type and the visit
937 function.
939 VISIT_SEQ_TAIL permits the start of an ASDL sequence to be skipped, which is
940 useful if the first node in the sequence requires special treatment.
943 #define VISIT(ST, TYPE, V) \
944 if (!symtable_visit_ ## TYPE((ST), (V))) \
945 return 0;
947 #define VISIT_IN_BLOCK(ST, TYPE, V, S) \
948 if (!symtable_visit_ ## TYPE((ST), (V))) { \
949 symtable_exit_block((ST), (S)); \
950 return 0; \
953 #define VISIT_SEQ(ST, TYPE, SEQ) { \
954 int i; \
955 asdl_seq *seq = (SEQ); /* avoid variable capture */ \
956 for (i = 0; i < asdl_seq_LEN(seq); i++) { \
957 TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
958 if (!symtable_visit_ ## TYPE((ST), elt)) \
959 return 0; \
963 #define VISIT_SEQ_IN_BLOCK(ST, TYPE, SEQ, S) { \
964 int i; \
965 asdl_seq *seq = (SEQ); /* avoid variable capture */ \
966 for (i = 0; i < asdl_seq_LEN(seq); i++) { \
967 TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
968 if (!symtable_visit_ ## TYPE((ST), elt)) { \
969 symtable_exit_block((ST), (S)); \
970 return 0; \
975 #define VISIT_SEQ_TAIL(ST, TYPE, SEQ, START) { \
976 int i; \
977 asdl_seq *seq = (SEQ); /* avoid variable capture */ \
978 for (i = (START); i < asdl_seq_LEN(seq); i++) { \
979 TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
980 if (!symtable_visit_ ## TYPE((ST), elt)) \
981 return 0; \
985 #define VISIT_SEQ_TAIL_IN_BLOCK(ST, TYPE, SEQ, START, S) { \
986 int i; \
987 asdl_seq *seq = (SEQ); /* avoid variable capture */ \
988 for (i = (START); i < asdl_seq_LEN(seq); i++) { \
989 TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
990 if (!symtable_visit_ ## TYPE((ST), elt)) { \
991 symtable_exit_block((ST), (S)); \
992 return 0; \
997 static int
998 symtable_new_tmpname(struct symtable *st)
1000 char tmpname[256];
1001 identifier tmp;
1003 PyOS_snprintf(tmpname, sizeof(tmpname), "_[%d]",
1004 ++st->st_cur->ste_tmpname);
1005 tmp = PyString_InternFromString(tmpname);
1006 if (!tmp)
1007 return 0;
1008 if (!symtable_add_def(st, tmp, DEF_LOCAL))
1009 return 0;
1010 Py_DECREF(tmp);
1011 return 1;
1014 static int
1015 symtable_visit_stmt(struct symtable *st, stmt_ty s)
1017 switch (s->kind) {
1018 case FunctionDef_kind:
1019 if (!symtable_add_def(st, s->v.FunctionDef.name, DEF_LOCAL))
1020 return 0;
1021 if (s->v.FunctionDef.args->defaults)
1022 VISIT_SEQ(st, expr, s->v.FunctionDef.args->defaults);
1023 if (s->v.FunctionDef.decorator_list)
1024 VISIT_SEQ(st, expr, s->v.FunctionDef.decorator_list);
1025 if (!symtable_enter_block(st, s->v.FunctionDef.name,
1026 FunctionBlock, (void *)s, s->lineno))
1027 return 0;
1028 VISIT_IN_BLOCK(st, arguments, s->v.FunctionDef.args, s);
1029 VISIT_SEQ_IN_BLOCK(st, stmt, s->v.FunctionDef.body, s);
1030 if (!symtable_exit_block(st, s))
1031 return 0;
1032 break;
1033 case ClassDef_kind: {
1034 PyObject *tmp;
1035 if (!symtable_add_def(st, s->v.ClassDef.name, DEF_LOCAL))
1036 return 0;
1037 VISIT_SEQ(st, expr, s->v.ClassDef.bases);
1038 if (s->v.ClassDef.decorator_list)
1039 VISIT_SEQ(st, expr, s->v.ClassDef.decorator_list);
1040 if (!symtable_enter_block(st, s->v.ClassDef.name, ClassBlock,
1041 (void *)s, s->lineno))
1042 return 0;
1043 tmp = st->st_private;
1044 st->st_private = s->v.ClassDef.name;
1045 VISIT_SEQ_IN_BLOCK(st, stmt, s->v.ClassDef.body, s);
1046 st->st_private = tmp;
1047 if (!symtable_exit_block(st, s))
1048 return 0;
1049 break;
1051 case Return_kind:
1052 if (s->v.Return.value) {
1053 VISIT(st, expr, s->v.Return.value);
1054 st->st_cur->ste_returns_value = 1;
1055 if (st->st_cur->ste_generator) {
1056 PyErr_SetString(PyExc_SyntaxError,
1057 RETURN_VAL_IN_GENERATOR);
1058 PyErr_SyntaxLocation(st->st_filename,
1059 s->lineno);
1060 return 0;
1063 break;
1064 case Delete_kind:
1065 VISIT_SEQ(st, expr, s->v.Delete.targets);
1066 break;
1067 case Assign_kind:
1068 VISIT_SEQ(st, expr, s->v.Assign.targets);
1069 VISIT(st, expr, s->v.Assign.value);
1070 break;
1071 case AugAssign_kind:
1072 VISIT(st, expr, s->v.AugAssign.target);
1073 VISIT(st, expr, s->v.AugAssign.value);
1074 break;
1075 case Print_kind:
1076 if (s->v.Print.dest)
1077 VISIT(st, expr, s->v.Print.dest);
1078 VISIT_SEQ(st, expr, s->v.Print.values);
1079 break;
1080 case For_kind:
1081 VISIT(st, expr, s->v.For.target);
1082 VISIT(st, expr, s->v.For.iter);
1083 VISIT_SEQ(st, stmt, s->v.For.body);
1084 if (s->v.For.orelse)
1085 VISIT_SEQ(st, stmt, s->v.For.orelse);
1086 break;
1087 case While_kind:
1088 VISIT(st, expr, s->v.While.test);
1089 VISIT_SEQ(st, stmt, s->v.While.body);
1090 if (s->v.While.orelse)
1091 VISIT_SEQ(st, stmt, s->v.While.orelse);
1092 break;
1093 case If_kind:
1094 /* XXX if 0: and lookup_yield() hacks */
1095 VISIT(st, expr, s->v.If.test);
1096 VISIT_SEQ(st, stmt, s->v.If.body);
1097 if (s->v.If.orelse)
1098 VISIT_SEQ(st, stmt, s->v.If.orelse);
1099 break;
1100 case Raise_kind:
1101 if (s->v.Raise.type) {
1102 VISIT(st, expr, s->v.Raise.type);
1103 if (s->v.Raise.inst) {
1104 VISIT(st, expr, s->v.Raise.inst);
1105 if (s->v.Raise.tback)
1106 VISIT(st, expr, s->v.Raise.tback);
1109 break;
1110 case TryExcept_kind:
1111 VISIT_SEQ(st, stmt, s->v.TryExcept.body);
1112 VISIT_SEQ(st, stmt, s->v.TryExcept.orelse);
1113 VISIT_SEQ(st, excepthandler, s->v.TryExcept.handlers);
1114 break;
1115 case TryFinally_kind:
1116 VISIT_SEQ(st, stmt, s->v.TryFinally.body);
1117 VISIT_SEQ(st, stmt, s->v.TryFinally.finalbody);
1118 break;
1119 case Assert_kind:
1120 VISIT(st, expr, s->v.Assert.test);
1121 if (s->v.Assert.msg)
1122 VISIT(st, expr, s->v.Assert.msg);
1123 break;
1124 case Import_kind:
1125 VISIT_SEQ(st, alias, s->v.Import.names);
1126 /* XXX Don't have the lineno available inside
1127 visit_alias */
1128 if (st->st_cur->ste_unoptimized && !st->st_cur->ste_opt_lineno)
1129 st->st_cur->ste_opt_lineno = s->lineno;
1130 break;
1131 case ImportFrom_kind:
1132 VISIT_SEQ(st, alias, s->v.ImportFrom.names);
1133 /* XXX Don't have the lineno available inside
1134 visit_alias */
1135 if (st->st_cur->ste_unoptimized && !st->st_cur->ste_opt_lineno)
1136 st->st_cur->ste_opt_lineno = s->lineno;
1137 break;
1138 case Exec_kind:
1139 VISIT(st, expr, s->v.Exec.body);
1140 if (!st->st_cur->ste_opt_lineno)
1141 st->st_cur->ste_opt_lineno = s->lineno;
1142 if (s->v.Exec.globals) {
1143 st->st_cur->ste_unoptimized |= OPT_EXEC;
1144 VISIT(st, expr, s->v.Exec.globals);
1145 if (s->v.Exec.locals)
1146 VISIT(st, expr, s->v.Exec.locals);
1147 } else {
1148 st->st_cur->ste_unoptimized |= OPT_BARE_EXEC;
1150 break;
1151 case Global_kind: {
1152 int i;
1153 asdl_seq *seq = s->v.Global.names;
1154 for (i = 0; i < asdl_seq_LEN(seq); i++) {
1155 identifier name = (identifier)asdl_seq_GET(seq, i);
1156 char *c_name = PyString_AS_STRING(name);
1157 long cur = symtable_lookup(st, name);
1158 if (cur < 0)
1159 return 0;
1160 if (cur & (DEF_LOCAL | USE)) {
1161 char buf[256];
1162 if (cur & DEF_LOCAL)
1163 PyOS_snprintf(buf, sizeof(buf),
1164 GLOBAL_AFTER_ASSIGN,
1165 c_name);
1166 else
1167 PyOS_snprintf(buf, sizeof(buf),
1168 GLOBAL_AFTER_USE,
1169 c_name);
1170 if (!symtable_warn(st, buf, s->lineno))
1171 return 0;
1173 if (!symtable_add_def(st, name, DEF_GLOBAL))
1174 return 0;
1176 break;
1178 case Expr_kind:
1179 VISIT(st, expr, s->v.Expr.value);
1180 break;
1181 case Pass_kind:
1182 case Break_kind:
1183 case Continue_kind:
1184 /* nothing to do here */
1185 break;
1186 case With_kind:
1187 if (!symtable_new_tmpname(st))
1188 return 0;
1189 VISIT(st, expr, s->v.With.context_expr);
1190 if (s->v.With.optional_vars) {
1191 if (!symtable_new_tmpname(st))
1192 return 0;
1193 VISIT(st, expr, s->v.With.optional_vars);
1195 VISIT_SEQ(st, stmt, s->v.With.body);
1196 break;
1198 return 1;
1201 static int
1202 symtable_visit_expr(struct symtable *st, expr_ty e)
1204 switch (e->kind) {
1205 case BoolOp_kind:
1206 VISIT_SEQ(st, expr, e->v.BoolOp.values);
1207 break;
1208 case BinOp_kind:
1209 VISIT(st, expr, e->v.BinOp.left);
1210 VISIT(st, expr, e->v.BinOp.right);
1211 break;
1212 case UnaryOp_kind:
1213 VISIT(st, expr, e->v.UnaryOp.operand);
1214 break;
1215 case Lambda_kind: {
1216 if (!GET_IDENTIFIER(lambda) ||
1217 !symtable_add_def(st, lambda, DEF_LOCAL))
1218 return 0;
1219 if (e->v.Lambda.args->defaults)
1220 VISIT_SEQ(st, expr, e->v.Lambda.args->defaults);
1221 /* XXX how to get line numbers for expressions */
1222 if (!symtable_enter_block(st, lambda,
1223 FunctionBlock, (void *)e, 0))
1224 return 0;
1225 VISIT_IN_BLOCK(st, arguments, e->v.Lambda.args, (void*)e);
1226 VISIT_IN_BLOCK(st, expr, e->v.Lambda.body, (void*)e);
1227 if (!symtable_exit_block(st, (void *)e))
1228 return 0;
1229 break;
1231 case IfExp_kind:
1232 VISIT(st, expr, e->v.IfExp.test);
1233 VISIT(st, expr, e->v.IfExp.body);
1234 VISIT(st, expr, e->v.IfExp.orelse);
1235 break;
1236 case Dict_kind:
1237 VISIT_SEQ(st, expr, e->v.Dict.keys);
1238 VISIT_SEQ(st, expr, e->v.Dict.values);
1239 break;
1240 case ListComp_kind:
1241 if (!symtable_new_tmpname(st))
1242 return 0;
1243 VISIT(st, expr, e->v.ListComp.elt);
1244 VISIT_SEQ(st, comprehension, e->v.ListComp.generators);
1245 break;
1246 case GeneratorExp_kind:
1247 if (!symtable_visit_genexp(st, e))
1248 return 0;
1249 break;
1250 case Yield_kind:
1251 if (e->v.Yield.value)
1252 VISIT(st, expr, e->v.Yield.value);
1253 st->st_cur->ste_generator = 1;
1254 if (st->st_cur->ste_returns_value) {
1255 PyErr_SetString(PyExc_SyntaxError,
1256 RETURN_VAL_IN_GENERATOR);
1257 PyErr_SyntaxLocation(st->st_filename,
1258 e->lineno);
1259 return 0;
1261 break;
1262 case Compare_kind:
1263 VISIT(st, expr, e->v.Compare.left);
1264 VISIT_SEQ(st, expr, e->v.Compare.comparators);
1265 break;
1266 case Call_kind:
1267 VISIT(st, expr, e->v.Call.func);
1268 VISIT_SEQ(st, expr, e->v.Call.args);
1269 VISIT_SEQ(st, keyword, e->v.Call.keywords);
1270 if (e->v.Call.starargs)
1271 VISIT(st, expr, e->v.Call.starargs);
1272 if (e->v.Call.kwargs)
1273 VISIT(st, expr, e->v.Call.kwargs);
1274 break;
1275 case Repr_kind:
1276 VISIT(st, expr, e->v.Repr.value);
1277 break;
1278 case Num_kind:
1279 case Str_kind:
1280 /* Nothing to do here. */
1281 break;
1282 /* The following exprs can be assignment targets. */
1283 case Attribute_kind:
1284 VISIT(st, expr, e->v.Attribute.value);
1285 break;
1286 case Subscript_kind:
1287 VISIT(st, expr, e->v.Subscript.value);
1288 VISIT(st, slice, e->v.Subscript.slice);
1289 break;
1290 case Name_kind:
1291 if (!symtable_add_def(st, e->v.Name.id,
1292 e->v.Name.ctx == Load ? USE : DEF_LOCAL))
1293 return 0;
1294 break;
1295 /* child nodes of List and Tuple will have expr_context set */
1296 case List_kind:
1297 VISIT_SEQ(st, expr, e->v.List.elts);
1298 break;
1299 case Tuple_kind:
1300 VISIT_SEQ(st, expr, e->v.Tuple.elts);
1301 break;
1303 return 1;
1306 static int
1307 symtable_implicit_arg(struct symtable *st, int pos)
1309 PyObject *id = PyString_FromFormat(".%d", pos);
1310 if (id == NULL)
1311 return 0;
1312 if (!symtable_add_def(st, id, DEF_PARAM)) {
1313 Py_DECREF(id);
1314 return 0;
1316 Py_DECREF(id);
1317 return 1;
1320 static int
1321 symtable_visit_params(struct symtable *st, asdl_seq *args, int toplevel)
1323 int i;
1325 /* go through all the toplevel arguments first */
1326 for (i = 0; i < asdl_seq_LEN(args); i++) {
1327 expr_ty arg = (expr_ty)asdl_seq_GET(args, i);
1328 if (arg->kind == Name_kind) {
1329 assert(arg->v.Name.ctx == Param ||
1330 (arg->v.Name.ctx == Store && !toplevel));
1331 if (!symtable_add_def(st, arg->v.Name.id, DEF_PARAM))
1332 return 0;
1334 else if (arg->kind == Tuple_kind) {
1335 assert(arg->v.Tuple.ctx == Store);
1336 if (toplevel) {
1337 if (!symtable_implicit_arg(st, i))
1338 return 0;
1341 else {
1342 PyErr_SetString(PyExc_SyntaxError,
1343 "invalid expression in parameter list");
1344 PyErr_SyntaxLocation(st->st_filename,
1345 st->st_cur->ste_lineno);
1346 return 0;
1350 if (!toplevel) {
1351 if (!symtable_visit_params_nested(st, args))
1352 return 0;
1355 return 1;
1358 static int
1359 symtable_visit_params_nested(struct symtable *st, asdl_seq *args)
1361 int i;
1362 for (i = 0; i < asdl_seq_LEN(args); i++) {
1363 expr_ty arg = (expr_ty)asdl_seq_GET(args, i);
1364 if (arg->kind == Tuple_kind &&
1365 !symtable_visit_params(st, arg->v.Tuple.elts, 0))
1366 return 0;
1369 return 1;
1372 static int
1373 symtable_visit_arguments(struct symtable *st, arguments_ty a)
1375 /* skip default arguments inside function block
1376 XXX should ast be different?
1378 if (a->args && !symtable_visit_params(st, a->args, 1))
1379 return 0;
1380 if (a->vararg) {
1381 if (!symtable_add_def(st, a->vararg, DEF_PARAM))
1382 return 0;
1383 st->st_cur->ste_varargs = 1;
1385 if (a->kwarg) {
1386 if (!symtable_add_def(st, a->kwarg, DEF_PARAM))
1387 return 0;
1388 st->st_cur->ste_varkeywords = 1;
1390 if (a->args && !symtable_visit_params_nested(st, a->args))
1391 return 0;
1392 return 1;
1396 static int
1397 symtable_visit_excepthandler(struct symtable *st, excepthandler_ty eh)
1399 if (eh->v.ExceptHandler.type)
1400 VISIT(st, expr, eh->v.ExceptHandler.type);
1401 if (eh->v.ExceptHandler.name)
1402 VISIT(st, expr, eh->v.ExceptHandler.name);
1403 VISIT_SEQ(st, stmt, eh->v.ExceptHandler.body);
1404 return 1;
1408 static int
1409 symtable_visit_alias(struct symtable *st, alias_ty a)
1411 /* Compute store_name, the name actually bound by the import
1412 operation. It is diferent than a->name when a->name is a
1413 dotted package name (e.g. spam.eggs)
1415 PyObject *store_name;
1416 PyObject *name = (a->asname == NULL) ? a->name : a->asname;
1417 const char *base = PyString_AS_STRING(name);
1418 char *dot = strchr(base, '.');
1419 if (dot) {
1420 store_name = PyString_FromStringAndSize(base, dot - base);
1421 if (!store_name)
1422 return 0;
1424 else {
1425 store_name = name;
1426 Py_INCREF(store_name);
1428 if (strcmp(PyString_AS_STRING(name), "*")) {
1429 int r = symtable_add_def(st, store_name, DEF_IMPORT);
1430 Py_DECREF(store_name);
1431 return r;
1433 else {
1434 if (st->st_cur->ste_type != ModuleBlock) {
1435 int lineno = st->st_cur->ste_lineno;
1436 if (!symtable_warn(st, IMPORT_STAR_WARNING, lineno)) {
1437 Py_DECREF(store_name);
1438 return 0;
1441 st->st_cur->ste_unoptimized |= OPT_IMPORT_STAR;
1442 Py_DECREF(store_name);
1443 return 1;
1448 static int
1449 symtable_visit_comprehension(struct symtable *st, comprehension_ty lc)
1451 VISIT(st, expr, lc->target);
1452 VISIT(st, expr, lc->iter);
1453 VISIT_SEQ(st, expr, lc->ifs);
1454 return 1;
1458 static int
1459 symtable_visit_keyword(struct symtable *st, keyword_ty k)
1461 VISIT(st, expr, k->value);
1462 return 1;
1466 static int
1467 symtable_visit_slice(struct symtable *st, slice_ty s)
1469 switch (s->kind) {
1470 case Slice_kind:
1471 if (s->v.Slice.lower)
1472 VISIT(st, expr, s->v.Slice.lower)
1473 if (s->v.Slice.upper)
1474 VISIT(st, expr, s->v.Slice.upper)
1475 if (s->v.Slice.step)
1476 VISIT(st, expr, s->v.Slice.step)
1477 break;
1478 case ExtSlice_kind:
1479 VISIT_SEQ(st, slice, s->v.ExtSlice.dims)
1480 break;
1481 case Index_kind:
1482 VISIT(st, expr, s->v.Index.value)
1483 break;
1484 case Ellipsis_kind:
1485 break;
1487 return 1;
1490 static int
1491 symtable_visit_genexp(struct symtable *st, expr_ty e)
1493 comprehension_ty outermost = ((comprehension_ty)
1494 (asdl_seq_GET(e->v.GeneratorExp.generators, 0)));
1495 /* Outermost iterator is evaluated in current scope */
1496 VISIT(st, expr, outermost->iter);
1497 /* Create generator scope for the rest */
1498 if (!GET_IDENTIFIER(genexpr) ||
1499 !symtable_enter_block(st, genexpr, FunctionBlock, (void *)e, 0)) {
1500 return 0;
1502 st->st_cur->ste_generator = 1;
1503 /* Outermost iter is received as an argument */
1504 if (!symtable_implicit_arg(st, 0)) {
1505 symtable_exit_block(st, (void *)e);
1506 return 0;
1508 VISIT_IN_BLOCK(st, expr, outermost->target, (void*)e);
1509 VISIT_SEQ_IN_BLOCK(st, expr, outermost->ifs, (void*)e);
1510 VISIT_SEQ_TAIL_IN_BLOCK(st, comprehension,
1511 e->v.GeneratorExp.generators, 1, (void*)e);
1512 VISIT_IN_BLOCK(st, expr, e->v.GeneratorExp.elt, (void*)e);
1513 return symtable_exit_block(st, (void *)e);