library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/general/instantiate_enum/main.dart:12:3: Error: Enums can't be instantiated.
//   Enum1(123, 'foo');
//   ^^^^^
//
// pkg/front_end/testcases/general/instantiate_enum/main.dart:13:3: Error: Enums can't be instantiated.
//   Enum2(123, 'foo');
//   ^^^^^
//
// pkg/front_end/testcases/general/instantiate_enum/main.dart:14:3: Error: Enums can't be instantiated.
//   Alias1(123, 'foo');
//   ^^^^^^
//
// pkg/front_end/testcases/general/instantiate_enum/main.dart:15:3: Error: Enums can't be instantiated.
//   Alias2(123, 'foo');
//   ^^^^^^
//
import self as self;
import "dart:core" as core;

import "org-dartlang-testcase:///main_lib.dart";

typedef Alias1 = self::Enum1;
class Enum1 extends core::_Enum /*isEnum*/  {
  static const field core::List<self::Enum1> values = #C10;
  static const field self::Enum1 a = #C3;
  static const field self::Enum1 b = #C6;
  static const field self::Enum1 c = #C9;
  const constructor •(core::int #index, core::String #name) → self::Enum1
    : super core::_Enum::•(#index, #name)
    ;
  method toString() → core::String
    return "Enum1.${this.{core::_Enum::_name}{core::String}}";
}
static method test() → dynamic {
  invalid-expression "pkg/front_end/testcases/general/instantiate_enum/main.dart:12:3: Error: Enums can't be instantiated.
  Enum1(123, 'foo');
  ^^^^^";
  invalid-expression "pkg/front_end/testcases/general/instantiate_enum/main.dart:13:3: Error: Enums can't be instantiated.
  Enum2(123, 'foo');
  ^^^^^";
  invalid-expression "pkg/front_end/testcases/general/instantiate_enum/main.dart:14:3: Error: Enums can't be instantiated.
  Alias1(123, 'foo');
  ^^^^^^";
  invalid-expression "pkg/front_end/testcases/general/instantiate_enum/main.dart:15:3: Error: Enums can't be instantiated.
  Alias2(123, 'foo');
  ^^^^^^";
}
static method main() → dynamic {}

library /*isNonNullableByDefault*/;
import self as self2;
import "dart:core" as core;

typedef Alias2 = self2::Enum2;
class Enum2 extends core::_Enum /*isEnum*/  {
  static const field core::List<self2::Enum2> values = #C14;
  static const field self2::Enum2 a = #C11;
  static const field self2::Enum2 b = #C12;
  static const field self2::Enum2 c = #C13;
  const constructor •(core::int #index, core::String #name) → self2::Enum2
    : super core::_Enum::•(#index, #name)
    ;
  method toString() → core::String
    return "Enum2.${this.{core::_Enum::_name}{core::String}}";
}

constants  {
  #C1 = 0
  #C2 = "a"
  #C3 = self::Enum1 {index:#C1, _name:#C2}
  #C4 = 1
  #C5 = "b"
  #C6 = self::Enum1 {index:#C4, _name:#C5}
  #C7 = 2
  #C8 = "c"
  #C9 = self::Enum1 {index:#C7, _name:#C8}
  #C10 = <self::Enum1*>[#C3, #C6, #C9]
  #C11 = self2::Enum2 {index:#C1, _name:#C2}
  #C12 = self2::Enum2 {index:#C4, _name:#C5}
  #C13 = self2::Enum2 {index:#C7, _name:#C8}
  #C14 = <self2::Enum2*>[#C11, #C12, #C13]
}


Constructor coverage from constants:
org-dartlang-testcase:///main_lib.dart:
- Enum2. (from org-dartlang-testcase:///main_lib.dart:5:6)
- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)

org-dartlang-testcase:///main.dart:
- Enum1. (from org-dartlang-testcase:///main.dart:7:6)
- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
