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

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

static method main() → dynamic
  ;

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

class Enum extends core::Object /*isEnum*/  {
  final field core::int index;
  final field core::String _name;
  static const field core::List<self2::Enum> values = #C4;
  static const field self2::Enum a = #C3;
  const constructor •(core::int index, core::String _name) → self2::Enum
    : self2::Enum::index = index, self2::Enum::_name = _name, super core::Object::•()
    ;
  method toString() → core::String
    return this.{self2::Enum::_name};
}
class Class extends core::Object {
  synthetic constructor •() → self2::Class
    ;
  method method(self2::Enum e) → core::int
    ;
}

constants  {
  #C1 = 0
  #C2 = "Enum.a"
  #C3 = self2::Enum {index:#C1, _name:#C2}
  #C4 = <self2::Enum*>[#C3]
}


Constructor coverage from constants:
org-dartlang-testcase:///main_lib.dart:
- Enum. (from org-dartlang-testcase:///main_lib.dart:5:6)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
