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 = const self2::EnumLike::_(0);
  static const field self2::EnumLike b = const self2::EnumLike::_(1);
  static const field core::List<self2::EnumLike> values = const <self2::EnumLike>[self2::EnumLike::a, self2::EnumLike::b];
  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);
  @core::override
  abstract operator ==(core::Object other) → core::bool;
  @core::override
  get hashCode() → core::int
    ;
}

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

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

static method method(self2::EnumLike e) → dynamic
  ;


Extra constant evaluation status:
Evaluated: StaticGet @ org-dartlang-testcase:///main_lib1.dart:10:4 -> InstanceConstant(const _Override{})
Evaluated: StaticGet @ org-dartlang-testcase:///main_lib1.dart:13:4 -> InstanceConstant(const _Override{})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///main_lib1.dart:16:35 -> InstanceConstant(const EnumLike{EnumLike.value: 0.0})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///main_lib1.dart:17:35 -> InstanceConstant(const EnumLike{EnumLike.value: 1.0})
Evaluated: ListLiteral @ org-dartlang-testcase:///main_lib1.dart:19:40 -> ListConstant(const <EnumLike>[const EnumLike{EnumLike.value: 0.0}, const EnumLike{EnumLike.value: 1.0}])
Extra constant evaluation: evaluated: 8, effectively constant: 5
