diff options
author | Jeremy Hylton <jeremy@alum.mit.edu> | 2001-02-27 04:23:34 (GMT) |
---|---|---|
committer | Jeremy Hylton <jeremy@alum.mit.edu> | 2001-02-27 04:23:34 (GMT) |
commit | 29906eef3a56c43a4cd68a8706c75844b2384e59 (patch) | |
tree | cc45c3aa170794c190407c7a0dc7781aa3be74da /Include/symtable.h | |
parent | 2a5130ed20472ba7b3e5442e5083a3a1570cc611 (diff) | |
download | cpython-29906eef3a56c43a4cd68a8706c75844b2384e59.zip cpython-29906eef3a56c43a4cd68a8706c75844b2384e59.tar.gz cpython-29906eef3a56c43a4cd68a8706c75844b2384e59.tar.bz2 |
Preliminary support for future nested scopes
compile.h: #define NESTED_SCOPES_DEFAULT 0 for Python 2.1
__future__ feature name: "nested_scopes"
symtable.h: Add st_nested_scopes slot. Define flags to track exec and
import star.
Lib/test/test_scope.py: requires nested scopes
compile.c: Fiddle with error messages.
Reverse the sense of ste_optimized flag on
PySymtableEntryObjects. If it is true, there is an optimization
conflict.
Modify get_ref_type to respect st_nested_scopes flags.
Refactor symtable_load_symbols() into several smaller functions,
which use struct symbol_info to share variables. In new function
symtable_update_flags(), raise an error or warning for import * or
bare exec that conflicts with nested scopes. Also, modify handle
for free variables to respect st_nested_scopes flag.
In symtable_init() assign st_nested_scopes flag to
NESTED_SCOPES_DEFAULT (defined in compile.h).
Add preliminary and often incorrect implementation of
symtable_check_future().
Add symtable_lookup() helper for future use.
Diffstat (limited to 'Include/symtable.h')
-rw-r--r-- | Include/symtable.h | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/Include/symtable.h b/Include/symtable.h index f96ed0c..eb0be1a 100644 --- a/Include/symtable.h +++ b/Include/symtable.h @@ -20,6 +20,7 @@ struct _symtable_entry; struct symtable { int st_pass; /* pass == 1 or 2 */ + int st_nested_scopes; /* true if nested scopes are enabled */ char *st_filename; /* name of file being compiled */ struct _symtable_entry *st_cur; /* current symbol table entry */ PyObject *st_symbols; /* dictionary of symbol table entries */ @@ -40,7 +41,7 @@ typedef struct _symtable_entry { PyObject *ste_children; /* list of child ids */ int ste_type; /* module, class, or function */ int ste_lineno; /* first line of scope */ - int ste_optimized; /* true if namespace is optimized */ + int ste_optimized; /* true if namespace can't be optimized */ int ste_nested; /* true if scope is nested */ int ste_child_free; /* true if a child scope has free variables, including free refs to globals */ @@ -84,6 +85,10 @@ DL_IMPORT(void) PySymtable_Free(struct symtable *); #define FREE 4 #define CELL 5 +#define OPT_IMPORT_STAR 1 +#define OPT_EXEC 2 +#define OPT_BARE_EXEC 4 + #ifdef __cplusplus } #endif |