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
  ;


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
