annotate genshi/template/astutil.py @ 903:95d62e239f60 experimental-inline

inline branch: support for a couple more directives
author cmlenz
date Mon, 26 Apr 2010 17:09:08 +0000
parents 09cc3627654c
children
rev   line source
820
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
1 # -*- coding: utf-8 -*-
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
2 #
902
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
3 # Copyright (C) 2008-2010 Edgewall Software
820
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
4 # All rights reserved.
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
5 #
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
6 # This software is licensed as described in the file COPYING, which
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
7 # you should have received as part of this distribution. The terms
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
8 # are also available at http://genshi.edgewall.org/wiki/License.
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
9 #
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
10 # This software consists of voluntary contributions made by many
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
11 # individuals. For the exact contribution history, see the revision
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
12 # history and logs, available at http://genshi.edgewall.org/log/.
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
13
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
14 """Support classes for generating code from abstract syntax trees."""
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
15
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
16 try:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
17 import _ast
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
18 except ImportError:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
19 from genshi.template.ast24 import _ast, parse
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
20 else:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
21 def parse(source, mode):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
22 return compile(source, '', mode, _ast.PyCF_ONLY_AST)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
23
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
24
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
25 __docformat__ = 'restructuredtext en'
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
26
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
27
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
28 class ASTCodeGenerator(object):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
29 """General purpose base class for AST transformations.
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
30
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
31 Every visitor method can be overridden to return an AST node that has been
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
32 altered or replaced in some way.
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
33 """
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
34 def __init__(self, tree):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
35 self.lines_info = []
903
95d62e239f60 inline branch: support for a couple more directives
cmlenz
parents: 902
diff changeset
36 self.line_info = []
820
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
37 self.code = ''
903
95d62e239f60 inline branch: support for a couple more directives
cmlenz
parents: 902
diff changeset
38 self.line = ''
820
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
39 self.last = None
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
40 self.indent = 0
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
41 self.blame_stack = []
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
42 self.visit(tree)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
43 if self.line.strip():
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
44 self.code += self.line + '\n'
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
45 self.lines_info.append(self.line_info)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
46 self.line = None
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
47 self.line_info = None
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
48
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
49 def _change_indent(self, delta):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
50 self.indent += delta
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
51
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
52 def _new_line(self):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
53 if self.line is not None:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
54 self.code += self.line + '\n'
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
55 self.lines_info.append(self.line_info)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
56 self.line = ' '*4*self.indent
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
57 if len(self.blame_stack) == 0:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
58 self.line_info = []
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
59 self.last = None
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
60 else:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
61 self.line_info = [(0, self.blame_stack[-1],)]
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
62 self.last = self.blame_stack[-1]
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
63
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
64 def _write(self, s):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
65 if len(s) == 0:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
66 return
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
67 if len(self.blame_stack) == 0:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
68 if self.last is not None:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
69 self.last = None
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
70 self.line_info.append((len(self.line), self.last))
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
71 else:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
72 if self.last != self.blame_stack[-1]:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
73 self.last = self.blame_stack[-1]
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
74 self.line_info.append((len(self.line), self.last))
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
75 self.line += s
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
76
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
77 def visit(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
78 if node is None:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
79 return None
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
80 if type(node) is tuple:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
81 return tuple([self.visit(n) for n in node])
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
82 try:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
83 self.blame_stack.append((node.lineno, node.col_offset,))
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
84 info = True
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
85 except AttributeError:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
86 info = False
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
87 visitor = getattr(self, 'visit_%s' % node.__class__.__name__, None)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
88 if visitor is None:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
89 raise Exception('Unhandled node type %r' % type(node))
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
90 ret = visitor(node)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
91 if info:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
92 self.blame_stack.pop()
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
93 return ret
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
94
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
95 def visit_Module(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
96 for n in node.body:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
97 self.visit(n)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
98 visit_Interactive = visit_Module
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
99 visit_Suite = visit_Module
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
100
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
101 def visit_Expression(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
102 self._new_line()
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
103 return self.visit(node.body)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
104
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
105 # arguments = (expr* args, identifier? vararg,
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
106 # identifier? kwarg, expr* defaults)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
107 def visit_arguments(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
108 first = True
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
109 no_default_count = len(node.args) - len(node.defaults)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
110 for i, arg in enumerate(node.args):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
111 if not first:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
112 self._write(', ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
113 else:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
114 first = False
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
115 self.visit(arg)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
116 if i >= no_default_count:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
117 self._write('=')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
118 self.visit(node.defaults[i - no_default_count])
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
119 if getattr(node, 'vararg', None):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
120 if not first:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
121 self._write(', ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
122 else:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
123 first = False
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
124 self._write('*' + node.vararg)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
125 if getattr(node, 'kwarg', None):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
126 if not first:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
127 self._write(', ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
128 else:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
129 first = False
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
130 self._write('**' + node.kwarg)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
131
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
132 # FunctionDef(identifier name, arguments args,
902
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
133 # stmt* body, expr* decorator_list)
820
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
134 def visit_FunctionDef(self, node):
902
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
135 decarators = ()
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
136 if hasattr(node, 'decorator_list'):
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
137 decorators = getattr(node, 'decorator_list')
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
138 else: # different name in earlier Python versions
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
139 decorators = getattr(node, 'decorators', ())
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
140 for decorator in decorators:
820
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
141 self._new_line()
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
142 self._write('@')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
143 self.visit(decorator)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
144 self._new_line()
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
145 self._write('def ' + node.name + '(')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
146 self.visit(node.args)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
147 self._write('):')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
148 self._change_indent(1)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
149 for statement in node.body:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
150 self.visit(statement)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
151 self._change_indent(-1)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
152
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
153 # ClassDef(identifier name, expr* bases, stmt* body)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
154 def visit_ClassDef(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
155 self._new_line()
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
156 self._write('class ' + node.name)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
157 if node.bases:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
158 self._write('(')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
159 self.visit(node.bases[0])
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
160 for base in node.bases[1:]:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
161 self._write(', ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
162 self.visit(base)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
163 self._write(')')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
164 self._write(':')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
165 self._change_indent(1)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
166 for statement in node.body:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
167 self.visit(statement)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
168 self._change_indent(-1)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
169
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
170 # Return(expr? value)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
171 def visit_Return(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
172 self._new_line()
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
173 self._write('return')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
174 if getattr(node, 'value', None):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
175 self._write(' ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
176 self.visit(node.value)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
177
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
178 # Delete(expr* targets)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
179 def visit_Delete(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
180 self._new_line()
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
181 self._write('del ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
182 self.visit(node.targets[0])
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
183 for target in node.targets[1:]:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
184 self._write(', ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
185 self.visit(target)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
186
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
187 # Assign(expr* targets, expr value)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
188 def visit_Assign(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
189 self._new_line()
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
190 for target in node.targets:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
191 self.visit(target)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
192 self._write(' = ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
193 self.visit(node.value)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
194
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
195 # AugAssign(expr target, operator op, expr value)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
196 def visit_AugAssign(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
197 self._new_line()
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
198 self.visit(node.target)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
199 self._write(' ' + self.binary_operators[node.op.__class__] + '= ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
200 self.visit(node.value)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
201
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
202 # Print(expr? dest, expr* values, bool nl)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
203 def visit_Print(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
204 self._new_line()
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
205 self._write('print')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
206 if getattr(node, 'dest', None):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
207 self._write(' >> ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
208 self.visit(node.dest)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
209 if getattr(node, 'values', None):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
210 self._write(', ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
211 else:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
212 self._write(' ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
213 if getattr(node, 'values', None):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
214 self.visit(node.values[0])
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
215 for value in node.values[1:]:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
216 self._write(', ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
217 self.visit(value)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
218 if not node.nl:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
219 self._write(',')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
220
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
221 # For(expr target, expr iter, stmt* body, stmt* orelse)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
222 def visit_For(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
223 self._new_line()
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
224 self._write('for ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
225 self.visit(node.target)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
226 self._write(' in ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
227 self.visit(node.iter)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
228 self._write(':')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
229 self._change_indent(1)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
230 for statement in node.body:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
231 self.visit(statement)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
232 self._change_indent(-1)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
233 if getattr(node, 'orelse', None):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
234 self._new_line()
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
235 self._write('else:')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
236 self._change_indent(1)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
237 for statement in node.orelse:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
238 self.visit(statement)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
239 self._change_indent(-1)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
240
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
241 # While(expr test, stmt* body, stmt* orelse)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
242 def visit_While(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
243 self._new_line()
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
244 self._write('while ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
245 self.visit(node.test)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
246 self._write(':')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
247 self._change_indent(1)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
248 for statement in node.body:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
249 self.visit(statement)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
250 self._change_indent(-1)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
251 if getattr(node, 'orelse', None):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
252 self._new_line()
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
253 self._write('else:')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
254 self._change_indent(1)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
255 for statement in node.orelse:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
256 self.visit(statement)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
257 self._change_indent(-1)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
258
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
259 # If(expr test, stmt* body, stmt* orelse)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
260 def visit_If(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
261 self._new_line()
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
262 self._write('if ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
263 self.visit(node.test)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
264 self._write(':')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
265 self._change_indent(1)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
266 for statement in node.body:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
267 self.visit(statement)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
268 self._change_indent(-1)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
269 if getattr(node, 'orelse', None):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
270 self._new_line()
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
271 self._write('else:')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
272 self._change_indent(1)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
273 for statement in node.orelse:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
274 self.visit(statement)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
275 self._change_indent(-1)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
276
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
277 # With(expr context_expr, expr? optional_vars, stmt* body)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
278 def visit_With(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
279 self._new_line()
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
280 self._write('with ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
281 self.visit(node.context_expr)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
282 if getattr(node, 'optional_vars', None):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
283 self._write(' as ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
284 self.visit(node.optional_vars)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
285 self._write(':')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
286 self._change_indent(1)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
287 for statement in node.body:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
288 self.visit(statement)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
289 self._change_indent(-1)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
290
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
291
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
292 # Raise(expr? type, expr? inst, expr? tback)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
293 def visit_Raise(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
294 self._new_line()
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
295 self._write('raise')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
296 if not node.type:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
297 return
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
298 self._write(' ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
299 self.visit(node.type)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
300 if not node.inst:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
301 return
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
302 self._write(', ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
303 self.visit(node.inst)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
304 if not node.tback:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
305 return
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
306 self._write(', ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
307 self.visit(node.tback)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
308
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
309 # TryExcept(stmt* body, excepthandler* handlers, stmt* orelse)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
310 def visit_TryExcept(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
311 self._new_line()
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
312 self._write('try:')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
313 self._change_indent(1)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
314 for statement in node.body:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
315 self.visit(statement)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
316 self._change_indent(-1)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
317 if getattr(node, 'handlers', None):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
318 for handler in node.handlers:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
319 self.visit(handler)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
320 self._new_line()
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
321 if getattr(node, 'orelse', None):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
322 self._write('else:')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
323 self._change_indent(1)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
324 for statement in node.orelse:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
325 self.visit(statement)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
326 self._change_indent(-1)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
327
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
328 # excepthandler = (expr? type, expr? name, stmt* body)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
329 def visit_ExceptHandler(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
330 self._new_line()
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
331 self._write('except')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
332 if getattr(node, 'type', None):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
333 self._write(' ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
334 self.visit(node.type)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
335 if getattr(node, 'name', None):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
336 self._write(', ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
337 self.visit(node.name)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
338 self._write(':')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
339 self._change_indent(1)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
340 for statement in node.body:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
341 self.visit(statement)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
342 self._change_indent(-1)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
343 visit_excepthandler = visit_ExceptHandler
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
344
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
345 # TryFinally(stmt* body, stmt* finalbody)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
346 def visit_TryFinally(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
347 self._new_line()
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
348 self._write('try:')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
349 self._change_indent(1)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
350 for statement in node.body:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
351 self.visit(statement)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
352 self._change_indent(-1)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
353
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
354 if getattr(node, 'finalbody', None):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
355 self._new_line()
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
356 self._write('finally:')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
357 self._change_indent(1)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
358 for statement in node.finalbody:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
359 self.visit(statement)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
360 self._change_indent(-1)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
361
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
362 # Assert(expr test, expr? msg)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
363 def visit_Assert(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
364 self._new_line()
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
365 self._write('assert ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
366 self.visit(node.test)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
367 if getattr(node, 'msg', None):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
368 self._write(', ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
369 self.visit(node.msg)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
370
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
371 def visit_alias(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
372 self._write(node.name)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
373 if getattr(node, 'asname', None):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
374 self._write(' as ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
375 self._write(node.asname)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
376
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
377 # Import(alias* names)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
378 def visit_Import(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
379 self._new_line()
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
380 self._write('import ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
381 self.visit(node.names[0])
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
382 for name in node.names[1:]:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
383 self._write(', ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
384 self.visit(name)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
385
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
386 # ImportFrom(identifier module, alias* names, int? level)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
387 def visit_ImportFrom(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
388 self._new_line()
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
389 self._write('from ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
390 if node.level:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
391 self._write('.' * node.level)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
392 self._write(node.module)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
393 self._write(' import ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
394 self.visit(node.names[0])
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
395 for name in node.names[1:]:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
396 self._write(', ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
397 self.visit(name)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
398
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
399 # Exec(expr body, expr? globals, expr? locals)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
400 def visit_Exec(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
401 self._new_line()
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
402 self._write('exec ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
403 self.visit(node.body)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
404 if not node.globals:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
405 return
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
406 self._write(', ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
407 self.visit(node.globals)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
408 if not node.locals:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
409 return
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
410 self._write(', ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
411 self.visit(node.locals)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
412
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
413 # Global(identifier* names)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
414 def visit_Global(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
415 self._new_line()
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
416 self._write('global ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
417 self.visit(node.names[0])
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
418 for name in node.names[1:]:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
419 self._write(', ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
420 self.visit(name)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
421
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
422 # Expr(expr value)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
423 def visit_Expr(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
424 self._new_line()
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
425 self.visit(node.value)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
426
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
427 # Pass
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
428 def visit_Pass(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
429 self._new_line()
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
430 self._write('pass')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
431
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
432 # Break
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
433 def visit_Break(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
434 self._new_line()
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
435 self._write('break')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
436
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
437 # Continue
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
438 def visit_Continue(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
439 self._new_line()
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
440 self._write('continue')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
441
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
442 ### EXPRESSIONS
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
443 def with_parens(f):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
444 def _f(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
445 self._write('(')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
446 f(self, node)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
447 self._write(')')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
448 return _f
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
449
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
450 bool_operators = {_ast.And: 'and', _ast.Or: 'or'}
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
451
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
452 # BoolOp(boolop op, expr* values)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
453 @with_parens
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
454 def visit_BoolOp(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
455 joiner = ' ' + self.bool_operators[node.op.__class__] + ' '
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
456 self.visit(node.values[0])
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
457 for value in node.values[1:]:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
458 self._write(joiner)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
459 self.visit(value)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
460
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
461 binary_operators = {
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
462 _ast.Add: '+',
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
463 _ast.Sub: '-',
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
464 _ast.Mult: '*',
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
465 _ast.Div: '/',
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
466 _ast.Mod: '%',
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
467 _ast.Pow: '**',
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
468 _ast.LShift: '<<',
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
469 _ast.RShift: '>>',
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
470 _ast.BitOr: '|',
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
471 _ast.BitXor: '^',
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
472 _ast.BitAnd: '&',
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
473 _ast.FloorDiv: '//'
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
474 }
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
475
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
476 # BinOp(expr left, operator op, expr right)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
477 @with_parens
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
478 def visit_BinOp(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
479 self.visit(node.left)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
480 self._write(' ' + self.binary_operators[node.op.__class__] + ' ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
481 self.visit(node.right)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
482
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
483 unary_operators = {
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
484 _ast.Invert: '~',
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
485 _ast.Not: 'not',
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
486 _ast.UAdd: '+',
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
487 _ast.USub: '-',
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
488 }
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
489
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
490 # UnaryOp(unaryop op, expr operand)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
491 def visit_UnaryOp(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
492 self._write(self.unary_operators[node.op.__class__] + ' ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
493 self.visit(node.operand)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
494
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
495 # Lambda(arguments args, expr body)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
496 @with_parens
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
497 def visit_Lambda(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
498 self._write('lambda ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
499 self.visit(node.args)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
500 self._write(': ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
501 self.visit(node.body)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
502
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
503 # IfExp(expr test, expr body, expr orelse)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
504 @with_parens
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
505 def visit_IfExp(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
506 self.visit(node.body)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
507 self._write(' if ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
508 self.visit(node.test)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
509 self._write(' else ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
510 self.visit(node.orelse)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
511
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
512 # Dict(expr* keys, expr* values)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
513 def visit_Dict(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
514 self._write('{')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
515 for key, value in zip(node.keys, node.values):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
516 self.visit(key)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
517 self._write(': ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
518 self.visit(value)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
519 self._write(', ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
520 self._write('}')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
521
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
522 # ListComp(expr elt, comprehension* generators)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
523 def visit_ListComp(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
524 self._write('[')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
525 self.visit(node.elt)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
526 for generator in node.generators:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
527 # comprehension = (expr target, expr iter, expr* ifs)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
528 self._write(' for ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
529 self.visit(generator.target)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
530 self._write(' in ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
531 self.visit(generator.iter)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
532 for ifexpr in generator.ifs:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
533 self._write(' if ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
534 self.visit(ifexpr)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
535 self._write(']')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
536
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
537 # GeneratorExp(expr elt, comprehension* generators)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
538 def visit_GeneratorExp(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
539 self._write('(')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
540 self.visit(node.elt)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
541 for generator in node.generators:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
542 # comprehension = (expr target, expr iter, expr* ifs)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
543 self._write(' for ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
544 self.visit(generator.target)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
545 self._write(' in ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
546 self.visit(generator.iter)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
547 for ifexpr in generator.ifs:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
548 self._write(' if ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
549 self.visit(ifexpr)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
550 self._write(')')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
551
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
552 # Yield(expr? value)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
553 def visit_Yield(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
554 self._write('yield')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
555 if getattr(node, 'value', None):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
556 self._write(' ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
557 self.visit(node.value)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
558
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
559 comparision_operators = {
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
560 _ast.Eq: '==',
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
561 _ast.NotEq: '!=',
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
562 _ast.Lt: '<',
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
563 _ast.LtE: '<=',
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
564 _ast.Gt: '>',
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
565 _ast.GtE: '>=',
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
566 _ast.Is: 'is',
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
567 _ast.IsNot: 'is not',
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
568 _ast.In: 'in',
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
569 _ast.NotIn: 'not in',
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
570 }
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
571
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
572 # Compare(expr left, cmpop* ops, expr* comparators)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
573 @with_parens
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
574 def visit_Compare(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
575 self.visit(node.left)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
576 for op, comparator in zip(node.ops, node.comparators):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
577 self._write(' ' + self.comparision_operators[op.__class__] + ' ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
578 self.visit(comparator)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
579
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
580 # Call(expr func, expr* args, keyword* keywords,
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
581 # expr? starargs, expr? kwargs)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
582 def visit_Call(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
583 self.visit(node.func)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
584 self._write('(')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
585 first = True
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
586 for arg in node.args:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
587 if not first:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
588 self._write(', ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
589 first = False
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
590 self.visit(arg)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
591
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
592 for keyword in node.keywords:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
593 if not first:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
594 self._write(', ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
595 first = False
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
596 # keyword = (identifier arg, expr value)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
597 self._write(keyword.arg)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
598 self._write('=')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
599 self.visit(keyword.value)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
600 if getattr(node, 'starargs', None):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
601 if not first:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
602 self._write(', ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
603 first = False
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
604 self._write('*')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
605 self.visit(node.starargs)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
606
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
607 if getattr(node, 'kwargs', None):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
608 if not first:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
609 self._write(', ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
610 first = False
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
611 self._write('**')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
612 self.visit(node.kwargs)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
613 self._write(')')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
614
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
615 # Repr(expr value)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
616 def visit_Repr(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
617 self._write('`')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
618 self.visit(node.value)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
619 self._write('`')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
620
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
621 # Num(object n)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
622 def visit_Num(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
623 self._write(repr(node.n))
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
624
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
625 # Str(string s)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
626 def visit_Str(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
627 self._write(repr(node.s))
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
628
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
629 # Attribute(expr value, identifier attr, expr_context ctx)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
630 def visit_Attribute(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
631 self.visit(node.value)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
632 self._write('.')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
633 self._write(node.attr)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
634
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
635 # Subscript(expr value, slice slice, expr_context ctx)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
636 def visit_Subscript(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
637 self.visit(node.value)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
638 self._write('[')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
639 def _process_slice(node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
640 if isinstance(node, _ast.Ellipsis):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
641 self._write('...')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
642 elif isinstance(node, _ast.Slice):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
643 if getattr(node, 'lower', 'None'):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
644 self.visit(node.lower)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
645 self._write(':')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
646 if getattr(node, 'upper', None):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
647 self.visit(node.upper)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
648 if getattr(node, 'step', None):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
649 self._write(':')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
650 self.visit(node.step)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
651 elif isinstance(node, _ast.Index):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
652 self.visit(node.value)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
653 elif isinstance(node, _ast.ExtSlice):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
654 self.visit(node.dims[0])
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
655 for dim in node.dims[1:]:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
656 self._write(', ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
657 self.visit(dim)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
658 else:
902
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
659 raise NotImplemented('Slice type not implemented')
820
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
660 _process_slice(node.slice)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
661 self._write(']')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
662
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
663 # Name(identifier id, expr_context ctx)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
664 def visit_Name(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
665 self._write(node.id)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
666
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
667 # List(expr* elts, expr_context ctx)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
668 def visit_List(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
669 self._write('[')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
670 for elt in node.elts:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
671 self.visit(elt)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
672 self._write(', ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
673 self._write(']')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
674
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
675 # Tuple(expr *elts, expr_context ctx)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
676 def visit_Tuple(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
677 self._write('(')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
678 for elt in node.elts:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
679 self.visit(elt)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
680 self._write(', ')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
681 self._write(')')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
682
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
683
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
684 class ASTTransformer(object):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
685 """General purpose base class for AST transformations.
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
686
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
687 Every visitor method can be overridden to return an AST node that has been
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
688 altered or replaced in some way.
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
689 """
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
690
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
691 def visit(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
692 if node is None:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
693 return None
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
694 if type(node) is tuple:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
695 return tuple([self.visit(n) for n in node])
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
696 visitor = getattr(self, 'visit_%s' % node.__class__.__name__, None)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
697 if visitor is None:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
698 return node
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
699 return visitor(node)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
700
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
701 def _clone(self, node):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
702 clone = node.__class__()
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
703 for name in getattr(clone, '_attributes', ()):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
704 try:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
705 setattr(clone, 'name', getattr(node, name))
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
706 except AttributeError:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
707 pass
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
708 for name in clone._fields:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
709 try:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
710 value = getattr(node, name)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
711 except AttributeError:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
712 pass
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
713 else:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
714 if value is None:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
715 pass
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
716 elif isinstance(value, list):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
717 value = [self.visit(x) for x in value]
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
718 elif isinstance(value, tuple):
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
719 value = tuple(self.visit(x) for x in value)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
720 else:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
721 value = self.visit(value)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
722 setattr(clone, name, value)
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
723 return clone
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
724
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
725 visit_Module = _clone
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
726 visit_Interactive = _clone
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
727 visit_Expression = _clone
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
728 visit_Suite = _clone
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
729
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
730 visit_FunctionDef = _clone
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
731 visit_ClassDef = _clone
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
732 visit_Return = _clone
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
733 visit_Delete = _clone
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
734 visit_Assign = _clone
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
735 visit_AugAssign = _clone
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
736 visit_Print = _clone
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
737 visit_For = _clone
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
738 visit_While = _clone
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
739 visit_If = _clone
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
740 visit_With = _clone
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
741 visit_Raise = _clone
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
742 visit_TryExcept = _clone
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
743 visit_TryFinally = _clone
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
744 visit_Assert = _clone
902
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
745 visit_ExceptHandler = _clone
820
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
746
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
747 visit_Import = _clone
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
748 visit_ImportFrom = _clone
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
749 visit_Exec = _clone
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
750 visit_Global = _clone
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
751 visit_Expr = _clone
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
752 # Pass, Break, Continue don't need to be copied
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
753
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
754 visit_BoolOp = _clone
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
755 visit_BinOp = _clone
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
756 visit_UnaryOp = _clone
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
757 visit_Lambda = _clone
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
758 visit_IfExp = _clone
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
759 visit_Dict = _clone
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
760 visit_ListComp = _clone
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
761 visit_GeneratorExp = _clone
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
762 visit_Yield = _clone
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
763 visit_Compare = _clone
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
764 visit_Call = _clone
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
765 visit_Repr = _clone
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
766 # Num, Str don't need to be copied
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
767
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
768 visit_Attribute = _clone
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
769 visit_Subscript = _clone
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
770 visit_Name = _clone
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
771 visit_List = _clone
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
772 visit_Tuple = _clone
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
773
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
774 visit_comprehension = _clone
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
775 visit_excepthandler = _clone
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
776 visit_arguments = _clone
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
777 visit_keyword = _clone
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
778 visit_alias = _clone
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
779
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
780 visit_Slice = _clone
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
781 visit_ExtSlice = _clone
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
782 visit_Index = _clone
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
783
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents:
diff changeset
784 del _clone
Copyright (C) 2012-2017 Edgewall Software