This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author ggenellina
Recipients benjamin.peterson, ezio.melotti, ggenellina
Date 2009-11-16.09:38:26
SpamBayes Score 6.0118515e-07
Marked as misclassified No
Message-id <1258364308.08.0.597319937904.issue7329@psf.upfronthosting.co.za>
In-reply-to
Content
The compiler doesn't know how the code is going to be used apart from 
the "mode" parameter:

py> c=compile("x=1","","exec")
py> import dis
py> dis.dis(c)
  1           0 LOAD_CONST               0 (1)
              3 STORE_NAME               0 (x)
              6 LOAD_CONST               1 (None)
              9 RETURN_VALUE
py> c=compile("global x; x=1","","exec")
py> dis.dis(c)
  1           0 LOAD_CONST               0 (1)
              3 STORE_GLOBAL             0 (x)
              6 LOAD_CONST               1 (None)
              9 RETURN_VALUE

The generated code is different, and I may exec it at global or local 
scope, with different results. 

compile would require a new mode, different from "exec", to 
mean "compile this as a module at global scope; forbid global 
statements"

If not, this would become invalid:

def foo():
  c=compile("global x; x=1","","exec")
  exec c

since -at the compile phase- the code is indistinghishable from a 
module.

Also, since PEP3003 has been approved (moratorium), language changes 
like this will have to wait a few years.
History
Date User Action Args
2009-11-16 09:38:28ggenellinasetrecipients: + ggenellina, benjamin.peterson, ezio.melotti
2009-11-16 09:38:28ggenellinasetmessageid: <1258364308.08.0.597319937904.issue7329@psf.upfronthosting.co.za>
2009-11-16 09:38:26ggenellinalinkissue7329 messages
2009-11-16 09:38:26ggenellinacreate