| Index: pkg/front_end/lib/src/fasta/kernel/frontend_accessors.dart
|
| diff --git a/pkg/front_end/lib/src/fasta/kernel/frontend_accessors.dart b/pkg/front_end/lib/src/fasta/kernel/frontend_accessors.dart
|
| index 37a10d5653f1fa64395ba27df7b10f99ce8a58fb..287a9763bb76344a49ff2649178ee14d4f79978b 100644
|
| --- a/pkg/front_end/lib/src/fasta/kernel/frontend_accessors.dart
|
| +++ b/pkg/front_end/lib/src/fasta/kernel/frontend_accessors.dart
|
| @@ -577,37 +577,56 @@ class SuperIndexAccessor extends Accessor {
|
|
|
| Expression _makeSimpleWrite(Expression value, bool voidContext,
|
| KernelComplexAssignment complexAssignment) {
|
| - if (!voidContext) return _makeWriteAndReturn(value);
|
| - return new SuperMethodInvocation(
|
| - indexSetName, new KernelArguments(<Expression>[index, value]), setter);
|
| + if (!voidContext) return _makeWriteAndReturn(value, complexAssignment);
|
| + var write = new SuperMethodInvocation(
|
| + indexSetName, new KernelArguments(<Expression>[index, value]), setter)
|
| + ..fileOffset = offsetForToken(token);
|
| + complexAssignment?.write = write;
|
| + return write;
|
| }
|
|
|
| Expression _makeRead(KernelComplexAssignment complexAssignment) {
|
| - return new SuperMethodInvocation(
|
| - indexGetName, new KernelArguments(<Expression>[indexAccess()]), getter);
|
| + var read = new SuperMethodInvocation(
|
| + indexGetName, new KernelArguments(<Expression>[indexAccess()]), getter)
|
| + ..fileOffset = offsetForToken(token);
|
| + complexAssignment?.read = read;
|
| + return read;
|
| }
|
|
|
| Expression _makeWrite(Expression value, bool voidContext,
|
| KernelComplexAssignment complexAssignment) {
|
| - if (!voidContext) return _makeWriteAndReturn(value);
|
| - return new SuperMethodInvocation(indexSetName,
|
| - new KernelArguments(<Expression>[indexAccess(), value]), setter);
|
| + if (!voidContext) return _makeWriteAndReturn(value, complexAssignment);
|
| + var write = new SuperMethodInvocation(indexSetName,
|
| + new KernelArguments(<Expression>[indexAccess(), value]), setter)
|
| + ..fileOffset = offsetForToken(token);
|
| + complexAssignment?.write = write;
|
| + return write;
|
| }
|
|
|
| - _makeWriteAndReturn(Expression value) {
|
| + _makeWriteAndReturn(
|
| + Expression value, KernelComplexAssignment complexAssignment) {
|
| var valueVariable = new VariableDeclaration.forValue(value);
|
| - var dummy = new VariableDeclaration.forValue(new SuperMethodInvocation(
|
| + var write = new SuperMethodInvocation(
|
| indexSetName,
|
| new KernelArguments(
|
| <Expression>[indexAccess(), new VariableGet(valueVariable)]),
|
| - setter));
|
| + setter)
|
| + ..fileOffset = offsetForToken(token);
|
| + complexAssignment?.write = write;
|
| + var dummy = new VariableDeclaration.forValue(write);
|
| return makeLet(
|
| valueVariable, makeLet(dummy, new VariableGet(valueVariable)));
|
| }
|
|
|
| Expression _finish(
|
| Expression body, KernelComplexAssignment complexAssignment) {
|
| - return makeLet(indexVariable, body);
|
| + var desugared = makeLet(indexVariable, body);
|
| + if (complexAssignment != null) {
|
| + complexAssignment.desugared = desugared;
|
| + return complexAssignment;
|
| + } else {
|
| + return desugared;
|
| + }
|
| }
|
| }
|
|
|
|
|