Skip to content

Commit 9825550

Browse files
author
Dart CI
committed
Version 2.18.0-223.0.dev
Merge commit 'bb104f07fcd4d379b003782264bfae327e034418' into 'dev'
2 parents cf5dfd1 + bb104f0 commit 9825550

File tree

54 files changed

+787
-541
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+787
-541
lines changed

pkg/compiler/lib/src/ir/static_type.dart

+15-28
Original file line numberDiff line numberDiff line change
@@ -1085,22 +1085,14 @@ abstract class StaticTypeVisitor extends StaticTypeBase {
10851085
ir.DartType visitSuperPropertyGet(ir.SuperPropertyGet node) {
10861086
ir.DartType resultType;
10871087
final interfaceTarget = node.interfaceTarget;
1088-
if (interfaceTarget == null) {
1089-
// TODO(johnniwinther): Resolve and set the target here.
1090-
resultType = const ir.DynamicType();
1088+
ir.Class declaringClass = interfaceTarget.enclosingClass!;
1089+
if (declaringClass.typeParameters.isEmpty) {
1090+
resultType = interfaceTarget.superGetterType;
10911091
} else {
1092-
ir.Class declaringClass = interfaceTarget.enclosingClass!;
1093-
if (declaringClass.typeParameters.isEmpty) {
1094-
resultType = interfaceTarget.superGetterType;
1095-
} else {
1096-
ir.InterfaceType receiver = typeEnvironment.getTypeAsInstanceOf(
1097-
thisType,
1098-
declaringClass,
1099-
currentLibrary,
1100-
typeEnvironment.coreTypes)!;
1101-
resultType = ir.Substitution.fromInterfaceType(receiver)
1102-
.substituteType(interfaceTarget.superGetterType);
1103-
}
1092+
ir.InterfaceType receiver = typeEnvironment.getTypeAsInstanceOf(
1093+
thisType, declaringClass, currentLibrary, typeEnvironment.coreTypes)!;
1094+
resultType = ir.Substitution.fromInterfaceType(receiver)
1095+
.substituteType(interfaceTarget.superGetterType);
11041096
}
11051097
_staticTypeCache._expressionTypes[node] = resultType;
11061098
handleSuperPropertyGet(node, resultType);
@@ -1125,19 +1117,14 @@ abstract class StaticTypeVisitor extends StaticTypeBase {
11251117
ArgumentTypes argumentTypes = _visitArguments(node.arguments);
11261118
ir.DartType returnType;
11271119
final interfaceTarget = node.interfaceTarget;
1128-
if (interfaceTarget == null) {
1129-
// TODO(johnniwinther): Resolve and set the target here.
1130-
returnType = const ir.DynamicType();
1131-
} else {
1132-
ir.Class superclass = interfaceTarget.enclosingClass!;
1133-
ir.InterfaceType receiverType = typeEnvironment.getTypeAsInstanceOf(
1134-
thisType, superclass, currentLibrary, typeEnvironment.coreTypes)!;
1135-
returnType = ir.Substitution.fromInterfaceType(receiverType)
1136-
.substituteType(interfaceTarget.function.returnType);
1137-
returnType = ir.Substitution.fromPairs(
1138-
interfaceTarget.function.typeParameters, node.arguments.types)
1139-
.substituteType(returnType);
1140-
}
1120+
ir.Class superclass = interfaceTarget.enclosingClass!;
1121+
ir.InterfaceType receiverType = typeEnvironment.getTypeAsInstanceOf(
1122+
thisType, superclass, currentLibrary, typeEnvironment.coreTypes)!;
1123+
returnType = ir.Substitution.fromInterfaceType(receiverType)
1124+
.substituteType(interfaceTarget.function.returnType);
1125+
returnType = ir.Substitution.fromPairs(
1126+
interfaceTarget.function.typeParameters, node.arguments.types)
1127+
.substituteType(returnType);
11411128
_staticTypeCache._expressionTypes[node] = returnType;
11421129
handleSuperMethodInvocation(node, argumentTypes, returnType);
11431130
return returnType;

pkg/compiler/lib/src/ir/util.dart

+5
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,11 @@ ir.Member? getEffectiveSuperTarget(ir.Member? target) {
287287
if (target.stubKind == ir.ProcedureStubKind.ConcreteMixinStub) {
288288
return getEffectiveSuperTarget(target.stubTarget);
289289
}
290+
// TODO(johnniwinther): Remove this when the CFE reports an error on
291+
// missing concrete super targets.
292+
if (target.isAbstract) {
293+
return null;
294+
}
290295
}
291296
return target;
292297
}

pkg/dart2wasm/lib/code_generator.dart

+3-3
Original file line numberDiff line numberDiff line change
@@ -1137,7 +1137,7 @@ class CodeGenerator extends ExpressionVisitor1<w.ValueType, w.ValueType>
11371137
w.ValueType visitSuperMethodInvocation(
11381138
SuperMethodInvocation node, w.ValueType expectedType) {
11391139
Reference target =
1140-
_lookupSuperTarget(node.interfaceTarget!, setter: false).reference;
1140+
_lookupSuperTarget(node.interfaceTarget, setter: false).reference;
11411141
w.BaseFunction targetFunction = translator.functions.getFunction(target);
11421142
w.ValueType receiverType = targetFunction.type.inputs.first;
11431143
w.ValueType thisType = visitThis(receiverType);
@@ -1515,7 +1515,7 @@ class CodeGenerator extends ExpressionVisitor1<w.ValueType, w.ValueType>
15151515
@override
15161516
w.ValueType visitSuperPropertyGet(
15171517
SuperPropertyGet node, w.ValueType expectedType) {
1518-
Member target = _lookupSuperTarget(node.interfaceTarget!, setter: false);
1518+
Member target = _lookupSuperTarget(node.interfaceTarget, setter: false);
15191519
if (target is Procedure && !target.isGetter) {
15201520
throw "Not supported: Super tear-off at ${node.location}";
15211521
}
@@ -1525,7 +1525,7 @@ class CodeGenerator extends ExpressionVisitor1<w.ValueType, w.ValueType>
15251525
@override
15261526
w.ValueType visitSuperPropertySet(
15271527
SuperPropertySet node, w.ValueType expectedType) {
1528-
Member target = _lookupSuperTarget(node.interfaceTarget!, setter: true);
1528+
Member target = _lookupSuperTarget(node.interfaceTarget, setter: true);
15291529
return _directSet(target, ThisExpression(), node.value,
15301530
preserved: expectedType != voidMarker);
15311531
}

pkg/dev_compiler/lib/src/kernel/compiler.dart

+6-6
Original file line numberDiff line numberDiff line change
@@ -4790,12 +4790,12 @@ class ProgramCompiler extends ComputeOnceConstantVisitor<js_ast.Expression>
47904790
@override
47914791
js_ast.Expression visitAbstractSuperPropertyGet(
47924792
AbstractSuperPropertyGet node) {
4793-
return _emitSuperPropertyGet(node.interfaceTarget!);
4793+
return _emitSuperPropertyGet(node.interfaceTarget);
47944794
}
47954795

47964796
@override
47974797
js_ast.Expression visitSuperPropertyGet(SuperPropertyGet node) {
4798-
return _emitSuperPropertyGet(node.interfaceTarget!);
4798+
return _emitSuperPropertyGet(node.interfaceTarget);
47994799
}
48004800

48014801
js_ast.Expression _emitSuperPropertyGet(Member target) {
@@ -4813,12 +4813,12 @@ class ProgramCompiler extends ComputeOnceConstantVisitor<js_ast.Expression>
48134813
@override
48144814
js_ast.Expression visitAbstractSuperPropertySet(
48154815
AbstractSuperPropertySet node) {
4816-
return _emitSuperPropertySet(node.interfaceTarget!, node.value);
4816+
return _emitSuperPropertySet(node.interfaceTarget, node.value);
48174817
}
48184818

48194819
@override
48204820
js_ast.Expression visitSuperPropertySet(SuperPropertySet node) {
4821-
return _emitSuperPropertySet(node.interfaceTarget!, node.value);
4821+
return _emitSuperPropertySet(node.interfaceTarget, node.value);
48224822
}
48234823

48244824
js_ast.Expression _emitSuperPropertySet(Member target, Expression value) {
@@ -5432,12 +5432,12 @@ class ProgramCompiler extends ComputeOnceConstantVisitor<js_ast.Expression>
54325432
@override
54335433
js_ast.Expression visitAbstractSuperMethodInvocation(
54345434
AbstractSuperMethodInvocation node) {
5435-
return _emitSuperMethodInvocation(node.interfaceTarget!, node.arguments);
5435+
return _emitSuperMethodInvocation(node.interfaceTarget, node.arguments);
54365436
}
54375437

54385438
@override
54395439
js_ast.Expression visitSuperMethodInvocation(SuperMethodInvocation node) {
5440-
return _emitSuperMethodInvocation(node.interfaceTarget!, node.arguments);
5440+
return _emitSuperMethodInvocation(node.interfaceTarget, node.arguments);
54415441
}
54425442

54435443
js_ast.Expression _emitSuperMethodInvocation(

pkg/front_end/lib/src/fasta/kernel/expression_generator.dart

+45-32
Original file line numberDiff line numberDiff line change
@@ -836,11 +836,13 @@ class SuperPropertyAccessGenerator extends Generator {
836836
}
837837

838838
Expression _createRead() {
839+
Member? getter = this.getter;
839840
if (getter == null) {
840841
return _helper.buildUnresolvedError(name.text, fileOffset,
841842
isSuper: true, kind: UnresolvedKind.Getter);
843+
} else {
844+
return new SuperPropertyGet(name, getter)..fileOffset = fileOffset;
842845
}
843-
return new SuperPropertyGet(name, getter)..fileOffset = fileOffset;
844846
}
845847

846848
@override
@@ -849,13 +851,13 @@ class SuperPropertyAccessGenerator extends Generator {
849851
}
850852

851853
Expression _createWrite(int offset, Expression value) {
854+
Member? setter = this.setter;
852855
if (setter == null) {
853856
return _helper.buildUnresolvedError(name.text, fileOffset,
854857
rhs: value, isSuper: true, kind: UnresolvedKind.Setter);
858+
} else {
859+
return new SuperPropertySet(name, value, setter)..fileOffset = offset;
855860
}
856-
SuperPropertySet write = new SuperPropertySet(name, value, setter)
857-
..fileOffset = offset;
858-
return write;
859861
}
860862

861863
@override
@@ -1227,40 +1229,44 @@ class SuperIndexedAccessGenerator extends Generator {
12271229

12281230
@override
12291231
Expression buildSimpleRead() {
1232+
Procedure? getter = this.getter;
12301233
if (getter == null) {
12311234
return _helper.buildUnresolvedError(indexGetName.text, fileOffset,
12321235
isSuper: true,
12331236
arguments:
12341237
_helper.forest.createArguments(fileOffset, <Expression>[index]),
12351238
kind: UnresolvedKind.Method,
12361239
length: noLength);
1240+
} else {
1241+
return _helper.forest.createSuperMethodInvocation(
1242+
fileOffset,
1243+
indexGetName,
1244+
getter,
1245+
_helper.forest.createArguments(fileOffset, <Expression>[index]));
12371246
}
1238-
return _helper.forest.createSuperMethodInvocation(
1239-
fileOffset,
1240-
indexGetName,
1241-
getter,
1242-
_helper.forest.createArguments(fileOffset, <Expression>[index]));
12431247
}
12441248

12451249
@override
12461250
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);
12621259
} 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+
}
12641270
}
12651271
}
12661272

@@ -1281,13 +1287,20 @@ class SuperIndexedAccessGenerator extends Generator {
12811287
bool voidContext: false,
12821288
bool isPreIncDec: false,
12831289
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+
}
12911304
}
12921305

12931306
@override

pkg/front_end/lib/src/fasta/kernel/forest.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -752,7 +752,7 @@ class Forest {
752752
}
753753

754754
SuperMethodInvocation createSuperMethodInvocation(
755-
int fileOffset, Name name, Procedure? procedure, Arguments arguments) {
755+
int fileOffset, Name name, Procedure procedure, Arguments arguments) {
756756
// ignore: unnecessary_null_comparison
757757
assert(fileOffset != null);
758758
return new SuperMethodInvocation(name, arguments, procedure)

pkg/front_end/lib/src/fasta/kernel/internal_ast.dart

+3-3
Original file line numberDiff line numberDiff line change
@@ -2682,7 +2682,7 @@ class IndexSet extends InternalExpression {
26822682
///
26832683
class SuperIndexSet extends InternalExpression {
26842684
/// The []= member.
2685-
Member? setter;
2685+
Member setter;
26862686

26872687
/// The index expression of the operation.
26882688
Expression index;
@@ -3707,10 +3707,10 @@ class NullAwareIfNullSet extends InternalExpression {
37073707
///
37083708
class CompoundSuperIndexSet extends InternalExpression {
37093709
/// The [] member.
3710-
Member? getter;
3710+
Member getter;
37113711

37123712
/// The []= member.
3713-
Member? setter;
3713+
Member setter;
37143714

37153715
/// The index expression of the operation.
37163716
Expression index;

0 commit comments

Comments
 (0)