| OLD | NEW |
| 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 // Returns null if no need to rename a node. | 5 // Returns null if no need to rename a node. |
| 6 typedef String Renamer(Node node); | 6 typedef String Renamer(Node node); |
| 7 | 7 |
| 8 class Unparser implements Visitor { | 8 class Unparser implements Visitor { |
| 9 Renamer rename; | 9 Renamer rename; |
| 10 StringBuffer sb; | 10 StringBuffer sb; |
| (...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 227 | 227 |
| 228 visitReturn(Return node) { | 228 visitReturn(Return node) { |
| 229 add(node.beginToken.value); | 229 add(node.beginToken.value); |
| 230 if (node.hasExpression) { | 230 if (node.hasExpression) { |
| 231 sb.add(' '); | 231 sb.add(' '); |
| 232 visit(node.expression); | 232 visit(node.expression); |
| 233 } | 233 } |
| 234 if (node.endToken !== null) add(node.endToken.value); | 234 if (node.endToken !== null) add(node.endToken.value); |
| 235 } | 235 } |
| 236 | 236 |
| 237 unparseSendPart(Send node) { | 237 unparseSendReceiver(Send node, [bool spacesNeeded=false]) { |
| 238 Operator op = node.selector.asOperator(); | |
| 239 bool spacesNeeded = op !== null && | |
| 240 (op.source.stringValue === 'is' || op.source.stringValue == 'as'); | |
| 241 | |
| 242 if (node.isPrefix) { | |
| 243 visit(node.selector); | |
| 244 } | |
| 245 // TODO(smok): Remove ugly hack for library preferences. | 238 // TODO(smok): Remove ugly hack for library preferences. |
| 246 // Check that renamer does not want to omit receiver at all, | 239 // Check that renamer does not want to omit receiver at all, |
| 247 // in that case we don't need spaces or dot. | 240 // in that case we don't need spaces or dot. |
| 248 if (node.receiver !== null && rename(node.receiver) != '') { | 241 if (node.receiver !== null && rename(node.receiver) != '') { |
| 249 visit(node.receiver); | 242 visit(node.receiver); |
| 250 CascadeReceiver asCascadeReceiver = node.receiver.asCascadeReceiver(); | 243 CascadeReceiver asCascadeReceiver = node.receiver.asCascadeReceiver(); |
| 251 if (asCascadeReceiver !== null) { | 244 if (asCascadeReceiver !== null) { |
| 252 add(asCascadeReceiver.cascadeOperator.value); | 245 add(asCascadeReceiver.cascadeOperator.value); |
| 253 } else if (op === null) { | 246 } else if (node.selector.asOperator() === null) { |
| 254 sb.add('.'); | 247 sb.add('.'); |
| 255 } else if (spacesNeeded) { | 248 } else if (spacesNeeded) { |
| 256 sb.add(' '); | 249 sb.add(' '); |
| 257 } | 250 } |
| 258 } | 251 } |
| 259 if (!node.isPrefix && !node.isIndex) { | |
| 260 visit(node.selector); | |
| 261 } | |
| 262 if (spacesNeeded) { | |
| 263 sb.add(' '); | |
| 264 } | |
| 265 } | 252 } |
| 266 | 253 |
| 267 visitSend(Send node) { | 254 visitSend(Send node) { |
| 268 unparseSendPart(node); | 255 Operator op = node.selector.asOperator(); |
| 256 bool spacesNeeded = op !== null && |
| 257 (op.source.stringValue === 'is' || op.source.stringValue == 'as'); |
| 258 |
| 259 if (node.isPrefix) visit(node.selector); |
| 260 unparseSendReceiver(node, spacesNeeded: spacesNeeded); |
| 261 if (!node.isPrefix && !node.isIndex) visit(node.selector); |
| 262 if (spacesNeeded) sb.add(' '); |
| 269 visit(node.argumentsNode); | 263 visit(node.argumentsNode); |
| 270 } | 264 } |
| 271 | 265 |
| 272 /** | 266 visitSendSet(SendSet node) { |
| 273 * Special case for assignments like "list[0] = 1". | |
| 274 */ | |
| 275 unparseIndexedSet(SendSet node) { | |
| 276 if (node.isPrefix) { | 267 if (node.isPrefix) { |
| 277 add(node.assignmentOperator.token.value); | 268 sb.add(' '); |
| 269 visit(node.assignmentOperator); |
| 278 } | 270 } |
| 279 visit(node.receiver); | 271 unparseSendReceiver(node); |
| 280 CascadeReceiver asCascadeReceiver = node.receiver.asCascadeReceiver(); | |
| 281 if (asCascadeReceiver !== null) { | |
| 282 add(asCascadeReceiver.cascadeOperator.value); | |
| 283 } | |
| 284 sb.add('['); | |
| 285 sb.add(node.arguments.head); | |
| 286 sb.add(']'); | |
| 287 if (!node.isPrefix) { | |
| 288 add(node.assignmentOperator.token.value); | |
| 289 } | |
| 290 unparseNodeListFrom(node.argumentsNode, node.argumentsNode.nodes.tail); | |
| 291 } | |
| 292 | |
| 293 visitSendSet(SendSet node) { | |
| 294 if (node.isIndex) { | 272 if (node.isIndex) { |
| 295 unparseIndexedSet(node); | 273 sb.add('['); |
| 274 sb.add(node.arguments.head); |
| 275 sb.add(']'); |
| 276 if (!node.isPrefix) visit(node.assignmentOperator); |
| 277 unparseNodeListFrom(node.argumentsNode, node.argumentsNode.nodes.tail); |
| 296 } else { | 278 } else { |
| 297 if (node.isPrefix) { | |
| 298 sb.add(' '); | |
| 299 add(node.assignmentOperator.source); | |
| 300 } | |
| 301 if (node.receiver !== null && rename(node.receiver) != '') { | |
| 302 visit(node.receiver); | |
| 303 CascadeReceiver asCascadeReceiver = node.receiver.asCascadeReceiver(); | |
| 304 if (asCascadeReceiver !== null) { | |
| 305 add(asCascadeReceiver.cascadeOperator.value); | |
| 306 } else { | |
| 307 sb.add('.'); | |
| 308 } | |
| 309 } | |
| 310 visit(node.selector); | 279 visit(node.selector); |
| 311 if (!node.isPrefix) { | 280 if (!node.isPrefix) { |
| 312 SourceString source = node.assignmentOperator.source; | 281 visit(node.assignmentOperator); |
| 313 add(source); | 282 if (node.assignmentOperator.source.slowToString() != '=') sb.add(' '); |
| 314 if (source.slowToString() != '=') sb.add(' '); | |
| 315 } | 283 } |
| 316 visit(node.argumentsNode); | 284 visit(node.argumentsNode); |
| 317 } | 285 } |
| 318 } | 286 } |
| 319 | 287 |
| 320 visitThrow(Throw node) { | 288 visitThrow(Throw node) { |
| 321 add(node.throwToken.value); | 289 add(node.throwToken.value); |
| 322 if (node.expression !== null) { | 290 if (node.expression !== null) { |
| 323 sb.add(' '); | 291 sb.add(' '); |
| 324 visit(node.expression); | 292 visit(node.expression); |
| (...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 513 sb.add(' '); | 481 sb.add(' '); |
| 514 } | 482 } |
| 515 visit(node.name); | 483 visit(node.name); |
| 516 if (node.typeParameters !== null) { | 484 if (node.typeParameters !== null) { |
| 517 visit(node.typeParameters); | 485 visit(node.typeParameters); |
| 518 } | 486 } |
| 519 visit(node.formals); | 487 visit(node.formals); |
| 520 add(node.endToken.value); | 488 add(node.endToken.value); |
| 521 } | 489 } |
| 522 } | 490 } |
| OLD | NEW |