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

import "org-dartlang-testcase:///const_constructor_coverage_lib1.dart";
import "org-dartlang-testcase:///const_constructor_coverage_lib2.dart";

static const field con::Foo foo1 = #C4;
static const field con::Foo foo2 = #C4;
static const field con::Foo foo3 = #C4;
static const field con::Foo foo4 = #C4;
static method main() → dynamic {
  core::print(#C4);
}

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

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

class Foo extends core::Object /*hasConstConstructor*/  {
  final field con::Bar bar;
  const constructor •() → con::Foo
    : con::Foo::bar = #C3, super core::Object::•()
    ;
  const constructor named1() → con::Foo
    : con::Foo::bar = #C3, super core::Object::•()
    ;
  const constructor named2() → con::Foo
    : con::Foo::bar = #C3, super core::Object::•()
    ;
  const constructor named3() → con::Foo
    : con::Foo::bar = #C3, super core::Object::•()
    ;
}
class Bar extends core::Object /*hasConstConstructor*/  {
  final field con2::Baz baz;
  const constructor •() → con::Bar
    : con::Bar::baz = #C2, super core::Object::•()
    ;
  const constructor named1() → con::Bar
    : con::Bar::baz = #C2, super core::Object::•()
    ;
  const constructor named2() → con::Bar
    : con::Bar::baz = #C2, super core::Object::•()
    ;
  const constructor named3() → con::Bar
    : con::Bar::baz = #C2, super core::Object::•()
    ;
  const constructor named4(core::int i) → con::Bar
    : con::Bar::baz = i.{core::num::>}(0){(core::num) → core::bool} ?{con2::Baz} #C2 : #C2, super core::Object::•()
    ;
}
static const field con::Foo foo = #C4;

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

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

class Baz extends core::Object /*hasConstConstructor*/  {
  final field con::Bar? bar;
  const constructor •() → con2::Baz
    : con2::Baz::bar = null, super core::Object::•()
    ;
  const constructor named1() → con2::Baz
    : con2::Baz::bar = null, super core::Object::•()
    ;
  const constructor named2() → con2::Baz
    : con2::Baz::bar = null, super core::Object::•()
    ;
  const constructor named3() → con2::Baz
    : con2::Baz::bar = #C3, super core::Object::•()
    ;
  const constructor named4() → con2::Baz
    : con2::Baz::bar = null, super core::Object::•()
    ;
  const constructor named5() → con2::Baz
    : con2::Baz::bar = null, super core::Object::•()
    ;
  const constructor named6() → con2::Baz
    : con2::Baz::bar = null, super core::Object::•()
    ;
}
static const field con2::Baz baz = #C2;
static const field con::Foo foo = #C4;
static const field con::Bar bar = #C3;

constants  {
  #C1 = null
  #C2 = con2::Baz {bar:#C1}
  #C3 = con::Bar {baz:#C2}
  #C4 = con::Foo {bar:#C3}
}


Constructor coverage from constants:
org-dartlang-testcase:///const_constructor_coverage.dart:
- Foo. (from org-dartlang-testcase:///const_constructor_coverage_lib1.dart:9:15)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- Foo.named1 (from org-dartlang-testcase:///const_constructor_coverage_lib1.dart:10:15)
- Foo.named2 (from org-dartlang-testcase:///const_constructor_coverage_lib1.dart:11:15)
- Foo.named3 (from org-dartlang-testcase:///const_constructor_coverage_lib1.dart:12:15)

org-dartlang-testcase:///const_constructor_coverage_lib1.dart:
- Bar. (from org-dartlang-testcase:///const_constructor_coverage_lib1.dart:17:15)
- Baz. (from org-dartlang-testcase:///const_constructor_coverage_lib2.dart:9:15)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- Bar.named1 (from org-dartlang-testcase:///const_constructor_coverage_lib1.dart:18:15)
- Baz.named1 (from org-dartlang-testcase:///const_constructor_coverage_lib2.dart:10:15)
- Baz.named5 (from org-dartlang-testcase:///const_constructor_coverage_lib2.dart:14:15)
- Baz.named6 (from org-dartlang-testcase:///const_constructor_coverage_lib2.dart:15:15)
- Foo.named3 (from org-dartlang-testcase:///const_constructor_coverage_lib1.dart:12:15)

org-dartlang-testcase:///const_constructor_coverage_lib2.dart:
- Bar.named3 (from org-dartlang-testcase:///const_constructor_coverage_lib1.dart:20:15)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- Baz.named4 (from org-dartlang-testcase:///const_constructor_coverage_lib2.dart:13:15)
- Foo.named2 (from org-dartlang-testcase:///const_constructor_coverage_lib1.dart:11:15)
- Bar.named2 (from org-dartlang-testcase:///const_constructor_coverage_lib1.dart:19:15)
