diff options
-rw-r--r-- | Doc/reference/executionmodel.rst | 4 | ||||
-rw-r--r-- | Python/symtable.c | 31 |
2 files changed, 0 insertions, 35 deletions
diff --git a/Doc/reference/executionmodel.rst b/Doc/reference/executionmodel.rst index a3948e3..6309e59 100644 --- a/Doc/reference/executionmodel.rst +++ b/Doc/reference/executionmodel.rst @@ -161,10 +161,6 @@ conjunction with nested scopes that contain free variables. If a variable is referenced in an enclosing scope, it is illegal to delete the name. An error will be reported at compile time. -If the wild card form of import --- ``import *`` --- is used in a function and -the function contains or is a nested block with free variables, the compiler -will raise a :exc:`SyntaxError`. - .. XXX from * also invalid with relative imports (at least currently) The :func:`eval` and :func:`exec` functions do not have access to the full diff --git a/Python/symtable.c b/Python/symtable.c index da164aa..9512673 100644 --- a/Python/symtable.c +++ b/Python/symtable.c @@ -583,35 +583,6 @@ drop_class_free(PySTEntryObject *ste, PyObject *free) return 1; } -/* Check for illegal statements in unoptimized namespaces */ -static int -check_unoptimized(const PySTEntryObject* ste) { - const char* trailer; - - if (ste->ste_type != FunctionBlock || !ste->ste_unoptimized - || !(ste->ste_free || ste->ste_child_free)) - return 1; - - trailer = (ste->ste_child_free ? - "contains a nested function with free variables" : - "is a nested function"); - - switch (ste->ste_unoptimized) { - case OPT_TOPLEVEL: /* import * at top-level is fine */ - return 1; - case OPT_IMPORT_STAR: - PyErr_Format(PyExc_SyntaxError, - "import * is not allowed in function '%U' because it %s", - ste->ste_name, trailer); - break; - } - - PyErr_SyntaxLocationObject(ste->ste_table->st_filename, - ste->ste_opt_lineno, - ste->ste_opt_col_offset); - return 0; -} - /* Enter the final scope information into the ste_symbols dict. * * All arguments are dicts. Modifies symbols, others are read-only. @@ -854,8 +825,6 @@ analyze_block(PySTEntryObject *ste, PyObject *bound, PyObject *free, if (!update_symbols(ste->ste_symbols, scopes, bound, newfree, ste->ste_type == ClassBlock)) goto error; - if (!check_unoptimized(ste)) - goto error; temp = PyNumber_InPlaceOr(free, newfree); if (!temp) |