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)
