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

class int extends core::Object {
  synthetic constructor •() → self::int
    : super core::Object::•()
    ;
}
class Object extends core::Object {
  synthetic constructor •() → self::Object
    : super core::Object::•()
    ;
}
class String extends core::Object {
  synthetic constructor •() → self::String
    : super core::Object::•()
    ;
}
class _Enum extends core::Object {
  synthetic constructor •() → self::_Enum
    : super core::Object::•()
    ;
}
class List extends core::Object {
  synthetic constructor •() → self::List
    : super core::Object::•()
    ;
}
class E extends core::_Enum /*isEnum*/  {
  static const field core::List<self::E> values = #C16;
  static const field self::E int = #C3;
  static const field self::E Object = #C6;
  static const field self::E String = #C9;
  static const field self::E _Enum = #C12;
  static const field self::E List = #C15;
  const constructor •(core::int index, core::String name) → self::E
    : 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 = "int"
  #C3 = self::E {index:#C1, _name:#C2}
  #C4 = 1
  #C5 = "Object"
  #C6 = self::E {index:#C4, _name:#C5}
  #C7 = 2
  #C8 = "String"
  #C9 = self::E {index:#C7, _name:#C8}
  #C10 = 3
  #C11 = "_Enum"
  #C12 = self::E {index:#C10, _name:#C11}
  #C13 = 4
  #C14 = "List"
  #C15 = self::E {index:#C13, _name:#C14}
  #C16 = <self::E*>[#C3, #C6, #C9, #C12, #C15]
}


Constructor coverage from constants:
org-dartlang-testcase:///enum_names_from_core.dart:
- E. (from org-dartlang-testcase:///enum_names_from_core.dart:15:6)
- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
