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

class Enum extends core::Object /*isEnum*/  {
  final field core::int index;
  final field core::String _name;
  static const field core::List<self::Enum> values = const <self::Enum>[self::Enum::e1, self::Enum::e2];
  static const field self::Enum e1 = const self::Enum::•(0, "Enum.e1");
  static const field self::Enum e2 = const self::Enum::•(1, "Enum.e2");
  const constructor •(core::int index, core::String _name) → self::Enum
    : self::Enum::index = index, self::Enum::_name = _name, super core::Object::•()
    ;
  method toString() → core::String
    return this.{=self::Enum::_name};
}
static method method1(self::Enum? e) → core::int
  ;
static method method2(self::Enum? e) → core::int
  ;
static method method3(self::Enum? e) → core::int
  ;
static method method4(self::Enum? e) → core::int
  ;
static method test() → dynamic
  ;
static method main() → dynamic
  ;
static method expect(dynamic expected, dynamic actual) → dynamic
  ;
