library /*isNonNullableByDefault*/;
import self as self;
import "const_lib.dart" as con;
import "dart:core" as core;

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

static const field con::B crossModule = #C3;
static method main() → dynamic {
  self::expect(2.71, #C3.{con::A::d}{core::double});
  self::expect("default", #C3.{con::A::s}{core::String});
}
static method expect(dynamic expected, dynamic actual) → dynamic {
  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
    throw "Expected ${expected}, actual ${actual}";
}

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

abstract class A extends core::Object /*hasConstConstructor*/  {
  final field core::double d;
  final field core::String s;
  const constructor •({core::double d = #C4, core::String s = #C2}) → con::A
    : con::A::d = d, con::A::s = s, super core::Object::•()
    ;
}
abstract class _B&A&M extends con::A implements con::M /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •({core::double d = #C4, core::String s = #C2}) → con::_B&A&M
    : super con::A::•(d: d, s: s)
    ;
  method m1() → dynamic {}
}
class B extends con::_B&A&M /*hasConstConstructor*/  {
  const constructor •({core::double d = #C1}) → con::B
    : super con::_B&A&M::•(d: d)
    ;
}
abstract class M extends con::A /*isMixinDeclaration*/  {
  method m1() → dynamic {}
}

constants  {
  #C1 = 2.71
  #C2 = "default"
  #C3 = con::B {d:#C1, s:#C2}
  #C4 = 3.14
}


Constructor coverage from constants:
org-dartlang-testcase:///main.dart:
- B. (from org-dartlang-testcase:///const_lib.dart:16:9)
- _B&A&M. (from org-dartlang-testcase:///const_lib.dart:15:7)
- A. (from org-dartlang-testcase:///const_lib.dart:6:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
