Bugs item #1186195, was opened at 2005-04-19 12:02
Message generated for change (Comment added) made by bcannon
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1186195&group_id=5470
Category: Parser/Compiler
Group: AST
Status: Open
Resolution: None
Priority: 5
Submitted By: Brett Cannon (bcannon)
Assigned to: Nick Coghlan (ncoghlan)
Summary: [AST] genexps get scoping wrong
Initial Comment:
test_genexps is failing because it is unable to find a
global defined in a genexp that is returned. Here is
the problem simplified:
def f(n): return (i for i in xrange(n))
list(f(10))
Leads to ``SystemError: no locals when loading 'xrange'``.
Comparing Python 2.4 bytecode:
1 0 LOAD_CONST 1 (<code
object <generator expression> at 0x3931e0, file
"<stdin>", line 1>)
3 MAKE_FUNCTION 0
6 LOAD_GLOBAL 0 (xrange)
9 LOAD_FAST 0 (n)
12 CALL_FUNCTION 1
15 GET_ITER
16 CALL_FUNCTION 1
19 RETURN_VALUE
20 LOAD_CONST 0 (None)
23 RETURN_VALUE
to AST bytecode:
1 0 LOAD_CLOSURE 0 (n)
3 BUILD_TUPLE 1
6 LOAD_CONST 1 (<code
object <generator expression> at 0x5212e8, file
"<stdin>", line 1>)
9 MAKE_CLOSURE 0
12 LOAD_NAME 0 (xrange)
15 LOAD_DEREF 0 (n)
18 CALL_FUNCTION 1
21 GET_ITER
22 CALL_FUNCTION 1
25 RETURN_VALUE
26 LOAD_CONST 0 (None)
29 RETURN_VALUE
makes it obvious something is off (no peepholer; turned
it off in my build of 2.4).
Looks like extraneous work is being done in making a
closure. Seems like it will still work, though.
Plus the usage of LOAD_NAME is wrong in the AST;
LOAD_NAME gets an object from the local namespace based
on its name instead of offset.
----------------------------------------------------------------------
>Comment By: Brett Cannon (bcannon)
Date: 2005-04-19 12:03
Message:
Logged In: YES
user_id=357491
Initially assigned to Nick since he did the genexp patch and
in hopes he might know what is going on off the top of his
head. Otherwise assign to me.
I have a sneaking suspicion that the symtable code overall
is slightly busted.
----------------------------------------------------------------------
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1186195&group_id=5470
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com