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

class Foo<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
  final field self::Foo::T% a;
  const constructor •(self::Foo::T% a) → self::Foo<self::Foo::T%>
    : self::Foo::a = a, super core::Object::•()
    ;
}
class Generic<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
  final field (self::Generic::T%, self::Generic::T%) record;
  const constructor •(self::Generic::T% a) → self::Generic<self::Generic::T%>
    : self::Generic::record = (a, a), super core::Object::•()
    ;
}
class NotGeneric extends core::Object /*hasConstConstructor*/  {
  final field (core::int, core::int) record;
  const constructor •(core::int a) → self::NotGeneric
    : self::NotGeneric::record = (a, a), super core::Object::•()
    ;
}
static method main() → void {
  #C2;
  #C4;
  #C4;
  #C5;
}

constants  {
  #C1 = 1
  #C2 = self::Foo<core::int> {a:#C1}
  #C3 = (#C1, #C1)
  #C4 = self::Generic<core::int> {record:#C3}
  #C5 = self::NotGeneric {record:#C3}
}


Constructor coverage from constants:
org-dartlang-testcase:///issue52385.dart:
- Foo. (from org-dartlang-testcase:///issue52385.dart:8:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
- Generic. (from org-dartlang-testcase:///issue52385.dart:14:9)
- NotGeneric. (from org-dartlang-testcase:///issue52385.dart:20:9)
