[Python-Dev] 'fast locals' in Python 2.5

Thomas Wouters thomas at python.org
Wed Jun 7 02:07:48 CEST 2006


I just submitted http://python.org/sf/1501934 and assigned it to Neal so it
doesn't get forgotten before 2.5 goes out ;) It seems Python 2.5 compiles
the following code incorrectly:
>>> g = 1
>>> def f1():
... g += 1
...
>>> f1()
>>> g
2
It looks like the compiler is not seeing augmented assignment as creating a
local name, as this fails properly:
>>> def f2():
... g += 1
... g = 5
...
>>> f2()
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 File "<stdin>", line 2, in f2
UnboundLocalError: local variable 'g' referenced before assignment
The dis.dis output confirms this:
>>> dis.dis(f1)
 1 0 LOAD_GLOBAL 0 (g)
 3 LOAD_CONST 1 (1)
 6 INPLACE_ADD
 7 STORE_GLOBAL 0 (g)
 10 LOAD_CONST 0 (None)
 13 RETURN_VALUE
If anyone feels like fixing it and happens to remember where the new
compiler does the fast-locals optimization (I recall a few people were
working on extra optimizations and all), please do :-) (I can probably look
at it before 2.5 if no one else does, though.) It may be a good idea to
check for more such cornercases while we're at it (but I couldn't find any
in the fast-locals bit.)
-- 
Thomas Wouters <thomas at python.org>
Hi! I'm a .signature virus! copy me into your .signature file to help me
spread!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.python.org/pipermail/python-dev/attachments/20060607/d79597bd/attachment.html 


More information about the Python-Dev mailing list

AltStyle によって変換されたページ (->オリジナル) /