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

static method test(core::Object? o) → core::String {
  core::String toReturn = "";
  #L1:
  {
    final synthesized core::Object? #0#0 = o;
    synthesized core::Object? #0#14;
    synthesized core::bool #0#14#isSet = false;
    {
      if(#0#0 is core::List<core::Object?> && #0#0{core::List<core::Object?>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && #C2 =={core::num::==}{(core::Object) → core::bool} #0#0{core::List<core::Object?>}.{core::List::[]}(0){(core::int) → core::Object?} && #C1 =={core::num::==}{(core::Object) → core::bool} #0#0{core::List<core::Object?>}.{core::List::[]}(1){(core::int) → core::Object?}) {
        {
          toReturn = "list";
          break #L1;
        }
      }
    }
    {
      if(#0#0 is core::Map<core::Object?, core::Object?> && (!((#0#14#isSet ?{core::Object?} #0#14{core::Object?} : let final dynamic #t1 = #0#14#isSet = true in #0#14 = #0#0{core::Map<core::Object?, core::Object?>}.{core::Map::[]}(#C3){(core::Object?) → core::Object?}) == null) || null is core::Object? && #0#0{core::Map<core::Object?, core::Object?>}.{core::Map::containsKey}(#C3){(core::Object?) → core::bool}) && (let final dynamic #t2 = #0#14#isSet ?{core::Object?} #0#14{core::Object?} : let final dynamic #t3 = #0#14#isSet = true in #0#14 = #0#0{core::Map<core::Object?, core::Object?>}.{core::Map::[]}(#C3){(core::Object?) → core::Object?} in true)) {
        {
          toReturn = "map";
          break #L1;
        }
      }
    }
    {
      {
        {
          toReturn = "default";
        }
      }
    }
  }
  return toReturn;
}
static method main() → dynamic {
  self::expect("list", self::test(<core::int>[1, 2]));
  self::expect("map", self::test(<core::String, core::int>{"key1": 1}));
}
static method expect(dynamic expected, dynamic actual) → dynamic {
  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
    throw "Expected ${expected}, actual ${actual}";
  }
}

constants  {
  #C1 = 2
  #C2 = 1
  #C3 = "key1"
}
