| 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
|
|
|