library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;

class E0 extends core::_Enum /*isEnum*/  {
  static const field core::List<self::E0> values = #C8;
  final field core::int foo;
  final field core::int bar;
  static const field self::E0 one = #C4;
  static const field self::E0 two = #C7;
  const constructor •(core::int #index, core::String #name = #C9, core::int foo, {required core::int bar = #C9}) → self::E0
    : self::E0::foo = foo, self::E0::bar = bar, super core::_Enum::•(#index, #name)
    ;
  method toString() → core::String
    return "E0.${this.{core::_Enum::_name}{core::String}}";
}
class E1<X extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
  static const field core::List<self::E1<dynamic>> values = #C13;
  final field self::E1::X% foo;
  static const field self::E1<core::String> one = #C11;
  static const field self::E1<core::int> two = #C12;
  const constructor •(core::int #index = #C9, core::String #name, {required self::E1::X% foo = #C9}) → self::E1<self::E1::X%>
    : self::E1::foo = foo, super core::_Enum::•(#index, #name)
    ;
  method toString() → core::String
    return "E1.${this.{core::_Enum::_name}{core::String}}";
}
class E2<X extends core::Object? = dynamic, Y extends core::Object? = dynamic, Z extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
  static const field core::List<self::E2<dynamic, dynamic, dynamic>> values = #C22;
  final field self::E2::X% foo;
  final field self::E2::Y% bar;
  final field self::E2::Z? baz;
  static const field self::E2<core::int, core::String, core::double> one = #C15;
  static const field self::E2<core::String, core::int, core::double> two = #C17;
  static const field self::E2<core::double, core::bool, dynamic> three = #C21;
  const constructor •(core::int #index, core::String #name = #C9, self::E2::X% foo, {required self::E2::Y% bar = #C9, has-declared-initializer self::E2::Z? baz = #C9}) → self::E2<self::E2::X%, self::E2::Y%, self::E2::Z%>
    : self::E2::foo = foo, self::E2::bar = bar, self::E2::baz = baz, super core::_Enum::•(#index, #name)
    ;
  method toString() → core::String
    return "E2.${this.{core::_Enum::_name}{core::String}}";
}
static method main() → dynamic {}

constants  {
  #C1 = 1
  #C2 = 0
  #C3 = "one"
  #C4 = self::E0 {foo:#C1, bar:#C1, index:#C2, _name:#C3}
  #C5 = 2
  #C6 = "two"
  #C7 = self::E0 {foo:#C5, bar:#C5, index:#C1, _name:#C6}
  #C8 = <self::E0>[#C4, #C7]
  #C9 = null
  #C10 = "1"
  #C11 = self::E1<core::String> {foo:#C10, index:#C2, _name:#C3}
  #C12 = self::E1<core::int> {foo:#C5, index:#C1, _name:#C6}
  #C13 = <self::E1<dynamic>>[#C11, #C12]
  #C14 = 3.14
  #C15 = self::E2<core::int, core::String, core::double> {foo:#C1, bar:#C10, baz:#C14, index:#C2, _name:#C3}
  #C16 = "2"
  #C17 = self::E2<core::String, core::int, core::double> {foo:#C16, bar:#C5, baz:#C14, index:#C1, _name:#C6}
  #C18 = 3.0
  #C19 = false
  #C20 = "three"
  #C21 = self::E2<core::double, core::bool, dynamic> {foo:#C18, bar:#C19, baz:#C9, index:#C5, _name:#C20}
  #C22 = <self::E2<dynamic, dynamic, dynamic>>[#C15, #C17, #C21]
}


Constructor coverage from constants:
org-dartlang-testcase:///named_arguments.dart:
- E0. (from org-dartlang-testcase:///named_arguments.dart:12: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)
- E1. (from org-dartlang-testcase:///named_arguments.dart:21:9)
- E2. (from org-dartlang-testcase:///named_arguments.dart:33:9)
