[Python-checkins] python/dist/src/Include symtable.h, 2.9.18.12, 2.9.18.13
jhylton@users.sourceforge.net
jhylton at users.sourceforge.net
Tue Oct 11 21:18:14 CEST 2005
Update of /cvsroot/python/python/dist/src/Include
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20508/Include
Modified Files:
Tag: ast-branch
symtable.h
Log Message:
Fix symbol table to catch several scoping syntax errors.
It's illegal to mix import * or bare exec with nested scopes, because
there is no unambiguous way to decide whether to treat variables are
free variables or globals. The symbol table change a bit to detect
these errors.
ste_optimized was renamed ste_unoptimized, to match its use: It
contains a non-zero value with an unoptimized namespace
(e.g. LOAD_NAME) will be used. Since the top-level uses LOAD_NAME,
added OPT_TOPLEVEL along with the other OPT_ defines.
Add an ste_free flag as a cheap way to tell if a block has free
variables, including those inherited from children. Actually compute
ste_free_child and ste_opt_lineno.
Track rename of ste_optimized to ste_unoptimized in symbol table and
compiler.
Fixes test_scope.
Index: symtable.h
===================================================================
RCS file: /cvsroot/python/python/dist/src/Include/symtable.h,v
retrieving revision 2.9.18.12
retrieving revision 2.9.18.13
diff -u -d -r2.9.18.12 -r2.9.18.13
--- symtable.h 9 Jan 2005 18:49:43 -0000 2.9.18.12
+++ symtable.h 11 Oct 2005 19:18:11 -0000 2.9.18.13
@@ -30,8 +30,9 @@
PyObject *ste_varnames; /* list of variable names */
PyObject *ste_children; /* list of child ids */
block_ty ste_type; /* module, class, or function */
- int ste_optimized : 1; /* true if namespace can be optimized */
+ int ste_unoptimized; /* false if namespace is optimized */
int ste_nested : 1; /* true if block is nested */
+ int ste_free : 1; /* true if block has free variables */
int ste_child_free : 1; /* true if a child block has free variables,
including free refs to globals */
int ste_generator : 1; /* true if namespace is a generator */
@@ -86,9 +87,11 @@
#define FREE 4
#define CELL 5
+/* The following three names are used for the ste_unoptimized bit field */
#define OPT_IMPORT_STAR 1
#define OPT_EXEC 2
#define OPT_BARE_EXEC 4
+#define OPT_TOPLEVEL 8 /* top-level names, including eval and exec */
#define GENERATOR 1
#define GENERATOR_EXPRESSION 2
More information about the Python-checkins
mailing list