library;
import self as self;
import "dart:core" as core;

class Enum extends core::_Enum /*isEnum*/  {
  enum-element static const field self::Enum a = const self::Enum::•(0, "a");
  enum-element static const field self::Enum b = const self::Enum::•(1, "b");
  enum-element static const field self::Enum c = const self::Enum::•(2, "c");
  static const field core::List<self::Enum> values = const <self::Enum>[self::Enum::a, self::Enum::b, self::Enum::c];
  const synthetic constructor •(core::int #index, core::String #name) → self::Enum
    : super core::_Enum::•(#index, #name)
    ;
  method core::_enumToString() → core::String
    return "Enum.${this.{core::_Enum::_name}{core::String}}";
}
static method method(dynamic e) → dynamic
  ;
static method method2(self::Enum e) → dynamic
  ;


Extra constant evaluation status:
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///omitted_break.dart:5:13 -> InstanceConstant(const Enum{_Enum.index: 0, _Enum._name: "a"})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///omitted_break.dart:5:16 -> InstanceConstant(const Enum{_Enum.index: 1, _Enum._name: "b"})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///omitted_break.dart:5:19 -> InstanceConstant(const Enum{_Enum.index: 2, _Enum._name: "c"})
Evaluated: ListLiteral @ org-dartlang-testcase:///omitted_break.dart:5:6 -> ListConstant(const <Enum>[const Enum{_Enum.index: 0, _Enum._name: "a"}, const Enum{_Enum.index: 1, _Enum._name: "b"}, const Enum{_Enum.index: 2, _Enum._name: "c"}])
Extra constant evaluation: evaluated: 9, effectively constant: 4
