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

Side by Side Diff: lib/compiler/implementation/ssa/codegen_helpers.dart

Issue 10697031: Generate JS operators using helper functions with thunks for operands. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Address review comments. Created 8 years, 5 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 | « lib/compiler/implementation/ssa/codegen.dart ('k') | no next file » | 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 /** 5 /**
6 * Instead of emitting each SSA instruction with a temporary variable 6 * Instead of emitting each SSA instruction with a temporary variable
7 * mark instructions that can be emitted at their use-site. 7 * mark instructions that can be emitted at their use-site.
8 * For example, in: 8 * For example, in:
9 * t0 = 4; 9 * t0 = 4;
10 * t1 = 3; 10 * t1 = 3;
(...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after
334 "!==" : const JSBinaryOperatorPrecedence(EQUALITY_PRECEDENCE, 334 "!==" : const JSBinaryOperatorPrecedence(EQUALITY_PRECEDENCE,
335 RELATIONAL_PRECEDENCE), 335 RELATIONAL_PRECEDENCE),
336 "<" : const JSBinaryOperatorPrecedence(RELATIONAL_PRECEDENCE, 336 "<" : const JSBinaryOperatorPrecedence(RELATIONAL_PRECEDENCE,
337 SHIFT_PRECEDENCE), 337 SHIFT_PRECEDENCE),
338 ">" : const JSBinaryOperatorPrecedence(RELATIONAL_PRECEDENCE, 338 ">" : const JSBinaryOperatorPrecedence(RELATIONAL_PRECEDENCE,
339 SHIFT_PRECEDENCE), 339 SHIFT_PRECEDENCE),
340 "<=" : const JSBinaryOperatorPrecedence(RELATIONAL_PRECEDENCE, 340 "<=" : const JSBinaryOperatorPrecedence(RELATIONAL_PRECEDENCE,
341 SHIFT_PRECEDENCE), 341 SHIFT_PRECEDENCE),
342 ">=" : const JSBinaryOperatorPrecedence(RELATIONAL_PRECEDENCE, 342 ">=" : const JSBinaryOperatorPrecedence(RELATIONAL_PRECEDENCE,
343 SHIFT_PRECEDENCE), 343 SHIFT_PRECEDENCE),
344 "in": const JSBinaryOperatorPrecedence(RELATIONAL_PRECEDENCE,
345 SHIFT_PRECEDENCE),
346 "instanceof": const JSBinaryOperatorPrecedence(RELATIONAL_PRECEDENCE,
347 SHIFT_PRECEDENCE),
344 "<<" : const JSBinaryOperatorPrecedence(SHIFT_PRECEDENCE, 348 "<<" : const JSBinaryOperatorPrecedence(SHIFT_PRECEDENCE,
345 ADDITIVE_PRECEDENCE), 349 ADDITIVE_PRECEDENCE),
346 ">>" : const JSBinaryOperatorPrecedence(SHIFT_PRECEDENCE, 350 ">>" : const JSBinaryOperatorPrecedence(SHIFT_PRECEDENCE,
347 ADDITIVE_PRECEDENCE), 351 ADDITIVE_PRECEDENCE),
348 ">>>" : const JSBinaryOperatorPrecedence(SHIFT_PRECEDENCE, 352 ">>>" : const JSBinaryOperatorPrecedence(SHIFT_PRECEDENCE,
349 ADDITIVE_PRECEDENCE), 353 ADDITIVE_PRECEDENCE),
350 "+" : const JSBinaryOperatorPrecedence(ADDITIVE_PRECEDENCE, 354 "+" : const JSBinaryOperatorPrecedence(ADDITIVE_PRECEDENCE,
351 MULTIPLICATIVE_PRECEDENCE), 355 MULTIPLICATIVE_PRECEDENCE),
352 "-" : const JSBinaryOperatorPrecedence(ADDITIVE_PRECEDENCE, 356 "-" : const JSBinaryOperatorPrecedence(ADDITIVE_PRECEDENCE,
353 MULTIPLICATIVE_PRECEDENCE), 357 MULTIPLICATIVE_PRECEDENCE),
354 "*" : const JSBinaryOperatorPrecedence(MULTIPLICATIVE_PRECEDENCE, 358 "*" : const JSBinaryOperatorPrecedence(MULTIPLICATIVE_PRECEDENCE,
355 PREFIX_PRECEDENCE), 359 PREFIX_PRECEDENCE),
356 "/" : const JSBinaryOperatorPrecedence(MULTIPLICATIVE_PRECEDENCE, 360 "/" : const JSBinaryOperatorPrecedence(MULTIPLICATIVE_PRECEDENCE,
357 PREFIX_PRECEDENCE), 361 PREFIX_PRECEDENCE),
358 "%" : const JSBinaryOperatorPrecedence(MULTIPLICATIVE_PRECEDENCE, 362 "%" : const JSBinaryOperatorPrecedence(MULTIPLICATIVE_PRECEDENCE,
359 PREFIX_PRECEDENCE), 363 PREFIX_PRECEDENCE),
364 // TODO(lrn): Consider changing rhs to EXPRESSION_PRECEDENCE.
365 ",": const JSBinaryOperatorPrecedence(EXPRESSION_PRECEDENCE,
366 ASSIGNMENT_PRECEDENCE),
367 "=" : const JSAssignmentOperatorPrecedence(),
368 "+=" : const JSAssignmentOperatorPrecedence(),
369 "-=" : const JSAssignmentOperatorPrecedence(),
370 "*=" : const JSAssignmentOperatorPrecedence(),
371 "/=" : const JSAssignmentOperatorPrecedence(),
372 "%=" : const JSAssignmentOperatorPrecedence(),
373 "&=" : const JSAssignmentOperatorPrecedence(),
374 "|=" : const JSAssignmentOperatorPrecedence(),
375 "^=" : const JSAssignmentOperatorPrecedence(),
376 "<<=" : const JSAssignmentOperatorPrecedence(),
377 ">>=" : const JSAssignmentOperatorPrecedence(),
378 ">>>=" : const JSAssignmentOperatorPrecedence(),
360 }; 379 };
361 } 380 }
362 381
363 class JSBinaryOperatorPrecedence { 382 class JSBinaryOperatorPrecedence {
364 final int left; 383 final int left;
365 final int right; 384 final int right;
366 const JSBinaryOperatorPrecedence(this.left, this.right); 385 const JSBinaryOperatorPrecedence(this.left, this.right);
367 // All binary operators (excluding assignment) are left associative. 386 // All non-assignment binary operators are left associative.
368 int get precedence() => left; 387 int get precedence() => left;
369 } 388 }
389
390 class JSAssignmentOperatorPrecedence implements JSBinaryOperatorPrecedence {
391 const JSAssignmentOperatorPrecedence();
392 // The actual left-hand-side of an assignment in JavaScript is the production
393 // 'LeftHandSideExpression ::= callExpression | newExpression'. We don't
394 // represent 'newExpression' at all.
395 int get left() => JSPrecedence.CALL_PRECEDENCE;
396 int get right() => JSPrecedence.ASSIGNMENT_PRECEDENCE;
397 int get precedence() => JSPrecedence.ASSIGNMENT_PRECEDENCE;
398 }
OLDNEW
« no previous file with comments | « lib/compiler/implementation/ssa/codegen.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698