library;
//
// Problems in library:
//
// pkg/front_end/testcases/patterns/issue51313.dart:8:11: Error: A value of type 'Map<Object, num?>' can't be assigned to a variable of type 'int'.
//  - 'Map' is from 'dart:core'.
//  - 'Object' is from 'dart:core'.
//   int i = map; // Error
//           ^
//
import self as self;
import "dart:core" as core;

static method test() → void {
  hoisted has-declared-initializer core::num? v1;
  hoisted has-declared-initializer core::Map<core::Object, core::num?> map;
  {
    final synthesized core::Map<core::Object, core::num?> #0#0 = <core::Object, core::num?>{"one": 1, 2: 2};
    synthesized core::num? #0#3;
    synthesized core::bool #0#3#isSet = false;
    synthesized core::num? #0#6;
    synthesized core::bool #0#6#isSet = false;
    if(!((!((#0#3#isSet ?{core::num?} #0#3{core::num?} : let final dynamic #t1 = #0#3#isSet = true in #0#3 = #0#0.{core::Map::[]}(#C1){(core::Object?) → core::num?}) == null) || null is core::num? && #0#0.{core::Map::containsKey}(#C1){(core::Object?) → core::bool}) && ((#0#3#isSet ?{core::num?} #0#3{core::num?} : let final dynamic #t2 = #0#3#isSet = true in #0#3 = #0#0.{core::Map::[]}(#C1){(core::Object?) → core::num?}) is core::num? && (let final dynamic #t3 = v1 = #0#3#isSet ?{core::num?} #0#3{core::num?} : let final dynamic #t4 = #0#3#isSet = true in #0#3 = #0#0.{core::Map::[]}(#C1){(core::Object?) → core::num?} in true)) && (!((#0#6#isSet ?{core::num?} #0#6{core::num?} : let final dynamic #t5 = #0#6#isSet = true in #0#6 = #0#0.{core::Map::[]}(#C2){(core::Object?) → core::num?}) == null) || null is core::num? && #0#0.{core::Map::containsKey}(#C2){(core::Object?) → core::bool}) && (let final dynamic #t6 = #0#6#isSet ?{core::num?} #0#6{core::num?} : let final dynamic #t7 = #0#6#isSet = true in #0#6 = #0#0.{core::Map::[]}(#C2){(core::Object?) → core::num?} in true) && (let final dynamic #t8 = map = #0#0 in true)))
      throw{for-error-handling} new core::StateError::•("Pattern matching error");
  }
  core::print(map.{core::Object::runtimeType}{core::Type});
  core::int i = invalid-expression "pkg/front_end/testcases/patterns/issue51313.dart:8:11: Error: A value of type 'Map<Object, num?>' can't be assigned to a variable of type 'int'.
 - 'Map' is from 'dart:core'.
 - 'Object' is from 'dart:core'.
  int i = map; // Error
          ^" in map as{TypeError} core::int;
}

constants  {
  #C1 = "one"
  #C2 = 2
}
