Mercurial > cpython-lru_cache-weakref
annotate Lib/lib2to3/fixes/fix_exitfunc.py @ 79675:c0a2294de787 2.7
Issue #16199: Backport 2to3 typo fix from 3.2.
| author | Chris Jerdonek <chris.jerdonek@gmail.com> |
|---|---|
| date | Thu, 11 Oct 2012 16:15:46 -0700 |
| parents | 7d1e453b120b |
| children |
| rev | line source |
|---|---|
|
59920
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
1 """ |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
2 Convert use of sys.exitfunc to use the atexit module. |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
3 """ |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
4 |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
5 # Author: Benjamin Peterson |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
6 |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
7 from lib2to3 import pytree, fixer_base |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
8 from lib2to3.fixer_util import Name, Attr, Call, Comma, Newline, syms |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
9 |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
10 |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
11 class FixExitfunc(fixer_base.BaseFix): |
|
65340
7d1e453b120b
Merged revisions 83852-83853,83857,84042,84216,84274-84276,84375,85388,85478,85506-85508 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59936
diff
changeset
|
12 keep_line_order = True |
|
7d1e453b120b
Merged revisions 83852-83853,83857,84042,84216,84274-84276,84375,85388,85478,85506-85508 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59936
diff
changeset
|
13 BM_compatible = True |
|
59920
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
14 |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
15 PATTERN = """ |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
16 ( |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
17 sys_import=import_name<'import' |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
18 ('sys' |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
19 | |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
20 dotted_as_names< (any ',')* 'sys' (',' any)* > |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
21 ) |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
22 > |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
23 | |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
24 expr_stmt< |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
25 power< 'sys' trailer< '.' 'exitfunc' > > |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
26 '=' func=any > |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
27 ) |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
28 """ |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
29 |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
30 def __init__(self, *args): |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
31 super(FixExitfunc, self).__init__(*args) |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
32 |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
33 def start_tree(self, tree, filename): |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
34 super(FixExitfunc, self).start_tree(tree, filename) |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
35 self.sys_import = None |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
36 |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
37 def transform(self, node, results): |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
38 # First, find a the sys import. We'll just hope it's global scope. |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
39 if "sys_import" in results: |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
40 if self.sys_import is None: |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
41 self.sys_import = results["sys_import"] |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
42 return |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
43 |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
44 func = results["func"].clone() |
|
59936
12ee46435d01
Merged revisions 79313,79324 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59924
diff
changeset
|
45 func.prefix = u"" |
|
59920
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
46 register = pytree.Node(syms.power, |
|
59936
12ee46435d01
Merged revisions 79313,79324 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59924
diff
changeset
|
47 Attr(Name(u"atexit"), Name(u"register")) |
|
59920
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
48 ) |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
49 call = Call(register, [func], node.prefix) |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
50 node.replace(call) |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
51 |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
52 if self.sys_import is None: |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
53 # That's interesting. |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
54 self.warning(node, "Can't find sys import; Please add an atexit " |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
55 "import at the top of your file.") |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
56 return |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
57 |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
58 # Now add an atexit import after the sys import. |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
59 names = self.sys_import.children[1] |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
60 if names.type == syms.dotted_as_names: |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
61 names.append_child(Comma()) |
|
59936
12ee46435d01
Merged revisions 79313,79324 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59924
diff
changeset
|
62 names.append_child(Name(u"atexit", u" ")) |
|
59920
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
63 else: |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
64 containing_stmt = self.sys_import.parent |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
65 position = containing_stmt.children.index(self.sys_import) |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
66 stmt_container = containing_stmt.parent |
|
59924
8f016a801642
Merged revisions 79309 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59920
diff
changeset
|
67 new_import = pytree.Node(syms.import_name, |
|
59936
12ee46435d01
Merged revisions 79313,79324 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59924
diff
changeset
|
68 [Name(u"import"), Name(u"atexit", u" ")] |
|
59920
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
69 ) |
|
59936
12ee46435d01
Merged revisions 79313,79324 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59924
diff
changeset
|
70 new = pytree.Node(syms.simple_stmt, [new_import]) |
|
59920
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
71 containing_stmt.insert_child(position + 1, Newline()) |
|
0a123cded2c9
Merged revisions 79077,79137,79304-79305 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
72 containing_stmt.insert_child(position + 2, new) |
