annotate Demo/parser/unparse.py @ 58925:eecf1bef052d 2.6

Merged revisions 78207 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r78207 | ezio.melotti | 2010-02-17 01:26:09 +0200 (Wed, 17 Feb 2010) | 1 line #7930: fix stripid ........
author Ezio Melotti <ezio.melotti@gmail.com>
date Tue, 16 Feb 2010 23:29:44 +0000
parents 2480622965e6
children 3cb3ce7dcab8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
37562
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
3 import _ast
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
41236
9f07d410c555 Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents: 40212
diff changeset
7 def interleave(inter, f, seq):
9f07d410c555 Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents: 40212
diff changeset
8 """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
9 """
9f07d410c555 Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents: 40212
diff changeset
10 seq = iter(seq)
9f07d410c555 Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents: 40212
diff changeset
11 try:
9f07d410c555 Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents: 40212
diff changeset
12 f(seq.next())
41537
019904c64717 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 41236
diff changeset
13 except StopIteration:
41236
9f07d410c555 Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents: 40212
diff changeset
14 pass
9f07d410c555 Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents: 40212
diff changeset
15 else:
9f07d410c555 Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents: 40212
diff changeset
16 for x in seq:
9f07d410c555 Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents: 40212
diff changeset
17 inter()
9f07d410c555 Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents: 40212
diff changeset
18 f(x)
9f07d410c555 Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents: 40212
diff changeset
19
36723
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
20 class Unparser:
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
21 """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
22 output source code for the abstract syntax; original formatting
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
23 is disregarged. """
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
24
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
25 def __init__(self, tree, file = sys.stdout):
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
26 """Unparser(tree, file=sys.stdout) -> None.
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
27 Print the source for tree to file."""
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
28 self.f = file
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
29 self._indent = 0
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
30 self.dispatch(tree)
36736
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
31 print >>self.f,""
36723
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
32 self.f.flush()
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
33
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
34 def fill(self, text = ""):
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
35 "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
36 self.f.write("\n"+" "*self._indent + text)
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
37
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
38 def write(self, text):
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
39 "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
40 self.f.write(text)
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
41
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
42 def enter(self):
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
43 "Print ':', and increase the indentation."
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
44 self.write(":")
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
45 self._indent += 1
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 leave(self):
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
48 "Decrease the indentation level."
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
49 self._indent -= 1
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
50
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
51 def dispatch(self, tree):
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
52 "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
53 if isinstance(tree, list):
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
54 for t in tree:
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
55 self.dispatch(t)
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
56 return
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
57 meth = getattr(self, "_"+tree.__class__.__name__)
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
58 meth(tree)
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
59
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
60
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
61 ############### Unparsing methods ######################
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
62 # 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
63 # Constructors should be grouped by sum type. Ideally, #
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
64 # 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
65 # currently doesn't. #
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
66 ########################################################
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
67
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
68 def _Module(self, tree):
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
69 for stmt in tree.body:
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
70 self.dispatch(stmt)
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 # stmt
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
73 def _Expr(self, tree):
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
74 self.fill()
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
75 self.dispatch(tree.value)
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 def _Import(self, t):
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
78 self.fill("import ")
41236
9f07d410c555 Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents: 40212
diff changeset
79 interleave(lambda: self.write(", "), self.dispatch, t.names)
37569
b7440ab5cd70 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 37562
diff changeset
80
37562
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
81 def _ImportFrom(self, t):
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
82 self.fill("from ")
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
83 self.write(t.module)
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
84 self.write(" import ")
41236
9f07d410c555 Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents: 40212
diff changeset
85 interleave(lambda: self.write(", "), self.dispatch, t.names)
37562
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
86 # XXX(jpe) what is level for?
36723
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
87
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
88 def _Assign(self, t):
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
89 self.fill()
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
90 for target in t.targets:
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
91 self.dispatch(target)
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
92 self.write(" = ")
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
93 self.dispatch(t.value)
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
94
36736
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
95 def _AugAssign(self, t):
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
96 self.fill()
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
97 self.dispatch(t.target)
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
98 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
99 self.dispatch(t.value)
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
100
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
101 def _Return(self, t):
41236
9f07d410c555 Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents: 40212
diff changeset
102 self.fill("return")
36736
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
103 if t.value:
41236
9f07d410c555 Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents: 40212
diff changeset
104 self.write(" ")
36736
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
105 self.dispatch(t.value)
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
106
37562
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
107 def _Pass(self, t):
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
108 self.fill("pass")
37569
b7440ab5cd70 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 37562
diff changeset
109
37562
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
110 def _Break(self, t):
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
111 self.fill("break")
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
112
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
113 def _Continue(self, t):
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
114 self.fill("continue")
37569
b7440ab5cd70 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 37562
diff changeset
115
37562
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
116 def _Delete(self, t):
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
117 self.fill("del ")
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
118 self.dispatch(t.targets)
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
119
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
120 def _Assert(self, t):
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
121 self.fill("assert ")
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
122 self.dispatch(t.test)
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
123 if t.msg:
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
124 self.write(", ")
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
125 self.dispatch(t.msg)
37569
b7440ab5cd70 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 37562
diff changeset
126
37562
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
127 def _Exec(self, t):
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
128 self.fill("exec ")
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
129 self.dispatch(t.body)
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
130 if t.globals:
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
131 self.write(" in ")
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
132 self.dispatch(t.globals)
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
133 if t.locals:
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.locals)
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
136
36736
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
137 def _Print(self, t):
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
138 self.fill("print ")
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
139 do_comma = False
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
140 if t.dest:
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
141 self.write(">>")
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
142 self.dispatch(t.dest)
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
143 do_comma = True
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
144 for e in t.values:
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
145 if do_comma:self.write(", ")
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
146 else:do_comma=True
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
147 self.dispatch(e)
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
148 if not t.nl:
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
149 self.write(",")
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
150
37562
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
151 def _Global(self, t):
41236
9f07d410c555 Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents: 40212
diff changeset
152 self.fill("global ")
9f07d410c555 Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents: 40212
diff changeset
153 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
154
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
155 def _Yield(self, t):
41236
9f07d410c555 Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents: 40212
diff changeset
156 self.write("(")
9f07d410c555 Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents: 40212
diff changeset
157 self.write("yield")
37562
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
158 if t.value:
41236
9f07d410c555 Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents: 40212
diff changeset
159 self.write(" ")
37562
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
160 self.dispatch(t.value)
41236
9f07d410c555 Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents: 40212
diff changeset
161 self.write(")")
37569
b7440ab5cd70 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 37562
diff changeset
162
37562
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
163 def _Raise(self, t):
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
164 self.fill('raise ')
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
165 if t.type:
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
166 self.dispatch(t.type)
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
167 if t.inst:
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
168 self.write(", ")
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
169 self.dispatch(t.inst)
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
170 if t.tback:
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
171 self.write(", ")
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
172 self.dispatch(t.tback)
37569
b7440ab5cd70 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 37562
diff changeset
173
37562
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
174 def _TryExcept(self, t):
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
175 self.fill("try")
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
176 self.enter()
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
177 self.dispatch(t.body)
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
178 self.leave()
37569
b7440ab5cd70 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 37562
diff changeset
179
37562
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
180 for ex in t.handlers:
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
181 self.dispatch(ex)
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
182 if t.orelse:
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
183 self.fill("else")
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
184 self.enter()
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
185 self.dispatch(t.orelse)
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
186 self.leave()
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
187
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
188 def _TryFinally(self, t):
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
189 self.fill("try")
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
190 self.enter()
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
191 self.dispatch(t.body)
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
192 self.leave()
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
193
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
194 self.fill("finally")
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
195 self.enter()
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
196 self.dispatch(t.finalbody)
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
197 self.leave()
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
198
48301
2480622965e6 get unparse to at least unparse its self
Benjamin Peterson <benjamin@python.org>
parents: 41537
diff changeset
199 def _ExceptHandler(self, t):
41236
9f07d410c555 Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents: 40212
diff changeset
200 self.fill("except")
37562
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
201 if t.type:
41236
9f07d410c555 Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents: 40212
diff changeset
202 self.write(" ")
37562
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
203 self.dispatch(t.type)
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
204 if t.name:
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
205 self.write(", ")
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
206 self.dispatch(t.name)
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
207 self.enter()
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
208 self.dispatch(t.body)
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
209 self.leave()
37569
b7440ab5cd70 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 37562
diff changeset
210
36723
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
211 def _ClassDef(self, t):
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
212 self.write("\n")
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
213 self.fill("class "+t.name)
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
214 if t.bases:
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
215 self.write("(")
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
216 for a in t.bases:
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
217 self.dispatch(a)
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
218 self.write(", ")
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
219 self.write(")")
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
220 self.enter()
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
221 self.dispatch(t.body)
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
222 self.leave()
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
223
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
224 def _FunctionDef(self, t):
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
225 self.write("\n")
48301
2480622965e6 get unparse to at least unparse its self
Benjamin Peterson <benjamin@python.org>
parents: 41537
diff changeset
226 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
227 self.fill("@")
5d5f18443664 Patch #1552024: add decorator support to unparse.py demo script.
Georg Brandl <georg@python.org>
parents: 37569
diff changeset
228 self.dispatch(deco)
36723
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
229 self.fill("def "+t.name + "(")
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
230 self.dispatch(t.args)
37562
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
231 self.write(")")
36723
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
232 self.enter()
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
233 self.dispatch(t.body)
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
234 self.leave()
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
235
36736
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
236 def _For(self, t):
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
237 self.fill("for ")
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
238 self.dispatch(t.target)
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
239 self.write(" in ")
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
240 self.dispatch(t.iter)
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
241 self.enter()
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
242 self.dispatch(t.body)
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
243 self.leave()
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
244 if t.orelse:
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
245 self.fill("else")
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
246 self.enter()
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
247 self.dispatch(t.orelse)
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
248 self.leave
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
249
37562
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
250 def _If(self, t):
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
251 self.fill("if ")
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
252 self.dispatch(t.test)
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
253 self.enter()
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
254 # XXX elif?
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
255 self.dispatch(t.body)
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
256 self.leave()
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
257 if t.orelse:
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
258 self.fill("else")
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
259 self.enter()
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
260 self.dispatch(t.orelse)
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
261 self.leave()
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
262
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
263 def _While(self, t):
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
264 self.fill("while ")
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
265 self.dispatch(t.test)
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
266 self.enter()
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
267 self.dispatch(t.body)
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
268 self.leave()
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
269 if t.orelse:
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
270 self.fill("else")
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
271 self.enter()
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
272 self.dispatch(t.orelse)
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
273 self.leave
37569
b7440ab5cd70 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 37562
diff changeset
274
37562
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
275 def _With(self, t):
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
276 self.fill("with ")
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
277 self.dispatch(t.context_expr)
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
278 if t.optional_vars:
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
279 self.write(" as ")
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
280 self.dispatch(t.optional_vars)
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
281 self.enter()
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
282 self.dispatch(t.body)
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
283 self.leave()
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
284
36723
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
285 # expr
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
286 def _Str(self, tree):
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
287 self.write(repr(tree.s))
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
288
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
289 def _Name(self, t):
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
290 self.write(t.id)
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
291
37562
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
292 def _Repr(self, t):
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
293 self.write("`")
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
294 self.dispatch(t.value)
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
295 self.write("`")
37569
b7440ab5cd70 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 37562
diff changeset
296
36736
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
297 def _Num(self, t):
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
298 self.write(repr(t.n))
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
299
36723
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
300 def _List(self, t):
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
301 self.write("[")
41236
9f07d410c555 Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents: 40212
diff changeset
302 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
303 self.write("]")
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
304
37562
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
305 def _ListComp(self, t):
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
306 self.write("[")
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
307 self.dispatch(t.elt)
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
308 for gen in t.generators:
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
309 self.dispatch(gen)
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
310 self.write("]")
37569
b7440ab5cd70 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 37562
diff changeset
311
37562
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
312 def _GeneratorExp(self, t):
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
313 self.write("(")
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
314 self.dispatch(t.elt)
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
315 for gen in t.generators:
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
316 self.dispatch(gen)
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
317 self.write(")")
37569
b7440ab5cd70 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 37562
diff changeset
318
37562
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
319 def _comprehension(self, t):
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
320 self.write(" for ")
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
321 self.dispatch(t.target)
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
322 self.write(" in ")
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
323 self.dispatch(t.iter)
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
324 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
325 self.write(" if ")
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
326 self.dispatch(if_clause)
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
327
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
328 def _IfExp(self, t):
41236
9f07d410c555 Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents: 40212
diff changeset
329 self.write("(")
37562
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
330 self.dispatch(t.body)
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
331 self.write(" if ")
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
332 self.dispatch(t.test)
41236
9f07d410c555 Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents: 40212
diff changeset
333 self.write(" else ")
9f07d410c555 Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents: 40212
diff changeset
334 self.dispatch(t.orelse)
9f07d410c555 Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents: 40212
diff changeset
335 self.write(")")
37569
b7440ab5cd70 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 37562
diff changeset
336
36736
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
337 def _Dict(self, t):
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
338 self.write("{")
41236
9f07d410c555 Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents: 40212
diff changeset
339 def writem((k, v)):
36736
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
340 self.dispatch(k)
41236
9f07d410c555 Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents: 40212
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 self.dispatch(v)
41236
9f07d410c555 Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents: 40212
diff changeset
343 interleave(lambda: self.write(", "), writem, 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
344 self.write("}")
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
345
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
346 def _Tuple(self, t):
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
347 self.write("(")
41236
9f07d410c555 Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents: 40212
diff changeset
348 if len(t.elts) == 1:
9f07d410c555 Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents: 40212
diff changeset
349 (elt,) = t.elts
9f07d410c555 Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents: 40212
diff changeset
350 self.dispatch(elt)
9f07d410c555 Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents: 40212
diff changeset
351 self.write(",")
9f07d410c555 Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents: 40212
diff changeset
352 else:
9f07d410c555 Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents: 40212
diff changeset
353 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
354 self.write(")")
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
355
36723
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
356 unop = {"Invert":"~", "Not": "not", "UAdd":"+", "USub":"-"}
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
357 def _UnaryOp(self, t):
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
358 self.write(self.unop[t.op.__class__.__name__])
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
359 self.write("(")
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
360 self.dispatch(t.operand)
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
361 self.write(")")
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
362
36736
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
363 binop = { "Add":"+", "Sub":"-", "Mult":"*", "Div":"/", "Mod":"%",
37562
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
364 "LShift":">>", "RShift":"<<", "BitOr":"|", "BitXor":"^", "BitAnd":"&",
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
365 "FloorDiv":"//", "Pow": "**"}
36736
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
366 def _BinOp(self, t):
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
367 self.write("(")
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
368 self.dispatch(t.left)
41236
9f07d410c555 Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents: 40212
diff changeset
369 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
370 self.dispatch(t.right)
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
371 self.write(")")
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
372
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
373 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
374 "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
375 def _Compare(self, t):
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
376 self.write("(")
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
377 self.dispatch(t.left)
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
378 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
379 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
380 self.dispatch(e)
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
381 self.write(")")
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
382
37562
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
383 boolops = {_ast.And: 'and', _ast.Or: 'or'}
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
384 def _BoolOp(self, t):
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
385 self.write("(")
41236
9f07d410c555 Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents: 40212
diff changeset
386 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
387 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
388 self.write(")")
37569
b7440ab5cd70 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 37562
diff changeset
389
36736
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
390 def _Attribute(self,t):
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
391 self.dispatch(t.value)
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
392 self.write(".")
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
393 self.write(t.attr)
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
394
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
395 def _Call(self, t):
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
396 self.dispatch(t.func)
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
397 self.write("(")
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
398 comma = False
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
399 for e in t.args:
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
400 if comma: self.write(", ")
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
401 else: comma = True
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
402 self.dispatch(e)
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
403 for e in t.keywords:
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
404 if comma: self.write(", ")
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
405 else: comma = True
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
406 self.dispatch(e)
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
407 if t.starargs:
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
408 if comma: self.write(", ")
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
409 else: comma = True
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
410 self.write("*")
37562
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
411 self.dispatch(t.starargs)
36736
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
412 if t.kwargs:
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
413 if comma: self.write(", ")
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
414 else: comma = True
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
415 self.write("**")
37562
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
416 self.dispatch(t.kwargs)
36736
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
417 self.write(")")
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
418
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
419 def _Subscript(self, t):
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
420 self.dispatch(t.value)
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
421 self.write("[")
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
422 self.dispatch(t.slice)
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
423 self.write("]")
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
424
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
425 # slice
37562
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
426 def _Ellipsis(self, t):
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
427 self.write("...")
37569
b7440ab5cd70 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 37562
diff changeset
428
36736
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
429 def _Index(self, t):
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
430 self.dispatch(t.value)
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
431
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
432 def _Slice(self, t):
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
433 if t.lower:
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
434 self.dispatch(t.lower)
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
435 self.write(":")
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
436 if t.upper:
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
437 self.dispatch(t.upper)
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
438 if t.step:
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
439 self.write(":")
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
440 self.dispatch(t.step)
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
441
37562
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
442 def _ExtSlice(self, t):
41236
9f07d410c555 Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents: 40212
diff changeset
443 interleave(lambda: self.write(', '), self.dispatch, t.dims)
37569
b7440ab5cd70 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 37562
diff changeset
444
36723
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
445 # others
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
446 def _arguments(self, t):
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
447 first = True
36736
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
448 nonDef = len(t.args)-len(t.defaults)
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
449 for a in t.args[0:nonDef]:
36723
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
450 if first:first = False
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
451 else: self.write(", ")
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
452 self.dispatch(a)
36736
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
453 for a,d in zip(t.args[nonDef:], t.defaults):
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
454 if first:first = False
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
455 else: self.write(", ")
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
456 self.dispatch(a),
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
457 self.write("=")
bbce8ec2ff81 unparse.py can now unparse itself.
Martin v. Löwis <martin@v.loewis.de>
parents: 36723
diff changeset
458 self.dispatch(d)
36723
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
459 if t.vararg:
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
460 if first:first = False
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
461 else: self.write(", ")
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
462 self.write("*"+t.vararg)
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
463 if t.kwarg:
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
464 if first:first = False
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
465 else: self.write(", ")
37562
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
466 self.write("**"+t.kwarg)
36723
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
467
37562
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
468 def _keyword(self, t):
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
469 self.write(t.arg)
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
470 self.write("=")
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
471 self.dispatch(t.value)
37569
b7440ab5cd70 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 37562
diff changeset
472
37562
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
473 def _Lambda(self, t):
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
474 self.write("lambda ")
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
475 self.dispatch(t.args)
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
476 self.write(": ")
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
477 self.dispatch(t.body)
37569
b7440ab5cd70 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 37562
diff changeset
478
41236
9f07d410c555 Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents: 40212
diff changeset
479 def _alias(self, t):
9f07d410c555 Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents: 40212
diff changeset
480 self.write(t.name)
9f07d410c555 Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents: 40212
diff changeset
481 if t.asname:
9f07d410c555 Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents: 40212
diff changeset
482 self.write(" as "+t.asname)
9f07d410c555 Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents: 40212
diff changeset
483
37562
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
484 def roundtrip(filename, output=sys.stdout):
36723
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
485 source = open(filename).read()
41236
9f07d410c555 Patch #1683328: fixes and enhancements for "unparse" demo.
Georg Brandl <georg@python.org>
parents: 40212
diff changeset
486 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
487 Unparser(tree, output)
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
488
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
489
36723
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
490
37562
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
491 def testdir(a):
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
492 try:
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
493 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
494 except OSError:
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
495 print >> sys.stderr, "Directory not readable: %s" % a
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
496 else:
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
497 for n in names:
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
498 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
499 if os.path.isfile(fullname):
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
500 output = cStringIO.StringIO()
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
501 print 'Testing %s' % fullname
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
502 try:
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
503 roundtrip(fullname, output)
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
504 except Exception, e:
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
505 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
506 elif os.path.isdir(fullname):
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
507 testdir(fullname)
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
508
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
509 def main(args):
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
510 if args[0] == '--testdir':
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
511 for a in args[1:]:
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
512 testdir(a)
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
513 else:
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
514 for a in args:
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
515 roundtrip(a)
37569
b7440ab5cd70 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 37562
diff changeset
516
36723
e580c8b0dcea Set EOL style to native.
Tim Peters <tim.peters@gmail.com>
parents: 36721
diff changeset
517 if __name__=='__main__':
37562
0f2e86d08d8a Patch #1441452: Add more AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36736
diff changeset
518 main(sys.argv[1:])