library /*isNonNullableByDefault*/;
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<dynamic, dynamic>>[self::E::element];
  static const field self::E<core::num, core::num> element = const self::E::•<core::num, core::num>(0, "element");
  const constructor •(core::int index, core::String name) → self::E<self::E::S, self::E::T>
    ;
  method toString() → 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<dynamic, dynamic>*>[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
