Message28929
The 2.5 compiler forgets how to count linenumbers in
certain situations:
>>> s255 = "".join(["\n"] * 255 + ["spam"])
>>> s256 = "".join(["\n"] * 256 + ["spam"])
>>> exec s255
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 256, in <module>
NameError: name 'spam' is not defined
>>> exec s256
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>
NameError: name 'spam' is not defined
Notice the 'line 1' linenumber in the case of 256 blank
lines. The same happens for 'pass' statements or 'if 0'
blocks instead of blank lines. The problem is in the
actual code objects created:
>>> dis.disco(compile(s255, "", "exec"))
256 0 LOAD_NAME 0 (spam)
3 POP_TOP
4 LOAD_CONST 0 (None)
7 RETURN_VALUE
>>> dis.disco(compile(s256, "", "exec"))
1 0 LOAD_NAME 0 (spam)
3 POP_TOP
4 LOAD_CONST 0 (None)
7 RETURN_VALUE
|
|
| Date |
User |
Action |
Args |
| 2007-08-23 14:40:51 | admin | link | issue1512814 messages |
| 2007-08-23 14:40:51 | admin | create | |
|