library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart:9:17: Error: Expected '(' after this.
//   four<num, bool>; // Error.
//                 ^
//
import self as self;
import "dart:core" as core;

class E<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
  static const field core::List<self::E<dynamic, dynamic>> values = #C13;
  static const field self::E<core::int, core::String> one = #C3;
  static const field self::E<core::double, core::num> two = #C6;
  static const field self::E<core::int, core::int> three = #C9;
  static const field self::E<core::num, core::bool> four = #C12;
  const constructor •(core::int index, core::String name) → self::E<self::E::X%, self::E::Y%>
    : super core::_Enum::•(index, name)
    ;
  const constructor named(core::int index, core::String name, core::int value) → self::E<self::E::X%, self::E::Y%>
    : super core::_Enum::•(index, name)
    ;
  method toString() → core::String
    return "E.${this.{core::_Enum::_name}{core::String}}";
}
static method main() → dynamic {}

constants  {
  #C1 = 0
  #C2 = "one"
  #C3 = self::E<core::int*, core::String*> {index:#C1, _name:#C2}
  #C4 = 1
  #C5 = "two"
  #C6 = self::E<core::double*, core::num*> {index:#C4, _name:#C5}
  #C7 = 2
  #C8 = "three"
  #C9 = self::E<core::int*, core::int*> {index:#C7, _name:#C8}
  #C10 = 3
  #C11 = "four"
  #C12 = self::E<core::num*, core::bool*> {index:#C10, _name:#C11}
  #C13 = <self::E<dynamic, dynamic>*>[#C3, #C6, #C9, #C12]
}


Constructor coverage from constants:
org-dartlang-testcase:///entries_with_type_arguments.dart:
- E. (from org-dartlang-testcase:///entries_with_type_arguments.dart:11:9)
- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- E.named (from org-dartlang-testcase:///entries_with_type_arguments.dart:12:9)
