Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(817)

Side by Side Diff: dart/sdk/lib/_internal/compiler/implementation/tree/unparser.dart

Issue 12294028: Fix warnings spotted by dart. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 part of tree; 5 part of tree;
6 6
7 String unparse(Node node) { 7 String unparse(Node node) {
8 Unparser unparser = new Unparser(); 8 Unparser unparser = new Unparser();
9 unparser.unparse(node); 9 unparser.unparse(node);
10 return unparser.result; 10 return unparser.result;
11 } 11 }
12 12
13 class Unparser implements Visitor { 13 class Unparser implements Visitor {
14 final StringBuffer sb; 14 final StringBuffer sb;
15 15
16 String get result => sb.toString(); 16 String get result => sb.toString();
17 17
18 Unparser() : sb = new StringBuffer(); 18 Unparser() : sb = new StringBuffer();
19 19
20 void add(SourceString string) { 20 void add(SourceString string) {
21 string.printOn(sb); 21 string.printOn(sb);
22 } 22 }
23 23
24 void addToken(Token token) { 24 void addToken(Token token) {
25 if (token == null) return; 25 if (token == null) return;
26 add(token.value); 26 add(token.value);
27 if (identical(token.kind, KEYWORD_TOKEN) 27 if (identical(token.kind, KEYWORD_TOKEN)
28 || identical(token.kind, IDENTIFIER_TOKEN)) { 28 || identical(token.kind, IDENTIFIER_TOKEN)) {
29 sb.add(' '); 29 sb.write(' ');
30 } 30 }
31 } 31 }
32 32
33 unparse(Node node) { visit(node); } 33 unparse(Node node) { visit(node); }
34 34
35 visit(Node node) { 35 visit(Node node) {
36 if (node != null) node.accept(this); 36 if (node != null) node.accept(this);
37 } 37 }
38 38
39 visitBlock(Block node) { 39 visitBlock(Block node) {
(...skipping 11 matching lines...) Expand all
51 unparseClassWithBody(ClassNode node, Iterable<Node> members) { 51 unparseClassWithBody(ClassNode node, Iterable<Node> members) {
52 addToken(node.beginToken); 52 addToken(node.beginToken);
53 if (node.beginToken.stringValue == 'abstract') { 53 if (node.beginToken.stringValue == 'abstract') {
54 addToken(node.beginToken.next); 54 addToken(node.beginToken.next);
55 } 55 }
56 visit(node.name); 56 visit(node.name);
57 if (node.typeParameters != null) { 57 if (node.typeParameters != null) {
58 visit(node.typeParameters); 58 visit(node.typeParameters);
59 } 59 }
60 if (node.extendsKeyword != null) { 60 if (node.extendsKeyword != null) {
61 sb.add(' '); 61 sb.write(' ');
62 addToken(node.extendsKeyword); 62 addToken(node.extendsKeyword);
63 visit(node.superclass); 63 visit(node.superclass);
64 } 64 }
65 if (!node.interfaces.isEmpty) { 65 if (!node.interfaces.isEmpty) {
66 sb.add(' '); 66 sb.write(' ');
67 visit(node.interfaces); 67 visit(node.interfaces);
68 } 68 }
69 if (node.defaultClause != null) { 69 if (node.defaultClause != null) {
70 sb.add(' default '); 70 sb.write(' default ');
71 visit(node.defaultClause); 71 visit(node.defaultClause);
72 } 72 }
73 sb.add('{'); 73 sb.write('{');
74 for (final member in members) { 74 for (final member in members) {
75 visit(member); 75 visit(member);
76 } 76 }
77 sb.add('}'); 77 sb.write('}');
78 } 78 }
79 79
80 visitClassNode(ClassNode node) { 80 visitClassNode(ClassNode node) {
81 unparseClassWithBody(node, node.body.nodes); 81 unparseClassWithBody(node, node.body.nodes);
82 } 82 }
83 83
84 visitMixinApplication(MixinApplication node) { 84 visitMixinApplication(MixinApplication node) {
85 visit(node.superclass); 85 visit(node.superclass);
86 sb.add(' with '); 86 sb.write(' with ');
87 visit(node.mixins); 87 visit(node.mixins);
88 } 88 }
89 89
90 visitNamedMixinApplication(NamedMixinApplication node) { 90 visitNamedMixinApplication(NamedMixinApplication node) {
91 sb.add('typedef '); 91 sb.write('typedef ');
92 visit(node.name); 92 visit(node.name);
93 if (node.typeParameters != null) { 93 if (node.typeParameters != null) {
94 visit(node.typeParameters); 94 visit(node.typeParameters);
95 } 95 }
96 sb.add(' = '); 96 sb.write(' = ');
97 if (!node.modifiers.nodes.isEmpty) { 97 if (!node.modifiers.nodes.isEmpty) {
98 visit(node.modifiers); 98 visit(node.modifiers);
99 sb.add(' '); 99 sb.write(' ');
100 } 100 }
101 visit(node.mixinApplication); 101 visit(node.mixinApplication);
102 if (node.interfaces != null) { 102 if (node.interfaces != null) {
103 sb.add(' implements '); 103 sb.write(' implements ');
104 visit(node.interfaces); 104 visit(node.interfaces);
105 } 105 }
106 sb.add(';'); 106 sb.write(';');
107 } 107 }
108 108
109 visitConditional(Conditional node) { 109 visitConditional(Conditional node) {
110 visit(node.condition); 110 visit(node.condition);
111 add(node.questionToken.value); 111 add(node.questionToken.value);
112 visit(node.thenExpression); 112 visit(node.thenExpression);
113 add(node.colonToken.value); 113 add(node.colonToken.value);
114 visit(node.elseExpression); 114 visit(node.elseExpression);
115 } 115 }
116 116
117 visitExpressionStatement(ExpressionStatement node) { 117 visitExpressionStatement(ExpressionStatement node) {
118 visit(node.expression); 118 visit(node.expression);
119 add(node.endToken.value); 119 add(node.endToken.value);
120 } 120 }
121 121
122 visitFor(For node) { 122 visitFor(For node) {
123 add(node.forToken.value); 123 add(node.forToken.value);
124 sb.add('('); 124 sb.write('(');
125 visit(node.initializer); 125 visit(node.initializer);
126 sb.add(';'); 126 sb.write(';');
127 visit(node.conditionStatement); 127 visit(node.conditionStatement);
128 visit(node.update); 128 visit(node.update);
129 sb.add(')'); 129 sb.write(')');
130 visit(node.body); 130 visit(node.body);
131 } 131 }
132 132
133 visitFunctionDeclaration(FunctionDeclaration node) { 133 visitFunctionDeclaration(FunctionDeclaration node) {
134 visit(node.function); 134 visit(node.function);
135 } 135 }
136 136
137 void unparseFunctionName(Node name) { 137 void unparseFunctionName(Node name) {
138 // TODO(antonm): that's a workaround as currently FunctionExpression 138 // TODO(antonm): that's a workaround as currently FunctionExpression
139 // names are modelled with Send and it emits operator[] as only 139 // names are modelled with Send and it emits operator[] as only
140 // operator, without [] which are expected to be emitted with 140 // operator, without [] which are expected to be emitted with
141 // arguments. 141 // arguments.
142 if (name is Send) { 142 if (name is Send) {
143 Send send = name; 143 Send send = name;
144 assert(send is !SendSet); 144 assert(send is !SendSet);
145 if (!send.isOperator) { 145 if (!send.isOperator) {
146 // Looks like a factory method. 146 // Looks like a factory method.
147 visit(send.receiver); 147 visit(send.receiver);
148 sb.add('.'); 148 sb.write('.');
149 } else { 149 } else {
150 visit(send.receiver); 150 visit(send.receiver);
151 Identifier identifier = send.selector.asIdentifier(); 151 Identifier identifier = send.selector.asIdentifier();
152 if (identical(identifier.token.kind, KEYWORD_TOKEN)) { 152 if (identical(identifier.token.kind, KEYWORD_TOKEN)) {
153 sb.add(' '); 153 sb.write(' ');
154 } else if (identifier.source == const SourceString('negate')) { 154 } else if (identifier.source == const SourceString('negate')) {
155 // TODO(ahe): Remove special case for negate. 155 // TODO(ahe): Remove special case for negate.
156 sb.add(' '); 156 sb.write(' ');
157 } 157 }
158 } 158 }
159 visit(send.selector); 159 visit(send.selector);
160 } else { 160 } else {
161 visit(name); 161 visit(name);
162 } 162 }
163 } 163 }
164 164
165 visitFunctionExpression(FunctionExpression node) { 165 visitFunctionExpression(FunctionExpression node) {
166 if (!node.modifiers.nodes.isEmpty) { 166 if (!node.modifiers.nodes.isEmpty) {
167 visit(node.modifiers); 167 visit(node.modifiers);
168 sb.add(' '); 168 sb.write(' ');
169 } 169 }
170 if (node.returnType != null) { 170 if (node.returnType != null) {
171 visit(node.returnType); 171 visit(node.returnType);
172 sb.add(' '); 172 sb.write(' ');
173 } 173 }
174 if (node.getOrSet != null) { 174 if (node.getOrSet != null) {
175 add(node.getOrSet.value); 175 add(node.getOrSet.value);
176 sb.add(' '); 176 sb.write(' ');
177 } 177 }
178 unparseFunctionName(node.name); 178 unparseFunctionName(node.name);
179 visit(node.parameters); 179 visit(node.parameters);
180 visit(node.initializers); 180 visit(node.initializers);
181 visit(node.body); 181 visit(node.body);
182 } 182 }
183 183
184 visitIdentifier(Identifier node) { 184 visitIdentifier(Identifier node) {
185 add(node.token.value); 185 add(node.token.value);
186 } 186 }
187 187
188 visitIf(If node) { 188 visitIf(If node) {
189 add(node.ifToken.value); 189 add(node.ifToken.value);
190 visit(node.condition); 190 visit(node.condition);
191 visit(node.thenPart); 191 visit(node.thenPart);
192 if (node.hasElsePart) { 192 if (node.hasElsePart) {
193 add(node.elseToken.value); 193 add(node.elseToken.value);
194 if (node.elsePart is !Block) sb.add(' '); 194 if (node.elsePart is !Block) sb.write(' ');
195 visit(node.elsePart); 195 visit(node.elsePart);
196 } 196 }
197 } 197 }
198 198
199 visitLiteralBool(LiteralBool node) { 199 visitLiteralBool(LiteralBool node) {
200 add(node.token.value); 200 add(node.token.value);
201 } 201 }
202 202
203 visitLiteralDouble(LiteralDouble node) { 203 visitLiteralDouble(LiteralDouble node) {
204 add(node.token.value); 204 add(node.token.value);
205 // -Lit is represented as a send. 205 // -Lit is represented as a send.
206 if (node.token.kind == PLUS_TOKEN) add(node.token.next.value); 206 if (node.token.kind == PLUS_TOKEN) add(node.token.next.value);
207 } 207 }
208 208
209 visitLiteralInt(LiteralInt node) { 209 visitLiteralInt(LiteralInt node) {
210 add(node.token.value); 210 add(node.token.value);
211 // -Lit is represented as a send. 211 // -Lit is represented as a send.
212 if (node.token.kind == PLUS_TOKEN) add(node.token.next.value); 212 if (node.token.kind == PLUS_TOKEN) add(node.token.next.value);
213 } 213 }
214 214
215 visitLiteralString(LiteralString node) { 215 visitLiteralString(LiteralString node) {
216 add(node.token.value); 216 add(node.token.value);
217 } 217 }
218 218
219 visitStringJuxtaposition(StringJuxtaposition node) { 219 visitStringJuxtaposition(StringJuxtaposition node) {
220 visit(node.first); 220 visit(node.first);
221 sb.add(" "); 221 sb.write(" ");
222 visit(node.second); 222 visit(node.second);
223 } 223 }
224 224
225 visitLiteralNull(LiteralNull node) { 225 visitLiteralNull(LiteralNull node) {
226 add(node.token.value); 226 add(node.token.value);
227 } 227 }
228 228
229 visitNewExpression(NewExpression node) { 229 visitNewExpression(NewExpression node) {
230 addToken(node.newToken); 230 addToken(node.newToken);
231 visit(node.send); 231 visit(node.send);
232 } 232 }
233 233
234 visitLiteralList(LiteralList node) { 234 visitLiteralList(LiteralList node) {
235 if (node.constKeyword != null) add(node.constKeyword.value); 235 if (node.constKeyword != null) add(node.constKeyword.value);
236 visit(node.typeArguments); 236 visit(node.typeArguments);
237 visit(node.elements); 237 visit(node.elements);
238 // If list is empty, emit space after [] to disambiguate cases like []==[]. 238 // If list is empty, emit space after [] to disambiguate cases like []==[].
239 if (node.elements.isEmpty) sb.add(' '); 239 if (node.elements.isEmpty) sb.write(' ');
240 } 240 }
241 241
242 visitModifiers(Modifiers node) => node.visitChildren(this); 242 visitModifiers(Modifiers node) => node.visitChildren(this);
243 243
244 /** 244 /**
245 * Unparses given NodeList starting from specific node. 245 * Unparses given NodeList starting from specific node.
246 */ 246 */
247 unparseNodeListFrom(NodeList node, Link<Node> from) { 247 unparseNodeListFrom(NodeList node, Link<Node> from) {
248 if (from.isEmpty) return; 248 if (from.isEmpty) return;
249 String delimiter = (node.delimiter == null) ? "" : "${node.delimiter}"; 249 String delimiter = (node.delimiter == null) ? "" : "${node.delimiter}";
250 visit(from.head); 250 visit(from.head);
251 for (Link link = from.tail; !link.isEmpty; link = link.tail) { 251 for (Link link = from.tail; !link.isEmpty; link = link.tail) {
252 sb.add(delimiter); 252 sb.write(delimiter);
253 visit(link.head); 253 visit(link.head);
254 } 254 }
255 } 255 }
256 256
257 visitNodeList(NodeList node) { 257 visitNodeList(NodeList node) {
258 addToken(node.beginToken); 258 addToken(node.beginToken);
259 if (node.nodes != null) { 259 if (node.nodes != null) {
260 unparseNodeListFrom(node, node.nodes); 260 unparseNodeListFrom(node, node.nodes);
261 } 261 }
262 if (node.endToken != null) add(node.endToken.value); 262 if (node.endToken != null) add(node.endToken.value);
263 } 263 }
264 264
265 visitOperator(Operator node) { 265 visitOperator(Operator node) {
266 visitIdentifier(node); 266 visitIdentifier(node);
267 } 267 }
268 268
269 visitReturn(Return node) { 269 visitReturn(Return node) {
270 if (node.isRedirectingFactoryBody) { 270 if (node.isRedirectingFactoryBody) {
271 sb.add(' '); 271 sb.write(' ');
272 } 272 }
273 add(node.beginToken.value); 273 add(node.beginToken.value);
274 if (node.hasExpression && node.beginToken.stringValue != '=>') { 274 if (node.hasExpression && node.beginToken.stringValue != '=>') {
275 sb.add(' '); 275 sb.write(' ');
276 } 276 }
277 visit(node.expression); 277 visit(node.expression);
278 if (node.endToken != null) add(node.endToken.value); 278 if (node.endToken != null) add(node.endToken.value);
279 } 279 }
280 280
281 unparseSendReceiver(Send node, {bool spacesNeeded: false}) { 281 unparseSendReceiver(Send node, {bool spacesNeeded: false}) {
282 if (node.receiver == null) return; 282 if (node.receiver == null) return;
283 visit(node.receiver); 283 visit(node.receiver);
284 CascadeReceiver asCascadeReceiver = node.receiver.asCascadeReceiver(); 284 CascadeReceiver asCascadeReceiver = node.receiver.asCascadeReceiver();
285 if (asCascadeReceiver != null) { 285 if (asCascadeReceiver != null) {
286 add(asCascadeReceiver.cascadeOperator.value); 286 add(asCascadeReceiver.cascadeOperator.value);
287 } else if (node.selector.asOperator() == null) { 287 } else if (node.selector.asOperator() == null) {
288 sb.add('.'); 288 sb.write('.');
289 } else if (spacesNeeded) { 289 } else if (spacesNeeded) {
290 sb.add(' '); 290 sb.write(' ');
291 } 291 }
292 } 292 }
293 293
294 visitSend(Send node) { 294 visitSend(Send node) {
295 Operator op = node.selector.asOperator(); 295 Operator op = node.selector.asOperator();
296 String opString = op != null ? op.source.stringValue : null; 296 String opString = op != null ? op.source.stringValue : null;
297 bool spacesNeeded = identical(opString, 'is') || identical(opString, 'as'); 297 bool spacesNeeded = identical(opString, 'is') || identical(opString, 'as');
298 298
299 if (node.isPrefix) visit(node.selector); 299 if (node.isPrefix) visit(node.selector);
300 unparseSendReceiver(node, spacesNeeded: spacesNeeded); 300 unparseSendReceiver(node, spacesNeeded: spacesNeeded);
301 if (!node.isPrefix && !node.isIndex) visit(node.selector); 301 if (!node.isPrefix && !node.isIndex) visit(node.selector);
302 if (spacesNeeded) sb.add(' '); 302 if (spacesNeeded) sb.write(' ');
303 // Also add a space for sequences like x + +1 and y - -y. 303 // Also add a space for sequences like x + +1 and y - -y.
304 // TODO(ahe): remove case for '+' when we drop the support for it. 304 // TODO(ahe): remove case for '+' when we drop the support for it.
305 if (node.argumentsNode != null && (identical(opString, '-') 305 if (node.argumentsNode != null && (identical(opString, '-')
306 || identical(opString, '+'))) { 306 || identical(opString, '+'))) {
307 Token beginToken = node.argumentsNode.getBeginToken(); 307 Token beginToken = node.argumentsNode.getBeginToken();
308 if (beginToken != null && identical(beginToken.stringValue, opString)) { 308 if (beginToken != null && identical(beginToken.stringValue, opString)) {
309 sb.add(' '); 309 sb.write(' ');
310 } 310 }
311 } 311 }
312 visit(node.argumentsNode); 312 visit(node.argumentsNode);
313 } 313 }
314 314
315 visitSendSet(SendSet node) { 315 visitSendSet(SendSet node) {
316 if (node.isPrefix) { 316 if (node.isPrefix) {
317 sb.add(' '); 317 sb.write(' ');
318 visit(node.assignmentOperator); 318 visit(node.assignmentOperator);
319 } 319 }
320 unparseSendReceiver(node); 320 unparseSendReceiver(node);
321 if (node.isIndex) { 321 if (node.isIndex) {
322 sb.add('['); 322 sb.write('[');
323 visit(node.arguments.head); 323 visit(node.arguments.head);
324 sb.add(']'); 324 sb.write(']');
325 if (!node.isPrefix) visit(node.assignmentOperator); 325 if (!node.isPrefix) visit(node.assignmentOperator);
326 unparseNodeListFrom(node.argumentsNode, node.argumentsNode.nodes.tail); 326 unparseNodeListFrom(node.argumentsNode, node.argumentsNode.nodes.tail);
327 } else { 327 } else {
328 visit(node.selector); 328 visit(node.selector);
329 if (!node.isPrefix) { 329 if (!node.isPrefix) {
330 visit(node.assignmentOperator); 330 visit(node.assignmentOperator);
331 if (node.assignmentOperator.source.slowToString() != '=') sb.add(' '); 331 if (node.assignmentOperator.source.slowToString() != '=') sb.write(' ');
332 } 332 }
333 visit(node.argumentsNode); 333 visit(node.argumentsNode);
334 } 334 }
335 } 335 }
336 336
337 visitThrow(Throw node) { 337 visitThrow(Throw node) {
338 add(node.throwToken.value); 338 add(node.throwToken.value);
339 if (node.expression != null) { 339 if (node.expression != null) {
340 sb.add(' '); 340 sb.write(' ');
341 visit(node.expression); 341 visit(node.expression);
342 } 342 }
343 node.endToken.value.printOn(sb); 343 node.endToken.value.printOn(sb);
344 } 344 }
345 345
346 visitTypeAnnotation(TypeAnnotation node) { 346 visitTypeAnnotation(TypeAnnotation node) {
347 visit(node.typeName); 347 visit(node.typeName);
348 visit(node.typeArguments); 348 visit(node.typeArguments);
349 } 349 }
350 350
351 visitTypeVariable(TypeVariable node) { 351 visitTypeVariable(TypeVariable node) {
352 visit(node.name); 352 visit(node.name);
353 if (node.bound != null) { 353 if (node.bound != null) {
354 sb.add(' extends '); 354 sb.write(' extends ');
355 visit(node.bound); 355 visit(node.bound);
356 } 356 }
357 } 357 }
358 358
359 visitVariableDefinitions(VariableDefinitions node) { 359 visitVariableDefinitions(VariableDefinitions node) {
360 visit(node.modifiers); 360 visit(node.modifiers);
361 if (!node.modifiers.nodes.isEmpty) { 361 if (!node.modifiers.nodes.isEmpty) {
362 sb.add(' '); 362 sb.write(' ');
363 } 363 }
364 if (node.type != null) { 364 if (node.type != null) {
365 visit(node.type); 365 visit(node.type);
366 sb.add(' '); 366 sb.write(' ');
367 } 367 }
368 visit(node.definitions); 368 visit(node.definitions);
369 } 369 }
370 370
371 visitDoWhile(DoWhile node) { 371 visitDoWhile(DoWhile node) {
372 add(node.doKeyword.value); 372 add(node.doKeyword.value);
373 if (node.body is !Block) sb.add(' '); 373 if (node.body is !Block) sb.write(' ');
374 visit(node.body); 374 visit(node.body);
375 add(node.whileKeyword.value); 375 add(node.whileKeyword.value);
376 visit(node.condition); 376 visit(node.condition);
377 sb.add(node.endToken.value); 377 sb.write(node.endToken.value);
378 } 378 }
379 379
380 visitWhile(While node) { 380 visitWhile(While node) {
381 addToken(node.whileKeyword); 381 addToken(node.whileKeyword);
382 visit(node.condition); 382 visit(node.condition);
383 visit(node.body); 383 visit(node.body);
384 } 384 }
385 385
386 visitParenthesizedExpression(ParenthesizedExpression node) { 386 visitParenthesizedExpression(ParenthesizedExpression node) {
387 add(node.getBeginToken().value); 387 add(node.getBeginToken().value);
388 visit(node.expression); 388 visit(node.expression);
389 add(node.getEndToken().value); 389 add(node.getEndToken().value);
390 } 390 }
391 391
392 visitStringInterpolation(StringInterpolation node) { 392 visitStringInterpolation(StringInterpolation node) {
393 visit(node.string); 393 visit(node.string);
394 visit(node.parts); 394 visit(node.parts);
395 } 395 }
396 396
397 visitStringInterpolationPart(StringInterpolationPart node) { 397 visitStringInterpolationPart(StringInterpolationPart node) {
398 sb.add('\${'); // TODO(ahe): Preserve the real tokens. 398 sb.write('\${'); // TODO(ahe): Preserve the real tokens.
399 visit(node.expression); 399 visit(node.expression);
400 sb.add('}'); 400 sb.write('}');
401 visit(node.string); 401 visit(node.string);
402 } 402 }
403 403
404 visitEmptyStatement(EmptyStatement node) { 404 visitEmptyStatement(EmptyStatement node) {
405 add(node.semicolonToken.value); 405 add(node.semicolonToken.value);
406 } 406 }
407 407
408 visitGotoStatement(GotoStatement node) { 408 visitGotoStatement(GotoStatement node) {
409 add(node.keywordToken.value); 409 add(node.keywordToken.value);
410 if (node.target != null) { 410 if (node.target != null) {
411 sb.add(' '); 411 sb.write(' ');
412 visit(node.target); 412 visit(node.target);
413 } 413 }
414 add(node.semicolonToken.value); 414 add(node.semicolonToken.value);
415 } 415 }
416 416
417 visitBreakStatement(BreakStatement node) { 417 visitBreakStatement(BreakStatement node) {
418 visitGotoStatement(node); 418 visitGotoStatement(node);
419 } 419 }
420 420
421 visitContinueStatement(ContinueStatement node) { 421 visitContinueStatement(ContinueStatement node) {
422 visitGotoStatement(node); 422 visitGotoStatement(node);
423 } 423 }
424 424
425 visitForIn(ForIn node) { 425 visitForIn(ForIn node) {
426 add(node.forToken.value); 426 add(node.forToken.value);
427 sb.add('('); 427 sb.write('(');
428 visit(node.declaredIdentifier); 428 visit(node.declaredIdentifier);
429 sb.add(' '); 429 sb.write(' ');
430 addToken(node.inToken); 430 addToken(node.inToken);
431 visit(node.expression); 431 visit(node.expression);
432 sb.add(')'); 432 sb.write(')');
433 visit(node.body); 433 visit(node.body);
434 } 434 }
435 435
436 visitLabel(Label node) { 436 visitLabel(Label node) {
437 visit(node.identifier); 437 visit(node.identifier);
438 add(node.colonToken.value); 438 add(node.colonToken.value);
439 } 439 }
440 440
441 visitLabeledStatement(LabeledStatement node) { 441 visitLabeledStatement(LabeledStatement node) {
442 visit(node.labels); 442 visit(node.labels);
(...skipping 20 matching lines...) Expand all
463 463
464 visitSwitchStatement(SwitchStatement node) { 464 visitSwitchStatement(SwitchStatement node) {
465 addToken(node.switchKeyword); 465 addToken(node.switchKeyword);
466 visit(node.parenthesizedExpression); 466 visit(node.parenthesizedExpression);
467 visit(node.cases); 467 visit(node.cases);
468 } 468 }
469 469
470 visitSwitchCase(SwitchCase node) { 470 visitSwitchCase(SwitchCase node) {
471 visit(node.labelsAndCases); 471 visit(node.labelsAndCases);
472 if (node.isDefaultCase) { 472 if (node.isDefaultCase) {
473 sb.add('default:'); 473 sb.write('default:');
474 } 474 }
475 visit(node.statements); 475 visit(node.statements);
476 } 476 }
477 477
478 unparseImportTag(String uri, [String prefix]) { 478 unparseImportTag(String uri, [String prefix]) {
479 final suffix = prefix == null ? '' : ' as $prefix'; 479 final suffix = prefix == null ? '' : ' as $prefix';
480 sb.add('import "$uri"$suffix;'); 480 sb.write('import "$uri"$suffix;');
481 } 481 }
482 482
483 visitScriptTag(ScriptTag node) { 483 visitScriptTag(ScriptTag node) {
484 add(node.beginToken.value); 484 add(node.beginToken.value);
485 visit(node.tag); 485 visit(node.tag);
486 sb.add('('); 486 sb.write('(');
487 visit(node.argument); 487 visit(node.argument);
488 if (node.prefixIdentifier != null) { 488 if (node.prefixIdentifier != null) {
489 visit(node.prefixIdentifier); 489 visit(node.prefixIdentifier);
490 sb.add(':'); 490 sb.write(':');
491 visit(node.prefix); 491 visit(node.prefix);
492 } 492 }
493 sb.add(')'); 493 sb.write(')');
494 add(node.endToken.value); 494 add(node.endToken.value);
495 } 495 }
496 496
497 visitTryStatement(TryStatement node) { 497 visitTryStatement(TryStatement node) {
498 addToken(node.tryKeyword); 498 addToken(node.tryKeyword);
499 visit(node.tryBlock); 499 visit(node.tryBlock);
500 visit(node.catchBlocks); 500 visit(node.catchBlocks);
501 if (node.finallyKeyword != null) { 501 if (node.finallyKeyword != null) {
502 addToken(node.finallyKeyword); 502 addToken(node.finallyKeyword);
503 visit(node.finallyBlock); 503 visit(node.finallyBlock);
504 } 504 }
505 } 505 }
506 506
507 visitCaseMatch(CaseMatch node) { 507 visitCaseMatch(CaseMatch node) {
508 add(node.caseKeyword.value); 508 add(node.caseKeyword.value);
509 sb.add(" "); 509 sb.write(" ");
510 visit(node.expression); 510 visit(node.expression);
511 add(node.colonToken.value); 511 add(node.colonToken.value);
512 } 512 }
513 513
514 visitCatchBlock(CatchBlock node) { 514 visitCatchBlock(CatchBlock node) {
515 addToken(node.onKeyword); 515 addToken(node.onKeyword);
516 if (node.type != null) { 516 if (node.type != null) {
517 visit(node.type); 517 visit(node.type);
518 sb.add(' '); 518 sb.write(' ');
519 } 519 }
520 addToken(node.catchKeyword); 520 addToken(node.catchKeyword);
521 visit(node.formals); 521 visit(node.formals);
522 visit(node.block); 522 visit(node.block);
523 } 523 }
524 524
525 visitTypedef(Typedef node) { 525 visitTypedef(Typedef node) {
526 addToken(node.typedefKeyword); 526 addToken(node.typedefKeyword);
527 if (node.returnType != null) { 527 if (node.returnType != null) {
528 visit(node.returnType); 528 visit(node.returnType);
529 sb.add(' '); 529 sb.write(' ');
530 } 530 }
531 visit(node.name); 531 visit(node.name);
532 if (node.typeParameters != null) { 532 if (node.typeParameters != null) {
533 visit(node.typeParameters); 533 visit(node.typeParameters);
534 } 534 }
535 visit(node.formals); 535 visit(node.formals);
536 add(node.endToken.value); 536 add(node.endToken.value);
537 } 537 }
538 538
539 visitLibraryName(LibraryName node) { 539 visitLibraryName(LibraryName node) {
540 addToken(node.libraryKeyword); 540 addToken(node.libraryKeyword);
541 node.visitChildren(this); 541 node.visitChildren(this);
542 add(node.getEndToken().value); 542 add(node.getEndToken().value);
543 } 543 }
544 544
545 visitImport(Import node) { 545 visitImport(Import node) {
546 addToken(node.importKeyword); 546 addToken(node.importKeyword);
547 visit(node.uri); 547 visit(node.uri);
548 if (node.prefix != null) { 548 if (node.prefix != null) {
549 sb.add(' '); 549 sb.write(' ');
550 addToken(node.asKeyword); 550 addToken(node.asKeyword);
551 visit(node.prefix); 551 visit(node.prefix);
552 } 552 }
553 if (node.combinators != null) { 553 if (node.combinators != null) {
554 sb.add(' '); 554 sb.write(' ');
555 visit(node.combinators); 555 visit(node.combinators);
556 } 556 }
557 add(node.getEndToken().value); 557 add(node.getEndToken().value);
558 } 558 }
559 559
560 visitExport(Export node) { 560 visitExport(Export node) {
561 addToken(node.exportKeyword); 561 addToken(node.exportKeyword);
562 visit(node.uri); 562 visit(node.uri);
563 if (node.combinators != null) { 563 if (node.combinators != null) {
564 sb.add(' '); 564 sb.write(' ');
565 visit(node.combinators); 565 visit(node.combinators);
566 } 566 }
567 add(node.getEndToken().value); 567 add(node.getEndToken().value);
568 } 568 }
569 569
570 visitPart(Part node) { 570 visitPart(Part node) {
571 addToken(node.partKeyword); 571 addToken(node.partKeyword);
572 visit(node.uri); 572 visit(node.uri);
573 add(node.getEndToken().value); 573 add(node.getEndToken().value);
574 } 574 }
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
618 } 618 }
619 619
620 visitStatement(Statement node) { 620 visitStatement(Statement node) {
621 throw 'internal error'; // Should not be called. 621 throw 'internal error'; // Should not be called.
622 } 622 }
623 623
624 visitStringNode(StringNode node) { 624 visitStringNode(StringNode node) {
625 throw 'internal error'; // Should not be called. 625 throw 'internal error'; // Should not be called.
626 } 626 }
627 } 627 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698