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

abstract class GM<T extends core::Object? = dynamic> extends core::Enum /*isMixinDeclaration*/  {
}
abstract class M extends core::Object /*isMixinDeclaration*/  {
}
abstract class I extends core::Object {
  synthetic constructor •() → self::I
    ;
}
abstract class GI<T extends core::Object? = dynamic> extends core::Object {
  synthetic constructor •() → self::GI<self::GI::T%>
    ;
}
abstract class _E&_Enum&GM<S extends core::num, T extends core::num> = core::_Enum with self::GM<self::_E&_Enum&GM::T> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •(core::int index, core::String _name) → self::_E&_Enum&GM<self::_E&_Enum&GM::S, self::_E&_Enum&GM::T>
    : super core::_Enum::•(index, _name)
    ;
}
abstract class _E&_Enum&GM&M<S extends core::num, T extends core::num> = self::_E&_Enum&GM<self::_E&_Enum&GM&M::S, self::_E&_Enum&GM&M::T> with self::M /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •(core::int index, core::String _name) → self::_E&_Enum&GM&M<self::_E&_Enum&GM&M::S, self::_E&_Enum&GM&M::T>
    : super self::_E&_Enum&GM::•(index, _name)
    ;
}
class E<S extends core::num, T extends core::num> extends self::_E&_Enum&GM&M<self::E::S, self::E::T> implements self::I, self::GI<self::E::S> /*isEnum*/  {
  static const field core::List<self::E<core::num, core::num>> values = const <self::E<core::num, core::num>>[self::E::element];
  enum-element static const field self::E<core::num, core::num> element = const self::E::•<core::num, core::num>(0, "element");
  const synthetic constructor •(core::int #index, core::String #name) → self::E<self::E::S, self::E::T>
    ;
  method _enumToString() → core::String
    return "E.${this.{core::_Enum::_name}{core::String}}";
}
static method main() → dynamic
  ;


Extra constant evaluation status:
Evaluated: ListLiteral @ org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6 -> ListConstant(const <E<num, num>>[const E<num, num>{}])
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///supertype_resolved_before_checking.dart:18:27 -> InstanceConstant(const E<num, num>{})
Extra constant evaluation: evaluated: 9, effectively constant: 2
