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

class C<E extends core::Object = dynamic> extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
  method barA([(self::C::E, self::C::E) → core::int cmp = null]) → void {
    self::foo<self::C::E>(this, let final (self::C::E, self::C::E) → core::int #t1 = cmp in #t1.==(null) ?{(self::C::E, self::C::E) → core::int} self::C::_default : #t1);
  }
  method barB([(self::C::E, self::C::E) → core::int cmp = null]) → void {
    self::foo<self::C::E>(this, let final (self::C::E, self::C::E) → core::int #t2 = cmp in #t2.==(null) ?{(self::C::E, self::C::E) → core::int} self::C::_default as (self::C::E, self::C::E) → core::int : #t2);
  }
  method barC([(self::C::E, self::C::E) → core::int cmp = null]) → void {
    (self::C::E, self::C::E) → core::int v = self::C::_default;
    self::foo<self::C::E>(this, let final (self::C::E, self::C::E) → core::int #t3 = cmp in #t3.==(null) ?{(self::C::E, self::C::E) → core::int} v : #t3);
  }
  method barD([(self::C::E, self::C::E) → core::int cmp = null]) → void {
    self::foo<self::C::E>(this, let final (self::C::E, self::C::E) → core::int #t4 = cmp in #t4.==(null) ?{(self::C::E, self::C::E) → core::int} self::C::_default : #t4);
  }
  method barE([(self::C::E, self::C::E) → core::int cmp = null]) → void {
    self::foo<self::C::E>(this, cmp.{core::Object::==}(null) ?{(self::C::E, self::C::E) → core::int} self::C::_default : cmp);
  }
  method barF([(self::C::E, self::C::E) → core::int cmp = null]) → void {
    self::foo<self::C::E>(this, !cmp.{core::Object::==}(null) ?{(self::C::E, self::C::E) → core::int} cmp : self::C::_default);
  }
  static method _default(dynamic a, dynamic b) → core::int {
    return 1.{core::int::unary-}();
  }
}
static method foo<E extends core::Object = dynamic>(self::C<self::foo::E> c, (self::foo::E, self::foo::E) → core::int cmp) → void {}
static method main() → dynamic {}
