diff -r 151cab576cab Doc/reference/executionmodel.rst --- a/Doc/reference/executionmodel.rst Fri Apr 24 00:40:51 2015 +0300 +++ b/Doc/reference/executionmodel.rst Fri Apr 24 13:33:26 2015 +0100 @@ -161,10 +161,6 @@ 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 -r 151cab576cab Python/symtable.c --- a/Python/symtable.c Fri Apr 24 00:40:51 2015 +0300 +++ b/Python/symtable.c Fri Apr 24 13:33:26 2015 +0100 @@ -583,35 +583,6 @@ 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 @@ 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)