Mercurial > cpython-lru_cache-weakref
annotate Demo/parser/unparse.py @ 80661:94de77bd0b4b 2.7
Issue #16194: document imp.load_dynamic problems
when read several extension modules from the same binary object file.
| author | Andrew Svetlov <andrew.svetlov@gmail.com> |
|---|---|
| date | Thu, 29 Nov 2012 19:51:28 +0200 |
| parents | 9dcc93fe7528 |
| children |
| rev | line source |
|---|---|
|
36723
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
1 "Usage: unparse.py <path to source file>" |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
2 import sys |
|
62653
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
3 import ast |
|
37562
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
4 import cStringIO |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
5 import os |
|
36723
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
6 |
|
62653
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
7 # Large float and imaginary literals get turned into infinities in the AST. |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
8 # We unparse those infinities to INFSTR. |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
9 INFSTR = "1e" + repr(sys.float_info.max_10_exp + 1) |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
10 |
|
41236
9f07d410c555
Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents:
40212
diff
changeset
|
11 def interleave(inter, f, seq): |
|
9f07d410c555
Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents:
40212
diff
changeset
|
12 """Call f on each item in seq, calling inter() in between. |
|
9f07d410c555
Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents:
40212
diff
changeset
|
13 """ |
|
9f07d410c555
Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents:
40212
diff
changeset
|
14 seq = iter(seq) |
|
9f07d410c555
Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents:
40212
diff
changeset
|
15 try: |
|
62653
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
16 f(next(seq)) |
|
41537
019904c64717
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
41236
diff
changeset
|
17 except StopIteration: |
|
41236
9f07d410c555
Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents:
40212
diff
changeset
|
18 pass |
|
9f07d410c555
Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents:
40212
diff
changeset
|
19 else: |
|
9f07d410c555
Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents:
40212
diff
changeset
|
20 for x in seq: |
|
9f07d410c555
Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents:
40212
diff
changeset
|
21 inter() |
|
9f07d410c555
Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents:
40212
diff
changeset
|
22 f(x) |
|
9f07d410c555
Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents:
40212
diff
changeset
|
23 |
|
36723
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
24 class Unparser: |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
25 """Methods in this class recursively traverse an AST and |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
26 output source code for the abstract syntax; original formatting |
|
62653
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
27 is disregarded. """ |
|
36723
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
28 |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
29 def __init__(self, tree, file = sys.stdout): |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
30 """Unparser(tree, file=sys.stdout) -> None. |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
31 Print the source for tree to file.""" |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
32 self.f = file |
|
62653
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
33 self.future_imports = [] |
|
36723
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
34 self._indent = 0 |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
35 self.dispatch(tree) |
|
62653
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
36 self.f.write("") |
|
36723
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
37 self.f.flush() |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
38 |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
39 def fill(self, text = ""): |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
40 "Indent a piece of text, according to the current indentation level" |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
41 self.f.write("\n"+" "*self._indent + text) |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
42 |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
43 def write(self, text): |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
44 "Append a piece of text to the current line." |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
45 self.f.write(text) |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
46 |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
47 def enter(self): |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
48 "Print ':', and increase the indentation." |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
49 self.write(":") |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
50 self._indent += 1 |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
51 |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
52 def leave(self): |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
53 "Decrease the indentation level." |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
54 self._indent -= 1 |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
55 |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
56 def dispatch(self, tree): |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
57 "Dispatcher function, dispatching tree type T to method _T." |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
58 if isinstance(tree, list): |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
59 for t in tree: |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
60 self.dispatch(t) |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
61 return |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
62 meth = getattr(self, "_"+tree.__class__.__name__) |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
63 meth(tree) |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
64 |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
65 |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
66 ############### Unparsing methods ###################### |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
67 # There should be one method per concrete grammar type # |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
68 # Constructors should be grouped by sum type. Ideally, # |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
69 # this would follow the order in the grammar, but # |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
70 # currently doesn't. # |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
71 ######################################################## |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
72 |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
73 def _Module(self, tree): |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
74 for stmt in tree.body: |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
75 self.dispatch(stmt) |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
76 |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
77 # stmt |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
78 def _Expr(self, tree): |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
79 self.fill() |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
80 self.dispatch(tree.value) |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
81 |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
82 def _Import(self, t): |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
83 self.fill("import ") |
|
41236
9f07d410c555
Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents:
40212
diff
changeset
|
84 interleave(lambda: self.write(", "), self.dispatch, t.names) |
|
37569
b7440ab5cd70
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
37562
diff
changeset
|
85 |
|
37562
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
86 def _ImportFrom(self, t): |
|
62653
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
87 # A from __future__ import may affect unparsing, so record it. |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
88 if t.module and t.module == '__future__': |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
89 self.future_imports.extend(n.name for n in t.names) |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
90 |
|
37562
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
91 self.fill("from ") |
|
62653
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
92 self.write("." * t.level) |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
93 if t.module: |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
94 self.write(t.module) |
|
37562
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
95 self.write(" import ") |
|
41236
9f07d410c555
Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents:
40212
diff
changeset
|
96 interleave(lambda: self.write(", "), self.dispatch, t.names) |
|
36723
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
97 |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
98 def _Assign(self, t): |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
99 self.fill() |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
100 for target in t.targets: |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
101 self.dispatch(target) |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
102 self.write(" = ") |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
103 self.dispatch(t.value) |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
104 |
|
36736
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
105 def _AugAssign(self, t): |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
106 self.fill() |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
107 self.dispatch(t.target) |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
108 self.write(" "+self.binop[t.op.__class__.__name__]+"= ") |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
109 self.dispatch(t.value) |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
110 |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
111 def _Return(self, t): |
|
41236
9f07d410c555
Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents:
40212
diff
changeset
|
112 self.fill("return") |
|
36736
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
113 if t.value: |
|
41236
9f07d410c555
Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents:
40212
diff
changeset
|
114 self.write(" ") |
|
36736
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
115 self.dispatch(t.value) |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
116 |
|
37562
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
117 def _Pass(self, t): |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
118 self.fill("pass") |
|
37569
b7440ab5cd70
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
37562
diff
changeset
|
119 |
|
37562
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
120 def _Break(self, t): |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
121 self.fill("break") |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
122 |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
123 def _Continue(self, t): |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
124 self.fill("continue") |
|
37569
b7440ab5cd70
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
37562
diff
changeset
|
125 |
|
37562
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
126 def _Delete(self, t): |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
127 self.fill("del ") |
|
62605
3cb3ce7dcab8
Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
48301
diff
changeset
|
128 interleave(lambda: self.write(", "), self.dispatch, t.targets) |
|
37562
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
129 |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
130 def _Assert(self, t): |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
131 self.fill("assert ") |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
132 self.dispatch(t.test) |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
133 if t.msg: |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
134 self.write(", ") |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
135 self.dispatch(t.msg) |
|
37569
b7440ab5cd70
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
37562
diff
changeset
|
136 |
|
37562
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
137 def _Exec(self, t): |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
138 self.fill("exec ") |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
139 self.dispatch(t.body) |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
140 if t.globals: |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
141 self.write(" in ") |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
142 self.dispatch(t.globals) |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
143 if t.locals: |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
144 self.write(", ") |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
145 self.dispatch(t.locals) |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
146 |
|
36736
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
147 def _Print(self, t): |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
148 self.fill("print ") |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
149 do_comma = False |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
150 if t.dest: |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
151 self.write(">>") |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
152 self.dispatch(t.dest) |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
153 do_comma = True |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
154 for e in t.values: |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
155 if do_comma:self.write(", ") |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
156 else:do_comma=True |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
157 self.dispatch(e) |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
158 if not t.nl: |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
159 self.write(",") |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
160 |
|
37562
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
161 def _Global(self, t): |
|
41236
9f07d410c555
Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents:
40212
diff
changeset
|
162 self.fill("global ") |
|
9f07d410c555
Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents:
40212
diff
changeset
|
163 interleave(lambda: self.write(", "), self.write, t.names) |
|
37562
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
164 |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
165 def _Yield(self, t): |
|
41236
9f07d410c555
Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents:
40212
diff
changeset
|
166 self.write("(") |
|
9f07d410c555
Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents:
40212
diff
changeset
|
167 self.write("yield") |
|
37562
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
168 if t.value: |
|
41236
9f07d410c555
Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents:
40212
diff
changeset
|
169 self.write(" ") |
|
37562
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
170 self.dispatch(t.value) |
|
41236
9f07d410c555
Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents:
40212
diff
changeset
|
171 self.write(")") |
|
37569
b7440ab5cd70
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
37562
diff
changeset
|
172 |
|
37562
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
173 def _Raise(self, t): |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
174 self.fill('raise ') |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
175 if t.type: |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
176 self.dispatch(t.type) |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
177 if t.inst: |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
178 self.write(", ") |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
179 self.dispatch(t.inst) |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
180 if t.tback: |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
181 self.write(", ") |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
182 self.dispatch(t.tback) |
|
37569
b7440ab5cd70
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
37562
diff
changeset
|
183 |
|
37562
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
184 def _TryExcept(self, t): |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
185 self.fill("try") |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
186 self.enter() |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
187 self.dispatch(t.body) |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
188 self.leave() |
|
37569
b7440ab5cd70
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
37562
diff
changeset
|
189 |
|
37562
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
190 for ex in t.handlers: |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
191 self.dispatch(ex) |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
192 if t.orelse: |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
193 self.fill("else") |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
194 self.enter() |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
195 self.dispatch(t.orelse) |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
196 self.leave() |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
197 |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
198 def _TryFinally(self, t): |
|
62653
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
199 if len(t.body) == 1 and isinstance(t.body[0], ast.TryExcept): |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
200 # try-except-finally |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
201 self.dispatch(t.body) |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
202 else: |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
203 self.fill("try") |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
204 self.enter() |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
205 self.dispatch(t.body) |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
206 self.leave() |
|
37562
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
207 |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
208 self.fill("finally") |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
209 self.enter() |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
210 self.dispatch(t.finalbody) |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
211 self.leave() |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
212 |
|
48301
2480622965e6
get unparse to at least unparse its self
Benjamin Peterson <benjamin@python.org>
parents:
41537
diff
changeset
|
213 def _ExceptHandler(self, t): |
|
41236
9f07d410c555
Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents:
40212
diff
changeset
|
214 self.fill("except") |
|
37562
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
215 if t.type: |
|
41236
9f07d410c555
Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents:
40212
diff
changeset
|
216 self.write(" ") |
|
37562
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
217 self.dispatch(t.type) |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
218 if t.name: |
|
62653
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
219 self.write(" as ") |
|
37562
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
220 self.dispatch(t.name) |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
221 self.enter() |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
222 self.dispatch(t.body) |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
223 self.leave() |
|
37569
b7440ab5cd70
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
37562
diff
changeset
|
224 |
|
36723
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
225 def _ClassDef(self, t): |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
226 self.write("\n") |
|
62653
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
227 for deco in t.decorator_list: |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
228 self.fill("@") |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
229 self.dispatch(deco) |
|
36723
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
230 self.fill("class "+t.name) |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
231 if t.bases: |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
232 self.write("(") |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
233 for a in t.bases: |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
234 self.dispatch(a) |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
235 self.write(", ") |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
236 self.write(")") |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
237 self.enter() |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
238 self.dispatch(t.body) |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
239 self.leave() |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
240 |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
241 def _FunctionDef(self, t): |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
242 self.write("\n") |
|
48301
2480622965e6
get unparse to at least unparse its self
Benjamin Peterson <benjamin@python.org>
parents:
41537
diff
changeset
|
243 for deco in t.decorator_list: |
|
40212
5d5f18443664
Patch #1552024: add decorator support to unparse.py demo script.
Georg Brandl <georg@python.org>
parents:
37569
diff
changeset
|
244 self.fill("@") |
|
5d5f18443664
Patch #1552024: add decorator support to unparse.py demo script.
Georg Brandl <georg@python.org>
parents:
37569
diff
changeset
|
245 self.dispatch(deco) |
|
36723
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
246 self.fill("def "+t.name + "(") |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
247 self.dispatch(t.args) |
|
37562
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
248 self.write(")") |
|
36723
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
249 self.enter() |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
250 self.dispatch(t.body) |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
251 self.leave() |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
252 |
|
36736
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
253 def _For(self, t): |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
254 self.fill("for ") |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
255 self.dispatch(t.target) |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
256 self.write(" in ") |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
257 self.dispatch(t.iter) |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
258 self.enter() |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
259 self.dispatch(t.body) |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
260 self.leave() |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
261 if t.orelse: |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
262 self.fill("else") |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
263 self.enter() |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
264 self.dispatch(t.orelse) |
|
62605
3cb3ce7dcab8
Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
48301
diff
changeset
|
265 self.leave() |
|
36736
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
266 |
|
37562
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
267 def _If(self, t): |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
268 self.fill("if ") |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
269 self.dispatch(t.test) |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
270 self.enter() |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
271 self.dispatch(t.body) |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
272 self.leave() |
|
62653
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
273 # collapse nested ifs into equivalent elifs. |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
274 while (t.orelse and len(t.orelse) == 1 and |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
275 isinstance(t.orelse[0], ast.If)): |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
276 t = t.orelse[0] |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
277 self.fill("elif ") |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
278 self.dispatch(t.test) |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
279 self.enter() |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
280 self.dispatch(t.body) |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
281 self.leave() |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
282 # final else |
|
37562
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
283 if t.orelse: |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
284 self.fill("else") |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
285 self.enter() |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
286 self.dispatch(t.orelse) |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
287 self.leave() |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
288 |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
289 def _While(self, t): |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
290 self.fill("while ") |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
291 self.dispatch(t.test) |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
292 self.enter() |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
293 self.dispatch(t.body) |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
294 self.leave() |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
295 if t.orelse: |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
296 self.fill("else") |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
297 self.enter() |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
298 self.dispatch(t.orelse) |
|
62605
3cb3ce7dcab8
Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
48301
diff
changeset
|
299 self.leave() |
|
37569
b7440ab5cd70
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
37562
diff
changeset
|
300 |
|
37562
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
301 def _With(self, t): |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
302 self.fill("with ") |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
303 self.dispatch(t.context_expr) |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
304 if t.optional_vars: |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
305 self.write(" as ") |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
306 self.dispatch(t.optional_vars) |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
307 self.enter() |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
308 self.dispatch(t.body) |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
309 self.leave() |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
310 |
|
36723
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
311 # expr |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
312 def _Str(self, tree): |
|
62653
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
313 # if from __future__ import unicode_literals is in effect, |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
314 # then we want to output string literals using a 'b' prefix |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
315 # and unicode literals with no prefix. |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
316 if "unicode_literals" not in self.future_imports: |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
317 self.write(repr(tree.s)) |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
318 elif isinstance(tree.s, str): |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
319 self.write("b" + repr(tree.s)) |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
320 elif isinstance(tree.s, unicode): |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
321 self.write(repr(tree.s).lstrip("u")) |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
322 else: |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
323 assert False, "shouldn't get here" |
|
36723
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
324 |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
325 def _Name(self, t): |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
326 self.write(t.id) |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
327 |
|
37562
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
328 def _Repr(self, t): |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
329 self.write("`") |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
330 self.dispatch(t.value) |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
331 self.write("`") |
|
37569
b7440ab5cd70
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
37562
diff
changeset
|
332 |
|
36736
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
333 def _Num(self, t): |
|
62653
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
334 repr_n = repr(t.n) |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
335 # Parenthesize negative numbers, to avoid turning (-1)**2 into -1**2. |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
336 if repr_n.startswith("-"): |
|
62605
3cb3ce7dcab8
Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
48301
diff
changeset
|
337 self.write("(") |
|
62653
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
338 # Substitute overflowing decimal literal for AST infinities. |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
339 self.write(repr_n.replace("inf", INFSTR)) |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
340 if repr_n.startswith("-"): |
|
62605
3cb3ce7dcab8
Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
48301
diff
changeset
|
341 self.write(")") |
|
36736
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
342 |
|
36723
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
343 def _List(self, t): |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
344 self.write("[") |
|
41236
9f07d410c555
Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents:
40212
diff
changeset
|
345 interleave(lambda: self.write(", "), self.dispatch, t.elts) |
|
36723
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
346 self.write("]") |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
347 |
|
37562
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
348 def _ListComp(self, t): |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
349 self.write("[") |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
350 self.dispatch(t.elt) |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
351 for gen in t.generators: |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
352 self.dispatch(gen) |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
353 self.write("]") |
|
37569
b7440ab5cd70
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
37562
diff
changeset
|
354 |
|
37562
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
355 def _GeneratorExp(self, t): |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
356 self.write("(") |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
357 self.dispatch(t.elt) |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
358 for gen in t.generators: |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
359 self.dispatch(gen) |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
360 self.write(")") |
|
37569
b7440ab5cd70
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
37562
diff
changeset
|
361 |
|
62653
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
362 def _SetComp(self, t): |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
363 self.write("{") |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
364 self.dispatch(t.elt) |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
365 for gen in t.generators: |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
366 self.dispatch(gen) |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
367 self.write("}") |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
368 |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
369 def _DictComp(self, t): |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
370 self.write("{") |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
371 self.dispatch(t.key) |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
372 self.write(": ") |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
373 self.dispatch(t.value) |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
374 for gen in t.generators: |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
375 self.dispatch(gen) |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
376 self.write("}") |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
377 |
|
37562
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
378 def _comprehension(self, t): |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
379 self.write(" for ") |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
380 self.dispatch(t.target) |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
381 self.write(" in ") |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
382 self.dispatch(t.iter) |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
383 for if_clause in t.ifs: |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
384 self.write(" if ") |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
385 self.dispatch(if_clause) |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
386 |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
387 def _IfExp(self, t): |
|
41236
9f07d410c555
Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents:
40212
diff
changeset
|
388 self.write("(") |
|
37562
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
389 self.dispatch(t.body) |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
390 self.write(" if ") |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
391 self.dispatch(t.test) |
|
41236
9f07d410c555
Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents:
40212
diff
changeset
|
392 self.write(" else ") |
|
9f07d410c555
Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents:
40212
diff
changeset
|
393 self.dispatch(t.orelse) |
|
9f07d410c555
Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents:
40212
diff
changeset
|
394 self.write(")") |
|
37569
b7440ab5cd70
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
37562
diff
changeset
|
395 |
|
62653
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
396 def _Set(self, t): |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
397 assert(t.elts) # should be at least one element |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
398 self.write("{") |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
399 interleave(lambda: self.write(", "), self.dispatch, t.elts) |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
400 self.write("}") |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
401 |
|
36736
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
402 def _Dict(self, t): |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
403 self.write("{") |
|
62653
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
404 def write_pair(pair): |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
405 (k, v) = pair |
|
36736
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
406 self.dispatch(k) |
|
41236
9f07d410c555
Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents:
40212
diff
changeset
|
407 self.write(": ") |
|
36736
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
408 self.dispatch(v) |
|
62653
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
409 interleave(lambda: self.write(", "), write_pair, zip(t.keys, t.values)) |
|
36736
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
410 self.write("}") |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
411 |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
412 def _Tuple(self, t): |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
413 self.write("(") |
|
41236
9f07d410c555
Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents:
40212
diff
changeset
|
414 if len(t.elts) == 1: |
|
9f07d410c555
Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents:
40212
diff
changeset
|
415 (elt,) = t.elts |
|
9f07d410c555
Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents:
40212
diff
changeset
|
416 self.dispatch(elt) |
|
9f07d410c555
Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents:
40212
diff
changeset
|
417 self.write(",") |
|
9f07d410c555
Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents:
40212
diff
changeset
|
418 else: |
|
9f07d410c555
Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents:
40212
diff
changeset
|
419 interleave(lambda: self.write(", "), self.dispatch, t.elts) |
|
36736
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
420 self.write(")") |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
421 |
|
36723
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
422 unop = {"Invert":"~", "Not": "not", "UAdd":"+", "USub":"-"} |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
423 def _UnaryOp(self, t): |
|
62605
3cb3ce7dcab8
Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
48301
diff
changeset
|
424 self.write("(") |
|
36723
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
425 self.write(self.unop[t.op.__class__.__name__]) |
|
62605
3cb3ce7dcab8
Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
48301
diff
changeset
|
426 self.write(" ") |
|
62653
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
427 # If we're applying unary minus to a number, parenthesize the number. |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
428 # This is necessary: -2147483648 is different from -(2147483648) on |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
429 # a 32-bit machine (the first is an int, the second a long), and |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
430 # -7j is different from -(7j). (The first has real part 0.0, the second |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
431 # has real part -0.0.) |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
432 if isinstance(t.op, ast.USub) and isinstance(t.operand, ast.Num): |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
433 self.write("(") |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
434 self.dispatch(t.operand) |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
435 self.write(")") |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
436 else: |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
437 self.dispatch(t.operand) |
|
36723
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
438 self.write(")") |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
439 |
|
36736
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
440 binop = { "Add":"+", "Sub":"-", "Mult":"*", "Div":"/", "Mod":"%", |
|
62605
3cb3ce7dcab8
Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
48301
diff
changeset
|
441 "LShift":"<<", "RShift":">>", "BitOr":"|", "BitXor":"^", "BitAnd":"&", |
|
37562
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
442 "FloorDiv":"//", "Pow": "**"} |
|
36736
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
443 def _BinOp(self, t): |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
444 self.write("(") |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
445 self.dispatch(t.left) |
|
41236
9f07d410c555
Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents:
40212
diff
changeset
|
446 self.write(" " + self.binop[t.op.__class__.__name__] + " ") |
|
36736
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
447 self.dispatch(t.right) |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
448 self.write(")") |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
449 |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
450 cmpops = {"Eq":"==", "NotEq":"!=", "Lt":"<", "LtE":"<=", "Gt":">", "GtE":">=", |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
451 "Is":"is", "IsNot":"is not", "In":"in", "NotIn":"not in"} |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
452 def _Compare(self, t): |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
453 self.write("(") |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
454 self.dispatch(t.left) |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
455 for o, e in zip(t.ops, t.comparators): |
|
41236
9f07d410c555
Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents:
40212
diff
changeset
|
456 self.write(" " + self.cmpops[o.__class__.__name__] + " ") |
|
36736
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
457 self.dispatch(e) |
|
62611
9ca9524d3e57
unparse.py: fix mispaced parentheses in chained comparisons
Mark Dickinson <dickinsm@gmail.com>
parents:
62605
diff
changeset
|
458 self.write(")") |
|
36736
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
459 |
|
62653
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
460 boolops = {ast.And: 'and', ast.Or: 'or'} |
|
37562
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
461 def _BoolOp(self, t): |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
462 self.write("(") |
|
41236
9f07d410c555
Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents:
40212
diff
changeset
|
463 s = " %s " % self.boolops[t.op.__class__] |
|
9f07d410c555
Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents:
40212
diff
changeset
|
464 interleave(lambda: self.write(s), self.dispatch, t.values) |
|
37562
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
465 self.write(")") |
|
37569
b7440ab5cd70
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
37562
diff
changeset
|
466 |
|
36736
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
467 def _Attribute(self,t): |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
468 self.dispatch(t.value) |
|
62653
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
469 # Special case: 3.__abs__() is a syntax error, so if t.value |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
470 # is an integer literal then we need to either parenthesize |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
471 # it or add an extra space to get 3 .__abs__(). |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
472 if isinstance(t.value, ast.Num) and isinstance(t.value.n, int): |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
473 self.write(" ") |
|
36736
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
474 self.write(".") |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
475 self.write(t.attr) |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
476 |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
477 def _Call(self, t): |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
478 self.dispatch(t.func) |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
479 self.write("(") |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
480 comma = False |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
481 for e in t.args: |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
482 if comma: self.write(", ") |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
483 else: comma = True |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
484 self.dispatch(e) |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
485 for e in t.keywords: |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
486 if comma: self.write(", ") |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
487 else: comma = True |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
488 self.dispatch(e) |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
489 if t.starargs: |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
490 if comma: self.write(", ") |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
491 else: comma = True |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
492 self.write("*") |
|
37562
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
493 self.dispatch(t.starargs) |
|
36736
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
494 if t.kwargs: |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
495 if comma: self.write(", ") |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
496 else: comma = True |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
497 self.write("**") |
|
37562
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
498 self.dispatch(t.kwargs) |
|
36736
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
499 self.write(")") |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
500 |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
501 def _Subscript(self, t): |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
502 self.dispatch(t.value) |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
503 self.write("[") |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
504 self.dispatch(t.slice) |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
505 self.write("]") |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
506 |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
507 # slice |
|
37562
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
508 def _Ellipsis(self, t): |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
509 self.write("...") |
|
37569
b7440ab5cd70
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
37562
diff
changeset
|
510 |
|
36736
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
511 def _Index(self, t): |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
512 self.dispatch(t.value) |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
513 |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
514 def _Slice(self, t): |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
515 if t.lower: |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
516 self.dispatch(t.lower) |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
517 self.write(":") |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
518 if t.upper: |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
519 self.dispatch(t.upper) |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
520 if t.step: |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
521 self.write(":") |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
522 self.dispatch(t.step) |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
523 |
|
37562
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
524 def _ExtSlice(self, t): |
|
41236
9f07d410c555
Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents:
40212
diff
changeset
|
525 interleave(lambda: self.write(', '), self.dispatch, t.dims) |
|
37569
b7440ab5cd70
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
37562
diff
changeset
|
526 |
|
36723
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
527 # others |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
528 def _arguments(self, t): |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
529 first = True |
|
62653
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
530 # normal arguments |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
531 defaults = [None] * (len(t.args) - len(t.defaults)) + t.defaults |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
532 for a,d in zip(t.args, defaults): |
|
36736
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
533 if first:first = False |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
534 else: self.write(", ") |
|
bbce8ec2ff81
unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents:
36723
diff
changeset
|
535 self.dispatch(a), |
|
62653
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
536 if d: |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
537 self.write("=") |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
538 self.dispatch(d) |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
539 |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
540 # varargs |
|
36723
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
541 if t.vararg: |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
542 if first:first = False |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
543 else: self.write(", ") |
|
62653
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
544 self.write("*") |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
545 self.write(t.vararg) |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
546 |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
547 # kwargs |
|
36723
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
548 if t.kwarg: |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
549 if first:first = False |
|
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
550 else: self.write(", ") |
|
37562
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
551 self.write("**"+t.kwarg) |
|
36723
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
552 |
|
37562
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
553 def _keyword(self, t): |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
554 self.write(t.arg) |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
555 self.write("=") |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
556 self.dispatch(t.value) |
|
37569
b7440ab5cd70
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
37562
diff
changeset
|
557 |
|
37562
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
558 def _Lambda(self, t): |
|
62653
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
559 self.write("(") |
|
37562
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
560 self.write("lambda ") |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
561 self.dispatch(t.args) |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
562 self.write(": ") |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
563 self.dispatch(t.body) |
|
62653
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
564 self.write(")") |
|
37569
b7440ab5cd70
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
37562
diff
changeset
|
565 |
|
41236
9f07d410c555
Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents:
40212
diff
changeset
|
566 def _alias(self, t): |
|
9f07d410c555
Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents:
40212
diff
changeset
|
567 self.write(t.name) |
|
9f07d410c555
Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents:
40212
diff
changeset
|
568 if t.asname: |
|
9f07d410c555
Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents:
40212
diff
changeset
|
569 self.write(" as "+t.asname) |
|
9f07d410c555
Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents:
40212
diff
changeset
|
570 |
|
37562
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
571 def roundtrip(filename, output=sys.stdout): |
|
62653
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
572 with open(filename, "r") as pyfile: |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
573 source = pyfile.read() |
|
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
574 tree = compile(source, filename, "exec", ast.PyCF_ONLY_AST) |
|
37562
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
575 Unparser(tree, output) |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
576 |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
577 |
|
36723
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
578 |
|
37562
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
579 def testdir(a): |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
580 try: |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
581 names = [n for n in os.listdir(a) if n.endswith('.py')] |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
582 except OSError: |
|
62653
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
583 sys.stderr.write("Directory not readable: %s" % a) |
|
37562
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
584 else: |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
585 for n in names: |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
586 fullname = os.path.join(a, n) |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
587 if os.path.isfile(fullname): |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
588 output = cStringIO.StringIO() |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
589 print 'Testing %s' % fullname |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
590 try: |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
591 roundtrip(fullname, output) |
|
62653
9dcc93fe7528
Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents:
62611
diff
changeset
|
592 except Exception as e: |
|
37562
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
593 print ' Failed to compile, exception is %s' % repr(e) |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
594 elif os.path.isdir(fullname): |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
595 testdir(fullname) |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
596 |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
597 def main(args): |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
598 if args[0] == '--testdir': |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
599 for a in args[1:]: |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
600 testdir(a) |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
601 else: |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
602 for a in args: |
|
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
603 roundtrip(a) |
|
37569
b7440ab5cd70
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
37562
diff
changeset
|
604 |
|
36723
e580c8b0dcea
Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents:
36721
diff
changeset
|
605 if __name__=='__main__': |
|
37562
0f2e86d08d8a
Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36736
diff
changeset
|
606 main(sys.argv[1:]) |
