[ python-Bugs-1333982 ] Bugs of the new AST compiler
SourceForge.net
noreply at sourceforge.net
Sat Oct 22 09:16:30 CEST 2005
Bugs item #1333982, was opened at 2005-10-21 03:08
Message generated for change (Settings changed) made by nnorwitz
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1333982&group_id=5470
Please note that this message will contain a full copy of the comment thread,
including the initial issue submission, for this request,
not just the latest update.
Category: Parser/Compiler
Group: AST
Status: Open
Resolution: None
Priority: 5
Submitted By: Armin Rigo (arigo)
>Assigned to: Neil Schemenauer (nascheme)
Summary: Bugs of the new AST compiler
Initial Comment:
The newly merged AST branch is likely to expose
a number of small problems before it stabilizes,
so here is a tentative bug tracker entry to
collect such small problems.
----------------------------------------------------------------------
Comment By: Armin Rigo (arigo)
Date: 2005-10-21 05:45
Message:
Logged In: YES
user_id=4771
The following (similarly strange-looking) code snippets
compiled successfully before, now they give SyntaxErrors:
--------------------
def f():
class g:
exec "hi"
x
--------------------
def f(x):
class g:
exec "hi"
x
--------------------
def f():
class g:
from a import *
x
--------------------
def f(x):
class g:
from a import *
x
----------------------------------------------------------------------
Comment By: Armin Rigo (arigo)
Date: 2005-10-21 05:33
Message:
Logged In: YES
user_id=4771
I would suspect the following one to be due to incorrect
handling of EXTENDED_ARG -- it's from a PyPy test about that:
longexpr = 'x = x or ' + '-x' * 2500
code = '''
def f(x):
%s
%s
%s
%s
%s
%s
%s
%s
%s
%s
while x:
x -= 1
# EXTENDED_ARG/JUMP_ABSOLUTE here
return x
''' % ((longexpr,)*10)
exec code
f(5)
SystemError: unknown opcode
dis.dis() shows that the target of both the SETUP_LOOP and
the JUMP_IF_FALSE at the start of the loop are wrong.
----------------------------------------------------------------------
Comment By: Armin Rigo (arigo)
Date: 2005-10-21 05:15
Message:
Logged In: YES
user_id=4771
The Python rules about which names get mangled are a bit
insane. I share mwh's view that mangling should never have
been invented in the first place, but well:
>>> def f():
... __x = 5
... class X:
... def g(self):
... return __x
... return X
...
Fatal Python error: unknown scope for _X__x in X(135832776)
in <stdin>
----------------------------------------------------------------------
Comment By: Armin Rigo (arigo)
Date: 2005-10-21 05:01
Message:
Logged In: YES
user_id=4771
For reference, an optimization that got lost:
def f():
'a'
'b'
'a' is the docstring, but the 'b' previously did not show
up anywhere in the code object. Now there is the
LOAD_CONST/POP_TOP pair.
----------------------------------------------------------------------
Comment By: Armin Rigo (arigo)
Date: 2005-10-21 04:54
Message:
Logged In: YES
user_id=4771
any reason why lambda functions have a __name__ of
'lambda' now instead of '<lambda>' ?
----------------------------------------------------------------------
Comment By: Armin Rigo (arigo)
Date: 2005-10-21 03:22
Message:
Logged In: YES
user_id=4771
import a as b, c
the 'c' part gets completely forgotten and there is
no 'IMPORT_NAME c' in the bytecode.
----------------------------------------------------------------------
Comment By: Armin Rigo (arigo)
Date: 2005-10-21 03:13
Message:
Logged In: YES
user_id=4771
A scoping problem (comparing with the old compiler):
class X:
print hello
The variable 'hello' is incorrectly looked up with
LOAD_GLOBAL instead of LOAD_NAME. It causes a crash
in PyPy in a case where the name 'hello' is stored
into the class implicitely (via locals()). It can
probably be discussed if the bug is in PyPy, but it
is a difference in behavior.
----------------------------------------------------------------------
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1333982&group_id=5470
More information about the Python-bugs-list
mailing list