library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:8:11: Error: An enum can't declare a non-abstract member named 'hashCode'.
//   int get hashCode => 42; // Error.
//           ^^^^^^^^
//
// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:14:14: Error: An enum can't declare a non-abstract member named 'hashCode'.
//   String get hashCode => "foo"; // Error.
//              ^^^^^^^^
//
// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:20:13: Error: An enum can't declare a non-abstract member named 'hashCode'.
//   final int hashCode = 42; // Error.
//             ^^^^^^^^
//
// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:26:16: Error: An enum can't declare a non-abstract member named 'hashCode'.
//   List<String> hashCode() => []; // Error.
//                ^^^^^^^^
//
// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:32:13: Error: An enum can't declare a non-abstract member named 'hashCode'.
//   Never get hashCode => throw 42; // Error.
//             ^^^^^^^^
//
// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:38:22: Error: An enum can't declare a non-abstract member named 'hashCode'.
//   final int foo = 0, hashCode = 1, bar = 2; // Error.
//                      ^^^^^^^^
//
// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:64:18: Error: An enum can't declare a non-abstract member named 'hashCode'.
//   static int get hashCode => 42; // Error.
//                  ^^^^^^^^
//
// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:26:16: Error: Can't declare a member that conflicts with an inherited one.
//   List<String> hashCode() => []; // Error.
//                ^^^^^^^^
// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the inherited member.
//   int get hashCode => _getHash(this);
//           ^^^^^^^^
//
// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:64:18: Error: Can't declare a member that conflicts with an inherited one.
//   static int get hashCode => 42; // Error.
//                  ^^^^^^^^
// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the inherited member.
//   int get hashCode => _getHash(this);
//           ^^^^^^^^
//
// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:70:19: Error: Can't declare a member that conflicts with an inherited one.
//   static void set hashCode(int value) {} // Error.
//                   ^^^^^^^^
// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the inherited member.
//   int get hashCode => _getHash(this);
//           ^^^^^^^^
//
// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:74:3: Error: Can't declare a member that conflicts with an inherited one.
//   hashCode // Error.
//   ^^^^^^^^
// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the inherited member.
//   int get hashCode => _getHash(this);
//           ^^^^^^^^
//
// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:14:14: Error: The return type of the method 'E2.hashCode' is 'String', which does not match the return type, 'int', of the overridden method, 'Object.hashCode'.
// Change to a subtype of 'int'.
//   String get hashCode => "foo"; // Error.
//              ^
// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the overridden method ('hashCode').
//   int get hashCode => _getHash(this);
//           ^
//
// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:52:12: Error: The type 'int' of the inherited getter 'Object.hashCode' is not a subtype of the type 'String' of the setter 'E8.hashCode'.
//   void set hashCode(String value) {} // Error.
//            ^^^^^^^^
// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the declaration of the getter 'Object.hashCode'.
//   int get hashCode => _getHash(this);
//           ^^^^^^^^
//
// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:58:14: Error: The return type of the method 'E9.hashCode' is 'double', which does not match the return type, 'int', of the overridden method, 'Object.hashCode'.
// Change to a subtype of 'int'.
//   double get hashCode; // Error.
//              ^
// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the overridden method ('hashCode').
//   int get hashCode => _getHash(this);
//           ^
//
// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:55:6: Error: The implementation of 'hashCode' in the non-abstract class 'E9' does not conform to its interface.
// enum E9 {
//      ^^
// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: The return type of the method 'Object.hashCode' is 'int', which does not match the return type, 'double', of the overridden method, 'E9.hashCode'.
// Change to a subtype of 'double'.
//   int get hashCode => _getHash(this);
//           ^
// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:58:14: Context: This is the overridden method ('hashCode').
//   double get hashCode; // Error.
//              ^
//
// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:87:6: Error: The implementation of 'hashCode' in the non-abstract class 'E14' does not conform to its interface.
// enum E14 implements I14 { element } // Error.
//      ^^^
// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: The return type of the method 'Object.hashCode' is 'int', which does not match the return type, 'Never', of the overridden method, 'I14.hashCode'.
// Change to a subtype of 'Never'.
//   int get hashCode => _getHash(this);
//           ^
// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:84:13: Context: This is the overridden method ('hashCode').
//   Never get hashCode;
//             ^
//
import self as self;
import "dart:core" as core;

class E1 extends core::_Enum /*isEnum*/  {
  static const field core::List<self::E1> values = const <self::E1>[self::E1::element];
  static const field self::E1 element = const self::E1::•(0, "element");
  const constructor •(core::int #index, core::String #name) → self::E1
    : super core::_Enum::•(#index, #name)
    ;
  method toString() → core::String
    return "E1.${this.{core::_Enum::_name}{core::String}}";
  get hashCode() → core::int
    ;
}
class E2 extends core::_Enum /*isEnum*/  {
  static const field core::List<self::E2> values = const <self::E2>[self::E2::element];
  static const field self::E2 element = const self::E2::•(0, "element");
  const constructor •(core::int #index, core::String #name) → self::E2
    : super core::_Enum::•(#index, #name)
    ;
  method toString() → core::String
    return "E2.${this.{core::_Enum::_name}{core::String}}";
  get hashCode() → core::String
    ;
}
class E3 extends core::_Enum /*isEnum*/  {
  static const field core::List<self::E3> values = const <self::E3>[self::E3::element];
  final field core::int hashCode;
  static const field self::E3 element = const self::E3::•(0, "element");
  const constructor •(core::int #index, core::String #name) → self::E3
    : super core::_Enum::•(#index, #name)
    ;
  method toString() → core::String
    return "E3.${this.{core::_Enum::_name}{core::String}}";
}
class E4 extends core::_Enum /*isEnum*/  {
  static const field core::List<self::E4> values = const <self::E4>[self::E4::element];
  static const field self::E4 element = const self::E4::•(0, "element");
  const constructor •(core::int #index, core::String #name) → self::E4
    : super core::_Enum::•(#index, #name)
    ;
  method toString() → core::String
    return "E4.${this.{core::_Enum::_name}{core::String}}";
  method hashCode() → core::List<core::String>
    ;
}
class E5 extends core::_Enum /*isEnum*/  {
  static const field core::List<self::E5> values = const <self::E5>[self::E5::element];
  static const field self::E5 element = const self::E5::•(0, "element");
  const constructor •(core::int #index, core::String #name) → self::E5
    : super core::_Enum::•(#index, #name)
    ;
  method toString() → core::String
    return "E5.${this.{core::_Enum::_name}{core::String}}";
  get hashCode() → Never
    ;
}
class E6 extends core::_Enum /*isEnum*/  {
  static const field core::List<self::E6> values = const <self::E6>[self::E6::element];
  final field core::int foo;
  final field core::int hashCode;
  final field core::int bar;
  static const field self::E6 element = const self::E6::•(0, "element");
  const constructor •(core::int #index, core::String #name) → self::E6
    : super core::_Enum::•(#index, #name)
    ;
  method toString() → core::String
    return "E6.${this.{core::_Enum::_name}{core::String}}";
}
class E7 extends core::_Enum /*isEnum*/  {
  static const field core::List<self::E7> values = const <self::E7>[self::E7::element];
  static const field self::E7 element = const self::E7::•(0, "element");
  const constructor •(core::int #index, core::String #name) → self::E7
    : super core::_Enum::•(#index, #name)
    ;
  method toString() → core::String
    return "E7.${this.{core::_Enum::_name}{core::String}}";
  set hashCode(core::int value) → void
    ;
  abstract get hashCode() → core::int;
}
class E8 extends core::_Enum /*isEnum*/  {
  static const field core::List<self::E8> values = const <self::E8>[self::E8::element];
  static const field self::E8 element = const self::E8::•(0, "element");
  const constructor •(core::int #index, core::String #name) → self::E8
    : super core::_Enum::•(#index, #name)
    ;
  method toString() → core::String
    return "E8.${this.{core::_Enum::_name}{core::String}}";
  set hashCode(core::String value) → void
    ;
}
class E9 extends core::_Enum /*isEnum*/  {
  static const field core::List<self::E9> values = const <self::E9>[self::E9::element];
  static const field self::E9 element = const self::E9::•(0, "element");
  const constructor •(core::int #index, core::String #name) → self::E9
    : super core::_Enum::•(#index, #name)
    ;
  method toString() → core::String
    return "E9.${this.{core::_Enum::_name}{core::String}}";
  abstract get hashCode() → core::double;
}
class E10 extends core::_Enum /*isEnum*/  {
  static const field core::List<self::E10> values = const <self::E10>[self::E10::element];
  static const field self::E10 element = const self::E10::•(0, "element");
  const constructor •(core::int #index, core::String #name) → self::E10
    : super core::_Enum::•(#index, #name)
    ;
  method toString() → core::String
    return "E10.${this.{core::_Enum::_name}{core::String}}";
  static get hashCode() → core::int
    ;
}
class E11 extends core::_Enum /*isEnum*/  {
  static const field core::List<self::E11> values = const <self::E11>[self::E11::element];
  static const field self::E11 element = const self::E11::•(0, "element");
  const constructor •(core::int #index, core::String #name) → self::E11
    : super core::_Enum::•(#index, #name)
    ;
  method toString() → core::String
    return "E11.${this.{core::_Enum::_name}{core::String}}";
  static set hashCode(core::int value) → void
    ;
}
class E12 extends core::_Enum /*isEnum*/  {
  static const field core::List<self::E12> values = const <self::E12>[self::E12::hashCode];
  static const field self::E12 hashCode = const self::E12::•(0, "hashCode");
  const constructor •(core::int #index, core::String #name) → self::E12
    : super core::_Enum::•(#index, #name)
    ;
  method toString() → core::String
    return "E12.${this.{core::_Enum::_name}{core::String}}";
}
abstract class I13 extends core::Object {
  synthetic constructor •() → self::I13
    ;
  abstract get hashCode() → core::int;
}
class E13 extends core::_Enum implements self::I13 /*isEnum*/  {
  static const field core::List<self::E13> values = const <self::E13>[self::E13::element];
  static const field self::E13 element = const self::E13::•(0, "element");
  const constructor •(core::int #index, core::String #name) → self::E13
    : super core::_Enum::•(#index, #name)
    ;
  method toString() → core::String
    return "E13.${this.{core::_Enum::_name}{core::String}}";
}
abstract class I14 extends core::Object {
  synthetic constructor •() → self::I14
    ;
  abstract get hashCode() → Never;
}
class E14 extends core::_Enum implements self::I14 /*isEnum*/  {
  static const field core::List<self::E14> values = const <self::E14>[self::E14::element];
  static const field self::E14 element = const self::E14::•(0, "element");
  const constructor •(core::int #index, core::String #name) → self::E14
    : super core::_Enum::•(#index, #name)
    ;
  method toString() → core::String
    return "E14.${this.{core::_Enum::_name}{core::String}}";
  abstract member-signature get hashCode() → Never; -> self::I14::hashCode
}
static method main() → dynamic
  ;


Extra constant evaluation status:
Evaluated: ListLiteral @ org-dartlang-testcase:///declared_hashcode.dart:5:6 -> ListConstant(const <E1*>[const E1{_Enum.index: 0, _Enum._name: "element"}])
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_hashcode.dart:6:3 -> InstanceConstant(const E1{_Enum.index: 0, _Enum._name: "element"})
Evaluated: ListLiteral @ org-dartlang-testcase:///declared_hashcode.dart:11:6 -> ListConstant(const <E2*>[const E2{_Enum.index: 0, _Enum._name: "element"}])
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_hashcode.dart:12:3 -> InstanceConstant(const E2{_Enum.index: 0, _Enum._name: "element"})
Evaluated: ListLiteral @ org-dartlang-testcase:///declared_hashcode.dart:17:6 -> ListConstant(const <E3*>[const E3{E3.hashCode: null, _Enum.index: 0, _Enum._name: "element"}])
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_hashcode.dart:18:3 -> InstanceConstant(const E3{E3.hashCode: null, _Enum.index: 0, _Enum._name: "element"})
Evaluated: ListLiteral @ org-dartlang-testcase:///declared_hashcode.dart:23:6 -> ListConstant(const <E4*>[const E4{_Enum.index: 0, _Enum._name: "element"}])
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_hashcode.dart:24:3 -> InstanceConstant(const E4{_Enum.index: 0, _Enum._name: "element"})
Evaluated: ListLiteral @ org-dartlang-testcase:///declared_hashcode.dart:29:6 -> ListConstant(const <E5*>[const E5{_Enum.index: 0, _Enum._name: "element"}])
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_hashcode.dart:30:3 -> InstanceConstant(const E5{_Enum.index: 0, _Enum._name: "element"})
Evaluated: ListLiteral @ org-dartlang-testcase:///declared_hashcode.dart:35:6 -> ListConstant(const <E6*>[const E6{E6.foo: null, E6.hashCode: null, E6.bar: null, _Enum.index: 0, _Enum._name: "element"}])
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_hashcode.dart:36:3 -> InstanceConstant(const E6{E6.foo: null, E6.hashCode: null, E6.bar: null, _Enum.index: 0, _Enum._name: "element"})
Evaluated: ListLiteral @ org-dartlang-testcase:///declared_hashcode.dart:41:6 -> ListConstant(const <E7*>[const E7{_Enum.index: 0, _Enum._name: "element"}])
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_hashcode.dart:42:3 -> InstanceConstant(const E7{_Enum.index: 0, _Enum._name: "element"})
Evaluated: ListLiteral @ org-dartlang-testcase:///declared_hashcode.dart:49:6 -> ListConstant(const <E8*>[const E8{_Enum.index: 0, _Enum._name: "element"}])
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_hashcode.dart:50:3 -> InstanceConstant(const E8{_Enum.index: 0, _Enum._name: "element"})
Evaluated: ListLiteral @ org-dartlang-testcase:///declared_hashcode.dart:55:6 -> ListConstant(const <E9*>[const E9{_Enum.index: 0, _Enum._name: "element"}])
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_hashcode.dart:56:3 -> InstanceConstant(const E9{_Enum.index: 0, _Enum._name: "element"})
Evaluated: ListLiteral @ org-dartlang-testcase:///declared_hashcode.dart:61:6 -> ListConstant(const <E10*>[const E10{_Enum.index: 0, _Enum._name: "element"}])
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_hashcode.dart:62:3 -> InstanceConstant(const E10{_Enum.index: 0, _Enum._name: "element"})
Evaluated: ListLiteral @ org-dartlang-testcase:///declared_hashcode.dart:67:6 -> ListConstant(const <E11*>[const E11{_Enum.index: 0, _Enum._name: "element"}])
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_hashcode.dart:68:3 -> InstanceConstant(const E11{_Enum.index: 0, _Enum._name: "element"})
Evaluated: ListLiteral @ org-dartlang-testcase:///declared_hashcode.dart:73:6 -> ListConstant(const <E12*>[const E12{_Enum.index: 0, _Enum._name: "hashCode"}])
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_hashcode.dart:74:3 -> InstanceConstant(const E12{_Enum.index: 0, _Enum._name: "hashCode"})
Evaluated: ListLiteral @ org-dartlang-testcase:///declared_hashcode.dart:81:6 -> ListConstant(const <E13*>[const E13{_Enum.index: 0, _Enum._name: "element"}])
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_hashcode.dart:81:27 -> InstanceConstant(const E13{_Enum.index: 0, _Enum._name: "element"})
Evaluated: ListLiteral @ org-dartlang-testcase:///declared_hashcode.dart:87:6 -> ListConstant(const <E14*>[const E14{_Enum.index: 0, _Enum._name: "element"}])
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_hashcode.dart:87:27 -> InstanceConstant(const E14{_Enum.index: 0, _Enum._name: "element"})
Extra constant evaluation: evaluated: 98, effectively constant: 28
