Version 2.15.0-115.0.dev
Merge commit '4aa6373724302f852639af58fa53b541cef99a94' into 'dev'
diff --git a/pkg/analyzer/lib/src/error/best_practices_verifier.dart b/pkg/analyzer/lib/src/error/best_practices_verifier.dart
index edf4483..eac31f6 100644
--- a/pkg/analyzer/lib/src/error/best_practices_verifier.dart
+++ b/pkg/analyzer/lib/src/error/best_practices_verifier.dart
@@ -798,71 +798,58 @@
/// [HintCode.UNNECESSARY_TYPE_CHECK_TRUE], and
/// [HintCode.UNNECESSARY_TYPE_CHECK_FALSE].
bool _checkAllTypeChecks(IsExpression node) {
- Expression expression = node.expression;
- TypeAnnotation typeName = node.type;
- var rhsType = typeName.type as TypeImpl;
- var rhsNameStr = typeName is TypeName ? typeName.name.name : null;
- // if x is dynamic
- if (rhsType.isDynamic && rhsNameStr == Keyword.DYNAMIC.lexeme) {
- if (node.notOperator == null) {
- // the is case
- _errorReporter.reportErrorForNode(
- HintCode.UNNECESSARY_TYPE_CHECK_TRUE, node);
- } else {
- // the is not case
- _errorReporter.reportErrorForNode(
- HintCode.UNNECESSARY_TYPE_CHECK_FALSE, node);
- }
- return true;
+ var leftNode = node.expression;
+ var rightNode = node.type;
+ var rightType = rightNode.type as TypeImpl;
+
+ void report() {
+ _errorReporter.reportErrorForNode(
+ node.notOperator == null
+ ? HintCode.UNNECESSARY_TYPE_CHECK_TRUE
+ : HintCode.UNNECESSARY_TYPE_CHECK_FALSE,
+ node,
+ );
}
+
+ // `is dynamic` or `is! dynamic`
+ if (rightType.isDynamic) {
+ var rightTypeStr = rightNode is TypeName ? rightNode.name.name : null;
+ if (rightTypeStr == Keyword.DYNAMIC.lexeme) {
+ report();
+ return true;
+ }
+ return false;
+ }
+
// `is Null` or `is! Null`
- if (rhsType.isDartCoreNull) {
- if (expression is NullLiteral) {
- if (node.notOperator == null) {
- _errorReporter.reportErrorForNode(
- HintCode.UNNECESSARY_TYPE_CHECK_TRUE,
- node,
- );
- } else {
- _errorReporter.reportErrorForNode(
- HintCode.UNNECESSARY_TYPE_CHECK_FALSE,
- node,
- );
- }
+ if (rightType.isDartCoreNull) {
+ if (leftNode is NullLiteral) {
+ report();
} else {
- if (node.notOperator == null) {
- _errorReporter.reportErrorForNode(
- HintCode.TYPE_CHECK_IS_NULL,
- node,
- );
- } else {
- _errorReporter.reportErrorForNode(
- HintCode.TYPE_CHECK_IS_NOT_NULL,
- node,
- );
- }
+ _errorReporter.reportErrorForNode(
+ node.notOperator == null
+ ? HintCode.TYPE_CHECK_IS_NULL
+ : HintCode.TYPE_CHECK_IS_NOT_NULL,
+ node,
+ );
}
return true;
}
- // `is Object` or `is! Object`
- if (rhsType.isDartCoreObject) {
- var nullability = rhsType.nullabilitySuffix;
- if (nullability == NullabilitySuffix.star ||
- nullability == NullabilitySuffix.question) {
- if (node.notOperator == null) {
- _errorReporter.reportErrorForNode(
- HintCode.UNNECESSARY_TYPE_CHECK_TRUE,
- node,
- );
- } else {
- _errorReporter.reportErrorForNode(
- HintCode.UNNECESSARY_TYPE_CHECK_FALSE,
- node,
- );
- }
+
+ if (_isNonNullableByDefault) {
+ var leftType = leftNode.typeOrThrow;
+ if (_typeSystem.isSubtypeOf(leftType, rightType)) {
+ report();
+ return true;
+ }
+ } else {
+ // In legacy all types are subtypes of `Object`.
+ if (rightType.isDartCoreObject) {
+ report();
return true;
}
}
+
return false;
}
diff --git a/pkg/analyzer/test/src/diagnostics/unnecessary_type_check_test.dart b/pkg/analyzer/test/src/diagnostics/unnecessary_type_check_test.dart
index fef92e8..ab55baf 100644
--- a/pkg/analyzer/test/src/diagnostics/unnecessary_type_check_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unnecessary_type_check_test.dart
@@ -3,6 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
import 'package:analyzer/src/dart/error/hint_codes.dart';
+import 'package:analyzer/src/error/codes.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
import '../dart/resolution/context_collection_resolution.dart';
@@ -19,16 +20,87 @@
@reflectiveTest
class UnnecessaryTypeCheckFalseTest extends PubPackageResolutionTest
with UnnecessaryTypeCheckFalseTestCases {
- @override
- test_type_not_object() async {
+ test_typeNonNullable_isNot_same() async {
+ await assertErrorsInCode(r'''
+void f(int a) {
+ a is! int;
+}
+''', [
+ error(HintCode.UNNECESSARY_TYPE_CHECK_FALSE, 18, 9),
+ ]);
+ }
+
+ test_typeNonNullable_isNot_subtype() async {
await assertNoErrorsInCode(r'''
-void f<T>(T a) {
- a is! Object;
+void f(num a) {
+ a is! int;
}
''');
}
- test_type_not_objectQuestion() async {
+ test_typeNonNullable_isNot_supertype() async {
+ await assertErrorsInCode(r'''
+void f(int a) {
+ a is! num;
+}
+''', [
+ error(HintCode.UNNECESSARY_TYPE_CHECK_FALSE, 18, 9),
+ ]);
+ }
+
+ test_typeNullable_isNot_same() async {
+ await assertErrorsInCode(r'''
+void f(int? a) {
+ a is! int?;
+}
+''', [
+ error(HintCode.UNNECESSARY_TYPE_CHECK_FALSE, 19, 10),
+ ]);
+ }
+
+ test_typeNullable_isNot_same_nonNullable() async {
+ await assertNoErrorsInCode(r'''
+void f(int? a) {
+ a is! int;
+}
+''');
+ }
+
+ test_typeNullable_isNot_subtype() async {
+ await assertNoErrorsInCode(r'''
+void f(num? a) {
+ a is! int?;
+}
+''');
+ }
+
+ test_typeNullable_isNot_subtype_nonNullable() async {
+ await assertNoErrorsInCode(r'''
+void f(num? a) {
+ a is! int;
+}
+''');
+ }
+
+ test_typeNullable_isNot_supertype() async {
+ await assertErrorsInCode(r'''
+void f(int? a) {
+ a is! num?;
+}
+''', [
+ error(HintCode.UNNECESSARY_TYPE_CHECK_FALSE, 19, 10),
+ ]);
+ }
+
+ test_typeNullable_isNot_supertype_nonNullable() async {
+ await assertNoErrorsInCode(r'''
+void f(int? a) {
+ a is! num;
+}
+''');
+ }
+
+ test_typeParameter_isNot_objectQuestion() async {
await assertErrorsInCode(r'''
void f<T>(T a) {
a is! Object?;
@@ -40,7 +112,7 @@
}
mixin UnnecessaryTypeCheckFalseTestCases on PubPackageResolutionTest {
- test_null_not_Null() async {
+ test_null_isNot_Null() async {
await assertErrorsInCode(r'''
var b = null is! Null;
''', [
@@ -48,7 +120,7 @@
]);
}
- test_type_not_dynamic() async {
+ test_typeParameter_isNot_dynamic() async {
await assertErrorsInCode(r'''
void f<T>(T a) {
a is! dynamic;
@@ -58,35 +130,110 @@
]);
}
- test_type_not_object() async {
+ test_typeParameter_isNot_object() async {
+ var expectedErrors = expectedErrorsByNullability(
+ nullable: [],
+ legacy: [
+ error(HintCode.UNNECESSARY_TYPE_CHECK_FALSE, 19, 12),
+ ],
+ );
await assertErrorsInCode(r'''
void f<T>(T a) {
a is! Object;
}
-''', [
- error(HintCode.UNNECESSARY_TYPE_CHECK_FALSE, 19, 12),
- ]);
+''', expectedErrors);
}
}
@reflectiveTest
class UnnecessaryTypeCheckFalseWithoutNullSafetyTest
extends PubPackageResolutionTest
- with UnnecessaryTypeCheckFalseTestCases, WithoutNullSafetyMixin {}
+ with WithoutNullSafetyMixin, UnnecessaryTypeCheckFalseTestCases {}
@reflectiveTest
class UnnecessaryTypeCheckTrueTest extends PubPackageResolutionTest
with UnnecessaryTypeCheckTrueTestCases {
- @override
- test_type_is_object() async {
+ test_typeNonNullable_is_same() async {
+ await assertErrorsInCode(r'''
+void f(int a) {
+ a is int;
+}
+''', [
+ error(HintCode.UNNECESSARY_TYPE_CHECK_TRUE, 18, 8),
+ ]);
+ }
+
+ test_typeNonNullable_is_subtype() async {
await assertNoErrorsInCode(r'''
-void f<T>(T a) {
- a is Object;
+void f(num a) {
+ a is int;
}
''');
}
- test_type_is_objectQuestion() async {
+ test_typeNonNullable_is_supertype() async {
+ await assertErrorsInCode(r'''
+void f(int a) {
+ a is num;
+}
+''', [
+ error(HintCode.UNNECESSARY_TYPE_CHECK_TRUE, 18, 8),
+ ]);
+ }
+
+ test_typeNullable_is_same() async {
+ await assertErrorsInCode(r'''
+void f(int? a) {
+ a is int?;
+}
+''', [
+ error(HintCode.UNNECESSARY_TYPE_CHECK_TRUE, 19, 9),
+ ]);
+ }
+
+ test_typeNullable_is_same_nonNullable() async {
+ await assertNoErrorsInCode(r'''
+void f(int? a) {
+ a is int;
+}
+''');
+ }
+
+ test_typeNullable_is_subtype() async {
+ await assertNoErrorsInCode(r'''
+void f(num? a) {
+ a is int?;
+}
+''');
+ }
+
+ test_typeNullable_is_subtype_nonNullable() async {
+ await assertNoErrorsInCode(r'''
+void f(num? a) {
+ a is int;
+}
+''');
+ }
+
+ test_typeNullable_is_supertype() async {
+ await assertErrorsInCode(r'''
+void f(int? a) {
+ a is num?;
+}
+''', [
+ error(HintCode.UNNECESSARY_TYPE_CHECK_TRUE, 19, 9),
+ ]);
+ }
+
+ test_typeNullable_is_supertype_nonNullable() async {
+ await assertNoErrorsInCode(r'''
+void f(int? a) {
+ a is num;
+}
+''');
+ }
+
+ test_typeParameter_is_objectQuestion() async {
await assertErrorsInCode(r'''
void f<T>(T a) {
a is Object?;
@@ -108,6 +255,26 @@
test_type_is_dynamic() async {
await assertErrorsInCode(r'''
+void f(int a) {
+ a is dynamic;
+}
+''', [
+ error(HintCode.UNNECESSARY_TYPE_CHECK_TRUE, 18, 12),
+ ]);
+ }
+
+ test_type_is_unresolved() async {
+ await assertErrorsInCode(r'''
+void f(int a) {
+ a is Unresolved;
+}
+''', [
+ error(CompileTimeErrorCode.TYPE_TEST_WITH_UNDEFINED_NAME, 23, 10),
+ ]);
+ }
+
+ test_typeParameter_is_dynamic() async {
+ await assertErrorsInCode(r'''
void f<T>(T a) {
a is dynamic;
}
@@ -116,18 +283,22 @@
]);
}
- test_type_is_object() async {
+ test_typeParameter_is_object() async {
+ var expectedErrors = expectedErrorsByNullability(
+ nullable: [],
+ legacy: [
+ error(HintCode.UNNECESSARY_TYPE_CHECK_TRUE, 19, 11),
+ ],
+ );
await assertErrorsInCode(r'''
void f<T>(T a) {
a is Object;
}
-''', [
- error(HintCode.UNNECESSARY_TYPE_CHECK_TRUE, 19, 11),
- ]);
+''', expectedErrors);
}
}
@reflectiveTest
class UnnecessaryTypeCheckTrueWithoutNullSafetyTest
extends PubPackageResolutionTest
- with UnnecessaryTypeCheckTrueTestCases, WithoutNullSafetyMixin {}
+ with WithoutNullSafetyMixin, UnnecessaryTypeCheckTrueTestCases {}
diff --git a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
index 3f1b27e..a5faee7 100644
--- a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
@@ -1381,11 +1381,6 @@
reportNonNullableInNullAwareWarningIfNeeded(
lhsResult.inferredType, "??", node.left.fileOffset);
- Member equalsMember = inferrer
- .findInterfaceMember(
- lhsResult.inferredType, equalsName, node.fileOffset)
- .member!;
-
// This ends any shorting in `node.left`.
Expression left = lhsResult.expression;
@@ -1420,9 +1415,7 @@
VariableDeclaration variable =
createVariable(left, lhsResult.inferredType);
Expression equalsNull = inferrer.createEqualsNull(
- lhsResult.expression.fileOffset,
- createVariableGet(variable),
- equalsMember);
+ lhsResult.expression.fileOffset, createVariableGet(variable));
VariableGet variableGet = createVariableGet(variable);
if (inferrer.library.isNonNullableByDefault &&
!identical(nonNullableLhsType, originalLhsType)) {
@@ -3130,10 +3123,6 @@
receiverType, node.propertyName, writeTarget, rhs,
forEffect: node.forEffect, valueType: writeType);
- Member equalsMember = inferrer
- .findInterfaceMember(readType, equalsName, node.fileOffset)
- .member!;
-
DartType nonNullableReadType = readType.toNonNull();
DartType inferredType = inferrer.typeSchemaEnvironment
.getStandardUpperBound(
@@ -3145,8 +3134,7 @@
//
// let v1 = o in v1.a == null ? v1.a = b : null
//
- Expression equalsNull =
- inferrer.createEqualsNull(node.fileOffset, read, equalsMember);
+ Expression equalsNull = inferrer.createEqualsNull(node.fileOffset, read);
ConditionalExpression conditional = new ConditionalExpression(equalsNull,
write, new NullLiteral()..fileOffset = node.fileOffset, inferredType)
..fileOffset = node.fileOffset;
@@ -3160,7 +3148,7 @@
//
VariableDeclaration readVariable = createVariable(read, readType);
Expression equalsNull = inferrer.createEqualsNull(
- node.fileOffset, createVariableGet(readVariable), equalsMember);
+ node.fileOffset, createVariableGet(readVariable));
VariableGet variableGet = createVariableGet(readVariable);
if (inferrer.library.isNonNullableByDefault &&
!identical(nonNullableReadType, readType)) {
@@ -3194,10 +3182,6 @@
.inferExpression(node.write, typeContext, true, isVoidAllowed: true);
inferrer.flowAnalysis.ifNullExpression_end();
- Member equalsMember = inferrer
- .findInterfaceMember(readType, equalsName, node.fileOffset)
- .member!;
-
DartType originalReadType = readType;
DartType nonNullableReadType = originalReadType.toNonNull();
DartType inferredType = inferrer.typeSchemaEnvironment
@@ -3210,8 +3194,7 @@
//
// a == null ? a = b : null
//
- Expression equalsNull =
- inferrer.createEqualsNull(node.fileOffset, read, equalsMember);
+ Expression equalsNull = inferrer.createEqualsNull(node.fileOffset, read);
replacement = new ConditionalExpression(
equalsNull,
writeResult.expression,
@@ -3225,7 +3208,7 @@
//
VariableDeclaration readVariable = createVariable(read, readType);
Expression equalsNull = inferrer.createEqualsNull(
- node.fileOffset, createVariableGet(readVariable), equalsMember);
+ node.fileOffset, createVariableGet(readVariable));
VariableGet variableGet = createVariableGet(readVariable);
if (inferrer.library.isNonNullableByDefault &&
!identical(nonNullableReadType, originalReadType)) {
@@ -3568,10 +3551,6 @@
DartType readType = readResult.inferredType;
inferrer.flowAnalysis.ifNullExpression_rightBegin(read, readType);
- Member equalsMember = inferrer
- .findInterfaceMember(readType, equalsName, node.testOffset)
- .member!;
-
writeIndex = inferrer.ensureAssignable(
writeIndexType, indexResult.inferredType, writeIndex,
whyNotPromoted: whyNotPromotedIndex);
@@ -3623,8 +3602,7 @@
// let indexVariable = a in
// o[indexVariable] == null ? o.[]=(indexVariable, b) : null
//
- Expression equalsNull =
- inferrer.createEqualsNull(node.testOffset, read, equalsMember);
+ Expression equalsNull = inferrer.createEqualsNull(node.testOffset, read);
ConditionalExpression conditional = new ConditionalExpression(equalsNull,
write, new NullLiteral()..fileOffset = node.testOffset, inferredType)
..fileOffset = node.testOffset;
@@ -3656,7 +3634,7 @@
//
VariableDeclaration readVariable = createVariable(read, readType);
Expression equalsNull = inferrer.createEqualsNull(
- node.testOffset, createVariableGet(readVariable), equalsMember);
+ node.testOffset, createVariableGet(readVariable));
VariableDeclaration writeVariable =
createVariable(write, const VoidType());
VariableGet variableGet = createVariableGet(readVariable);
@@ -3701,10 +3679,6 @@
DartType readIndexType =
inferrer.getIndexKeyType(readTarget, inferrer.thisType!);
- Member equalsMember = inferrer
- .findInterfaceMember(readType, equalsName, node.testOffset)
- .member!;
-
ObjectAccessTarget writeTarget = node.setter != null
? new ObjectAccessTarget.interfaceMember(node.setter!,
isPotentiallyNullable: false)
@@ -3807,8 +3781,7 @@
// super[v1] == null ? super.[]=(v1, b) : null
//
assert(valueVariable == null);
- Expression equalsNull =
- inferrer.createEqualsNull(node.testOffset, read, equalsMember);
+ Expression equalsNull = inferrer.createEqualsNull(node.testOffset, read);
replacement = new ConditionalExpression(equalsNull, write,
new NullLiteral()..fileOffset = node.testOffset, inferredType)
..fileOffset = node.testOffset;
@@ -3826,7 +3799,7 @@
VariableDeclaration readVariable = createVariable(read, readType);
Expression equalsNull = inferrer.createEqualsNull(
- node.testOffset, createVariableGet(readVariable), equalsMember);
+ node.testOffset, createVariableGet(readVariable));
VariableDeclaration writeVariable =
createVariable(write, const VoidType());
VariableGet readVariableGet = createVariableGet(readVariable);
@@ -3925,10 +3898,6 @@
DartType readType = readResult.inferredType;
inferrer.flowAnalysis.ifNullExpression_rightBegin(read, readType);
- Member equalsMember = inferrer
- .findInterfaceMember(readType, equalsName, node.testOffset)
- .member!;
-
writeIndex = inferrer.ensureAssignable(
writeIndexType, indexResult.inferredType, writeIndex);
@@ -3974,8 +3943,7 @@
// ? receiverVariable.[]=(indexVariable, b) : null
//
assert(valueVariable == null);
- Expression equalsNull =
- inferrer.createEqualsNull(node.testOffset, read, equalsMember);
+ Expression equalsNull = inferrer.createEqualsNull(node.testOffset, read);
replacement = new ConditionalExpression(equalsNull, write,
new NullLiteral()..fileOffset = node.testOffset, inferredType)
..fileOffset = node.testOffset;
@@ -3994,7 +3962,7 @@
//
VariableDeclaration readVariable = createVariable(read, readType);
Expression equalsNull = inferrer.createEqualsNull(
- node.testOffset, createVariableGet(readVariable), equalsMember);
+ node.testOffset, createVariableGet(readVariable));
VariableDeclaration writeVariable =
createVariable(write, const VoidType());
VariableGet readVariableGet = createVariableGet(readVariable);
@@ -5697,10 +5665,6 @@
DartType readType = readResult.inferredType;
inferrer.flowAnalysis.ifNullExpression_rightBegin(read, readType);
- Member readEqualsMember = inferrer
- .findInterfaceMember(readType, equalsName, node.testOffset)
- .member!;
-
VariableDeclaration? readVariable;
if (!node.forEffect) {
readVariable = createVariable(read, readType);
@@ -5741,7 +5705,7 @@
//
Expression readEqualsNull =
- inferrer.createEqualsNull(node.readOffset, read, readEqualsMember);
+ inferrer.createEqualsNull(node.readOffset, read);
replacement = new ConditionalExpression(readEqualsNull, write,
new NullLiteral()..fileOffset = node.writeOffset, inferredType)
..fileOffset = node.writeOffset;
@@ -5756,8 +5720,8 @@
//
assert(readVariable != null);
- Expression readEqualsNull = inferrer.createEqualsNull(
- receiverVariable.fileOffset, read, readEqualsMember);
+ Expression readEqualsNull =
+ inferrer.createEqualsNull(receiverVariable.fileOffset, read);
VariableGet variableGet = createVariableGet(readVariable!);
if (inferrer.library.isNonNullableByDefault &&
!identical(nonNullableReadType, readType)) {
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
index 80f997c..9e2f6f5 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
@@ -1872,15 +1872,7 @@
}
NullAwareGuard createNullAwareGuard(VariableDeclaration variable) {
- Member? equalsMember =
- findInterfaceMember(variable.type, equalsName, variable.fileOffset)
- .member;
- // Ensure operator == member even for `Never`.
- equalsMember ??= findInterfaceMember(const DynamicType(), equalsName, -1,
- instrumented: false)
- .member!;
- return new NullAwareGuard(
- variable, variable.fileOffset, equalsMember, this);
+ return new NullAwareGuard(variable, variable.fileOffset, this);
}
ExpressionInferenceResult wrapExpressionInferenceResultInProblem(
@@ -3290,6 +3282,25 @@
'checkGetterReturn', new InstrumentationValueForType(functionType));
}
}
+
+ if (isExpressionInvocation) {
+ if (isTopLevel) {
+ // Create an expression invocation for reporting the error during
+ // full inference.
+ return new ExpressionInferenceResult(
+ const InvalidType(),
+ new ExpressionInvocation(receiver, arguments)
+ ..fileOffset = fileOffset);
+ } else {
+ Expression error = helper!.buildProblem(
+ templateImplicitCallOfNonMethod.withArguments(
+ receiverType, isNonNullableByDefault),
+ fileOffset,
+ noLength);
+ return new ExpressionInferenceResult(const InvalidType(), error);
+ }
+ }
+
ExpressionInferenceResult invocationResult = inferMethodInvocation(
arguments.fileOffset,
const Link<NullAwareGuard>(),
@@ -3303,15 +3314,6 @@
isImplicitCall: true,
implicitInvocationPropertyName: getter.name);
- if (!isTopLevel && isExpressionInvocation) {
- Expression error = helper!.buildProblem(
- templateImplicitCallOfNonMethod.withArguments(
- receiverType, isNonNullableByDefault),
- fileOffset,
- noLength);
- return new ExpressionInferenceResult(const DynamicType(), error);
- }
-
if (!isTopLevel && target.isNullable) {
// Handles cases like:
// C? c;
@@ -3475,6 +3477,24 @@
}
}
+ if (isExpressionInvocation) {
+ if (isTopLevel) {
+ // Create an expression invocation for reporting the error during
+ // full inference.
+ return new ExpressionInferenceResult(
+ const InvalidType(),
+ new ExpressionInvocation(receiver, arguments)
+ ..fileOffset = fileOffset);
+ } else {
+ Expression error = helper!.buildProblem(
+ templateImplicitCallOfNonMethod.withArguments(
+ receiverType, isNonNullableByDefault),
+ fileOffset,
+ noLength);
+ return new ExpressionInferenceResult(const InvalidType(), error);
+ }
+ }
+
ExpressionInferenceResult invocationResult = inferMethodInvocation(
arguments.fileOffset,
const Link<NullAwareGuard>(),
@@ -3488,15 +3508,6 @@
hoistedExpressions: hoistedExpressions,
implicitInvocationPropertyName: field.name);
- if (!isTopLevel && isExpressionInvocation) {
- Expression error = helper!.buildProblem(
- templateImplicitCallOfNonMethod.withArguments(
- receiverType, isNonNullableByDefault),
- fileOffset,
- noLength);
- return new ExpressionInferenceResult(const DynamicType(), error);
- }
-
if (!isTopLevel && target.isNullable) {
// Handles cases like:
// C? c;
@@ -4471,10 +4482,8 @@
}
/// Creates a `e == null` test for the expression [left] using the
- /// [fileOffset] as file offset for the created nodes and [equalsMember] as
- /// the interface target of the created method invocation.
- Expression createEqualsNull(
- int fileOffset, Expression left, Member equalsMember) {
+ /// [fileOffset] as file offset for the created nodes.
+ Expression createEqualsNull(int fileOffset, Expression left) {
return new EqualsNull(left)..fileOffset = fileOffset;
}
}
@@ -4808,20 +4817,15 @@
/// The file offset used for the null-test.
int _nullAwareFileOffset;
- /// The [Member] used for the == call.
- final Member _nullAwareEquals;
-
final TypeInferrerImpl _inferrer;
- NullAwareGuard(this._nullAwareVariable, this._nullAwareFileOffset,
- this._nullAwareEquals, this._inferrer)
+ NullAwareGuard(
+ this._nullAwareVariable, this._nullAwareFileOffset, this._inferrer)
// ignore: unnecessary_null_comparison
: assert(_nullAwareVariable != null),
// ignore: unnecessary_null_comparison
assert(_nullAwareFileOffset != null),
// ignore: unnecessary_null_comparison
- assert(_nullAwareEquals != null),
- // ignore: unnecessary_null_comparison
assert(_inferrer != null) {
// Ensure the initializer of [_nullAwareVariable] is promoted to
// non-nullable.
@@ -4850,8 +4854,8 @@
_inferrer.flowAnalysis.nullAwareAccess_end();
// End non-nullable promotion of the initializer of [_nullAwareVariable].
_inferrer.flowAnalysis.nullAwareAccess_end();
- Expression equalsNull = _inferrer.createEqualsNull(_nullAwareFileOffset,
- createVariableGet(_nullAwareVariable), _nullAwareEquals);
+ Expression equalsNull = _inferrer.createEqualsNull(
+ _nullAwareFileOffset, createVariableGet(_nullAwareVariable));
ConditionalExpression condition = new ConditionalExpression(
equalsNull,
new NullLiteral()..fileOffset = _nullAwareFileOffset,
@@ -4864,8 +4868,7 @@
@override
String toString() =>
- 'NullAwareGuard($_nullAwareVariable,$_nullAwareFileOffset,'
- '$_nullAwareEquals)';
+ 'NullAwareGuard($_nullAwareVariable,$_nullAwareFileOffset)';
}
/// The result of an expression inference that is guarded with a null aware
diff --git a/pkg/front_end/testcases/extensions/call_methods.dart.weak.expect b/pkg/front_end/testcases/extensions/call_methods.dart.weak.expect
index 9fbb059..d38841f 100644
--- a/pkg/front_end/testcases/extensions/call_methods.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/call_methods.dart.weak.expect
@@ -22,22 +22,12 @@
// var topLevel4 = 1.0("10");
// ^
//
-// pkg/front_end/testcases/extensions/call_methods.dart:34:18: Error: Too many positional arguments: 0 allowed, but 1 found.
-// Try removing the extra positional arguments.
-// var topLevel5 = a(2);
-// ^
-//
// pkg/front_end/testcases/extensions/call_methods.dart:34:18: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
// - 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
// Try changing 'call' to a method or explicitly invoke 'call'.
// var topLevel5 = a(2);
// ^
//
-// pkg/front_end/testcases/extensions/call_methods.dart:36:18: Error: Too many positional arguments: 0 allowed, but 2 found.
-// Try removing the extra positional arguments.
-// var topLevel6 = a(2, "3");
-// ^
-//
// pkg/front_end/testcases/extensions/call_methods.dart:36:18: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
// - 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
// Try changing 'call' to a method or explicitly invoke 'call'.
@@ -64,22 +54,12 @@
// 1.0("10");
// ^
//
-// pkg/front_end/testcases/extensions/call_methods.dart:44:4: Error: Too many positional arguments: 0 allowed, but 1 found.
-// Try removing the extra positional arguments.
-// a(2);
-// ^
-//
// pkg/front_end/testcases/extensions/call_methods.dart:44:4: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
// - 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
// Try changing 'call' to a method or explicitly invoke 'call'.
// a(2);
// ^
//
-// pkg/front_end/testcases/extensions/call_methods.dart:45:4: Error: Too many positional arguments: 0 allowed, but 2 found.
-// Try removing the extra positional arguments.
-// a(2, "3");
-// ^
-//
// pkg/front_end/testcases/extensions/call_methods.dart:45:4: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
// - 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
// Try changing 'call' to a method or explicitly invoke 'call'.
@@ -155,17 +135,17 @@
var topLevel4 = 1.0(\"10\");
^" in self::_extension#2|get#call(self::_extension#1|get#call(1.0)){<inapplicable>}.("10");
static field self::A* a = new self::A::•();
-static field core::String* topLevel5 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:34:18: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
+static field invalid-type topLevel5 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:34:18: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
- 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
Try changing 'call' to a method or explicitly invoke 'call'.
var topLevel5 = a(2);
- ^" as{TypeError,ForDynamic} core::String*;
+ ^";
static field self::B* b = new self::B::•();
-static field core::String* topLevel6 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:36:18: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
+static field invalid-type topLevel6 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:36:18: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
- 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
Try changing 'call' to a method or explicitly invoke 'call'.
var topLevel6 = a(2, \"3\");
- ^" as{TypeError,ForDynamic} core::String*;
+ ^";
static method _extension#0|get#call(lowered final core::int* #this) → core::String*
return "My name is int";
static method _extension#1|get#call(lowered final core::num* #this) → core::String*
diff --git a/pkg/front_end/testcases/extensions/call_methods.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/call_methods.dart.weak.outline.expect
index 173e1a4..1745cce 100644
--- a/pkg/front_end/testcases/extensions/call_methods.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/call_methods.dart.weak.outline.expect
@@ -48,9 +48,9 @@
static field core::String* topLevel3;
static field core::String* topLevel4;
static field self::A* a;
-static field core::String* topLevel5;
+static field invalid-type topLevel5;
static field self::B* b;
-static field core::String* topLevel6;
+static field invalid-type topLevel6;
static method _extension#0|get#call(lowered final core::int* #this) → core::String*
;
static method _extension#1|get#call(lowered final core::num* #this) → core::String*
diff --git a/pkg/front_end/testcases/extensions/call_methods.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/call_methods.dart.weak.transformed.expect
index f07583d..d38841f 100644
--- a/pkg/front_end/testcases/extensions/call_methods.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/call_methods.dart.weak.transformed.expect
@@ -22,22 +22,12 @@
// var topLevel4 = 1.0("10");
// ^
//
-// pkg/front_end/testcases/extensions/call_methods.dart:34:18: Error: Too many positional arguments: 0 allowed, but 1 found.
-// Try removing the extra positional arguments.
-// var topLevel5 = a(2);
-// ^
-//
// pkg/front_end/testcases/extensions/call_methods.dart:34:18: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
// - 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
// Try changing 'call' to a method or explicitly invoke 'call'.
// var topLevel5 = a(2);
// ^
//
-// pkg/front_end/testcases/extensions/call_methods.dart:36:18: Error: Too many positional arguments: 0 allowed, but 2 found.
-// Try removing the extra positional arguments.
-// var topLevel6 = a(2, "3");
-// ^
-//
// pkg/front_end/testcases/extensions/call_methods.dart:36:18: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
// - 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
// Try changing 'call' to a method or explicitly invoke 'call'.
@@ -64,22 +54,12 @@
// 1.0("10");
// ^
//
-// pkg/front_end/testcases/extensions/call_methods.dart:44:4: Error: Too many positional arguments: 0 allowed, but 1 found.
-// Try removing the extra positional arguments.
-// a(2);
-// ^
-//
// pkg/front_end/testcases/extensions/call_methods.dart:44:4: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
// - 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
// Try changing 'call' to a method or explicitly invoke 'call'.
// a(2);
// ^
//
-// pkg/front_end/testcases/extensions/call_methods.dart:45:4: Error: Too many positional arguments: 0 allowed, but 2 found.
-// Try removing the extra positional arguments.
-// a(2, "3");
-// ^
-//
// pkg/front_end/testcases/extensions/call_methods.dart:45:4: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
// - 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
// Try changing 'call' to a method or explicitly invoke 'call'.
@@ -155,13 +135,13 @@
var topLevel4 = 1.0(\"10\");
^" in self::_extension#2|get#call(self::_extension#1|get#call(1.0)){<inapplicable>}.("10");
static field self::A* a = new self::A::•();
-static field core::String* topLevel5 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:34:18: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
+static field invalid-type topLevel5 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:34:18: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
- 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
Try changing 'call' to a method or explicitly invoke 'call'.
var topLevel5 = a(2);
^";
static field self::B* b = new self::B::•();
-static field core::String* topLevel6 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:36:18: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
+static field invalid-type topLevel6 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:36:18: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
- 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
Try changing 'call' to a method or explicitly invoke 'call'.
var topLevel6 = a(2, \"3\");
diff --git a/pkg/front_end/testcases/general/call.dart.weak.expect b/pkg/front_end/testcases/general/call.dart.weak.expect
index c717175..f9559169 100644
--- a/pkg/front_end/testcases/general/call.dart.weak.expect
+++ b/pkg/front_end/testcases/general/call.dart.weak.expect
@@ -139,7 +139,7 @@
static field dynamic string3 = self::callable.{self::Callable::call}{(dynamic) →* dynamic}(1){(dynamic) →* dynamic};
static field dynamic string4 = self::callable.{self::Callable::call}{(dynamic) →* dynamic}.call(1){(dynamic) →* dynamic};
static field self::CallableGetter* callableGetter = new self::CallableGetter::•();
-static field dynamic string5 = invalid-expression "pkg/front_end/testcases/general/call.dart:63:29: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
+static field invalid-type string5 = invalid-expression "pkg/front_end/testcases/general/call.dart:63:29: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
- 'CallableGetter' is from 'pkg/front_end/testcases/general/call.dart'.
Try changing 'call' to a method or explicitly invoke 'call'.
var string5 = callableGetter(1);
@@ -171,7 +171,7 @@
static field dynamic nothing8 = invalid-expression "pkg/front_end/testcases/general/call.dart:76:39: Error: Too few positional arguments: 1 required, 0 given.
var nothing8 = callable.call.call.call();
^" in self::callable.{self::Callable::call}{(dynamic) →* dynamic}.call{<inapplicable>}.();
-static field dynamic nothing9 = invalid-expression "pkg/front_end/testcases/general/call.dart:78:30: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
+static field invalid-type nothing9 = invalid-expression "pkg/front_end/testcases/general/call.dart:78:30: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
- 'CallableGetter' is from 'pkg/front_end/testcases/general/call.dart'.
Try changing 'call' to a method or explicitly invoke 'call'.
var nothing9 = callableGetter();
@@ -191,7 +191,7 @@
dynamic string3 = callable.{self::Callable::call}{(dynamic) →* dynamic}(1){(dynamic) →* dynamic};
dynamic string4 = callable.{self::Callable::call}{(dynamic) →* dynamic}.call(1){(dynamic) →* dynamic};
self::CallableGetter* callableGetter = new self::CallableGetter::•();
- dynamic string5 = invalid-expression "pkg/front_end/testcases/general/call.dart:29:31: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
+ invalid-type string5 = invalid-expression "pkg/front_end/testcases/general/call.dart:29:31: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
- 'CallableGetter' is from 'pkg/front_end/testcases/general/call.dart'.
Try changing 'call' to a method or explicitly invoke 'call'.
var string5 = callableGetter(1);
@@ -223,7 +223,7 @@
invalid-type nothing8 = invalid-expression "pkg/front_end/testcases/general/call.dart:42:41: Error: Too few positional arguments: 1 required, 0 given.
var nothing8 = callable.call.call.call();
^" in callable.{self::Callable::call}{(dynamic) →* dynamic}.call{<inapplicable>}.();
- dynamic nothing9 = invalid-expression "pkg/front_end/testcases/general/call.dart:44:32: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
+ invalid-type nothing9 = invalid-expression "pkg/front_end/testcases/general/call.dart:44:32: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
- 'CallableGetter' is from 'pkg/front_end/testcases/general/call.dart'.
Try changing 'call' to a method or explicitly invoke 'call'.
var nothing9 = callableGetter();
diff --git a/pkg/front_end/testcases/general/call.dart.weak.outline.expect b/pkg/front_end/testcases/general/call.dart.weak.outline.expect
index 9026e42..9d8c931 100644
--- a/pkg/front_end/testcases/general/call.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/call.dart.weak.outline.expect
@@ -45,7 +45,7 @@
static field dynamic string3;
static field dynamic string4;
static field self::CallableGetter* callableGetter;
-static field dynamic string5;
+static field invalid-type string5;
static field dynamic string6;
static field dynamic string7;
static field dynamic string8;
@@ -57,7 +57,7 @@
static field dynamic nothing6;
static field dynamic nothing7;
static field dynamic nothing8;
-static field dynamic nothing9;
+static field invalid-type nothing9;
static field dynamic nothing10;
static field dynamic nothing11;
static field dynamic nothing12;
diff --git a/pkg/front_end/testcases/general/call.dart.weak.transformed.expect b/pkg/front_end/testcases/general/call.dart.weak.transformed.expect
index 5d9b478..ccac183 100644
--- a/pkg/front_end/testcases/general/call.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/call.dart.weak.transformed.expect
@@ -139,7 +139,7 @@
static field dynamic string3 = self::callable.{self::Callable::call}{(dynamic) →* dynamic}(1){(dynamic) →* dynamic};
static field dynamic string4 = self::callable.{self::Callable::call}{(dynamic) →* dynamic}.call(1){(dynamic) →* dynamic};
static field self::CallableGetter* callableGetter = new self::CallableGetter::•();
-static field dynamic string5 = invalid-expression "pkg/front_end/testcases/general/call.dart:63:29: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
+static field invalid-type string5 = invalid-expression "pkg/front_end/testcases/general/call.dart:63:29: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
- 'CallableGetter' is from 'pkg/front_end/testcases/general/call.dart'.
Try changing 'call' to a method or explicitly invoke 'call'.
var string5 = callableGetter(1);
@@ -171,7 +171,7 @@
static field dynamic nothing8 = invalid-expression "pkg/front_end/testcases/general/call.dart:76:39: Error: Too few positional arguments: 1 required, 0 given.
var nothing8 = callable.call.call.call();
^" in self::callable.{self::Callable::call}{(dynamic) →* dynamic}.call{<inapplicable>}.();
-static field dynamic nothing9 = invalid-expression "pkg/front_end/testcases/general/call.dart:78:30: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
+static field invalid-type nothing9 = invalid-expression "pkg/front_end/testcases/general/call.dart:78:30: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
- 'CallableGetter' is from 'pkg/front_end/testcases/general/call.dart'.
Try changing 'call' to a method or explicitly invoke 'call'.
var nothing9 = callableGetter();
@@ -191,7 +191,7 @@
dynamic string3 = callable.{self::Callable::call}{(dynamic) →* dynamic}(1){(dynamic) →* dynamic};
dynamic string4 = callable.{self::Callable::call}{(dynamic) →* dynamic}.call(1){(dynamic) →* dynamic};
self::CallableGetter* callableGetter = new self::CallableGetter::•();
- dynamic string5 = invalid-expression "pkg/front_end/testcases/general/call.dart:29:31: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
+ invalid-type string5 = invalid-expression "pkg/front_end/testcases/general/call.dart:29:31: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
- 'CallableGetter' is from 'pkg/front_end/testcases/general/call.dart'.
Try changing 'call' to a method or explicitly invoke 'call'.
var string5 = callableGetter(1);
@@ -223,7 +223,7 @@
invalid-type nothing8 = invalid-expression "pkg/front_end/testcases/general/call.dart:42:41: Error: Too few positional arguments: 1 required, 0 given.
var nothing8 = callable.call.call.call();
^" in callable.{self::Callable::call}{(dynamic) →* dynamic}.call{<inapplicable>}.();
- dynamic nothing9 = invalid-expression "pkg/front_end/testcases/general/call.dart:44:32: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
+ invalid-type nothing9 = invalid-expression "pkg/front_end/testcases/general/call.dart:44:32: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
- 'CallableGetter' is from 'pkg/front_end/testcases/general/call.dart'.
Try changing 'call' to a method or explicitly invoke 'call'.
var nothing9 = callableGetter();
diff --git a/pkg/front_end/testcases/general/function_call1.dart b/pkg/front_end/testcases/general/function_call1.dart
new file mode 100644
index 0000000..418da83
--- /dev/null
+++ b/pkg/front_end/testcases/general/function_call1.dart
@@ -0,0 +1,26 @@
+// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class _Closure1 {
+ _Closure1 get call => this;
+}
+
+class _Closure2 {
+ final _Closure2 call;
+
+ _Closure2(this.call);
+}
+
+test(_Closure1 foo, _Closure2 bar) {
+ foo();
+ bar();
+}
+
+late _Closure1 closure1;
+late _Closure2 closure2;
+
+var field1 = closure1();
+var field2 = closure2();
+
+main() {}
diff --git a/pkg/front_end/testcases/general/function_call1.dart.textual_outline.expect b/pkg/front_end/testcases/general/function_call1.dart.textual_outline.expect
new file mode 100644
index 0000000..aa8f3d6
--- /dev/null
+++ b/pkg/front_end/testcases/general/function_call1.dart.textual_outline.expect
@@ -0,0 +1,15 @@
+class _Closure1 {
+ _Closure1 get call => this;
+}
+
+class _Closure2 {
+ final _Closure2 call;
+ _Closure2(this.call);
+}
+
+test(_Closure1 foo, _Closure2 bar) {}
+late _Closure1 closure1;
+late _Closure2 closure2;
+var field1 = closure1();
+var field2 = closure2();
+main() {}
diff --git a/pkg/front_end/testcases/general/function_call1.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/function_call1.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..9249223
--- /dev/null
+++ b/pkg/front_end/testcases/general/function_call1.dart.textual_outline_modelled.expect
@@ -0,0 +1,19 @@
+class _Closure1 {
+ _Closure1 get call => this;
+}
+class _Closure2 {
+ _Closure2(this.call);
+ final _Closure2 call;
+}
+test(_Closure1 foo, _Closure2 bar) {}
+---- unknown chunk starts ----
+late
+---- unknown chunk ends ----
+_Closure1 closure1;
+---- unknown chunk starts ----
+late
+---- unknown chunk ends ----
+_Closure2 closure2;
+main() {}
+var field1 = closure1();
+var field2 = closure2();
diff --git a/pkg/front_end/testcases/general/function_call1.dart.weak.expect b/pkg/front_end/testcases/general/function_call1.dart.weak.expect
new file mode 100644
index 0000000..c5b503d
--- /dev/null
+++ b/pkg/front_end/testcases/general/function_call1.dart.weak.expect
@@ -0,0 +1,69 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/function_call1.dart:16:6: Error: Cannot invoke an instance of '_Closure1' because it declares 'call' to be something other than a method.
+// - '_Closure1' is from 'pkg/front_end/testcases/general/function_call1.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+// foo();
+// ^
+//
+// pkg/front_end/testcases/general/function_call1.dart:17:6: Error: Cannot invoke an instance of '_Closure2' because it declares 'call' to be something other than a method.
+// - '_Closure2' is from 'pkg/front_end/testcases/general/function_call1.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+// bar();
+// ^
+//
+// pkg/front_end/testcases/general/function_call1.dart:23:22: Error: Cannot invoke an instance of '_Closure1' because it declares 'call' to be something other than a method.
+// - '_Closure1' is from 'pkg/front_end/testcases/general/function_call1.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+// var field1 = closure1();
+// ^
+//
+// pkg/front_end/testcases/general/function_call1.dart:24:22: Error: Cannot invoke an instance of '_Closure2' because it declares 'call' to be something other than a method.
+// - '_Closure2' is from 'pkg/front_end/testcases/general/function_call1.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+// var field2 = closure2();
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+class _Closure1 extends core::Object {
+ synthetic constructor •() → self::_Closure1
+ : super core::Object::•()
+ ;
+ get call() → self::_Closure1
+ return this;
+}
+class _Closure2 extends core::Object {
+ final field self::_Closure2 call;
+ constructor •(self::_Closure2 call) → self::_Closure2
+ : self::_Closure2::call = call, super core::Object::•()
+ ;
+}
+late static field self::_Closure1 closure1;
+late static field self::_Closure2 closure2;
+static field invalid-type field1 = invalid-expression "pkg/front_end/testcases/general/function_call1.dart:23:22: Error: Cannot invoke an instance of '_Closure1' because it declares 'call' to be something other than a method.
+ - '_Closure1' is from 'pkg/front_end/testcases/general/function_call1.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+var field1 = closure1();
+ ^";
+static field invalid-type field2 = invalid-expression "pkg/front_end/testcases/general/function_call1.dart:24:22: Error: Cannot invoke an instance of '_Closure2' because it declares 'call' to be something other than a method.
+ - '_Closure2' is from 'pkg/front_end/testcases/general/function_call1.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+var field2 = closure2();
+ ^";
+static method test(self::_Closure1 foo, self::_Closure2 bar) → dynamic {
+ invalid-expression "pkg/front_end/testcases/general/function_call1.dart:16:6: Error: Cannot invoke an instance of '_Closure1' because it declares 'call' to be something other than a method.
+ - '_Closure1' is from 'pkg/front_end/testcases/general/function_call1.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+ foo();
+ ^";
+ invalid-expression "pkg/front_end/testcases/general/function_call1.dart:17:6: Error: Cannot invoke an instance of '_Closure2' because it declares 'call' to be something other than a method.
+ - '_Closure2' is from 'pkg/front_end/testcases/general/function_call1.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+ bar();
+ ^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/function_call1.dart.weak.outline.expect b/pkg/front_end/testcases/general/function_call1.dart.weak.outline.expect
new file mode 100644
index 0000000..8c62285
--- /dev/null
+++ b/pkg/front_end/testcases/general/function_call1.dart.weak.outline.expect
@@ -0,0 +1,23 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class _Closure1 extends core::Object {
+ synthetic constructor •() → self::_Closure1
+ ;
+ get call() → self::_Closure1
+ ;
+}
+class _Closure2 extends core::Object {
+ final field self::_Closure2 call;
+ constructor •(self::_Closure2 call) → self::_Closure2
+ ;
+}
+late static field self::_Closure1 closure1;
+late static field self::_Closure2 closure2;
+static field invalid-type field1;
+static field invalid-type field2;
+static method test(self::_Closure1 foo, self::_Closure2 bar) → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/general/function_call1.dart.weak.transformed.expect b/pkg/front_end/testcases/general/function_call1.dart.weak.transformed.expect
new file mode 100644
index 0000000..c5b503d
--- /dev/null
+++ b/pkg/front_end/testcases/general/function_call1.dart.weak.transformed.expect
@@ -0,0 +1,69 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/function_call1.dart:16:6: Error: Cannot invoke an instance of '_Closure1' because it declares 'call' to be something other than a method.
+// - '_Closure1' is from 'pkg/front_end/testcases/general/function_call1.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+// foo();
+// ^
+//
+// pkg/front_end/testcases/general/function_call1.dart:17:6: Error: Cannot invoke an instance of '_Closure2' because it declares 'call' to be something other than a method.
+// - '_Closure2' is from 'pkg/front_end/testcases/general/function_call1.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+// bar();
+// ^
+//
+// pkg/front_end/testcases/general/function_call1.dart:23:22: Error: Cannot invoke an instance of '_Closure1' because it declares 'call' to be something other than a method.
+// - '_Closure1' is from 'pkg/front_end/testcases/general/function_call1.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+// var field1 = closure1();
+// ^
+//
+// pkg/front_end/testcases/general/function_call1.dart:24:22: Error: Cannot invoke an instance of '_Closure2' because it declares 'call' to be something other than a method.
+// - '_Closure2' is from 'pkg/front_end/testcases/general/function_call1.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+// var field2 = closure2();
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+class _Closure1 extends core::Object {
+ synthetic constructor •() → self::_Closure1
+ : super core::Object::•()
+ ;
+ get call() → self::_Closure1
+ return this;
+}
+class _Closure2 extends core::Object {
+ final field self::_Closure2 call;
+ constructor •(self::_Closure2 call) → self::_Closure2
+ : self::_Closure2::call = call, super core::Object::•()
+ ;
+}
+late static field self::_Closure1 closure1;
+late static field self::_Closure2 closure2;
+static field invalid-type field1 = invalid-expression "pkg/front_end/testcases/general/function_call1.dart:23:22: Error: Cannot invoke an instance of '_Closure1' because it declares 'call' to be something other than a method.
+ - '_Closure1' is from 'pkg/front_end/testcases/general/function_call1.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+var field1 = closure1();
+ ^";
+static field invalid-type field2 = invalid-expression "pkg/front_end/testcases/general/function_call1.dart:24:22: Error: Cannot invoke an instance of '_Closure2' because it declares 'call' to be something other than a method.
+ - '_Closure2' is from 'pkg/front_end/testcases/general/function_call1.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+var field2 = closure2();
+ ^";
+static method test(self::_Closure1 foo, self::_Closure2 bar) → dynamic {
+ invalid-expression "pkg/front_end/testcases/general/function_call1.dart:16:6: Error: Cannot invoke an instance of '_Closure1' because it declares 'call' to be something other than a method.
+ - '_Closure1' is from 'pkg/front_end/testcases/general/function_call1.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+ foo();
+ ^";
+ invalid-expression "pkg/front_end/testcases/general/function_call1.dart:17:6: Error: Cannot invoke an instance of '_Closure2' because it declares 'call' to be something other than a method.
+ - '_Closure2' is from 'pkg/front_end/testcases/general/function_call1.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+ bar();
+ ^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/function_call2.dart b/pkg/front_end/testcases/general/function_call2.dart
new file mode 100644
index 0000000..06322b9
--- /dev/null
+++ b/pkg/front_end/testcases/general/function_call2.dart
@@ -0,0 +1,26 @@
+// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class _Closure1 {
+ void Function() get call => () {};
+}
+
+class _Closure2 {
+ final void Function() call;
+
+ _Closure2(this.call);
+}
+
+test(_Closure1 foo, _Closure2 bar) {
+ foo();
+ bar();
+}
+
+late _Closure1 closure1;
+late _Closure2 closure2;
+
+var field1 = closure1();
+var field2 = closure2();
+
+main() {}
diff --git a/pkg/front_end/testcases/general/function_call2.dart.textual_outline.expect b/pkg/front_end/testcases/general/function_call2.dart.textual_outline.expect
new file mode 100644
index 0000000..183ffbe
--- /dev/null
+++ b/pkg/front_end/testcases/general/function_call2.dart.textual_outline.expect
@@ -0,0 +1,15 @@
+class _Closure1 {
+ void Function() get call => () {};
+}
+
+class _Closure2 {
+ final void Function() call;
+ _Closure2(this.call);
+}
+
+test(_Closure1 foo, _Closure2 bar) {}
+late _Closure1 closure1;
+late _Closure2 closure2;
+var field1 = closure1();
+var field2 = closure2();
+main() {}
diff --git a/pkg/front_end/testcases/general/function_call2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/function_call2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..eab5305
--- /dev/null
+++ b/pkg/front_end/testcases/general/function_call2.dart.textual_outline_modelled.expect
@@ -0,0 +1,19 @@
+class _Closure1 {
+ void Function() get call => () {};
+}
+class _Closure2 {
+ _Closure2(this.call);
+ final void Function() call;
+}
+test(_Closure1 foo, _Closure2 bar) {}
+---- unknown chunk starts ----
+late
+---- unknown chunk ends ----
+_Closure1 closure1;
+---- unknown chunk starts ----
+late
+---- unknown chunk ends ----
+_Closure2 closure2;
+main() {}
+var field1 = closure1();
+var field2 = closure2();
diff --git a/pkg/front_end/testcases/general/function_call2.dart.weak.expect b/pkg/front_end/testcases/general/function_call2.dart.weak.expect
new file mode 100644
index 0000000..c0f6881
--- /dev/null
+++ b/pkg/front_end/testcases/general/function_call2.dart.weak.expect
@@ -0,0 +1,69 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/function_call2.dart:16:6: Error: Cannot invoke an instance of '_Closure1' because it declares 'call' to be something other than a method.
+// - '_Closure1' is from 'pkg/front_end/testcases/general/function_call2.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+// foo();
+// ^
+//
+// pkg/front_end/testcases/general/function_call2.dart:17:6: Error: Cannot invoke an instance of '_Closure2' because it declares 'call' to be something other than a method.
+// - '_Closure2' is from 'pkg/front_end/testcases/general/function_call2.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+// bar();
+// ^
+//
+// pkg/front_end/testcases/general/function_call2.dart:23:22: Error: Cannot invoke an instance of '_Closure1' because it declares 'call' to be something other than a method.
+// - '_Closure1' is from 'pkg/front_end/testcases/general/function_call2.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+// var field1 = closure1();
+// ^
+//
+// pkg/front_end/testcases/general/function_call2.dart:24:22: Error: Cannot invoke an instance of '_Closure2' because it declares 'call' to be something other than a method.
+// - '_Closure2' is from 'pkg/front_end/testcases/general/function_call2.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+// var field2 = closure2();
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+class _Closure1 extends core::Object {
+ synthetic constructor •() → self::_Closure1
+ : super core::Object::•()
+ ;
+ get call() → () → void
+ return () → void {};
+}
+class _Closure2 extends core::Object {
+ final field () → void call;
+ constructor •(() → void call) → self::_Closure2
+ : self::_Closure2::call = call, super core::Object::•()
+ ;
+}
+late static field self::_Closure1 closure1;
+late static field self::_Closure2 closure2;
+static field invalid-type field1 = invalid-expression "pkg/front_end/testcases/general/function_call2.dart:23:22: Error: Cannot invoke an instance of '_Closure1' because it declares 'call' to be something other than a method.
+ - '_Closure1' is from 'pkg/front_end/testcases/general/function_call2.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+var field1 = closure1();
+ ^";
+static field invalid-type field2 = invalid-expression "pkg/front_end/testcases/general/function_call2.dart:24:22: Error: Cannot invoke an instance of '_Closure2' because it declares 'call' to be something other than a method.
+ - '_Closure2' is from 'pkg/front_end/testcases/general/function_call2.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+var field2 = closure2();
+ ^";
+static method test(self::_Closure1 foo, self::_Closure2 bar) → dynamic {
+ invalid-expression "pkg/front_end/testcases/general/function_call2.dart:16:6: Error: Cannot invoke an instance of '_Closure1' because it declares 'call' to be something other than a method.
+ - '_Closure1' is from 'pkg/front_end/testcases/general/function_call2.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+ foo();
+ ^";
+ invalid-expression "pkg/front_end/testcases/general/function_call2.dart:17:6: Error: Cannot invoke an instance of '_Closure2' because it declares 'call' to be something other than a method.
+ - '_Closure2' is from 'pkg/front_end/testcases/general/function_call2.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+ bar();
+ ^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/function_call2.dart.weak.outline.expect b/pkg/front_end/testcases/general/function_call2.dart.weak.outline.expect
new file mode 100644
index 0000000..704879e
--- /dev/null
+++ b/pkg/front_end/testcases/general/function_call2.dart.weak.outline.expect
@@ -0,0 +1,23 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class _Closure1 extends core::Object {
+ synthetic constructor •() → self::_Closure1
+ ;
+ get call() → () → void
+ ;
+}
+class _Closure2 extends core::Object {
+ final field () → void call;
+ constructor •(() → void call) → self::_Closure2
+ ;
+}
+late static field self::_Closure1 closure1;
+late static field self::_Closure2 closure2;
+static field invalid-type field1;
+static field invalid-type field2;
+static method test(self::_Closure1 foo, self::_Closure2 bar) → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/general/function_call2.dart.weak.transformed.expect b/pkg/front_end/testcases/general/function_call2.dart.weak.transformed.expect
new file mode 100644
index 0000000..c0f6881
--- /dev/null
+++ b/pkg/front_end/testcases/general/function_call2.dart.weak.transformed.expect
@@ -0,0 +1,69 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/function_call2.dart:16:6: Error: Cannot invoke an instance of '_Closure1' because it declares 'call' to be something other than a method.
+// - '_Closure1' is from 'pkg/front_end/testcases/general/function_call2.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+// foo();
+// ^
+//
+// pkg/front_end/testcases/general/function_call2.dart:17:6: Error: Cannot invoke an instance of '_Closure2' because it declares 'call' to be something other than a method.
+// - '_Closure2' is from 'pkg/front_end/testcases/general/function_call2.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+// bar();
+// ^
+//
+// pkg/front_end/testcases/general/function_call2.dart:23:22: Error: Cannot invoke an instance of '_Closure1' because it declares 'call' to be something other than a method.
+// - '_Closure1' is from 'pkg/front_end/testcases/general/function_call2.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+// var field1 = closure1();
+// ^
+//
+// pkg/front_end/testcases/general/function_call2.dart:24:22: Error: Cannot invoke an instance of '_Closure2' because it declares 'call' to be something other than a method.
+// - '_Closure2' is from 'pkg/front_end/testcases/general/function_call2.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+// var field2 = closure2();
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+class _Closure1 extends core::Object {
+ synthetic constructor •() → self::_Closure1
+ : super core::Object::•()
+ ;
+ get call() → () → void
+ return () → void {};
+}
+class _Closure2 extends core::Object {
+ final field () → void call;
+ constructor •(() → void call) → self::_Closure2
+ : self::_Closure2::call = call, super core::Object::•()
+ ;
+}
+late static field self::_Closure1 closure1;
+late static field self::_Closure2 closure2;
+static field invalid-type field1 = invalid-expression "pkg/front_end/testcases/general/function_call2.dart:23:22: Error: Cannot invoke an instance of '_Closure1' because it declares 'call' to be something other than a method.
+ - '_Closure1' is from 'pkg/front_end/testcases/general/function_call2.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+var field1 = closure1();
+ ^";
+static field invalid-type field2 = invalid-expression "pkg/front_end/testcases/general/function_call2.dart:24:22: Error: Cannot invoke an instance of '_Closure2' because it declares 'call' to be something other than a method.
+ - '_Closure2' is from 'pkg/front_end/testcases/general/function_call2.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+var field2 = closure2();
+ ^";
+static method test(self::_Closure1 foo, self::_Closure2 bar) → dynamic {
+ invalid-expression "pkg/front_end/testcases/general/function_call2.dart:16:6: Error: Cannot invoke an instance of '_Closure1' because it declares 'call' to be something other than a method.
+ - '_Closure1' is from 'pkg/front_end/testcases/general/function_call2.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+ foo();
+ ^";
+ invalid-expression "pkg/front_end/testcases/general/function_call2.dart:17:6: Error: Cannot invoke an instance of '_Closure2' because it declares 'call' to be something other than a method.
+ - '_Closure2' is from 'pkg/front_end/testcases/general/function_call2.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+ bar();
+ ^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/function_in_field.dart b/pkg/front_end/testcases/general/function_in_field.dart
index 8234ef2..ccfa71b 100644
--- a/pkg/front_end/testcases/general/function_in_field.dart
+++ b/pkg/front_end/testcases/general/function_in_field.dart
@@ -1,7 +1,9 @@
// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+
// @dart=2.9
+
var x = () {
var y = 42;
return y;
diff --git a/pkg/front_end/testcases/general/issue47223a.dart b/pkg/front_end/testcases/general/issue47223a.dart
new file mode 100644
index 0000000..2191ad1
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47223a.dart
@@ -0,0 +1,9 @@
+// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+void test() {
+ (throw "some value") ?? "some other value";
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/issue47223a.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue47223a.dart.textual_outline.expect
new file mode 100644
index 0000000..31c91a2
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47223a.dart.textual_outline.expect
@@ -0,0 +1,2 @@
+void test() {}
+main() {}
diff --git a/pkg/front_end/testcases/general/issue47223a.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue47223a.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..4742c78
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47223a.dart.textual_outline_modelled.expect
@@ -0,0 +1,2 @@
+main() {}
+void test() {}
diff --git a/pkg/front_end/testcases/general/issue47223a.dart.weak.expect b/pkg/front_end/testcases/general/issue47223a.dart.weak.expect
new file mode 100644
index 0000000..1640c03
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47223a.dart.weak.expect
@@ -0,0 +1,15 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue47223a.dart:6:4: Warning: Operand of null-aware operation '??' has type 'Never' which excludes null.
+// (throw "some value") ?? "some other value";
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method test() → void {
+ let final Never #t1 = throw "some value" in #t1 == null ?{core::String} "some other value" : #t1;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue47223a.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue47223a.dart.weak.outline.expect
new file mode 100644
index 0000000..d7d3d2f
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47223a.dart.weak.outline.expect
@@ -0,0 +1,7 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+
+static method test() → void
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/general/issue47223a.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue47223a.dart.weak.transformed.expect
new file mode 100644
index 0000000..1640c03
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47223a.dart.weak.transformed.expect
@@ -0,0 +1,15 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue47223a.dart:6:4: Warning: Operand of null-aware operation '??' has type 'Never' which excludes null.
+// (throw "some value") ?? "some other value";
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method test() → void {
+ let final Never #t1 = throw "some value" in #t1 == null ?{core::String} "some other value" : #t1;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue47223b.dart b/pkg/front_end/testcases/general/issue47223b.dart
new file mode 100644
index 0000000..8528113
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47223b.dart
@@ -0,0 +1,9 @@
+// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+void test() {
+ (throw "some value").foo ??= "foo";
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/issue47223b.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue47223b.dart.textual_outline.expect
new file mode 100644
index 0000000..31c91a2
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47223b.dart.textual_outline.expect
@@ -0,0 +1,2 @@
+void test() {}
+main() {}
diff --git a/pkg/front_end/testcases/general/issue47223b.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue47223b.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..4742c78
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47223b.dart.textual_outline_modelled.expect
@@ -0,0 +1,2 @@
+main() {}
+void test() {}
diff --git a/pkg/front_end/testcases/general/issue47223b.dart.weak.expect b/pkg/front_end/testcases/general/issue47223b.dart.weak.expect
new file mode 100644
index 0000000..13e925e
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47223b.dart.weak.expect
@@ -0,0 +1,15 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue47223b.dart:6:24: Warning: Operand of null-aware operation '??=' has type 'Never' which excludes null.
+// (throw "some value").foo ??= "foo";
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method test() → void {
+ let final Never #t1 = throw "some value" in #t1{Never}.foo == null ?{core::String} #t1{Never}.foo = "foo" : null;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue47223b.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue47223b.dart.weak.outline.expect
new file mode 100644
index 0000000..d7d3d2f
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47223b.dart.weak.outline.expect
@@ -0,0 +1,7 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+
+static method test() → void
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/general/issue47223b.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue47223b.dart.weak.transformed.expect
new file mode 100644
index 0000000..13e925e
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47223b.dart.weak.transformed.expect
@@ -0,0 +1,15 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue47223b.dart:6:24: Warning: Operand of null-aware operation '??=' has type 'Never' which excludes null.
+// (throw "some value").foo ??= "foo";
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method test() → void {
+ let final Never #t1 = throw "some value" in #t1{Never}.foo == null ?{core::String} #t1{Never}.foo = "foo" : null;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/bug30624.dart b/pkg/front_end/testcases/inference/bug30624.dart
index c074277..341d1e5 100644
--- a/pkg/front_end/testcases/inference/bug30624.dart
+++ b/pkg/front_end/testcases/inference/bug30624.dart
@@ -9,21 +9,21 @@
class C<E> {
void barA([int cmp(E a, E b)]) {
- /*@ typeArgs=C::E* */ foo(this, cmp /*@target=Object.==*/ ?? _default);
+ /*@ typeArgs=C::E* */ foo(this, cmp ?? _default);
}
void barB([int cmp(E a, E b)]) {
/*@ typeArgs=C::E* */ foo(
- this, cmp /*@target=Object.==*/ ?? (_default as int Function(E, E)));
+ this, cmp ?? (_default as int Function(E, E)));
}
void barC([int cmp(E a, E b)]) {
int Function(E, E) v = _default;
- /*@ typeArgs=C::E* */ foo(this, cmp /*@target=Object.==*/ ?? v);
+ /*@ typeArgs=C::E* */ foo(this, cmp ?? v);
}
void barD([int cmp(E a, E b)]) {
- foo<E>(this, cmp /*@target=Object.==*/ ?? _default);
+ foo<E>(this, cmp ?? _default);
}
void barE([int cmp(E a, E b)]) {
diff --git a/pkg/front_end/testcases/inference/bug32291.dart b/pkg/front_end/testcases/inference/bug32291.dart
index c71cdb6..782a12c 100644
--- a/pkg/front_end/testcases/inference/bug32291.dart
+++ b/pkg/front_end/testcases/inference/bug32291.dart
@@ -12,7 +12,7 @@
var /*@ type=Iterable<List<String*>*>* */ i1 =
l. /*@target=Iterable.map*/ /*@ typeArgs=List<String*>* */ map(
/*@ returnType=List<String*>* */ (/*@ type=List<String*>* */ ll) =>
- ll /*@target=List.==*/ ?? /*@ typeArgs=String* */ []);
+ ll ?? /*@ typeArgs=String* */ []);
var /*@ type=Iterable<int*>* */ i2 =
i1. /*@target=Iterable.map*/ /*@ typeArgs=int* */ map(
/*@ returnType=int* */ (List<String> l) =>
diff --git a/pkg/front_end/testcases/inference/future_then_ifNull.dart b/pkg/front_end/testcases/inference/future_then_ifNull.dart
index e3927d5..5b67f07 100644
--- a/pkg/front_end/testcases/inference/future_then_ifNull.dart
+++ b/pkg/front_end/testcases/inference/future_then_ifNull.dart
@@ -18,20 +18,18 @@
MyFuture<int> f;
Future<int> t1 = f. /*@ typeArgs=int* */ /*@target=MyFuture.then*/ then(
/*@ returnType=Future<int*>* */ (/*@ type=int* */ x) async =>
- x /*@target=num.==*/ ?? await new Future<int>.value(3));
+ x ?? await new Future<int>.value(3));
Future<int> t2 = f. /*@ typeArgs=int* */ /*@target=MyFuture.then*/ then(
/*@returnType=FutureOr<int*>**/ (/*@ type=int* */ x) async {
- return /*info:DOWN_CAST_COMPOSITE*/ await x /*@target=num.==*/ ??
- new Future<int>.value(3);
+ return /*info:DOWN_CAST_COMPOSITE*/ await x ?? new Future<int>.value(3);
});
Future<int> t5 = f. /*@ typeArgs=int* */ /*@target=MyFuture.then*/ then(
/*error:INVALID_CAST_FUNCTION_EXPR*/
/*@ returnType=FutureOr<int*>* */ (/*@ type=int* */ x) =>
- x /*@target=num.==*/ ?? new Future<int>.value(3));
+ x ?? new Future<int>.value(3));
Future<int> t6 = f. /*@ typeArgs=int* */ /*@target=MyFuture.then*/ then(
/*@ returnType=FutureOr<int*>* */ (/*@ type=int* */ x) {
- return /*info:DOWN_CAST_COMPOSITE*/ x /*@target=num.==*/ ??
- new Future<int>.value(3);
+ return /*info:DOWN_CAST_COMPOSITE*/ x ?? new Future<int>.value(3);
});
}
diff --git a/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart b/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart
index bcc3b3f..ea24047 100644
--- a/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart
+++ b/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart
@@ -7,8 +7,7 @@
abstract class C<E> {
void sort([int compare(E a, E b)]) {
- /*@ typeArgs=C::E* */ sort2(
- this, compare /*@target=Object.==*/ ?? _compareAny);
+ /*@ typeArgs=C::E* */ sort2(this, compare ?? _compareAny);
}
static int _compareAny(a, b) {
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart
index 51b65c1..c8f9c85 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart
+++ b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart
@@ -25,7 +25,7 @@
/*@target=Test.member*/ member = /*@ typeArgs=B* */ f();
/*@target=Test.member*/ /*@target=Test.member*/ member
- /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+ ??= /*@ typeArgs=B* */ f();
/*@target=Test.member*/ /*@target=Test.member*/ member
/*@target=B.+*/ += /*@ typeArgs=C* */ f();
@@ -46,7 +46,7 @@
/*@ typeArgs=B* */ f();
var /*@ type=B* */ v2 = /*@target=Test.member*/ /*@target=Test.member*/
- member /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+ member ??= /*@ typeArgs=B* */ f();
var /*@ type=A* */ v3 = /*@target=Test.member*/ /*@target=Test.member*/
member /*@target=B.+*/ +=
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards.dart b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards.dart
index 9de089d..7892af4 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards.dart
+++ b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards.dart
@@ -16,7 +16,7 @@
var /*@ type=int* */ v1 = /*@target=Test1.t*/ t = getInt();
var /*@ type=int* */ v4 = /*@target=Test1.t*/ /*@target=Test1.t*/ t
- /*@target=num.==*/ ??= getInt();
+ ??= getInt();
var /*@ type=int* */ v7 = /*@target=Test1.t*/ /*@target=Test1.t*/ t
/*@target=num.+*/ += getInt();
@@ -41,13 +41,13 @@
var /*@ type=double* */ v3 = /*@target=Test2.t*/ t = getDouble();
var /*@ type=num* */ v4 = /*@target=Test2.t*/ /*@target=Test2.t*/ t
- /*@target=num.==*/ ??= getInt();
+ ??= getInt();
var /*@ type=num* */ v5 = /*@target=Test2.t*/ /*@target=Test2.t*/ t
- /*@target=num.==*/ ??= getNum();
+ ??= getNum();
var /*@ type=num* */ v6 = /*@target=Test2.t*/ /*@target=Test2.t*/ t
- /*@target=num.==*/ ??= getDouble();
+ ??= getDouble();
var /*@ type=num* */ v7 = /*@target=Test2.t*/ /*@target=Test2.t*/ t
/*@target=num.+*/ += getInt();
@@ -74,7 +74,7 @@
var /*@ type=double* */ v3 = /*@target=Test3.t*/ t = getDouble();
var /*@ type=double* */ v6 = /*@target=Test3.t*/ /*@target=Test3.t*/ t
- /*@target=num.==*/ ??= getDouble();
+ ??= getDouble();
var /*@ type=double* */ v7 = /*@target=Test3.t*/ /*@target=Test3.t*/ t
/*@target=double.+*/ += getInt();
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart b/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart
index b1840b1..f72d8ca 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart
@@ -31,7 +31,7 @@
/*@ typeArgs=Index* */ f()] = /*@ typeArgs=B* */ f();
t /*@target=Test.[]*/ /*@target=Test.[]=*/ [/*@ typeArgs=Index* */ f()]
- /*@target=A.==*/
+
??= /*@ typeArgs=B* */ f();
t /*@target=Test.[]*/ /*@target=Test.[]=*/ [/*@ typeArgs=Index* */ f()]
@@ -56,7 +56,7 @@
var /*@ type=B* */ v2 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ [
/*@ typeArgs=Index* */ f()]
- /*@target=A.==*/
+
??= /*@ typeArgs=B* */ f();
var /*@ type=B* */ v4 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ [
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart b/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart
index 4685ee6..f9e36a6 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart
@@ -31,7 +31,7 @@
/*@ typeArgs=Index* */ f()] = /*@ typeArgs=B* */ f();
super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
- /*@ typeArgs=Index* */ f()] /*@target=A.==*/
+ /*@ typeArgs=Index* */ f()]
??= /*@ typeArgs=B* */ f();
super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
@@ -56,7 +56,7 @@
/*@ typeArgs=Index* */ f()] = /*@ typeArgs=B* */ f();
var /*@ type=B* */ v2 = super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
- /*@ typeArgs=Index* */ f()] /*@target=A.==*/
+ /*@ typeArgs=Index* */ f()]
??= /*@ typeArgs=B* */ f();
var /*@ type=A* */ v3 = super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart b/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart
index 469bb25..d42816b 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart
@@ -29,7 +29,7 @@
/*@ typeArgs=Index* */ f()] = /*@ typeArgs=B* */ f();
this /*@target=Test.[]*/ /*@target=Test.[]=*/ [
- /*@ typeArgs=Index* */ f()] /*@target=A.==*/
+ /*@ typeArgs=Index* */ f()]
??= /*@ typeArgs=B* */ f();
this /*@target=Test.[]*/ /*@target=Test.[]=*/ [
@@ -54,7 +54,7 @@
/*@ typeArgs=Index* */ f()] = /*@ typeArgs=B* */ f();
var /*@ type=B* */ v2 = this /*@target=Test.[]*/ /*@target=Test.[]=*/ [
- /*@ typeArgs=Index* */ f()] /*@target=A.==*/
+ /*@ typeArgs=Index* */ f()]
??= /*@ typeArgs=B* */ f();
var /*@ type=A* */ v4 = this /*@target=Test.[]*/ /*@target=Test.[]=*/ [
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_local.dart b/pkg/front_end/testcases/inference/infer_assign_to_local.dart
index 8123404..56ebaa0 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_local.dart
+++ b/pkg/front_end/testcases/inference/infer_assign_to_local.dart
@@ -22,7 +22,7 @@
B local;
local = /*@ typeArgs=B* */ f();
- local /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+ local ??= /*@ typeArgs=B* */ f();
local /*@target=B.+*/ += /*@ typeArgs=C* */ f();
@@ -37,7 +37,7 @@
var /*@ type=B* */ v1 = local = /*@ typeArgs=B* */ f();
var /*@ type=B* */ v2 =
- local /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+ local ??= /*@ typeArgs=B* */ f();
var /*@ type=A* */ v3 = local /*@target=B.+*/ += /*@ typeArgs=C* */ f();
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart b/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart
index 8dc2a3e..282340c 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart
+++ b/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart
@@ -12,7 +12,7 @@
void test1(int t) {
var /*@ type=int* */ v1 = t = getInt();
- var /*@ type=int* */ v4 = t /*@target=num.==*/ ??= getInt();
+ var /*@ type=int* */ v4 = t ??= getInt();
var /*@ type=int* */ v7 = t /*@target=num.+*/ += getInt();
@@ -29,11 +29,11 @@
var /*@ type=double* */ v3 = t = getDouble();
- var /*@ type=num* */ v4 = t /*@target=num.==*/ ??= getInt();
+ var /*@ type=num* */ v4 = t ??= getInt();
- var /*@ type=num* */ v5 = t /*@target=num.==*/ ??= getNum();
+ var /*@ type=num* */ v5 = t ??= getNum();
- var /*@ type=num* */ v6 = t /*@target=num.==*/ ??= getDouble();
+ var /*@ type=num* */ v6 = t ??= getDouble();
var /*@ type=num* */ v7 = t /*@target=num.+*/ += getInt();
@@ -50,7 +50,7 @@
void test3(double t) {
var /*@ type=double* */ v3 = t = getDouble();
- var /*@ type=double* */ v6 = t /*@target=num.==*/ ??= getDouble();
+ var /*@ type=double* */ v6 = t ??= getDouble();
var /*@ type=double* */ v7 = t /*@target=double.+*/ += getInt();
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart b/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart
index c112d9c..24d478e 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart
@@ -24,7 +24,7 @@
static void test(Test t) {
t. /*@target=Test.member*/ member = /*@ typeArgs=B* */ f();
/*@ type=Test* */ /*@target=Test.member*/ t. /*@target=Test.member*/ member
- /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+ ??= /*@ typeArgs=B* */ f();
/*@ type=Test* */ t. /*@target=Test.member*/ /*@target=Test.member*/ member
/*@target=B.+*/ += /*@ typeArgs=C* */ f();
/*@ type=Test* */ t. /*@target=Test.member*/ /*@target=Test.member*/ member
@@ -40,7 +40,7 @@
var /*@ type=B* */ v2 =
/*@ type=Test* */ /*@target=Test.member*/ t
. /*@target=Test.member*/ member
- /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+ ??= /*@ typeArgs=B* */ f();
var /*@ type=A* */ v3 =
/*@ type=Test* */ t
. /*@target=Test.member*/ /*@target=Test.member*/ member
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart
index a41c144..f810644 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart
@@ -22,62 +22,62 @@
B member;
static void test(Test t) {
- /*@ type=Test* */ /*@target=Test.==*/ t?. /*@target=Test.member*/
+ /*@ type=Test* */ t?. /*@target=Test.member*/
member = /*@ typeArgs=B* */ f();
- /*@target=Test.==*/ t
+ t
?. /*@target=Test.member*/ /*@target=Test.member*/ member
- /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+ ??= /*@ typeArgs=B* */ f();
- /*@target=Test.==*/ t
+ t
?. /*@target=Test.member*/ /*@target=Test.member*/ member
/*@target=B.+*/ += /*@ typeArgs=C* */ f();
- /*@target=Test.==*/ t
+ t
?. /*@target=Test.member*/ /*@target=Test.member*/ member
/*@target=B.**/ *= /*@ typeArgs=B* */ f();
- /*@target=Test.==*/ t
+ t
?. /*@target=Test.member*/ /*@target=Test.member*/ member
/*@target=B.&*/ &= /*@ typeArgs=A* */ f();
- /*@target=B.-*/ -- /*@target=Test.==*/ t
+ /*@target=B.-*/ -- t
?. /*@target=Test.member*/ /*@target=Test.member*/ member;
- /*@target=Test.==*/ t
+ t
?. /*@target=Test.member*/ /*@target=Test.member*/ member
/*@target=B.-*/ --;
var /*@ type=B* */ v1 =
- /*@ type=Test* */ /*@target=Test.==*/ t?. /*@target=Test.member*/
+ /*@ type=Test* */ t?. /*@target=Test.member*/
member = /*@ typeArgs=B* */ f();
var /*@ type=B* */ v2 =
- /*@target=Test.==*/ t
+ t
?. /*@target=Test.member*/ /*@target=Test.member*/ member
- /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+ ??= /*@ typeArgs=B* */ f();
var /*@ type=A* */ v3 =
- /*@target=Test.==*/ t
+ t
?. /*@target=Test.member*/ /*@target=Test.member*/ member
/*@target=B.+*/ += /*@ typeArgs=C* */ f();
var /*@ type=B* */ v4 =
- /*@target=Test.==*/ t
+ t
?. /*@target=Test.member*/ /*@target=Test.member*/ member
/*@target=B.**/ *= /*@ typeArgs=B* */ f();
var /*@ type=C* */ v5 =
- /*@target=Test.==*/ t
+ t
?. /*@target=Test.member*/ /*@target=Test.member*/ member
/*@target=B.&*/ &= /*@ typeArgs=A* */ f();
var /*@ type=B* */ v6 =
- /*@target=B.-*/ -- /*@target=Test.==*/ t
+ /*@target=B.-*/ -- t
?. /*@target=Test.member*/ /*@target=Test.member*/ member;
var /*@ type=B* */ v7 =
- /*@target=Test.==*/ t
+ t
?. /*@target=Test.member*/ /*@target=Test.member*/ member
/*@target=B.-*/ --;
}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart
index ad284c2..82e2b7c 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart
@@ -13,24 +13,24 @@
int prop;
static void test(Test1 t) {
- var /*@ type=int* */ v1 = /*@ type=Test1* */ /*@target=Test1.==*/ t
+ var /*@ type=int* */ v1 = /*@ type=Test1* */ t
?. /*@target=Test1.prop*/ prop = getInt();
var /*@ type=int* */ v4 =
- /*@target=Test1.==*/ t
+ t
?. /*@target=Test1.prop*/ /*@target=Test1.prop*/ prop
- /*@target=num.==*/ ??= getInt();
+ ??= getInt();
var /*@ type=int* */ v7 =
- /*@target=Test1.==*/ t
+ t
?. /*@target=Test1.prop*/ /*@target=Test1.prop*/ prop
/*@target=num.+*/ += getInt();
- var /*@ type=int* */ v10 = /*@target=num.+*/ ++ /*@target=Test1.==*/ t
+ var /*@ type=int* */ v10 = /*@target=num.+*/ ++ t
?. /*@target=Test1.prop*/ /*@target=Test1.prop*/ prop;
var /*@ type=int* */ v11 =
- /*@target=Test1.==*/ t
+ t
?. /*@target=Test1.prop*/ /*@target=Test1.prop*/ prop
/*@target=num.+*/ ++;
}
@@ -40,49 +40,49 @@
num prop;
static void test(Test2 t) {
- var /*@ type=int* */ v1 = /*@ type=Test2* */ /*@target=Test2.==*/ t
+ var /*@ type=int* */ v1 = /*@ type=Test2* */ t
?. /*@target=Test2.prop*/ prop = getInt();
- var /*@ type=num* */ v2 = /*@ type=Test2* */ /*@target=Test2.==*/ t
+ var /*@ type=num* */ v2 = /*@ type=Test2* */ t
?. /*@target=Test2.prop*/ prop = getNum();
- var /*@ type=double* */ v3 = /*@ type=Test2* */ /*@target=Test2.==*/ t
+ var /*@ type=double* */ v3 = /*@ type=Test2* */ t
?. /*@target=Test2.prop*/ prop = getDouble();
var /*@ type=num* */ v4 =
- /*@target=Test2.==*/ t
+ t
?. /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
- /*@target=num.==*/ ??= getInt();
+ ??= getInt();
var /*@ type=num* */ v5 =
- /*@target=Test2.==*/ t
+ t
?. /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
- /*@target=num.==*/ ??= getNum();
+ ??= getNum();
- var /*@ type=num* */ v6 = /*@target=Test2.==*/ t
+ var /*@ type=num* */ v6 = t
?. /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
- /*@target=num.==*/ ??= getDouble();
+ ??= getDouble();
var /*@ type=num* */ v7 =
- /*@target=Test2.==*/ t
+ t
?. /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
/*@target=num.+*/ += getInt();
var /*@ type=num* */ v8 =
- /*@target=Test2.==*/ t
+ t
?. /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
/*@target=num.+*/ += getNum();
var /*@ type=num* */ v9 =
- /*@target=Test2.==*/ t
+ t
?. /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
/*@target=num.+*/ += getDouble();
- var /*@ type=num* */ v10 = /*@target=num.+*/ ++ /*@target=Test2.==*/ t
+ var /*@ type=num* */ v10 = /*@target=num.+*/ ++ t
?. /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop;
var /*@ type=num* */ v11 =
- /*@target=Test2.==*/ t
+ t
?. /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
/*@target=num.+*/ ++;
}
@@ -93,35 +93,35 @@
static void test3(Test3 t) {
var /*@ type=double* */ v3 =
- /*@ type=Test3* */ /*@target=Test3.==*/ t
+ /*@ type=Test3* */ t
?. /*@target=Test3.prop*/ prop = getDouble();
var /*@ type=double* */ v6 =
- /*@target=Test3.==*/ t?.
+ t?.
/*@target=Test3.prop*/ /*@target=Test3.prop*/ prop
- /*@target=num.==*/ ??= getDouble();
+ ??= getDouble();
var /*@ type=double* */ v7 =
- /*@target=Test3.==*/ t
+ t
?. /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop
/*@target=double.+*/ += getInt();
var /*@ type=double* */ v8 =
- /*@target=Test3.==*/ t
+ t
?. /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop
/*@target=double.+*/ += getNum();
var /*@ type=double* */ v9 =
- /*@target=Test3.==*/ t?.
+ t?.
/*@target=Test3.prop*/ /*@target=Test3.prop*/ prop
/*@target=double.+*/ += getDouble();
var /*@ type=double* */ v10 = /*@target=double.+*/ ++
- /*@target=Test3.==*/ t
+ t
?. /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop;
var /*@ type=double* */ v11 =
- /*@target=Test3.==*/ t
+ t
?. /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop
/*@target=double.+*/ ++;
}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart b/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart
index e626518..1c94bce 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart
@@ -27,7 +27,7 @@
super.member = /*@ typeArgs=B* */ f();
super. /*@target=Base.member*/ member
- /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+ ??= /*@ typeArgs=B* */ f();
super. /*@target=Base.member*/ member
/*@target=B.+*/ += /*@ typeArgs=C* */ f();
@@ -46,7 +46,7 @@
var /*@ type=B* */ v1 = super.member = /*@ typeArgs=B* */ f();
var /*@ type=B* */ v2 = super. /*@target=Base.member*/ member
- /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+ ??= /*@ typeArgs=B* */ f();
var /*@ type=A* */ v3 = super. /*@target=Base.member*/ member
/*@target=B.+*/ += /*@ typeArgs=C* */ f();
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart b/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart
index 5bb229f..b7a994d 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart
@@ -20,7 +20,7 @@
var /*@ type=int* */ v1 = super.intProp = getInt();
var /*@ type=int* */ v4 = super. /*@target=Base.intProp*/ intProp
- /*@target=num.==*/ ??= getInt();
+ ??= getInt();
var /*@ type=int* */ v7 = super. /*@target=Base.intProp*/ intProp
/*@target=num.+*/ += getInt();
@@ -43,13 +43,13 @@
var /*@ type=double* */ v3 = super.numProp = getDouble();
var /*@ type=num* */ v4 = super. /*@target=Base.numProp*/ numProp
- /*@target=num.==*/ ??= getInt();
+ ??= getInt();
var /*@ type=num* */ v5 = super. /*@target=Base.numProp*/ numProp
- /*@target=num.==*/ ??= getNum();
+ ??= getNum();
var /*@ type=num* */ v6 = super. /*@target=Base.numProp*/ numProp
- /*@target=num.==*/ ??= getDouble();
+ ??= getDouble();
var /*@ type=num* */ v7 = super. /*@target=Base.numProp*/ numProp
/*@target=num.+*/ += getInt();
@@ -77,7 +77,7 @@
var /*@ type=double* */ v3 = super.doubleProp = getDouble();
var /*@ type=double* */ v6 = super. /*@target=Base.doubleProp*/ doubleProp
- /*@target=num.==*/ ??= getDouble();
+ ??= getDouble();
var /*@ type=double* */ v7 = super. /*@target=Base.doubleProp*/ doubleProp
/*@target=double.+*/ += getInt();
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart b/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart
index 26d84f6..541e475 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart
@@ -16,7 +16,7 @@
var /*@ type=int* */ v1 = t. /*@target=Test1.prop*/ prop = getInt();
var /*@ type=int* */ v4 = /*@ type=Test1* */ /*@target=Test1.prop*/ t
. /*@target=Test1.prop*/ prop
- /*@target=num.==*/ ??= getInt();
+ ??= getInt();
var /*@ type=int* */ v7 =
/*@ type=Test1* */ t. /*@target=Test1.prop*/ /*@target=Test1.prop*/ prop
/*@target=num.+*/ += getInt();
@@ -37,13 +37,13 @@
var /*@ type=double* */ v3 = t. /*@target=Test2.prop*/ prop = getDouble();
var /*@ type=num* */ v4 = /*@ type=Test2* */ /*@target=Test2.prop*/ t
. /*@target=Test2.prop*/ prop
- /*@target=num.==*/ ??= getInt();
+ ??= getInt();
var /*@ type=num* */ v5 = /*@ type=Test2* */ /*@target=Test2.prop*/ t
. /*@target=Test2.prop*/ prop
- /*@target=num.==*/ ??= getNum();
+ ??= getNum();
var /*@ type=num* */ v6 = /*@ type=Test2* */ /*@target=Test2.prop*/ t
. /*@target=Test2.prop*/ prop
- /*@target=num.==*/ ??= getDouble();
+ ??= getDouble();
var /*@ type=num* */ v7 =
/*@ type=Test2* */ t. /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
/*@target=num.+*/ += getInt();
@@ -68,7 +68,7 @@
var /*@ type=double* */ v3 = t. /*@target=Test3.prop*/ prop = getDouble();
var /*@ type=double* */ v6 =
/*@ type=Test3* */ /*@target=Test3.prop*/ t. /*@target=Test3.prop*/
- prop /*@target=num.==*/ ??= getDouble();
+ prop ??= getDouble();
var /*@ type=double* */ v7 =
/*@ type=Test3* */ t. /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop
/*@target=double.+*/ += getInt();
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_static.dart b/pkg/front_end/testcases/inference/infer_assign_to_static.dart
index 1f4c19b..c09b270 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_static.dart
+++ b/pkg/front_end/testcases/inference/infer_assign_to_static.dart
@@ -25,7 +25,7 @@
void test_topLevelVariable() {
topLevelVariable = /*@ typeArgs=B* */ f();
- topLevelVariable /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+ topLevelVariable ??= /*@ typeArgs=B* */ f();
topLevelVariable /*@target=B.+*/ += /*@ typeArgs=C* */ f();
@@ -40,7 +40,7 @@
var /*@ type=B* */ v1 = topLevelVariable = /*@ typeArgs=B* */ f();
var /*@ type=B* */ v2 =
- topLevelVariable /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+ topLevelVariable ??= /*@ typeArgs=B* */ f();
var /*@ type=A* */ v3 =
topLevelVariable /*@target=B.+*/ += /*@ typeArgs=C* */ f();
@@ -60,7 +60,7 @@
void test_staticVariable() {
B.staticVariable = /*@ typeArgs=B* */ f();
- B.staticVariable /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+ B.staticVariable ??= /*@ typeArgs=B* */ f();
B.staticVariable /*@target=B.+*/ += /*@ typeArgs=C* */ f();
@@ -75,7 +75,7 @@
var /*@ type=B* */ v1 = B.staticVariable = /*@ typeArgs=B* */ f();
var /*@ type=B* */ v2 =
- B.staticVariable /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+ B.staticVariable ??= /*@ typeArgs=B* */ f();
var /*@ type=A* */ v3 =
B.staticVariable /*@target=B.+*/ += /*@ typeArgs=C* */ f();
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_static_upwards.dart b/pkg/front_end/testcases/inference/infer_assign_to_static_upwards.dart
index 157f454..22ed9e5 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_static_upwards.dart
+++ b/pkg/front_end/testcases/inference/infer_assign_to_static_upwards.dart
@@ -16,7 +16,7 @@
void test1() {
var /*@ type=int* */ v1 = topLevelInt = getInt();
- var /*@ type=int* */ v4 = topLevelInt /*@target=num.==*/ ??= getInt();
+ var /*@ type=int* */ v4 = topLevelInt ??= getInt();
var /*@ type=int* */ v7 = topLevelInt /*@target=num.+*/ += getInt();
@@ -33,11 +33,11 @@
var /*@ type=double* */ v3 = topLevelNum = getDouble();
- var /*@ type=num* */ v4 = topLevelNum /*@target=num.==*/ ??= getInt();
+ var /*@ type=num* */ v4 = topLevelNum ??= getInt();
- var /*@ type=num* */ v5 = topLevelNum /*@target=num.==*/ ??= getNum();
+ var /*@ type=num* */ v5 = topLevelNum ??= getNum();
- var /*@ type=num* */ v6 = topLevelNum /*@target=num.==*/ ??= getDouble();
+ var /*@ type=num* */ v6 = topLevelNum ??= getDouble();
var /*@ type=num* */ v7 = topLevelNum /*@target=num.+*/ += getInt();
@@ -55,7 +55,7 @@
var /*@ type=double* */ v3 = topLevelDouble = getDouble();
var /*@ type=double* */ v6 =
- topLevelDouble /*@target=num.==*/ ??= getDouble();
+ topLevelDouble ??= getDouble();
var /*@ type=double* */ v7 = topLevelDouble /*@target=double.+*/ += getInt();
diff --git a/pkg/front_end/testcases/inference/null_aware_method_invocation.dart b/pkg/front_end/testcases/inference/null_aware_method_invocation.dart
index c1906ab..2d019d6 100644
--- a/pkg/front_end/testcases/inference/null_aware_method_invocation.dart
+++ b/pkg/front_end/testcases/inference/null_aware_method_invocation.dart
@@ -10,9 +10,8 @@
}
g(C c) {
- var /*@ type=int* */ x = /*@ type=C* */ /*@target=C.==*/ c
- ?. /*@target=C.f*/ f();
- /*@ type=C* */ /*@target=C.==*/ c?. /*@target=C.f*/ f();
+ var /*@ type=int* */ x = /*@ type=C* */ c?. /*@target=C.f*/ f();
+ /*@ type=C* */ c?. /*@target=C.f*/ f();
}
main() {}
diff --git a/pkg/front_end/testcases/inference/null_aware_property_get.dart b/pkg/front_end/testcases/inference/null_aware_property_get.dart
index bc20ea3..3d2edef 100644
--- a/pkg/front_end/testcases/inference/null_aware_property_get.dart
+++ b/pkg/front_end/testcases/inference/null_aware_property_get.dart
@@ -10,9 +10,8 @@
}
void f(C c) {
- var /*@ type=int* */ x = /*@ type=C* */ /*@target=C.==*/ c
- ?. /*@target=C.x*/ x;
- /*@ type=C* */ /*@target=C.==*/ c?. /*@target=C.x*/ x;
+ var /*@ type=int* */ x = /*@ type=C* */ c?. /*@target=C.x*/ x;
+ /*@ type=C* */ c?. /*@target=C.x*/ x;
}
main() {}
diff --git a/pkg/front_end/testcases/inference/null_coalescing_operator.dart b/pkg/front_end/testcases/inference/null_coalescing_operator.dart
index f68c07f..8ce2e52 100644
--- a/pkg/front_end/testcases/inference/null_coalescing_operator.dart
+++ b/pkg/front_end/testcases/inference/null_coalescing_operator.dart
@@ -7,7 +7,6 @@
main() {
List<int> x;
- var /*@ type=List<int*>* */ y =
- x /*@target=List.==*/ ?? /*@ typeArgs=int* */ [];
+ var /*@ type=List<int*>* */ y = x ?? /*@ typeArgs=int* */ [];
List<int> z = y;
}
diff --git a/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart b/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart
index a6dfbb3..f84a4e4 100644
--- a/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart
+++ b/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart
@@ -7,5 +7,5 @@
main() {
List<int> x;
- List<num> y = x /*@target=List.==*/ ?? /*@ typeArgs=num* */ [];
+ List<num> y = x ?? /*@ typeArgs=num* */ [];
}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart
index 22d5c37..ff8a546 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart
@@ -25,7 +25,7 @@
/*@target=Test.member*/ member = /*@ typeArgs=B* */ f();
/*@target=Test.member*/ /*@target=Test.member*/ member
- /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+ ??= /*@ typeArgs=B* */ f();
/*@target=Test.member*/ /*@target=Test.member*/ member
/*@target=B.+*/ += /*@ typeArgs=C* */ f();
@@ -47,7 +47,7 @@
var /*@ type=B* */ v2 = /*@target=Test.member*/ /*@target=Test.member*/
member
- /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+ ??= /*@ typeArgs=B* */ f();
var /*@ type=A* */ v3 =
/*@target=Test.member*/ /*@target=Test.member*/ member
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards.dart
index c4cdedf..422d372 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards.dart
@@ -18,10 +18,10 @@
var /*@ type=num* */ v2 = /*@target=Test1.t*/ t = getNum();
var /*@ type=int* */ v4 = /*@target=Test1.t*/ /*@target=Test1.t*/ t
- /*@target=num.==*/ ??= getInt();
+ ??= getInt();
var /*@ type=num* */ v5 = /*@target=Test1.t*/ /*@target=Test1.t*/ t
- /*@target=num.==*/ ??= getNum();
+ ??= getNum();
var /*@ type=int* */ v7 = /*@target=Test1.t*/ /*@target=Test1.t*/ t
/*@target=num.+*/ += getInt();
@@ -49,13 +49,13 @@
var /*@ type=double* */ v3 = /*@target=Test2.t*/ t = getDouble();
var /*@ type=num* */ v4 = /*@target=Test2.t*/ /*@target=Test2.t*/ t
- /*@target=num.==*/ ??= getInt();
+ ??= getInt();
var /*@ type=num* */ v5 = /*@target=Test2.t*/ /*@target=Test2.t*/ t
- /*@target=num.==*/ ??= getNum();
+ ??= getNum();
var /*@ type=num* */ v6 = /*@target=Test2.t*/ /*@target=Test2.t*/ t
- /*@target=num.==*/ ??= getDouble();
+ ??= getDouble();
var /*@ type=num* */ v7 = /*@target=Test2.t*/ /*@target=Test2.t*/ t
/*@target=num.+*/ += getInt();
@@ -84,10 +84,10 @@
var /*@ type=double* */ v3 = /*@target=Test3.t*/ t = getDouble();
var /*@ type=num* */ v5 = /*@target=Test3.t*/ /*@target=Test3.t*/ t
- /*@target=num.==*/ ??= getNum();
+ ??= getNum();
var /*@ type=double* */ v6 = /*@target=Test3.t*/ /*@target=Test3.t*/ t
- /*@target=num.==*/ ??= getDouble();
+ ??= getDouble();
var /*@ type=double* */ v7 = /*@target=Test3.t*/ /*@target=Test3.t*/ t
/*@target=double.+*/ += getInt();
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart
index cd0681b..39a70e4 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart
@@ -32,7 +32,7 @@
t /*@target=Test.[]*/ /*@target=Test.[]=*/ [
/*@ typeArgs=Index* */ f()]
- /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+ ??= /*@ typeArgs=B* */ f();
t /*@target=Test.[]*/ /*@target=Test.[]=*/ [/*@ typeArgs=Index* */ f()]
/*@target=B.+*/ += /*@ typeArgs=C* */ f();
@@ -57,7 +57,7 @@
var /*@ type=B* */ v2 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ [
/*@ typeArgs=Index* */ f()]
- /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+ ??= /*@ typeArgs=B* */ f();
var /*@ type=A* */ v3 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ [
/*@ typeArgs=Index* */ f()]
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart
index 5cd412f..e4108f8 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart
@@ -38,7 +38,7 @@
/*@ typeArgs=Index* */ f()] = /*@ typeArgs=A* */ f();
t /*@target=Test.[]*/ /*@target=Test.[]=*/ [/*@ typeArgs=Index* */ f()]
- /*@target=A.==*/ ??= /*@ typeArgs=A* */ f();
+ ??= /*@ typeArgs=A* */ f();
t /*@target=Test.[]*/ /*@target=Test.[]=*/ [/*@ typeArgs=Index* */ f()]
/*@target=B.+*/ += /*@ typeArgs=E* */ f();
@@ -54,7 +54,7 @@
var /*@ type=A* */ v2 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ [
/*@ typeArgs=Index* */ f()]
- /*@target=A.==*/ ??= /*@ typeArgs=A* */ f();
+ ??= /*@ typeArgs=A* */ f();
var /*@ type=D* */ v3 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ [
/*@ typeArgs=Index* */ f()]
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart
index 8817a4a..89b4f0a 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart
@@ -32,7 +32,7 @@
super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
/*@ typeArgs=Index* */ f()]
- /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+ ??= /*@ typeArgs=B* */ f();
super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
/*@ typeArgs=Index* */ f()]
@@ -57,7 +57,7 @@
var /*@ type=B* */ v2 = super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
/*@ typeArgs=Index* */ f()]
- /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+ ??= /*@ typeArgs=B* */ f();
var /*@ type=A* */ v3 = super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
/*@ typeArgs=Index* */ f()]
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart
index 2caca66..afa9f53 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart
@@ -25,11 +25,11 @@
var /*@ type=int* */ v4 =
super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
- /*@target=num.==*/ ??= getInt();
+ ??= getInt();
var /*@ type=num* */ v5 =
super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
- /*@target=num.==*/ ??= getNum();
+ ??= getNum();
var /*@ type=int* */ v7 =
super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
@@ -57,15 +57,15 @@
var /*@ type=int* */ v4 =
super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
- /*@target=num.==*/ ??= getInt();
+ ??= getInt();
var /*@ type=num* */ v5 =
super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
- /*@target=num.==*/ ??= getNum();
+ ??= getNum();
var /*@ type=num* */ v6 =
super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
- /*@target=num.==*/ ??= getDouble();
+ ??= getDouble();
var /*@ type=int* */ v7 =
super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
@@ -95,11 +95,11 @@
var /*@ type=num* */ v5 =
super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
- /*@target=num.==*/ ??= getNum();
+ ??= getNum();
var /*@ type=num* */ v6 =
super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
- /*@target=num.==*/ ??= getDouble();
+ ??= getDouble();
var /*@ type=int* */ v7 =
super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
@@ -129,11 +129,11 @@
var /*@ type=num* */ v4 =
super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
- /*@target=num.==*/ ??= getInt();
+ ??= getInt();
var /*@ type=num* */ v5 =
super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
- /*@target=num.==*/ ??= getNum();
+ ??= getNum();
var /*@ type=num* */ v7 =
super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
@@ -161,15 +161,15 @@
var /*@ type=num* */ v4 =
super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
- /*@target=num.==*/ ??= getInt();
+ ??= getInt();
var /*@ type=num* */ v5 =
super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
- /*@target=num.==*/ ??= getNum();
+ ??= getNum();
var /*@ type=num* */ v6 =
super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
- /*@target=num.==*/ ??= getDouble();
+ ??= getDouble();
var /*@ type=num* */ v7 =
super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
@@ -199,11 +199,11 @@
var /*@ type=num* */ v5 =
super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
- /*@target=num.==*/ ??= getNum();
+ ??= getNum();
var /*@ type=num* */ v6 =
super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
- /*@target=num.==*/ ??= getDouble();
+ ??= getDouble();
var /*@ type=num* */ v7 =
super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
@@ -233,11 +233,11 @@
var /*@ type=num* */ v4 =
super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
- /*@target=num.==*/ ??= getInt();
+ ??= getInt();
var /*@ type=num* */ v5 =
super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
- /*@target=num.==*/ ??= getNum();
+ ??= getNum();
var /*@ type=double* */ v7 =
super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
@@ -265,15 +265,15 @@
var /*@ type=num* */ v4 =
super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
- /*@target=num.==*/ ??= getInt();
+ ??= getInt();
var /*@ type=num* */ v5 =
super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
- /*@target=num.==*/ ??= getNum();
+ ??= getNum();
var /*@ type=double* */ v6 =
super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
- /*@target=num.==*/ ??= getDouble();
+ ??= getDouble();
var /*@ type=double* */ v7 =
super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
@@ -303,11 +303,11 @@
var /*@ type=num* */ v5 =
super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
- /*@target=num.==*/ ??= getNum();
+ ??= getNum();
var /*@ type=double* */ v6 =
super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
- /*@target=num.==*/ ??= getDouble();
+ ??= getDouble();
var /*@ type=double* */ v7 =
super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart
index 8684930..e0b9ec5 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart
@@ -30,7 +30,7 @@
this /*@target=Test.[]*/ /*@target=Test.[]=*/ [
/*@ typeArgs=Index* */ f()]
- /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+ ??= /*@ typeArgs=B* */ f();
this /*@target=Test.[]*/ /*@target=Test.[]=*/ [
/*@ typeArgs=Index* */ f()]
@@ -55,7 +55,7 @@
var /*@ type=B* */ v2 = this /*@target=Test.[]*/ /*@target=Test.[]=*/ [
/*@ typeArgs=Index* */ f()]
- /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+ ??= /*@ typeArgs=B* */ f();
var /*@ type=A* */ v3 = this /*@target=Test.[]*/ /*@target=Test.[]=*/ [
/*@ typeArgs=Index* */ f()]
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart
index f9e34c4..f6d9aab 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart
@@ -20,11 +20,11 @@
var /*@ type=int* */ v4 = this
/*@target=Test1.[]*/ /*@target=Test1.[]=*/ ['x']
- /*@target=num.==*/ ??= getInt();
+ ??= getInt();
var /*@ type=num* */ v5 = this
/*@target=Test1.[]*/ /*@target=Test1.[]=*/ ['x']
- /*@target=num.==*/ ??= getNum();
+ ??= getNum();
var /*@ type=int* */ v7 = this
/*@target=Test1.[]*/ /*@target=Test1.[]=*/ ['x']
@@ -56,15 +56,15 @@
var /*@ type=int* */ v4 = this
/*@target=Test2.[]*/ /*@target=Test2.[]=*/ ['x']
- /*@target=num.==*/ ??= getInt();
+ ??= getInt();
var /*@ type=num* */ v5 = this
/*@target=Test2.[]*/ /*@target=Test2.[]=*/ ['x']
- /*@target=num.==*/ ??= getNum();
+ ??= getNum();
var /*@ type=num* */ v6 = this
/*@target=Test2.[]*/ /*@target=Test2.[]=*/ ['x']
- /*@target=num.==*/ ??= getDouble();
+ ??= getDouble();
var /*@ type=int* */ v7 = this
/*@target=Test2.[]*/ /*@target=Test2.[]=*/ ['x']
@@ -98,11 +98,11 @@
var /*@ type=num* */ v5 = this
/*@target=Test3.[]*/ /*@target=Test3.[]=*/ ['x']
- /*@target=num.==*/ ??= getNum();
+ ??= getNum();
var /*@ type=num* */ v6 = this
/*@target=Test3.[]*/ /*@target=Test3.[]=*/ ['x']
- /*@target=num.==*/ ??= getDouble();
+ ??= getDouble();
var /*@ type=int* */ v7 = this
/*@target=Test3.[]*/ /*@target=Test3.[]=*/ ['x']
@@ -136,11 +136,11 @@
var /*@ type=num* */ v4 = this
/*@target=Test4.[]*/ /*@target=Test4.[]=*/ ['x']
- /*@target=num.==*/ ??= getInt();
+ ??= getInt();
var /*@ type=num* */ v5 = this
/*@target=Test4.[]*/ /*@target=Test4.[]=*/ ['x']
- /*@target=num.==*/ ??= getNum();
+ ??= getNum();
var /*@ type=num* */ v7 = this
/*@target=Test4.[]*/ /*@target=Test4.[]=*/ ['x']
@@ -172,15 +172,15 @@
var /*@ type=num* */ v4 = this
/*@target=Test5.[]*/ /*@target=Test5.[]=*/ ['x']
- /*@target=num.==*/ ??= getInt();
+ ??= getInt();
var /*@ type=num* */ v5 = this
/*@target=Test5.[]*/ /*@target=Test5.[]=*/ ['x']
- /*@target=num.==*/ ??= getNum();
+ ??= getNum();
var /*@ type=num* */ v6 = this
/*@target=Test5.[]*/ /*@target=Test5.[]=*/ ['x']
- /*@target=num.==*/ ??= getDouble();
+ ??= getDouble();
var /*@ type=num* */ v7 = this
/*@target=Test5.[]*/ /*@target=Test5.[]=*/ ['x']
@@ -214,11 +214,11 @@
var /*@ type=num* */ v5 = this
/*@target=Test6.[]*/ /*@target=Test6.[]=*/ ['x']
- /*@target=num.==*/ ??= getNum();
+ ??= getNum();
var /*@ type=num* */ v6 = this
/*@target=Test6.[]*/ /*@target=Test6.[]=*/ ['x']
- /*@target=num.==*/ ??= getDouble();
+ ??= getDouble();
var /*@ type=num* */ v7 = this
/*@target=Test6.[]*/ /*@target=Test6.[]=*/ ['x']
@@ -253,11 +253,11 @@
var /*@ type=num* */ v4 = this
/*@target=Test7.[]*/ /*@target=Test7.[]=*/ ['x']
- /*@target=num.==*/ ??= getInt();
+ ??= getInt();
var /*@ type=num* */ v5 = this
/*@target=Test7.[]*/ /*@target=Test7.[]=*/ ['x']
- /*@target=num.==*/ ??= getNum();
+ ??= getNum();
var /*@ type=double* */ v7 = this
/*@target=Test7.[]*/ /*@target=Test7.[]=*/ ['x']
@@ -291,15 +291,15 @@
var /*@ type=num* */ v4 = this
/*@target=Test8.[]*/ /*@target=Test8.[]=*/ ['x']
- /*@target=num.==*/ ??= getInt();
+ ??= getInt();
var /*@ type=num* */ v5 = this
/*@target=Test8.[]*/ /*@target=Test8.[]=*/ ['x']
- /*@target=num.==*/ ??= getNum();
+ ??= getNum();
var /*@ type=double* */ v6 = this
/*@target=Test8.[]*/ /*@target=Test8.[]=*/ ['x']
- /*@target=num.==*/ ??= getDouble();
+ ??= getDouble();
var /*@ type=double* */ v7 = this
/*@target=Test8.[]*/ /*@target=Test8.[]=*/ ['x']
@@ -334,11 +334,11 @@
var /*@ type=num* */ v5 = this
/*@target=Test9.[]*/ /*@target=Test9.[]=*/ ['x']
- /*@target=num.==*/ ??= getNum();
+ ??= getNum();
var /*@ type=double* */ v6 = this
/*@target=Test9.[]*/ /*@target=Test9.[]=*/ ['x']
- /*@target=num.==*/ ??= getDouble();
+ ??= getDouble();
var /*@ type=double* */ v7 = this
/*@target=Test9.[]*/ /*@target=Test9.[]=*/ ['x']
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart
index caebb26..7980f3f 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart
@@ -20,10 +20,10 @@
var /*@ type=num* */ v2 = t /*@target=Test.[]=*/ ['x'] = getNum();
var /*@ type=int* */ v4 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
- /*@target=num.==*/ ??= getInt();
+ ??= getInt();
var /*@ type=num* */ v5 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
- /*@target=num.==*/ ??= getNum();
+ ??= getNum();
var /*@ type=int* */ v7 =
t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ +=
@@ -48,13 +48,13 @@
var /*@ type=double* */ v3 = t /*@target=Test.[]=*/ ['x'] = getDouble();
var /*@ type=int* */ v4 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
- /*@target=num.==*/ ??= getInt();
+ ??= getInt();
var /*@ type=num* */ v5 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
- /*@target=num.==*/ ??= getNum();
+ ??= getNum();
var /*@ type=num* */ v6 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
- /*@target=num.==*/ ??= getDouble();
+ ??= getDouble();
var /*@ type=int* */ v7 =
t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ +=
@@ -81,10 +81,10 @@
var /*@ type=double* */ v3 = t /*@target=Test.[]=*/ ['x'] = getDouble();
var /*@ type=num* */ v5 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
- /*@target=num.==*/ ??= getNum();
+ ??= getNum();
var /*@ type=num* */ v6 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
- /*@target=num.==*/ ??= getDouble();
+ ??= getDouble();
var /*@ type=int* */ v7 =
t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ +=
@@ -111,10 +111,10 @@
var /*@ type=num* */ v2 = t /*@target=Test.[]=*/ ['x'] = getNum();
var /*@ type=num* */ v4 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
- /*@target=num.==*/ ??= getInt();
+ ??= getInt();
var /*@ type=num* */ v5 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
- /*@target=num.==*/ ??= getNum();
+ ??= getNum();
var /*@ type=num* */ v7 =
t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ +=
@@ -139,13 +139,13 @@
var /*@ type=double* */ v3 = t /*@target=Test.[]=*/ ['x'] = getDouble();
var /*@ type=num* */ v4 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
- /*@target=num.==*/ ??= getInt();
+ ??= getInt();
var /*@ type=num* */ v5 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
- /*@target=num.==*/ ??= getNum();
+ ??= getNum();
var /*@ type=num* */ v6 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
- /*@target=num.==*/ ??= getDouble();
+ ??= getDouble();
var /*@ type=num* */ v7 =
t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ +=
@@ -172,10 +172,10 @@
var /*@ type=double* */ v3 = t /*@target=Test.[]=*/ ['x'] = getDouble();
var /*@ type=num* */ v5 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
- /*@target=num.==*/ ??= getNum();
+ ??= getNum();
var /*@ type=num* */ v6 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
- /*@target=num.==*/ ??= getDouble();
+ ??= getDouble();
var /*@ type=num* */ v7 =
t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ +=
@@ -202,10 +202,10 @@
var /*@ type=num* */ v2 = t /*@target=Test.[]=*/ ['x'] = getNum();
var /*@ type=num* */ v4 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
- /*@target=num.==*/ ??= getInt();
+ ??= getInt();
var /*@ type=num* */ v5 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
- /*@target=num.==*/ ??= getNum();
+ ??= getNum();
var /*@ type=double* */ v7 =
t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=double.+*/ +=
@@ -231,13 +231,13 @@
var /*@ type=double* */ v3 = t /*@target=Test.[]=*/ ['x'] = getDouble();
var /*@ type=num* */ v4 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
- /*@target=num.==*/ ??= getInt();
+ ??= getInt();
var /*@ type=num* */ v5 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
- /*@target=num.==*/ ??= getNum();
+ ??= getNum();
var /*@ type=double* */ v6 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
- /*@target=num.==*/ ??= getDouble();
+ ??= getDouble();
var /*@ type=double* */ v7 =
t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=double.+*/ +=
@@ -265,10 +265,10 @@
var /*@ type=double* */ v3 = t /*@target=Test.[]=*/ ['x'] = getDouble();
var /*@ type=num* */ v5 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
- /*@target=num.==*/ ??= getNum();
+ ??= getNum();
var /*@ type=double* */ v6 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
- /*@target=num.==*/ ??= getDouble();
+ ??= getDouble();
var /*@ type=double* */ v7 =
t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=double.+*/ +=
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart
index 17b741e..d6b952a 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart
@@ -22,7 +22,7 @@
B local;
local = /*@ typeArgs=B* */ f();
- local /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+ local ??= /*@ typeArgs=B* */ f();
local /*@target=B.+*/ += /*@ typeArgs=C* */ f();
@@ -37,7 +37,7 @@
var /*@ type=B* */ v1 = local = /*@ typeArgs=B* */ f();
var /*@ type=B* */ v2 =
- local /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+ local ??= /*@ typeArgs=B* */ f();
var /*@ type=A* */ v3 = local
/*@target=B.+*/ += /*@ typeArgs=C* */ f();
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart
index 52101cc..6a3242d 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart
@@ -14,9 +14,9 @@
var /*@ type=num* */ v2 = t = getNum();
- var /*@ type=int* */ v4 = t /*@target=num.==*/ ??= getInt();
+ var /*@ type=int* */ v4 = t ??= getInt();
- var /*@ type=num* */ v5 = t /*@target=num.==*/ ??= getNum();
+ var /*@ type=num* */ v5 = t ??= getNum();
var /*@ type=int* */ v7 = t /*@target=num.+*/ += getInt();
@@ -35,11 +35,11 @@
var /*@ type=double* */ v3 = t = getDouble();
- var /*@ type=num* */ v4 = t /*@target=num.==*/ ??= getInt();
+ var /*@ type=num* */ v4 = t ??= getInt();
- var /*@ type=num* */ v5 = t /*@target=num.==*/ ??= getNum();
+ var /*@ type=num* */ v5 = t ??= getNum();
- var /*@ type=num* */ v6 = t /*@target=num.==*/ ??= getDouble();
+ var /*@ type=num* */ v6 = t ??= getDouble();
var /*@ type=num* */ v7 = t /*@target=num.+*/ += getInt();
@@ -58,9 +58,9 @@
var /*@ type=double* */ v3 = t = getDouble();
- var /*@ type=num* */ v5 = t /*@target=num.==*/ ??= getNum();
+ var /*@ type=num* */ v5 = t ??= getNum();
- var /*@ type=double* */ v6 = t /*@target=num.==*/ ??= getDouble();
+ var /*@ type=double* */ v6 = t ??= getDouble();
var /*@ type=double* */ v7 = t /*@target=double.+*/ += getInt();
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart
index c112d9c..24d478e 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart
@@ -24,7 +24,7 @@
static void test(Test t) {
t. /*@target=Test.member*/ member = /*@ typeArgs=B* */ f();
/*@ type=Test* */ /*@target=Test.member*/ t. /*@target=Test.member*/ member
- /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+ ??= /*@ typeArgs=B* */ f();
/*@ type=Test* */ t. /*@target=Test.member*/ /*@target=Test.member*/ member
/*@target=B.+*/ += /*@ typeArgs=C* */ f();
/*@ type=Test* */ t. /*@target=Test.member*/ /*@target=Test.member*/ member
@@ -40,7 +40,7 @@
var /*@ type=B* */ v2 =
/*@ type=Test* */ /*@target=Test.member*/ t
. /*@target=Test.member*/ member
- /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+ ??= /*@ typeArgs=B* */ f();
var /*@ type=A* */ v3 =
/*@ type=Test* */ t
. /*@target=Test.member*/ /*@target=Test.member*/ member
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart
index 5719c09..0905ef9 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart
@@ -22,60 +22,60 @@
B member;
static void test(Test t) {
- /*@ type=Test* */ /*@target=Test.==*/ t
+ /*@ type=Test* */ t
?. /*@target=Test.member*/ member = /*@ typeArgs=B* */ f();
- /*@target=Test.==*/ t?.
+ t?.
/*@target=Test.member*/ /*@target=Test.member*/ member
- /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+ ??= /*@ typeArgs=B* */ f();
- /*@target=Test.==*/ t?.
+ t?.
/*@target=Test.member*/ /*@target=Test.member*/ member
/*@target=B.+*/ += /*@ typeArgs=C* */ f();
- /*@target=Test.==*/ t?.
+ t?.
/*@target=Test.member*/ /*@target=Test.member*/ member
/*@target=B.**/ *= /*@ typeArgs=B* */ f();
- /*@target=Test.==*/ t?.
+ t?.
/*@target=Test.member*/ /*@target=Test.member*/ member
/*@target=B.&*/ &= /*@ typeArgs=A* */ f();
- /*@target=B.-*/ -- /*@target=Test.==*/ t?.
+ /*@target=B.-*/ -- t?.
/*@target=Test.member*/ /*@target=Test.member*/ member;
- /*@target=Test.==*/ t?.
+ t?.
/*@target=Test.member*/ /*@target=Test.member*/ member
/*@target=B.-*/ --;
var /*@ type=B* */ v1 =
- /*@ type=Test* */ /*@target=Test.==*/ t
+ /*@ type=Test* */ t
?. /*@target=Test.member*/ member = /*@ typeArgs=B* */ f();
var /*@ type=B* */ v2 =
- /*@target=Test.==*/ t
+ t
?. /*@target=Test.member*/ /*@target=Test.member*/ member
- /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+ ??= /*@ typeArgs=B* */ f();
var /*@ type=A* */ v3 =
- /*@target=Test.==*/ t
+ t
?. /*@target=Test.member*/ /*@target=Test.member*/ member
/*@target=B.+*/ += /*@ typeArgs=C* */ f();
var /*@ type=B* */ v4 =
- /*@target=Test.==*/ t
+ t
?. /*@target=Test.member*/ /*@target=Test.member*/ member
/*@target=B.**/ *= /*@ typeArgs=B* */ f();
var /*@ type=C* */ v5 =
- /*@target=Test.==*/ t
+ t
?. /*@target=Test.member*/ /*@target=Test.member*/ member
/*@target=B.&*/ &= /*@ typeArgs=A* */ f();
- var /*@ type=B* */ v6 = /*@target=B.-*/ -- /*@target=Test.==*/ t
+ var /*@ type=B* */ v6 = /*@target=B.-*/ -- t
?. /*@target=Test.member*/ /*@target=Test.member*/ member;
- var /*@ type=B* */ v7 = /*@target=Test.==*/ t
+ var /*@ type=B* */ v7 = t
?. /*@target=Test.member*/ /*@target=Test.member*/ member
/*@target=B.-*/ --;
}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards.dart
index b72b887..692f54f 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards.dart
@@ -13,33 +13,33 @@
int prop;
static void test(Test1 t) {
- var /*@ type=int* */ v1 = /*@ type=Test1* */ /*@target=Test1.==*/ t
+ var /*@ type=int* */ v1 = /*@ type=Test1* */ t
?. /*@target=Test1.prop*/ prop = getInt();
- var /*@ type=num* */ v2 = /*@ type=Test1* */ /*@target=Test1.==*/ t
+ var /*@ type=num* */ v2 = /*@ type=Test1* */ t
?. /*@target=Test1.prop*/ prop = getNum();
- var /*@ type=int* */ v4 = /*@target=Test1.==*/ t?.
+ var /*@ type=int* */ v4 = t?.
/*@target=Test1.prop*/ /*@target=Test1.prop*/ prop
- /*@target=num.==*/ ??= getInt();
+ ??= getInt();
- var /*@ type=num* */ v5 = /*@target=Test1.==*/ t?.
+ var /*@ type=num* */ v5 = t?.
/*@target=Test1.prop*/ /*@target=Test1.prop*/ prop
- /*@target=num.==*/ ??= getNum();
+ ??= getNum();
- var /*@ type=int* */ v7 = /*@target=Test1.==*/ t?.
+ var /*@ type=int* */ v7 = t?.
/*@target=Test1.prop*/ /*@target=Test1.prop*/ prop
/*@target=num.+*/ += getInt();
- var /*@ type=num* */ v8 = /*@target=Test1.==*/ t?.
+ var /*@ type=num* */ v8 = t?.
/*@target=Test1.prop*/ /*@target=Test1.prop*/ prop
/*@target=num.+*/ += getNum();
var /*@ type=int* */ v10 = /*@target=num.+*/ ++
- /*@target=Test1.==*/ t?.
+ t?.
/*@target=Test1.prop*/ /*@target=Test1.prop*/ prop;
- var /*@ type=int* */ v11 = /*@target=Test1.==*/ t?.
+ var /*@ type=int* */ v11 = t?.
/*@target=Test1.prop*/ /*@target=Test1.prop*/ prop
/*@target=num.+*/ ++;
}
@@ -49,43 +49,43 @@
num prop;
static void test(Test2 t) {
- var /*@ type=int* */ v1 = /*@ type=Test2* */ /*@target=Test2.==*/ t
+ var /*@ type=int* */ v1 = /*@ type=Test2* */ t
?. /*@target=Test2.prop*/ prop = getInt();
- var /*@ type=num* */ v2 = /*@ type=Test2* */ /*@target=Test2.==*/ t
+ var /*@ type=num* */ v2 = /*@ type=Test2* */ t
?. /*@target=Test2.prop*/ prop = getNum();
- var /*@ type=double* */ v3 = /*@ type=Test2* */ /*@target=Test2.==*/ t
+ var /*@ type=double* */ v3 = /*@ type=Test2* */ t
?. /*@target=Test2.prop*/ prop = getDouble();
- var /*@ type=num* */ v4 = /*@target=Test2.==*/ t?.
+ var /*@ type=num* */ v4 = t?.
/*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
- /*@target=num.==*/ ??= getInt();
+ ??= getInt();
- var /*@ type=num* */ v5 = /*@target=Test2.==*/ t?.
+ var /*@ type=num* */ v5 = t?.
/*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
- /*@target=num.==*/ ??= getNum();
+ ??= getNum();
- var /*@ type=num* */ v6 = /*@target=Test2.==*/ t?.
+ var /*@ type=num* */ v6 = t?.
/*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
- /*@target=num.==*/ ??= getDouble();
+ ??= getDouble();
- var /*@ type=num* */ v7 = /*@target=Test2.==*/ t?.
+ var /*@ type=num* */ v7 = t?.
/*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
/*@target=num.+*/ += getInt();
- var /*@ type=num* */ v8 = /*@target=Test2.==*/ t?.
+ var /*@ type=num* */ v8 = t?.
/*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
/*@target=num.+*/ += getNum();
- var /*@ type=num* */ v9 = /*@target=Test2.==*/ t?.
+ var /*@ type=num* */ v9 = t?.
/*@target=Test2.prop*/ /*@target=Test2.prop*/
prop /*@target=num.+*/ += getDouble();
- var /*@ type=num* */ v10 = /*@target=num.+*/ ++ /*@target=Test2.==*/
+ var /*@ type=num* */ v10 = /*@target=num.+*/ ++
t?. /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop;
- var /*@ type=num* */ v11 = /*@target=Test2.==*/
+ var /*@ type=num* */ v11 =
t?. /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
/*@target=num.+*/ ++;
}
@@ -95,39 +95,39 @@
double prop;
static void test3(Test3 t) {
- var /*@ type=num* */ v2 = /*@ type=Test3* */ /*@target=Test3.==*/ t
+ var /*@ type=num* */ v2 = /*@ type=Test3* */ t
?. /*@target=Test3.prop*/ prop = getNum();
- var /*@ type=double* */ v3 = /*@ type=Test3* */ /*@target=Test3.==*/ t
+ var /*@ type=double* */ v3 = /*@ type=Test3* */ t
?. /*@target=Test3.prop*/ prop = getDouble();
- var /*@ type=num* */ v5 = /*@target=Test3.==*/ t?.
+ var /*@ type=num* */ v5 = t?.
/*@target=Test3.prop*/ /*@target=Test3.prop*/ prop
- /*@target=num.==*/ ??= getNum();
+ ??= getNum();
var /*@ type=double* */ v6 =
- /*@target=Test3.==*/ t?.
+ t?.
/*@target=Test3.prop*/ /*@target=Test3.prop*/ prop
- /*@target=num.==*/ ??= getDouble();
+ ??= getDouble();
- var /*@ type=double* */ v7 = /*@target=Test3.==*/ t?.
+ var /*@ type=double* */ v7 = t?.
/*@target=Test3.prop*/ /*@target=Test3.prop*/ prop
/*@target=double.+*/ += getInt();
- var /*@ type=double* */ v8 = /*@target=Test3.==*/ t?.
+ var /*@ type=double* */ v8 = t?.
/*@target=Test3.prop*/ /*@target=Test3.prop*/ prop
/*@target=double.+*/ += getNum();
var /*@ type=double* */ v9 =
- /*@target=Test3.==*/ t?.
+ t?.
/*@target=Test3.prop*/ /*@target=Test3.prop*/ prop
/*@target=double.+*/ += getDouble();
var /*@ type=double* */ v10 = /*@target=double.+*/ ++
- /*@target=Test3.==*/ t?.
+ t?.
/*@target=Test3.prop*/ /*@target=Test3.prop*/ prop;
- var /*@ type=double* */ v11 = /*@target=Test3.==*/
+ var /*@ type=double* */ v11 =
t?. /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop
/*@target=double.+*/ ++;
}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart
index 48ef55d..00881df 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart
@@ -27,7 +27,7 @@
super.member = /*@ typeArgs=B* */ f();
super. /*@target=Base.member*/ member
- /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+ ??= /*@ typeArgs=B* */ f();
super. /*@target=Base.member*/ member
/*@target=B.+*/ += /*@ typeArgs=C* */ f();
@@ -46,7 +46,7 @@
var /*@ type=B* */ v1 = super.member = /*@ typeArgs=B* */ f();
var /*@ type=B* */ v2 = super. /*@target=Base.member*/ member
- /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+ ??= /*@ typeArgs=B* */ f();
var /*@ type=A* */ v3 = super. /*@target=Base.member*/ member
/*@target=B.+*/ += /*@ typeArgs=C* */ f();
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards.dart
index c04c80e..fb14b71 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards.dart
@@ -22,10 +22,10 @@
var /*@ type=num* */ v2 = super.intProp = getNum();
var /*@ type=int* */ v4 = super. /*@target=Base.intProp*/ intProp
- /*@target=num.==*/ ??= getInt();
+ ??= getInt();
var /*@ type=num* */ v5 = super. /*@target=Base.intProp*/ intProp
- /*@target=num.==*/ ??= getNum();
+ ??= getNum();
var /*@ type=int* */ v7 = super. /*@target=Base.intProp*/ intProp
/*@target=num.+*/ += getInt();
@@ -51,13 +51,13 @@
var /*@ type=double* */ v3 = super.numProp = getDouble();
var /*@ type=num* */ v4 = super. /*@target=Base.numProp*/ numProp
- /*@target=num.==*/ ??= getInt();
+ ??= getInt();
var /*@ type=num* */ v5 = super. /*@target=Base.numProp*/ numProp
- /*@target=num.==*/ ??= getNum();
+ ??= getNum();
var /*@ type=num* */ v6 = super. /*@target=Base.numProp*/ numProp
- /*@target=num.==*/ ??= getDouble();
+ ??= getDouble();
var /*@ type=num* */ v7 = super. /*@target=Base.numProp*/ numProp
/*@target=num.+*/ += getInt();
@@ -84,10 +84,10 @@
var /*@ type=double* */ v3 = super.doubleProp = getDouble();
var /*@ type=num* */ v5 = super. /*@target=Base.doubleProp*/ doubleProp
- /*@target=num.==*/ ??= getNum();
+ ??= getNum();
var /*@ type=double* */ v6 = super. /*@target=Base.doubleProp*/ doubleProp
- /*@target=num.==*/ ??= getDouble();
+ ??= getDouble();
var /*@ type=double* */ v7 = super
. /*@target=Base.doubleProp*/
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards.dart
index e7d6d4b..e3c79e3 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards.dart
@@ -17,10 +17,10 @@
var /*@ type=num* */ v2 = t. /*@target=Test1.prop*/ prop = getNum();
var /*@ type=int* */ v4 = /*@ type=Test1* */ /*@target=Test1.prop*/ t
. /*@target=Test1.prop*/ prop
- /*@target=num.==*/ ??= getInt();
+ ??= getInt();
var /*@ type=num* */ v5 = /*@ type=Test1* */ /*@target=Test1.prop*/ t
. /*@target=Test1.prop*/ prop
- /*@target=num.==*/ ??= getNum();
+ ??= getNum();
var /*@ type=int* */ v7 = /*@ type=Test1* */ t
. /*@target=Test1.prop*/ /*@target=Test1.prop*/ prop
/*@target=num.+*/ += getInt();
@@ -45,13 +45,13 @@
var /*@ type=double* */ v3 = t. /*@target=Test2.prop*/ prop = getDouble();
var /*@ type=num* */ v4 = /*@ type=Test2* */ /*@target=Test2.prop*/ t
. /*@target=Test2.prop*/ prop
- /*@target=num.==*/ ??= getInt();
+ ??= getInt();
var /*@ type=num* */ v5 = /*@ type=Test2* */ /*@target=Test2.prop*/ t
. /*@target=Test2.prop*/ prop
- /*@target=num.==*/ ??= getNum();
+ ??= getNum();
var /*@ type=num* */ v6 = /*@ type=Test2* */ /*@target=Test2.prop*/ t
. /*@target=Test2.prop*/ prop
- /*@target=num.==*/ ??= getDouble();
+ ??= getDouble();
var /*@ type=num* */ v7 = /*@ type=Test2* */ t
. /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
/*@target=num.+*/ += getInt();
@@ -78,10 +78,10 @@
var /*@ type=double* */ v3 = t. /*@target=Test3.prop*/ prop = getDouble();
var /*@ type=num* */ v5 = /*@ type=Test3* */ /*@target=Test3.prop*/ t
. /*@target=Test3.prop*/ prop
- /*@target=num.==*/ ??= getNum();
+ ??= getNum();
var /*@ type=double* */ v6 = /*@ type=Test3* */ /*@target=Test3.prop*/ t
. /*@target=Test3.prop*/ prop
- /*@target=num.==*/ ??= getDouble();
+ ??= getDouble();
var /*@ type=double* */ v7 = /*@ type=Test3* */ t
. /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop
/*@target=double.+*/ += getInt();
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart
index 1f4c19b..c09b270 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart
@@ -25,7 +25,7 @@
void test_topLevelVariable() {
topLevelVariable = /*@ typeArgs=B* */ f();
- topLevelVariable /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+ topLevelVariable ??= /*@ typeArgs=B* */ f();
topLevelVariable /*@target=B.+*/ += /*@ typeArgs=C* */ f();
@@ -40,7 +40,7 @@
var /*@ type=B* */ v1 = topLevelVariable = /*@ typeArgs=B* */ f();
var /*@ type=B* */ v2 =
- topLevelVariable /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+ topLevelVariable ??= /*@ typeArgs=B* */ f();
var /*@ type=A* */ v3 =
topLevelVariable /*@target=B.+*/ += /*@ typeArgs=C* */ f();
@@ -60,7 +60,7 @@
void test_staticVariable() {
B.staticVariable = /*@ typeArgs=B* */ f();
- B.staticVariable /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+ B.staticVariable ??= /*@ typeArgs=B* */ f();
B.staticVariable /*@target=B.+*/ += /*@ typeArgs=C* */ f();
@@ -75,7 +75,7 @@
var /*@ type=B* */ v1 = B.staticVariable = /*@ typeArgs=B* */ f();
var /*@ type=B* */ v2 =
- B.staticVariable /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+ B.staticVariable ??= /*@ typeArgs=B* */ f();
var /*@ type=A* */ v3 =
B.staticVariable /*@target=B.+*/ += /*@ typeArgs=C* */ f();
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_static_upwards.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_static_upwards.dart
index 4b22632..237f648 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_static_upwards.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_static_upwards.dart
@@ -18,9 +18,9 @@
var /*@ type=num* */ v2 = topLevelInt = getNum();
- var /*@ type=int* */ v4 = topLevelInt /*@target=num.==*/ ??= getInt();
+ var /*@ type=int* */ v4 = topLevelInt ??= getInt();
- var /*@ type=num* */ v5 = topLevelInt /*@target=num.==*/ ??= getNum();
+ var /*@ type=num* */ v5 = topLevelInt ??= getNum();
var /*@ type=int* */ v7 = topLevelInt /*@target=num.+*/ += getInt();
@@ -39,11 +39,11 @@
var /*@ type=double* */ v3 = topLevelNum = getDouble();
- var /*@ type=num* */ v4 = topLevelNum /*@target=num.==*/ ??= getInt();
+ var /*@ type=num* */ v4 = topLevelNum ??= getInt();
- var /*@ type=num* */ v5 = topLevelNum /*@target=num.==*/ ??= getNum();
+ var /*@ type=num* */ v5 = topLevelNum ??= getNum();
- var /*@ type=num* */ v6 = topLevelNum /*@target=num.==*/ ??= getDouble();
+ var /*@ type=num* */ v6 = topLevelNum ??= getDouble();
var /*@ type=num* */ v7 = topLevelNum /*@target=num.+*/ += getInt();
@@ -62,10 +62,10 @@
var /*@ type=double* */ v3 = topLevelDouble = getDouble();
- var /*@ type=num* */ v5 = topLevelDouble /*@target=num.==*/ ??= getNum();
+ var /*@ type=num* */ v5 = topLevelDouble ??= getNum();
var /*@ type=double* */ v6 =
- topLevelDouble /*@target=num.==*/ ??= getDouble();
+ topLevelDouble ??= getDouble();
var /*@ type=double* */ v7 = topLevelDouble /*@target=double.+*/ += getInt();
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart b/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart
index 7478374..22e5ba7 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart
+++ b/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart
@@ -21,6 +21,6 @@
var a = new A();
var x = a. /*@target=A.b*/ b. /*@target=B.c*/ c;
var y = a. /*@ type=B* */ /*@target=A.b*/ /*@target=B.c*/ b. /*@target=B.c*/ c
- /*@target=C.==*/ ??= new D();
+ ??= new D();
main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.expect
index 7934529..ea950c6 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.expect
@@ -40,12 +40,12 @@
synthetic constructor •() → self::C*
: super core::Object::•()
;
- abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
abstract member-signature method toString() → core::String*; -> core::Object::toString
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.outline.expect
index 8899b99..da2cfcc 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.outline.expect
@@ -38,12 +38,12 @@
class C extends core::Object {
synthetic constructor •() → self::C*
;
- abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
abstract member-signature method toString() → core::String*; -> core::Object::toString
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.transformed.expect
index 7934529..ea950c6 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.transformed.expect
@@ -40,12 +40,12 @@
synthetic constructor •() → self::C*
: super core::Object::•()
;
- abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
abstract member-signature method toString() → core::String*; -> core::Object::toString
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart b/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart
index c7d7e2b..89d50fb 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart
+++ b/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart
@@ -20,6 +20,6 @@
var a = new A();
var x = a. /*@target=A.b*/ b. /*@target=B.c*/ c;
var y = a. /*@ type=B* */ /*@target=A.b*/ /*@target=B.c*/ b
- . /*@target=B.c*/ c /*@target=C.==*/ ??= new D();
+ . /*@target=B.c*/ c ??= new D();
main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.expect
index 07d3dfd..b174194 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.expect
@@ -38,12 +38,12 @@
synthetic constructor •() → self::C*
: super core::Object::•()
;
- abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
abstract member-signature method toString() → core::String*; -> core::Object::toString
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.outline.expect
index 1ad86f8..06be72a 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.outline.expect
@@ -35,12 +35,12 @@
class C extends core::Object {
synthetic constructor •() → self::C*
;
- abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
abstract member-signature method toString() → core::String*; -> core::Object::toString
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.transformed.expect
index 07d3dfd..b174194 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.transformed.expect
@@ -38,12 +38,12 @@
synthetic constructor •() → self::C*
: super core::Object::•()
;
- abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
abstract member-signature method toString() → core::String*; -> core::Object::toString
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
diff --git a/pkg/front_end/testcases/inference_new/null_aware_property_get.dart b/pkg/front_end/testcases/inference_new/null_aware_property_get.dart
index 9722b96..1aeaa68 100644
--- a/pkg/front_end/testcases/inference_new/null_aware_property_get.dart
+++ b/pkg/front_end/testcases/inference_new/null_aware_property_get.dart
@@ -11,6 +11,5 @@
main() {
Class c;
- num Function() f = /*@target=Class.==*/ /*@type=Class**/ c
- ?. /*@target=Class.method*/ method;
+ num Function() f = /*@type=Class**/ c?. /*@target=Class.method*/ method;
}
diff --git a/tools/VERSION b/tools/VERSION
index 77009c4..b5587e5 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 15
PATCH 0
-PRERELEASE 114
+PRERELEASE 115
PRERELEASE_PATCH 0
\ No newline at end of file