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

class A<X extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
  final field core::List<self::A::X%> x;
  const constructor •(dynamic x) → self::A<self::A::X%>
    : self::A::x = x is core::List<self::A::X%> ?{core::List<self::A::X%>} x{core::List<self::A::X%>} : x as core::List<self::A::X%>, super core::Object::•()
    ;
}
class B<X extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
  final field (self::B::X%) → void f;
  const constructor •() → self::B<self::B::X%>
    : self::B::f = #C1<self::B::X%>, super core::Object::•()
    ;
}
class C<X extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
  final field dynamic f;
  const constructor •() → self::C<self::C::X%>
    : self::C::f = #C1<self::C::X%>, super core::Object::•()
    ;
}
static method m<X extends core::Object? = dynamic>(self::m::X% x) → void {}
static method main() → void {
  #C4;
  core::print((#C6.{self::B::f}{(core::String) → void} as{TypeError,CovarianceCheck} (core::String) → void).{core::Object::runtimeType}{core::Type});
  core::print(#C7.{self::C::f}{dynamic}.{core::Object::runtimeType}{<object>}.{core::Type});
}

constants  {
  #C1 = static-tearoff self::m
  #C2 = 1
  #C3 = <core::int>[#C2]
  #C4 = self::A<core::int> {x:#C3}
  #C5 = instantiation #C1 <core::String>
  #C6 = self::B<core::String> {f:#C5}
  #C7 = self::C<core::String> {f:#C5}
}


Constructor coverage from constants:
org-dartlang-testcase:///issue47154c.dart:
- A. (from org-dartlang-testcase:///issue47154c.dart:8:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
- B. (from org-dartlang-testcase:///issue47154c.dart:16:9)
- C. (from org-dartlang-testcase:///issue47154c.dart:22:9)
