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

static method test(dynamic x) → dynamic {
  #L1:
  {
    final synthesized dynamic #0#0 = x;
    synthesized core::bool #0#4;
    synthesized core::bool #0#4#isSet = false;
    synthesized dynamic #0#6;
    synthesized core::bool #0#6#isSet = false;
    dynamic #t1;
    {
      lowered final hoisted core::int a#case#0;
      lowered final hoisted core::int a#case#1;
      if(#0#0 is core::List<dynamic> && (#0#4#isSet ?{core::bool} #0#4 : let final dynamic #t2 = #0#4#isSet = true in #0#4 = #0#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1) && ((#0#6#isSet ?{dynamic} #0#6 : let final dynamic #t3 = #0#6#isSet = true in #0#6 = #0#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) is core::int && (let final dynamic #t4 = a#case#0 = (#0#6#isSet ?{dynamic} #0#6 : let final dynamic #t5 = #0#6#isSet = true in #0#6 = #0#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) as{Unchecked} core::int in true)) && (let final dynamic #t6 = #t1 = a#case#0 in true) || #0#0 is core::int && (let final dynamic #t7 = a#case#1 = #0#0{core::int} in true) && (let final dynamic #t8 = #t1 = a#case#1 in true)) {
        final core::int a = #t1{core::int};
        {
          return a;
        }
      }
    }
    {
      final hoisted core::String a;
      if(#0#0 is core::List<dynamic> && (#0#4#isSet ?{core::bool} #0#4 : let final dynamic #t9 = #0#4#isSet = true in #0#4 = #0#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1) && ((#0#6#isSet ?{dynamic} #0#6 : let final dynamic #t10 = #0#6#isSet = true in #0#6 = #0#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) is core::String && (let final dynamic #t11 = a = (#0#6#isSet ?{dynamic} #0#6 : let final dynamic #t12 = #0#6#isSet = true in #0#6 = #0#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) as{Unchecked} core::String in true)) || #0#0 is core::String && (let final dynamic #t13 = a = #0#0{core::String} in true)) {
        {
          return a;
        }
      }
    }
    {
      {
        {
          return null;
        }
      }
    }
  }
}
static method main() → dynamic {
  self::expectEquals(self::test(0), 0);
  self::expectEquals(self::test(<core::int>[0]), 0);
  self::expectEquals(self::test("foo"), "foo");
  self::expectEquals(self::test(<core::String>["foo"]), "foo");
  self::expectEquals(self::test(3.14), null);
}
static method expectEquals(dynamic x, dynamic y) → dynamic {
  if(!(x =={core::Object::==}{(core::Object) → core::bool} y)) {
    throw "Expected '${x}' to be equal to '${x}'.";
  }
}

constants  {
  #C1 = 1
}
