@@ -836,11 +836,13 @@ class SuperPropertyAccessGenerator extends Generator {
836
836
}
837
837
838
838
Expression _createRead () {
839
+ Member ? getter = this .getter;
839
840
if (getter == null ) {
840
841
return _helper.buildUnresolvedError (name.text, fileOffset,
841
842
isSuper: true , kind: UnresolvedKind .Getter );
843
+ } else {
844
+ return new SuperPropertyGet (name, getter)..fileOffset = fileOffset;
842
845
}
843
- return new SuperPropertyGet (name, getter)..fileOffset = fileOffset;
844
846
}
845
847
846
848
@override
@@ -849,13 +851,13 @@ class SuperPropertyAccessGenerator extends Generator {
849
851
}
850
852
851
853
Expression _createWrite (int offset, Expression value) {
854
+ Member ? setter = this .setter;
852
855
if (setter == null ) {
853
856
return _helper.buildUnresolvedError (name.text, fileOffset,
854
857
rhs: value, isSuper: true , kind: UnresolvedKind .Setter );
858
+ } else {
859
+ return new SuperPropertySet (name, value, setter)..fileOffset = offset;
855
860
}
856
- SuperPropertySet write = new SuperPropertySet (name, value, setter)
857
- ..fileOffset = offset;
858
- return write;
859
861
}
860
862
861
863
@override
@@ -1227,40 +1229,44 @@ class SuperIndexedAccessGenerator extends Generator {
1227
1229
1228
1230
@override
1229
1231
Expression buildSimpleRead () {
1232
+ Procedure ? getter = this .getter;
1230
1233
if (getter == null ) {
1231
1234
return _helper.buildUnresolvedError (indexGetName.text, fileOffset,
1232
1235
isSuper: true ,
1233
1236
arguments:
1234
1237
_helper.forest.createArguments (fileOffset, < Expression > [index]),
1235
1238
kind: UnresolvedKind .Method ,
1236
1239
length: noLength);
1240
+ } else {
1241
+ return _helper.forest.createSuperMethodInvocation (
1242
+ fileOffset,
1243
+ indexGetName,
1244
+ getter,
1245
+ _helper.forest.createArguments (fileOffset, < Expression > [index]));
1237
1246
}
1238
- return _helper.forest.createSuperMethodInvocation (
1239
- fileOffset,
1240
- indexGetName,
1241
- getter,
1242
- _helper.forest.createArguments (fileOffset, < Expression > [index]));
1243
1247
}
1244
1248
1245
1249
@override
1246
1250
Expression buildAssignment (Expression value, {bool voidContext: false }) {
1247
- if (voidContext) {
1248
- if (setter == null ) {
1249
- return _helper.buildUnresolvedError (indexSetName.text, fileOffset,
1250
- isSuper: true ,
1251
- arguments: _helper.forest
1252
- .createArguments (fileOffset, < Expression > [index, value]),
1253
- kind: UnresolvedKind .Method ,
1254
- length: noLength);
1255
- }
1256
- return _helper.forest.createSuperMethodInvocation (
1257
- fileOffset,
1258
- indexSetName,
1259
- setter,
1260
- _helper.forest
1261
- .createArguments (fileOffset, < Expression > [index, value]));
1251
+ Procedure ? setter = this .setter;
1252
+ if (setter == null ) {
1253
+ return _helper.buildUnresolvedError (indexSetName.text, fileOffset,
1254
+ isSuper: true ,
1255
+ arguments: _helper.forest
1256
+ .createArguments (fileOffset, < Expression > [index, value]),
1257
+ kind: UnresolvedKind .Method ,
1258
+ length: noLength);
1262
1259
} else {
1263
- return new SuperIndexSet (setter, index, value)..fileOffset = fileOffset;
1260
+ if (voidContext) {
1261
+ return _helper.forest.createSuperMethodInvocation (
1262
+ fileOffset,
1263
+ indexSetName,
1264
+ setter,
1265
+ _helper.forest
1266
+ .createArguments (fileOffset, < Expression > [index, value]));
1267
+ } else {
1268
+ return new SuperIndexSet (setter, index, value)..fileOffset = fileOffset;
1269
+ }
1264
1270
}
1265
1271
}
1266
1272
@@ -1281,13 +1287,20 @@ class SuperIndexedAccessGenerator extends Generator {
1281
1287
bool voidContext: false ,
1282
1288
bool isPreIncDec: false ,
1283
1289
bool isPostIncDec: false }) {
1284
- return new CompoundSuperIndexSet (
1285
- getter, setter, index, binaryOperator, value,
1286
- readOffset: fileOffset,
1287
- binaryOffset: offset,
1288
- writeOffset: fileOffset,
1289
- forEffect: voidContext,
1290
- forPostIncDec: isPostIncDec);
1290
+ Procedure ? getter = this .getter;
1291
+ Procedure ? setter = this .setter;
1292
+ if (getter == null || setter == null ) {
1293
+ return buildAssignment (
1294
+ buildBinaryOperation (token, binaryOperator, value));
1295
+ } else {
1296
+ return new CompoundSuperIndexSet (
1297
+ getter, setter, index, binaryOperator, value,
1298
+ readOffset: fileOffset,
1299
+ binaryOffset: offset,
1300
+ writeOffset: fileOffset,
1301
+ forEffect: voidContext,
1302
+ forPostIncDec: isPostIncDec);
1303
+ }
1291
1304
}
1292
1305
1293
1306
@override
0 commit comments