Commit d403c453 authored by Neil Schemenauer's avatar Neil Schemenauer

Fix arigo's funky LOAD_NAME bug: implicit globals inside classes have

historically been looked up using LOAD_NAME, not LOAD_GLOBAL.
looked up by LOAD_NAME, not
parent ac699efa
......@@ -440,6 +440,15 @@ vereq(test(6)(2), 8)
x = -1
vereq(test(3)(2), 5)
looked_up_by_load_name = False
class X:
# Implicit globals inside classes are be looked up by LOAD_NAME, not
# LOAD_GLOBAL.
locals()['looked_up_by_load_name'] = True
passed = looked_up_by_load_name
verify(X.passed)
print "18. verify that locals() works"
def f(x):
......
......@@ -2731,7 +2731,8 @@ compiler_nameop(struct compiler *c, identifier name, expr_context_ty ctx)
optype = OP_FAST;
break;
case GLOBAL_IMPLICIT:
if (!c->u->u_ste->ste_unoptimized)
if (c->u->u_ste->ste_type == FunctionBlock &&
!c->u->u_ste->ste_unoptimized)
optype = OP_GLOBAL;
break;
case GLOBAL_EXPLICIT:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment