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 core::Map<self::C<core::String>, core::int> #0#0 = <self::C<core::String>, core::int>{#C1: 1};
    synthesized core::int? #0#3;
    synthesized core::bool #0#3#isSet = false;
    final const synthesized self::C<core::String> #0#1 = #C1;
    if(!((!((#0#3#isSet ?{core::int?} #0#3 : let final dynamic #t1 = #0#3#isSet = true in #0#3 = #0#0.{core::Map::[]}(#C1){(core::Object?) → core::int?}) == null) || null is core::int && #0#0.{core::Map::containsKey}(#C1){(core::Object?) → core::bool}) && (let final dynamic #t2 = a1 = (#0#3#isSet ?{core::int?} #0#3 : let final dynamic #t3 = #0#3#isSet = true in #0#3 = #0#0.{core::Map::[]}(#C1){(core::Object?) → core::int?}) as{Unchecked} core::int in true)))
      throw{for-error-handling} 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)
