summaryrefslogtreecommitdiffstats
path: root/Python/symtable.c
diff options
context:
space:
mode:
authorBenjamin Peterson <benjamin@python.org>2010-07-20 22:37:19 (GMT)
committerBenjamin Peterson <benjamin@python.org>2010-07-20 22:37:19 (GMT)
commit013783c529cfc459d05d261f5053ad7bf7d88c29 (patch)
tree14e1b8205a78e85d9ba688f315cf89f82aad3a20 /Python/symtable.c
parent533a167a713be4a30b92583636cd2323f4c8c3aa (diff)
downloadcpython-013783c529cfc459d05d261f5053ad7bf7d88c29.zip
cpython-013783c529cfc459d05d261f5053ad7bf7d88c29.tar.gz
cpython-013783c529cfc459d05d261f5053ad7bf7d88c29.tar.bz2
move test_trace.py so as not to conflict with future tests for the trace module
Diffstat (limited to 'Python/symtable.c')
-rw-r--r--Python/symtable.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/Python/symtable.c b/Python/symtable.c
index 55c9f47..37bdf2a 100644
--- a/Python/symtable.c
+++ b/Python/symtable.c
@@ -432,7 +432,14 @@ analyze_name(PySTEntryObject *ste, PyObject *scopes, PyObject *name, long flags,
return PySet_Add(free, name) >= 0;
}
if (flags & DEF_BOUND) {
- SET_SCOPE(scopes, name, LOCAL);
+ if (ste->ste_type == ClassBlock &&
+ !(flags & DEF_PARAM) &&
+ bound && PySet_Contains(bound, name)) {
+ SET_SCOPE(scopes, name, LOCAL_ONLY);
+ }
+ else {
+ SET_SCOPE(scopes, name, LOCAL);
+ }
if (PySet_Add(local, name) < 0)
return 0;
if (PySet_Discard(global, name) < 0)
@@ -489,7 +496,7 @@ analyze_cells(PyObject *scopes, PyObject *free, const char *restricted)
long scope;
assert(PyLong_Check(v));
scope = PyLong_AS_LONG(v);
- if (scope != LOCAL)
+ if (scope != LOCAL && scope != LOCAL_ONLY)
continue;
if (!PySet_Contains(free, name))
continue;