2013/4/27 Nick Coghlan <ncogh...@gmail.com>:
> 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

You could still get the same "bug" in Python 2 by messing with
locals() in a class within a function.


--
Regards,
Benjamin
_______________________________________________
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