| 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 905ea0f5477c365910614ec6b1903358e6698aca..b2ba6de949dc671cb35a39a142064674490ba709 100644
|
| --- a/pkg/compiler/lib/src/kernel/kernel_visitor.dart
|
| +++ b/pkg/compiler/lib/src/kernel/kernel_visitor.dart
|
| @@ -1318,8 +1318,17 @@ class KernelVisitor extends Object
|
| Accessor accessor = (receiver == null)
|
| ? new ThisPropertyAccessor(irName, null, null)
|
| : PropertyAccessor.make(visitForValue(receiver), irName, null, null);
|
| - return accessor.buildNullAwareAssignment(visitForValue(rhs), null,
|
| + return _finishSetIfNull(node, accessor, rhs);
|
| + }
|
| +
|
| + ir.Expression _finishSetIfNull(Send node, Accessor accessor, Node rhs) {
|
| + ir.Expression result = accessor.buildNullAwareAssignment(
|
| + visitForValue(rhs), null,
|
| voidContext: isVoidContext);
|
| + if (accessor.builtGetter != null) {
|
| + kernel.nodeToAst[accessor.builtGetter] = node;
|
| + }
|
| + return result;
|
| }
|
|
|
| @override
|
| @@ -1551,9 +1560,8 @@ class KernelVisitor extends Object
|
| @override
|
| ir.Expression visitIfNotNullDynamicPropertySetIfNull(
|
| Send node, Node receiver, Name name, Node rhs, _) {
|
| - return buildNullAwarePropertyAccessor(receiver, name)
|
| - .buildNullAwareAssignment(visitForValue(rhs), null,
|
| - voidContext: isVoidContext);
|
| + return _finishSetIfNull(
|
| + node, buildNullAwarePropertyAccessor(receiver, name), rhs);
|
| }
|
|
|
| ir.LogicalExpression buildLogicalExpression(
|
| @@ -1892,9 +1900,7 @@ class KernelVisitor extends Object
|
| ir.Expression handleLocalSetIfNulls(
|
| SendSet node, LocalElement local, Node rhs, _,
|
| {bool isSetterValid}) {
|
| - return new VariableAccessor(getLocal(local)).buildNullAwareAssignment(
|
| - visitForValue(rhs), null,
|
| - voidContext: isVoidContext);
|
| + return _finishSetIfNull(node, new VariableAccessor(getLocal(local)), rhs);
|
| }
|
|
|
| @override
|
| @@ -2009,9 +2015,7 @@ class KernelVisitor extends Object
|
| if (setterKind == CompoundSetter.INVALID) {
|
| setter = null;
|
| }
|
| - return buildStaticAccessor(getter, setter).buildNullAwareAssignment(
|
| - visitForValue(rhs), null,
|
| - voidContext: isVoidContext);
|
| + return _finishSetIfNull(node, buildStaticAccessor(getter, setter), rhs);
|
| }
|
|
|
| ir.VariableDeclaration getLocal(LocalElement local) {
|
| @@ -2456,9 +2460,8 @@ class KernelVisitor extends Object
|
| if (setterKind == CompoundSetter.INVALID) {
|
| setter = null;
|
| }
|
| - return buildSuperPropertyAccessor(getter, setter).buildNullAwareAssignment(
|
| - visitForValue(rhs), null,
|
| - voidContext: isVoidContext);
|
| + return _finishSetIfNull(
|
| + node, buildSuperPropertyAccessor(getter, setter), rhs);
|
| }
|
|
|
| @override
|
| @@ -2685,9 +2688,8 @@ class KernelVisitor extends Object
|
| @override
|
| ir.Expression visitTypeVariableTypeLiteralSetIfNull(
|
| Send node, TypeVariableElement element, Node rhs, _) {
|
| - return new ReadOnlyAccessor(buildTypeVariable(element))
|
| - .buildNullAwareAssignment(visitForValue(rhs), null,
|
| - voidContext: isVoidContext);
|
| + return _finishSetIfNull(
|
| + node, new ReadOnlyAccessor(buildTypeVariable(element)), rhs);
|
| }
|
|
|
| @override
|
| @@ -2751,17 +2753,14 @@ class KernelVisitor extends Object
|
| @override
|
| ir.Expression visitIndexSetIfNull(
|
| SendSet node, Node receiver, Node index, Node rhs, _) {
|
| - return buildIndexAccessor(receiver, index).buildNullAwareAssignment(
|
| - visitForValue(rhs), null,
|
| - voidContext: isVoidContext);
|
| + return _finishSetIfNull(node, buildIndexAccessor(receiver, index), rhs);
|
| }
|
|
|
| @override
|
| ir.Expression visitSuperIndexSetIfNull(SendSet node, MethodElement getter,
|
| MethodElement setter, Node index, Node rhs, _) {
|
| - return buildSuperIndexAccessor(index, getter, setter)
|
| - .buildNullAwareAssignment(visitForValue(rhs), null,
|
| - voidContext: isVoidContext);
|
| + return _finishSetIfNull(
|
| + node, buildSuperIndexAccessor(index, getter, setter), rhs);
|
| }
|
|
|
| @override
|
|
|