| 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 c2d458c46f08c66a4f922a0d8230be19e08a3344..493b78fc7c703c80ddc2b81dd92c1c0dc96b0432 100644
|
| --- a/pkg/compiler/lib/src/kernel/kernel_visitor.dart
|
| +++ b/pkg/compiler/lib/src/kernel/kernel_visitor.dart
|
| @@ -1245,14 +1245,17 @@ class KernelVisitor extends Object
|
| @override
|
| ir.PropertyGet visitDynamicPropertyGet(
|
| Send node, Node receiver, Name name, _) {
|
| - return new ir.PropertyGet(visitForValue(receiver), nameToIrName(name));
|
| + return associateNode(
|
| + new ir.PropertyGet(visitForValue(receiver), nameToIrName(name)), node);
|
| }
|
|
|
| @override
|
| ir.MethodInvocation visitDynamicPropertyInvoke(
|
| Send node, Node receiver, NodeList arguments, Selector selector, _) {
|
| - return buildInvokeSelector(
|
| - visitForValue(receiver), selector, buildArguments(arguments));
|
| + return associateNode(
|
| + buildInvokeSelector(
|
| + visitForValue(receiver), selector, buildArguments(arguments)),
|
| + node);
|
| }
|
|
|
| @override
|
| @@ -1260,9 +1263,15 @@ class KernelVisitor extends Object
|
| Send node, Node receiver, Name name, CompoundRhs rhs, _) {
|
| ir.Expression receiverNode =
|
| receiver == null ? new ir.ThisExpression() : visitForValue(receiver);
|
| - return buildCompound(
|
| + ir.Expression compound = buildCompound(
|
| PropertyAccessor.make(receiverNode, nameToIrName(name), null, null),
|
| rhs);
|
| + if (compound is ir.VariableSet) {
|
| + associateNode(compound.value, node);
|
| + } else {
|
| + associateNode(compound, node);
|
| + }
|
| + return compound;
|
| }
|
|
|
| @override
|
| @@ -1314,13 +1323,14 @@ class KernelVisitor extends Object
|
|
|
| @override
|
| ir.MethodInvocation visitEquals(Send node, Node left, Node right, _) {
|
| - return buildBinaryOperator(left, '==', right);
|
| + return associateNode(buildBinaryOperator(left, '==', right), node);
|
| }
|
|
|
| @override
|
| ir.MethodInvocation visitExpressionInvoke(Send node, Node expression,
|
| NodeList arguments, CallStructure callStructure, _) {
|
| - return buildCall(visitForValue(expression), callStructure, arguments);
|
| + return associateNode(
|
| + buildCall(visitForValue(expression), callStructure, arguments), node);
|
| }
|
|
|
| @override
|
| @@ -1556,7 +1566,8 @@ class KernelVisitor extends Object
|
|
|
| @override
|
| ir.Expression visitIndex(Send node, Node receiver, Node index, _) {
|
| - return buildIndexAccessor(receiver, index).buildSimpleRead();
|
| + return associateNode(
|
| + buildIndexAccessor(receiver, index).buildSimpleRead(), node);
|
| }
|
|
|
| ir.Expression buildIndexPostfix(Accessor accessor, IncDecOperator operator) {
|
| @@ -1584,8 +1595,10 @@ class KernelVisitor extends Object
|
| @override
|
| ir.Expression visitIndexSet(
|
| SendSet node, Node receiver, Node index, Node rhs, _) {
|
| - return buildIndexAccessor(receiver, index)
|
| - .buildAssignment(visitForValue(rhs), voidContext: isVoidContext);
|
| + return associateNode(
|
| + buildIndexAccessor(receiver, index)
|
| + .buildAssignment(visitForValue(rhs), voidContext: isVoidContext),
|
| + node);
|
| }
|
|
|
| ir.Initializer buildInitializingFormal(InitializingFormalElement parameter) {
|
| @@ -1711,7 +1724,14 @@ class KernelVisitor extends Object
|
| ir.Expression handleLocalCompounds(
|
| SendSet node, LocalElement local, CompoundRhs rhs, _,
|
| {bool isSetterValid}) {
|
| - return buildCompound(new VariableAccessor(getLocal(local)), rhs);
|
| + ir.Expression compound =
|
| + buildCompound(new VariableAccessor(getLocal(local)), rhs);
|
| + if (compound is ir.VariableSet) {
|
| + associateNode(compound.value, node);
|
| + } else {
|
| + associateNode(compound, node);
|
| + }
|
| + return compound;
|
| }
|
|
|
| @override
|
| @@ -1761,7 +1781,9 @@ class KernelVisitor extends Object
|
|
|
| @override
|
| ir.Not visitNotEquals(Send node, Node left, Node right, _) {
|
| - return new ir.Not(buildBinaryOperator(left, '==', right));
|
| + return associateNode(
|
| + new ir.Not(associateNode(buildBinaryOperator(left, '==', right), node)),
|
| + node);
|
| }
|
|
|
| @override
|
| @@ -1797,7 +1819,8 @@ class KernelVisitor extends Object
|
| @override
|
| ir.MethodInvocation handleLocalInvoke(Send node, LocalElement element,
|
| NodeList arguments, CallStructure callStructure, _) {
|
| - return buildCall(buildLocalGet(element), callStructure, arguments);
|
| + return associateNode(
|
| + buildCall(buildLocalGet(element), callStructure, arguments), node);
|
| }
|
|
|
| @override
|
| @@ -1899,7 +1922,8 @@ class KernelVisitor extends Object
|
| @override
|
| ir.MethodInvocation handleStaticFieldInvoke(Send node, FieldElement field,
|
| NodeList arguments, CallStructure callStructure, _) {
|
| - return buildCall(buildStaticGet(field), callStructure, arguments);
|
| + return associateNode(
|
| + buildCall(buildStaticGet(field), callStructure, arguments), node);
|
| }
|
|
|
| @override
|
| @@ -2391,7 +2415,7 @@ class KernelVisitor extends Object
|
| NodeList arguments,
|
| CallStructure callStructure,
|
| _) {
|
| - return buildSuperMethodInvoke(method, arguments);
|
| + return associateNode(buildSuperMethodInvoke(method, arguments), node);
|
| }
|
|
|
| @override
|
| @@ -2465,14 +2489,17 @@ class KernelVisitor extends Object
|
|
|
| @override
|
| ir.Expression visitThisPropertyGet(Send node, Name name, _) {
|
| - return buildThisPropertyAccessor(name).buildSimpleRead();
|
| + return associateNode(
|
| + buildThisPropertyAccessor(name).buildSimpleRead(), node);
|
| }
|
|
|
| @override
|
| ir.MethodInvocation visitThisPropertyInvoke(
|
| Send node, NodeList arguments, Selector selector, _) {
|
| - return buildInvokeSelector(
|
| - new ir.ThisExpression(), selector, buildArguments(arguments));
|
| + return associateNode(
|
| + buildInvokeSelector(
|
| + new ir.ThisExpression(), selector, buildArguments(arguments)),
|
| + node);
|
| }
|
|
|
| @override
|
| @@ -2590,10 +2617,12 @@ class KernelVisitor extends Object
|
| @override
|
| ir.MethodInvocation visitUnary(
|
| Send node, UnaryOperator operator, Node expression, _) {
|
| - return new ir.MethodInvocation(
|
| - visitForValue(expression),
|
| - kernel.irName(operator.selectorName, currentElement),
|
| - new ir.Arguments.empty());
|
| + return associateNode(
|
| + new ir.MethodInvocation(
|
| + visitForValue(expression),
|
| + kernel.irName(operator.selectorName, currentElement),
|
| + new ir.Arguments.empty()),
|
| + node);
|
| }
|
|
|
| @override
|
|
|