library;
import self as self;

import "org-dartlang-testcase:///main_lib1.dart";
import "org-dartlang-testcase:///main_lib2.dart";


library;
import self as self2;
import "dart:core" as core;

class EnumLike extends core::Object /*hasConstConstructor*/  {
  final field core::int value;
  static const field self2::EnumLike a = #C2;
  static const field self2::EnumLike b = #C4;
  static const field core::List<self2::EnumLike> values = #C5;
  const constructor _(core::int value) → self2::EnumLike
    : self2::EnumLike::value = value, super core::Object::•()
    ;
  static method _#_#tearOff(core::int value) → self2::EnumLike
    return new self2::EnumLike::_(value);
  @#C6
  abstract operator ==(core::Object other) → core::bool;
  @#C6
  get hashCode() → core::int
    return this.{self2::EnumLike::value}{core::int};
}

library;
import self as self3;
import "main_lib1.dart" as self2;
import "dart:core" as core;

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

static method method(self2::EnumLike e) → dynamic {
  switch(e) /* self2::EnumLike */ {
    #L1:
    case #C2:
      {
        core::print(self2::EnumLike::a);
      }
  }
}

constants  {
  #C1 = 0.0
  #C2 = self2::EnumLike {value:#C1}
  #C3 = 1.0
  #C4 = self2::EnumLike {value:#C3}
  #C5 = <self2::EnumLike>[#C2, #C4]
  #C6 = core::_Override {}
}


Constructor coverage from constants:
org-dartlang-testcase:///main_lib1.dart:
- EnumLike._ (from org-dartlang-testcase:///main_lib1.dart:8:9)
- Object. (from org-dartlang-sdk:///lib/core/object.dart)
