summaryrefslogtreecommitdiffstats
path: root/Python
diff options
context:
space:
mode:
Diffstat (limited to 'Python')
-rw-r--r--Python/compile.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/Python/compile.c b/Python/compile.c
index 3624936..5de2362 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -4853,6 +4853,35 @@ symtable_global(struct symtable *st, node *n)
for (i = 1; i < NCH(n); i += 2) {
char *name = STR(CHILD(n, i));
+ int flags;
+
+ flags = symtable_lookup(st, name);
+ if (flags && flags != DEF_GLOBAL) {
+ char buf[500];
+ if (flags & DEF_PARAM) {
+ PyErr_Format(PyExc_SyntaxError,
+ "name '%.400s' is local and global",
+ PyString_AS_STRING(name));
+ set_error_location(st->st_filename,
+ st->st_cur->ste_lineno);
+ st->st_errors++;
+ return;
+ } else if (flags & DEF_LOCAL) {
+ sprintf(buf, GLOBAL_AFTER_ASSIGN, name);
+ if (PyErr_Warn(PyExc_SyntaxWarning,
+ buf) < 0) {
+ /* XXX set line number? */
+ st->st_errors++;
+ }
+ } else {
+ sprintf(buf, GLOBAL_AFTER_USE, name);
+ if (PyErr_Warn(PyExc_SyntaxWarning,
+ buf) < 0) {
+ /* XXX set line number? */
+ st->st_errors++;
+ }
+ }
+ }
symtable_add_def(st, name, DEF_GLOBAL);
}
}