library;
//
// Problems in library:
//
// pkg/front_end/testcases/patterns/issue50897.dart:16:28: Error: A pattern field in an object pattern must be named.
// Try adding a pattern name or ':' before the pattern.
//     {13: Square(size: Unit(1))} => "object",
//                            ^
//
import self as self;
import "dart:core" as core;

abstract class Square extends core::Object {
  synthetic constructor •() → self::Square
    : super core::Object::•()
    ;
  abstract get size() → self::Unit;
}
class Unit extends core::Object /*hasConstConstructor*/  {
  final field core::double value;
  const constructor •(initializing-formal core::double value) → self::Unit
    : self::Unit::value = value, super core::Object::•()
    ;
}
static method test(core::Map<dynamic, dynamic> map) → core::String {
  return block {
    core::String #t1;
    final synthesized core::Map<dynamic, dynamic> #0#0 = map;
    synthesized dynamic #0#3;
    synthesized core::bool #0#3#isSet = false;
    final const synthesized core::int #0#1 = #C1;
    #L1:
    {
      {
        if((!((#0#3#isSet ?{dynamic} #0#3 : let final dynamic #t2 = #0#3#isSet = true in #0#3 = #0#0.{core::Map::[]}(#C1){(core::Object?) → dynamic}) == null) || null is dynamic && #0#0.{core::Map::containsKey}(#C1){(core::Object?) → core::bool}) && ((#0#3#isSet ?{dynamic} #0#3 : let final dynamic #t3 = #0#3#isSet = true in #0#3 = #0#0.{core::Map::[]}(#C1){(core::Object?) → dynamic}) is self::Square && (let final dynamic #t4 = ((#0#3#isSet ?{dynamic} #0#3 : let final dynamic #t5 = #0#3#isSet = true in #0#3 = #0#0.{core::Map::[]}(#C1){(core::Object?) → dynamic}) as{Unchecked} self::Square).{self::Square::size}{self::Unit} in true))) {
          #t1 = "object";
          break #L1;
        }
      }
      {
        if(true) {
          #t1 = "default";
          break #L1;
        }
      }
    }
  } =>#t1;
}

constants  {
  #C1 = 13
}
