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 elements.Element element; | 288 elements.Element element; |
289 if (callee is Identifier) { | 289 if (callee is Identifier) { |
290 selector = makeIdentifier(callee.name); | 290 selector = makeIdentifier(callee.name); |
291 element = callee.element; | 291 element = callee.element; |
292 } else { | 292 } else { |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
377 } else if (lvalue is FieldExpression) { | 377 } else if (lvalue is FieldExpression) { |
378 receiver = makeExp(lvalue.object, PRIMARY, beginStmt: innerBeginStmt); | 378 receiver = makeExp(lvalue.object, PRIMARY, beginStmt: innerBeginStmt); |
379 selector = makeIdentifier(lvalue.fieldName); | 379 selector = makeIdentifier(lvalue.fieldName); |
380 } else if (lvalue is IndexExpression) { | 380 } else if (lvalue is IndexExpression) { |
381 receiver = makeExp(lvalue.object, PRIMARY, beginStmt: innerBeginStmt); | 381 receiver = makeExp(lvalue.object, PRIMARY, beginStmt: innerBeginStmt); |
382 selector = new tree.Operator(indexToken); | 382 selector = new tree.Operator(indexToken); |
383 argument = makeExpression(lvalue.index); | 383 argument = makeExpression(lvalue.index); |
384 } else { | 384 } else { |
385 throw "Unrecognized left-hand side: ${lvalue}"; | 385 throw "Unrecognized left-hand side: ${lvalue}"; |
386 } | 386 } |
387 tree.Operator op = new tree.Operator(incrementToken(exp.operatorName)); | 387 tree.Operator op = new tree.Operator(incrementToken(exp.operator)); |
388 if (exp.isPrefix) { | 388 if (exp.isPrefix) { |
389 precedence = UNARY; | 389 precedence = UNARY; |
390 result = new tree.SendSet.prefix(receiver, selector, op, argument); | 390 result = new tree.SendSet.prefix(receiver, selector, op, argument); |
391 } else { | 391 } else { |
392 precedence = POSTFIX_INCREMENT; | 392 precedence = POSTFIX_INCREMENT; |
393 result = new tree.SendSet.postfix(receiver, selector, op, argument); | 393 result = new tree.SendSet.postfix(receiver, selector, op, argument); |
394 } | 394 } |
| 395 if (lvalue is Identifier) { |
| 396 setElement(result, lvalue.element, exp); |
| 397 } |
395 } else if (exp is IndexExpression) { | 398 } else if (exp is IndexExpression) { |
396 precedence = CALLEE; | 399 precedence = CALLEE; |
397 result = new tree.Send( | 400 result = new tree.Send( |
398 makeExp(exp.object, PRIMARY, beginStmt: beginStmt), | 401 makeExp(exp.object, PRIMARY, beginStmt: beginStmt), |
399 new tree.Operator(indexToken), | 402 new tree.Operator(indexToken), |
400 bracketList(',', [makeExpression(exp.index)])); | 403 bracketList(',', [makeExpression(exp.index)])); |
401 } else if (exp is Literal) { | 404 } else if (exp is Literal) { |
402 precedence = CALLEE; | 405 precedence = CALLEE; |
403 dart2js.PrimitiveConstant value = exp.value; | 406 dart2js.PrimitiveConstant value = exp.value; |
404 Token tok = new StringToken.fromString(STRING_INFO, '${value.value}', -1); | 407 Token tok = new StringToken.fromString(STRING_INFO, '${value.value}', -1); |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
463 } else if (exp is Throw) { | 466 } else if (exp is Throw) { |
464 precedence = EXPRESSION; // ??? | 467 precedence = EXPRESSION; // ??? |
465 result = new tree.Throw( | 468 result = new tree.Throw( |
466 makeExpression(exp.expression), | 469 makeExpression(exp.expression), |
467 throwToken, | 470 throwToken, |
468 throwToken); // endToken not used by unparser | 471 throwToken); // endToken not used by unparser |
469 } else if (exp is TypeOperator) { | 472 } else if (exp is TypeOperator) { |
470 precedence = RELATIONAL; | 473 precedence = RELATIONAL; |
471 tree.Operator operator; | 474 tree.Operator operator; |
472 tree.Node rightOperand = makeType(exp.type); | 475 tree.Node rightOperand = makeType(exp.type); |
473 if (exp.operatorName == 'is!') { | 476 if (exp.operator == 'is!') { |
474 operator = new tree.Operator(typeOpToken('is')); | 477 operator = new tree.Operator(typeOpToken('is')); |
475 rightOperand = new tree.Send( | 478 rightOperand = new tree.Send( |
476 rightOperand, | 479 rightOperand, |
477 new tree.Operator(bang), | 480 new tree.Operator(bang), |
478 blankList()); | 481 blankList()); |
479 } else { | 482 } else { |
480 operator = new tree.Operator(typeOpToken(exp.operatorName)); | 483 operator = new tree.Operator(typeOpToken(exp.operator)); |
481 } | 484 } |
482 result = new tree.Send( | 485 result = new tree.Send( |
483 makeExp(exp.expression, BITWISE_OR, beginStmt: beginStmt), | 486 makeExp(exp.expression, BITWISE_OR, beginStmt: beginStmt), |
484 operator, | 487 operator, |
485 singleton(rightOperand)); | 488 singleton(rightOperand)); |
486 } else if (exp is UnaryOperator) { | 489 } else if (exp is UnaryOperator) { |
487 precedence = UNARY; | 490 precedence = UNARY; |
488 result = new tree.Send.prefix( | 491 result = new tree.Send.prefix( |
489 makeExp(exp.operand, UNARY), | 492 makeExp(exp.operand, UNARY), |
490 new tree.Operator(unopToken(exp.operatorName))); | 493 new tree.Operator(unopToken(exp.operatorName))); |
(...skipping 420 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
911 printStringChunk(chunk.previous), | 914 printStringChunk(chunk.previous), |
912 node); | 915 node); |
913 } else { | 916 } else { |
914 return node; | 917 return node; |
915 } | 918 } |
916 } | 919 } |
917 return printStringChunk(output.chunk); | 920 return printStringChunk(output.chunk); |
918 } | 921 } |
919 | 922 |
920 } | 923 } |
OLD | NEW |