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

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

Issue 10828093: Properly unparse as operator. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 4 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
« no previous file with comments | « no previous file | tests/language/language.status » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 class Unparser implements Visitor { 5 class Unparser implements Visitor {
6 final Renamer renamer; 6 final Renamer renamer;
7 StringBuffer sb; 7 StringBuffer sb;
8 8
9 Unparser([this.renamer = const Renamer()]); 9 Unparser([this.renamer = const Renamer()]);
10 10
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
218 add(node.beginToken.value); 218 add(node.beginToken.value);
219 if (node.hasExpression) { 219 if (node.hasExpression) {
220 sb.add(' '); 220 sb.add(' ');
221 visit(node.expression); 221 visit(node.expression);
222 } 222 }
223 if (node.endToken !== null) add(node.endToken.value); 223 if (node.endToken !== null) add(node.endToken.value);
224 } 224 }
225 225
226 unparseSendPart(Send node) { 226 unparseSendPart(Send node) {
227 Operator op = node.selector.asOperator(); 227 Operator op = node.selector.asOperator();
228 bool isCheck = op !== null && op.source.stringValue === 'is'; 228 bool spacesNeeded = op !== null &&
229 (op.source.stringValue === 'is' || op.source.stringValue == 'as');
229 230
230 if (node.isPrefix) { 231 if (node.isPrefix) {
231 visit(node.selector); 232 visit(node.selector);
232 } 233 }
233 if (node.receiver !== null) { 234 if (node.receiver !== null) {
234 visit(node.receiver); 235 visit(node.receiver);
235 CascadeReceiver asCascadeReceiver = node.receiver.asCascadeReceiver(); 236 CascadeReceiver asCascadeReceiver = node.receiver.asCascadeReceiver();
236 if (asCascadeReceiver !== null) { 237 if (asCascadeReceiver !== null) {
237 add(asCascadeReceiver.cascadeOperator.value); 238 add(asCascadeReceiver.cascadeOperator.value);
238 } else if (op === null) { 239 } else if (op === null) {
239 sb.add('.'); 240 sb.add('.');
240 } else if (isCheck) { 241 } else if (spacesNeeded) {
241 sb.add(' '); 242 sb.add(' ');
242 } 243 }
243 } 244 }
244 if (!node.isPrefix && !node.isIndex) { 245 if (!node.isPrefix && !node.isIndex) {
245 visit(node.selector); 246 visit(node.selector);
246 } 247 }
247 if (isCheck) { 248 if (spacesNeeded) {
248 sb.add(' '); 249 sb.add(' ');
249 } 250 }
250 } 251 }
251 252
252 unparseSend(Send node) { 253 unparseSend(Send node) {
253 unparseSendPart(node); 254 unparseSendPart(node);
254 visit(node.argumentsNode); 255 visit(node.argumentsNode);
255 } 256 }
256 257
257 visitSend(Send node) { 258 visitSend(Send node) {
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after
512 sb.add(' '); 513 sb.add(' ');
513 } 514 }
514 visit(node.name); 515 visit(node.name);
515 if (node.typeParameters !== null) { 516 if (node.typeParameters !== null) {
516 visit(node.typeParameters); 517 visit(node.typeParameters);
517 } 518 }
518 visit(node.formals); 519 visit(node.formals);
519 add(node.endToken.value); 520 add(node.endToken.value);
520 } 521 }
521 } 522 }
OLDNEW
« no previous file with comments | « no previous file | tests/language/language.status » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698