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

Reply via email to