6cc9efe290
Change-Id: I94dfcea40566190c6bf153c108b0d0d5dbf27a4d Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/400148 Commit-Queue: Bob Nystrom <rnystrom@google.com> Reviewed-by: Lasse Nielsen <lrn@google.com> Auto-Submit: Bob Nystrom <rnystrom@google.com>
128 lines
3.6 KiB
Dart
128 lines
3.6 KiB
Dart
// 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.
|
|
|
|
// Verify that the use of a constant expression denoting an object that does
|
|
// not have primitive equality in a constant set or as a key of a constant map
|
|
// gives rise to a compile-time error.
|
|
//
|
|
// An enum cannot override `==` or `hashCode`, hence there are no cases with
|
|
// enums. Similarly, implicitly induced noSuchMethod forwarders cannot
|
|
// eliminate primitive equality from a given class: Such forwarders cannot
|
|
// override an explicitly declared inherited method implementation, in this
|
|
// case `Object.hashCode` and `Object.[]`.
|
|
|
|
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 aSet1 = <Object?>{
|
|
// ^
|
|
// [cfe] Constant evaluation error:
|
|
0.5,
|
|
// [error column 3, length 3]
|
|
// [analyzer] COMPILE_TIME_ERROR.CONST_SET_ELEMENT_NOT_PRIMITIVE_EQUALITY
|
|
};
|
|
|
|
const aSet2 = <Object?>{
|
|
// ^
|
|
// [cfe] Constant evaluation error:
|
|
Duration(days: 2),
|
|
// [error column 3, length 17]
|
|
// [analyzer] COMPILE_TIME_ERROR.CONST_SET_ELEMENT_NOT_PRIMITIVE_EQUALITY
|
|
};
|
|
|
|
const aSet3 = <Object?>{
|
|
// ^
|
|
// [cfe] Constant evaluation error:
|
|
A(),
|
|
// [error column 3, length 3]
|
|
// [analyzer] COMPILE_TIME_ERROR.CONST_SET_ELEMENT_NOT_PRIMITIVE_EQUALITY
|
|
};
|
|
|
|
const aSet4 = <Object?>{
|
|
// ^
|
|
// [cfe] Constant evaluation error:
|
|
B(),
|
|
// [error column 3, length 3]
|
|
// [analyzer] COMPILE_TIME_ERROR.CONST_SET_ELEMENT_NOT_PRIMITIVE_EQUALITY
|
|
};
|
|
|
|
const aSet5 = <Object?>{
|
|
// ^
|
|
// [cfe] Constant evaluation error:
|
|
C(),
|
|
// [error column 3, length 3]
|
|
// [analyzer] COMPILE_TIME_ERROR.CONST_SET_ELEMENT_NOT_PRIMITIVE_EQUALITY
|
|
};
|
|
|
|
const aSet6 = <Object?>{
|
|
// ^
|
|
// [cfe] Constant evaluation error:
|
|
(A(), false, 1),
|
|
// [error column 3, length 15]
|
|
// [analyzer] COMPILE_TIME_ERROR.CONST_SET_ELEMENT_NOT_PRIMITIVE_EQUALITY
|
|
};
|
|
|
|
const aMap1 = <Object?, Null>{
|
|
// ^
|
|
// [cfe] Constant evaluation error:
|
|
0.5: null,
|
|
// [error column 3, length 3]
|
|
// [analyzer] COMPILE_TIME_ERROR.CONST_MAP_KEY_NOT_PRIMITIVE_EQUALITY
|
|
};
|
|
|
|
const aMap2 = <Object?, Null>{
|
|
// ^
|
|
// [cfe] Constant evaluation error:
|
|
Duration(days: 2): null,
|
|
// [error column 3, length 17]
|
|
// [analyzer] COMPILE_TIME_ERROR.CONST_MAP_KEY_NOT_PRIMITIVE_EQUALITY
|
|
};
|
|
|
|
const aMap3 = <Object?, Null>{
|
|
// ^
|
|
// [cfe] Constant evaluation error:
|
|
A(): null,
|
|
// [error column 3, length 3]
|
|
// [analyzer] COMPILE_TIME_ERROR.CONST_MAP_KEY_NOT_PRIMITIVE_EQUALITY
|
|
};
|
|
|
|
const aMap4 = <Object?, Null>{
|
|
// ^
|
|
// [cfe] Constant evaluation error:
|
|
B(): null,
|
|
// [error column 3, length 3]
|
|
// [analyzer] COMPILE_TIME_ERROR.CONST_MAP_KEY_NOT_PRIMITIVE_EQUALITY
|
|
};
|
|
|
|
const aMap5 = <Object?, Null>{
|
|
// ^
|
|
// [cfe] Constant evaluation error:
|
|
C(): null,
|
|
// [error column 3, length 3]
|
|
// [analyzer] COMPILE_TIME_ERROR.CONST_MAP_KEY_NOT_PRIMITIVE_EQUALITY
|
|
};
|
|
|
|
const aMap6 = <Object?, Null>{
|
|
// ^
|
|
// [cfe] Constant evaluation error:
|
|
(A(), false, 1): null,
|
|
// [error column 3, length 15]
|
|
// [analyzer] COMPILE_TIME_ERROR.CONST_MAP_KEY_NOT_PRIMITIVE_EQUALITY
|
|
};
|
|
|
|
void main() {}
|