]> granicus.if.org Git - python/commit
Fix core dump in example from Samuele Pedroni:
authorJeremy Hylton <jeremy@alum.mit.edu>
Thu, 1 Mar 2001 06:09:34 +0000 (06:09 +0000)
committerJeremy Hylton <jeremy@alum.mit.edu>
Thu, 1 Mar 2001 06:09:34 +0000 (06:09 +0000)
commit7889107be7cb5a28aabcdfa33778bdce3e9b5c27
tree5fd51200881acad3410e05b2eb52e7204e23a8ec
parenta52e8fe49a625d13d89967bc17adeb71520bf3d0
Fix core dump in example from Samuele Pedroni:

from __future__ import nested_scopes
x=7
def f():
    x=1
    def g():
        global x
        def i():
            def h():
                return x
            return h()
        return i()
    return g()

print f()
print x

This kind of code didn't work correctly because x was treated as free
in i, leading to an attempt to load x in g to make a closure for i.

Solution is to make global decl apply to nested scopes unless their is
an assignment.  Thus, x in h is global.
Python/compile.c