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

class C<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
  const constructor •() → self::C<self::C::T%>
    : super core::Object::•()
    ;
}
static method main() → void {
  hoisted has-declared-initializer core::int a1;
  {
    final synthesized dynamic #0#0 = <self::C<core::String>, core::int>{#C1: 1};
    if(!(#0#0{core::Map<self::C<core::String>, core::int>}.{core::Map::containsKey}(#C1){(core::Object?) → core::bool} && (let final dynamic #t1 = a1 = #0#0{core::Map<self::C<core::String>, core::int>}.{core::Map::[]}(#C1){(core::Object?) → core::int?} as{Unchecked} core::int in true)))
      throw new core::StateError::•("Pattern matching error");
  }
}

constants  {
  #C1 = self::C<core::String*> {}
}


Constructor coverage from constants:
org-dartlang-testcase:///issue51523.dart:
- C. (from org-dartlang-testcase:///issue51523.dart:6:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
