[cfe] Implement primitive equality

Closes #51045
Closes #51565
Closes #51566
Closes #51688
Closes #51800

Change-Id: I4a679ef9cf496a22f4fdc2047a2dc4753e796e2b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/290320
Commit-Queue: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Chloe Stefantsova <cstefantsova@google.com>
This commit is contained in:
Johnni Winther 2023-03-22 12:25:41 +00:00 committed by Commit Queue
parent f39f8f2f61
commit 94c165d189
48 changed files with 2896 additions and 260 deletions

View file

@ -467,6 +467,72 @@ Message _withArgumentsConstEvalElementImplementsEqual(
arguments: {'constant': _constant});
}
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const Template<
Message Function(Constant _constant, bool isNonNullableByDefault)>
templateConstEvalElementNotPrimitiveEquality = const Template<
Message Function(Constant _constant, bool isNonNullableByDefault)>(
problemMessageTemplate:
r"""The element '#constant' does not have a primitive equality.""",
withArguments: _withArgumentsConstEvalElementNotPrimitiveEquality);
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const Code<Message Function(Constant _constant, bool isNonNullableByDefault)>
codeConstEvalElementNotPrimitiveEquality = const Code<
Message Function(Constant _constant, bool isNonNullableByDefault)>(
"ConstEvalElementNotPrimitiveEquality",
);
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
Message _withArgumentsConstEvalElementNotPrimitiveEquality(
Constant _constant, bool isNonNullableByDefault) {
TypeLabeler labeler = new TypeLabeler(isNonNullableByDefault);
List<Object> constantParts = labeler.labelConstant(_constant);
String constant = constantParts.join();
return new Message(codeConstEvalElementNotPrimitiveEquality,
problemMessage:
"""The element '${constant}' does not have a primitive equality.""" +
labeler.originMessages,
arguments: {'constant': _constant});
}
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const Template<
Message Function(
Constant _constant, DartType _type, bool isNonNullableByDefault)>
templateConstEvalEqualsOperandNotPrimitiveEquality = const Template<
Message Function(Constant _constant, DartType _type,
bool isNonNullableByDefault)>(
problemMessageTemplate:
r"""Binary operator '==' requires receiver constant '#constant' of a type with primitive equality or type 'double', but was of type '#type'.""",
withArguments:
_withArgumentsConstEvalEqualsOperandNotPrimitiveEquality);
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const Code<
Message Function(
Constant _constant, DartType _type, bool isNonNullableByDefault)>
codeConstEvalEqualsOperandNotPrimitiveEquality = const Code<
Message Function(
Constant _constant, DartType _type, bool isNonNullableByDefault)>(
"ConstEvalEqualsOperandNotPrimitiveEquality",
);
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
Message _withArgumentsConstEvalEqualsOperandNotPrimitiveEquality(
Constant _constant, DartType _type, bool isNonNullableByDefault) {
TypeLabeler labeler = new TypeLabeler(isNonNullableByDefault);
List<Object> constantParts = labeler.labelConstant(_constant);
List<Object> typeParts = labeler.labelType(_type);
String constant = constantParts.join();
String type = typeParts.join();
return new Message(codeConstEvalEqualsOperandNotPrimitiveEquality,
problemMessage:
"""Binary operator '==' requires receiver constant '${constant}' of a type with primitive equality or type 'double', but was of type '${type}'.""" +
labeler.originMessages,
arguments: {'constant': _constant, 'type': _type});
}
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const Template<Message Function(DartType _type, bool isNonNullableByDefault)>
templateConstEvalFreeTypeParameter = const Template<
@ -865,6 +931,35 @@ Message _withArgumentsConstEvalKeyImplementsEqual(
arguments: {'constant': _constant});
}
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const Template<
Message Function(Constant _constant, bool isNonNullableByDefault)>
templateConstEvalKeyNotPrimitiveEquality = const Template<
Message Function(Constant _constant, bool isNonNullableByDefault)>(
problemMessageTemplate:
r"""The key '#constant' does not have a primitive equality.""",
withArguments: _withArgumentsConstEvalKeyNotPrimitiveEquality);
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const Code<Message Function(Constant _constant, bool isNonNullableByDefault)>
codeConstEvalKeyNotPrimitiveEquality = const Code<
Message Function(Constant _constant, bool isNonNullableByDefault)>(
"ConstEvalKeyNotPrimitiveEquality",
);
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
Message _withArgumentsConstEvalKeyNotPrimitiveEquality(
Constant _constant, bool isNonNullableByDefault) {
TypeLabeler labeler = new TypeLabeler(isNonNullableByDefault);
List<Object> constantParts = labeler.labelConstant(_constant);
String constant = constantParts.join();
return new Message(codeConstEvalKeyNotPrimitiveEquality,
problemMessage:
"""The key '${constant}' does not have a primitive equality.""" +
labeler.originMessages,
arguments: {'constant': _constant});
}
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const Template<
Message Function(Constant _constant, bool isNonNullableByDefault)>

View file

@ -159,10 +159,17 @@ class SetConstantBuilder extends _ListOrSetConstantBuilder<SetLiteral> {
@override
AbortConstant? addConstant(Constant constant, TreeNode context) {
if (!evaluator.hasPrimitiveEqual(constant)) {
return evaluator.createEvaluationErrorConstant(
context,
templateConstEvalElementImplementsEqual.withArguments(
constant, evaluator.isNonNullableByDefault));
if (evaluator.enablePrimitiveEquality) {
return evaluator.createEvaluationErrorConstant(
context,
templateConstEvalElementNotPrimitiveEquality.withArguments(
constant, evaluator.isNonNullableByDefault));
} else {
return evaluator.createEvaluationErrorConstant(
context,
templateConstEvalElementImplementsEqual.withArguments(
constant, evaluator.isNonNullableByDefault));
}
}
bool unseen = seen.add(constant);
if (!unseen) {
@ -304,10 +311,17 @@ class MapConstantBuilder {
parts.add(lastPart = <ConstantMapEntry>[]);
}
if (!evaluator.hasPrimitiveEqual(key)) {
return evaluator.createEvaluationErrorConstant(
keyContext,
templateConstEvalKeyImplementsEqual.withArguments(
key, evaluator.isNonNullableByDefault));
if (evaluator.enablePrimitiveEquality) {
return evaluator.createEvaluationErrorConstant(
keyContext,
templateConstEvalKeyNotPrimitiveEquality.withArguments(
key, evaluator.isNonNullableByDefault));
} else {
return evaluator.createEvaluationErrorConstant(
keyContext,
templateConstEvalKeyImplementsEqual.withArguments(
key, evaluator.isNonNullableByDefault));
}
}
bool unseenKey = seenKeys.add(key);
if (!unseenKey) {

View file

@ -442,6 +442,8 @@ class ConstantsTransformer extends RemovingTransformer {
/// rewritten.
bool get keepLocals => backend.keepLocals;
Library get currentLibrary => _staticTypeContext!.enclosingLibrary;
// Transform the library/class members:
void convertLibrary(Library library) {
@ -1517,7 +1519,7 @@ class ConstantsTransformer extends RemovingTransformer {
reportedErrors = [];
}
if (!useFallbackExhaustivenessAlgorithm) {
Library library = _staticTypeContext!.enclosingLibrary;
Library library = currentLibrary;
for (ExhaustivenessError error in errors) {
if (error is UnreachableCaseError) {
if (library.importUri.isScheme('dart') &&
@ -1558,7 +1560,7 @@ class ConstantsTransformer extends RemovingTransformer {
TreeNode visitSwitchStatement(
SwitchStatement node, TreeNode? removalSentinel) {
TreeNode result = super.visitSwitchStatement(node, removalSentinel);
Library library = _staticTypeContext!.enclosingLibrary;
Library library = currentLibrary;
// ignore: unnecessary_null_comparison
if (library != null) {
for (SwitchCase switchCase in node.cases) {
@ -2183,6 +2185,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
final Map<Node, Constant?> nodeCache;
late Map<Class, bool> primitiveEqualCache;
late Map<Class, bool> primitiveHashCodeCache;
/// Classes that are considered having a primitive equals but where the
/// `operator ==` is actually defined through as custom method. For instance
@ -2210,6 +2213,8 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
bool get isNonNullableByDefault =>
_staticTypeContext!.nonNullable == Nullability.nonNullable;
Library get currentLibrary => _staticTypeContext!.enclosingLibrary;
late ConstantWeakener _weakener;
ConstantEvaluator(this.dartLibrarySupport, this.backend, this.component,
@ -2247,6 +2252,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
coreTypes.symbolClass: true,
coreTypes.typeClass: true,
};
primitiveHashCodeCache = <Class, bool>{...primitiveEqualCache};
_weakener = new ConstantWeakener(this);
}
@ -3648,20 +3654,37 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
}
Constant _handleEquals(Expression node, Constant left, Constant right) {
if (left is NullConstant ||
left is BoolConstant ||
left is IntConstant ||
left is DoubleConstant ||
left is StringConstant ||
right is NullConstant) {
// [DoubleConstant] uses [identical] to determine equality, so we need
// to take the special cases into account.
return doubleSpecialCases(left, right) ?? makeBoolConstant(left == right);
if (enablePrimitiveEquality) {
if (hasPrimitiveEqual(left) ||
left is DoubleConstant ||
right is NullConstant) {
return doubleSpecialCases(left, right) ??
makeBoolConstant(left == right);
} else {
return createEvaluationErrorConstant(
node,
templateConstEvalEqualsOperandNotPrimitiveEquality.withArguments(
left,
left.getType(_staticTypeContext!),
isNonNullableByDefault));
}
} else {
return createEvaluationErrorConstant(
node,
templateConstEvalInvalidEqualsOperandType.withArguments(
left, left.getType(_staticTypeContext!), isNonNullableByDefault));
if (left is NullConstant ||
left is BoolConstant ||
left is IntConstant ||
left is DoubleConstant ||
left is StringConstant ||
right is NullConstant) {
// [DoubleConstant] uses [identical] to determine equality, so we need
// to take the special cases into account.
return doubleSpecialCases(left, right) ??
makeBoolConstant(left == right);
} else {
return createEvaluationErrorConstant(
node,
templateConstEvalInvalidEqualsOperandType.withArguments(left,
left.getType(_staticTypeContext!), isNonNullableByDefault));
}
}
}
@ -4737,9 +4760,8 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
@override
Constant visitSymbolLiteral(SymbolLiteral node) {
final Reference? libraryReference = node.value.startsWith('_')
? _staticTypeContext!.enclosingLibrary.reference
: null;
final Reference? libraryReference =
node.value.startsWith('_') ? currentLibrary.reference : null;
return canonicalize(new SymbolConstant(node.value, libraryReference));
}
@ -4867,6 +4889,8 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
return null;
}
bool get enablePrimitiveEquality => currentLibrary.languageVersion.major >= 3;
bool hasPrimitiveEqual(Constant constant,
{bool allowPseudoPrimitive = true}) {
if (intFolder.isInt(constant)) return true;
@ -4892,9 +4916,13 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
}
DartType type = constant.getType(_staticTypeContext!);
if (type is InterfaceType) {
bool result = classHasPrimitiveEqual(type.classNode);
Class cls = type.classNode;
bool result = classHasPrimitiveEqual(cls);
if (result && !allowPseudoPrimitive) {
result = !pseudoPrimitiveClasses.contains(type.classNode);
result = !pseudoPrimitiveClasses.contains(cls);
}
if (result && enablePrimitiveEquality) {
result = classHasPrimitiveHashCode(cls);
}
return result;
}
@ -4917,6 +4945,27 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
classHasPrimitiveEqual(klass.supertype!.classNode);
}
bool classHasPrimitiveHashCode(Class klass) {
bool? cached = primitiveHashCodeCache[klass];
if (cached != null) return cached;
for (Procedure procedure in klass.procedures) {
if (procedure.kind == ProcedureKind.Getter &&
procedure.name.text == 'hashCode' &&
!procedure.isAbstract &&
!procedure.isForwardingStub) {
return primitiveHashCodeCache[klass] = false;
}
}
for (Field field in klass.fields) {
if (field.name.text == 'hashCode') {
return primitiveHashCodeCache[klass] = false;
}
}
if (klass.supertype == null) return true; // To be on the safe side
return primitiveHashCodeCache[klass] =
classHasPrimitiveHashCode(klass.supertype!.classNode);
}
BoolConstant makeBoolConstant(bool value) =>
value ? trueConstant : falseConstant;
@ -6097,3 +6146,10 @@ class _PatternSwitchStatementInfo {
_PatternSwitchStatementInfo(this.switchIndexVariable,
this.innerLabeledStatement, this.switchCaseIndexMap);
}
enum PrimitiveEquality {
None,
EqualsOnly,
HashCodeOnly,
EqualsAndHashCode,
}

View file

@ -3087,7 +3087,7 @@ class MapEntry<K, V> {
abstract class Map<K, V> extends Iterable {
factory Map.unmodifiable(other) => null;
factory Map.of(o) = Map<E>._of;
factory Map.of(o) = Map<K, V>._of;
external factory Map._of(o);
Iterable<MapEntry<K, V>> get entries;
void operator []=(K key, V value) {}

View file

@ -107,6 +107,10 @@ ConstEvalDeferredLibrary/example: Fail
ConstEvalDuplicateElement/example: Fail
ConstEvalDuplicateKey/example: Fail
ConstEvalElementImplementsEqual/example: Fail
ConstEvalElementNotPrimitiveEquality/analyzerCode: Fail
ConstEvalElementNotPrimitiveEquality/example: Fail
ConstEvalEqualsOperandNotPrimitiveEquality/analyzerCode: Fail
ConstEvalEqualsOperandNotPrimitiveEquality/example: Fail
ConstEvalError/analyzerCode: Fail
ConstEvalError/example: Fail
ConstEvalExtension/example: Fail
@ -138,6 +142,8 @@ ConstEvalIterationInConstList/example: Fail
ConstEvalIterationInConstMap/example: Fail
ConstEvalIterationInConstSet/example: Fail
ConstEvalKeyImplementsEqual/example: Fail
ConstEvalKeyNotPrimitiveEquality/analyzerCode: Fail
ConstEvalKeyNotPrimitiveEquality/example: Fail
ConstEvalNegativeShift/analyzerCode: Fail # http://dartbug.com/33481
ConstEvalNegativeShift/example: Fail
ConstEvalNonConstantVariableGet/example: Fail

View file

@ -139,10 +139,16 @@ ConstEvalElementImplementsEqual:
problemMessage: "The element '#constant' does not have a primitive operator '=='."
analyzerCode: CONST_SET_ELEMENT_TYPE_IMPLEMENTS_EQUALS
ConstEvalElementNotPrimitiveEquality:
problemMessage: "The element '#constant' does not have a primitive equality."
ConstEvalKeyImplementsEqual:
problemMessage: "The key '#constant' does not have a primitive operator '=='."
analyzerCode: CONST_MAP_KEY_EXPRESSION_TYPE_IMPLEMENTS_EQUALS
ConstEvalKeyNotPrimitiveEquality:
problemMessage: "The key '#constant' does not have a primitive equality."
ConstEvalCaseImplementsEqual:
problemMessage: "Case expression '#constant' does not have a primitive operator '=='."
@ -155,6 +161,9 @@ ConstEvalInvalidBinaryOperandType:
ConstEvalInvalidEqualsOperandType:
problemMessage: "Binary operator '==' requires receiver constant '#constant' of type 'Null', 'bool', 'int', 'double', or 'String', but was of type '#type'."
ConstEvalEqualsOperandNotPrimitiveEquality:
problemMessage: "Binary operator '==' requires receiver constant '#constant' of a type with primitive equality or type 'double', but was of type '#type'."
ConstEvalZeroDivisor:
problemMessage: "Binary operator '#string' on '#string2' requires non-zero divisor, but divisor was '0'."
analyzerCode: CONST_EVAL_THROWS_IDBZE

View file

@ -64,6 +64,7 @@ bailout
bar'baz
bar\'baz
barbar
baseline
bash
bat
bazbaz
@ -113,6 +114,7 @@ cb
cc
ccc
cdee
center
certificate
cf
characteristics
@ -639,6 +641,7 @@ stay
std
stopwatches
stress
stretch
stringy
strip
strongest
@ -669,6 +672,7 @@ thereby
thereof
thread
ticks
tile
timed
timeout
timer

View file

@ -110,7 +110,7 @@ library /*isNonNullableByDefault*/;
// pkg/front_end/testcases/general/constants/const_collections.dart:49:48: Error: Constant evaluation error:
// const Set<dynamic> setWithNonPrimitiveEquals = {const WithEquals(42)};
// ^
// pkg/front_end/testcases/general/constants/const_collections.dart:49:55: Context: The element 'WithEquals {i: 42}' does not have a primitive operator '=='.
// pkg/front_end/testcases/general/constants/const_collections.dart:49:55: Context: The element 'WithEquals {i: 42}' does not have a primitive equality.
// - 'WithEquals' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.
// const Set<dynamic> setWithNonPrimitiveEquals = {const WithEquals(42)};
// ^
@ -161,7 +161,7 @@ library /*isNonNullableByDefault*/;
// pkg/front_end/testcases/general/constants/const_collections.dart:65:56: Error: Constant evaluation error:
// const Map<dynamic, int> mapWithNonPrimitiveEqualsKey = {
// ^
// pkg/front_end/testcases/general/constants/const_collections.dart:66:9: Context: The key 'WithEquals {i: 42}' does not have a primitive operator '=='.
// pkg/front_end/testcases/general/constants/const_collections.dart:66:9: Context: The key 'WithEquals {i: 42}' does not have a primitive equality.
// - 'WithEquals' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.
// const WithEquals(42): 42
// ^
@ -314,7 +314,7 @@ static const field core::Set<core::String> quxWithCustomIterableSpread3 = invali
- 'CustomIterable' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.
const Set<String> quxWithCustomIterableSpread3 = {...baz, customIterable};
^";
static const field core::Set<dynamic> setWithNonPrimitiveEquals = invalid-expression "The element 'WithEquals {i: 42}' does not have a primitive operator '=='.
static const field core::Set<dynamic> setWithNonPrimitiveEquals = invalid-expression "The element 'WithEquals {i: 42}' does not have a primitive equality.
- 'WithEquals' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.";
static const field core::Set<dynamic> setWithDuplicates = invalid-expression "The element '42' conflicts with another existing element in the set.";
static const field core::Map<core::String, core::String>? nullMap = #C2;
@ -334,7 +334,7 @@ static const field core::Map<core::String, core::String> mapWithCustomMap1 = inv
static const field core::Map<core::String, core::String> mapWithCustomMap2 = invalid-expression "Only maps can be used in spreads in constant maps.";
static const field core::Map<core::String, core::String> customMap = #C15;
static const field core::Map<core::String, core::String> mapWithCustomMap3 = invalid-expression "Only maps can be used in spreads in constant maps.";
static const field core::Map<dynamic, core::int> mapWithNonPrimitiveEqualsKey = invalid-expression "The key 'WithEquals {i: 42}' does not have a primitive operator '=='.
static const field core::Map<dynamic, core::int> mapWithNonPrimitiveEqualsKey = invalid-expression "The key 'WithEquals {i: 42}' does not have a primitive equality.
- 'WithEquals' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.";
static const field core::Map<core::int, core::int> mapWithDuplicates = invalid-expression "The key '42' conflicts with another existing key in the map.";
static get fooAsGetter() → core::List<core::String>

View file

@ -110,7 +110,7 @@ library /*isNonNullableByDefault*/;
// pkg/front_end/testcases/general/constants/const_collections.dart:49:48: Error: Constant evaluation error:
// const Set<dynamic> setWithNonPrimitiveEquals = {const WithEquals(42)};
// ^
// pkg/front_end/testcases/general/constants/const_collections.dart:49:55: Context: The element 'WithEquals {i: 42}' does not have a primitive operator '=='.
// pkg/front_end/testcases/general/constants/const_collections.dart:49:55: Context: The element 'WithEquals {i: 42}' does not have a primitive equality.
// - 'WithEquals' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.
// const Set<dynamic> setWithNonPrimitiveEquals = {const WithEquals(42)};
// ^
@ -161,7 +161,7 @@ library /*isNonNullableByDefault*/;
// pkg/front_end/testcases/general/constants/const_collections.dart:65:56: Error: Constant evaluation error:
// const Map<dynamic, int> mapWithNonPrimitiveEqualsKey = {
// ^
// pkg/front_end/testcases/general/constants/const_collections.dart:66:9: Context: The key 'WithEquals {i: 42}' does not have a primitive operator '=='.
// pkg/front_end/testcases/general/constants/const_collections.dart:66:9: Context: The key 'WithEquals {i: 42}' does not have a primitive equality.
// - 'WithEquals' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.
// const WithEquals(42): 42
// ^
@ -314,7 +314,7 @@ static const field core::Set<core::String> quxWithCustomIterableSpread3 = invali
- 'CustomIterable' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.
const Set<String> quxWithCustomIterableSpread3 = {...baz, customIterable};
^";
static const field core::Set<dynamic> setWithNonPrimitiveEquals = invalid-expression "The element 'WithEquals {i: 42}' does not have a primitive operator '=='.
static const field core::Set<dynamic> setWithNonPrimitiveEquals = invalid-expression "The element 'WithEquals {i: 42}' does not have a primitive equality.
- 'WithEquals' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.";
static const field core::Set<dynamic> setWithDuplicates = invalid-expression "The element '42' conflicts with another existing element in the set.";
static const field core::Map<core::String, core::String>? nullMap = #C2;
@ -334,7 +334,7 @@ static const field core::Map<core::String, core::String> mapWithCustomMap1 = inv
static const field core::Map<core::String, core::String> mapWithCustomMap2 = invalid-expression "Only maps can be used in spreads in constant maps.";
static const field core::Map<core::String, core::String> customMap = #C15;
static const field core::Map<core::String, core::String> mapWithCustomMap3 = invalid-expression "Only maps can be used in spreads in constant maps.";
static const field core::Map<dynamic, core::int> mapWithNonPrimitiveEqualsKey = invalid-expression "The key 'WithEquals {i: 42}' does not have a primitive operator '=='.
static const field core::Map<dynamic, core::int> mapWithNonPrimitiveEqualsKey = invalid-expression "The key 'WithEquals {i: 42}' does not have a primitive equality.
- 'WithEquals' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.";
static const field core::Map<core::int, core::int> mapWithDuplicates = invalid-expression "The key '42' conflicts with another existing key in the map.";
static get fooAsGetter() → core::List<core::String>

View file

@ -110,7 +110,7 @@ library /*isNonNullableByDefault*/;
// pkg/front_end/testcases/general/constants/const_collections.dart:49:48: Error: Constant evaluation error:
// const Set<dynamic> setWithNonPrimitiveEquals = {const WithEquals(42)};
// ^
// pkg/front_end/testcases/general/constants/const_collections.dart:49:55: Context: The element 'WithEquals {i: 42}' does not have a primitive operator '=='.
// pkg/front_end/testcases/general/constants/const_collections.dart:49:55: Context: The element 'WithEquals {i: 42}' does not have a primitive equality.
// - 'WithEquals' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.
// const Set<dynamic> setWithNonPrimitiveEquals = {const WithEquals(42)};
// ^
@ -161,7 +161,7 @@ library /*isNonNullableByDefault*/;
// pkg/front_end/testcases/general/constants/const_collections.dart:65:56: Error: Constant evaluation error:
// const Map<dynamic, int> mapWithNonPrimitiveEqualsKey = {
// ^
// pkg/front_end/testcases/general/constants/const_collections.dart:66:9: Context: The key 'WithEquals {i: 42}' does not have a primitive operator '=='.
// pkg/front_end/testcases/general/constants/const_collections.dart:66:9: Context: The key 'WithEquals {i: 42}' does not have a primitive equality.
// - 'WithEquals' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.
// const WithEquals(42): 42
// ^
@ -314,7 +314,7 @@ static const field core::Set<core::String> quxWithCustomIterableSpread3 = invali
- 'CustomIterable' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.
const Set<String> quxWithCustomIterableSpread3 = {...baz, customIterable};
^";
static const field core::Set<dynamic> setWithNonPrimitiveEquals = invalid-expression "The element 'WithEquals {i: 42}' does not have a primitive operator '=='.
static const field core::Set<dynamic> setWithNonPrimitiveEquals = invalid-expression "The element 'WithEquals {i: 42}' does not have a primitive equality.
- 'WithEquals' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.";
static const field core::Set<dynamic> setWithDuplicates = invalid-expression "The element '42' conflicts with another existing element in the set.";
static const field core::Map<core::String, core::String>? nullMap = #C2;
@ -334,7 +334,7 @@ static const field core::Map<core::String, core::String> mapWithCustomMap1 = inv
static const field core::Map<core::String, core::String> mapWithCustomMap2 = invalid-expression "Only maps can be used in spreads in constant maps.";
static const field core::Map<core::String, core::String> customMap = #C15;
static const field core::Map<core::String, core::String> mapWithCustomMap3 = invalid-expression "Only maps can be used in spreads in constant maps.";
static const field core::Map<dynamic, core::int> mapWithNonPrimitiveEqualsKey = invalid-expression "The key 'WithEquals {i: 42}' does not have a primitive operator '=='.
static const field core::Map<dynamic, core::int> mapWithNonPrimitiveEqualsKey = invalid-expression "The key 'WithEquals {i: 42}' does not have a primitive equality.
- 'WithEquals' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.";
static const field core::Map<core::int, core::int> mapWithDuplicates = invalid-expression "The key '42' conflicts with another existing key in the map.";
static get fooAsGetter() → core::List<core::String>

View file

@ -110,7 +110,7 @@ library /*isNonNullableByDefault*/;
// pkg/front_end/testcases/general/constants/const_collections.dart:49:48: Error: Constant evaluation error:
// const Set<dynamic> setWithNonPrimitiveEquals = {const WithEquals(42)};
// ^
// pkg/front_end/testcases/general/constants/const_collections.dart:49:55: Context: The element 'WithEquals {i: 42}' does not have a primitive operator '=='.
// pkg/front_end/testcases/general/constants/const_collections.dart:49:55: Context: The element 'WithEquals {i: 42}' does not have a primitive equality.
// - 'WithEquals' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.
// const Set<dynamic> setWithNonPrimitiveEquals = {const WithEquals(42)};
// ^
@ -161,7 +161,7 @@ library /*isNonNullableByDefault*/;
// pkg/front_end/testcases/general/constants/const_collections.dart:65:56: Error: Constant evaluation error:
// const Map<dynamic, int> mapWithNonPrimitiveEqualsKey = {
// ^
// pkg/front_end/testcases/general/constants/const_collections.dart:66:9: Context: The key 'WithEquals {i: 42}' does not have a primitive operator '=='.
// pkg/front_end/testcases/general/constants/const_collections.dart:66:9: Context: The key 'WithEquals {i: 42}' does not have a primitive equality.
// - 'WithEquals' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.
// const WithEquals(42): 42
// ^
@ -314,7 +314,7 @@ static const field core::Set<core::String> quxWithCustomIterableSpread3 = invali
- 'CustomIterable' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.
const Set<String> quxWithCustomIterableSpread3 = {...baz, customIterable};
^";
static const field core::Set<dynamic> setWithNonPrimitiveEquals = invalid-expression "The element 'WithEquals {i: 42}' does not have a primitive operator '=='.
static const field core::Set<dynamic> setWithNonPrimitiveEquals = invalid-expression "The element 'WithEquals {i: 42}' does not have a primitive equality.
- 'WithEquals' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.";
static const field core::Set<dynamic> setWithDuplicates = invalid-expression "The element '42' conflicts with another existing element in the set.";
static const field core::Map<core::String, core::String>? nullMap = #C2;
@ -334,7 +334,7 @@ static const field core::Map<core::String, core::String> mapWithCustomMap1 = inv
static const field core::Map<core::String, core::String> mapWithCustomMap2 = invalid-expression "Only maps can be used in spreads in constant maps.";
static const field core::Map<core::String, core::String> customMap = #C15;
static const field core::Map<core::String, core::String> mapWithCustomMap3 = invalid-expression "Only maps can be used in spreads in constant maps.";
static const field core::Map<dynamic, core::int> mapWithNonPrimitiveEqualsKey = invalid-expression "The key 'WithEquals {i: 42}' does not have a primitive operator '=='.
static const field core::Map<dynamic, core::int> mapWithNonPrimitiveEqualsKey = invalid-expression "The key 'WithEquals {i: 42}' does not have a primitive equality.
- 'WithEquals' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.";
static const field core::Map<core::int, core::int> mapWithDuplicates = invalid-expression "The key '42' conflicts with another existing key in the map.";
static get fooAsGetter() → core::List<core::String>

View file

@ -110,7 +110,7 @@ library /*isNonNullableByDefault*/;
// pkg/front_end/testcases/general/constants/const_collections.dart:49:48: Error: Constant evaluation error:
// const Set<dynamic> setWithNonPrimitiveEquals = {const WithEquals(42)};
// ^
// pkg/front_end/testcases/general/constants/const_collections.dart:49:55: Context: The element 'WithEquals {i: 42}' does not have a primitive operator '=='.
// pkg/front_end/testcases/general/constants/const_collections.dart:49:55: Context: The element 'WithEquals {i: 42}' does not have a primitive equality.
// - 'WithEquals' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.
// const Set<dynamic> setWithNonPrimitiveEquals = {const WithEquals(42)};
// ^
@ -161,7 +161,7 @@ library /*isNonNullableByDefault*/;
// pkg/front_end/testcases/general/constants/const_collections.dart:65:56: Error: Constant evaluation error:
// const Map<dynamic, int> mapWithNonPrimitiveEqualsKey = {
// ^
// pkg/front_end/testcases/general/constants/const_collections.dart:66:9: Context: The key 'WithEquals {i: 42}' does not have a primitive operator '=='.
// pkg/front_end/testcases/general/constants/const_collections.dart:66:9: Context: The key 'WithEquals {i: 42}' does not have a primitive equality.
// - 'WithEquals' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.
// const WithEquals(42): 42
// ^
@ -314,7 +314,7 @@ static const field core::Set<core::String> quxWithCustomIterableSpread3 = invali
- 'CustomIterable' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.
const Set<String> quxWithCustomIterableSpread3 = {...baz, customIterable};
^";
static const field core::Set<dynamic> setWithNonPrimitiveEquals = invalid-expression "The element 'WithEquals {i: 42}' does not have a primitive operator '=='.
static const field core::Set<dynamic> setWithNonPrimitiveEquals = invalid-expression "The element 'WithEquals {i: 42}' does not have a primitive equality.
- 'WithEquals' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.";
static const field core::Set<dynamic> setWithDuplicates = invalid-expression "The element '42' conflicts with another existing element in the set.";
static const field core::Map<core::String, core::String>? nullMap = #C2;
@ -334,7 +334,7 @@ static const field core::Map<core::String, core::String> mapWithCustomMap1 = inv
static const field core::Map<core::String, core::String> mapWithCustomMap2 = invalid-expression "Only maps can be used in spreads in constant maps.";
static const field core::Map<core::String, core::String> customMap = #C15;
static const field core::Map<core::String, core::String> mapWithCustomMap3 = invalid-expression "Only maps can be used in spreads in constant maps.";
static const field core::Map<dynamic, core::int> mapWithNonPrimitiveEqualsKey = invalid-expression "The key 'WithEquals {i: 42}' does not have a primitive operator '=='.
static const field core::Map<dynamic, core::int> mapWithNonPrimitiveEqualsKey = invalid-expression "The key 'WithEquals {i: 42}' does not have a primitive equality.
- 'WithEquals' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.";
static const field core::Map<core::int, core::int> mapWithDuplicates = invalid-expression "The key '42' conflicts with another existing key in the map.";
static get fooAsGetter() → core::List<core::String>

View file

@ -189,17 +189,6 @@ library /*isNonNullableByDefault*/;
// const x4 = x++;
// ^
//
// pkg/front_end/testcases/general/constants/various2.dart:129:29: Error: Constant evaluation error:
// const bool foosEqual = foo1 == foo2;
// ^
// pkg/front_end/testcases/general/constants/various2.dart:129:29: Context: Binary operator '==' requires receiver constant 'Foo {x: 42, y: 5}' of type 'Null', 'bool', 'int', 'double', or 'String', but was of type 'Foo'.
// - 'Foo' is from 'pkg/front_end/testcases/general/constants/various2.dart'.
// const bool foosEqual = foo1 == foo2;
// ^
// pkg/front_end/testcases/general/constants/various2.dart:129:12: Context: While analyzing:
// const bool foosEqual = foo1 == foo2;
// ^
//
// pkg/front_end/testcases/general/constants/various2.dart:135:26: Error: Constant evaluation error:
// const int circularity1 = circularity2;
// ^
@ -421,8 +410,7 @@ static const field self::ExtendsFoo2 extendsFoo2 = invalid-expression "pkg/front
static const field self::Foo foo1 = #C13;
static const field self::Foo foo2 = #C13;
static const field core::bool foosIdentical = #C2;
static const field core::bool foosEqual = invalid-expression "Binary operator '==' requires receiver constant 'Foo {x: 42, y: 5}' of type 'Null', 'bool', 'int', 'double', or 'String', but was of type 'Foo'.
- 'Foo' is from 'pkg/front_end/testcases/general/constants/various2.dart'.";
static const field core::bool foosEqual = #C2;
static const field core::Symbol barFoo = #C14;
static const field core::Symbol barFooEqual = #C15;
static const field core::Symbol tripleShiftSymbol = #C16;

View file

@ -189,17 +189,6 @@ library /*isNonNullableByDefault*/;
// const x4 = x++;
// ^
//
// pkg/front_end/testcases/general/constants/various2.dart:129:29: Error: Constant evaluation error:
// const bool foosEqual = foo1 == foo2;
// ^
// pkg/front_end/testcases/general/constants/various2.dart:129:29: Context: Binary operator '==' requires receiver constant 'Foo {x: 42, y: 5}' of type 'Null', 'bool', 'int', 'double', or 'String', but was of type 'Foo'.
// - 'Foo' is from 'pkg/front_end/testcases/general/constants/various2.dart'.
// const bool foosEqual = foo1 == foo2;
// ^
// pkg/front_end/testcases/general/constants/various2.dart:129:12: Context: While analyzing:
// const bool foosEqual = foo1 == foo2;
// ^
//
// pkg/front_end/testcases/general/constants/various2.dart:135:26: Error: Constant evaluation error:
// const int circularity1 = circularity2;
// ^
@ -421,8 +410,7 @@ static const field self::ExtendsFoo2 extendsFoo2 = invalid-expression "pkg/front
static const field self::Foo foo1 = #C13;
static const field self::Foo foo2 = #C13;
static const field core::bool foosIdentical = #C2;
static const field core::bool foosEqual = invalid-expression "Binary operator '==' requires receiver constant 'Foo {x: 42, y: 5}' of type 'Null', 'bool', 'int', 'double', or 'String', but was of type 'Foo'.
- 'Foo' is from 'pkg/front_end/testcases/general/constants/various2.dart'.";
static const field core::bool foosEqual = #C2;
static const field core::Symbol barFoo = #C14;
static const field core::Symbol barFooEqual = #C15;
static const field core::Symbol tripleShiftSymbol = #C16;

View file

@ -189,17 +189,6 @@ library /*isNonNullableByDefault*/;
// const x4 = x++;
// ^
//
// pkg/front_end/testcases/general/constants/various2.dart:129:29: Error: Constant evaluation error:
// const bool foosEqual = foo1 == foo2;
// ^
// pkg/front_end/testcases/general/constants/various2.dart:129:29: Context: Binary operator '==' requires receiver constant 'Foo {x: 42, y: 5}' of type 'Null', 'bool', 'int', 'double', or 'String', but was of type 'Foo'.
// - 'Foo' is from 'pkg/front_end/testcases/general/constants/various2.dart'.
// const bool foosEqual = foo1 == foo2;
// ^
// pkg/front_end/testcases/general/constants/various2.dart:129:12: Context: While analyzing:
// const bool foosEqual = foo1 == foo2;
// ^
//
// pkg/front_end/testcases/general/constants/various2.dart:135:26: Error: Constant evaluation error:
// const int circularity1 = circularity2;
// ^
@ -411,8 +400,7 @@ static const field self::ExtendsFoo2 extendsFoo2 = invalid-expression "pkg/front
static const field self::Foo foo1 = #C13;
static const field self::Foo foo2 = #C13;
static const field core::bool foosIdentical = #C2;
static const field core::bool foosEqual = invalid-expression "Binary operator '==' requires receiver constant 'Foo {x: 42, y: 5}' of type 'Null', 'bool', 'int', 'double', or 'String', but was of type 'Foo'.
- 'Foo' is from 'pkg/front_end/testcases/general/constants/various2.dart'.";
static const field core::bool foosEqual = #C2;
static const field core::Symbol barFoo = #C14;
static const field core::Symbol barFooEqual = #C15;
static const field core::Symbol tripleShiftSymbol = #C16;

View file

@ -189,17 +189,6 @@ library /*isNonNullableByDefault*/;
// const x4 = x++;
// ^
//
// pkg/front_end/testcases/general/constants/various2.dart:129:29: Error: Constant evaluation error:
// const bool foosEqual = foo1 == foo2;
// ^
// pkg/front_end/testcases/general/constants/various2.dart:129:29: Context: Binary operator '==' requires receiver constant 'Foo {x: 42, y: 5}' of type 'Null', 'bool', 'int', 'double', or 'String', but was of type 'Foo'.
// - 'Foo' is from 'pkg/front_end/testcases/general/constants/various2.dart'.
// const bool foosEqual = foo1 == foo2;
// ^
// pkg/front_end/testcases/general/constants/various2.dart:129:12: Context: While analyzing:
// const bool foosEqual = foo1 == foo2;
// ^
//
// pkg/front_end/testcases/general/constants/various2.dart:135:26: Error: Constant evaluation error:
// const int circularity1 = circularity2;
// ^
@ -411,8 +400,7 @@ static const field self::ExtendsFoo2 extendsFoo2 = invalid-expression "pkg/front
static const field self::Foo foo1 = #C13;
static const field self::Foo foo2 = #C13;
static const field core::bool foosIdentical = #C2;
static const field core::bool foosEqual = invalid-expression "Binary operator '==' requires receiver constant 'Foo {x: 42, y: 5}' of type 'Null', 'bool', 'int', 'double', or 'String', but was of type 'Foo'.
- 'Foo' is from 'pkg/front_end/testcases/general/constants/various2.dart'.";
static const field core::bool foosEqual = #C2;
static const field core::Symbol barFoo = #C14;
static const field core::Symbol barFooEqual = #C15;
static const field core::Symbol tripleShiftSymbol = #C16;

View file

@ -334,8 +334,7 @@ Evaluated: VariableGet @ org-dartlang-testcase:///various2.dart:85:12 -> IntCons
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various2.dart:126:24 -> InstanceConstant(const Foo{Foo.x: 42, Foo.y: 5})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various2.dart:127:24 -> InstanceConstant(const Foo{Foo.x: 42, Foo.y: 5})
Evaluated: StaticInvocation @ org-dartlang-testcase:///various2.dart:128:28 -> BoolConstant(true)
Evaluated: StaticGet @ org-dartlang-testcase:///various2.dart:129:24 -> InstanceConstant(const Foo{Foo.x: 42, Foo.y: 5})
Evaluated: StaticGet @ org-dartlang-testcase:///various2.dart:129:32 -> InstanceConstant(const Foo{Foo.x: 42, Foo.y: 5})
Evaluated: EqualsCall @ org-dartlang-testcase:///various2.dart:129:29 -> BoolConstant(true)
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various2.dart:130:29 -> SymbolConstant(#Foo)
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various2.dart:131:34 -> SymbolConstant(#Foo=)
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various2.dart:132:40 -> SymbolConstant(#>>>)
@ -361,4 +360,4 @@ Evaluated: ConditionalExpression @ org-dartlang-testcase:///various2.dart:212:25
Evaluated: ConditionalExpression @ org-dartlang-testcase:///various2.dart:213:40 -> BoolConstant(false)
Evaluated: ConditionalExpression @ org-dartlang-testcase:///various2.dart:214:25 -> NullConstant(null)
Evaluated: ConditionalExpression @ org-dartlang-testcase:///various2.dart:215:40 -> BoolConstant(false)
Extra constant evaluation: evaluated: 147, effectively constant: 66
Extra constant evaluation: evaluated: 145, effectively constant: 65

View file

@ -189,17 +189,6 @@ library /*isNonNullableByDefault*/;
// const x4 = x++;
// ^
//
// pkg/front_end/testcases/general/constants/various2.dart:129:29: Error: Constant evaluation error:
// const bool foosEqual = foo1 == foo2;
// ^
// pkg/front_end/testcases/general/constants/various2.dart:129:29: Context: Binary operator '==' requires receiver constant 'Foo {x: 42, y: 5}' of type 'Null', 'bool', 'int', 'double', or 'String', but was of type 'Foo'.
// - 'Foo' is from 'pkg/front_end/testcases/general/constants/various2.dart'.
// const bool foosEqual = foo1 == foo2;
// ^
// pkg/front_end/testcases/general/constants/various2.dart:129:12: Context: While analyzing:
// const bool foosEqual = foo1 == foo2;
// ^
//
// pkg/front_end/testcases/general/constants/various2.dart:135:26: Error: Constant evaluation error:
// const int circularity1 = circularity2;
// ^
@ -411,8 +400,7 @@ static const field self::ExtendsFoo2 extendsFoo2 = invalid-expression "pkg/front
static const field self::Foo foo1 = #C13;
static const field self::Foo foo2 = #C13;
static const field core::bool foosIdentical = #C2;
static const field core::bool foosEqual = invalid-expression "Binary operator '==' requires receiver constant 'Foo {x: 42, y: 5}' of type 'Null', 'bool', 'int', 'double', or 'String', but was of type 'Foo'.
- 'Foo' is from 'pkg/front_end/testcases/general/constants/various2.dart'.";
static const field core::bool foosEqual = #C2;
static const field core::Symbol barFoo = #C14;
static const field core::Symbol barFooEqual = #C15;
static const field core::Symbol tripleShiftSymbol = #C16;

View file

@ -240,17 +240,6 @@ library /*isNonNullableByDefault*/;
// case --o: // Error
// ^
//
// pkg/front_end/testcases/patterns/const_patterns_binary.dart:60:25: Error: Constant evaluation error:
// case const Object() == 2: // Error
// ^
// pkg/front_end/testcases/patterns/const_patterns_binary.dart:60:25: Context: Binary operator '==' requires receiver constant 'Object {}' of type 'Null', 'bool', 'int', 'double', or 'String', but was of type 'Object'.
// - 'Object' is from 'dart:core'.
// case const Object() == 2: // Error
// ^
// pkg/front_end/testcases/patterns/const_patterns_binary.dart:60:25: Context: While analyzing:
// case const Object() == 2: // Error
// ^
//
import self as self;
import "dart:core" as core;
@ -278,23 +267,20 @@ static method method<T extends core::Object? = dynamic>(dynamic o) → dynamic {
late final synthesized core::bool #0#20 = #C8 =={core::Object::==}{(core::Object) → core::bool} #0#0;
late final synthesized core::bool #0#22 = #C9 =={core::num::==}{(core::Object) → core::bool} #0#0;
late final synthesized core::bool #0#24 = #C10 =={core::num::==}{(core::Object) → core::bool} #0#0;
final const synthesized core::bool #0#28 = invalid-expression "Binary operator '==' requires receiver constant 'Object {}' of type 'Null', 'bool', 'int', 'double', or 'String', but was of type 'Object'.
- 'Object' is from 'dart:core'.";
final const synthesized invalid-type #0#33 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns_binary.dart:82:10: Error: Not a constant expression.
final const synthesized invalid-type #0#31 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns_binary.dart:82:10: Error: Not a constant expression.
case o++: // Error
^";
final const synthesized invalid-type #0#35 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns_binary.dart:83:10: Error: Not a constant expression.
final const synthesized invalid-type #0#33 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns_binary.dart:83:10: Error: Not a constant expression.
case o--: // Error
^";
final const synthesized invalid-type #0#37 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns_binary.dart:84:12: Error: Not a constant expression.
final const synthesized invalid-type #0#35 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns_binary.dart:84:12: Error: Not a constant expression.
case ++o: // Error
^";
final const synthesized invalid-type #0#39 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns_binary.dart:85:12: Error: Not a constant expression.
final const synthesized invalid-type #0#37 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns_binary.dart:85:12: Error: Not a constant expression.
case --o: // Error
^";
{
if(#0#2 || #0#4 || #0#2 && #0#4 || (let final dynamic #t1 = #0#0 as{ForNonNullableByDefault} self::method::T% in #0#6) || #C11 =={core::Object::==}{(core::Object) → core::bool} #0#0 || #0#10 || #0#12 || #0#4 || #0#14 || #0#16 || #0#2 || #0#18 || #0#20 || #0#10 || #0#16 || #0#10 || #0#20 || #0#20 || #0#18 || #0#18 || #0#22 || #0#16 || #0#16 || #0#24 || (let final dynamic #t2 = #0#0 as{ForNonNullableByDefault} self::method::T% in #0#6) || (let final dynamic #t3 = #0#0 as{ForNonNullableByDefault} self::method::T% in #C1 =={core::num::==}{(core::Object) → core::bool} #0#0 as{ForNonNullableByDefault} self::method::T%) || (let final dynamic #t4 = #0#0 as{ForNonNullableByDefault} core::int in #C2 =={core::num::==}{(core::Object) → core::bool} #0#0 as{ForNonNullableByDefault} core::int) || #0#10 || #0#12 || #0#4 || #0#14 || #0#16 || #0#2 || #0#18 || #0#20 || #0#10 || #0#16 || #0#10 || #0#20 || #0#20 || #0#18 || #0#18 || #0#22 || #0#16 || #0#16 || #0#24 || invalid-expression "Binary operator '==' requires receiver constant 'Object {}' of type 'Null', 'bool', 'int', 'double', or 'String', but was of type 'Object'.
- 'Object' is from 'dart:core'." =={core::Object::==}{(core::Object) → core::bool} #0#0 || (let final dynamic #t5 = #0#0 as{ForNonNullableByDefault} core::List<self::method::T%> in #C12 =={core::List::==}{(core::Object) → core::bool} #0#0 as{ForNonNullableByDefault} core::List<self::method::T%>) || #0#10 || #0#12 || #0#4 || #0#14 || #0#16 || #0#2 || #0#18 || #0#20 || #0#10 || #0#16 || #0#10 || #0#20 || #0#20 || #0#18 || #0#18 || #0#22 || #0#16 || #0#16 || #0#24 || #0#2) {
if(#0#2 || #0#4 || #0#2 && #0#4 || (let final dynamic #t1 = #0#0 as{ForNonNullableByDefault} self::method::T% in #0#6) || #C11 =={core::Object::==}{(core::Object) → core::bool} #0#0 || #0#10 || #0#12 || #0#4 || #0#14 || #0#16 || #0#2 || #0#18 || #0#20 || #0#10 || #0#16 || #0#10 || #0#20 || #0#20 || #0#18 || #0#18 || #0#22 || #0#16 || #0#16 || #0#24 || (let final dynamic #t2 = #0#0 as{ForNonNullableByDefault} self::method::T% in #0#6) || (let final dynamic #t3 = #0#0 as{ForNonNullableByDefault} self::method::T% in #C1 =={core::num::==}{(core::Object) → core::bool} #0#0 as{ForNonNullableByDefault} self::method::T%) || (let final dynamic #t4 = #0#0 as{ForNonNullableByDefault} core::int in #C2 =={core::num::==}{(core::Object) → core::bool} #0#0 as{ForNonNullableByDefault} core::int) || #0#10 || #0#12 || #0#4 || #0#14 || #0#16 || #0#2 || #0#18 || #0#20 || #0#10 || #0#16 || #0#10 || #0#20 || #0#20 || #0#18 || #0#18 || #0#22 || #0#16 || #0#16 || #0#24 || #0#18 || (let final dynamic #t5 = #0#0 as{ForNonNullableByDefault} core::List<self::method::T%> in #C12 =={core::List::==}{(core::Object) → core::bool} #0#0 as{ForNonNullableByDefault} core::List<self::method::T%>) || #0#10 || #0#12 || #0#4 || #0#14 || #0#16 || #0#2 || #0#18 || #0#20 || #0#10 || #0#16 || #0#10 || #0#20 || #0#20 || #0#18 || #0#18 || #0#22 || #0#16 || #0#16 || #0#24 || #0#2) {
{
let final invalid-type #t6 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns_binary.dart:81:12: Error: This couldn't be parsed.
case 1 ?? 2: // Error

View file

@ -240,17 +240,6 @@ library /*isNonNullableByDefault*/;
// case --o: // Error
// ^
//
// pkg/front_end/testcases/patterns/const_patterns_binary.dart:60:25: Error: Constant evaluation error:
// case const Object() == 2: // Error
// ^
// pkg/front_end/testcases/patterns/const_patterns_binary.dart:60:25: Context: Binary operator '==' requires receiver constant 'Object {}' of type 'Null', 'bool', 'int', 'double', or 'String', but was of type 'Object'.
// - 'Object' is from 'dart:core'.
// case const Object() == 2: // Error
// ^
// pkg/front_end/testcases/patterns/const_patterns_binary.dart:60:25: Context: While analyzing:
// case const Object() == 2: // Error
// ^
//
import self as self;
import "dart:core" as core;
@ -300,23 +289,20 @@ static method method<T extends core::Object? = dynamic>(dynamic o) → dynamic {
function ##0#24#initializer() → core::bool
return #C10 =={core::num::==}{(core::Object) → core::bool} #0#0;
late final synthesized core::bool #0#24 = ##0#24#initializer(){() → core::bool};
final const synthesized core::bool #0#28 = invalid-expression "Binary operator '==' requires receiver constant 'Object {}' of type 'Null', 'bool', 'int', 'double', or 'String', but was of type 'Object'.
- 'Object' is from 'dart:core'.";
final const synthesized invalid-type #0#33 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns_binary.dart:82:10: Error: Not a constant expression.
final const synthesized invalid-type #0#31 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns_binary.dart:82:10: Error: Not a constant expression.
case o++: // Error
^";
final const synthesized invalid-type #0#35 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns_binary.dart:83:10: Error: Not a constant expression.
final const synthesized invalid-type #0#33 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns_binary.dart:83:10: Error: Not a constant expression.
case o--: // Error
^";
final const synthesized invalid-type #0#37 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns_binary.dart:84:12: Error: Not a constant expression.
final const synthesized invalid-type #0#35 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns_binary.dart:84:12: Error: Not a constant expression.
case ++o: // Error
^";
final const synthesized invalid-type #0#39 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns_binary.dart:85:12: Error: Not a constant expression.
final const synthesized invalid-type #0#37 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns_binary.dart:85:12: Error: Not a constant expression.
case --o: // Error
^";
{
if(#0#2 || #0#4 || #0#2 && #0#4 || (let final self::method::T% #t1 = #0#0 as{ForNonNullableByDefault} self::method::T% in #0#6) || #C11 =={core::Object::==}{(core::Object) → core::bool} #0#0 || #0#10 || #0#12 || #0#4 || #0#14 || #0#16 || #0#2 || #0#18 || #0#20 || #0#10 || #0#16 || #0#10 || #0#20 || #0#20 || #0#18 || #0#18 || #0#22 || #0#16 || #0#16 || #0#24 || (let final self::method::T% #t2 = #0#0 as{ForNonNullableByDefault} self::method::T% in #0#6) || (let final self::method::T% #t3 = #0#0 as{ForNonNullableByDefault} self::method::T% in #C1 =={core::num::==}{(core::Object) → core::bool} #0#0 as{ForNonNullableByDefault} self::method::T%) || (let final core::int #t4 = #0#0 as{ForNonNullableByDefault} core::int in #C2 =={core::num::==}{(core::Object) → core::bool} #0#0 as{ForNonNullableByDefault} core::int) || #0#10 || #0#12 || #0#4 || #0#14 || #0#16 || #0#2 || #0#18 || #0#20 || #0#10 || #0#16 || #0#10 || #0#20 || #0#20 || #0#18 || #0#18 || #0#22 || #0#16 || #0#16 || #0#24 || invalid-expression "Binary operator '==' requires receiver constant 'Object {}' of type 'Null', 'bool', 'int', 'double', or 'String', but was of type 'Object'.
- 'Object' is from 'dart:core'." =={core::Object::==}{(core::Object) → core::bool} #0#0 || (let final core::List<self::method::T%> #t5 = #0#0 as{ForNonNullableByDefault} core::List<self::method::T%> in #C12 =={core::List::==}{(core::Object) → core::bool} #0#0 as{ForNonNullableByDefault} core::List<self::method::T%>) || #0#10 || #0#12 || #0#4 || #0#14 || #0#16 || #0#2 || #0#18 || #0#20 || #0#10 || #0#16 || #0#10 || #0#20 || #0#20 || #0#18 || #0#18 || #0#22 || #0#16 || #0#16 || #0#24 || #0#2) {
if(#0#2 || #0#4 || #0#2 && #0#4 || (let final self::method::T% #t1 = #0#0 as{ForNonNullableByDefault} self::method::T% in #0#6) || #C11 =={core::Object::==}{(core::Object) → core::bool} #0#0 || #0#10 || #0#12 || #0#4 || #0#14 || #0#16 || #0#2 || #0#18 || #0#20 || #0#10 || #0#16 || #0#10 || #0#20 || #0#20 || #0#18 || #0#18 || #0#22 || #0#16 || #0#16 || #0#24 || (let final self::method::T% #t2 = #0#0 as{ForNonNullableByDefault} self::method::T% in #0#6) || (let final self::method::T% #t3 = #0#0 as{ForNonNullableByDefault} self::method::T% in #C1 =={core::num::==}{(core::Object) → core::bool} #0#0 as{ForNonNullableByDefault} self::method::T%) || (let final core::int #t4 = #0#0 as{ForNonNullableByDefault} core::int in #C2 =={core::num::==}{(core::Object) → core::bool} #0#0 as{ForNonNullableByDefault} core::int) || #0#10 || #0#12 || #0#4 || #0#14 || #0#16 || #0#2 || #0#18 || #0#20 || #0#10 || #0#16 || #0#10 || #0#20 || #0#20 || #0#18 || #0#18 || #0#22 || #0#16 || #0#16 || #0#24 || #0#18 || (let final core::List<self::method::T%> #t5 = #0#0 as{ForNonNullableByDefault} core::List<self::method::T%> in #C12 =={core::List::==}{(core::Object) → core::bool} #0#0 as{ForNonNullableByDefault} core::List<self::method::T%>) || #0#10 || #0#12 || #0#4 || #0#14 || #0#16 || #0#2 || #0#18 || #0#20 || #0#10 || #0#16 || #0#10 || #0#20 || #0#20 || #0#18 || #0#18 || #0#22 || #0#16 || #0#16 || #0#24 || #0#2) {
{
let final invalid-type #t6 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns_binary.dart:81:12: Error: This couldn't be parsed.
case 1 ?? 2: // Error

View file

@ -240,17 +240,6 @@ library /*isNonNullableByDefault*/;
// case --o: // Error
// ^
//
// pkg/front_end/testcases/patterns/const_patterns_binary.dart:60:25: Error: Constant evaluation error:
// case const Object() == 2: // Error
// ^
// pkg/front_end/testcases/patterns/const_patterns_binary.dart:60:25: Context: Binary operator '==' requires receiver constant 'Object {}' of type 'Null', 'bool', 'int', 'double', or 'String', but was of type 'Object'.
// - 'Object' is from 'dart:core'.
// case const Object() == 2: // Error
// ^
// pkg/front_end/testcases/patterns/const_patterns_binary.dart:60:25: Context: While analyzing:
// case const Object() == 2: // Error
// ^
//
import self as self;
import "dart:core" as core;
@ -278,23 +267,20 @@ static method method<T extends core::Object? = dynamic>(dynamic o) → dynamic {
late final synthesized core::bool #0#20 = #C8 =={core::Object::==}{(core::Object) → core::bool} #0#0;
late final synthesized core::bool #0#22 = #C9 =={core::num::==}{(core::Object) → core::bool} #0#0;
late final synthesized core::bool #0#24 = #C10 =={core::num::==}{(core::Object) → core::bool} #0#0;
final const synthesized core::bool #0#28 = invalid-expression "Binary operator '==' requires receiver constant 'Object {}' of type 'Null', 'bool', 'int', 'double', or 'String', but was of type 'Object'.
- 'Object' is from 'dart:core'.";
final const synthesized invalid-type #0#33 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns_binary.dart:82:10: Error: Not a constant expression.
final const synthesized invalid-type #0#31 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns_binary.dart:82:10: Error: Not a constant expression.
case o++: // Error
^";
final const synthesized invalid-type #0#35 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns_binary.dart:83:10: Error: Not a constant expression.
final const synthesized invalid-type #0#33 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns_binary.dart:83:10: Error: Not a constant expression.
case o--: // Error
^";
final const synthesized invalid-type #0#37 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns_binary.dart:84:12: Error: Not a constant expression.
final const synthesized invalid-type #0#35 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns_binary.dart:84:12: Error: Not a constant expression.
case ++o: // Error
^";
final const synthesized invalid-type #0#39 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns_binary.dart:85:12: Error: Not a constant expression.
final const synthesized invalid-type #0#37 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns_binary.dart:85:12: Error: Not a constant expression.
case --o: // Error
^";
{
if(#0#2 || #0#4 || #0#2 && #0#4 || (let final dynamic #t1 = #0#0 as{ForNonNullableByDefault} self::method::T% in #0#6) || #C11 =={core::Object::==}{(core::Object) → core::bool} #0#0 || #0#10 || #0#12 || #0#4 || #0#14 || #0#16 || #0#2 || #0#18 || #0#20 || #0#10 || #0#16 || #0#10 || #0#20 || #0#20 || #0#18 || #0#18 || #0#22 || #0#16 || #0#16 || #0#24 || (let final dynamic #t2 = #0#0 as{ForNonNullableByDefault} self::method::T% in #0#6) || (let final dynamic #t3 = #0#0 as{ForNonNullableByDefault} self::method::T% in #C1 =={core::num::==}{(core::Object) → core::bool} #0#0 as{ForNonNullableByDefault} self::method::T%) || (let final dynamic #t4 = #0#0 as{ForNonNullableByDefault} core::int in #C2 =={core::num::==}{(core::Object) → core::bool} #0#0 as{ForNonNullableByDefault} core::int) || #0#10 || #0#12 || #0#4 || #0#14 || #0#16 || #0#2 || #0#18 || #0#20 || #0#10 || #0#16 || #0#10 || #0#20 || #0#20 || #0#18 || #0#18 || #0#22 || #0#16 || #0#16 || #0#24 || invalid-expression "Binary operator '==' requires receiver constant 'Object {}' of type 'Null', 'bool', 'int', 'double', or 'String', but was of type 'Object'.
- 'Object' is from 'dart:core'." =={core::Object::==}{(core::Object) → core::bool} #0#0 || (let final dynamic #t5 = #0#0 as{ForNonNullableByDefault} core::List<self::method::T%> in #C12 =={core::List::==}{(core::Object) → core::bool} #0#0 as{ForNonNullableByDefault} core::List<self::method::T%>) || #0#10 || #0#12 || #0#4 || #0#14 || #0#16 || #0#2 || #0#18 || #0#20 || #0#10 || #0#16 || #0#10 || #0#20 || #0#20 || #0#18 || #0#18 || #0#22 || #0#16 || #0#16 || #0#24 || #0#2) {
if(#0#2 || #0#4 || #0#2 && #0#4 || (let final dynamic #t1 = #0#0 as{ForNonNullableByDefault} self::method::T% in #0#6) || #C11 =={core::Object::==}{(core::Object) → core::bool} #0#0 || #0#10 || #0#12 || #0#4 || #0#14 || #0#16 || #0#2 || #0#18 || #0#20 || #0#10 || #0#16 || #0#10 || #0#20 || #0#20 || #0#18 || #0#18 || #0#22 || #0#16 || #0#16 || #0#24 || (let final dynamic #t2 = #0#0 as{ForNonNullableByDefault} self::method::T% in #0#6) || (let final dynamic #t3 = #0#0 as{ForNonNullableByDefault} self::method::T% in #C1 =={core::num::==}{(core::Object) → core::bool} #0#0 as{ForNonNullableByDefault} self::method::T%) || (let final dynamic #t4 = #0#0 as{ForNonNullableByDefault} core::int in #C2 =={core::num::==}{(core::Object) → core::bool} #0#0 as{ForNonNullableByDefault} core::int) || #0#10 || #0#12 || #0#4 || #0#14 || #0#16 || #0#2 || #0#18 || #0#20 || #0#10 || #0#16 || #0#10 || #0#20 || #0#20 || #0#18 || #0#18 || #0#22 || #0#16 || #0#16 || #0#24 || #0#18 || (let final dynamic #t5 = #0#0 as{ForNonNullableByDefault} core::List<self::method::T%> in #C12 =={core::List::==}{(core::Object) → core::bool} #0#0 as{ForNonNullableByDefault} core::List<self::method::T%>) || #0#10 || #0#12 || #0#4 || #0#14 || #0#16 || #0#2 || #0#18 || #0#20 || #0#10 || #0#16 || #0#10 || #0#20 || #0#20 || #0#18 || #0#18 || #0#22 || #0#16 || #0#16 || #0#24 || #0#2) {
{
let final invalid-type #t6 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns_binary.dart:81:12: Error: This couldn't be parsed.
case 1 ?? 2: // Error

View file

@ -240,17 +240,6 @@ library /*isNonNullableByDefault*/;
// case --o: // Error
// ^
//
// pkg/front_end/testcases/patterns/const_patterns_binary.dart:60:25: Error: Constant evaluation error:
// case const Object() == 2: // Error
// ^
// pkg/front_end/testcases/patterns/const_patterns_binary.dart:60:25: Context: Binary operator '==' requires receiver constant 'Object {}' of type 'Null', 'bool', 'int', 'double', or 'String', but was of type 'Object'.
// - 'Object' is from 'dart:core'.
// case const Object() == 2: // Error
// ^
// pkg/front_end/testcases/patterns/const_patterns_binary.dart:60:25: Context: While analyzing:
// case const Object() == 2: // Error
// ^
//
import self as self;
import "dart:core" as core;
@ -278,23 +267,20 @@ static method method<T extends core::Object? = dynamic>(dynamic o) → dynamic {
late final synthesized core::bool #0#20 = #C8 =={core::Object::==}{(core::Object) → core::bool} #0#0;
late final synthesized core::bool #0#22 = #C9 =={core::num::==}{(core::Object) → core::bool} #0#0;
late final synthesized core::bool #0#24 = #C10 =={core::num::==}{(core::Object) → core::bool} #0#0;
final const synthesized core::bool #0#28 = invalid-expression "Binary operator '==' requires receiver constant 'Object {}' of type 'Null', 'bool', 'int', 'double', or 'String', but was of type 'Object'.
- 'Object' is from 'dart:core'.";
final const synthesized invalid-type #0#33 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns_binary.dart:82:10: Error: Not a constant expression.
final const synthesized invalid-type #0#31 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns_binary.dart:82:10: Error: Not a constant expression.
case o++: // Error
^";
final const synthesized invalid-type #0#35 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns_binary.dart:83:10: Error: Not a constant expression.
final const synthesized invalid-type #0#33 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns_binary.dart:83:10: Error: Not a constant expression.
case o--: // Error
^";
final const synthesized invalid-type #0#37 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns_binary.dart:84:12: Error: Not a constant expression.
final const synthesized invalid-type #0#35 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns_binary.dart:84:12: Error: Not a constant expression.
case ++o: // Error
^";
final const synthesized invalid-type #0#39 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns_binary.dart:85:12: Error: Not a constant expression.
final const synthesized invalid-type #0#37 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns_binary.dart:85:12: Error: Not a constant expression.
case --o: // Error
^";
{
if(#0#2 || #0#4 || #0#2 && #0#4 || (let final dynamic #t1 = #0#0 as{ForNonNullableByDefault} self::method::T% in #0#6) || #C11 =={core::Object::==}{(core::Object) → core::bool} #0#0 || #0#10 || #0#12 || #0#4 || #0#14 || #0#16 || #0#2 || #0#18 || #0#20 || #0#10 || #0#16 || #0#10 || #0#20 || #0#20 || #0#18 || #0#18 || #0#22 || #0#16 || #0#16 || #0#24 || (let final dynamic #t2 = #0#0 as{ForNonNullableByDefault} self::method::T% in #0#6) || (let final dynamic #t3 = #0#0 as{ForNonNullableByDefault} self::method::T% in #C1 =={core::num::==}{(core::Object) → core::bool} #0#0 as{ForNonNullableByDefault} self::method::T%) || (let final dynamic #t4 = #0#0 as{ForNonNullableByDefault} core::int in #C2 =={core::num::==}{(core::Object) → core::bool} #0#0 as{ForNonNullableByDefault} core::int) || #0#10 || #0#12 || #0#4 || #0#14 || #0#16 || #0#2 || #0#18 || #0#20 || #0#10 || #0#16 || #0#10 || #0#20 || #0#20 || #0#18 || #0#18 || #0#22 || #0#16 || #0#16 || #0#24 || invalid-expression "Binary operator '==' requires receiver constant 'Object {}' of type 'Null', 'bool', 'int', 'double', or 'String', but was of type 'Object'.
- 'Object' is from 'dart:core'." =={core::Object::==}{(core::Object) → core::bool} #0#0 || (let final dynamic #t5 = #0#0 as{ForNonNullableByDefault} core::List<self::method::T%> in #C12 =={core::List::==}{(core::Object) → core::bool} #0#0 as{ForNonNullableByDefault} core::List<self::method::T%>) || #0#10 || #0#12 || #0#4 || #0#14 || #0#16 || #0#2 || #0#18 || #0#20 || #0#10 || #0#16 || #0#10 || #0#20 || #0#20 || #0#18 || #0#18 || #0#22 || #0#16 || #0#16 || #0#24 || #0#2) {
if(#0#2 || #0#4 || #0#2 && #0#4 || (let final dynamic #t1 = #0#0 as{ForNonNullableByDefault} self::method::T% in #0#6) || #C11 =={core::Object::==}{(core::Object) → core::bool} #0#0 || #0#10 || #0#12 || #0#4 || #0#14 || #0#16 || #0#2 || #0#18 || #0#20 || #0#10 || #0#16 || #0#10 || #0#20 || #0#20 || #0#18 || #0#18 || #0#22 || #0#16 || #0#16 || #0#24 || (let final dynamic #t2 = #0#0 as{ForNonNullableByDefault} self::method::T% in #0#6) || (let final dynamic #t3 = #0#0 as{ForNonNullableByDefault} self::method::T% in #C1 =={core::num::==}{(core::Object) → core::bool} #0#0 as{ForNonNullableByDefault} self::method::T%) || (let final dynamic #t4 = #0#0 as{ForNonNullableByDefault} core::int in #C2 =={core::num::==}{(core::Object) → core::bool} #0#0 as{ForNonNullableByDefault} core::int) || #0#10 || #0#12 || #0#4 || #0#14 || #0#16 || #0#2 || #0#18 || #0#20 || #0#10 || #0#16 || #0#10 || #0#20 || #0#20 || #0#18 || #0#18 || #0#22 || #0#16 || #0#16 || #0#24 || #0#18 || (let final dynamic #t5 = #0#0 as{ForNonNullableByDefault} core::List<self::method::T%> in #C12 =={core::List::==}{(core::Object) → core::bool} #0#0 as{ForNonNullableByDefault} core::List<self::method::T%>) || #0#10 || #0#12 || #0#4 || #0#14 || #0#16 || #0#2 || #0#18 || #0#20 || #0#10 || #0#16 || #0#10 || #0#20 || #0#20 || #0#18 || #0#18 || #0#22 || #0#16 || #0#16 || #0#24 || #0#2) {
{
let final invalid-type #t6 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns_binary.dart:81:12: Error: This couldn't be parsed.
case 1 ?? 2: // Error

View file

@ -240,17 +240,6 @@ library /*isNonNullableByDefault*/;
// case --o: // Error
// ^
//
// pkg/front_end/testcases/patterns/const_patterns_binary.dart:60:25: Error: Constant evaluation error:
// case const Object() == 2: // Error
// ^
// pkg/front_end/testcases/patterns/const_patterns_binary.dart:60:25: Context: Binary operator '==' requires receiver constant 'Object {}' of type 'Null', 'bool', 'int', 'double', or 'String', but was of type 'Object'.
// - 'Object' is from 'dart:core'.
// case const Object() == 2: // Error
// ^
// pkg/front_end/testcases/patterns/const_patterns_binary.dart:60:25: Context: While analyzing:
// case const Object() == 2: // Error
// ^
//
import self as self;
import "dart:core" as core;
@ -300,23 +289,20 @@ static method method<T extends core::Object? = dynamic>(dynamic o) → dynamic {
function ##0#24#initializer() → core::bool
return #C10 =={core::num::==}{(core::Object) → core::bool} #0#0;
late final synthesized core::bool #0#24 = ##0#24#initializer(){() → core::bool};
final const synthesized core::bool #0#28 = invalid-expression "Binary operator '==' requires receiver constant 'Object {}' of type 'Null', 'bool', 'int', 'double', or 'String', but was of type 'Object'.
- 'Object' is from 'dart:core'.";
final const synthesized invalid-type #0#33 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns_binary.dart:82:10: Error: Not a constant expression.
final const synthesized invalid-type #0#31 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns_binary.dart:82:10: Error: Not a constant expression.
case o++: // Error
^";
final const synthesized invalid-type #0#35 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns_binary.dart:83:10: Error: Not a constant expression.
final const synthesized invalid-type #0#33 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns_binary.dart:83:10: Error: Not a constant expression.
case o--: // Error
^";
final const synthesized invalid-type #0#37 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns_binary.dart:84:12: Error: Not a constant expression.
final const synthesized invalid-type #0#35 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns_binary.dart:84:12: Error: Not a constant expression.
case ++o: // Error
^";
final const synthesized invalid-type #0#39 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns_binary.dart:85:12: Error: Not a constant expression.
final const synthesized invalid-type #0#37 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns_binary.dart:85:12: Error: Not a constant expression.
case --o: // Error
^";
{
if(#0#2 || #0#4 || #0#2 && #0#4 || (let final self::method::T% #t1 = #0#0 as{ForNonNullableByDefault} self::method::T% in #0#6) || #C11 =={core::Object::==}{(core::Object) → core::bool} #0#0 || #0#10 || #0#12 || #0#4 || #0#14 || #0#16 || #0#2 || #0#18 || #0#20 || #0#10 || #0#16 || #0#10 || #0#20 || #0#20 || #0#18 || #0#18 || #0#22 || #0#16 || #0#16 || #0#24 || (let final self::method::T% #t2 = #0#0 as{ForNonNullableByDefault} self::method::T% in #0#6) || (let final self::method::T% #t3 = #0#0 as{ForNonNullableByDefault} self::method::T% in #C1 =={core::num::==}{(core::Object) → core::bool} #0#0 as{ForNonNullableByDefault} self::method::T%) || (let final core::int #t4 = #0#0 as{ForNonNullableByDefault} core::int in #C2 =={core::num::==}{(core::Object) → core::bool} #0#0 as{ForNonNullableByDefault} core::int) || #0#10 || #0#12 || #0#4 || #0#14 || #0#16 || #0#2 || #0#18 || #0#20 || #0#10 || #0#16 || #0#10 || #0#20 || #0#20 || #0#18 || #0#18 || #0#22 || #0#16 || #0#16 || #0#24 || invalid-expression "Binary operator '==' requires receiver constant 'Object {}' of type 'Null', 'bool', 'int', 'double', or 'String', but was of type 'Object'.
- 'Object' is from 'dart:core'." =={core::Object::==}{(core::Object) → core::bool} #0#0 || (let final core::List<self::method::T%> #t5 = #0#0 as{ForNonNullableByDefault} core::List<self::method::T%> in #C12 =={core::List::==}{(core::Object) → core::bool} #0#0 as{ForNonNullableByDefault} core::List<self::method::T%>) || #0#10 || #0#12 || #0#4 || #0#14 || #0#16 || #0#2 || #0#18 || #0#20 || #0#10 || #0#16 || #0#10 || #0#20 || #0#20 || #0#18 || #0#18 || #0#22 || #0#16 || #0#16 || #0#24 || #0#2) {
if(#0#2 || #0#4 || #0#2 && #0#4 || (let final self::method::T% #t1 = #0#0 as{ForNonNullableByDefault} self::method::T% in #0#6) || #C11 =={core::Object::==}{(core::Object) → core::bool} #0#0 || #0#10 || #0#12 || #0#4 || #0#14 || #0#16 || #0#2 || #0#18 || #0#20 || #0#10 || #0#16 || #0#10 || #0#20 || #0#20 || #0#18 || #0#18 || #0#22 || #0#16 || #0#16 || #0#24 || (let final self::method::T% #t2 = #0#0 as{ForNonNullableByDefault} self::method::T% in #0#6) || (let final self::method::T% #t3 = #0#0 as{ForNonNullableByDefault} self::method::T% in #C1 =={core::num::==}{(core::Object) → core::bool} #0#0 as{ForNonNullableByDefault} self::method::T%) || (let final core::int #t4 = #0#0 as{ForNonNullableByDefault} core::int in #C2 =={core::num::==}{(core::Object) → core::bool} #0#0 as{ForNonNullableByDefault} core::int) || #0#10 || #0#12 || #0#4 || #0#14 || #0#16 || #0#2 || #0#18 || #0#20 || #0#10 || #0#16 || #0#10 || #0#20 || #0#20 || #0#18 || #0#18 || #0#22 || #0#16 || #0#16 || #0#24 || #0#18 || (let final core::List<self::method::T%> #t5 = #0#0 as{ForNonNullableByDefault} core::List<self::method::T%> in #C12 =={core::List::==}{(core::Object) → core::bool} #0#0 as{ForNonNullableByDefault} core::List<self::method::T%>) || #0#10 || #0#12 || #0#4 || #0#14 || #0#16 || #0#2 || #0#18 || #0#20 || #0#10 || #0#16 || #0#10 || #0#20 || #0#20 || #0#18 || #0#18 || #0#22 || #0#16 || #0#16 || #0#24 || #0#2) {
{
let final invalid-type #t6 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns_binary.dart:81:12: Error: This couldn't be parsed.
case 1 ?? 2: // Error

View file

@ -0,0 +1,24 @@
// Copyright (c) 2023, 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 ExpansionTile {
const ExpansionTile({
this.expandedCrossAxisAlignment,
}) : assert(expandedCrossAxisAlignment != CrossAxisAlignment.baseline);
final CrossAxisAlignment? expandedCrossAxisAlignment;
}
enum CrossAxisAlignment {
start,
end,
center,
stretch,
baseline,
}
void main() {
print(const ExpansionTile(
expandedCrossAxisAlignment: CrossAxisAlignment.start));
}

View file

@ -0,0 +1,55 @@
library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
class ExpansionTile extends core::Object /*hasConstConstructor*/ {
final field self::CrossAxisAlignment? expandedCrossAxisAlignment;
const constructor •({self::CrossAxisAlignment? expandedCrossAxisAlignment = #C1}) → self::ExpansionTile
: self::ExpansionTile::expandedCrossAxisAlignment = expandedCrossAxisAlignment, assert(!(expandedCrossAxisAlignment =={core::Object::==}{(core::Object) → core::bool} #C4)), super core::Object::•()
;
}
class CrossAxisAlignment extends core::_Enum /*isEnum*/ {
static const field core::List<self::CrossAxisAlignment> values = #C17;
enum-element static const field self::CrossAxisAlignment start = #C7;
enum-element static const field self::CrossAxisAlignment end = #C10;
enum-element static const field self::CrossAxisAlignment center = #C13;
enum-element static const field self::CrossAxisAlignment stretch = #C16;
enum-element static const field self::CrossAxisAlignment baseline = #C4;
const constructor •(core::int #index, core::String #name) → self::CrossAxisAlignment
: super core::_Enum::•(#index, #name)
;
method _enumToString() → core::String
return "CrossAxisAlignment.${this.{core::_Enum::_name}{core::String}}";
}
static method main() → void {
core::print(#C18);
}
constants {
#C1 = null
#C2 = 4
#C3 = "baseline"
#C4 = self::CrossAxisAlignment {index:#C2, _name:#C3}
#C5 = 0
#C6 = "start"
#C7 = self::CrossAxisAlignment {index:#C5, _name:#C6}
#C8 = 1
#C9 = "end"
#C10 = self::CrossAxisAlignment {index:#C8, _name:#C9}
#C11 = 2
#C12 = "center"
#C13 = self::CrossAxisAlignment {index:#C11, _name:#C12}
#C14 = 3
#C15 = "stretch"
#C16 = self::CrossAxisAlignment {index:#C14, _name:#C15}
#C17 = <self::CrossAxisAlignment>[#C7, #C10, #C13, #C16, #C4]
#C18 = self::ExpansionTile {expandedCrossAxisAlignment:#C7}
}
Constructor coverage from constants:
org-dartlang-testcase:///issue51800.dart:
- CrossAxisAlignment. (from org-dartlang-testcase:///issue51800.dart:13:6)
- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
- ExpansionTile. (from org-dartlang-testcase:///issue51800.dart:6:9)

View file

@ -0,0 +1,55 @@
library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
class ExpansionTile extends core::Object /*hasConstConstructor*/ {
final field self::CrossAxisAlignment? expandedCrossAxisAlignment;
const constructor •({self::CrossAxisAlignment? expandedCrossAxisAlignment = #C1}) → self::ExpansionTile
: self::ExpansionTile::expandedCrossAxisAlignment = expandedCrossAxisAlignment, assert(!(expandedCrossAxisAlignment =={core::Object::==}{(core::Object) → core::bool} #C4)), super core::Object::•()
;
}
class CrossAxisAlignment extends core::_Enum /*isEnum*/ {
static const field core::List<self::CrossAxisAlignment> values = #C17;
enum-element static const field self::CrossAxisAlignment start = #C7;
enum-element static const field self::CrossAxisAlignment end = #C10;
enum-element static const field self::CrossAxisAlignment center = #C13;
enum-element static const field self::CrossAxisAlignment stretch = #C16;
enum-element static const field self::CrossAxisAlignment baseline = #C4;
const constructor •(core::int #index, core::String #name) → self::CrossAxisAlignment
: super core::_Enum::•(#index, #name)
;
method _enumToString() → core::String
return "CrossAxisAlignment.${this.{core::_Enum::_name}{core::String}}";
}
static method main() → void {
core::print(#C18);
}
constants {
#C1 = null
#C2 = 4
#C3 = "baseline"
#C4 = self::CrossAxisAlignment {index:#C2, _name:#C3}
#C5 = 0
#C6 = "start"
#C7 = self::CrossAxisAlignment {index:#C5, _name:#C6}
#C8 = 1
#C9 = "end"
#C10 = self::CrossAxisAlignment {index:#C8, _name:#C9}
#C11 = 2
#C12 = "center"
#C13 = self::CrossAxisAlignment {index:#C11, _name:#C12}
#C14 = 3
#C15 = "stretch"
#C16 = self::CrossAxisAlignment {index:#C14, _name:#C15}
#C17 = <self::CrossAxisAlignment>[#C7, #C10, #C13, #C16, #C4]
#C18 = self::ExpansionTile {expandedCrossAxisAlignment:#C7}
}
Constructor coverage from constants:
org-dartlang-testcase:///issue51800.dart:
- CrossAxisAlignment. (from org-dartlang-testcase:///issue51800.dart:13:6)
- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
- ExpansionTile. (from org-dartlang-testcase:///issue51800.dart:6:9)

View file

@ -0,0 +1,16 @@
class ExpansionTile {
const ExpansionTile({
this.expandedCrossAxisAlignment,
}) : assert(expandedCrossAxisAlignment != CrossAxisAlignment.baseline);
final CrossAxisAlignment? expandedCrossAxisAlignment;
}
enum CrossAxisAlignment {
start,
end,
center,
stretch,
baseline,
}
void main() {}

View file

@ -0,0 +1,16 @@
class ExpansionTile {
const ExpansionTile({
this.expandedCrossAxisAlignment,
}) : assert(expandedCrossAxisAlignment != CrossAxisAlignment.baseline);
final CrossAxisAlignment? expandedCrossAxisAlignment;
}
enum CrossAxisAlignment {
start,
end,
center,
stretch,
baseline,
}
void main() {}

View file

@ -0,0 +1,55 @@
library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
class ExpansionTile extends core::Object /*hasConstConstructor*/ {
final field self::CrossAxisAlignment? expandedCrossAxisAlignment;
const constructor •({self::CrossAxisAlignment? expandedCrossAxisAlignment = #C1}) → self::ExpansionTile
: self::ExpansionTile::expandedCrossAxisAlignment = expandedCrossAxisAlignment, assert(!(expandedCrossAxisAlignment =={core::Object::==}{(core::Object) → core::bool} #C4)), super core::Object::•()
;
}
class CrossAxisAlignment extends core::_Enum /*isEnum*/ {
static const field core::List<self::CrossAxisAlignment> values = #C17;
enum-element static const field self::CrossAxisAlignment start = #C7;
enum-element static const field self::CrossAxisAlignment end = #C10;
enum-element static const field self::CrossAxisAlignment center = #C13;
enum-element static const field self::CrossAxisAlignment stretch = #C16;
enum-element static const field self::CrossAxisAlignment baseline = #C4;
const constructor •(core::int #index, core::String #name) → self::CrossAxisAlignment
: super core::_Enum::•(#index, #name)
;
method _enumToString() → core::String
return "CrossAxisAlignment.${this.{core::_Enum::_name}{core::String}}";
}
static method main() → void {
core::print(#C18);
}
constants {
#C1 = null
#C2 = 4
#C3 = "baseline"
#C4 = self::CrossAxisAlignment {index:#C2, _name:#C3}
#C5 = 0
#C6 = "start"
#C7 = self::CrossAxisAlignment {index:#C5, _name:#C6}
#C8 = 1
#C9 = "end"
#C10 = self::CrossAxisAlignment {index:#C8, _name:#C9}
#C11 = 2
#C12 = "center"
#C13 = self::CrossAxisAlignment {index:#C11, _name:#C12}
#C14 = 3
#C15 = "stretch"
#C16 = self::CrossAxisAlignment {index:#C14, _name:#C15}
#C17 = <self::CrossAxisAlignment*>[#C7, #C10, #C13, #C16, #C4]
#C18 = self::ExpansionTile {expandedCrossAxisAlignment:#C7}
}
Constructor coverage from constants:
org-dartlang-testcase:///issue51800.dart:
- CrossAxisAlignment. (from org-dartlang-testcase:///issue51800.dart:13:6)
- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
- ExpansionTile. (from org-dartlang-testcase:///issue51800.dart:6:9)

View file

@ -0,0 +1,55 @@
library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
class ExpansionTile extends core::Object /*hasConstConstructor*/ {
final field self::CrossAxisAlignment? expandedCrossAxisAlignment;
const constructor •({self::CrossAxisAlignment? expandedCrossAxisAlignment = #C1}) → self::ExpansionTile
: self::ExpansionTile::expandedCrossAxisAlignment = expandedCrossAxisAlignment, assert(!(expandedCrossAxisAlignment =={core::Object::==}{(core::Object) → core::bool} #C4)), super core::Object::•()
;
}
class CrossAxisAlignment extends core::_Enum /*isEnum*/ {
static const field core::List<self::CrossAxisAlignment> values = #C17;
enum-element static const field self::CrossAxisAlignment start = #C7;
enum-element static const field self::CrossAxisAlignment end = #C10;
enum-element static const field self::CrossAxisAlignment center = #C13;
enum-element static const field self::CrossAxisAlignment stretch = #C16;
enum-element static const field self::CrossAxisAlignment baseline = #C4;
const constructor •(core::int #index, core::String #name) → self::CrossAxisAlignment
: super core::_Enum::•(#index, #name)
;
method _enumToString() → core::String
return "CrossAxisAlignment.${this.{core::_Enum::_name}{core::String}}";
}
static method main() → void {
core::print(#C18);
}
constants {
#C1 = null
#C2 = 4
#C3 = "baseline"
#C4 = self::CrossAxisAlignment {index:#C2, _name:#C3}
#C5 = 0
#C6 = "start"
#C7 = self::CrossAxisAlignment {index:#C5, _name:#C6}
#C8 = 1
#C9 = "end"
#C10 = self::CrossAxisAlignment {index:#C8, _name:#C9}
#C11 = 2
#C12 = "center"
#C13 = self::CrossAxisAlignment {index:#C11, _name:#C12}
#C14 = 3
#C15 = "stretch"
#C16 = self::CrossAxisAlignment {index:#C14, _name:#C15}
#C17 = <self::CrossAxisAlignment*>[#C7, #C10, #C13, #C16, #C4]
#C18 = self::ExpansionTile {expandedCrossAxisAlignment:#C7}
}
Constructor coverage from constants:
org-dartlang-testcase:///issue51800.dart:
- CrossAxisAlignment. (from org-dartlang-testcase:///issue51800.dart:13:6)
- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
- ExpansionTile. (from org-dartlang-testcase:///issue51800.dart:6:9)

View file

@ -0,0 +1,36 @@
library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
class ExpansionTile extends core::Object /*hasConstConstructor*/ {
final field self::CrossAxisAlignment? expandedCrossAxisAlignment;
const constructor •({self::CrossAxisAlignment? expandedCrossAxisAlignment = null}) → self::ExpansionTile
: self::ExpansionTile::expandedCrossAxisAlignment = expandedCrossAxisAlignment, assert(!(expandedCrossAxisAlignment =={core::Object::==}{(core::Object) → core::bool} self::CrossAxisAlignment::baseline)), super core::Object::•()
;
}
class CrossAxisAlignment extends core::_Enum /*isEnum*/ {
static const field core::List<self::CrossAxisAlignment> values = const <self::CrossAxisAlignment>[self::CrossAxisAlignment::start, self::CrossAxisAlignment::end, self::CrossAxisAlignment::center, self::CrossAxisAlignment::stretch, self::CrossAxisAlignment::baseline];
enum-element static const field self::CrossAxisAlignment start = const self::CrossAxisAlignment::•(0, "start");
enum-element static const field self::CrossAxisAlignment end = const self::CrossAxisAlignment::•(1, "end");
enum-element static const field self::CrossAxisAlignment center = const self::CrossAxisAlignment::•(2, "center");
enum-element static const field self::CrossAxisAlignment stretch = const self::CrossAxisAlignment::•(3, "stretch");
enum-element static const field self::CrossAxisAlignment baseline = const self::CrossAxisAlignment::•(4, "baseline");
const constructor •(core::int #index, core::String #name) → self::CrossAxisAlignment
: super core::_Enum::•(#index, #name)
;
method _enumToString() → core::String
return "CrossAxisAlignment.${this.{core::_Enum::_name}{core::String}}";
}
static method main() → void
;
Extra constant evaluation status:
Evaluated: StaticGet @ org-dartlang-testcase:///issue51800.dart:8:64 -> InstanceConstant(const CrossAxisAlignment{_Enum.index: 4, _Enum._name: "baseline"})
Evaluated: ListLiteral @ org-dartlang-testcase:///issue51800.dart:13:6 -> ListConstant(const <CrossAxisAlignment*>[const CrossAxisAlignment{_Enum.index: 0, _Enum._name: "start"}, const CrossAxisAlignment{_Enum.index: 1, _Enum._name: "end"}, const CrossAxisAlignment{_Enum.index: 2, _Enum._name: "center"}, const CrossAxisAlignment{_Enum.index: 3, _Enum._name: "stretch"}, const CrossAxisAlignment{_Enum.index: 4, _Enum._name: "baseline"}])
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue51800.dart:14:3 -> InstanceConstant(const CrossAxisAlignment{_Enum.index: 0, _Enum._name: "start"})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue51800.dart:15:3 -> InstanceConstant(const CrossAxisAlignment{_Enum.index: 1, _Enum._name: "end"})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue51800.dart:16:3 -> InstanceConstant(const CrossAxisAlignment{_Enum.index: 2, _Enum._name: "center"})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue51800.dart:17:3 -> InstanceConstant(const CrossAxisAlignment{_Enum.index: 3, _Enum._name: "stretch"})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue51800.dart:18:3 -> InstanceConstant(const CrossAxisAlignment{_Enum.index: 4, _Enum._name: "baseline"})
Extra constant evaluation: evaluated: 16, effectively constant: 7

View file

@ -0,0 +1,55 @@
library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
class ExpansionTile extends core::Object /*hasConstConstructor*/ {
final field self::CrossAxisAlignment? expandedCrossAxisAlignment;
const constructor •({self::CrossAxisAlignment? expandedCrossAxisAlignment = #C1}) → self::ExpansionTile
: self::ExpansionTile::expandedCrossAxisAlignment = expandedCrossAxisAlignment, assert(!(expandedCrossAxisAlignment =={core::Object::==}{(core::Object) → core::bool} #C4)), super core::Object::•()
;
}
class CrossAxisAlignment extends core::_Enum /*isEnum*/ {
static const field core::List<self::CrossAxisAlignment> values = #C17;
enum-element static const field self::CrossAxisAlignment start = #C7;
enum-element static const field self::CrossAxisAlignment end = #C10;
enum-element static const field self::CrossAxisAlignment center = #C13;
enum-element static const field self::CrossAxisAlignment stretch = #C16;
enum-element static const field self::CrossAxisAlignment baseline = #C4;
const constructor •(core::int #index, core::String #name) → self::CrossAxisAlignment
: super core::_Enum::•(#index, #name)
;
method _enumToString() → core::String
return "CrossAxisAlignment.${this.{core::_Enum::_name}{core::String}}";
}
static method main() → void {
core::print(#C18);
}
constants {
#C1 = null
#C2 = 4
#C3 = "baseline"
#C4 = self::CrossAxisAlignment {index:#C2, _name:#C3}
#C5 = 0
#C6 = "start"
#C7 = self::CrossAxisAlignment {index:#C5, _name:#C6}
#C8 = 1
#C9 = "end"
#C10 = self::CrossAxisAlignment {index:#C8, _name:#C9}
#C11 = 2
#C12 = "center"
#C13 = self::CrossAxisAlignment {index:#C11, _name:#C12}
#C14 = 3
#C15 = "stretch"
#C16 = self::CrossAxisAlignment {index:#C14, _name:#C15}
#C17 = <self::CrossAxisAlignment*>[#C7, #C10, #C13, #C16, #C4]
#C18 = self::ExpansionTile {expandedCrossAxisAlignment:#C7}
}
Constructor coverage from constants:
org-dartlang-testcase:///issue51800.dart:
- CrossAxisAlignment. (from org-dartlang-testcase:///issue51800.dart:13:6)
- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
- ExpansionTile. (from org-dartlang-testcase:///issue51800.dart:6:9)

View file

@ -0,0 +1,169 @@
// Copyright (c) 2023, 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 topLevel() {}
class Const {
const Const();
}
class A {
const A();
int get hashCode => super.hashCode + 1;
}
class B {
const B();
bool operator ==(Object other) => super == other;
}
class C {
const C();
int get hashCode => super.hashCode + 1;
bool operator ==(Object other) => super == other;
}
const a1 = A() == Const(); // Error
const a2 = Const() == A(); // Ok
const a3 = A() != Const(); // Error
const a4 = Const() != A(); // Ok
const a5 = A() == null; // Ok
const a6 = null == A(); // Ok
const a7 = A() != null; // Ok
const a8 = null != A(); // Ok
const b1 = B() == Const(); // Error
const b2 = Const() == B(); // Ok
const b3 = B() != Const(); // Error
const b4 = Const() != B(); // Ok
const b5 = B() == null; // Ok
const b6 = null == B(); // Ok
const b7 = B() != null; // Ok
const b8 = null != B(); // Ok
const c1 = C() == Const(); // Error
const c2 = Const() == C(); // Ok
const c3 = C() != Const(); // Error
const c4 = Const() != C(); // Ok
const c5 = C() == null; // Ok
const c6 = null == C(); // Ok
const c7 = C() != null; // Ok
const c8 = null != C(); // Ok
const d1 = true == Const(); // Ok
const d2 = Const() == true; // Ok
const d3 = true != Const(); // Ok
const d4 = Const() != true; // Ok
const e1 = 0 == Const(); // Ok
const e2 = Const() == 0; // Ok
const e3 = 0 != Const(); // Ok
const e4 = Const() != 0; // Ok
const f1 = '' == Const(); // Ok
const f2 = Const() == ''; // Ok
const f3 = '' != Const(); // Ok
const f4 = Const() != ''; // Ok
const g1 = #a == Const(); // Ok
const g2 = Const() == #a; // Ok
const g3 = #a != Const(); // Ok
const g4 = Const() != #a; // Ok
const h1 = const Symbol('b') == Const(); // Ok
const h2 = Const() == const Symbol('b'); // Ok
const h3 = const Symbol('b') != Const(); // Ok
const h4 = Const() != const Symbol('b'); // Ok
const i1 = Object == Const(); // Ok
const i2 = Const() == Object; // Ok
const i3 = Object != Const(); // Ok
const i4 = Const() != Object; // Ok
const j1 = [] == Const(); // Ok
const j2 = Const() == []; // Ok
const j3 = [] != Const(); // Ok
const j4 = Const() != []; // Ok
const k1 = {} == Const(); // Ok
const k2 = Const() == {}; // Ok
const k3 = {} != Const(); // Ok
const k4 = Const() != {}; // Ok
const l1 = {0} == Const(); // Ok
const l2 = Const() == {0}; // Ok
const l3 = {0} != Const(); // Ok
const l4 = Const() != {0}; // Ok
const n1 = topLevel == Const(); // Ok
const n2 = Const() == topLevel; // Ok
const n3 = topLevel != Const(); // Ok
const n4 = Const() != topLevel; // Ok
const o1 = 0.5 == Const(); // Ok
const o2 = Const() == 0.5; // Ok
const o3 = 0.5 != Const(); // Ok
const o4 = Const() != 0.5; // Ok
const set1 = {
null, // Ok
Const(), // Ok
true, // Ok
0, // Ok
'', // Ok
#a, // Ok
const Symbol('b'), // Ok
Object, // Ok
[], // Ok
{}, // Ok
{0}, // Ok
topLevel, // Ok
};
const set2 = {
A(), // Error
};
const set3 = {
B(), // Error
};
const set4 = {
C(), // Error
};
const set5 = {
0.5, // Error,
};
const map1 = {
null: 0, // Ok
Const(): 0, // Ok
true: 0, // Ok
0: 0, // Ok
'': 0, // Ok
#a: 0, // Ok
const Symbol('b'): 0, // Ok
Object: 0, // Ok
[]: 0, // Ok
{}: 0, // Ok
{0}: 0, // Ok
topLevel: 0, // Ok
};
const map2 = {
A(): 0, // Error
};
const map3 = {
B(): 0, // Error
};
const map4 = {
C(): 0, // Error
};
const map5 = {
0.5: 0, // Error,
};

View file

@ -0,0 +1,305 @@
library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:27:16: Error: Constant evaluation error:
// const a1 = A() == Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:27:16: Context: Binary operator '==' requires receiver constant 'A {}' of a type with primitive equality or type 'double', but was of type 'A'.
// - 'A' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// const a1 = A() == Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:27:7: Context: While analyzing:
// const a1 = A() == Const(); // Error
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:29:16: Error: Constant evaluation error:
// const a3 = A() != Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:29:16: Context: Binary operator '==' requires receiver constant 'A {}' of a type with primitive equality or type 'double', but was of type 'A'.
// - 'A' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// const a3 = A() != Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:29:7: Context: While analyzing:
// const a3 = A() != Const(); // Error
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:36:16: Error: Constant evaluation error:
// const b1 = B() == Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:36:16: Context: Binary operator '==' requires receiver constant 'B {}' of a type with primitive equality or type 'double', but was of type 'B'.
// - 'B' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// const b1 = B() == Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:36:7: Context: While analyzing:
// const b1 = B() == Const(); // Error
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:38:16: Error: Constant evaluation error:
// const b3 = B() != Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:38:16: Context: Binary operator '==' requires receiver constant 'B {}' of a type with primitive equality or type 'double', but was of type 'B'.
// - 'B' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// const b3 = B() != Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:38:7: Context: While analyzing:
// const b3 = B() != Const(); // Error
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:45:16: Error: Constant evaluation error:
// const c1 = C() == Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:45:16: Context: Binary operator '==' requires receiver constant 'C {}' of a type with primitive equality or type 'double', but was of type 'C'.
// - 'C' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// const c1 = C() == Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:45:7: Context: While analyzing:
// const c1 = C() == Const(); // Error
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:47:16: Error: Constant evaluation error:
// const c3 = C() != Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:47:16: Context: Binary operator '==' requires receiver constant 'C {}' of a type with primitive equality or type 'double', but was of type 'C'.
// - 'C' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// const c3 = C() != Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:47:7: Context: While analyzing:
// const c3 = C() != Const(); // Error
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:124:14: Error: Constant evaluation error:
// const set2 = {
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:125:3: Context: The element 'A {}' does not have a primitive equality.
// - 'A' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// A(), // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:124:7: Context: While analyzing:
// const set2 = {
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:128:14: Error: Constant evaluation error:
// const set3 = {
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:129:3: Context: The element 'B {}' does not have a primitive equality.
// - 'B' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// B(), // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:128:7: Context: While analyzing:
// const set3 = {
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:132:14: Error: Constant evaluation error:
// const set4 = {
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:133:3: Context: The element 'C {}' does not have a primitive equality.
// - 'C' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// C(), // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:132:7: Context: While analyzing:
// const set4 = {
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:136:14: Error: Constant evaluation error:
// const set5 = {
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:137:3: Context: The element '0.5' does not have a primitive equality.
// 0.5, // Error,
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:136:7: Context: While analyzing:
// const set5 = {
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:155:14: Error: Constant evaluation error:
// const map2 = {
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:156:3: Context: The key 'A {}' does not have a primitive equality.
// - 'A' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// A(): 0, // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:155:7: Context: While analyzing:
// const map2 = {
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:159:14: Error: Constant evaluation error:
// const map3 = {
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:160:3: Context: The key 'B {}' does not have a primitive equality.
// - 'B' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// B(): 0, // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:159:7: Context: While analyzing:
// const map3 = {
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:163:14: Error: Constant evaluation error:
// const map4 = {
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:164:3: Context: The key 'C {}' does not have a primitive equality.
// - 'C' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// C(): 0, // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:163:7: Context: While analyzing:
// const map4 = {
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:167:14: Error: Constant evaluation error:
// const map5 = {
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:168:3: Context: The key '0.5' does not have a primitive equality.
// 0.5: 0, // Error,
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:167:7: Context: While analyzing:
// const map5 = {
// ^
//
import self as self;
import "dart:core" as core;
class Const extends core::Object /*hasConstConstructor*/ {
const constructor •() → self::Const
: super core::Object::•()
;
}
class A extends core::Object /*hasConstConstructor*/ {
const constructor •() → self::A
: super core::Object::•()
;
get hashCode() → core::int
return super.{core::Object::hashCode}.{core::num::+}(1){(core::num) → core::int};
}
class B extends core::Object /*hasConstConstructor*/ {
const constructor •() → self::B
: super core::Object::•()
;
operator ==(core::Object other) → core::bool
return super.{core::Object::==}(other);
}
class C extends core::Object /*hasConstConstructor*/ {
const constructor •() → self::C
: super core::Object::•()
;
get hashCode() → core::int
return super.{core::Object::hashCode}.{core::num::+}(1){(core::num) → core::int};
operator ==(core::Object other) → core::bool
return super.{core::Object::==}(other);
}
static const field core::bool a1 = invalid-expression "Binary operator '==' requires receiver constant 'A {}' of a type with primitive equality or type 'double', but was of type 'A'.
- 'A' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::bool a2 = #C1;
static const field core::bool a3 = invalid-expression "Binary operator '==' requires receiver constant 'A {}' of a type with primitive equality or type 'double', but was of type 'A'.
- 'A' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::bool a4 = #C2;
static const field core::bool a5 = #C1;
static const field core::bool a6 = #C1;
static const field core::bool a7 = #C2;
static const field core::bool a8 = #C2;
static const field core::bool b1 = invalid-expression "Binary operator '==' requires receiver constant 'B {}' of a type with primitive equality or type 'double', but was of type 'B'.
- 'B' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::bool b2 = #C1;
static const field core::bool b3 = invalid-expression "Binary operator '==' requires receiver constant 'B {}' of a type with primitive equality or type 'double', but was of type 'B'.
- 'B' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::bool b4 = #C2;
static const field core::bool b5 = #C1;
static const field core::bool b6 = #C1;
static const field core::bool b7 = #C2;
static const field core::bool b8 = #C2;
static const field core::bool c1 = invalid-expression "Binary operator '==' requires receiver constant 'C {}' of a type with primitive equality or type 'double', but was of type 'C'.
- 'C' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::bool c2 = #C1;
static const field core::bool c3 = invalid-expression "Binary operator '==' requires receiver constant 'C {}' of a type with primitive equality or type 'double', but was of type 'C'.
- 'C' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::bool c4 = #C2;
static const field core::bool c5 = #C1;
static const field core::bool c6 = #C1;
static const field core::bool c7 = #C2;
static const field core::bool c8 = #C2;
static const field core::bool d1 = #C1;
static const field core::bool d2 = #C1;
static const field core::bool d3 = #C2;
static const field core::bool d4 = #C2;
static const field core::bool e1 = #C1;
static const field core::bool e2 = #C1;
static const field core::bool e3 = #C2;
static const field core::bool e4 = #C2;
static const field core::bool f1 = #C1;
static const field core::bool f2 = #C1;
static const field core::bool f3 = #C2;
static const field core::bool f4 = #C2;
static const field core::bool g1 = #C1;
static const field core::bool g2 = #C1;
static const field core::bool g3 = #C2;
static const field core::bool g4 = #C2;
static const field core::bool h1 = #C1;
static const field core::bool h2 = #C1;
static const field core::bool h3 = #C2;
static const field core::bool h4 = #C2;
static const field core::bool i1 = #C1;
static const field core::bool i2 = #C1;
static const field core::bool i3 = #C2;
static const field core::bool i4 = #C2;
static const field core::bool j1 = #C1;
static const field core::bool j2 = #C1;
static const field core::bool j3 = #C2;
static const field core::bool j4 = #C2;
static const field core::bool k1 = #C1;
static const field core::bool k2 = #C1;
static const field core::bool k3 = #C2;
static const field core::bool k4 = #C2;
static const field core::bool l1 = #C1;
static const field core::bool l2 = #C1;
static const field core::bool l3 = #C2;
static const field core::bool l4 = #C2;
static const field core::bool n1 = #C1;
static const field core::bool n2 = #C1;
static const field core::bool n3 = #C2;
static const field core::bool n4 = #C2;
static const field core::bool o1 = #C1;
static const field core::bool o2 = #C1;
static const field core::bool o3 = #C2;
static const field core::bool o4 = #C2;
static const field core::Set<core::Object?> set1 = #C14;
static const field core::Set<self::A> set2 = invalid-expression "The element 'A {}' does not have a primitive equality.
- 'A' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::Set<self::B> set3 = invalid-expression "The element 'B {}' does not have a primitive equality.
- 'B' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::Set<self::C> set4 = invalid-expression "The element 'C {}' does not have a primitive equality.
- 'C' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::Set<core::double> set5 = invalid-expression "The element '0.5' does not have a primitive equality.";
static const field core::Map<core::Object?, core::int> map1 = #C15;
static const field core::Map<self::A, core::int> map2 = invalid-expression "The key 'A {}' does not have a primitive equality.
- 'A' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::Map<self::B, core::int> map3 = invalid-expression "The key 'B {}' does not have a primitive equality.
- 'B' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::Map<self::C, core::int> map4 = invalid-expression "The key 'C {}' does not have a primitive equality.
- 'C' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::Map<core::double, core::int> map5 = invalid-expression "The key '0.5' does not have a primitive equality.";
static method topLevel() → void {}
constants {
#C1 = false
#C2 = true
#C3 = null
#C4 = self::Const {}
#C5 = 0
#C6 = ""
#C7 = #a
#C8 = #b
#C9 = TypeLiteralConstant(core::Object)
#C10 = <dynamic>[]
#C11 = <dynamic, dynamic>{}
#C12 = <core::int>{#C5}
#C13 = static-tearoff self::topLevel
#C14 = <core::Object?>{#C3, #C4, #C2, #C5, #C6, #C7, #C8, #C9, #C10, #C11, #C12, #C13}
#C15 = <core::Object?, core::int>{#C3:#C5, #C4:#C5, #C2:#C5, #C5:#C5, #C6:#C5, #C7:#C5, #C8:#C5, #C9:#C5, #C10:#C5, #C11:#C5, #C12:#C5, #C13:#C5}
}
Constructor coverage from constants:
org-dartlang-testcase:///primitive_equality.dart:
- A. (from org-dartlang-testcase:///primitive_equality.dart:12:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
- Const. (from org-dartlang-testcase:///primitive_equality.dart:8:9)
- B. (from org-dartlang-testcase:///primitive_equality.dart:17:9)
- C. (from org-dartlang-testcase:///primitive_equality.dart:22:9)

View file

@ -0,0 +1,305 @@
library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:27:16: Error: Constant evaluation error:
// const a1 = A() == Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:27:16: Context: Binary operator '==' requires receiver constant 'A {}' of a type with primitive equality or type 'double', but was of type 'A'.
// - 'A' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// const a1 = A() == Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:27:7: Context: While analyzing:
// const a1 = A() == Const(); // Error
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:29:16: Error: Constant evaluation error:
// const a3 = A() != Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:29:16: Context: Binary operator '==' requires receiver constant 'A {}' of a type with primitive equality or type 'double', but was of type 'A'.
// - 'A' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// const a3 = A() != Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:29:7: Context: While analyzing:
// const a3 = A() != Const(); // Error
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:36:16: Error: Constant evaluation error:
// const b1 = B() == Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:36:16: Context: Binary operator '==' requires receiver constant 'B {}' of a type with primitive equality or type 'double', but was of type 'B'.
// - 'B' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// const b1 = B() == Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:36:7: Context: While analyzing:
// const b1 = B() == Const(); // Error
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:38:16: Error: Constant evaluation error:
// const b3 = B() != Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:38:16: Context: Binary operator '==' requires receiver constant 'B {}' of a type with primitive equality or type 'double', but was of type 'B'.
// - 'B' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// const b3 = B() != Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:38:7: Context: While analyzing:
// const b3 = B() != Const(); // Error
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:45:16: Error: Constant evaluation error:
// const c1 = C() == Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:45:16: Context: Binary operator '==' requires receiver constant 'C {}' of a type with primitive equality or type 'double', but was of type 'C'.
// - 'C' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// const c1 = C() == Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:45:7: Context: While analyzing:
// const c1 = C() == Const(); // Error
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:47:16: Error: Constant evaluation error:
// const c3 = C() != Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:47:16: Context: Binary operator '==' requires receiver constant 'C {}' of a type with primitive equality or type 'double', but was of type 'C'.
// - 'C' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// const c3 = C() != Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:47:7: Context: While analyzing:
// const c3 = C() != Const(); // Error
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:124:14: Error: Constant evaluation error:
// const set2 = {
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:125:3: Context: The element 'A {}' does not have a primitive equality.
// - 'A' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// A(), // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:124:7: Context: While analyzing:
// const set2 = {
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:128:14: Error: Constant evaluation error:
// const set3 = {
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:129:3: Context: The element 'B {}' does not have a primitive equality.
// - 'B' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// B(), // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:128:7: Context: While analyzing:
// const set3 = {
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:132:14: Error: Constant evaluation error:
// const set4 = {
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:133:3: Context: The element 'C {}' does not have a primitive equality.
// - 'C' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// C(), // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:132:7: Context: While analyzing:
// const set4 = {
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:136:14: Error: Constant evaluation error:
// const set5 = {
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:137:3: Context: The element '0.5' does not have a primitive equality.
// 0.5, // Error,
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:136:7: Context: While analyzing:
// const set5 = {
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:155:14: Error: Constant evaluation error:
// const map2 = {
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:156:3: Context: The key 'A {}' does not have a primitive equality.
// - 'A' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// A(): 0, // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:155:7: Context: While analyzing:
// const map2 = {
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:159:14: Error: Constant evaluation error:
// const map3 = {
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:160:3: Context: The key 'B {}' does not have a primitive equality.
// - 'B' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// B(): 0, // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:159:7: Context: While analyzing:
// const map3 = {
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:163:14: Error: Constant evaluation error:
// const map4 = {
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:164:3: Context: The key 'C {}' does not have a primitive equality.
// - 'C' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// C(): 0, // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:163:7: Context: While analyzing:
// const map4 = {
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:167:14: Error: Constant evaluation error:
// const map5 = {
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:168:3: Context: The key '0.5' does not have a primitive equality.
// 0.5: 0, // Error,
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:167:7: Context: While analyzing:
// const map5 = {
// ^
//
import self as self;
import "dart:core" as core;
class Const extends core::Object /*hasConstConstructor*/ {
const constructor •() → self::Const
: super core::Object::•()
;
}
class A extends core::Object /*hasConstConstructor*/ {
const constructor •() → self::A
: super core::Object::•()
;
get hashCode() → core::int
return super.{core::Object::hashCode}.{core::num::+}(1){(core::num) → core::int};
}
class B extends core::Object /*hasConstConstructor*/ {
const constructor •() → self::B
: super core::Object::•()
;
operator ==(core::Object other) → core::bool
return super.{core::Object::==}(other);
}
class C extends core::Object /*hasConstConstructor*/ {
const constructor •() → self::C
: super core::Object::•()
;
get hashCode() → core::int
return super.{core::Object::hashCode}.{core::num::+}(1){(core::num) → core::int};
operator ==(core::Object other) → core::bool
return super.{core::Object::==}(other);
}
static const field core::bool a1 = invalid-expression "Binary operator '==' requires receiver constant 'A {}' of a type with primitive equality or type 'double', but was of type 'A'.
- 'A' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::bool a2 = #C1;
static const field core::bool a3 = invalid-expression "Binary operator '==' requires receiver constant 'A {}' of a type with primitive equality or type 'double', but was of type 'A'.
- 'A' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::bool a4 = #C2;
static const field core::bool a5 = #C1;
static const field core::bool a6 = #C1;
static const field core::bool a7 = #C2;
static const field core::bool a8 = #C2;
static const field core::bool b1 = invalid-expression "Binary operator '==' requires receiver constant 'B {}' of a type with primitive equality or type 'double', but was of type 'B'.
- 'B' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::bool b2 = #C1;
static const field core::bool b3 = invalid-expression "Binary operator '==' requires receiver constant 'B {}' of a type with primitive equality or type 'double', but was of type 'B'.
- 'B' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::bool b4 = #C2;
static const field core::bool b5 = #C1;
static const field core::bool b6 = #C1;
static const field core::bool b7 = #C2;
static const field core::bool b8 = #C2;
static const field core::bool c1 = invalid-expression "Binary operator '==' requires receiver constant 'C {}' of a type with primitive equality or type 'double', but was of type 'C'.
- 'C' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::bool c2 = #C1;
static const field core::bool c3 = invalid-expression "Binary operator '==' requires receiver constant 'C {}' of a type with primitive equality or type 'double', but was of type 'C'.
- 'C' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::bool c4 = #C2;
static const field core::bool c5 = #C1;
static const field core::bool c6 = #C1;
static const field core::bool c7 = #C2;
static const field core::bool c8 = #C2;
static const field core::bool d1 = #C1;
static const field core::bool d2 = #C1;
static const field core::bool d3 = #C2;
static const field core::bool d4 = #C2;
static const field core::bool e1 = #C1;
static const field core::bool e2 = #C1;
static const field core::bool e3 = #C2;
static const field core::bool e4 = #C2;
static const field core::bool f1 = #C1;
static const field core::bool f2 = #C1;
static const field core::bool f3 = #C2;
static const field core::bool f4 = #C2;
static const field core::bool g1 = #C1;
static const field core::bool g2 = #C1;
static const field core::bool g3 = #C2;
static const field core::bool g4 = #C2;
static const field core::bool h1 = #C1;
static const field core::bool h2 = #C1;
static const field core::bool h3 = #C2;
static const field core::bool h4 = #C2;
static const field core::bool i1 = #C1;
static const field core::bool i2 = #C1;
static const field core::bool i3 = #C2;
static const field core::bool i4 = #C2;
static const field core::bool j1 = #C1;
static const field core::bool j2 = #C1;
static const field core::bool j3 = #C2;
static const field core::bool j4 = #C2;
static const field core::bool k1 = #C1;
static const field core::bool k2 = #C1;
static const field core::bool k3 = #C2;
static const field core::bool k4 = #C2;
static const field core::bool l1 = #C1;
static const field core::bool l2 = #C1;
static const field core::bool l3 = #C2;
static const field core::bool l4 = #C2;
static const field core::bool n1 = #C1;
static const field core::bool n2 = #C1;
static const field core::bool n3 = #C2;
static const field core::bool n4 = #C2;
static const field core::bool o1 = #C1;
static const field core::bool o2 = #C1;
static const field core::bool o3 = #C2;
static const field core::bool o4 = #C2;
static const field core::Set<core::Object?> set1 = #C14;
static const field core::Set<self::A> set2 = invalid-expression "The element 'A {}' does not have a primitive equality.
- 'A' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::Set<self::B> set3 = invalid-expression "The element 'B {}' does not have a primitive equality.
- 'B' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::Set<self::C> set4 = invalid-expression "The element 'C {}' does not have a primitive equality.
- 'C' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::Set<core::double> set5 = invalid-expression "The element '0.5' does not have a primitive equality.";
static const field core::Map<core::Object?, core::int> map1 = #C15;
static const field core::Map<self::A, core::int> map2 = invalid-expression "The key 'A {}' does not have a primitive equality.
- 'A' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::Map<self::B, core::int> map3 = invalid-expression "The key 'B {}' does not have a primitive equality.
- 'B' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::Map<self::C, core::int> map4 = invalid-expression "The key 'C {}' does not have a primitive equality.
- 'C' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::Map<core::double, core::int> map5 = invalid-expression "The key '0.5' does not have a primitive equality.";
static method topLevel() → void {}
constants {
#C1 = false
#C2 = true
#C3 = null
#C4 = self::Const {}
#C5 = 0
#C6 = ""
#C7 = #a
#C8 = #b
#C9 = TypeLiteralConstant(core::Object)
#C10 = <dynamic>[]
#C11 = <dynamic, dynamic>{}
#C12 = <core::int>{#C5}
#C13 = static-tearoff self::topLevel
#C14 = <core::Object?>{#C3, #C4, #C2, #C5, #C6, #C7, #C8, #C9, #C10, #C11, #C12, #C13}
#C15 = <core::Object?, core::int>{#C3:#C5, #C4:#C5, #C2:#C5, #C5:#C5, #C6:#C5, #C7:#C5, #C8:#C5, #C9:#C5, #C10:#C5, #C11:#C5, #C12:#C5, #C13:#C5}
}
Constructor coverage from constants:
org-dartlang-testcase:///primitive_equality.dart:
- A. (from org-dartlang-testcase:///primitive_equality.dart:12:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
- Const. (from org-dartlang-testcase:///primitive_equality.dart:8:9)
- B. (from org-dartlang-testcase:///primitive_equality.dart:17:9)
- C. (from org-dartlang-testcase:///primitive_equality.dart:22:9)

View file

@ -0,0 +1,142 @@
void topLevel() {}
class Const {
const Const();
}
class A {
const A();
int get hashCode => super.hashCode + 1;
}
class B {
const B();
bool operator ==(Object other) => super == other;
}
class C {
const C();
int get hashCode => super.hashCode + 1;
bool operator ==(Object other) => super == other;
}
const a1 = A() == Const();
const a2 = Const() == A();
const a3 = A() != Const();
const a4 = Const() != A();
const a5 = A() == null;
const a6 = null == A();
const a7 = A() != null;
const a8 = null != A();
const b1 = B() == Const();
const b2 = Const() == B();
const b3 = B() != Const();
const b4 = Const() != B();
const b5 = B() == null;
const b6 = null == B();
const b7 = B() != null;
const b8 = null != B();
const c1 = C() == Const();
const c2 = Const() == C();
const c3 = C() != Const();
const c4 = Const() != C();
const c5 = C() == null;
const c6 = null == C();
const c7 = C() != null;
const c8 = null != C();
const d1 = true == Const();
const d2 = Const() == true;
const d3 = true != Const();
const d4 = Const() != true;
const e1 = 0 == Const();
const e2 = Const() == 0;
const e3 = 0 != Const();
const e4 = Const() != 0;
const f1 = '' == Const();
const f2 = Const() == '';
const f3 = '' != Const();
const f4 = Const() != '';
const g1 = #a == Const();
const g2 = Const() == #a;
const g3 = #a != Const();
const g4 = Const() != #a;
const h1 = const Symbol('b') == Const();
const h2 = Const() == const Symbol('b');
const h3 = const Symbol('b') != Const();
const h4 = Const() != const Symbol('b');
const i1 = Object == Const();
const i2 = Const() == Object;
const i3 = Object != Const();
const i4 = Const() != Object;
const j1 = [] == Const();
const j2 = Const() == [];
const j3 = [] != Const();
const j4 = Const() != [];
const k1 = {} == Const();
const k2 = Const() == {};
const k3 = {} != Const();
const k4 = Const() != {};
const l1 = {0} == Const();
const l2 = Const() == {0};
const l3 = {0} != Const();
const l4 = Const() != {0};
const n1 = topLevel == Const();
const n2 = Const() == topLevel;
const n3 = topLevel != Const();
const n4 = Const() != topLevel;
const o1 = 0.5 == Const();
const o2 = Const() == 0.5;
const o3 = 0.5 != Const();
const o4 = Const() != 0.5;
const set1 = {
null,
Const(),
true,
0,
'',
#a,
const Symbol('b'),
Object,
[],
{},
{0},
topLevel,
};
const set2 = {
A(),
};
const set3 = {
B(),
};
const set4 = {
C(),
};
const set5 = {
0.5,
};
const map1 = {
null: 0,
Const(): 0,
true: 0,
0: 0,
'': 0,
#a: 0,
const Symbol('b'): 0,
Object: 0,
[]: 0,
{}: 0,
{0}: 0,
topLevel: 0,
};
const map2 = {
A(): 0,
};
const map3 = {
B(): 0,
};
const map4 = {
C(): 0,
};
const map5 = {
0.5: 0,
};

View file

@ -0,0 +1,141 @@
class A {
const A();
int get hashCode => super.hashCode + 1;
}
class B {
bool operator ==(Object other) => super == other;
const B();
}
class C {
bool operator ==(Object other) => super == other;
const C();
int get hashCode => super.hashCode + 1;
}
class Const {
const Const();
}
const a1 = A() == Const();
const a2 = Const() == A();
const a3 = A() != Const();
const a4 = Const() != A();
const a5 = A() == null;
const a6 = null == A();
const a7 = A() != null;
const a8 = null != A();
const b1 = B() == Const();
const b2 = Const() == B();
const b3 = B() != Const();
const b4 = Const() != B();
const b5 = B() == null;
const b6 = null == B();
const b7 = B() != null;
const b8 = null != B();
const c1 = C() == Const();
const c2 = Const() == C();
const c3 = C() != Const();
const c4 = Const() != C();
const c5 = C() == null;
const c6 = null == C();
const c7 = C() != null;
const c8 = null != C();
const d1 = true == Const();
const d2 = Const() == true;
const d3 = true != Const();
const d4 = Const() != true;
const e1 = 0 == Const();
const e2 = Const() == 0;
const e3 = 0 != Const();
const e4 = Const() != 0;
const f1 = '' == Const();
const f2 = Const() == '';
const f3 = '' != Const();
const f4 = Const() != '';
const g1 = #a == Const();
const g2 = Const() == #a;
const g3 = #a != Const();
const g4 = Const() != #a;
const h1 = const Symbol('b') == Const();
const h2 = Const() == const Symbol('b');
const h3 = const Symbol('b') != Const();
const h4 = Const() != const Symbol('b');
const i1 = Object == Const();
const i2 = Const() == Object;
const i3 = Object != Const();
const i4 = Const() != Object;
const j1 = [] == Const();
const j2 = Const() == [];
const j3 = [] != Const();
const j4 = Const() != [];
const k1 = {} == Const();
const k2 = Const() == {};
const k3 = {} != Const();
const k4 = Const() != {};
const l1 = {0} == Const();
const l2 = Const() == {0};
const l3 = {0} != Const();
const l4 = Const() != {0};
const map1 = {
null: 0,
Const(): 0,
true: 0,
0: 0,
'': 0,
#a: 0,
const Symbol('b'): 0,
Object: 0,
[]: 0,
{}: 0,
{0}: 0,
topLevel: 0,
};
const map2 = {
A(): 0,
};
const map3 = {
B(): 0,
};
const map4 = {
C(): 0,
};
const map5 = {
0.5: 0,
};
const n1 = topLevel == Const();
const n2 = Const() == topLevel;
const n3 = topLevel != Const();
const n4 = Const() != topLevel;
const o1 = 0.5 == Const();
const o2 = Const() == 0.5;
const o3 = 0.5 != Const();
const o4 = Const() != 0.5;
const set1 = {
null,
Const(),
true,
0,
'',
#a,
const Symbol('b'),
Object,
[],
{},
{0},
topLevel,
};
const set2 = {
A(),
};
const set3 = {
B(),
};
const set4 = {
C(),
};
const set5 = {
0.5,
};
void topLevel() {}

View file

@ -0,0 +1,305 @@
library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:27:16: Error: Constant evaluation error:
// const a1 = A() == Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:27:16: Context: Binary operator '==' requires receiver constant 'A {}' of a type with primitive equality or type 'double', but was of type 'A'.
// - 'A' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// const a1 = A() == Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:27:7: Context: While analyzing:
// const a1 = A() == Const(); // Error
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:29:16: Error: Constant evaluation error:
// const a3 = A() != Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:29:16: Context: Binary operator '==' requires receiver constant 'A {}' of a type with primitive equality or type 'double', but was of type 'A'.
// - 'A' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// const a3 = A() != Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:29:7: Context: While analyzing:
// const a3 = A() != Const(); // Error
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:36:16: Error: Constant evaluation error:
// const b1 = B() == Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:36:16: Context: Binary operator '==' requires receiver constant 'B {}' of a type with primitive equality or type 'double', but was of type 'B'.
// - 'B' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// const b1 = B() == Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:36:7: Context: While analyzing:
// const b1 = B() == Const(); // Error
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:38:16: Error: Constant evaluation error:
// const b3 = B() != Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:38:16: Context: Binary operator '==' requires receiver constant 'B {}' of a type with primitive equality or type 'double', but was of type 'B'.
// - 'B' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// const b3 = B() != Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:38:7: Context: While analyzing:
// const b3 = B() != Const(); // Error
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:45:16: Error: Constant evaluation error:
// const c1 = C() == Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:45:16: Context: Binary operator '==' requires receiver constant 'C {}' of a type with primitive equality or type 'double', but was of type 'C'.
// - 'C' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// const c1 = C() == Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:45:7: Context: While analyzing:
// const c1 = C() == Const(); // Error
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:47:16: Error: Constant evaluation error:
// const c3 = C() != Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:47:16: Context: Binary operator '==' requires receiver constant 'C {}' of a type with primitive equality or type 'double', but was of type 'C'.
// - 'C' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// const c3 = C() != Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:47:7: Context: While analyzing:
// const c3 = C() != Const(); // Error
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:124:14: Error: Constant evaluation error:
// const set2 = {
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:125:3: Context: The element 'A {}' does not have a primitive equality.
// - 'A' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// A(), // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:124:7: Context: While analyzing:
// const set2 = {
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:128:14: Error: Constant evaluation error:
// const set3 = {
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:129:3: Context: The element 'B {}' does not have a primitive equality.
// - 'B' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// B(), // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:128:7: Context: While analyzing:
// const set3 = {
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:132:14: Error: Constant evaluation error:
// const set4 = {
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:133:3: Context: The element 'C {}' does not have a primitive equality.
// - 'C' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// C(), // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:132:7: Context: While analyzing:
// const set4 = {
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:136:14: Error: Constant evaluation error:
// const set5 = {
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:137:3: Context: The element '0.5' does not have a primitive equality.
// 0.5, // Error,
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:136:7: Context: While analyzing:
// const set5 = {
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:155:14: Error: Constant evaluation error:
// const map2 = {
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:156:3: Context: The key 'A {}' does not have a primitive equality.
// - 'A' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// A(): 0, // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:155:7: Context: While analyzing:
// const map2 = {
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:159:14: Error: Constant evaluation error:
// const map3 = {
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:160:3: Context: The key 'B {}' does not have a primitive equality.
// - 'B' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// B(): 0, // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:159:7: Context: While analyzing:
// const map3 = {
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:163:14: Error: Constant evaluation error:
// const map4 = {
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:164:3: Context: The key 'C {}' does not have a primitive equality.
// - 'C' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// C(): 0, // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:163:7: Context: While analyzing:
// const map4 = {
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:167:14: Error: Constant evaluation error:
// const map5 = {
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:168:3: Context: The key '0.5' does not have a primitive equality.
// 0.5: 0, // Error,
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:167:7: Context: While analyzing:
// const map5 = {
// ^
//
import self as self;
import "dart:core" as core;
class Const extends core::Object /*hasConstConstructor*/ {
const constructor •() → self::Const
: super core::Object::•()
;
}
class A extends core::Object /*hasConstConstructor*/ {
const constructor •() → self::A
: super core::Object::•()
;
get hashCode() → core::int
return super.{core::Object::hashCode}.{core::num::+}(1){(core::num) → core::int};
}
class B extends core::Object /*hasConstConstructor*/ {
const constructor •() → self::B
: super core::Object::•()
;
operator ==(core::Object other) → core::bool
return super.{core::Object::==}(other);
}
class C extends core::Object /*hasConstConstructor*/ {
const constructor •() → self::C
: super core::Object::•()
;
get hashCode() → core::int
return super.{core::Object::hashCode}.{core::num::+}(1){(core::num) → core::int};
operator ==(core::Object other) → core::bool
return super.{core::Object::==}(other);
}
static const field core::bool a1 = invalid-expression "Binary operator '==' requires receiver constant 'A {}' of a type with primitive equality or type 'double', but was of type 'A'.
- 'A' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::bool a2 = #C1;
static const field core::bool a3 = invalid-expression "Binary operator '==' requires receiver constant 'A {}' of a type with primitive equality or type 'double', but was of type 'A'.
- 'A' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::bool a4 = #C2;
static const field core::bool a5 = #C1;
static const field core::bool a6 = #C1;
static const field core::bool a7 = #C2;
static const field core::bool a8 = #C2;
static const field core::bool b1 = invalid-expression "Binary operator '==' requires receiver constant 'B {}' of a type with primitive equality or type 'double', but was of type 'B'.
- 'B' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::bool b2 = #C1;
static const field core::bool b3 = invalid-expression "Binary operator '==' requires receiver constant 'B {}' of a type with primitive equality or type 'double', but was of type 'B'.
- 'B' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::bool b4 = #C2;
static const field core::bool b5 = #C1;
static const field core::bool b6 = #C1;
static const field core::bool b7 = #C2;
static const field core::bool b8 = #C2;
static const field core::bool c1 = invalid-expression "Binary operator '==' requires receiver constant 'C {}' of a type with primitive equality or type 'double', but was of type 'C'.
- 'C' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::bool c2 = #C1;
static const field core::bool c3 = invalid-expression "Binary operator '==' requires receiver constant 'C {}' of a type with primitive equality or type 'double', but was of type 'C'.
- 'C' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::bool c4 = #C2;
static const field core::bool c5 = #C1;
static const field core::bool c6 = #C1;
static const field core::bool c7 = #C2;
static const field core::bool c8 = #C2;
static const field core::bool d1 = #C1;
static const field core::bool d2 = #C1;
static const field core::bool d3 = #C2;
static const field core::bool d4 = #C2;
static const field core::bool e1 = #C1;
static const field core::bool e2 = #C1;
static const field core::bool e3 = #C2;
static const field core::bool e4 = #C2;
static const field core::bool f1 = #C1;
static const field core::bool f2 = #C1;
static const field core::bool f3 = #C2;
static const field core::bool f4 = #C2;
static const field core::bool g1 = #C1;
static const field core::bool g2 = #C1;
static const field core::bool g3 = #C2;
static const field core::bool g4 = #C2;
static const field core::bool h1 = #C1;
static const field core::bool h2 = #C1;
static const field core::bool h3 = #C2;
static const field core::bool h4 = #C2;
static const field core::bool i1 = #C1;
static const field core::bool i2 = #C1;
static const field core::bool i3 = #C2;
static const field core::bool i4 = #C2;
static const field core::bool j1 = #C1;
static const field core::bool j2 = #C1;
static const field core::bool j3 = #C2;
static const field core::bool j4 = #C2;
static const field core::bool k1 = #C1;
static const field core::bool k2 = #C1;
static const field core::bool k3 = #C2;
static const field core::bool k4 = #C2;
static const field core::bool l1 = #C1;
static const field core::bool l2 = #C1;
static const field core::bool l3 = #C2;
static const field core::bool l4 = #C2;
static const field core::bool n1 = #C1;
static const field core::bool n2 = #C1;
static const field core::bool n3 = #C2;
static const field core::bool n4 = #C2;
static const field core::bool o1 = #C1;
static const field core::bool o2 = #C1;
static const field core::bool o3 = #C2;
static const field core::bool o4 = #C2;
static const field core::Set<core::Object?> set1 = #C14;
static const field core::Set<self::A> set2 = invalid-expression "The element 'A {}' does not have a primitive equality.
- 'A' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::Set<self::B> set3 = invalid-expression "The element 'B {}' does not have a primitive equality.
- 'B' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::Set<self::C> set4 = invalid-expression "The element 'C {}' does not have a primitive equality.
- 'C' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::Set<core::double> set5 = invalid-expression "The element '0.5' does not have a primitive equality.";
static const field core::Map<core::Object?, core::int> map1 = #C15;
static const field core::Map<self::A, core::int> map2 = invalid-expression "The key 'A {}' does not have a primitive equality.
- 'A' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::Map<self::B, core::int> map3 = invalid-expression "The key 'B {}' does not have a primitive equality.
- 'B' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::Map<self::C, core::int> map4 = invalid-expression "The key 'C {}' does not have a primitive equality.
- 'C' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::Map<core::double, core::int> map5 = invalid-expression "The key '0.5' does not have a primitive equality.";
static method topLevel() → void {}
constants {
#C1 = false
#C2 = true
#C3 = null
#C4 = self::Const {}
#C5 = 0
#C6 = ""
#C7 = #a
#C8 = #b
#C9 = TypeLiteralConstant(core::Object*)
#C10 = <dynamic>[]
#C11 = <dynamic, dynamic>{}
#C12 = <core::int*>{#C5}
#C13 = static-tearoff self::topLevel
#C14 = <core::Object?>{#C3, #C4, #C2, #C5, #C6, #C7, #C8, #C9, #C10, #C11, #C12, #C13}
#C15 = <core::Object?, core::int*>{#C3:#C5, #C4:#C5, #C2:#C5, #C5:#C5, #C6:#C5, #C7:#C5, #C8:#C5, #C9:#C5, #C10:#C5, #C11:#C5, #C12:#C5, #C13:#C5}
}
Constructor coverage from constants:
org-dartlang-testcase:///primitive_equality.dart:
- A. (from org-dartlang-testcase:///primitive_equality.dart:12:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
- Const. (from org-dartlang-testcase:///primitive_equality.dart:8:9)
- B. (from org-dartlang-testcase:///primitive_equality.dart:17:9)
- C. (from org-dartlang-testcase:///primitive_equality.dart:22:9)

View file

@ -0,0 +1,305 @@
library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:27:16: Error: Constant evaluation error:
// const a1 = A() == Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:27:16: Context: Binary operator '==' requires receiver constant 'A {}' of a type with primitive equality or type 'double', but was of type 'A'.
// - 'A' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// const a1 = A() == Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:27:7: Context: While analyzing:
// const a1 = A() == Const(); // Error
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:29:16: Error: Constant evaluation error:
// const a3 = A() != Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:29:16: Context: Binary operator '==' requires receiver constant 'A {}' of a type with primitive equality or type 'double', but was of type 'A'.
// - 'A' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// const a3 = A() != Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:29:7: Context: While analyzing:
// const a3 = A() != Const(); // Error
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:36:16: Error: Constant evaluation error:
// const b1 = B() == Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:36:16: Context: Binary operator '==' requires receiver constant 'B {}' of a type with primitive equality or type 'double', but was of type 'B'.
// - 'B' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// const b1 = B() == Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:36:7: Context: While analyzing:
// const b1 = B() == Const(); // Error
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:38:16: Error: Constant evaluation error:
// const b3 = B() != Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:38:16: Context: Binary operator '==' requires receiver constant 'B {}' of a type with primitive equality or type 'double', but was of type 'B'.
// - 'B' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// const b3 = B() != Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:38:7: Context: While analyzing:
// const b3 = B() != Const(); // Error
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:45:16: Error: Constant evaluation error:
// const c1 = C() == Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:45:16: Context: Binary operator '==' requires receiver constant 'C {}' of a type with primitive equality or type 'double', but was of type 'C'.
// - 'C' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// const c1 = C() == Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:45:7: Context: While analyzing:
// const c1 = C() == Const(); // Error
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:47:16: Error: Constant evaluation error:
// const c3 = C() != Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:47:16: Context: Binary operator '==' requires receiver constant 'C {}' of a type with primitive equality or type 'double', but was of type 'C'.
// - 'C' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// const c3 = C() != Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:47:7: Context: While analyzing:
// const c3 = C() != Const(); // Error
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:124:14: Error: Constant evaluation error:
// const set2 = {
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:125:3: Context: The element 'A {}' does not have a primitive equality.
// - 'A' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// A(), // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:124:7: Context: While analyzing:
// const set2 = {
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:128:14: Error: Constant evaluation error:
// const set3 = {
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:129:3: Context: The element 'B {}' does not have a primitive equality.
// - 'B' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// B(), // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:128:7: Context: While analyzing:
// const set3 = {
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:132:14: Error: Constant evaluation error:
// const set4 = {
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:133:3: Context: The element 'C {}' does not have a primitive equality.
// - 'C' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// C(), // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:132:7: Context: While analyzing:
// const set4 = {
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:136:14: Error: Constant evaluation error:
// const set5 = {
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:137:3: Context: The element '0.5' does not have a primitive equality.
// 0.5, // Error,
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:136:7: Context: While analyzing:
// const set5 = {
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:155:14: Error: Constant evaluation error:
// const map2 = {
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:156:3: Context: The key 'A {}' does not have a primitive equality.
// - 'A' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// A(): 0, // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:155:7: Context: While analyzing:
// const map2 = {
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:159:14: Error: Constant evaluation error:
// const map3 = {
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:160:3: Context: The key 'B {}' does not have a primitive equality.
// - 'B' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// B(): 0, // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:159:7: Context: While analyzing:
// const map3 = {
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:163:14: Error: Constant evaluation error:
// const map4 = {
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:164:3: Context: The key 'C {}' does not have a primitive equality.
// - 'C' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// C(): 0, // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:163:7: Context: While analyzing:
// const map4 = {
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:167:14: Error: Constant evaluation error:
// const map5 = {
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:168:3: Context: The key '0.5' does not have a primitive equality.
// 0.5: 0, // Error,
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:167:7: Context: While analyzing:
// const map5 = {
// ^
//
import self as self;
import "dart:core" as core;
class Const extends core::Object /*hasConstConstructor*/ {
const constructor •() → self::Const
: super core::Object::•()
;
}
class A extends core::Object /*hasConstConstructor*/ {
const constructor •() → self::A
: super core::Object::•()
;
get hashCode() → core::int
return super.{core::Object::hashCode}.{core::num::+}(1){(core::num) → core::int};
}
class B extends core::Object /*hasConstConstructor*/ {
const constructor •() → self::B
: super core::Object::•()
;
operator ==(core::Object other) → core::bool
return super.{core::Object::==}(other);
}
class C extends core::Object /*hasConstConstructor*/ {
const constructor •() → self::C
: super core::Object::•()
;
get hashCode() → core::int
return super.{core::Object::hashCode}.{core::num::+}(1){(core::num) → core::int};
operator ==(core::Object other) → core::bool
return super.{core::Object::==}(other);
}
static const field core::bool a1 = invalid-expression "Binary operator '==' requires receiver constant 'A {}' of a type with primitive equality or type 'double', but was of type 'A'.
- 'A' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::bool a2 = #C1;
static const field core::bool a3 = invalid-expression "Binary operator '==' requires receiver constant 'A {}' of a type with primitive equality or type 'double', but was of type 'A'.
- 'A' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::bool a4 = #C2;
static const field core::bool a5 = #C1;
static const field core::bool a6 = #C1;
static const field core::bool a7 = #C2;
static const field core::bool a8 = #C2;
static const field core::bool b1 = invalid-expression "Binary operator '==' requires receiver constant 'B {}' of a type with primitive equality or type 'double', but was of type 'B'.
- 'B' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::bool b2 = #C1;
static const field core::bool b3 = invalid-expression "Binary operator '==' requires receiver constant 'B {}' of a type with primitive equality or type 'double', but was of type 'B'.
- 'B' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::bool b4 = #C2;
static const field core::bool b5 = #C1;
static const field core::bool b6 = #C1;
static const field core::bool b7 = #C2;
static const field core::bool b8 = #C2;
static const field core::bool c1 = invalid-expression "Binary operator '==' requires receiver constant 'C {}' of a type with primitive equality or type 'double', but was of type 'C'.
- 'C' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::bool c2 = #C1;
static const field core::bool c3 = invalid-expression "Binary operator '==' requires receiver constant 'C {}' of a type with primitive equality or type 'double', but was of type 'C'.
- 'C' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::bool c4 = #C2;
static const field core::bool c5 = #C1;
static const field core::bool c6 = #C1;
static const field core::bool c7 = #C2;
static const field core::bool c8 = #C2;
static const field core::bool d1 = #C1;
static const field core::bool d2 = #C1;
static const field core::bool d3 = #C2;
static const field core::bool d4 = #C2;
static const field core::bool e1 = #C1;
static const field core::bool e2 = #C1;
static const field core::bool e3 = #C2;
static const field core::bool e4 = #C2;
static const field core::bool f1 = #C1;
static const field core::bool f2 = #C1;
static const field core::bool f3 = #C2;
static const field core::bool f4 = #C2;
static const field core::bool g1 = #C1;
static const field core::bool g2 = #C1;
static const field core::bool g3 = #C2;
static const field core::bool g4 = #C2;
static const field core::bool h1 = #C1;
static const field core::bool h2 = #C1;
static const field core::bool h3 = #C2;
static const field core::bool h4 = #C2;
static const field core::bool i1 = #C1;
static const field core::bool i2 = #C1;
static const field core::bool i3 = #C2;
static const field core::bool i4 = #C2;
static const field core::bool j1 = #C1;
static const field core::bool j2 = #C1;
static const field core::bool j3 = #C2;
static const field core::bool j4 = #C2;
static const field core::bool k1 = #C1;
static const field core::bool k2 = #C1;
static const field core::bool k3 = #C2;
static const field core::bool k4 = #C2;
static const field core::bool l1 = #C1;
static const field core::bool l2 = #C1;
static const field core::bool l3 = #C2;
static const field core::bool l4 = #C2;
static const field core::bool n1 = #C1;
static const field core::bool n2 = #C1;
static const field core::bool n3 = #C2;
static const field core::bool n4 = #C2;
static const field core::bool o1 = #C1;
static const field core::bool o2 = #C1;
static const field core::bool o3 = #C2;
static const field core::bool o4 = #C2;
static const field core::Set<core::Object?> set1 = #C14;
static const field core::Set<self::A> set2 = invalid-expression "The element 'A {}' does not have a primitive equality.
- 'A' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::Set<self::B> set3 = invalid-expression "The element 'B {}' does not have a primitive equality.
- 'B' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::Set<self::C> set4 = invalid-expression "The element 'C {}' does not have a primitive equality.
- 'C' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::Set<core::double> set5 = invalid-expression "The element '0.5' does not have a primitive equality.";
static const field core::Map<core::Object?, core::int> map1 = #C15;
static const field core::Map<self::A, core::int> map2 = invalid-expression "The key 'A {}' does not have a primitive equality.
- 'A' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::Map<self::B, core::int> map3 = invalid-expression "The key 'B {}' does not have a primitive equality.
- 'B' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::Map<self::C, core::int> map4 = invalid-expression "The key 'C {}' does not have a primitive equality.
- 'C' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::Map<core::double, core::int> map5 = invalid-expression "The key '0.5' does not have a primitive equality.";
static method topLevel() → void {}
constants {
#C1 = false
#C2 = true
#C3 = null
#C4 = self::Const {}
#C5 = 0
#C6 = ""
#C7 = #a
#C8 = #b
#C9 = TypeLiteralConstant(core::Object*)
#C10 = <dynamic>[]
#C11 = <dynamic, dynamic>{}
#C12 = <core::int*>{#C5}
#C13 = static-tearoff self::topLevel
#C14 = <core::Object?>{#C3, #C4, #C2, #C5, #C6, #C7, #C8, #C9, #C10, #C11, #C12, #C13}
#C15 = <core::Object?, core::int*>{#C3:#C5, #C4:#C5, #C2:#C5, #C5:#C5, #C6:#C5, #C7:#C5, #C8:#C5, #C9:#C5, #C10:#C5, #C11:#C5, #C12:#C5, #C13:#C5}
}
Constructor coverage from constants:
org-dartlang-testcase:///primitive_equality.dart:
- A. (from org-dartlang-testcase:///primitive_equality.dart:12:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
- Const. (from org-dartlang-testcase:///primitive_equality.dart:8:9)
- B. (from org-dartlang-testcase:///primitive_equality.dart:17:9)
- C. (from org-dartlang-testcase:///primitive_equality.dart:22:9)

View file

@ -0,0 +1,199 @@
library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
import "dart:_internal" as _in;
class Const extends core::Object /*hasConstConstructor*/ {
const constructor •() → self::Const
: super core::Object::•()
;
}
class A extends core::Object /*hasConstConstructor*/ {
const constructor •() → self::A
: super core::Object::•()
;
get hashCode() → core::int
;
}
class B extends core::Object /*hasConstConstructor*/ {
const constructor •() → self::B
: super core::Object::•()
;
operator ==(core::Object other) → core::bool
;
}
class C extends core::Object /*hasConstConstructor*/ {
const constructor •() → self::C
: super core::Object::•()
;
get hashCode() → core::int
;
operator ==(core::Object other) → core::bool
;
}
static const field core::bool a1 = const self::A::•() =={core::Object::==}{(core::Object) → core::bool} const self::Const::•();
static const field core::bool a2 = const self::Const::•() =={core::Object::==}{(core::Object) → core::bool} const self::A::•();
static const field core::bool a3 = !(const self::A::•() =={core::Object::==}{(core::Object) → core::bool} const self::Const::•());
static const field core::bool a4 = !(const self::Const::•() =={core::Object::==}{(core::Object) → core::bool} const self::A::•());
static const field core::bool a5 = const self::A::•() == null;
static const field core::bool a6 = const self::A::•() == null;
static const field core::bool a7 = !(const self::A::•() == null);
static const field core::bool a8 = !(const self::A::•() == null);
static const field core::bool b1 = const self::B::•() =={self::B::==}{(core::Object) → core::bool} const self::Const::•();
static const field core::bool b2 = const self::Const::•() =={core::Object::==}{(core::Object) → core::bool} const self::B::•();
static const field core::bool b3 = !(const self::B::•() =={self::B::==}{(core::Object) → core::bool} const self::Const::•());
static const field core::bool b4 = !(const self::Const::•() =={core::Object::==}{(core::Object) → core::bool} const self::B::•());
static const field core::bool b5 = const self::B::•() == null;
static const field core::bool b6 = const self::B::•() == null;
static const field core::bool b7 = !(const self::B::•() == null);
static const field core::bool b8 = !(const self::B::•() == null);
static const field core::bool c1 = const self::C::•() =={self::C::==}{(core::Object) → core::bool} const self::Const::•();
static const field core::bool c2 = const self::Const::•() =={core::Object::==}{(core::Object) → core::bool} const self::C::•();
static const field core::bool c3 = !(const self::C::•() =={self::C::==}{(core::Object) → core::bool} const self::Const::•());
static const field core::bool c4 = !(const self::Const::•() =={core::Object::==}{(core::Object) → core::bool} const self::C::•());
static const field core::bool c5 = const self::C::•() == null;
static const field core::bool c6 = const self::C::•() == null;
static const field core::bool c7 = !(const self::C::•() == null);
static const field core::bool c8 = !(const self::C::•() == null);
static const field core::bool d1 = true =={core::Object::==}{(core::Object) → core::bool} const self::Const::•();
static const field core::bool d2 = const self::Const::•() =={core::Object::==}{(core::Object) → core::bool} true;
static const field core::bool d3 = !(true =={core::Object::==}{(core::Object) → core::bool} const self::Const::•());
static const field core::bool d4 = !(const self::Const::•() =={core::Object::==}{(core::Object) → core::bool} true);
static const field core::bool e1 = 0 =={core::num::==}{(core::Object) → core::bool} const self::Const::•();
static const field core::bool e2 = const self::Const::•() =={core::Object::==}{(core::Object) → core::bool} 0;
static const field core::bool e3 = !(0 =={core::num::==}{(core::Object) → core::bool} const self::Const::•());
static const field core::bool e4 = !(const self::Const::•() =={core::Object::==}{(core::Object) → core::bool} 0);
static const field core::bool f1 = "" =={core::String::==}{(core::Object) → core::bool} const self::Const::•();
static const field core::bool f2 = const self::Const::•() =={core::Object::==}{(core::Object) → core::bool} "";
static const field core::bool f3 = !("" =={core::String::==}{(core::Object) → core::bool} const self::Const::•());
static const field core::bool f4 = !(const self::Const::•() =={core::Object::==}{(core::Object) → core::bool} "");
static const field core::bool g1 = #a =={core::Symbol::==}{(core::Object) → core::bool} const self::Const::•();
static const field core::bool g2 = const self::Const::•() =={core::Object::==}{(core::Object) → core::bool} #a;
static const field core::bool g3 = !(#a =={core::Symbol::==}{(core::Object) → core::bool} const self::Const::•());
static const field core::bool g4 = !(const self::Const::•() =={core::Object::==}{(core::Object) → core::bool} #a);
static const field core::bool h1 = const _in::Symbol::•("b") =={core::Symbol::==}{(core::Object) → core::bool} const self::Const::•();
static const field core::bool h2 = const self::Const::•() =={core::Object::==}{(core::Object) → core::bool} const _in::Symbol::•("b");
static const field core::bool h3 = !(const _in::Symbol::•("b") =={core::Symbol::==}{(core::Object) → core::bool} const self::Const::•());
static const field core::bool h4 = !(const self::Const::•() =={core::Object::==}{(core::Object) → core::bool} const _in::Symbol::•("b"));
static const field core::bool i1 = core::Object =={core::Type::==}{(core::Object) → core::bool} const self::Const::•();
static const field core::bool i2 = const self::Const::•() =={core::Object::==}{(core::Object) → core::bool} core::Object;
static const field core::bool i3 = !(core::Object =={core::Type::==}{(core::Object) → core::bool} const self::Const::•());
static const field core::bool i4 = !(const self::Const::•() =={core::Object::==}{(core::Object) → core::bool} core::Object);
static const field core::bool j1 = const <dynamic>[] =={core::List::==}{(core::Object) → core::bool} const self::Const::•();
static const field core::bool j2 = const self::Const::•() =={core::Object::==}{(core::Object) → core::bool} const <dynamic>[];
static const field core::bool j3 = !(const <dynamic>[] =={core::List::==}{(core::Object) → core::bool} const self::Const::•());
static const field core::bool j4 = !(const self::Const::•() =={core::Object::==}{(core::Object) → core::bool} const <dynamic>[]);
static const field core::bool k1 = const <dynamic, dynamic>{} =={core::Object::==}{(core::Object) → core::bool} const self::Const::•();
static const field core::bool k2 = const self::Const::•() =={core::Object::==}{(core::Object) → core::bool} const <dynamic, dynamic>{};
static const field core::bool k3 = !(const <dynamic, dynamic>{} =={core::Object::==}{(core::Object) → core::bool} const self::Const::•());
static const field core::bool k4 = !(const self::Const::•() =={core::Object::==}{(core::Object) → core::bool} const <dynamic, dynamic>{});
static const field core::bool l1 = const <core::int>{0} =={core::Object::==}{(core::Object) → core::bool} const self::Const::•();
static const field core::bool l2 = const self::Const::•() =={core::Object::==}{(core::Object) → core::bool} const <core::int>{0};
static const field core::bool l3 = !(const <core::int>{0} =={core::Object::==}{(core::Object) → core::bool} const self::Const::•());
static const field core::bool l4 = !(const self::Const::•() =={core::Object::==}{(core::Object) → core::bool} const <core::int>{0});
static const field core::bool n1 = self::topLevel =={core::Object::==}{(core::Object) → core::bool} const self::Const::•();
static const field core::bool n2 = const self::Const::•() =={core::Object::==}{(core::Object) → core::bool} self::topLevel;
static const field core::bool n3 = !(self::topLevel =={core::Object::==}{(core::Object) → core::bool} const self::Const::•());
static const field core::bool n4 = !(const self::Const::•() =={core::Object::==}{(core::Object) → core::bool} self::topLevel);
static const field core::bool o1 = 0.5 =={core::num::==}{(core::Object) → core::bool} const self::Const::•();
static const field core::bool o2 = const self::Const::•() =={core::Object::==}{(core::Object) → core::bool} 0.5;
static const field core::bool o3 = !(0.5 =={core::num::==}{(core::Object) → core::bool} const self::Const::•());
static const field core::bool o4 = !(const self::Const::•() =={core::Object::==}{(core::Object) → core::bool} 0.5);
static const field core::Set<core::Object?> set1 = const <core::Object?>{null, const self::Const::•(), true, 0, "", #a, const _in::Symbol::•("b"), core::Object, const <dynamic>[], const <dynamic, dynamic>{}, const <core::int>{0}, self::topLevel};
static const field core::Set<self::A> set2 = const <self::A>{const self::A::•()};
static const field core::Set<self::B> set3 = const <self::B>{const self::B::•()};
static const field core::Set<self::C> set4 = const <self::C>{const self::C::•()};
static const field core::Set<core::double> set5 = const <core::double>{0.5};
static const field core::Map<core::Object?, core::int> map1 = const <core::Object?, core::int>{null: 0, const self::Const::•(): 0, true: 0, 0: 0, "": 0, #a: 0, const _in::Symbol::•("b"): 0, core::Object: 0, const <dynamic>[]: 0, const <dynamic, dynamic>{}: 0, const <core::int>{0}: 0, self::topLevel: 0};
static const field core::Map<self::A, core::int> map2 = const <self::A, core::int>{const self::A::•(): 0};
static const field core::Map<self::B, core::int> map3 = const <self::B, core::int>{const self::B::•(): 0};
static const field core::Map<self::C, core::int> map4 = const <self::C, core::int>{const self::C::•(): 0};
static const field core::Map<core::double, core::int> map5 = const <core::double, core::int>{0.5: 0};
static method topLevel() → void
;
Extra constant evaluation status:
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///primitive_equality.dart:27:12 -> InstanceConstant(const A{})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///primitive_equality.dart:27:19 -> InstanceConstant(const Const{})
Evaluated: EqualsCall @ org-dartlang-testcase:///primitive_equality.dart:28:20 -> BoolConstant(false)
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///primitive_equality.dart:29:12 -> InstanceConstant(const A{})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///primitive_equality.dart:29:19 -> InstanceConstant(const Const{})
Evaluated: Not @ org-dartlang-testcase:///primitive_equality.dart:30:20 -> BoolConstant(true)
Evaluated: EqualsNull @ org-dartlang-testcase:///primitive_equality.dart:31:16 -> BoolConstant(false)
Evaluated: EqualsNull @ org-dartlang-testcase:///primitive_equality.dart:32:17 -> BoolConstant(false)
Evaluated: Not @ org-dartlang-testcase:///primitive_equality.dart:33:16 -> BoolConstant(true)
Evaluated: Not @ org-dartlang-testcase:///primitive_equality.dart:34:17 -> BoolConstant(true)
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///primitive_equality.dart:36:12 -> InstanceConstant(const B{})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///primitive_equality.dart:36:19 -> InstanceConstant(const Const{})
Evaluated: EqualsCall @ org-dartlang-testcase:///primitive_equality.dart:37:20 -> BoolConstant(false)
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///primitive_equality.dart:38:12 -> InstanceConstant(const B{})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///primitive_equality.dart:38:19 -> InstanceConstant(const Const{})
Evaluated: Not @ org-dartlang-testcase:///primitive_equality.dart:39:20 -> BoolConstant(true)
Evaluated: EqualsNull @ org-dartlang-testcase:///primitive_equality.dart:40:16 -> BoolConstant(false)
Evaluated: EqualsNull @ org-dartlang-testcase:///primitive_equality.dart:41:17 -> BoolConstant(false)
Evaluated: Not @ org-dartlang-testcase:///primitive_equality.dart:42:16 -> BoolConstant(true)
Evaluated: Not @ org-dartlang-testcase:///primitive_equality.dart:43:17 -> BoolConstant(true)
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///primitive_equality.dart:45:12 -> InstanceConstant(const C{})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///primitive_equality.dart:45:19 -> InstanceConstant(const Const{})
Evaluated: EqualsCall @ org-dartlang-testcase:///primitive_equality.dart:46:20 -> BoolConstant(false)
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///primitive_equality.dart:47:12 -> InstanceConstant(const C{})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///primitive_equality.dart:47:19 -> InstanceConstant(const Const{})
Evaluated: Not @ org-dartlang-testcase:///primitive_equality.dart:48:20 -> BoolConstant(true)
Evaluated: EqualsNull @ org-dartlang-testcase:///primitive_equality.dart:49:16 -> BoolConstant(false)
Evaluated: EqualsNull @ org-dartlang-testcase:///primitive_equality.dart:50:17 -> BoolConstant(false)
Evaluated: Not @ org-dartlang-testcase:///primitive_equality.dart:51:16 -> BoolConstant(true)
Evaluated: Not @ org-dartlang-testcase:///primitive_equality.dart:52:17 -> BoolConstant(true)
Evaluated: EqualsCall @ org-dartlang-testcase:///primitive_equality.dart:54:17 -> BoolConstant(false)
Evaluated: EqualsCall @ org-dartlang-testcase:///primitive_equality.dart:55:20 -> BoolConstant(false)
Evaluated: Not @ org-dartlang-testcase:///primitive_equality.dart:56:17 -> BoolConstant(true)
Evaluated: Not @ org-dartlang-testcase:///primitive_equality.dart:57:20 -> BoolConstant(true)
Evaluated: EqualsCall @ org-dartlang-testcase:///primitive_equality.dart:59:14 -> BoolConstant(false)
Evaluated: EqualsCall @ org-dartlang-testcase:///primitive_equality.dart:60:20 -> BoolConstant(false)
Evaluated: Not @ org-dartlang-testcase:///primitive_equality.dart:61:14 -> BoolConstant(true)
Evaluated: Not @ org-dartlang-testcase:///primitive_equality.dart:62:20 -> BoolConstant(true)
Evaluated: EqualsCall @ org-dartlang-testcase:///primitive_equality.dart:64:15 -> BoolConstant(false)
Evaluated: EqualsCall @ org-dartlang-testcase:///primitive_equality.dart:65:20 -> BoolConstant(false)
Evaluated: Not @ org-dartlang-testcase:///primitive_equality.dart:66:15 -> BoolConstant(true)
Evaluated: Not @ org-dartlang-testcase:///primitive_equality.dart:67:20 -> BoolConstant(true)
Evaluated: EqualsCall @ org-dartlang-testcase:///primitive_equality.dart:69:15 -> BoolConstant(false)
Evaluated: EqualsCall @ org-dartlang-testcase:///primitive_equality.dart:70:20 -> BoolConstant(false)
Evaluated: Not @ org-dartlang-testcase:///primitive_equality.dart:71:15 -> BoolConstant(true)
Evaluated: Not @ org-dartlang-testcase:///primitive_equality.dart:72:20 -> BoolConstant(true)
Evaluated: EqualsCall @ org-dartlang-testcase:///primitive_equality.dart:74:30 -> BoolConstant(false)
Evaluated: EqualsCall @ org-dartlang-testcase:///primitive_equality.dart:75:20 -> BoolConstant(false)
Evaluated: Not @ org-dartlang-testcase:///primitive_equality.dart:76:30 -> BoolConstant(true)
Evaluated: Not @ org-dartlang-testcase:///primitive_equality.dart:77:20 -> BoolConstant(true)
Evaluated: EqualsCall @ org-dartlang-testcase:///primitive_equality.dart:79:19 -> BoolConstant(false)
Evaluated: EqualsCall @ org-dartlang-testcase:///primitive_equality.dart:80:20 -> BoolConstant(false)
Evaluated: Not @ org-dartlang-testcase:///primitive_equality.dart:81:19 -> BoolConstant(true)
Evaluated: Not @ org-dartlang-testcase:///primitive_equality.dart:82:20 -> BoolConstant(true)
Evaluated: EqualsCall @ org-dartlang-testcase:///primitive_equality.dart:84:15 -> BoolConstant(false)
Evaluated: EqualsCall @ org-dartlang-testcase:///primitive_equality.dart:85:20 -> BoolConstant(false)
Evaluated: Not @ org-dartlang-testcase:///primitive_equality.dart:86:15 -> BoolConstant(true)
Evaluated: Not @ org-dartlang-testcase:///primitive_equality.dart:87:20 -> BoolConstant(true)
Evaluated: EqualsCall @ org-dartlang-testcase:///primitive_equality.dart:89:15 -> BoolConstant(false)
Evaluated: EqualsCall @ org-dartlang-testcase:///primitive_equality.dart:90:20 -> BoolConstant(false)
Evaluated: Not @ org-dartlang-testcase:///primitive_equality.dart:91:15 -> BoolConstant(true)
Evaluated: Not @ org-dartlang-testcase:///primitive_equality.dart:92:20 -> BoolConstant(true)
Evaluated: EqualsCall @ org-dartlang-testcase:///primitive_equality.dart:94:16 -> BoolConstant(false)
Evaluated: EqualsCall @ org-dartlang-testcase:///primitive_equality.dart:95:20 -> BoolConstant(false)
Evaluated: Not @ org-dartlang-testcase:///primitive_equality.dart:96:16 -> BoolConstant(true)
Evaluated: Not @ org-dartlang-testcase:///primitive_equality.dart:97:20 -> BoolConstant(true)
Evaluated: EqualsCall @ org-dartlang-testcase:///primitive_equality.dart:99:21 -> BoolConstant(false)
Evaluated: EqualsCall @ org-dartlang-testcase:///primitive_equality.dart:100:20 -> BoolConstant(false)
Evaluated: Not @ org-dartlang-testcase:///primitive_equality.dart:101:21 -> BoolConstant(true)
Evaluated: Not @ org-dartlang-testcase:///primitive_equality.dart:102:20 -> BoolConstant(true)
Evaluated: EqualsCall @ org-dartlang-testcase:///primitive_equality.dart:104:16 -> BoolConstant(false)
Evaluated: EqualsCall @ org-dartlang-testcase:///primitive_equality.dart:105:20 -> BoolConstant(false)
Evaluated: Not @ org-dartlang-testcase:///primitive_equality.dart:106:16 -> BoolConstant(true)
Evaluated: Not @ org-dartlang-testcase:///primitive_equality.dart:107:20 -> BoolConstant(true)
Evaluated: SetLiteral @ org-dartlang-testcase:///primitive_equality.dart:109:14 -> SetConstant(const <Object?>{null, const Const{}, true, 0, "", #a, #b, Object*, const <dynamic>[], const <dynamic, dynamic>{}, const <int*>{0}, topLevel})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///primitive_equality.dart:125:3 -> InstanceConstant(const A{})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///primitive_equality.dart:129:3 -> InstanceConstant(const B{})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///primitive_equality.dart:133:3 -> InstanceConstant(const C{})
Evaluated: MapLiteral @ org-dartlang-testcase:///primitive_equality.dart:140:14 -> MapConstant(const <Object?, int*>{null: 0, const Const{}: 0, true: 0, 0: 0, "": 0, #a: 0, #b: 0, Object*: 0, const <dynamic>[]: 0, const <dynamic, dynamic>{}: 0, const <int*>{0}: 0, topLevel: 0})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///primitive_equality.dart:156:3 -> InstanceConstant(const A{})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///primitive_equality.dart:160:3 -> InstanceConstant(const B{})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///primitive_equality.dart:164:3 -> InstanceConstant(const C{})
Extra constant evaluation: evaluated: 99, effectively constant: 82

View file

@ -0,0 +1,305 @@
library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:27:16: Error: Constant evaluation error:
// const a1 = A() == Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:27:16: Context: Binary operator '==' requires receiver constant 'A {}' of a type with primitive equality or type 'double', but was of type 'A'.
// - 'A' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// const a1 = A() == Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:27:7: Context: While analyzing:
// const a1 = A() == Const(); // Error
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:29:16: Error: Constant evaluation error:
// const a3 = A() != Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:29:16: Context: Binary operator '==' requires receiver constant 'A {}' of a type with primitive equality or type 'double', but was of type 'A'.
// - 'A' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// const a3 = A() != Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:29:7: Context: While analyzing:
// const a3 = A() != Const(); // Error
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:36:16: Error: Constant evaluation error:
// const b1 = B() == Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:36:16: Context: Binary operator '==' requires receiver constant 'B {}' of a type with primitive equality or type 'double', but was of type 'B'.
// - 'B' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// const b1 = B() == Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:36:7: Context: While analyzing:
// const b1 = B() == Const(); // Error
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:38:16: Error: Constant evaluation error:
// const b3 = B() != Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:38:16: Context: Binary operator '==' requires receiver constant 'B {}' of a type with primitive equality or type 'double', but was of type 'B'.
// - 'B' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// const b3 = B() != Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:38:7: Context: While analyzing:
// const b3 = B() != Const(); // Error
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:45:16: Error: Constant evaluation error:
// const c1 = C() == Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:45:16: Context: Binary operator '==' requires receiver constant 'C {}' of a type with primitive equality or type 'double', but was of type 'C'.
// - 'C' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// const c1 = C() == Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:45:7: Context: While analyzing:
// const c1 = C() == Const(); // Error
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:47:16: Error: Constant evaluation error:
// const c3 = C() != Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:47:16: Context: Binary operator '==' requires receiver constant 'C {}' of a type with primitive equality or type 'double', but was of type 'C'.
// - 'C' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// const c3 = C() != Const(); // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:47:7: Context: While analyzing:
// const c3 = C() != Const(); // Error
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:124:14: Error: Constant evaluation error:
// const set2 = {
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:125:3: Context: The element 'A {}' does not have a primitive equality.
// - 'A' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// A(), // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:124:7: Context: While analyzing:
// const set2 = {
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:128:14: Error: Constant evaluation error:
// const set3 = {
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:129:3: Context: The element 'B {}' does not have a primitive equality.
// - 'B' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// B(), // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:128:7: Context: While analyzing:
// const set3 = {
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:132:14: Error: Constant evaluation error:
// const set4 = {
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:133:3: Context: The element 'C {}' does not have a primitive equality.
// - 'C' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// C(), // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:132:7: Context: While analyzing:
// const set4 = {
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:136:14: Error: Constant evaluation error:
// const set5 = {
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:137:3: Context: The element '0.5' does not have a primitive equality.
// 0.5, // Error,
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:136:7: Context: While analyzing:
// const set5 = {
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:155:14: Error: Constant evaluation error:
// const map2 = {
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:156:3: Context: The key 'A {}' does not have a primitive equality.
// - 'A' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// A(): 0, // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:155:7: Context: While analyzing:
// const map2 = {
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:159:14: Error: Constant evaluation error:
// const map3 = {
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:160:3: Context: The key 'B {}' does not have a primitive equality.
// - 'B' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// B(): 0, // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:159:7: Context: While analyzing:
// const map3 = {
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:163:14: Error: Constant evaluation error:
// const map4 = {
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:164:3: Context: The key 'C {}' does not have a primitive equality.
// - 'C' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.
// C(): 0, // Error
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:163:7: Context: While analyzing:
// const map4 = {
// ^
//
// pkg/front_end/testcases/patterns/primitive_equality.dart:167:14: Error: Constant evaluation error:
// const map5 = {
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:168:3: Context: The key '0.5' does not have a primitive equality.
// 0.5: 0, // Error,
// ^
// pkg/front_end/testcases/patterns/primitive_equality.dart:167:7: Context: While analyzing:
// const map5 = {
// ^
//
import self as self;
import "dart:core" as core;
class Const extends core::Object /*hasConstConstructor*/ {
const constructor •() → self::Const
: super core::Object::•()
;
}
class A extends core::Object /*hasConstConstructor*/ {
const constructor •() → self::A
: super core::Object::•()
;
get hashCode() → core::int
return super.{core::Object::hashCode}.{core::num::+}(1){(core::num) → core::int};
}
class B extends core::Object /*hasConstConstructor*/ {
const constructor •() → self::B
: super core::Object::•()
;
operator ==(core::Object other) → core::bool
return super.{core::Object::==}(other);
}
class C extends core::Object /*hasConstConstructor*/ {
const constructor •() → self::C
: super core::Object::•()
;
get hashCode() → core::int
return super.{core::Object::hashCode}.{core::num::+}(1){(core::num) → core::int};
operator ==(core::Object other) → core::bool
return super.{core::Object::==}(other);
}
static const field core::bool a1 = invalid-expression "Binary operator '==' requires receiver constant 'A {}' of a type with primitive equality or type 'double', but was of type 'A'.
- 'A' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::bool a2 = #C1;
static const field core::bool a3 = invalid-expression "Binary operator '==' requires receiver constant 'A {}' of a type with primitive equality or type 'double', but was of type 'A'.
- 'A' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::bool a4 = #C2;
static const field core::bool a5 = #C1;
static const field core::bool a6 = #C1;
static const field core::bool a7 = #C2;
static const field core::bool a8 = #C2;
static const field core::bool b1 = invalid-expression "Binary operator '==' requires receiver constant 'B {}' of a type with primitive equality or type 'double', but was of type 'B'.
- 'B' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::bool b2 = #C1;
static const field core::bool b3 = invalid-expression "Binary operator '==' requires receiver constant 'B {}' of a type with primitive equality or type 'double', but was of type 'B'.
- 'B' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::bool b4 = #C2;
static const field core::bool b5 = #C1;
static const field core::bool b6 = #C1;
static const field core::bool b7 = #C2;
static const field core::bool b8 = #C2;
static const field core::bool c1 = invalid-expression "Binary operator '==' requires receiver constant 'C {}' of a type with primitive equality or type 'double', but was of type 'C'.
- 'C' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::bool c2 = #C1;
static const field core::bool c3 = invalid-expression "Binary operator '==' requires receiver constant 'C {}' of a type with primitive equality or type 'double', but was of type 'C'.
- 'C' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::bool c4 = #C2;
static const field core::bool c5 = #C1;
static const field core::bool c6 = #C1;
static const field core::bool c7 = #C2;
static const field core::bool c8 = #C2;
static const field core::bool d1 = #C1;
static const field core::bool d2 = #C1;
static const field core::bool d3 = #C2;
static const field core::bool d4 = #C2;
static const field core::bool e1 = #C1;
static const field core::bool e2 = #C1;
static const field core::bool e3 = #C2;
static const field core::bool e4 = #C2;
static const field core::bool f1 = #C1;
static const field core::bool f2 = #C1;
static const field core::bool f3 = #C2;
static const field core::bool f4 = #C2;
static const field core::bool g1 = #C1;
static const field core::bool g2 = #C1;
static const field core::bool g3 = #C2;
static const field core::bool g4 = #C2;
static const field core::bool h1 = #C1;
static const field core::bool h2 = #C1;
static const field core::bool h3 = #C2;
static const field core::bool h4 = #C2;
static const field core::bool i1 = #C1;
static const field core::bool i2 = #C1;
static const field core::bool i3 = #C2;
static const field core::bool i4 = #C2;
static const field core::bool j1 = #C1;
static const field core::bool j2 = #C1;
static const field core::bool j3 = #C2;
static const field core::bool j4 = #C2;
static const field core::bool k1 = #C1;
static const field core::bool k2 = #C1;
static const field core::bool k3 = #C2;
static const field core::bool k4 = #C2;
static const field core::bool l1 = #C1;
static const field core::bool l2 = #C1;
static const field core::bool l3 = #C2;
static const field core::bool l4 = #C2;
static const field core::bool n1 = #C1;
static const field core::bool n2 = #C1;
static const field core::bool n3 = #C2;
static const field core::bool n4 = #C2;
static const field core::bool o1 = #C1;
static const field core::bool o2 = #C1;
static const field core::bool o3 = #C2;
static const field core::bool o4 = #C2;
static const field core::Set<core::Object?> set1 = #C14;
static const field core::Set<self::A> set2 = invalid-expression "The element 'A {}' does not have a primitive equality.
- 'A' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::Set<self::B> set3 = invalid-expression "The element 'B {}' does not have a primitive equality.
- 'B' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::Set<self::C> set4 = invalid-expression "The element 'C {}' does not have a primitive equality.
- 'C' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::Set<core::double> set5 = invalid-expression "The element '0.5' does not have a primitive equality.";
static const field core::Map<core::Object?, core::int> map1 = #C15;
static const field core::Map<self::A, core::int> map2 = invalid-expression "The key 'A {}' does not have a primitive equality.
- 'A' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::Map<self::B, core::int> map3 = invalid-expression "The key 'B {}' does not have a primitive equality.
- 'B' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::Map<self::C, core::int> map4 = invalid-expression "The key 'C {}' does not have a primitive equality.
- 'C' is from 'pkg/front_end/testcases/patterns/primitive_equality.dart'.";
static const field core::Map<core::double, core::int> map5 = invalid-expression "The key '0.5' does not have a primitive equality.";
static method topLevel() → void {}
constants {
#C1 = false
#C2 = true
#C3 = null
#C4 = self::Const {}
#C5 = 0
#C6 = ""
#C7 = #a
#C8 = #b
#C9 = TypeLiteralConstant(core::Object*)
#C10 = <dynamic>[]
#C11 = <dynamic, dynamic>{}
#C12 = <core::int*>{#C5}
#C13 = static-tearoff self::topLevel
#C14 = <core::Object?>{#C3, #C4, #C2, #C5, #C6, #C7, #C8, #C9, #C10, #C11, #C12, #C13}
#C15 = <core::Object?, core::int*>{#C3:#C5, #C4:#C5, #C2:#C5, #C5:#C5, #C6:#C5, #C7:#C5, #C8:#C5, #C9:#C5, #C10:#C5, #C11:#C5, #C12:#C5, #C13:#C5}
}
Constructor coverage from constants:
org-dartlang-testcase:///primitive_equality.dart:
- A. (from org-dartlang-testcase:///primitive_equality.dart:12:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
- Const. (from org-dartlang-testcase:///primitive_equality.dart:8:9)
- B. (from org-dartlang-testcase:///primitive_equality.dart:17:9)
- C. (from org-dartlang-testcase:///primitive_equality.dart:22:9)

View file

@ -5,7 +5,7 @@ library /*isNonNullableByDefault*/;
// pkg/front_end/testcases/records/issue50515.dart:11:11: Error: Constant evaluation error:
// test() => const <(A,)>{ (A(),) };
// ^
// pkg/front_end/testcases/records/issue50515.dart:11:25: Context: The element '(A {})' does not have a primitive operator '=='.
// pkg/front_end/testcases/records/issue50515.dart:11:25: Context: The element '(A {})' does not have a primitive equality.
// - 'A' is from 'pkg/front_end/testcases/records/issue50515.dart'.
// test() => const <(A,)>{ (A(),) };
// ^
@ -21,7 +21,7 @@ class A extends core::Object /*hasConstConstructor*/ {
return false;
}
static method test() → dynamic
return invalid-expression "The element '(A {})' does not have a primitive operator '=='.
return invalid-expression "The element '(A {})' does not have a primitive equality.
- 'A' is from 'pkg/front_end/testcases/records/issue50515.dart'.";

View file

@ -5,7 +5,7 @@ library /*isNonNullableByDefault*/;
// pkg/front_end/testcases/records/issue50515.dart:11:11: Error: Constant evaluation error:
// test() => const <(A,)>{ (A(),) };
// ^
// pkg/front_end/testcases/records/issue50515.dart:11:25: Context: The element '(A {})' does not have a primitive operator '=='.
// pkg/front_end/testcases/records/issue50515.dart:11:25: Context: The element '(A {})' does not have a primitive equality.
// - 'A' is from 'pkg/front_end/testcases/records/issue50515.dart'.
// test() => const <(A,)>{ (A(),) };
// ^
@ -21,7 +21,7 @@ class A extends core::Object /*hasConstConstructor*/ {
return false;
}
static method test() → dynamic
return invalid-expression "The element '(A {})' does not have a primitive operator '=='.
return invalid-expression "The element '(A {})' does not have a primitive equality.
- 'A' is from 'pkg/front_end/testcases/records/issue50515.dart'.";

View file

@ -5,7 +5,7 @@ library /*isNonNullableByDefault*/;
// pkg/front_end/testcases/records/issue50515.dart:11:11: Error: Constant evaluation error:
// test() => const <(A,)>{ (A(),) };
// ^
// pkg/front_end/testcases/records/issue50515.dart:11:25: Context: The element '(A {})' does not have a primitive operator '=='.
// pkg/front_end/testcases/records/issue50515.dart:11:25: Context: The element '(A {})' does not have a primitive equality.
// - 'A' is from 'pkg/front_end/testcases/records/issue50515.dart'.
// test() => const <(A,)>{ (A(),) };
// ^
@ -21,7 +21,7 @@ class A extends core::Object /*hasConstConstructor*/ {
return false;
}
static method test() → dynamic
return invalid-expression "The element '(A {})' does not have a primitive operator '=='.
return invalid-expression "The element '(A {})' does not have a primitive equality.
- 'A' is from 'pkg/front_end/testcases/records/issue50515.dart'.";

View file

@ -5,7 +5,7 @@ library /*isNonNullableByDefault*/;
// pkg/front_end/testcases/records/issue50515.dart:11:11: Error: Constant evaluation error:
// test() => const <(A,)>{ (A(),) };
// ^
// pkg/front_end/testcases/records/issue50515.dart:11:25: Context: The element '(A {})' does not have a primitive operator '=='.
// pkg/front_end/testcases/records/issue50515.dart:11:25: Context: The element '(A {})' does not have a primitive equality.
// - 'A' is from 'pkg/front_end/testcases/records/issue50515.dart'.
// test() => const <(A,)>{ (A(),) };
// ^
@ -21,7 +21,7 @@ class A extends core::Object /*hasConstConstructor*/ {
return false;
}
static method test() → dynamic
return invalid-expression "The element '(A {})' does not have a primitive operator '=='.
return invalid-expression "The element '(A {})' does not have a primitive equality.
- 'A' is from 'pkg/front_end/testcases/records/issue50515.dart'.";

View file

@ -5,7 +5,7 @@ library /*isNonNullableByDefault*/;
// pkg/front_end/testcases/records/issue50515.dart:11:11: Error: Constant evaluation error:
// test() => const <(A,)>{ (A(),) };
// ^
// pkg/front_end/testcases/records/issue50515.dart:11:25: Context: The element '(A {})' does not have a primitive operator '=='.
// pkg/front_end/testcases/records/issue50515.dart:11:25: Context: The element '(A {})' does not have a primitive equality.
// - 'A' is from 'pkg/front_end/testcases/records/issue50515.dart'.
// test() => const <(A,)>{ (A(),) };
// ^
@ -21,7 +21,7 @@ class A extends core::Object /*hasConstConstructor*/ {
return false;
}
static method test() → dynamic
return invalid-expression "The element '(A {})' does not have a primitive operator '=='.
return invalid-expression "The element '(A {})' does not have a primitive equality.
- 'A' is from 'pkg/front_end/testcases/records/issue50515.dart'.";

View file

@ -30,58 +30,100 @@ class C {
bool operator ==(Object other) => super == other;
}
const aSet = <Object?>{
const aSet1 = <Object?>{
// ^
// [cfe] Constant evaluation error:
0.5,
//^^^
// [analyzer] unspecified
// [cfe] unspecified
Duration(days: 2),
//^^^^^^^^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
A(),
//^^^
// [analyzer] unspecified
// [cfe] unspecified
B(),
//^^^
// [analyzer] unspecified
// [cfe] unspecified
C(),
//^^^
// [analyzer] unspecified
// [cfe] unspecified
(A(), false, 1),
//^^^^^^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
// [analyzer] COMPILE_TIME_ERROR.CONST_SET_ELEMENT_NOT_PRIMITIVE_EQUALITY
};
const aMap = <Object?, Null>{
const aSet2 = <Object?>{
// ^
// [cfe] Constant evaluation error:
Duration(days: 2),
//^^^^^^^^^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.CONST_SET_ELEMENT_NOT_PRIMITIVE_EQUALITY
};
const aSet3 = <Object?>{
// ^
// [cfe] Constant evaluation error:
A(),
//^^^
// [analyzer] COMPILE_TIME_ERROR.CONST_SET_ELEMENT_NOT_PRIMITIVE_EQUALITY
};
const aSet4 = <Object?>{
// ^
// [cfe] Constant evaluation error:
B(),
//^^^
// [analyzer] COMPILE_TIME_ERROR.CONST_SET_ELEMENT_NOT_PRIMITIVE_EQUALITY
};
const aSet5 = <Object?>{
// ^
// [cfe] Constant evaluation error:
C(),
//^^^
// [analyzer] COMPILE_TIME_ERROR.CONST_SET_ELEMENT_NOT_PRIMITIVE_EQUALITY
};
const aSet6 = <Object?>{
// ^
// [cfe] Constant evaluation error:
(A(), false, 1),
//^^^^^^^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.CONST_SET_ELEMENT_NOT_PRIMITIVE_EQUALITY
};
const aMap1 = <Object?, Null>{
// ^
// [cfe] Constant evaluation error:
0.5: null,
//^^^
// [analyzer] unspecified
// [cfe] unspecified
// [analyzer] COMPILE_TIME_ERROR.CONST_MAP_KEY_NOT_PRIMITIVE_EQUALITY
};
const aMap2 = <Object?, Null>{
// ^
// [cfe] Constant evaluation error:
Duration(days: 2): null,
//^^^^^^^^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
// [analyzer] COMPILE_TIME_ERROR.CONST_MAP_KEY_NOT_PRIMITIVE_EQUALITY
};
const aMap3 = <Object?, Null>{
// ^
// [cfe] Constant evaluation error:
A(): null,
//^^^
// [analyzer] unspecified
// [cfe] unspecified
// [analyzer] COMPILE_TIME_ERROR.CONST_MAP_KEY_NOT_PRIMITIVE_EQUALITY
};
const aMap4 = <Object?, Null>{
// ^
// [cfe] Constant evaluation error:
B(): null,
//^^^
// [analyzer] unspecified
// [cfe] unspecified
// [analyzer] COMPILE_TIME_ERROR.CONST_MAP_KEY_NOT_PRIMITIVE_EQUALITY
};
const aMap5 = <Object?, Null>{
// ^
// [cfe] Constant evaluation error:
C(): null,
//^^^
// [analyzer] unspecified
// [cfe] unspecified
// [analyzer] COMPILE_TIME_ERROR.CONST_MAP_KEY_NOT_PRIMITIVE_EQUALITY
};
const aMap6 = <Object?, Null>{
// ^
// [cfe] Constant evaluation error:
(A(), false, 1): null,
//^^^^^^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
// [analyzer] COMPILE_TIME_ERROR.CONST_MAP_KEY_NOT_PRIMITIVE_EQUALITY
};
void main() {}

View file

@ -180,8 +180,6 @@ method<T>(o) {
// ^
// [analyzer] SYNTACTIC_ERROR.INVALID_CONSTANT_CONST_PREFIX
// [cfe] The expression can't be prefixed by 'const' to form a constant pattern.
// ^
// [cfe] Constant evaluation error:
case const <int>[] as List<T>: // Ok
case const (1 + 2): // Ok
case const (1 - 2): // Ok