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};
    late final synthesized core::num? #0#3 = #0#0.{core::Map::[]}(#C1){(core::Object?) → core::num?};
    if(!(#0#0.{core::Map::containsKey}(#C1){(core::Object?) → core::bool} && (#0#3 is core::num? && (let final dynamic #t1 = v1 = #0#3 in true)) && #0#0.{core::Map::containsKey}(#C2){(core::Object?) → core::bool} && (let final dynamic #t2 = #0#0.{core::Map::[]}(#C2){(core::Object?) → core::num?} in true) && (let final dynamic #t3 = map = #0#0 in true)))
      throw 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
}
