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 synthetic 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)
