OLD | NEW |
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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 library dart_tree_printer; | 5 library dart_tree_printer; |
6 | 6 |
7 import 'dart_printer.dart'; | 7 import 'dart_printer.dart'; |
8 import '../tree/tree.dart' as tree; | 8 import '../tree/tree.dart' as tree; |
9 import '../scanner/scannerlib.dart'; | 9 import '../scanner/scannerlib.dart'; |
10 import '../util/util.dart'; | 10 import '../util/util.dart'; |
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
261 selector = makeIdentifier(left.fieldName); | 261 selector = makeIdentifier(left.fieldName); |
262 arguments = singleton(makeExpression(exp.right)); | 262 arguments = singleton(makeExpression(exp.right)); |
263 } else if (left is IndexExpression) { | 263 } else if (left is IndexExpression) { |
264 receiver = makeExp(left.object, PRIMARY, beginStmt: beginStmt); | 264 receiver = makeExp(left.object, PRIMARY, beginStmt: beginStmt); |
265 selector = new tree.Operator(indexToken); | 265 selector = new tree.Operator(indexToken); |
266 arguments = bracketList(',', | 266 arguments = bracketList(',', |
267 [makeExpression(left.index), makeExpression(exp.right)]); | 267 [makeExpression(left.index), makeExpression(exp.right)]); |
268 } else { | 268 } else { |
269 throw "Unexpected left-hand side of assignment: ${left}"; | 269 throw "Unexpected left-hand side of assignment: ${left}"; |
270 } | 270 } |
271 tree.Operator op = new tree.Operator(assignmentToken(exp.operatorName)); | 271 tree.Operator op = new tree.Operator(assignmentToken(exp.operator)); |
272 result = new tree.SendSet(receiver, selector, op, arguments); | 272 result = new tree.SendSet(receiver, selector, op, arguments); |
273 if (left is Identifier) { | 273 if (left is Identifier) { |
274 setElement(result, element, exp); | 274 setElement(result, element, exp); |
275 } | 275 } |
276 precedence = EXPRESSION; | 276 precedence = EXPRESSION; |
277 } else if (exp is BinaryOperator) { | 277 } else if (exp is BinaryOperator) { |
278 precedence = BINARY_PRECEDENCE[exp.operatorName]; | 278 precedence = BINARY_PRECEDENCE[exp.operator]; |
279 int deltaLeft = isAssociativeBinaryOperator(precedence) ? 0 : 1; | 279 int deltaLeft = isAssociativeBinaryOperator(precedence) ? 0 : 1; |
280 result = new tree.Send( | 280 result = new tree.Send( |
281 makeExp(exp.left, precedence + deltaLeft, beginStmt: beginStmt), | 281 makeExp(exp.left, precedence + deltaLeft, beginStmt: beginStmt), |
282 new tree.Operator(binopToken(exp.operatorName)), | 282 new tree.Operator(binopToken(exp.operator)), |
283 singleton(makeExp(exp.right, precedence + 1))); | 283 singleton(makeExp(exp.right, precedence + 1))); |
284 } else if (exp is CallFunction) { | 284 } else if (exp is CallFunction) { |
285 precedence = CALLEE; | 285 precedence = CALLEE; |
286 tree.Node selector; | 286 tree.Node selector; |
287 Expression callee = exp.callee; | 287 Expression callee = exp.callee; |
288 if (callee is Identifier) { | 288 if (callee is Identifier) { |
289 selector = makeIdentifier(callee.name); | 289 selector = makeIdentifier(callee.name); |
290 } else { | 290 } else { |
291 selector = makeExp(callee, CALLEE, beginStmt: beginStmt); | 291 selector = makeExp(callee, CALLEE, beginStmt: beginStmt); |
292 } | 292 } |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
372 } else if (lvalue is FieldExpression) { | 372 } else if (lvalue is FieldExpression) { |
373 receiver = makeExp(lvalue.object, PRIMARY, beginStmt: innerBeginStmt); | 373 receiver = makeExp(lvalue.object, PRIMARY, beginStmt: innerBeginStmt); |
374 selector = makeIdentifier(lvalue.fieldName); | 374 selector = makeIdentifier(lvalue.fieldName); |
375 } else if (lvalue is IndexExpression) { | 375 } else if (lvalue is IndexExpression) { |
376 receiver = makeExp(lvalue.object, PRIMARY, beginStmt: innerBeginStmt); | 376 receiver = makeExp(lvalue.object, PRIMARY, beginStmt: innerBeginStmt); |
377 selector = new tree.Operator(indexToken); | 377 selector = new tree.Operator(indexToken); |
378 argument = makeExpression(lvalue.index); | 378 argument = makeExpression(lvalue.index); |
379 } else { | 379 } else { |
380 throw "Unrecognized left-hand side: ${lvalue}"; | 380 throw "Unrecognized left-hand side: ${lvalue}"; |
381 } | 381 } |
382 tree.Operator op = new tree.Operator(incrementToken(exp.operatorName)); | 382 tree.Operator op = new tree.Operator(incrementToken(exp.operator)); |
383 if (exp.isPrefix) { | 383 if (exp.isPrefix) { |
384 precedence = UNARY; | 384 precedence = UNARY; |
385 result = new tree.SendSet.prefix(receiver, selector, op, argument); | 385 result = new tree.SendSet.prefix(receiver, selector, op, argument); |
386 } else { | 386 } else { |
387 precedence = POSTFIX_INCREMENT; | 387 precedence = POSTFIX_INCREMENT; |
388 result = new tree.SendSet.postfix(receiver, selector, op, argument); | 388 result = new tree.SendSet.postfix(receiver, selector, op, argument); |
389 } | 389 } |
390 } else if (exp is IndexExpression) { | 390 } else if (exp is IndexExpression) { |
391 precedence = CALLEE; | 391 precedence = CALLEE; |
392 result = new tree.Send( | 392 result = new tree.Send( |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
458 } else if (exp is Throw) { | 458 } else if (exp is Throw) { |
459 precedence = EXPRESSION; // ??? | 459 precedence = EXPRESSION; // ??? |
460 result = new tree.Throw( | 460 result = new tree.Throw( |
461 makeExpression(exp.expression), | 461 makeExpression(exp.expression), |
462 throwToken, | 462 throwToken, |
463 throwToken); // endToken not used by unparser | 463 throwToken); // endToken not used by unparser |
464 } else if (exp is TypeOperator) { | 464 } else if (exp is TypeOperator) { |
465 precedence = RELATIONAL; | 465 precedence = RELATIONAL; |
466 tree.Operator operator; | 466 tree.Operator operator; |
467 tree.Node rightOperand = makeType(exp.type); | 467 tree.Node rightOperand = makeType(exp.type); |
468 if (exp.operatorName == 'is!') { | 468 if (exp.operator == 'is!') { |
469 operator = new tree.Operator(typeOpToken('is')); | 469 operator = new tree.Operator(typeOpToken('is')); |
470 rightOperand = new tree.Send( | 470 rightOperand = new tree.Send( |
471 rightOperand, | 471 rightOperand, |
472 new tree.Operator(bang), | 472 new tree.Operator(bang), |
473 blankList()); | 473 blankList()); |
474 } else { | 474 } else { |
475 operator = new tree.Operator(typeOpToken(exp.operatorName)); | 475 operator = new tree.Operator(typeOpToken(exp.operator)); |
476 } | 476 } |
477 result = new tree.Send( | 477 result = new tree.Send( |
478 makeExp(exp.expression, BITWISE_OR, beginStmt: beginStmt), | 478 makeExp(exp.expression, BITWISE_OR, beginStmt: beginStmt), |
479 operator, | 479 operator, |
480 singleton(rightOperand)); | 480 singleton(rightOperand)); |
481 } else if (exp is UnaryOperator) { | 481 } else if (exp is UnaryOperator) { |
482 precedence = UNARY; | 482 precedence = UNARY; |
483 result = new tree.Send.prefix( | 483 result = new tree.Send.prefix( |
484 makeExp(exp.operand, UNARY), | 484 makeExp(exp.operand, UNARY), |
485 new tree.Operator(unopToken(exp.operatorName))); | 485 new tree.Operator(unopToken(exp.operatorName))); |
(...skipping 420 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
906 printStringChunk(chunk.previous), | 906 printStringChunk(chunk.previous), |
907 node); | 907 node); |
908 } else { | 908 } else { |
909 return node; | 909 return node; |
910 } | 910 } |
911 } | 911 } |
912 return printStringChunk(output.chunk); | 912 return printStringChunk(output.chunk); |
913 } | 913 } |
914 | 914 |
915 } | 915 } |
OLD | NEW |