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

class Enum extends core::Object implements core::Enum /*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}{core::String};
}
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
  ;


Extra constant evaluation status:
Evaluated: ListLiteral @ org-dartlang-testcase:///switch_nullable_enum.dart:5:6 -> ListConstant(const <Enum*>[const Enum{Enum.index: 0, Enum._name: "Enum.e1"}, const Enum{Enum.index: 1, Enum._name: "Enum.e2"}])
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///switch_nullable_enum.dart:5:13 -> InstanceConstant(const Enum{Enum.index: 0, Enum._name: "Enum.e1"})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///switch_nullable_enum.dart:5:17 -> InstanceConstant(const Enum{Enum.index: 1, Enum._name: "Enum.e2"})
Extra constant evaluation: evaluated: 7, effectively constant: 3
