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

Unified Diff: pkg/compiler/lib/src/kernel/kernel_visitor.dart

Issue 2561843002: dart2js-kernel: associate more compound assignment inner nodes (Closed)
Patch Set: move voidContext deeper Created 4 years 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | pkg/compiler/lib/src/ssa/kernel_ast_adapter.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/compiler/lib/src/kernel/kernel_visitor.dart
diff --git a/pkg/compiler/lib/src/kernel/kernel_visitor.dart b/pkg/compiler/lib/src/kernel/kernel_visitor.dart
index 37d813efd696e0596d7bf79d4682726417b71105..c232009685e03af3944eab19297faa203f393f43 100644
--- a/pkg/compiler/lib/src/kernel/kernel_visitor.dart
+++ b/pkg/compiler/lib/src/kernel/kernel_visitor.dart
@@ -1230,11 +1230,11 @@ class KernelVisitor extends Object
@override
ir.Expression visitCompoundIndexSet(SendSet node, Node receiver, Node index,
AssignmentOperator operator, Node rhs, _) {
- // TODO(sra): Find binary operator.
- return buildIndexAccessor(receiver, index).buildCompoundAssignment(
+ return buildCompoundAssignment(
+ node,
+ buildIndexAccessor(receiver, index),
kernel.irName(operator.selectorName, currentElement),
- visitForValue(rhs),
- voidContext: isVoidContext);
+ visitForValue(rhs));
}
@override
@@ -1583,26 +1583,30 @@ class KernelVisitor extends Object
buildIndexAccessor(receiver, index).buildSimpleRead(), node);
}
- ir.Expression buildIndexPostfix(Accessor accessor, IncDecOperator operator) {
+ ir.Expression buildIndexPostfix(
+ Send node, Accessor accessor, IncDecOperator operator) {
ir.Name name = kernel.irName(operator.selectorName, currentElement);
- return accessor.buildPostfixIncrement(name, voidContext: isVoidContext);
+ return buildPostfixIncrement(node, accessor, name);
}
@override
ir.Expression visitIndexPostfix(
Send node, Node receiver, Node index, IncDecOperator operator, _) {
- return buildIndexPostfix(buildIndexAccessor(receiver, index), operator);
+ return buildIndexPostfix(
+ node, buildIndexAccessor(receiver, index), operator);
}
- ir.Expression buildIndexPrefix(Accessor accessor, IncDecOperator operator) {
+ ir.Expression buildIndexPrefix(
+ Send node, Accessor accessor, IncDecOperator operator) {
ir.Name name = kernel.irName(operator.selectorName, currentElement);
- return accessor.buildPrefixIncrement(name, voidContext: isVoidContext);
+ return buildPrefixIncrement(node, accessor, name);
}
@override
ir.Expression visitIndexPrefix(
Send node, Node receiver, Node index, IncDecOperator operator, _) {
- return buildIndexPrefix(buildIndexAccessor(receiver, index), operator);
+ return buildIndexPrefix(
+ node, buildIndexAccessor(receiver, index), operator);
}
@override
@@ -1725,29 +1729,49 @@ class KernelVisitor extends Object
ir.Expression buildCompound(
Accessor accessor, CompoundRhs rhs, SendSet node) {
ir.Name name = kernel.irName(rhs.operator.selectorName, currentElement);
- ir.Expression result;
switch (rhs.kind) {
case CompoundKind.POSTFIX:
- result =
- accessor.buildPostfixIncrement(name, voidContext: isVoidContext);
- break;
+ return buildPostfixIncrement(node, accessor, name);
case CompoundKind.PREFIX:
- result =
- accessor.buildPrefixIncrement(name, voidContext: isVoidContext);
- break;
+ return buildPrefixIncrement(node, accessor, name);
case CompoundKind.ASSIGNMENT:
- result = accessor.buildCompoundAssignment(name, visitForValue(rhs.rhs),
- voidContext: isVoidContext);
- break;
+ return buildCompoundAssignment(
+ node, accessor, name, visitForValue(rhs.rhs));
}
+ }
+
+ ir.Expression buildCompoundAssignment(
+ SendSet node, Accessor accessor, ir.Name name, ir.Expression rhs) {
+ ir.Expression result =
+ accessor.buildCompoundAssignment(name, rhs, voidContext: isVoidContext);
+ associateCompoundComponents(accessor, node);
+ return result;
+ }
+
+ ir.Expression buildPrefixIncrement(
+ SendSet node, Accessor accessor, ir.Name name) {
+ ir.Expression result =
+ accessor.buildPrefixIncrement(name, voidContext: isVoidContext);
+ associateCompoundComponents(accessor, node);
+ return result;
+ }
+
+ ir.Expression buildPostfixIncrement(
+ SendSet node, Accessor accessor, ir.Name name) {
+ ir.Expression result =
+ accessor.buildPostfixIncrement(name, voidContext: isVoidContext);
+ associateCompoundComponents(accessor, node);
+ return result;
+ }
+
+ void associateCompoundComponents(Accessor accessor, Node node) {
assert(accessor.builtBinary != null);
kernel.nodeToAstOperator[accessor.builtBinary] = node;
if (accessor.builtGetter != null) {
kernel.nodeToAst[accessor.builtGetter] = node;
}
- return result;
}
@override
@@ -2252,12 +2276,11 @@ class KernelVisitor extends Object
AssignmentOperator operator,
Node rhs,
_) {
- // TODO(sra): Find binary operator.
- return buildSuperIndexAccessor(index, getter, setter)
- .buildCompoundAssignment(
- kernel.irName(operator.selectorName, currentElement),
- visitForValue(rhs),
- voidContext: isVoidContext);
+ return buildCompoundAssignment(
+ node,
+ buildSuperIndexAccessor(index, getter, setter),
+ kernel.irName(operator.selectorName, currentElement),
+ visitForValue(rhs));
}
@override
@@ -2436,7 +2459,7 @@ class KernelVisitor extends Object
MethodElement indexSetFunction, Node index, IncDecOperator operator, _) {
Accessor accessor =
buildSuperIndexAccessor(index, indexFunction, indexSetFunction);
- return buildIndexPostfix(accessor, operator);
+ return buildIndexPostfix(node, accessor, operator);
}
@override
@@ -2444,7 +2467,7 @@ class KernelVisitor extends Object
MethodElement indexSetFunction, Node index, IncDecOperator operator, _) {
Accessor accessor =
buildSuperIndexAccessor(index, indexFunction, indexSetFunction);
- return buildIndexPrefix(accessor, operator);
+ return buildIndexPrefix(node, accessor, operator);
}
@override
« no previous file with comments | « no previous file | pkg/compiler/lib/src/ssa/kernel_ast_adapter.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698