On Sun, Apr 28, 2013 at 11:38 AM, Benjamin Peterson <benja...@python.org> wrote: > 2013/4/27 Nick Coghlan <ncogh...@gmail.com>: >> >> On 28 Apr 2013 04:30, "Ethan Furman" <et...@stoneleaf.us> wrote: >>> >>> I filed bug http://bugs.python.org/issue17853 last night. >>> >>> If somebody could point me in the right direction (mainly which files to >>> look in), I'd be happy to attempt a patch. >> >> Hmm, interesting challenge. A key part of the problem is that the 3.x >> compiler assumes there's no way to inject names it doesn't know about into >> code inside a function - we missed the fact that you could still do it with >> a nested class and a metaclass __prepare__ method. > > That's not the problem. You can't inject names dynamically into a > function scope with variables in a class scope, since nothing closes > over them.
Yeah, what I wrote didn't quite capture what I meant: - in Python 2.x, using LOAD_DEREF when a nested class body references a lexically scoped name is correct - in Python 3.x, it is no longer correct, because __prepare__ may inject additional names that the compiler doesn't know about Previously, the compiler new just as much about the nested class namespaces as it did about the function locals. Cheers, Nick. -- Nick Coghlan | ncogh...@gmail.com | Brisbane, Australia _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com