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
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
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:])