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

class A<T extends core::Object? = dynamic> extends core::Object {
  final field self::A::T% foo;
  constructor •(self::A::T% foo) → self::A<self::A::T%>
    : self::A::foo = foo, super core::Object::•()
    ;
}
class B extends core::Object {
  final field core::num foo;
  constructor •(core::num foo) → self::B
    : self::B::foo = foo, super core::Object::•()
    ;
}
class C extends core::Object implements self::A<core::int>, self::B {
  final field core::int foo;
  constructor •(core::int foo) → self::C
    : self::C::foo = foo, super core::Object::•()
    ;
}
static method test(dynamic o) → dynamic {
  #L1:
  {
    final synthesized dynamic #0#0 = o;
    synthesized core::bool #0#4;
    synthesized core::bool #0#4#isSet = false;
    final const synthesized core::int #0#3 = #C1;
    final const synthesized core::int #0#7 = #C2;
    synthesized dynamic #0#6;
    synthesized core::bool #0#6#isSet = false;
    final const synthesized core::int #0#10 = #C3;
    synthesized dynamic #0#9;
    synthesized core::bool #0#9#isSet = false;
    final const synthesized core::int #0#17 = #C4;
    synthesized dynamic #0#22;
    synthesized core::bool #0#22#isSet = false;
    final const synthesized core::String #0#20 = #C5;
    synthesized core::bool #0#21;
    synthesized core::bool #0#21#isSet = false;
    final const synthesized core::int #0#23 = #C6;
    final const synthesized core::int #0#25 = #C7;
    final const synthesized core::int #0#28 = #C8;
    synthesized dynamic #0#31;
    synthesized core::bool #0#31#isSet = false;
    final const synthesized core::int #0#38 = #C9;
    {
      if(#0#0 is core::List<dynamic> && (#0#4#isSet ?{core::bool} #0#4 : let final dynamic #t1 = #0#4#isSet = true in #0#4 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::>=}(#C1){(core::num) → core::bool}) && #C2 =={core::num::==}{(core::Object) → core::bool} (#0#6#isSet ?{dynamic} #0#6 : let final dynamic #t2 = #0#6#isSet = true in #0#6 = #0#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) && #C3 =={core::num::==}{(core::Object) → core::bool} (#0#9#isSet ?{dynamic} #0#9 : let final dynamic #t3 = #0#9#isSet = true in #0#9 = #0#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic})) {
        {
          return 0;
        }
      }
    }
    {
      if(#0#0 is core::List<dynamic> && (#0#4#isSet ?{core::bool} #0#4 : let final dynamic #t4 = #0#4#isSet = true in #0#4 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::>=}(#C1){(core::num) → core::bool}) && #C3 =={core::num::==}{(core::Object) → core::bool} (#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}) && #C1 =={core::num::==}{(core::Object) → core::bool} (#0#9#isSet ?{dynamic} #0#9 : let final dynamic #t6 = #0#9#isSet = true in #0#9 = #0#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic})) {
        {
          return 1;
        }
      }
    }
    {
      if(#0#0 is core::List<core::int> && (#0#4#isSet ?{core::bool} #0#4 : let final dynamic #t7 = #0#4#isSet = true in #0#4 = #0#0{core::List<core::int>}.{core::List::length}{core::int}.{core::num::>=}(#C1){(core::num) → core::bool}) && #C1 =={core::num::==}{(core::Object) → core::bool} (#0#6#isSet ?{core::int} #0#6{core::int} : let final dynamic #t8 = #0#6#isSet = true in #0#6 = #0#0{core::List<core::int>}.{core::List::[]}(0){(core::int) → core::int}) && #C4 =={core::num::==}{(core::Object) → core::bool} (#0#9#isSet ?{core::int} #0#9{core::int} : let final dynamic #t9 = #0#9#isSet = true in #0#9 = #0#0{core::List<core::int>}.{core::List::[]}(1){(core::int) → core::int})) {
        {
          return 2;
        }
      }
    }
    {
      if(#0#0 is core::Map<dynamic, dynamic> && (!((#0#22#isSet ?{dynamic} #0#22 : let final dynamic #t10 = #0#22#isSet = true in #0#22 = #0#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C5){(core::Object?) → dynamic}) == null) || null is dynamic && (#0#21#isSet ?{core::bool} #0#21 : let final dynamic #t11 = #0#21#isSet = true in #0#21 = #0#0{core::Map<dynamic, dynamic>}.{core::Map::containsKey}(#C5){(core::Object?) → core::bool})) && #C6 =={core::num::==}{(core::Object) → core::bool} (#0#22#isSet ?{dynamic} #0#22 : let final dynamic #t12 = #0#22#isSet = true in #0#22 = #0#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C5){(core::Object?) → dynamic})) {
        {
          return 3;
        }
      }
    }
    {
      if(#0#0 is core::Map<dynamic, dynamic> && (!((#0#22#isSet ?{dynamic} #0#22 : let final dynamic #t13 = #0#22#isSet = true in #0#22 = #0#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C5){(core::Object?) → dynamic}) == null) || null is dynamic && (#0#21#isSet ?{core::bool} #0#21 : let final dynamic #t14 = #0#21#isSet = true in #0#21 = #0#0{core::Map<dynamic, dynamic>}.{core::Map::containsKey}(#C5){(core::Object?) → core::bool})) && #C7 =={core::num::==}{(core::Object) → core::bool} (#0#22#isSet ?{dynamic} #0#22 : let final dynamic #t15 = #0#22#isSet = true in #0#22 = #0#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C5){(core::Object?) → dynamic})) {
        {
          return 4;
        }
      }
    }
    {
      if(#0#0 is core::Map<core::String, core::int> && (!((#0#22#isSet ?{core::int?} #0#22{core::int?} : let final dynamic #t16 = #0#22#isSet = true in #0#22 = #0#0{core::Map<core::String, core::int>}.{core::Map::[]}(#C5){(core::Object?) → core::int?}) == null) || null is core::int && (#0#21#isSet ?{core::bool} #0#21 : let final dynamic #t17 = #0#21#isSet = true in #0#21 = #0#0{core::Map<core::String, core::int>}.{core::Map::containsKey}(#C5){(core::Object?) → core::bool})) && #C8 =={core::num::==}{(core::Object) → core::bool} (#0#22#isSet ?{core::int?} #0#22{core::int?} : let final dynamic #t18 = #0#22#isSet = true in #0#22 = #0#0{core::Map<core::String, core::int>}.{core::Map::[]}(#C5){(core::Object?) → core::int?}) as{Unchecked} core::int) {
        {
          return 5;
        }
      }
    }
    {
      if(#0#0 is self::A<dynamic> && #C6 =={core::num::==}{(core::Object) → core::bool} (#0#31#isSet ?{dynamic} #0#31 : let final dynamic #t19 = #0#31#isSet = true in #0#31 = #0#0{self::A<dynamic>}.{self::A::foo}{dynamic})) {
        {
          return 6;
        }
      }
    }
    {
      if(#0#0 is self::A<core::int> && #C7 =={core::num::==}{(core::Object) → core::bool} (#0#31#isSet ?{core::int} #0#31{core::int} : let final dynamic #t20 = #0#31#isSet = true in #0#31 = #0#0{self::A<core::int>}.{self::A::foo}{core::int})) {
        {
          return 7;
        }
      }
    }
    {
      if(#0#0 is self::B && #C8 =={core::num::==}{(core::Object) → core::bool} (#0#31#isSet ?{core::num} #0#31{core::num} : let final dynamic #t21 = #0#31#isSet = true in #0#31 = #0#0{self::B}.{self::B::foo}{core::num})) {
        {
          return 8;
        }
      }
    }
    {
      if(#0#0 is ({foo: core::Object?}) && #C9 =={core::num::==}{(core::Object) → core::bool} (#0#31#isSet ?{core::Object?} #0#31{core::Object?} : let final dynamic #t22 = #0#31#isSet = true in #0#31 = #0#0{({foo: core::Object?})}.foo{core::Object?})) {
        {
          return 9;
        }
      }
    }
  }
  return 1.{core::int::unary-}(){() → core::int};
}
static method main() → dynamic {
  self::expect(0, self::test(<core::int>[0, 1]));
  self::expect(0, self::test(<core::int>[0, 1, 2]));
  self::expect(1, self::test(<core::int>[1, 2]));
  self::expect(1, self::test(<core::int>[1, 2, 3]));
  self::expect(2, self::test(<core::int>[2, 3]));
  self::expect(2, self::test(<core::int>[2, 3, 4]));
  self::expect(1.{core::int::unary-}(){() → core::int}, self::test(<core::num>[2, 3]));
  self::expect(3, self::test(<core::String, core::int>{"foo": 5}));
  self::expect(3, self::test(<core::String, core::int>{"foo": 5, "bar": 6}));
  self::expect(4, self::test(<core::String, core::int>{"foo": 6}));
  self::expect(4, self::test(<core::String, core::int>{"foo": 6, "bar": 7}));
  self::expect(5, self::test(<core::String, core::int>{"foo": 7}));
  self::expect(5, self::test(<core::String, core::int>{"foo": 7, "bar": 8}));
  self::expect(1.{core::int::unary-}(){() → core::int}, self::test(<core::String, core::num>{"foo": 7}));
  self::expect(6, self::test(new self::A::•<core::num>(5)));
  self::expect(6, self::test(new self::A::•<core::int>(5)));
  self::expect(1.{core::int::unary-}(){() → core::int}, self::test(new self::A::•<core::num>(6)));
  self::expect(7, self::test(new self::A::•<core::int>(6)));
  self::expect(1.{core::int::unary-}(){() → core::int}, self::test(new self::A::•<core::int>(7)));
  self::expect(1.{core::int::unary-}(){() → core::int}, self::test(new self::B::•(5)));
  self::expect(1.{core::int::unary-}(){() → core::int}, self::test(new self::B::•(6)));
  self::expect(8, self::test(new self::B::•(7)));
  self::expect(6, self::test(new self::C::•(5)));
  self::expect(7, self::test(new self::C::•(6)));
  self::expect(8, self::test(new self::C::•(7)));
  self::expect(1.{core::int::unary-}(){() → core::int}, self::test(new self::C::•(8)));
  self::expect(9, self::test(({foo: 8})));
  self::expect(1.{core::int::unary-}(){() → core::int}, self::test(({foo: 9})));
}
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 = 0
  #C3 = 1
  #C4 = 3
  #C5 = "foo"
  #C6 = 5
  #C7 = 6
  #C8 = 7
  #C9 = 8
}
