[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