library;
//
// Problems in library:
//
// pkg/front_end/testcases/general/issue54267b.dart:10:16: Error: 'value' isn't an instance field of this class.
//   const A(this.value);
//                ^^^^^
//
// pkg/front_end/testcases/general/issue54267b.dart:9:13: Error: Final field 'value2' is not initialized.
// Try to initialize the field in the declaration or in every constructor.
//   final int value2;
//             ^^^^^^
//
import self as self;
import "dart:core" as core;

class A extends core::_Enum /*isEnum*/  {
  enum-element static const field self::A a = invalid-expression "pkg/front_end/testcases/general/issue54267b.dart:10:16: Error: 'value' isn't an instance field of this class.
  const A(this.value);
               ^^^^^";
  enum-element static const field self::A b = invalid-expression "pkg/front_end/testcases/general/issue54267b.dart:10:16: Error: 'value' isn't an instance field of this class.
  const A(this.value);
               ^^^^^";
  final field core::int value2 = null;
  static const field core::List<self::A> values = invalid-expression "pkg/front_end/testcases/general/issue54267b.dart:10:16: Error: 'value' isn't an instance field of this class.
  const A(this.value);
               ^^^^^";
  const constructor •(core::int #index, core::String #name, initializing-formal dynamic value) → self::A
    : invalid-initializer "pkg/front_end/testcases/general/issue54267b.dart:10:16: Error: 'value' isn't an instance field of this class.
  const A(this.value);
               ^^^^^"
    ;
  method core::_enumToString() → core::String
    return "A.${this.{core::_Enum::_name}{core::String}}";
}
static method fn(self::A a) → core::int
  return block {
    core::int #t1;
    #L1:
    switch(a) /* isExplicitlyExhaustive, self::A */ {
      #L2:
      case invalid-expression "pkg/front_end/testcases/general/issue54267b.dart:10:16: Error: 'value' isn't an instance field of this class.
  const A(this.value);
               ^^^^^":
        {
          #t1 = 0;
          break #L1;
        }
      #L3:
      case invalid-expression "pkg/front_end/testcases/general/issue54267b.dart:10:16: Error: 'value' isn't an instance field of this class.
  const A(this.value);
               ^^^^^":
        {
          #t1 = 1;
          break #L1;
        }
    }
  } =>#t1;



Constructor coverage from constants:
org-dartlang-testcase:///issue54267b.dart:
- A. (from org-dartlang-testcase:///issue54267b.dart:10:9)
