mirror of
https://github.com/python/cpython.git
synced 2025-09-26 10:19:53 +00:00
Warn about global statement at the module level.
Do better accounting for global variables.
This commit is contained in:
parent
56ba72a563
commit
c176132d63
1 changed files with 17 additions and 2 deletions
|
@ -4178,7 +4178,7 @@ symtable_check_shadow(struct symtable *st, PyObject *name, int flags)
|
||||||
{
|
{
|
||||||
char buf[500];
|
char buf[500];
|
||||||
PyObject *children, *v;
|
PyObject *children, *v;
|
||||||
PySymtableEntryObject *child;
|
PySymtableEntryObject *child = NULL;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (!(flags & DEF_BOUND))
|
if (!(flags & DEF_BOUND))
|
||||||
|
@ -4202,7 +4202,9 @@ symtable_check_shadow(struct symtable *st, PyObject *name, int flags)
|
||||||
if (!(cflags & DEF_BOUND))
|
if (!(cflags & DEF_BOUND))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
assert(child != NULL);
|
||||||
|
|
||||||
sprintf(buf, "local name '%.100s' in '%.100s' shadows "
|
sprintf(buf, "local name '%.100s' in '%.100s' shadows "
|
||||||
"use of '%.100s' as global in nested scope '%.100s'",
|
"use of '%.100s' as global in nested scope '%.100s'",
|
||||||
PyString_AS_STRING(name),
|
PyString_AS_STRING(name),
|
||||||
|
@ -4328,6 +4330,10 @@ symtable_load_symbols(struct compiling *c)
|
||||||
if (PyDict_SetItem(c->c_globals, name,
|
if (PyDict_SetItem(c->c_globals, name,
|
||||||
implicit) < 0)
|
implicit) < 0)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
v = PyInt_FromLong(flags);
|
||||||
|
if (PyDict_SetItem(st->st_global, name, v))
|
||||||
|
goto fail;
|
||||||
|
Py_DECREF(v);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4360,6 +4366,7 @@ symtable_init()
|
||||||
st->st_nscopes = 0;
|
st->st_nscopes = 0;
|
||||||
st->st_errors = 0;
|
st->st_errors = 0;
|
||||||
st->st_tmpname = 0;
|
st->st_tmpname = 0;
|
||||||
|
st->st_global_star = 0;
|
||||||
st->st_private = NULL;
|
st->st_private = NULL;
|
||||||
return st;
|
return st;
|
||||||
fail:
|
fail:
|
||||||
|
@ -4922,6 +4929,12 @@ symtable_global(struct symtable *st, node *n)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
if (st->st_nscopes == 1) {
|
||||||
|
if (symtable_warn(st,
|
||||||
|
"global statement has no meaning at module level") < 0)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 1; i < NCH(n); i += 2) {
|
for (i = 1; i < NCH(n); i += 2) {
|
||||||
char *name = STR(CHILD(n, i));
|
char *name = STR(CHILD(n, i));
|
||||||
int flags;
|
int flags;
|
||||||
|
@ -4991,6 +5004,8 @@ symtable_import(struct symtable *st, node *n)
|
||||||
}
|
}
|
||||||
if (TYPE(CHILD(n, 3)) == STAR) {
|
if (TYPE(CHILD(n, 3)) == STAR) {
|
||||||
st->st_cur->ste_optimized |= OPT_IMPORT_STAR;
|
st->st_cur->ste_optimized |= OPT_IMPORT_STAR;
|
||||||
|
if (st->st_nscopes == 1)
|
||||||
|
st->st_global_star = 1;
|
||||||
} else {
|
} else {
|
||||||
for (i = 3; i < NCH(n); i += 2) {
|
for (i = 3; i < NCH(n); i += 2) {
|
||||||
node *c = CHILD(n, i);
|
node *c = CHILD(n, i);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue