| Index: pkg/kernel/lib/frontend/accessors.dart
|
| diff --git a/pkg/kernel/lib/frontend/accessors.dart b/pkg/kernel/lib/frontend/accessors.dart
|
| index fceec2f50c5267fa81008ff5f004ffdbd00f248b..5271f0b2108a6d3496d1e44f903434c6984f4f32 100644
|
| --- a/pkg/kernel/lib/frontend/accessors.dart
|
| +++ b/pkg/kernel/lib/frontend/accessors.dart
|
| @@ -9,6 +9,13 @@ library kernel.frontend.accessors;
|
| import '../ast.dart';
|
|
|
| abstract class Accessor {
|
| + // [builtBinary] and [builtGetter] capture the inner nodes. Used by
|
| + // dart2js+rasta for determining how subexpressions map to legacy dart2js Ast
|
| + // nodes. This will be removed once dart2js type analysis (aka inference) is
|
| + // reimplemented on kernel.
|
| + Expression builtBinary;
|
| + Expression builtGetter;
|
| +
|
| Expression buildSimpleRead() {
|
| return _finish(_makeSimpleRead());
|
| }
|
| @@ -37,7 +44,8 @@ abstract class Accessor {
|
| Expression buildCompoundAssignment(Name binaryOperator, Expression value,
|
| {bool voidContext: false, Procedure interfaceTarget}) {
|
| return _finish(_makeWrite(
|
| - makeBinary(_makeRead(), binaryOperator, interfaceTarget, value),
|
| + builtBinary =
|
| + makeBinary(_makeRead(), binaryOperator, interfaceTarget, value),
|
| voidContext));
|
| }
|
|
|
| @@ -56,7 +64,7 @@ abstract class Accessor {
|
| var value = new VariableDeclaration.forValue(_makeRead());
|
| valueAccess() => new VariableGet(value);
|
| var dummy = new VariableDeclaration.forValue(_makeWrite(
|
| - makeBinary(
|
| + builtBinary = makeBinary(
|
| valueAccess(), binaryOperator, interfaceTarget, new IntLiteral(1)),
|
| true));
|
| return _finish(makeLet(value, makeLet(dummy, valueAccess())));
|
| @@ -122,7 +130,7 @@ class PropertyAccessor extends Accessor {
|
| return new VariableGet(_receiverVariable);
|
| }
|
|
|
| - _makeRead() => new PropertyGet(receiverAccess(), name, getter);
|
| + _makeRead() => builtGetter = new PropertyGet(receiverAccess(), name, getter);
|
|
|
| _makeWrite(Expression value, bool voidContext) {
|
| return new PropertySet(receiverAccess(), name, value, setter);
|
| @@ -139,7 +147,8 @@ class ThisPropertyAccessor extends Accessor {
|
|
|
| ThisPropertyAccessor(this.name, this.getter, this.setter);
|
|
|
| - _makeRead() => new PropertyGet(new ThisExpression(), name, getter);
|
| + _makeRead() =>
|
| + builtGetter = new PropertyGet(new ThisExpression(), name, getter);
|
|
|
| _makeWrite(Expression value, bool voidContext) {
|
| return new PropertySet(new ThisExpression(), name, value, setter);
|
| @@ -158,7 +167,7 @@ class NullAwarePropertyAccessor extends Accessor {
|
|
|
| receiverAccess() => new VariableGet(receiver);
|
|
|
| - _makeRead() => new PropertyGet(receiverAccess(), name, getter);
|
| + _makeRead() => builtGetter = new PropertyGet(receiverAccess(), name, getter);
|
|
|
| _makeWrite(Expression value, bool voidContext) {
|
| return new PropertySet(receiverAccess(), name, value, setter);
|
|
|