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

Side by Side Diff: sdk/lib/_internal/compiler/implementation/dart_backend/dart_tree_printer.dart

Issue 295933006: dart2dart: Introduce compound assignment and prefix increment in dart_codegen. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 7 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) 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
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
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698