Mercurial > cpython-lru_cache-weakref
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 |
| rev | line source |
|---|---|
| 45906 | 1 # Copyright 2006 Google, Inc. All Rights Reserved. |
| 2 # Licensed to PSF under a Contributor Agreement. | |
| 3 | |
| 4 """Fixer for execfile. | |
| 5 | |
| 6 This converts usages of the execfile function into calls to the built-in | |
| 7 exec() function. | |
| 8 """ | |
| 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 | 13 |
| 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 | 16 |
| 17 PATTERN = """ | |
| 18 power< 'execfile' trailer< '(' arglist< filename=any [',' globals=any [',' locals=any ] ] > ')' > > | |
| 19 | | |
| 20 power< 'execfile' trailer< '(' filename=any ')' > > | |
| 21 """ | |
| 22 | |
| 23 def transform(self, node, results): | |
| 24 assert results | |
| 25 filename = results["filename"] | |
| 26 globals = results.get("globals") | |
| 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 | 47 if globals is not None: |
| 48 args.extend([Comma(), globals.clone()]) | |
| 49 if locals is not None: | |
| 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()) |
