library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart:6:4: Error: Couldn't find constructor 'T'.
//   t;
//    ^
//
// pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart:12:4: Error: Couldn't find constructor 'S.named'.
//   s.named();
//    ^
//
import self as self;
import "dart:core" as core;

class T extends core::_Enum /*isEnum*/  {
  static const field core::List<self::T> values = const <self::T>[self::T::t];
  static const field self::T t = invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart:6:4: Error: Couldn't find constructor 'T'.
  t;
   ^";
  const constructor named(core::int index, core::String name) → self::T
    : super core::_Enum::•(index, name)
    ;
  method toString() → core::String
    return "T.${this.{core::_Enum::_name}{core::String}}";
}
class S extends core::_Enum /*isEnum*/  {
  static const field core::List<self::S> values = const <self::S>[self::S::s];
  static const field self::S s = invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart:12:4: Error: Couldn't find constructor 'S.named'.
  s.named();
   ^^^^^";
  const constructor •(core::int index, core::String name) → self::S
    : super core::_Enum::•(index, name)
    ;
  method toString() → core::String
    return "S.${this.{core::_Enum::_name}{core::String}}";
}
static method main() → void
  ;
