| // 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() {} |