annotate Lib/lib2to3/fixes/fix_execfile.py @ 54294:dba767bc3155 legacy-trunk

remove mention of old ctypes version
author Benjamin Peterson <benjamin@python.org>
date Sat, 23 May 2009 20:59:09 +0000
parents 119e4323400d
children 7700408f65fc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
45906
302625fa6a2a Import lib2to3.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1 # Copyright 2006 Google, Inc. All Rights Reserved.
302625fa6a2a Import lib2to3.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
2 # Licensed to PSF under a Contributor Agreement.
302625fa6a2a Import lib2to3.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
3
302625fa6a2a Import lib2to3.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
4 """Fixer for execfile.
302625fa6a2a Import lib2to3.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
5
302625fa6a2a Import lib2to3.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
6 This converts usages of the execfile function into calls to the built-in
302625fa6a2a Import lib2to3.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
7 exec() function.
302625fa6a2a Import lib2to3.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
8 """
302625fa6a2a Import lib2to3.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
9
47726
4e304aded7a8 Merged revisions 64286 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 45906
diff changeset
10 from .. import fixer_base
50489
7934723f7dc4 Merged revisions 68198 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47726
diff changeset
11 from ..fixer_util import (Comma, Name, Call, LParen, RParen, Dot, Node,
7934723f7dc4 Merged revisions 68198 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47726
diff changeset
12 ArgList, String, syms)
45906
302625fa6a2a Import lib2to3.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
13
302625fa6a2a Import lib2to3.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
14
47726
4e304aded7a8 Merged revisions 64286 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 45906
diff changeset
15 class FixExecfile(fixer_base.BaseFix):
45906
302625fa6a2a Import lib2to3.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
16
302625fa6a2a Import lib2to3.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
17 PATTERN = """
302625fa6a2a Import lib2to3.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
18 power< 'execfile' trailer< '(' arglist< filename=any [',' globals=any [',' locals=any ] ] > ')' > >
302625fa6a2a Import lib2to3.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
19 |
302625fa6a2a Import lib2to3.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
20 power< 'execfile' trailer< '(' filename=any ')' > >
302625fa6a2a Import lib2to3.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
21 """
302625fa6a2a Import lib2to3.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
22
302625fa6a2a Import lib2to3.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
23 def transform(self, node, results):
302625fa6a2a Import lib2to3.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
24 assert results
302625fa6a2a Import lib2to3.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
25 filename = results["filename"]
302625fa6a2a Import lib2to3.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
26 globals = results.get("globals")
302625fa6a2a Import lib2to3.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
27 locals = results.get("locals")
50489
7934723f7dc4 Merged revisions 68198 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47726
diff changeset
28
7934723f7dc4 Merged revisions 68198 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47726
diff changeset
29 # Copy over the prefix from the right parentheses end of the execfile
7934723f7dc4 Merged revisions 68198 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47726
diff changeset
30 # call.
7934723f7dc4 Merged revisions 68198 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47726
diff changeset
31 execfile_paren = node.children[-1].children[-1].clone()
7934723f7dc4 Merged revisions 68198 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47726
diff changeset
32 # Construct open().read().
7934723f7dc4 Merged revisions 68198 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47726
diff changeset
33 open_args = ArgList([filename.clone()], rparen=execfile_paren)
53934
119e4323400d Merged revisions 72491-72493 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50489
diff changeset
34 open_call = Node(syms.power, [Name(u"open"), open_args])
119e4323400d Merged revisions 72491-72493 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50489
diff changeset
35 read = [Node(syms.trailer, [Dot(), Name(u'read')]),
50489
7934723f7dc4 Merged revisions 68198 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47726
diff changeset
36 Node(syms.trailer, [LParen(), RParen()])]
7934723f7dc4 Merged revisions 68198 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47726
diff changeset
37 open_expr = [open_call] + read
7934723f7dc4 Merged revisions 68198 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47726
diff changeset
38 # Wrap the open call in a compile call. This is so the filename will be
7934723f7dc4 Merged revisions 68198 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47726
diff changeset
39 # preserved in the execed code.
7934723f7dc4 Merged revisions 68198 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47726
diff changeset
40 filename_arg = filename.clone()
53934
119e4323400d Merged revisions 72491-72493 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50489
diff changeset
41 filename_arg.set_prefix(u" ")
119e4323400d Merged revisions 72491-72493 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50489
diff changeset
42 exec_str = String(u"'exec'", u" ")
50489
7934723f7dc4 Merged revisions 68198 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47726
diff changeset
43 compile_args = open_expr + [Comma(), filename_arg, Comma(), exec_str]
53934
119e4323400d Merged revisions 72491-72493 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50489
diff changeset
44 compile_call = Call(Name(u"compile"), compile_args, u"")
50489
7934723f7dc4 Merged revisions 68198 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47726
diff changeset
45 # Finally, replace the execfile call with an exec call.
7934723f7dc4 Merged revisions 68198 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47726
diff changeset
46 args = [compile_call]
45906
302625fa6a2a Import lib2to3.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
47 if globals is not None:
302625fa6a2a Import lib2to3.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
48 args.extend([Comma(), globals.clone()])
302625fa6a2a Import lib2to3.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
49 if locals is not None:
302625fa6a2a Import lib2to3.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
50 args.extend([Comma(), locals.clone()])
53934
119e4323400d Merged revisions 72491-72493 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50489
diff changeset
51 return Call(Name(u"exec"), args, prefix=node.get_prefix())