library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/general/duplicated_declarations.dart:9:1: Error: Import directives must precede part directives.
// Try moving the import directives before the part directives.
// import 'duplicated_declarations_lib.dart' as Typedef;
// ^^^^^^
//
// pkg/front_end/testcases/general/duplicated_declarations.dart:11:1: Error: Import directives must precede part directives.
// Try moving the import directives before the part directives.
// import 'duplicated_declarations_lib.dart' as Typedef;
// ^^^^^^
//
// pkg/front_end/testcases/general/duplicated_declarations.dart:15:9: Error: 'Typedef' is already declared in this scope.
// typedef Typedef = Object Function();
//         ^^^^^^^
// pkg/front_end/testcases/general/duplicated_declarations.dart:13:9: Context: Previous declaration of 'Typedef'.
// typedef Typedef = void Function();
//         ^^^^^^^
//
// pkg/front_end/testcases/general/duplicated_declarations.dart:17:1: Error: Directives must appear before any declarations.
// Try moving the directive before any declarations.
// import 'duplicated_declarations_lib.dart' as Typedef;
// ^^^^^^
//
// pkg/front_end/testcases/general/duplicated_declarations.dart:21:16: Error: 'OldTypedef' is already declared in this scope.
// typedef Object OldTypedef();
//                ^^^^^^^^^^
// pkg/front_end/testcases/general/duplicated_declarations.dart:19:14: Context: Previous declaration of 'OldTypedef'.
// typedef void OldTypedef();
//              ^^^^^^^^^^
//
// pkg/front_end/testcases/general/duplicated_declarations.dart:25:5: Error: 'field' is already declared in this scope.
// var field = "2nd";
//     ^^^^^
// pkg/front_end/testcases/general/duplicated_declarations.dart:23:5: Context: Previous declaration of 'field'.
// var field = "1st";
//     ^^^^^
//
// pkg/front_end/testcases/general/duplicated_declarations.dart:31:1: Error: 'main' is already declared in this scope.
// main() {
// ^^^^
// pkg/front_end/testcases/general/duplicated_declarations.dart:27:1: Context: Previous declaration of 'main'.
// main() {
// ^^^^
//
// pkg/front_end/testcases/general/duplicated_declarations.dart:45:3: Error: 'C' is already declared in this scope.
//   C(a, b);
//   ^
// pkg/front_end/testcases/general/duplicated_declarations.dart:44:3: Context: Previous declaration of 'C'.
//   C(a);
//   ^
//
// pkg/front_end/testcases/general/duplicated_declarations.dart:48:7: Error: 'field' is already declared in this scope.
//   var field = "2nd";
//       ^^^^^
// pkg/front_end/testcases/general/duplicated_declarations.dart:46:7: Context: Previous declaration of 'field'.
//   var field = "1st";
//       ^^^^^
//
// pkg/front_end/testcases/general/duplicated_declarations.dart:54:3: Error: 'm' is already declared in this scope.
//   m() {
//   ^
// pkg/front_end/testcases/general/duplicated_declarations.dart:50:3: Context: Previous declaration of 'm'.
//   m() {
//   ^
//
// pkg/front_end/testcases/general/duplicated_declarations.dart:62:10: Error: 's' is already declared in this scope.
//   static s() {
//          ^
// pkg/front_end/testcases/general/duplicated_declarations.dart:58:10: Context: Previous declaration of 's'.
//   static s() {
//          ^
//
// pkg/front_end/testcases/general/duplicated_declarations.dart:74:7: Error: 'C' is already declared in this scope.
// class C {
//       ^
// pkg/front_end/testcases/general/duplicated_declarations.dart:43:7: Context: Previous declaration of 'C'.
// class C {
//       ^
//
// pkg/front_end/testcases/general/duplicated_declarations.dart:79:3: Error: Name of enum constant 'Enum' can't be the same as the enum's own name.
//   Enum,
//   ^^^^
//
// pkg/front_end/testcases/general/duplicated_declarations.dart:81:3: Error: 'a' is already declared in this scope.
//   a,
//   ^
// pkg/front_end/testcases/general/duplicated_declarations.dart:80:3: Context: Previous declaration of 'a'.
//   a,
//   ^
//
// pkg/front_end/testcases/general/duplicated_declarations.dart:85:6: Error: 'Enum' is already declared in this scope.
// enum Enum {
//      ^^^^
// pkg/front_end/testcases/general/duplicated_declarations.dart:78:6: Context: Previous declaration of 'Enum'.
// enum Enum {
//      ^^^^
//
// pkg/front_end/testcases/general/duplicated_declarations.dart:97:3: Error: 'toString' is already declared in this scope.
//   toString,
//   ^^^^^^^^
// pkg/front_end/testcases/general/duplicated_declarations.dart:91:6: Context: Previous declaration of 'toString' is implied by this definition.
// enum AnotherEnum {
//      ^^^^^^^^^^^
//
// pkg/front_end/testcases/general/duplicated_declarations.dart:98:3: Error: 'values' is already declared in this scope.
//   values,
//   ^^^^^^
// pkg/front_end/testcases/general/duplicated_declarations.dart:91:6: Context: Previous declaration of 'values' is implied by this definition.
// enum AnotherEnum {
//      ^^^^^^^^^^^
//
// pkg/front_end/testcases/general/duplicated_declarations_part.dart:13:9: Error: 'Typedef' is already declared in this scope.
// typedef Typedef = void Function();
//         ^^^^^^^
// pkg/front_end/testcases/general/duplicated_declarations.dart:15:9: Context: Previous declaration of 'Typedef'.
// typedef Typedef = Object Function();
//         ^^^^^^^
//
// pkg/front_end/testcases/general/duplicated_declarations_part.dart:19:14: Error: 'OldTypedef' is already declared in this scope.
// typedef void OldTypedef();
//              ^^^^^^^^^^
// pkg/front_end/testcases/general/duplicated_declarations.dart:21:16: Context: Previous declaration of 'OldTypedef'.
// typedef Object OldTypedef();
//                ^^^^^^^^^^
//
// pkg/front_end/testcases/general/duplicated_declarations_part.dart:23:5: Error: 'field' is already declared in this scope.
// var field = "3rd";
//     ^^^^^
// pkg/front_end/testcases/general/duplicated_declarations.dart:25:5: Context: Previous declaration of 'field'.
// var field = "2nd";
//     ^^^^^
//
// pkg/front_end/testcases/general/duplicated_declarations_part.dart:29:1: Error: 'main' is already declared in this scope.
// main() {
// ^^^^
// pkg/front_end/testcases/general/duplicated_declarations.dart:31:1: Context: Previous declaration of 'main'.
// main() {
// ^^^^
//
// pkg/front_end/testcases/general/duplicated_declarations_part.dart:41:7: Error: 'C' is already declared in this scope.
// class C {
//       ^
// pkg/front_end/testcases/general/duplicated_declarations.dart:74:7: Context: Previous declaration of 'C'.
// class C {
//       ^
//
// pkg/front_end/testcases/general/duplicated_declarations_part.dart:75:6: Error: 'Enum' is already declared in this scope.
// enum Enum {
//      ^^^^
// pkg/front_end/testcases/general/duplicated_declarations.dart:85:6: Context: Previous declaration of 'Enum'.
// enum Enum {
//      ^^^^
//
// pkg/front_end/testcases/general/duplicated_declarations_part.dart:9:1: Error: The part-of directive must be the only directive in a part.
// Try removing the other directives, or moving them to the library for which this is a part.
// import 'duplicated_declarations_lib.dart' as Typedef;
// ^^^^^^
//
// pkg/front_end/testcases/general/duplicated_declarations_part.dart:11:1: Error: The part-of directive must be the only directive in a part.
// Try removing the other directives, or moving them to the library for which this is a part.
// import 'duplicated_declarations_lib.dart' as Typedef;
// ^^^^^^
//
// pkg/front_end/testcases/general/duplicated_declarations_part.dart:15:9: Error: 'Typedef' is already declared in this scope.
// typedef Typedef = Object Function();
//         ^^^^^^^
// pkg/front_end/testcases/general/duplicated_declarations_part.dart:13:9: Context: Previous declaration of 'Typedef'.
// typedef Typedef = void Function();
//         ^^^^^^^
//
// pkg/front_end/testcases/general/duplicated_declarations_part.dart:17:1: Error: The part-of directive must be the only directive in a part.
// Try removing the other directives, or moving them to the library for which this is a part.
// import 'duplicated_declarations_lib.dart' as Typedef;
// ^^^^^^
//
// pkg/front_end/testcases/general/duplicated_declarations_part.dart:21:16: Error: 'OldTypedef' is already declared in this scope.
// typedef Object OldTypedef();
//                ^^^^^^^^^^
// pkg/front_end/testcases/general/duplicated_declarations_part.dart:19:14: Context: Previous declaration of 'OldTypedef'.
// typedef void OldTypedef();
//              ^^^^^^^^^^
//
// pkg/front_end/testcases/general/duplicated_declarations_part.dart:25:5: Error: 'field' is already declared in this scope.
// var field = 4;
//     ^^^^^
// pkg/front_end/testcases/general/duplicated_declarations_part.dart:23:5: Context: Previous declaration of 'field'.
// var field = "3rd";
//     ^^^^^
//
// pkg/front_end/testcases/general/duplicated_declarations_part.dart:27:5: Error: 'field' is already declared in this scope.
// var field = 5.0;
//     ^^^^^
// pkg/front_end/testcases/general/duplicated_declarations_part.dart:25:5: Context: Previous declaration of 'field'.
// var field = 4;
//     ^^^^^
//
// pkg/front_end/testcases/general/duplicated_declarations_part.dart:33:1: Error: 'main' is already declared in this scope.
// main() {
// ^^^^
// pkg/front_end/testcases/general/duplicated_declarations_part.dart:29:1: Context: Previous declaration of 'main'.
// main() {
// ^^^^
//
// pkg/front_end/testcases/general/duplicated_declarations_part.dart:37:1: Error: 'main' is already declared in this scope.
// main() {
// ^^^^
// pkg/front_end/testcases/general/duplicated_declarations_part.dart:33:1: Context: Previous declaration of 'main'.
// main() {
// ^^^^
//
// pkg/front_end/testcases/general/duplicated_declarations_part.dart:43:3: Error: 'C' is already declared in this scope.
//   C(a, b);
//   ^
// pkg/front_end/testcases/general/duplicated_declarations_part.dart:42:3: Context: Previous declaration of 'C'.
//   C(a);
//   ^
//
// pkg/front_end/testcases/general/duplicated_declarations_part.dart:46:7: Error: 'field' is already declared in this scope.
//   var field = "2nd";
//       ^^^^^
// pkg/front_end/testcases/general/duplicated_declarations_part.dart:44:7: Context: Previous declaration of 'field'.
//   var field = "1st";
//       ^^^^^
//
// pkg/front_end/testcases/general/duplicated_declarations_part.dart:52:3: Error: 'm' is already declared in this scope.
//   m() {
//   ^
// pkg/front_end/testcases/general/duplicated_declarations_part.dart:48:3: Context: Previous declaration of 'm'.
//   m() {
//   ^
//
// pkg/front_end/testcases/general/duplicated_declarations_part.dart:60:10: Error: 's' is already declared in this scope.
//   static s() {
//          ^
// pkg/front_end/testcases/general/duplicated_declarations_part.dart:56:10: Context: Previous declaration of 's'.
//   static s() {
//          ^
//
// pkg/front_end/testcases/general/duplicated_declarations_part.dart:67:7: Error: 'C' is already declared in this scope.
// class C {
//       ^
// pkg/front_end/testcases/general/duplicated_declarations_part.dart:41:7: Context: Previous declaration of 'C'.
// class C {
//       ^
//
// pkg/front_end/testcases/general/duplicated_declarations_part.dart:71:7: Error: 'C' is already declared in this scope.
// class C {
//       ^
// pkg/front_end/testcases/general/duplicated_declarations_part.dart:67:7: Context: Previous declaration of 'C'.
// class C {
//       ^
//
// pkg/front_end/testcases/general/duplicated_declarations_part.dart:76:3: Error: Name of enum constant 'Enum' can't be the same as the enum's own name.
//   Enum,
//   ^^^^
//
// pkg/front_end/testcases/general/duplicated_declarations_part.dart:78:3: Error: 'a' is already declared in this scope.
//   a,
//   ^
// pkg/front_end/testcases/general/duplicated_declarations_part.dart:77:3: Context: Previous declaration of 'a'.
//   a,
//   ^
//
// pkg/front_end/testcases/general/duplicated_declarations_part.dart:82:6: Error: 'Enum' is already declared in this scope.
// enum Enum {
//      ^^^^
// pkg/front_end/testcases/general/duplicated_declarations_part.dart:75:6: Context: Previous declaration of 'Enum'.
// enum Enum {
//      ^^^^
//
// pkg/front_end/testcases/general/duplicated_declarations_part.dart:88:6: Error: 'Enum' is already declared in this scope.
// enum Enum {
//      ^^^^
// pkg/front_end/testcases/general/duplicated_declarations_part.dart:82:6: Context: Previous declaration of 'Enum'.
// enum Enum {
//      ^^^^
//
// pkg/front_end/testcases/general/duplicated_declarations.dart:9:46: Error: 'Typedef' is already declared in this scope.
// import 'duplicated_declarations_lib.dart' as Typedef;
//                                              ^^^^^^^
// pkg/front_end/testcases/general/duplicated_declarations_part.dart:15:9: Context: Previous declaration of 'Typedef'.
// typedef Typedef = Object Function();
//         ^^^^^^^
//
// pkg/front_end/testcases/general/duplicated_declarations.dart:69:19: Error: 'C' isn't a type.
// class Sub extends C {
//                   ^
// pkg/front_end/testcases/general/duplicated_declarations.dart:69:19: Context: This isn't a type.
// class Sub extends C {
//                   ^
//
// pkg/front_end/testcases/general/duplicated_declarations.dart:96:3: Error: Can't declare a member that conflicts with an inherited one.
//   index,
//   ^^^^^
// sdk/lib/core/enum.dart:101:13: Context: This is the inherited member.
//   final int index;
//             ^^^^^
//
// pkg/front_end/testcases/general/duplicated_declarations.dart:36:3: Error: Can't use 'main' because it is declared more than once.
//   main();
//   ^
//
// pkg/front_end/testcases/general/duplicated_declarations.dart:37:9: Error: Can't use 'field' because it is declared more than once.
//   print(field);
//         ^
//
// pkg/front_end/testcases/general/duplicated_declarations.dart:38:3: Error: Can't use 'C' because it is declared more than once.
//   C.s();
//   ^
//
// pkg/front_end/testcases/general/duplicated_declarations.dart:39:5: Error: Expected identifier, but got 'this'.
//   C.this();
//     ^^^^
//
// pkg/front_end/testcases/general/duplicated_declarations.dart:40:6: Error: Expected an identifier, but got ')'.
// Try inserting an identifier before ')'.
//   C.();
//      ^
//
// pkg/front_end/testcases/general/duplicated_declarations.dart:40:5: Error: Expected an identifier, but got '('.
// Try inserting an identifier before '('.
//   C.();
//     ^
//
// pkg/front_end/testcases/general/duplicated_declarations.dart:66:17: Error: Can't use 's' because it is declared more than once.
//   static f() => s;
//                 ^
//
// pkg/front_end/testcases/general/duplicated_declarations.dart:70:16: Error: Too many positional arguments: 0 allowed, but 1 found.
// Try removing the extra positional arguments.
//   Sub() : super(null);
//                ^
//
// pkg/front_end/testcases/general/duplicated_declarations.dart:71:16: Error: Superclass has no method named 'm'.
//   m() => super.m();
//                ^
//
// pkg/front_end/testcases/general/duplicated_declarations.dart:108:41: Error: Can't use 'toString' because it is declared more than once.
//     "AnotherEnum.toString": AnotherEnum.toString,
//                                         ^^^^^^^^
//
// pkg/front_end/testcases/general/duplicated_declarations.dart:109:39: Error: Can't use 'values' because it is declared more than once.
//     "AnotherEnum.values": AnotherEnum.values,
//                                       ^^^^^^
//
// pkg/front_end/testcases/general/duplicated_declarations_part.dart:64:17: Error: Can't use 's' because it is declared more than once.
//   static f() => s;
//                 ^
//
import self as self;
import "dart:core" as core;

import "org-dartlang-testcase:///duplicated_declarations_lib.dart" as Typedef;
import "org-dartlang-testcase:///duplicated_declarations_lib.dart" as Typedef;
import "org-dartlang-testcase:///duplicated_declarations_lib.dart" as Typedef;
import "org-dartlang-testcase:///duplicated_declarations_lib.dart" as Typedef;
import "org-dartlang-testcase:///duplicated_declarations_lib.dart" as Typedef;
import "org-dartlang-testcase:///duplicated_declarations_lib.dart" as Typedef;

part duplicated_declarations_part.dart;
typedef Typedef = () → void;
typedef OldTypedef = () → void;
class C#4 extends core::Object { // from org-dartlang-testcase:///duplicated_declarations_part.dart
  constructor _() → self::C#4
    : super core::Object::•()
    ;
}
class C#3 extends core::Object { // from org-dartlang-testcase:///duplicated_declarations_part.dart
  constructor _() → self::C#3
    : super core::Object::•()
    ;
}
class C#2 extends core::Object { // from org-dartlang-testcase:///duplicated_declarations_part.dart
  field core::String field = null;
  constructor •(dynamic a) → self::C#2
    : super core::Object::•()
    ;
  method m() → dynamic {
    "1st";
  }
  static method s() → dynamic {
    "1st";
  }
  static method f() → dynamic
    return invalid-expression "pkg/front_end/testcases/general/duplicated_declarations_part.dart:64:17: Error: Can't use 's' because it is declared more than once.
  static f() => s;
                ^";
}
class C#1 extends core::Object {
  constructor _() → self::C#1
    : super core::Object::•()
    ;
}
class C extends core::Object {
  field core::String field = null;
  constructor •(dynamic a) → self::C
    : super core::Object::•()
    ;
  method m() → dynamic {
    "1st";
  }
  static method s() → dynamic {
    "1st";
  }
  static method f() → dynamic
    return invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:66:17: Error: Can't use 's' because it is declared more than once.
  static f() => s;
                ^";
}
class Sub extends core::Object {
  constructor •() → self::Sub
    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:70:16: Error: Too many positional arguments: 0 allowed, but 1 found.
Try removing the extra positional arguments.
  Sub() : super(null);
               ^"
    ;
  method m() → dynamic
    return super.m();
}
class Enum#4 extends core::_Enum /*isEnum*/  { // from org-dartlang-testcase:///duplicated_declarations_part.dart
  static const field core::List<self::Enum#4> values = #C4;
  static const field self::Enum#4 a = #C3;
  const constructor •(core::int index, core::String name) → self::Enum#4
    : super core::_Enum::•(index, name)
    ;
  method toString() → core::String
    return "Enum#4.${this.{core::_Enum::_name}{core::String}}";
}
class Enum#3 extends core::_Enum /*isEnum*/  { // from org-dartlang-testcase:///duplicated_declarations_part.dart
  static const field core::List<self::Enum#3> values = #C12;
  static const field self::Enum#3 a = #C5;
  static const field self::Enum#3 b = #C8;
  static const field self::Enum#3 c = #C11;
  const constructor •(core::int index, core::String name) → self::Enum#3
    : super core::_Enum::•(index, name)
    ;
  method toString() → core::String
    return "Enum#3.${this.{core::_Enum::_name}{core::String}}";
}
class Enum#2 extends core::_Enum /*isEnum*/  { // from org-dartlang-testcase:///duplicated_declarations_part.dart
  static const field core::List<self::Enum#2> values = #C17;
  static const field self::Enum#2 Enum = #C14;
  static const field self::Enum#2 a = #C15;
  static const field self::Enum#2 b = #C16;
  const constructor •(core::int index, core::String name) → self::Enum#2
    : super core::_Enum::•(index, name)
    ;
  method toString() → core::String
    return "Enum#2.${this.{core::_Enum::_name}{core::String}}";
}
class Enum#1 extends core::_Enum /*isEnum*/  {
  static const field core::List<self::Enum#1> values = #C21;
  static const field self::Enum#1 a = #C18;
  static const field self::Enum#1 b = #C19;
  static const field self::Enum#1 c = #C20;
  const constructor •(core::int index, core::String name) → self::Enum#1
    : super core::_Enum::•(index, name)
    ;
  method toString() → core::String
    return "Enum#1.${this.{core::_Enum::_name}{core::String}}";
}
class Enum extends core::_Enum /*isEnum*/  {
  static const field core::List<self::Enum> values = #C25;
  static const field self::Enum Enum = #C22;
  static const field self::Enum a = #C23;
  static const field self::Enum b = #C24;
  const constructor •(core::int index, core::String name) → self::Enum
    : super core::_Enum::•(index, name)
    ;
  method toString() → core::String
    return "Enum.${this.{core::_Enum::_name}{core::String}}";
}
class AnotherEnum extends core::_Enum /*isEnum*/  {
  static const field core::List<self::AnotherEnum> values = #C35;
  static const field self::AnotherEnum a = #C26;
  static const field self::AnotherEnum b = #C27;
  static const field self::AnotherEnum c = #C28;
  static const field self::AnotherEnum _name = #C31;
  static const field self::AnotherEnum index = #C34;
  const constructor •(core::int index, core::String name) → self::AnotherEnum
    : super core::_Enum::•(index, name)
    ;
  method toString() → core::String
    return "AnotherEnum.${this.{core::_Enum::_name}{core::String}}";
}
static field core::String field;
static method main() → dynamic {
  "1st";
}
static method foo() → dynamic {
  invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:36:3: Error: Can't use 'main' because it is declared more than once.
  main();
  ^"{dynamic}.call();
  core::print(invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:37:9: Error: Can't use 'field' because it is declared more than once.
  print(field);
        ^");
  invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:38:3: Error: Can't use 'C' because it is declared more than once.
  C.s();
  ^"{dynamic}.s();
  invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:39:5: Error: Expected identifier, but got 'this'.
  C.this();
    ^^^^";
  invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:40:5: Error: Expected an identifier, but got '('.
Try inserting an identifier before '('.
  C.();
    ^";
}
static method useAnotherEnum() → dynamic {
  <core::String, core::Object>{"AnotherEnum.a": #C26, "AnotherEnum.b": #C27, "AnotherEnum.c": #C28, "AnotherEnum._name": #C31, "AnotherEnum.index": #C34, "AnotherEnum.toString": invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:108:41: Error: Can't use 'toString' because it is declared more than once.
    \"AnotherEnum.toString\": AnotherEnum.toString,
                                        ^^^^^^^^", "AnotherEnum.values": invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:109:39: Error: Can't use 'values' because it is declared more than once.
    \"AnotherEnum.values\": AnotherEnum.values,
                                      ^^^^^^"};
}

library /*isNonNullableByDefault*/;
import self as self2;


constants  {
  #C1 = 0
  #C2 = "a"
  #C3 = self::Enum#4 {index:#C1, _name:#C2}
  #C4 = <self::Enum#4*>[#C3]
  #C5 = self::Enum#3 {index:#C1, _name:#C2}
  #C6 = 1
  #C7 = "b"
  #C8 = self::Enum#3 {index:#C6, _name:#C7}
  #C9 = 2
  #C10 = "c"
  #C11 = self::Enum#3 {index:#C9, _name:#C10}
  #C12 = <self::Enum#3*>[#C5, #C8, #C11]
  #C13 = "Enum"
  #C14 = self::Enum#2 {index:#C1, _name:#C13}
  #C15 = self::Enum#2 {index:#C6, _name:#C2}
  #C16 = self::Enum#2 {index:#C9, _name:#C7}
  #C17 = <self::Enum#2*>[#C14, #C15, #C16]
  #C18 = self::Enum#1 {index:#C1, _name:#C2}
  #C19 = self::Enum#1 {index:#C6, _name:#C7}
  #C20 = self::Enum#1 {index:#C9, _name:#C10}
  #C21 = <self::Enum#1*>[#C18, #C19, #C20]
  #C22 = self::Enum {index:#C1, _name:#C13}
  #C23 = self::Enum {index:#C6, _name:#C2}
  #C24 = self::Enum {index:#C9, _name:#C7}
  #C25 = <self::Enum*>[#C22, #C23, #C24]
  #C26 = self::AnotherEnum {index:#C1, _name:#C2}
  #C27 = self::AnotherEnum {index:#C6, _name:#C7}
  #C28 = self::AnotherEnum {index:#C9, _name:#C10}
  #C29 = 3
  #C30 = "_name"
  #C31 = self::AnotherEnum {index:#C29, _name:#C30}
  #C32 = 4
  #C33 = "index"
  #C34 = self::AnotherEnum {index:#C32, _name:#C33}
  #C35 = <self::AnotherEnum*>[#C26, #C27, #C28, #C31, #C34]
}


Constructor coverage from constants:
org-dartlang-testcase:///duplicated_declarations.dart:
- Enum#1. (from org-dartlang-testcase:///duplicated_declarations.dart:85:6)
- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- Enum. (from org-dartlang-testcase:///duplicated_declarations.dart:78:6)
- AnotherEnum. (from org-dartlang-testcase:///duplicated_declarations.dart:91:6)
