[ python-Bugs-1166714 ] [ast branch] fatal error when compiling test_bool.py

SourceForge.net noreply at sourceforge.net
Tue Apr 19 07:26:58 CEST 2005


Bugs item #1166714, was opened at 2005-03-19 16:14
Message generated for change (Comment added) made by bcannon
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1166714&group_id=5470

Category: Parser/Compiler
Group: AST
Status: Open
Resolution: None
Priority: 5
Submitted By: John Ehresman (jpe)
Assigned to: Brett Cannon (bcannon)
Summary: [ast branch] fatal error when compiling test_bool.py

Initial Comment:
When using the ast-branch compiler, python exits with a
fatal error when compiling test_bool.py or the
symplified test case that I'll attach.

The immediate problem is that when the compiler is in
make_closure after compiling the lambda, self is found
to be a LOCAL reference type and make_closure assumes
it's a FREE reference if it's not a CELL reference in
the enclosing scope.

I don't know if self is supposed to be a LOCAL
reference or if make_closure should handle LOCAL
references.



----------------------------------------------------------------------

>Comment By: Brett Cannon (bcannon)
Date: 2005-04-18 22:26

Message:
Logged In: YES 
user_id=357491

John, on line 45 of the patch, which becomes line 580 in
Python/symtable.c, you call PyDict_Update() with three
arguments.  Is 'local' supposed to be an argument, or is
'free' the erroneous one?

If I change it so that 'local' is removed then the tests die
on test_unicode (although a ton of other tests fail).

----------------------------------------------------------------------

Comment By: John Ehresman (jpe)
Date: 2005-03-22 17:22

Message:
Logged In: YES 
user_id=22785

Forgot to add the patch

----------------------------------------------------------------------

Comment By: John Ehresman (jpe)
Date: 2005-03-22 17:21

Message:
Logged In: YES 
user_id=22785

The attached patch seems to fix this by creating a
dictionary for each scope's free vars and only propagating
up the ones that aren't satisfied by a binding.  With this
and the other patches, the test suite runs w/o segfaulting
up through test_unicode.

----------------------------------------------------------------------

Comment By: John Ehresman (jpe)
Date: 2005-03-22 13:37

Message:
Logged In: YES 
user_id=22785

The issue seems to be that in symtable_analyze, a free
dictionary is created for the entire module and if a name is
found to be free in any function, it is not converted from a
LOCAL to a CELL is any context seen afterwards.  I think the
free variables need to be recorded on a function-by-function
basis.

  

----------------------------------------------------------------------

Comment By: Brett Cannon (bcannon)
Date: 2005-03-22 12:34

Message:
Logged In: YES 
user_id=357491

An short example of the failure::

 def outer(a):
    def first(): a
    def last(a): pass

This leads to a fatal Python error.  The issue is having a being a local or 
parameter (can make 'a' be 'a = 1' and not a parameter and still have it 
fail), the first closure reference it, and then the second one use it as a 
parameter.

----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1166714&group_id=5470


More information about the Python-bugs-list mailing list