Chromium Code Reviews| 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 d4d621637b0bb8f96f5c272fc51b2d54c4228b9b..1385ccf1f5d48f43e51a416ea1a408cb62a8aa45 100644 |
| --- a/pkg/compiler/lib/src/kernel/kernel_visitor.dart |
| +++ b/pkg/compiler/lib/src/kernel/kernel_visitor.dart |
| @@ -1230,6 +1230,7 @@ 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( |
| kernel.irName(operator.selectorName, currentElement), |
| visitForValue(rhs), |
| @@ -1289,7 +1290,8 @@ class KernelVisitor extends Object |
| receiver == null ? new ir.ThisExpression() : visitForValue(receiver); |
| ir.Expression compound = buildCompound( |
| PropertyAccessor.make(receiverNode, nameToIrName(name), null, null), |
| - rhs); |
| + rhs, |
| + node); |
| if (compound is ir.VariableSet) { |
| associateNode(compound.value, node); |
| } else { |
| @@ -1720,19 +1722,30 @@ class KernelVisitor extends Object |
| return buildLocalGet(element); |
| } |
| - ir.Expression buildCompound(Accessor accessor, CompoundRhs rhs) { |
| + 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: |
| - return accessor.buildPostfixIncrement(name, voidContext: isVoidContext); |
| + result = accessor.buildPostfixIncrement(name, voidContext: isVoidContext); |
| + break; |
| case CompoundKind.PREFIX: |
| - return accessor.buildPrefixIncrement(name, voidContext: isVoidContext); |
| + result = accessor.buildPrefixIncrement(name, voidContext: isVoidContext); |
| + break; |
| case CompoundKind.ASSIGNMENT: |
| - return accessor.buildCompoundAssignment(name, visitForValue(rhs.rhs), |
| - voidContext: isVoidContext); |
| + result = accessor.buildCompoundAssignment(name, visitForValue(rhs.rhs), |
| + voidContext: isVoidContext); |
| + break; |
| } |
| + assert(accessor.builtBinary != null); |
| + kernel.nodeToAstOperator[accessor.builtBinary] = node; |
| + if (accessor.builtGetter != null) { |
| + kernel.nodeToAst[accessor.builtGetter] = node; |
| + } |
| + return result; |
| } |
| @override |
| @@ -1740,7 +1753,7 @@ class KernelVisitor extends Object |
| SendSet node, LocalElement local, CompoundRhs rhs, _, |
| {bool isSetterValid}) { |
| ir.Expression compound = |
| - buildCompound(new VariableAccessor(getLocal(local)), rhs); |
| + buildCompound(new VariableAccessor(getLocal(local)), rhs, node); |
| if (compound is ir.VariableSet) { |
| associateNode(compound.value, node); |
| } else { |
| @@ -2236,6 +2249,7 @@ class KernelVisitor extends Object |
| AssignmentOperator operator, |
| Node rhs, |
| _) { |
| + // TODO(sra): Find binary operator. |
| return buildSuperIndexAccessor(index, getter, setter) |
| .buildCompoundAssignment( |
| kernel.irName(operator.selectorName, currentElement), |
| @@ -2287,7 +2301,7 @@ class KernelVisitor extends Object |
| if (setterKind == CompoundSetter.INVALID) { |
| setter = null; |
| } |
| - return buildCompound(buildSuperPropertyAccessor(getter, setter), rhs); |
| + return buildCompound(buildSuperPropertyAccessor(getter, setter), rhs, node); |
| } |
| @override |
| @@ -2302,13 +2316,13 @@ class KernelVisitor extends Object |
| if (setterKind == CompoundSetter.INVALID) { |
| setter = null; |
| } |
| - return buildCompound(buildStaticAccessor(getter, setter), rhs); |
| + return buildCompound(buildStaticAccessor(getter, setter), rhs, node); |
| } |
| @override |
| ir.Expression handleTypeLiteralConstantCompounds( |
| SendSet node, ConstantExpression constant, CompoundRhs rhs, _) { |
| - return buildCompound(new ReadOnlyAccessor(buildTypeLiteral(constant)), rhs); |
| + return buildCompound(new ReadOnlyAccessor(buildTypeLiteral(constant)), rhs, node); |
|
asgerf
2016/11/24 09:44:32
long line
sra1
2016/11/24 23:53:52
Done.
|
| } |
| ir.TypeLiteral buildTypeVariable(TypeVariableElement element) { |
| @@ -2318,7 +2332,7 @@ class KernelVisitor extends Object |
| @override |
| ir.Expression handleTypeVariableTypeLiteralCompounds( |
| SendSet node, TypeVariableElement element, CompoundRhs rhs, _) { |
| - return buildCompound(new ReadOnlyAccessor(buildTypeVariable(element)), rhs); |
| + return buildCompound(new ReadOnlyAccessor(buildTypeVariable(element)), rhs, node); |
|
asgerf
2016/11/24 09:44:32
long line
sra1
2016/11/24 23:53:52
Done.
|
| } |
| @override |